7

Minikalender

minical. Ist wie meine Katze, nicht wirklich nützlich, aber niedlich.

 

let dateToday := today();
"---------------------------";
let backgroundColor := "#97b6aa";
let kw := week(dateToday);
let yr := year(dateToday);
let weekDayID := weekday(dateToday) + 1;
function allDayOfWeek(num : number,tDate : date) do
    let pos := weekday(tDate);
    let startWeekDay := date(year(tDate), month(tDate), day(tDate) - pos - 14 + 7 * num);
    let weekID := week(startWeekDay);
    for i in range(0, 7) do
        if week(date(year(startWeekDay), month(startWeekDay), day(startWeekDay)) + i) = weekID then
            format(date(year(startWeekDay), month(startWeekDay), day(startWeekDay)) + i, "DD.MM.")
        end
    end
end;
function allWeek(num : number,tDate : date) do
    let pos := weekday(tDate);
    let startWeekDay := date(year(tDate), month(tDate), day(tDate) - pos - 14 + 7 * num);
    let weekID := week(startWeekDay);
    for i in range(0, 7) do
        if week(date(year(startWeekDay), month(startWeekDay), day(startWeekDay)) + i) = weekID then
            date(year(startWeekDay), month(startWeekDay), day(startWeekDay)) + i
        end
    end
end;
let content := "
<style>
table{
    border-collapse: separate;
    border:none;
    border-radius: 1em;
    background-color:" + backgroundColor + ";
}
td,th{
    font-size:small;
    border-radius: 2em;
    text-align:center;
}
td{
    background-color: #cee5d5;
    font-family: Garamond;
    padding:.1em .3em;
}
th{
      background-color: #dec48c;
    padding:.1em .3em;
}
tr:nth-of-type(4) td:nth-of-type(" + weekDayID + "){
    background-color: #f5d793;
    font-weight: bolder;
}
.medium {
    font-size:large;
    font-weight:bold;
}
</style>
<table>
    <tr>
        <th>KW</th>
        <th>Mo</th>
        <th>Di</th>
        <th>Mi</th>
        <th>Do</th>
        <th>Fr</th>
        <th>Sa</th>
        <th>So</th>
    </tr>
" + for i in range(0, 5) do
        "<tr>
    <th class = 'medium'>" + week(first(item(allWeek(i, dateToday), i))) + "</th>" + for j in range(0, 7) do
            "<td>" + item(allDayOfWeek(i, dateToday), j) + "</td>"
        end + "
    </tr>"
    end + "
</table>
";
html(content)

15 Antworten

null
    • Ryszard_Paluch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko

    Sehr schöne Kalender. Vielen Dank

    Bei mir wird der Kalender einfach weiß angezeigt als ob die html(content) nicht abgearbeitet wurde

    Gruß Richard

    • Tacho
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Darstellung im Chrome-Webbrowser unter Microsoft 11:

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ryszard Paluch Tacho Hi. Danke für die Rückmeldungen. Meine Tests waren Win10/Firefox 107.0, Mac-App, IPAD-App und jetzt gerade noch getestet Win10/Chrome 107.0.5304.107. Bei allen habe ich die normale Anzeige, wie ich oben gepostet habe. Win11 habe ich nicht getestet. Mirko

    • Ryszard_Paluch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Mirko

    Ich habe es auf dem Mac getestet: Ninox App, IPAD-App, Firefox, Safari, Chrome alles neuste versionen - überall das selber

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Ryszard. Meine Erfahrungen mit HTML und CSS in Ninox sind, dass sie nur recht sicher funktionieren, wenn in dem Tab des Formulars sich kein weiteres Funktionsfeld mit CSS befindet - auch keines zum Verstecken von Symbolen etc.

    Hat man mehrere Funktionsfelder, dann okupiert das zuletzt stehende alle vorherigen (im günstigsten Fall), oder sie mischen sich sogar. Ganz schwierig ist es wenn das HTML-Tag <div> benutzt wird und es CSS-Formate bekommt, dann kann es sein, dass man auch die Ninox-Ansicht verändert.

    Eure Ergebnisse zeigen mir aber, dass es für praktische Anwendungen nur bedingt geeignet ist, HTML/CSS zu benutzten, oder ich bisher viel Glück hatte.

    Wärest Du so freundlich, mal diese Datei bei Dir zu testen? Sie enthält nur dieses Feld. Mirko

    • Ryszard_Paluch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Mirko

    Deine Datei funktioiniert einwandfrei.

    In meine Datenbank in mehrerer Tabellen geht nicht. Habe auch html in den Globalen Funktionen. Vielleicht ist das die Ursache.

    Vielen Dank für Deine mühen!

    Richard

    • T_Bartzsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hier die Darstellung auf Mac Chrome/Firefox und Safari

      • T_Bartzsch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      T. Bartzsch  und Standalone NINOX App Mac

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke für Eure Rückmeldungen. Es sollte eigentlich nur ein Gag sein, aber sicherheitshalber habe ich noch mal gewaschen, geschnitten, gefärbt und geföhnt. Und trotzdem - nur schick und nicht nützlich.

    "VALUES----------------------------------";
    let dateToday := today();
    function BuildArrayOfSevenDays(num : number,tDate : date) do
        let pos := weekday(tDate);
        let startWeekDay := date(year(tDate), month(tDate), day(tDate) - pos - 14 + 7 * num);
        let weekID := week(startWeekDay);
        for i in range(0, 7) do
            if week(date(year(startWeekDay), month(startWeekDay), day(startWeekDay)) + i) = weekID then
                date(year(startWeekDay), month(startWeekDay), day(startWeekDay)) + i
            end
        end
    end;
    "CSS--------------------------------------";
    let backgroundColor := "#ca5f00";
    let thBackgroundColor := "#7a9775";
    let tdBackgroundColor := "#f0ae85";
    let soBackgroundColor := "#e88243";
    let weekDayBackgroundColor := "#d1dbcf";
    let weekDayID := weekday(dateToday) + 1;
    let css := "<style>
    table{
        border-collapse: separate;
        border:none;
        border-radius: 1em;
        background-color:" + backgroundColor + ";
    }
    td,th{
        font-size:small;
        border-radius: 2em;
        text-align:center;
    }
    td{
        background-color: " + tdBackgroundColor + ";
        font-family: Garamond;
        padding:.1em .3em;
    }
    th{
          background-color: " + thBackgroundColor + ";
    }
    td:last-of-type {
        background-color: " + soBackgroundColor + ";
    }
    tr:nth-of-type(4) td:nth-of-type(" + weekDayID + "){
        background-color: " + weekDayBackgroundColor + ";
        font-weight: bolder;
    }
    .medium {
        font-size:large;
        font-weight:bold;
    }
    </style>";
    "HTML--------------------------------------";
    let content := "
    <table>
        <tr>
            <th>KW</th><th>Mo</th><th>Di</th><th>Mi</th><th>Do</th><th>Fr</th><th>Sa</th><th>So</th>
        </tr>
    " + for i in range(0, 5) do
        "<tr>
            <th class = 'medium'>" + week(first(item(BuildArrayOfSevenDays(i, dateToday), i))) + "</th>" + for j in range(0, 7) do
                "<td>" + format(item(BuildArrayOfSevenDays(i, dateToday), j), "DD.MM.") + "</td>"
            end + "
        </tr>"
        end + "
    </table>
    ";
    "RESULT------------------------------------";
    html(css + content)
    
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Kleine Verbesserungen: Jahresanzeige, Feiertage (hier Sachsen-Anhalt - beliebig anpassbar), für die Übersicht sind die nicht aktiven Monate in grauer Schrift und hat insgesamt ein bisschen zugenommen. M 

     

    "VALUES----------------------------------";
    let myDatum := DATUMFELD oder today();
    let dayArt := "";
    let weekDayID := weekday(myDatum) + 1;
    "Funktion Ostern und davon abhängige Feiertage";
    function ostern(thisDate : date) do
        let jahr := year(thisDate);
        let a := jahr % 19;
        let b := floor(jahr / 100);
        let c := jahr % 100;
        let d := floor(b / 4);
        let e := b % 4;
        let f := floor((b + 8) / 25);
        let g := floor((b - f + 1) / 3);
        let h := (19 * a + b - d - g + 15) % 30;
        let i := floor(c / 4);
        let k := c % 4;
        let l := (32 + 2 * e + 2 * i - h - k) % 7;
        let m := floor((a + 11 * h + 22 * l) / 451);
        let n := floor((h + l - 7 * m + 114) / 31);
        let p := (h + l - 7 * m + 114) % 31;
        date(jahr, n, p + 1)
    end;
    let osterSoDat := format(ostern(Dat), "DD.MM.");
    let osterMoDat := format(ostern(Dat) + 1, "DD.MM.");
    let karfreitagDat := format(ostern(Dat) - 2, "DD.MM.");
    let chrHimmelfDat := format(ostern(Dat) + 39, "DD.MM.");
    let pfingstSoDat := format(ostern(Dat) + 49, "DD.MM.");
    let pfingstMoDat := format(ostern(Dat) + 50, "DD.MM.");
    "Feiertagsarray";
    let feiertage := "03.10." + "," + "31.10." + "," + "25.12." + "," + "26.12." + "," + "06.01." + "," + "01.01." + "," + "01.05." + "," + osterSoDat + "," + chrHimmelfDat + "," + karfreitagDat + "," + pfingstSoDat + "," + pfingstMoDat + "," + osterMoDat;
    "Funktion zur Bildung des Arrays von 7 Tagen der aktuellen Kalenderwoche";
    function BuildArrayOfSevenDays(num : number,tDate : date) do
        let pos := weekday(tDate);
        let startWeekDay := date(year(tDate), month(tDate), day(tDate) - pos + 7 * num);
        let weekID := week(startWeekDay);
        for i in range(0, 7) do
            date(year(startWeekDay), month(startWeekDay), day(startWeekDay)) + i
        end
    end;
    "CSS--------------------------------------";
    let css := "<style>
    table {
        border-collapse: separate;
        border:none;
        border-spacing: .3em .5em;
        border-radius: 1.2em;
        background-color: #ca5f00;
        font-size:medium;
        font-weight:bold;
    }
    td,th {
        border-radius: 2em;
        text-align:center;
        padding:.4em .5em;
        }
    td {
        background-color: #f0ae85;
        font-family: Garamond;
    }
    th {
        background-color: #7a9775;
    }
    tr:nth-of-type(4) td:nth-of-type(" + weekDayID + "){
        background-color: #d1dbcf
    }
    tr:nth-of-type(1) th:nth-of-type(1){
        font-size:x-small
    }
    .feiertag {box-shadow: 0 0 0 .2em #7a9775; inset;}
    .otherMonth {color:#999;}
    </style>";
    "HTML--------------------------------------";
    let content := "
    <table>
        <tr><th>" + year(myDatum) + "</th><th>Mo</th><th>Di</th><th>Mi</th><th>Do</th><th>Fr</th><th>Sa</th><th>So</th></tr>
    " + for i in range(-2, 3) do
            "<tr><th>" + week(first(item(BuildArrayOfSevenDays(i, myDatum), i + 2))) + "</th>
    " + for j in range(0, 7) do
                "<td " + switch dayArt != "mirkoIsAuthor" do
                case (month(item(BuildArrayOfSevenDays(i, myDatum), j)) < month(myDatum) or month(item(BuildArrayOfSevenDays(i, myDatum), j)) > month(myDatum)) and contains(feiertage, format(item(BuildArrayOfSevenDays(i, myDatum), j), "DD.MM.")):
                    "class = 'otherMonth feiertag'"
                case month(item(BuildArrayOfSevenDays(i, myDatum), j)) < month(myDatum) or month(item(BuildArrayOfSevenDays(i, myDatum), j)) > month(myDatum):
                    "class = 'otherMonth'"
                case contains(feiertage, format(item(BuildArrayOfSevenDays(i, myDatum), j), "DD.MM.")) and month(item(BuildArrayOfSevenDays(i, myDatum), j)) = month(myDatum):
                    "class = 'feiertag'"
                end + ">" + format(item(BuildArrayOfSevenDays(i, myDatum), j), "DD.MM.") + "</td>"
            end + "</tr>"
        end + "
    </table>  ";
    "RESULT------------------------------------";
    html(css + content)
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Mit Scrollfunktion für je 4 Wochen. Leider nur mit einem verstecktem Hilfsfeld funktionstüchtig. Für mehr reicht meine Kenntnis zu Javascript leider nicht aus. Wer es in eine bestehende DB einsetzten will, benötigt die Feld-ID (hier ist es "A") für das Datenfeld "Zahl". Mirko

      • Icarus_Ralf_Becker
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko ich finde, der sieht Klasse aus. Hat jemand eventuell noch einen Tipp, wie man das Skript anpassen müsste, damit nur Daten anwählbar wären, die aus einen Ninox JSON kommen? Frohes Fest an alle. 

      • Icarus_Ralf_Becker
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Icarus - Ralf Becker Ich ergänze die Frage darum, wie es überhaupt möglich wäre, ein Datum anzuklicken und die Auswahl in ein Feld zu übertragen. Danke.

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ich habe die Scrollbalken aus dem Code wieder entfernt und dafür die Auswahlmöglichkeit des Datums über Mausklick eingefügt. Es geht sicher auch beides, aber NINOX bietet ja Button an. Der geklickte Wert füllt nun ohne Umwege ein Datumfeld. Noch immer niedlich, aber jetzt ein wenig nützlicher. Praktische Anwendungsmöglichkeiten sehe ich zwar immer noch nicht, war aber auch nicht mein Thema. Ich hoffe, mir nimmt es niemand übel, dass ich aus Javascript, nx, css und html so eine Art häßlichen pidgin-code gemacht habe. Er ist recht schwer zu lesen, ist aber auch nur eine "Machbarkeitsstudie" auf die mich Ralf gebracht hat ;-) Mirko

    • mirko3
    • vor 2 Wochen
    • Gemeldet - anzeigen

    Ein bisschen poliert und vernützlicht. Ein dchoice zur direkten Eingabe von Terminen, Warnung bei Terminüberschneidungen, Scrollbutton, Rücksprung zum Monat, Zeiteingabe, roter Punkt heißt: Termine inside. Achtung: ist nur für Ninox ab 3.14. (weil ich das dchoice mit JSON gefüllt habe - globale Funktion) und nur für eintägige Termine (ich brauche nicht mehr). Zum Basteln, Ausschlachten oder Nutzen. P.S. Mir haben sich noch nicht alle Bugs persönlich vorgestellt;-) Mirko