diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index d484a3c6c..7ece84b5c 100755 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -3203,6 +3203,21 @@ FW_widgetOverride($$) the jQuery knob widget will be displayed. The parameters are specified as a comma separated list of key:value pairs, where key does not have to contain the "data-" prefix. + +
  • if the modifier is of the form ":sortable,val1,val2,...", then + the user can create a new list from the elements of the given + list, can add new elements by entering a text, or delete some from + the list. This new list can be sorted via drag & drop. The + result is a comma separated list.
  • + +
  • if the modifier is of the form ":sortable-strict,val1,val2,...", + then it behaves like :sortable, without the possibility to enter + text.
  • + +
  • if the modifier is of the form ":sortable-given,val1,val2,...", + then the specified list can be sorted via drag & drop, no + elements can be added or deleted.
  • +
  • else a dropdown with all the modifier values is displayed
  • If this attribute is specified for a FHEMWEB instance, then it is @@ -3210,7 +3225,8 @@ FW_widgetOverride($$)
    @@ -3499,7 +3515,8 @@ FW_widgetOverride($$)
    @@ -3708,7 +3725,8 @@ FW_widgetOverride($$) Anmerkung: Wenn das Icon ein SVG Bild ist, kann das @colorname Suffix verwendet werden um das Icon einzufärben. Z.B.:
    @@ -3802,7 +3820,33 @@ FW_widgetOverride($$) jQuery knob Widget wird angezeigt. Die Parameter werden als eine Komma separierte Liste von Key:Value Paaren spezifiziert, wobei das data- Präfix entfällt. - + +
  • Ist der Modifier ":sortable,val1,val2,...", dann ist es + möglich aus den gegebenen Werten eine Liste der + gewünschten Werte durch Drag & Drop zusammenzustellen. Die + Reihenfolge der Werte kann dabei entsprechend geändert werden. + Es müssen keine Werte explizit vorgegeben werden, das Widget + kann auch ohne vorgegebenen Werte benutzt werden. Es können + eigene Werte zur Liste hinzugefügt und einsortiert werden. + Das Ergebnis ist Komma-separiert entsprechend aufsteigend + sortiert.
  • + +
  • Ist der Modifier ":sortable-strict,val1,val2,...", dann ist es + möglich aus den gegebenen Werten eine Liste der + gewünschten Werte durch Drag & Drop zusammenzustellen. Die + Reihenfolge der Werte kann dabei entsprechend geändert werden. + Es können jedoch keine eigenen Werte zur Liste + hinzugefügt werden. Das Ergebnis ist Komma-separiert + entsprechend aufsteigend sortiert.
  • + +
  • Ist der Modifier ":sortable-given,val1,val2,...", dann ist es + möglich aus den gegebenen Werten eine sortierte Liste der + gewünschten Werte durch Drag & Drop zusammenzustellen. Es + können keine Elemente gelöscht und hinzugefügt + werden. Es müssen alle gegeben Werte benutzt und entsprechend + sortiert sein. Das Ergebnis ist Komma-separiert entsprechend + aufsteigend sortiert.
  • +
  • In allen anderen Fällen (oder falls der Modified explizit mit :select anfaegt) erscheint ein HTML select mit allen Modifier Werten.
  • diff --git a/fhem/www/pgm2/darkCommon.css b/fhem/www/pgm2/darkCommon.css index 25241003d..3572afe95 100644 --- a/fhem/www/pgm2/darkCommon.css +++ b/fhem/www/pgm2/darkCommon.css @@ -4,6 +4,7 @@ div.ui-dialog { border:3px solid white; padding: 0.2em; } div.ui-dialog div.ui-dialog-titlebar { display:none; } div.ui-widget-content { background:#444444; color:#CCCCCC; } +div.ui-widget-content a {color: #CCCCCC!important; text-decoration: none!important;} .ui-widget { font-family:Arial,sans-serif!important; } .ui-button-text { font-weight:normal!important; color:#555!important; } diff --git a/fhem/www/pgm2/darkstyle.css b/fhem/www/pgm2/darkstyle.css index 55826e7fa..b367000f0 100644 --- a/fhem/www/pgm2/darkstyle.css +++ b/fhem/www/pgm2/darkstyle.css @@ -80,6 +80,13 @@ select { margin-left:5px; margin-right:5px; } border:2px solid; color:white; text-align:center; } .downText,.makeSelect select { margin:0.7em; } +/* sortable Widget */ +ul.sortable-src, ul.sortable-dest {min-width: 130px; min-height:1.8em; list-style-type: none;border: 2px solid white;vertical-align:middle; border-radius: 3px; margin: 3px; background: #aaa; padding: 2px;} +ul.sortable-src li, ul.sortable-dest li { color: black!important;font-size: 0.8em; line-height: 1.6em; white-space: nowrap; vertical-align:middle; text-align:left; border-radius:3px; margin: 3px; padding: 2px; padding-left:4px; min-width: 120px; } +ul.sortable-dest { background: #101010; } +span.sort-item-delete-link { float:right; margin:0px;vertical-align:middle; margin-left:3px; padding:0px;} +.ui-state-highlight { height: 1.1em; line-height: 1.1em; } + svg { height:32px; width:32px; fill:#fff; vertical-align:middle; margin:2px 0; } g.on { fill:red; } diff --git a/fhem/www/pgm2/defaultCommon.css b/fhem/www/pgm2/defaultCommon.css index 118cda1df..c07d626ab 100644 --- a/fhem/www/pgm2/defaultCommon.css +++ b/fhem/www/pgm2/defaultCommon.css @@ -45,6 +45,30 @@ select.svgSrc { width:100px; } select.svgColumn { width:50px; } select.svgRegexp { width:120px; } +/* sortable Widget */ +ul.sortable-src, ul.sortable-dest { + min-width: 130px; min-height:1.8em; + list-style-type: none;border: 2px solid black; + vertical-align:middle; border-radius: 3px; margin: 3px; + background: #eee; padding: 2px; +} +ul.sortable-src li, ul.sortable-dest li { + color: black!important;font-size: 0.8em; + line-height: 1.6em; white-space: nowrap; + vertical-align:middle; text-align:left; + border-radius:3px; margin: 3px; padding: 2px; padding-left:4px; + min-width: 120px; +} +ul.sortable-dest { background: #278727; } +span.sort-item-delete-link { + float:right; margin:0px; + vertical-align:middle; + margin-left:3px; padding:0px; +} +.ui-state-highlight { height: 1.1em; line-height: 1.1em; } + + + .handle { position:relative; cursor:pointer; width:50px; height:20px; line-height:20px; -webkit-user-select:none; -moz-user-select:none; -user-select:none; @@ -72,6 +96,7 @@ table#atWizard td:first-child { width: 240px; } div.ui-dialog { border:3px solid #278727; padding: 0.2em; } div.ui-dialog div.ui-dialog-titlebar { display:none; } div.ui-widget-content { background:#FFFFE7; } +div.ui-widget-content a {color:#278727!important;} .ui-widget { font-family:Arial,sans-serif!important; } .ui-button-text { font-weight:normal!important; color:#555!important; } diff --git a/fhem/www/pgm2/fhemweb_sortable.js b/fhem/www/pgm2/fhemweb_sortable.js new file mode 100644 index 000000000..d7d371e9d --- /dev/null +++ b/fhem/www/pgm2/fhemweb_sortable.js @@ -0,0 +1,185 @@ +// Wrapper for the widget. +FW_widgets['sortable'] = { createFn:FW_sortableCreate, }; +FW_widgets['sortable-strict'] = { createFn:FW_sortableCreate, }; +FW_widgets['sortable-given'] = { createFn:FW_sortableCreate, }; + + +function +FW_sortableCreate(elName, devName, vArr, currVal, set, params, cmd) +{ + if((vArr.length < 2 && (vArr[0] == "sortable-strict" || vArr[0] == "sortable-given")) || (vArr[0]!="sortable" && vArr[0]!="sortable-strict" && vArr[0]!="sortable-given") || (params && params.length)) return undefined; + + var newEl = $('').get(0); + + if(currVal) + $(newEl).val(currVal); + if(elName) + $(newEl).attr("name", elName); + + newEl.setValueFn = function(arg){ $(newEl).val(arg) }; + + // replace # with space + for(var i1=1; i1