From 2b58f87d0a56568715f8763d785a8a583f69468c Mon Sep 17 00:00:00 2001
From: "Gleiss.Martin@gmail.com"
- This ist the interactive and inline {{ lib.smartvisu }} documentation. You will find the API to all widgets, some design modules
- and the icons and backgrounds. Use the widgets in your html-pages, the number ist not limited, but each widget needs its own
- and unique identifier (id) on a page. The gad/s or item/s may be used as often as you need them. Mention that each driver has
- its own format of the gad/s or item/s.Widgets
-
-
-
- Basic
-
- Calendar
-
- Device
-
- Multimedia
-
- Phone
-
- Plots
-
- Status
-
- Time/Clock
-
- Weather
-
- Design
-
-
-
- Blocks
-
- Quad
-
- Popups
-
- Icons
-
- Backgrounds
-
- Misc
-
-
- Fundamentals
-
- Overview
-
- Appliances
-
- Preview
-
- {{ lib.smartvisu }} Inline-Documentation
-
-
-
- Choose one of them:
-
-
widgets
designs
drivers
-
icons
+ This ist the interactive and inline {{ lib.smartvisu }} documentation. You will find the API to all widgets, some design modules
+ and the icons and backgrounds. Use the widgets in your html-pages, the number ist not limited, but each widget needs its own
+ and unique identifier (id) on a page. The gad/s or item/s may be used as often as you need them. Mention that each driver has
+ its own format of the gad/s or item/s.
+
+ Choose one of them:
+
+
{{ phone.list('phonelist', 'Phonelist') }}
- {{ phone.list('phonelist', 'Phonelist') }}
+ {{ phone.missedlist('phonelist', 'Phonelist', 3) }}
- {{ phone.missedlist('phonelist', 'Phonelist', 3) }}
+
- {{ plot.comfortchart('p1', 'bath.plot.temp', 'bath.plot.humidity') }}
-
-
+ {{ plot.comfortchart('p1', 'bath.plot.temp', 'bath.plot.humidity') }}
+
+
- {{ plot.period('p1', 'bath_plot_value', 'avg', '3h') }}
- {{ plot.period('p2', ['bath_plot1', 'bath_plot2', 'bath_plot3'], 'avg', '1h', 0, 0, 100, '', '', ['#aa0', '#a00', '#00a'], ['area', 'column', 'line']) }}
- {{ plot.period('p3', 'bath_plot_value', 'avg', '10h', 0, 0, 100, '', '', '', '', '', '1h' ) }}
-
-
+ {{ plot.period('p1', 'bath_plot_value', 'avg', '3h') }}
+ {{ plot.period('p2', ['bath_plot1', 'bath_plot2', 'bath_plot3'], 'avg', '1h', 0, 0, 100, '', '', ['#aa0', '#a00', '#00a'], ['area', 'column', 'line']) }}
+ {{ plot.period('p3', 'bath_plot_value', 'avg', '10h', 0, 0, 100, '', '', '', '', '', '1h' ) }}
+
+
- {{ plot.rtr('p1', 'bath.plot.temp_actual', 'bath.plot.temp_set', 'bath_plot_state') }}
-
-
+ {{ plot.rtr('p1', 'bath.plot.temp_actual', 'bath.plot.temp_set', 'bath_plot_state') }}
+
+ {% filter trim|escape|nl2br %}{% verbatim %}
-
- {{ plot.temprose('p1',
- ['sleep.rtr.act', 'office.rtr.act', 'kid.rtr.act', 'bath.rtr.act', 'floor.rtr.act'],
- ['sleep.rtr.set', 'office.rtr.set', 'kid.rtr.set', 'bath.rtr.set', 'floor.rtr.set'],
- ['Sleeping', 'Office', 'Kid', 'Bath', 'Floor']) }}
-
- {% endverbatim %}{% endfilter %}
- {% filter trim|escape|nl2br %}{% verbatim %}
+
+ {{ plot.temprose('p1',
+ ['sleep.rtr.act', 'office.rtr.act', 'kid.rtr.act', 'bath.rtr.act', 'floor.rtr.act'],
+ ['sleep.rtr.set', 'office.rtr.set', 'kid.rtr.set', 'bath.rtr.set', 'floor.rtr.set'],
+ ['Sleeping', 'Office', 'Kid', 'Bath', 'Floor']) }}
+
+ {% endverbatim %}{% endfilter %}
+ {% filter trim|escape|nl2br %}{% verbatim %}
{{ status.collapse('w1', 'bath.alert.info') }}
-
+Use it with simle html, to show and hide a div:
{{ basic.flip('f1', 'bath.alert.info') }}
{{ status.collapse('w1', 'bath.alert.info') }}
-
-Or use it to show and hide a popup:
+Or use it to show and hide a popup:
{{ basic.flip('f2', 'bath.alert.warning') }}
{{ status.collapse('w2', 'bath.alert.warning') }}
-
+
Popup
... or a popup ...
@@ -53,7 +54,7 @@ Examples
-Or use it for collapsable sections:
+Or use it to show and collapsable sections:
{{ basic.flip('f3', 'bath.alert.error') }}
{{ status.collapse('w3', 'bath.alert.error') }}
@@ -61,7 +62,7 @@ Examples
-
+
Block 1
Content 1
diff --git a/pages/docu/status/widget_status.html b/pages/docu/status/widget_status.html
index 6f397dd8e..6035835be 100644
--- a/pages/docu/status/widget_status.html
+++ b/pages/docu/status/widget_status.html
@@ -1,20 +1,20 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-{% extends "widget.html" %}
-{% import "status.html" as status %}
-
-{% block headline %}
- Status-Widgets
-{% endblock %}
-
-{% block intro %}
- The status-widgets are used to display a status, logs or notifications.
-{% endblock %}
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+{% extends "widget.html" %}
+{% import "status.html" as status %}
+
+{% block headline %}
+ Status-Widgets
+{% endblock %}
+
+{% block intro %}
+ The status-widgets are used to display a status, logs or notifications.
+{% endblock %}
diff --git a/pages/docu/status/widget_status.log.html b/pages/docu/status/widget_status.log.html
index c34472f83..0f1be4518 100644
--- a/pages/docu/status/widget_status.log.html
+++ b/pages/docu/status/widget_status.log.html
@@ -1,28 +1,28 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-{% extends "widget_status.html" %}
-
-{% block example %}
-
- Examples
-
-
-
- {{ status.log('log1', 'bath_log', 10) }}
-
-
-
- {{ status.log('log1', 'bath_log', 10) }}
-
-
-{% endblock %}
-
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+{% extends "widget_status.html" %}
+
+{% block example %}
+
+ Examples
+
+
+
+ {{ status.log('log1', 'bath_log', 10) }}
+
+
+
+ {{ status.log('log1', 'bath_log', 10) }}
+
+
+{% endblock %}
+
+
diff --git a/pages/docu/status/widget_status.notify.html b/pages/docu/status/widget_status.notify.html
index d8e66bbc3..e78872f98 100644
--- a/pages/docu/status/widget_status.notify.html
+++ b/pages/docu/status/widget_status.notify.html
@@ -1,36 +1,36 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-{% extends "widget_status.html" %}
-
-{% block example %}
-
- Examples
-
- If you flip the switch to 'on' the alert is been triggerd and the notification will be shown.
-
-
- {{ status.notify('n1', 'bath.alert.info', 'bath.alert.text', 'INFO', 'Information', 'The heating ist to hot!', 'info') }}
-
-
-
- {{ basic.flip('f1', 'bath.alert.info') }} Info
- {{ status.notify('n1', 'bath.alert.info', 'bath.alert.text', 'INFO', 'Information', 'The heating ist to hot!', 'info') }}
-
- {{ basic.flip('f2', 'bath.alert.warning') }} Warning
- {{ status.notify('n2', 'bath.alert.warning', 'bath.alert.text', 'WARN', 'Warning', 'The heating ist to hot! Please switch it off!', 'warning') }}
-
- {{ basic.flip('f3', 'bath.alert.error') }} Error
- {{ status.notify('n3', 'bath.alert.error', 'bath.alert.text', 'ERROR', 'Error', 'The heating ist to hot! It will burn now!', 'error') }}
-
-
-{% endblock %}
-
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+{% extends "widget_status.html" %}
+
+{% block example %}
+
+ Examples
+
+ If you flip the switch to 'on' the alert is been triggerd and the notification will be shown.
+
+
+ {{ status.notify('n1', 'bath.alert.info', 'bath.alert.text', 'INFO', 'Information', 'The heating ist to hot!', 'info') }}
+
+
+
+ {{ basic.flip('f1', 'bath.alert.info') }} Info
+ {{ status.notify('n1', 'bath.alert.info', 'bath.alert.text', 'INFO', 'Information', 'The heating ist to hot!', 'info') }}
+
+ {{ basic.flip('f2', 'bath.alert.warning') }} Warning
+ {{ status.notify('n2', 'bath.alert.warning', 'bath.alert.text', 'WARN', 'Warning', 'The heating ist to hot! Please switch it off!', 'warning') }}
+
+ {{ basic.flip('f3', 'bath.alert.error') }} Error
+ {{ status.notify('n3', 'bath.alert.error', 'bath.alert.text', 'ERROR', 'Error', 'The heating ist to hot! It will burn now!', 'error') }}
+
+
+{% endblock %}
+
+
diff --git a/pages/docu/visu.css b/pages/docu/visu.css
index 4b9910ed6..a87712259 100644
--- a/pages/docu/visu.css
+++ b/pages/docu/visu.css
@@ -1,32 +1,32 @@
-/**
- * -----------------------------------------------------------------------------
- * @package smartVISU
- * @author Martin Gleiß
- * @copyright 2012 - 2015
- * @license GPL [http://www.gnu.de]
- * -----------------------------------------------------------------------------
- */
-
-@CHARSET "UTF-8";
-
-/* display background only on larger displays */
-@media all and (min-width: 600px) {
- .page-bg {
- background-image: url('../../pics/bg/fractal.png');
- }
-}
-
-/* image for the shutter */
-#widget_device_shutter-shutter2 {
- background-image: url('../../pics/shutter/shutter_ocean.png');
-}
-
-/* image for the shutter */
-#widget_device_shutter-shutter3 {
- background-image: url('../../pics/shutter/shutter_cliff.png');
-}
-
-/* width of a tank */
-#widget_basic_tank-tank6 {
- width: 60px;
-}
+/**
+ * -----------------------------------------------------------------------------
+ * @package smartVISU
+ * @author Martin Gleiß
+ * @copyright 2012 - 2015
+ * @license GPL [http://www.gnu.de]
+ * -----------------------------------------------------------------------------
+ */
+
+@CHARSET "UTF-8";
+
+/* display background only on larger displays */
+@media all and (min-width: 600px) {
+ .page-bg {
+ background-image: url('../../pics/bg/fractal.png');
+ }
+}
+
+/* image for the shutter */
+#widget_device_shutter-shutter2 {
+ background-image: url('../../pics/shutter/shutter_ocean.png');
+}
+
+/* image for the shutter */
+#widget_device_shutter-shutter3 {
+ background-image: url('../../pics/shutter/shutter_cliff.png');
+}
+
+/* width of a tank */
+#widget_basic_tank-tank6 {
+ width: 60px;
+}
diff --git a/pages/docu/widget.html b/pages/docu/widget.html
index 61d6bf7fe..548a2a947 100644
--- a/pages/docu/widget.html
+++ b/pages/docu/widget.html
@@ -1,100 +1,100 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-{% extends "index.html" %}
-
-{% block content %}
-
- {% block headline %}Widgets
{% endblock %}
-
- {% if pagepath != '' %}
- {% set widgetlist = docu('widgets/'~pagepath~'.html') %}
-
- {% for widget in widgetlist %}
- {{ widget.command }}
- {% endfor %}
- {% endif %}
-
-
-
-
- {% set widget = page|slice(7)|replace({'_': '.'}) %}
-
- {% if pagepath != '' and widget != pagepath %}
-
-
-
-
- {{ widget }}
-
-
- {{ widgetlist[widget].desc }}
-
- Parameters
-
-
- {{ {{ widgetlist[widget].call }} }}
-
-
-
- {% for param_name, param_docu in widgetlist[widget].param %}
- {{ param_name }}
- {{ param_docu }}
- {% endfor %}
-
-
-
- {% if widgetlist[widget].see %}
- More Information
-
- {% for see in widgetlist[widget].see %}
- {{ see.anchor }}
- {% endfor %}
-
- {% endif %}
-
-
-
-
- {% block example %}{% endblock %}
-
-
-
- {% if widgetlist[widget].author or widgetlist[widget].info or widgetlist[widget].link %}
-
-
-
- {% if widgetlist[widget].author %}
- Author: {{ widgetlist[widget].author }}
- {% endif %}
-
- {% if widgetlist[widget].info %}
- {{ widgetlist[widget].info }}
- {% endif %}
-
- {% if widgetlist[widget].link %}
- - {{ widgetlist[widget].link }}
- {% endif %}
-
- {% endif %}
-
-
-
- {% else %}
-
- {% block intro %}
- Intro
- {% endblock %}
-
- {% endif %}
-
-
-{% endblock %}
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+{% extends "index.html" %}
+
+{% block content %}
+
+ {% block headline %}Widgets
{% endblock %}
+
+ {% if pagepath != '' %}
+ {% set widgetlist = docu('widgets/'~pagepath~'.html') %}
+
+ {% for widget in widgetlist %}
+ {{ widget.command }}
+ {% endfor %}
+ {% endif %}
+
+
+
+
+ {% set widget = page|slice(7)|replace({'_': '.'}) %}
+
+ {% if pagepath != '' and widget != pagepath %}
+
+
+
+
+ {{ widget }}
+
+
+ {{ widgetlist[widget].desc }}
+
+ Parameters
+
+
+ {{ {{ widgetlist[widget].call }} }}
+
+
+
+ {% for param_name, param_docu in widgetlist[widget].param %}
+ {{ param_name }}
+ {{ param_docu }}
+ {% endfor %}
+
+
+
+ {% if widgetlist[widget].see %}
+ More Information
+
+ {% for see in widgetlist[widget].see %}
+ {{ see.anchor }}
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+ {% block example %}{% endblock %}
+
+
+
+ {% if widgetlist[widget].author or widgetlist[widget].info or widgetlist[widget].link %}
+
+
+
+ {% if widgetlist[widget].author %}
+ Author: {{ widgetlist[widget].author }}
+ {% endif %}
+
+ {% if widgetlist[widget].info %}
+ {{ widgetlist[widget].info }}
+ {% endif %}
+
+ {% if widgetlist[widget].link %}
+ - {{ widgetlist[widget].link }}
+ {% endif %}
+
+ {% endif %}
+
+
+
+ {% else %}
+
+ {% block intro %}
+ Intro
+ {% endblock %}
+
+ {% endif %}
+
+
+{% endblock %}
+
diff --git a/temp/offline_docu.var b/temp/offline_docu.var
index 78b9bbb43..727b7b8fc 100644
--- a/temp/offline_docu.var
+++ b/temp/offline_docu.var
@@ -1,6 +1,6 @@
bath.time = 1974-01-01T12:00:00.000000+01:00
-bath.light.value = 168
-bath.light.switch = 0
+bath.light.value = 87
+bath.light.switch = 1
bath.rtr.state = 0
bath.rtr.comfort = 1
bath.rtr.set = 22.5
@@ -10,7 +10,7 @@ bath.rtr.night = 0
bath.rtr.frost = 0
bath.rtr.mode = 3
bath.blind.pos = 165
-bath.blind.angle = 250
+bath.blind.angle = 38
bath.blind.adjust = 1
bath.blind.move.up = 0
bath.blind.move.down = 1
@@ -49,3 +49,6 @@ kid.rtr.set = 21
floor.rtr.act = 22.7
floor.rtr.set = 17
docu.multistate = 5
+bath.light.value2 = 51
+baht.light = 175
+bath.light = 1
diff --git a/widgets/animation.js b/widgets/animation.js
index eb29dc8ff..491263c48 100644
--- a/widgets/animation.js
+++ b/widgets/animation.js
@@ -1,70 +1,70 @@
-/**
- * -----------------------------------------------------------------------------
- * @package smartVISU
- * @author Martin Gleiß
- * @copyright 2012 - 2015
- * @license GPL [http://www.gnu.de]
- * -----------------------------------------------------------------------------
- */
-
-
-/**
- * Animation of some html-elements and some widgets.
- *
- * Concept:
- * --------
- * This file may be optionally included. If it is not included, all html
- * elements will be shown with the rendering of the page. If animation is
- * switched on (config) the element will be hidden. After showing the page
- * the elements will be animated.
- *
- * Events:
- * -------
- * Some new events are introduced to control the widgets and there visual
- * appearance.
- *
- * 'prepare': function(event) { }
- * Triggered before a page is been shown.
- *
- * 'redraw': function(event, response) { }
- * Triggered after the page is visible and the animimation could be made
- *
- */
-
-/**
- * Attach all 'prepare' and 'redraw' Triggers
- */
-$(document).on('pagebeforeshow', function (event, ui) {
- // DEBUG:
- console.log("[animation.prepare]");
-
- $.mobile.activePage.find('[data-widget] > ul').trigger('prepare');
-});
-
-$(document).on('pageshow', function (event, ui) {
- // DEBUG:
- console.log("[animation.redraw]");
-
- $.mobile.activePage.find('[data-widget] > ul').trigger('redraw');
-});
-
-
-/**
- * Fade-In the listitems from top to bottom
- */
-$(document).delegate('[data-widget] > ul', {
- 'prepare': function (event) {
- $(this).children().hide();
- },
-
- 'redraw': function (event) {
- $(this).children().each(function (index) {
- var li = $(this);
- setTimeout(function () {
- li.fadeIn();
- }, 100 * (index + 1));
- });
- }
-});
-
-
+/**
+ * -----------------------------------------------------------------------------
+ * @package smartVISU
+ * @author Martin Gleiß
+ * @copyright 2012 - 2015
+ * @license GPL [http://www.gnu.de]
+ * -----------------------------------------------------------------------------
+ */
+
+
+/**
+ * Animation of some html-elements and some widgets.
+ *
+ * Concept:
+ * --------
+ * This file may be optionally included. If it is not included, all html
+ * elements will be shown with the rendering of the page. If animation is
+ * switched on (config) the element will be hidden. After showing the page
+ * the elements will be animated.
+ *
+ * Events:
+ * -------
+ * Some new events are introduced to control the widgets and there visual
+ * appearance.
+ *
+ * 'prepare': function(event) { }
+ * Triggered before a page is been shown.
+ *
+ * 'redraw': function(event, response) { }
+ * Triggered after the page is visible and the animimation could be made
+ *
+ */
+
+/**
+ * Attach all 'prepare' and 'redraw' Triggers
+ */
+$(document).on('pagebeforeshow', function (event, ui) {
+ // DEBUG:
+ console.log("[animation.prepare]");
+
+ $.mobile.activePage.find('[data-widget] > ul').trigger('prepare');
+});
+
+$(document).on('pageshow', function (event, ui) {
+ // DEBUG:
+ console.log("[animation.redraw]");
+
+ $.mobile.activePage.find('[data-widget] > ul').trigger('redraw');
+});
+
+
+/**
+ * Fade-In the listitems from top to bottom
+ */
+$(document).delegate('[data-widget] > ul', {
+ 'prepare': function (event) {
+ $(this).children().hide();
+ },
+
+ 'redraw': function (event) {
+ $(this).children().each(function (index) {
+ var li = $(this);
+ setTimeout(function () {
+ li.fadeIn();
+ }, 100 * (index + 1));
+ });
+ }
+});
+
+
diff --git a/widgets/appliance.html b/widgets/appliance.html
index c1b2f4c6a..ca399116f 100644
--- a/widgets/appliance.html
+++ b/widgets/appliance.html
@@ -1,51 +1,51 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* enertex KNXnet/IP-Router
-*
-* @param unique id for this widget
-* @param the ip of the KNXnet/IP-Router
-* @param the password of the KNXnet/IP-Router
-*
-* @info works with firmware 1.025, 1.029
-*/
-{% macro iprouter(id, server, password) %}
- {% set uid = uid(page, id) %}
-
-
-
-
-
-
-
-
-
-
-{% endmacro %}
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* enertex KNXnet/IP-Router
+*
+* @param unique id for this widget
+* @param the ip of the KNXnet/IP-Router
+* @param the password of the KNXnet/IP-Router
+*
+* @info works with firmware 1.025, 1.029
+*/
+{% macro iprouter(id, server, password) %}
+ {% set uid = uid(page, id) %}
+
+
+
+
+
+
+
+
+
+
+{% endmacro %}
diff --git a/widgets/calendar.html b/widgets/calendar.html
index 2fd31d15d..2ba546720 100644
--- a/widgets/calendar.html
+++ b/widgets/calendar.html
@@ -1,64 +1,64 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Displays the calendarlist
-*
-* @param unique id for this widget
-* @param a title to display
-* @param the number of displayed calendar-entries, default 25
-* @param a color for this calendar, default grey
-*/
-{% macro list(id, title, count, color) %}
- {% set uid = uid(page, id) %}
-
-
- {% if title %} {{ title }}
{% endif %}
-
-
-
-
-
-
-{% endmacro %}
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Displays the calendarlist
+*
+* @param unique id for this widget
+* @param a title to display
+* @param the number of displayed calendar-entries, default 25
+* @param a color for this calendar, default grey
+*/
+{% macro list(id, title, count, color) %}
+ {% set uid = uid(page, id) %}
+
+
+ {% if title %} {{ title }}
{% endif %}
+
+
+
+
+
+
+{% endmacro %}
+
diff --git a/widgets/clock.html b/widgets/clock.html
index f797c097c..a8a8b5642 100644
--- a/widgets/clock.html
+++ b/widgets/clock.html
@@ -1,88 +1,88 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Displays a digital clock
-*
-* @param unique id for this widget
-* @param location as string (optional)
-*
-* @info based on jDigiClock by Radoslav Dimov
-* @link http://www.radoslavdimov.com
-*/
-{% macro digiclock(id, location) %}
- {% set uid = uid(page, id) %}
-
- {% if once('digiclock') %}
-
-
- {% endif %}
-
-
-
- {% if location %}
- {% if once('digiweather') %}
-
- {% endif %}
-
-
-
-
-
-
-
-
-
- {% endif %}
-
-
-{% endmacro %}
-
-
-/**
-* Displays a clock in icon style
-*
-* @param unique id for this widget
-*/
-{% macro iconclock(id) %}
- {% import "icon.html" as icon %}
-
- {{ icon.clock(id) }}
-
-{% endmacro %}
-
-
-/**
-* Displays a mini text-based clock
-*
-* @param unique id for this widget
-*/
-{% macro miniclock(id) %}
-
- {{ now|date('H:i') }}
-
-{% endmacro %}
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Displays a digital clock
+*
+* @param unique id for this widget
+* @param location as string (optional)
+*
+* @info based on jDigiClock by Radoslav Dimov
+* @link http://www.radoslavdimov.com
+*/
+{% macro digiclock(id, location) %}
+ {% set uid = uid(page, id) %}
+
+ {% if once('digiclock') %}
+
+
+ {% endif %}
+
+
+
+ {% if location %}
+ {% if once('digiweather') %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+{% endmacro %}
+
+
+/**
+* Displays a clock in icon style
+*
+* @param unique id for this widget
+*/
+{% macro iconclock(id) %}
+ {% import "icon.html" as icon %}
+
+ {{ icon.clock(id) }}
+
+{% endmacro %}
+
+
+/**
+* Displays a mini text-based clock
+*
+* @param unique id for this widget
+*/
+{% macro miniclock(id) %}
+
+ {{ now|date('H:i') }}
+
+{% endmacro %}
+
diff --git a/widgets/device.html b/widgets/device.html
index a3f3d6f0e..6c165749b 100644
--- a/widgets/device.html
+++ b/widgets/device.html
@@ -1,211 +1,211 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Standard blind
-*
-* @param unique id for this widget
-* @param name of the blind
-* @param a item for the up- and down- movement
-* @param a item for stopping the movement (optional)
-* @param a item for the actual absolute position of the blinds
-* @param a item for increase- and decreace- of the blade (optional)
-* @param a item for the actual absolute angle of the blade (optional)
-* @param the minimum value for close (optional, default 0)
-* @param the maximum value for open (optional, default 255)
-* @param step between two values (optional, default 5)
-*
-* @info inspired by Frank Berlenz
-*/
-{% macro blind(id, txt, item_move, item_stop, item_pos, item_shift, item_angle, min, max, step) %}
- {% import "basic.html" as basic %}
- {% set uid = uid(page, id) %}
-
-
-
-
-
- {{ basic.button(id~'up', item_move, '', 'arrow-u', 0) }}
-
-
- {{ basic.slider(id~'pos', item_pos, min, max, step, 'vertical') }}
-
- {{ txt }}
- {% if item_angle %} {{ basic.slider(id~'angle', item_angle, min, max, step, 'semicircle') }} {% endif %}
-
-
-
-
- {% if item_stop %}
- {{ basic.button(id~'stop', item_stop, '', 'delete', 1) }} {% endif %}
-
-
-
- {{ basic.button(id~'down', item_move, '', 'arrow-d', 1) }}
-
-
- {% if item_shift %}
-
- {{ basic.button(id~'minus', item_shift, '', 'minus', 0) }}
- {{ basic.button(id~'plus', item_shift, '', 'plus', 1) }}
-
- {% endif %}
-
-
-
-
-{% endmacro %}
-
-
-/**
-* Standard dimmer with switching and dimming function
-*
-* @param unique id for this widget
-* @param name of the dimmer
-* @param a item for switching
-* @param a item for dimming
-* @param the minimum value if the slider is moved to total left (optional, default 0)
-* @param the maximum value if the slider is moved to total right (optional, default 255)
-* @param step between two values (optional, default 5)
-*/
-{% macro codepad(id, code, keys) %}
-
-
-{% endmacro %}
-
-/**
-* Standard dimmer with switching and dimming function
-*
-* @param unique id for this widget
-* @param name of the dimmer
-* @param a item for switching
-* @param a item for dimming
-* @param the minimum value if the slider is moved to total left (optional, default 0)
-* @param the maximum value if the slider is moved to total right (optional, default 255)
-* @param step between two values (optional, default 5)
-*/
-{% macro dimmer(id, txt, item_switch, item_value, min, max, step) %}
- {% import "basic.html" as basic %}
-
-
- {{ basic.switch(id~'switch', item_switch, icon1~'light_light.png', icon0~'light_light.png') }}
- {{ txt|e }}
- {{ basic.slider(id~'slider', item_value, min, max, step) }}
-
-
-{% endmacro %}
-
-
-/**
-* Standard RTR (Room Temperatur Regulator)
-*
-* @param unique id for this widget
-* @param name of the rtr
-* @param a item for the actual temperature
-* @param a item for the set temperature
-* @param a item for comfort / standby (3x bit or 1x byte)
-* @param a item for night (3x bit or 1x byte)
-* @param a item for frost (3x bit or 1x byte)
-* @param a item for the current state of the actor
-* @param a item for a text (some rtr have a text-display), (optional)
-* @param step for plus/minus buttons (optional, default 0.5)
-*/
-{% macro rtr(id, txt, item_actual, item_set, item_comfort, item_night, item_frost, item_state, item_txt, step) %}
- {% import "basic.html" as basic %}
-
-
-
- {{ basic.float(id~'actual', item_actual, '°' ) }}
- {{ txt }} {% if item_txt %} {{ basic.value(id~'txt', item_txt) }} {% endif %}
-
-
- {% if item_set %}
-
- {% endif %}
-
-
- {% if ((config_driver == 'linknx') and (item_comfort == item_night) and (item_night == item_frost)) %}
- {{ basic.switch(id~'mode', item_comfort, icon1~'user_available.png', icon0~'user_away.png', 'comfort', 'standby') }}
- {{ basic.switch(id~'night', item_night, icon1~'scene_night.png', icon0~'scene_day.png', 'night', 'standby') }}
- {{ basic.switch(id~'frost', item_frost, icon1~'weather_frost.png', icon0~'weather_frost.png', 'frost', 'standby') }}
- {% elseif ((item_comfort == item_night) and (item_night == item_frost)) %}
- {{ basic.switch(id~'mode', item_comfort, icon1~'user_available.png', icon0~'user_away.png', '1', '2') }}
- {{ basic.switch(id~'night', item_night, icon1~'scene_night.png', icon0~'scene_day.png', '3', '2') }}
- {{ basic.switch(id~'frost', item_frost, icon1~'weather_frost.png', icon0~'weather_frost.png', '4', '2') }}
- {% else %}
- {{ basic.switch(id~'mode', item_comfort, icon1~'user_available.png', icon0~'user_away.png') }}
- {{ basic.switch(id~'night', item_night, icon1~'scene_night.png', icon0~'scene_day.png') }}
- {{ basic.switch(id~'frost', item_frost, icon1~'weather_frost.png', icon0~'weather_frost.png') }}
- {% endif %}
-
- {{ basic.switch(id~'state', item_state, icon1~'sani_heating.png', icon0~'sani_heating.png') }}
-
-
-{% endmacro %}
-
-
-/**
-* Standard shutter
-*
-* @param unique id for this widget
-* @param name of the shutter
-* @param a item for the up- and down- movement
-* @param a item for stopping the movement (optional)
-* @param a item for the actual absolute position of the blinds
-* @param a item for increase- and decreace- of the blade (optional, for future use)
-* @param a item for the actual absolute angle of the blade (optional)
-* @param a item for some saved positions (optional)
-* @param the minimum value for close (optional, default 0)
-* @param the maximum value for open (optional, default 255)
-* @param step between two values (optional, default 5)
-* @param the mode: 'half' blade turns from -1 to +1, or 'full' blade turns from 0 to +1 (optional, default 'half')
-*
-* @info inspired by Jörg Gutowski
-*/
-{% macro shutter(id, txt, item_move, item_stop, item_pos, item_shift, item_angle, item_saved, min, max, step, mode) %}
- {% import "basic.html" as basic %}
- {% set uid = uid(page, id) %}
-
-
-
-
-
- {{ basic.button(id~'up', item_move, '', 'arrow-u', 0) }}
-
-
- {{ basic.shutter(id, item_pos, item_angle, min, max, step, mode) }}
-
- {% if item_saved %}
- {{ basic.button(id~'saved1', item_saved, 'Pos1', 'grid', 0) }} {% endif %}
-
-
-
- {% if item_stop %}
- {{ basic.button(id~'stop', item_stop, '', 'delete', 1) }} {% endif %}
- {{ txt }}
-
-
-
- {{ basic.button(id~'down', item_move, '', 'arrow-d', 1) }}
-
-
- {% if item_saved %}
- {{ basic.button(id~'saved2', item_saved, 'Pos2', 'grid', 1) }} {% endif %}
-
-
-
-
-{% endmacro %}
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Standard blind
+*
+* @param unique id for this widget
+* @param name of the blind
+* @param a item for the up- and down- movement
+* @param a item for stopping the movement (optional)
+* @param a item for the actual absolute position of the blinds
+* @param a item for increase- and decreace- of the blade (optional)
+* @param a item for the actual absolute angle of the blade (optional)
+* @param the minimum value for close (optional, default 0)
+* @param the maximum value for open (optional, default 255)
+* @param step between two values (optional, default 5)
+*
+* @info inspired by Frank Berlenz
+*/
+{% macro blind(id, txt, item_move, item_stop, item_pos, item_shift, item_angle, min, max, step) %}
+ {% import "basic.html" as basic %}
+ {% set uid = uid(page, id) %}
+
+
+
+
+
+ {{ basic.button(id~'up', item_move, '', 'arrow-u', 0) }}
+
+
+ {{ basic.slider(id~'pos', item_pos, min, max, step, 'vertical') }}
+
+ {{ txt }}
+ {% if item_angle %} {{ basic.slider(id~'angle', item_angle, min, max, step, 'semicircle') }} {% endif %}
+
+
+
+
+ {% if item_stop %}
+ {{ basic.button(id~'stop', item_stop, '', 'delete', 1) }} {% endif %}
+
+
+
+ {{ basic.button(id~'down', item_move, '', 'arrow-d', 1) }}
+
+
+ {% if item_shift %}
+
+ {{ basic.button(id~'minus', item_shift, '', 'minus', 0) }}
+ {{ basic.button(id~'plus', item_shift, '', 'plus', 1) }}
+
+ {% endif %}
+
+
+
+
+{% endmacro %}
+
+
+/**
+* Standard dimmer with switching and dimming function
+*
+* @param unique id for this widget
+* @param name of the dimmer
+* @param a item for switching
+* @param a item for dimming
+* @param the minimum value if the slider is moved to total left (optional, default 0)
+* @param the maximum value if the slider is moved to total right (optional, default 255)
+* @param step between two values (optional, default 5)
+*/
+{% macro codepad(id, code, keys) %}
+
+
+{% endmacro %}
+
+/**
+* Standard dimmer with switching and dimming function
+*
+* @param unique id for this widget
+* @param name of the dimmer
+* @param a item for switching
+* @param a item for dimming
+* @param the minimum value if the slider is moved to total left (optional, default 0)
+* @param the maximum value if the slider is moved to total right (optional, default 255)
+* @param step between two values (optional, default 5)
+*/
+{% macro dimmer(id, txt, item_switch, item_value, min, max, step) %}
+ {% import "basic.html" as basic %}
+
+
+ {{ basic.switch(id~'switch', item_switch, icon1~'light_light.png', icon0~'light_light.png') }}
+ {{ txt|e }}
+ {{ basic.slider(id~'slider', item_value, min, max, step) }}
+
+
+{% endmacro %}
+
+
+/**
+* Standard RTR (Room Temperatur Regulator)
+*
+* @param unique id for this widget
+* @param name of the rtr
+* @param a item for the actual temperature
+* @param a item for the set temperature
+* @param a item for comfort / standby (3x bit or 1x byte)
+* @param a item for night (3x bit or 1x byte)
+* @param a item for frost (3x bit or 1x byte)
+* @param a item for the current state of the actor
+* @param a item for a text (some rtr have a text-display), (optional)
+* @param step for plus/minus buttons (optional, default 0.5)
+*/
+{% macro rtr(id, txt, item_actual, item_set, item_comfort, item_night, item_frost, item_state, item_txt, step) %}
+ {% import "basic.html" as basic %}
+
+
+
+ {{ basic.float(id~'actual', item_actual, '°' ) }}
+ {{ txt }} {% if item_txt %} {{ basic.value(id~'txt', item_txt) }} {% endif %}
+
+
+ {% if item_set %}
+
+ {% endif %}
+
+
+ {% if ((config_driver == 'linknx') and (item_comfort == item_night) and (item_night == item_frost)) %}
+ {{ basic.switch(id~'mode', item_comfort, icon1~'user_available.png', icon0~'user_away.png', 'comfort', 'standby') }}
+ {{ basic.switch(id~'night', item_night, icon1~'scene_night.png', icon0~'scene_day.png', 'night', 'standby') }}
+ {{ basic.switch(id~'frost', item_frost, icon1~'weather_frost.png', icon0~'weather_frost.png', 'frost', 'standby') }}
+ {% elseif ((item_comfort == item_night) and (item_night == item_frost)) %}
+ {{ basic.switch(id~'mode', item_comfort, icon1~'user_available.png', icon0~'user_away.png', '1', '2') }}
+ {{ basic.switch(id~'night', item_night, icon1~'scene_night.png', icon0~'scene_day.png', '3', '2') }}
+ {{ basic.switch(id~'frost', item_frost, icon1~'weather_frost.png', icon0~'weather_frost.png', '4', '2') }}
+ {% else %}
+ {{ basic.switch(id~'mode', item_comfort, icon1~'user_available.png', icon0~'user_away.png') }}
+ {{ basic.switch(id~'night', item_night, icon1~'scene_night.png', icon0~'scene_day.png') }}
+ {{ basic.switch(id~'frost', item_frost, icon1~'weather_frost.png', icon0~'weather_frost.png') }}
+ {% endif %}
+
+ {{ basic.switch(id~'state', item_state, icon1~'sani_heating.png', icon0~'sani_heating.png') }}
+
+
+{% endmacro %}
+
+
+/**
+* Standard shutter
+*
+* @param unique id for this widget
+* @param name of the shutter
+* @param a item for the up- and down- movement
+* @param a item for stopping the movement (optional)
+* @param a item for the actual absolute position of the blinds
+* @param a item for increase- and decreace- of the blade (optional, for future use)
+* @param a item for the actual absolute angle of the blade (optional)
+* @param a item for some saved positions (optional)
+* @param the minimum value for close (optional, default 0)
+* @param the maximum value for open (optional, default 255)
+* @param step between two values (optional, default 5)
+* @param the mode: 'half' blade turns from -1 to +1, or 'full' blade turns from 0 to +1 (optional, default 'half')
+*
+* @info inspired by Jörg Gutowski
+*/
+{% macro shutter(id, txt, item_move, item_stop, item_pos, item_shift, item_angle, item_saved, min, max, step, mode) %}
+ {% import "basic.html" as basic %}
+ {% set uid = uid(page, id) %}
+
+
+
+
+
+ {{ basic.button(id~'up', item_move, '', 'arrow-u', 0) }}
+
+
+ {{ basic.shutter(id, item_pos, item_angle, min, max, step, mode) }}
+
+ {% if item_saved %}
+ {{ basic.button(id~'saved1', item_saved, 'Pos1', 'grid', 0) }} {% endif %}
+
+
+
+ {% if item_stop %}
+ {{ basic.button(id~'stop', item_stop, '', 'delete', 1) }} {% endif %}
+ {{ txt }}
+
+
+
+ {{ basic.button(id~'down', item_move, '', 'arrow-d', 1) }}
+
+
+ {% if item_saved %}
+ {{ basic.button(id~'saved2', item_saved, 'Pos2', 'grid', 1) }} {% endif %}
+
+
+
+
+{% endmacro %}
diff --git a/widgets/forms.html b/widgets/forms.html
index 06060f88c..f98d10a13 100644
--- a/widgets/forms.html
+++ b/widgets/forms.html
@@ -1,52 +1,52 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Init of a flip-form-element
-*
-* @param id of the form-element
-* @param init-value
-*/
-{% macro flip_init(id, val) %}
-
-{% endmacro %}
-
-
-/**
-* Init of a select-form-element
-*
-* @param id of the form-element
-* @param init-value
-*/
-{% macro select_init(id, val) %}
-
-{% endmacro %}
-
-
-/**
-* Init of a text-form-element
-*
-* @param id of the form-element
-* @param init-value
-*/
-{% macro text_init(id, val) %}
-
-{% endmacro %}
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Init of a flip-form-element
+*
+* @param id of the form-element
+* @param init-value
+*/
+{% macro flip_init(id, val) %}
+
+{% endmacro %}
+
+
+/**
+* Init of a select-form-element
+*
+* @param id of the form-element
+* @param init-value
+*/
+{% macro select_init(id, val) %}
+
+{% endmacro %}
+
+
+/**
+* Init of a text-form-element
+*
+* @param id of the form-element
+* @param init-value
+*/
+{% macro text_init(id, val) %}
+
+{% endmacro %}
+
diff --git a/widgets/icon.html b/widgets/icon.html
index 2927d23b8..8bd1f5ac8 100644
--- a/widgets/icon.html
+++ b/widgets/icon.html
@@ -1,317 +1,317 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* a arrow
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the height of the blades
-* @param the minimum value for 0° (optional, default 0, for future use)
-* @param the maximum value for 360° (optional, default 255)
-*/
-{% macro arrow(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a battery
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the pin
-* @param the minimum value for 0 (optional, default 0, for future use)
-* @param the maximum value for 255 (optional, default 255)
-*/
-{% macro battery(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a blade
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the blades
-* @param the minimum value for 0 (optional, default 0, for future use)
-* @param the maximum value for 255 (optional, default 255)
-*
-* @author Mario Zanier
-*/
-{% macro blade(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a blade (z profile)
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the blades
-* @param the minimum value for 0 (optional, default 0, for future use)
-* @param the maximum value for 255 (optional, default 255)
-*
-* @author Mario Zanier
-*/
-{% macro blade_z(id, item_switch, item_value, min, max) %}
-
-{% endmacro %}
-
-
-/**
-* a blade (round profile)
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the blades
-* @param the minimum value for 0 (optional, default 0, for future use)
-* @param the maximum value for 255 (optional, default 255)
-*
-* @author Mario Zanier
-*/
-{% macro blade_arc(id, item_switch, item_value, min, max) %}
-
-{% endmacro %}
-
-
-/**
-* A clock
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the blades
-*/
-{% macro clock(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-/**
-* A compass
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the pin
-* @param the minimum value for 0° (optional, default 0, for future use)
-* @param the maximum value for 360° (optional, default 255)
-*/
-{% macro compass(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a graph
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the height of the blades
-* @param the minimum value for 0 (optional, default 0, for future use)
-* @param the maximum value for 255 (optional, default 255)
-*/
-{% macro graph(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a meter
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the height of the blades
-* @param the minimum value for 0 (optional, default 0, for future use)
-* @param the maximum value for 255 (optional, default 255)
-*/
-{% macro meter(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a shutter
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the height of the blades
-* @param the minimum value for 0 (optional, default 0, for future use)
-* @param the maximum value for 255 (optional, default 255)
-*/
-{% macro shutter(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a windrose
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the pin
-* @param the minimum value for 0° (optional, default 0, for future use)
-* @param the maximum value for 360° (optional, default 255)
-*/
-{% macro windrose(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* a windsock
-*
-* @param unique id for this widget
-* @param a item for switching
-* @param a item for the angle of the pin
-* @param the minimum value for 0° (optional, default 0, for future use)
-* @param the maximum value for ~90° (optional, default 255)
-*/
-{% macro windsock(id, item_switch, item_value, min, max) %}
-
-
-
-{% endmacro %}
-
-
-
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* a arrow
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the height of the blades
+* @param the minimum value for 0° (optional, default 0, for future use)
+* @param the maximum value for 360° (optional, default 255)
+*/
+{% macro arrow(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a battery
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the pin
+* @param the minimum value for 0 (optional, default 0, for future use)
+* @param the maximum value for 255 (optional, default 255)
+*/
+{% macro battery(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a blade
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the blades
+* @param the minimum value for 0 (optional, default 0, for future use)
+* @param the maximum value for 255 (optional, default 255)
+*
+* @author Mario Zanier
+*/
+{% macro blade(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a blade (z profile)
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the blades
+* @param the minimum value for 0 (optional, default 0, for future use)
+* @param the maximum value for 255 (optional, default 255)
+*
+* @author Mario Zanier
+*/
+{% macro blade_z(id, item_switch, item_value, min, max) %}
+
+{% endmacro %}
+
+
+/**
+* a blade (round profile)
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the blades
+* @param the minimum value for 0 (optional, default 0, for future use)
+* @param the maximum value for 255 (optional, default 255)
+*
+* @author Mario Zanier
+*/
+{% macro blade_arc(id, item_switch, item_value, min, max) %}
+
+{% endmacro %}
+
+
+/**
+* A clock
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the blades
+*/
+{% macro clock(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+/**
+* A compass
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the pin
+* @param the minimum value for 0° (optional, default 0, for future use)
+* @param the maximum value for 360° (optional, default 255)
+*/
+{% macro compass(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a graph
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the height of the blades
+* @param the minimum value for 0 (optional, default 0, for future use)
+* @param the maximum value for 255 (optional, default 255)
+*/
+{% macro graph(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a meter
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the height of the blades
+* @param the minimum value for 0 (optional, default 0, for future use)
+* @param the maximum value for 255 (optional, default 255)
+*/
+{% macro meter(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a shutter
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the height of the blades
+* @param the minimum value for 0 (optional, default 0, for future use)
+* @param the maximum value for 255 (optional, default 255)
+*/
+{% macro shutter(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a windrose
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the pin
+* @param the minimum value for 0° (optional, default 0, for future use)
+* @param the maximum value for 360° (optional, default 255)
+*/
+{% macro windrose(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* a windsock
+*
+* @param unique id for this widget
+* @param a item for switching
+* @param a item for the angle of the pin
+* @param the minimum value for 0° (optional, default 0, for future use)
+* @param the maximum value for ~90° (optional, default 255)
+*/
+{% macro windsock(id, item_switch, item_value, min, max) %}
+
+
+
+{% endmacro %}
+
+
+
+
diff --git a/widgets/lib.html b/widgets/lib.html
index 57f0db9e2..284822824 100644
--- a/widgets/lib.html
+++ b/widgets/lib.html
@@ -1,68 +1,68 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* the smartVISU-logo
-*/
-{% macro smartvisu(mode) %}
-
- {% if mode == 'app' %}
-
-
- smart
VISU
-
-
- {% else %}
- smartVISU
- {% endif %}
-
-{% endmacro %}
-
-
-/**
-* Check for new updates of smartVISU
-*/
-{% macro updatecheck( ) %}
-
-{% endmacro %}
-
-
-/**
-* Widget to place an app-symbol
-* If you write an app yourself, place a @title, @icon, @color tag in your
-* header. These tags are used to display the symbol
-*
-* @param the name of the app (located in pages/apps)
-* @param title of the app
-*/
-{% macro app(name, title) %}
-
- {% set app = docu('apps/'~name~'.html') %}
-
-
-{% endmacro %}
-
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* the smartVISU-logo
+*/
+{% macro smartvisu(mode) %}
+
+ {% if mode == 'app' %}
+
+
+ smart
VISU
+
+
+ {% else %}
+ smartVISU
+ {% endif %}
+
+{% endmacro %}
+
+
+/**
+* Check for new updates of smartVISU
+*/
+{% macro updatecheck( ) %}
+
+{% endmacro %}
+
+
+/**
+* Widget to place an app-symbol
+* If you write an app yourself, place a @title, @icon, @color tag in your
+* header. These tags are used to display the symbol
+*
+* @param the name of the app (located in pages/apps)
+* @param title of the app
+*/
+{% macro app(name, title) %}
+
+ {% set app = docu('apps/'~name~'.html') %}
+
+
+{% endmacro %}
+
+
diff --git a/widgets/multimedia.html b/widgets/multimedia.html
index 639a669a4..4e5b7db4b 100644
--- a/widgets/multimedia.html
+++ b/widgets/multimedia.html
@@ -1,158 +1,158 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Displays a image witch is been reloaded after a given time
-*
-* @param unique id for this widget
-* @param the path/url to the image
-* @param the mode: 'none', 'corner', 'corner-bottom' (optional, default 'none')
-* @param the reload-time in duration-format (optional, default '10i')
-*
-* @see misc/fundamentals#Duration-Format
-*/
-{% macro image(id, src, mode, time) %}
-
-
-
-
-
-{% endmacro %}
-
-
-/**
-* Standard Multimedia Player
-*
-* @param unique id for this widget
-* @param the item for play/pause
-* @param the item for stopping the music (optional)
-* @param the item for fast forward and rewind (optional)
-* @param the item for next an previous playlist title
-* @param the item for the position (optional)
-* @param the item for the volume (optional)
-* @param the item to mute the music (optional)
-* @param the item for the song title (optional)
-* @param the item for the song artist (optional)
-* @param the item for repeat (optional)
-* @param the item to load the default playlist (optional)
-*
-* @author Axel Otterstätter
-*/
-{% macro music(id, item_play, item_stop, item_ff, item_next, item_pos, item_vol, item_mute, item_title, item_artist, item_repeat, item_playlist) %}
- {% import "basic.html" as basic %}
- {% set uid = uid(page, id) %}
-
-
-
- {% if item_vol %}
-
-
- {{ basic.slider(id~'vol', item_vol, 0, 100, 5, 'bottomup') }}
-
- {% endif %}
-
-
- {% if item_mute %} {{ basic.button(id~'mute', item_mute, 'Mute', icon0~'audio_volume_mute.png', 1) }} {% endif %}
- {% if item_repeat %} {{ basic.dual(id~'repeat', item_repeat, icon1~'audio_repeat.png', icon0~'audio_repeat.png') }} {% endif %}
- {% if item_playlist %} {{ basic.button(id~'playlist', item_playlist, 'Default Playlist', icon0~'audio_playlist.png', 1) }} {% endif %}
-
-
- {% if item_artist %}{{ basic.value(id~'artist', item_artist) }} {% endif %}
- {% if item_title %}{{ basic.value(id~'title', item_title) }}{% endif %}
-
-
- {% if item_pos %}
-
-
- {{ basic.slider(id~'pos', item_pos, 0, 100, 1) }}
-
- {% endif %}
-
-
- {{ basic.button(id~'prev', item_next, 'back', icon0~'control_arrow_left.png', 0) }}
- {% if item_ff %} {{ basic.button(id~'rew', item_ff, 'rev', icon0~'audio_rew.png', 0) }} {% endif %}
- {{ basic.dual(id~'play', item_play, icon1~'audio_pause.png', icon0~'audio_play.png') }}
- {% if item_stop %} {{ basic.button(id~'stop', item_stop, 'stop', icon0~'audio_stop.png', 1) }} {% endif %}
- {% if item_ff %} {{ basic.button(id~'ff', item_ff, 'fwd', icon0~'audio_ff.png', 1) }} {% endif %}
- {{ basic.button(id~'next', item_next, 'next', icon0~'control_arrow_right.png', 1) }}
-
-
-
-{% endmacro %}
-
-
-/**
-* A widget to display a slideshow, controlled by items/items
-*
-* @param unique id for this widget
-* @param a directory where the pictures are located
-* @param delay between the slides in sec (optional, default: 2 sec)
-* @param item to switch to the next slide
-* @param item to switch to the previous slide
-* @param item to stop the animation
-* @param item to start the animation
-*
-* @author Alex
-*
-* @info based on cycle2 jquery-plugin: (c) 2012 M. Alsup; Dual licensed: MIT/GPL
-* @link http://jquery.malsup.com/cycle2
-*/
-{% macro slideshow(id, dir, delay, item_next, item_prev, item_stop, item_start) %}
- {% set uid = uid(page, id) %}
-
-
-
-
-
-
-
-{% endmacro %}
-
-
-/**
-* Displays a tv- or radio- station button
-*
-* @param unique id for this widget
-* @param a item
-* @param a icon (e. g. located in pics/station)
-* @param value send if the button is pressed (optional, default 1)
-* @param type: 'mini', 'midi' (optional, default: mini)
-*/
-{% macro station(id, item, pic, val, type) %}
- {% import "basic.html" as basic %}
- {% set uid = uid(page, id) %}
-
-
- {{ basic.button(id, item, '', pic, val, type|default('mini')) }}
-
-{% endmacro %}
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Displays a image witch is been reloaded after a given time
+*
+* @param unique id for this widget
+* @param the path/url to the image
+* @param the mode: 'none', 'corner', 'corner-bottom' (optional, default 'none')
+* @param the reload-time in duration-format (optional, default '10i')
+*
+* @see misc/fundamentals#Duration-Format
+*/
+{% macro image(id, src, mode, time) %}
+
+
+
+
+
+{% endmacro %}
+
+
+/**
+* Standard Multimedia Player
+*
+* @param unique id for this widget
+* @param the item for play/pause
+* @param the item for stopping the music (optional)
+* @param the item for fast forward and rewind (optional)
+* @param the item for next an previous playlist title
+* @param the item for the position (optional)
+* @param the item for the volume (optional)
+* @param the item to mute the music (optional)
+* @param the item for the song title (optional)
+* @param the item for the song artist (optional)
+* @param the item for repeat (optional)
+* @param the item to load the default playlist (optional)
+*
+* @author Axel Otterstätter
+*/
+{% macro music(id, item_play, item_stop, item_ff, item_next, item_pos, item_vol, item_mute, item_title, item_artist, item_repeat, item_playlist) %}
+ {% import "basic.html" as basic %}
+ {% set uid = uid(page, id) %}
+
+
+
+ {% if item_vol %}
+
+
+ {{ basic.slider(id~'vol', item_vol, 0, 100, 5, 'bottomup') }}
+
+ {% endif %}
+
+
+ {% if item_mute %} {{ basic.button(id~'mute', item_mute, 'Mute', icon0~'audio_volume_mute.png', 1) }} {% endif %}
+ {% if item_repeat %} {{ basic.dual(id~'repeat', item_repeat, icon1~'audio_repeat.png', icon0~'audio_repeat.png') }} {% endif %}
+ {% if item_playlist %} {{ basic.button(id~'playlist', item_playlist, 'Default Playlist', icon0~'audio_playlist.png', 1) }} {% endif %}
+
+
+ {% if item_artist %}{{ basic.value(id~'artist', item_artist) }} {% endif %}
+ {% if item_title %}{{ basic.value(id~'title', item_title) }}{% endif %}
+
+
+ {% if item_pos %}
+
+
+ {{ basic.slider(id~'pos', item_pos, 0, 100, 1) }}
+
+ {% endif %}
+
+
+ {{ basic.button(id~'prev', item_next, 'back', icon0~'control_arrow_left.png', 0) }}
+ {% if item_ff %} {{ basic.button(id~'rew', item_ff, 'rev', icon0~'audio_rew.png', 0) }} {% endif %}
+ {{ basic.dual(id~'play', item_play, icon1~'audio_pause.png', icon0~'audio_play.png') }}
+ {% if item_stop %} {{ basic.button(id~'stop', item_stop, 'stop', icon0~'audio_stop.png', 1) }} {% endif %}
+ {% if item_ff %} {{ basic.button(id~'ff', item_ff, 'fwd', icon0~'audio_ff.png', 1) }} {% endif %}
+ {{ basic.button(id~'next', item_next, 'next', icon0~'control_arrow_right.png', 1) }}
+
+
+
+{% endmacro %}
+
+
+/**
+* A widget to display a slideshow, controlled by items/items
+*
+* @param unique id for this widget
+* @param a directory where the pictures are located
+* @param delay between the slides in sec (optional, default: 2 sec)
+* @param item to switch to the next slide
+* @param item to switch to the previous slide
+* @param item to stop the animation
+* @param item to start the animation
+*
+* @author Alex
+*
+* @info based on cycle2 jquery-plugin: (c) 2012 M. Alsup; Dual licensed: MIT/GPL
+* @link http://jquery.malsup.com/cycle2
+*/
+{% macro slideshow(id, dir, delay, item_next, item_prev, item_stop, item_start) %}
+ {% set uid = uid(page, id) %}
+
+
+
+
+
+
+
+{% endmacro %}
+
+
+/**
+* Displays a tv- or radio- station button
+*
+* @param unique id for this widget
+* @param a item
+* @param a icon (e. g. located in pics/station)
+* @param value send if the button is pressed (optional, default 1)
+* @param type: 'mini', 'midi' (optional, default: mini)
+*/
+{% macro station(id, item, pic, val, type) %}
+ {% import "basic.html" as basic %}
+ {% set uid = uid(page, id) %}
+
+
+ {{ basic.button(id, item, '', pic, val, type|default('mini')) }}
+
+{% endmacro %}
diff --git a/widgets/phone.html b/widgets/phone.html
index e8a4bfe46..d0576e15f 100644
--- a/widgets/phone.html
+++ b/widgets/phone.html
@@ -1,100 +1,100 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Displays the phonelist from a phone system
-*
-* @param unique id for this widget
-* @param a title to display
-* @param the number of displayed lines, default 10
-*/
-{% macro list(id, title, count) %}
- {% set uid = uid(page, id) %}
-
-
- {% if title %} {{ title }}
{% endif %}
-
-
-
-
-
-{% endmacro %}
-
-
-/**
-* Displays the phonelist (only missed phonecalls) from a phone system
-*
-* @param unique id for this widget
-* @param a title to display
-* @param the number of displayed lines, default 3
-*/
-{% macro missedlist(id, title, count) %}
- {% set uid = uid(page, id) %}
-
-
- {% if title %} {{ title }}
{% endif %}
-
-
-
-
-
-{% endmacro %}
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Displays the phonelist from a phone system
+*
+* @param unique id for this widget
+* @param a title to display
+* @param the number of displayed lines, default 10
+*/
+{% macro list(id, title, count) %}
+ {% set uid = uid(page, id) %}
+
+
+ {% if title %} {{ title }}
{% endif %}
+
+
+
+
+
+{% endmacro %}
+
+
+/**
+* Displays the phonelist (only missed phonecalls) from a phone system
+*
+* @param unique id for this widget
+* @param a title to display
+* @param the number of displayed lines, default 3
+*/
+{% macro missedlist(id, title, count) %}
+ {% set uid = uid(page, id) %}
+
+
+ {% if title %} {{ title }}
{% endif %}
+
+
+
+
+
+{% endmacro %}
diff --git a/widgets/plot.html b/widgets/plot.html
index 836dbafe2..3b2535c07 100644
--- a/widgets/plot.html
+++ b/widgets/plot.html
@@ -1,146 +1,146 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* The diagram showing curves of relative humidity and effective temperature superimposed upon rectangular coordinates. The comfort-zones indicate when humans feel good.
-*
-* @param unique id for this widget
-* @param a item for the temperature
-* @param a item for the humidity
-*/
-{% macro comfortchart(id, item_temp, item_humidity) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* A simple widget for plotting charts with multiple y-axes (based on macro period)
-*
-* @param unique id for this widget
-* @param series of item/s. More item/s in array form: [ item1 , item2 ]
-* @param the mode: 'avg', 'sum', 'min', 'max'
-* @param the minimum time (x-axis): '1h', '2h'... (duration-format)
-* @param the maximum time (x-axis): '', '1h', '2h'... (duration-format, default: now)
-* @param the minimum for each y-axis (optional) use [ min_y-axis1, min_y-axis2, ...]
-* @param the maximum for each y-axis (optional) use [ max_y-axis1, max_y-axis2, ...]
-* @param the step between two time-points (optional, only for 'offline'-driver)
-* @param label/s for each series (optional)
-* @param color/s for each series e. g. '#f00' for red (optional, default: sutiable for design)
-* @param exposure is type/s for each series: 'line', 'stair', 'spline', 'area', 'areaspline', 'column' (optional, default 'line')
-* @param title/s for the x-axis and y-axis (
-* @param minimum time while zooming in sec (optional, duration-format)
-* @param yaxisnumber for each series (optional),
-* @param yaxisopposite true=1 or false=0 for each axis (optional)
-* @param yaxiscolor for each axis a color might be applied (optional)
-*
-* @see misc/fundamentals#Array-Form
-* @see misc/fundamentals#Duration-Format
-*/
-
-{% macro multiaxes( id, gad, mode, tmin, tmax, ymin, ymax, step, label, color, exposure, axes, zoom, yaxisnumber, yaxisopposite, yaxiscolor ) %}
-
-
- ... Graph comes here ...
-
- {% if once('multiaxes.js') %}
-
- {% endif %}
-
-
-{% endmacro %}
-
-
-/**
-* A simple widget for plotting charts
-*
-* @param unique id for this widget
-* @param series of item/s. More item/s in array form: [ item1 , item2 ]
-* @param the mode: 'avg', 'sum', 'min', 'max'
-* @param the minimum time (x-axis): '1h', '2h'... (duration-format)
-* @param the maximum time (x-axis): '', '1h', '2h'... (duration-format, default: now)
-* @param the minimum y-axis (optional)
-* @param the maximum y-axis (optional)
-* @param the step between two time-points (optional, only for 'offline'-driver)
-* @param label/s for each series (optional)
-* @param color/s for each series e. g. '#f00' for red (optional, default: sutiable for design)
-* @param type/s for each series: 'line', 'stair', 'spline', 'area', 'areaspline', 'column' (optional, default 'line')
-* @param title/s for the x-axis and y-axis
-* @param minimum time while zooming in sec (optional, duration-format)
-*
-* @see misc/fundamentals#Array-Form
-* @see misc/fundamentals#Duration-Format
-*/
-{% macro period(id, item, mode, tmin, tmax, ymin, ymax, step, label, color, exposure, axes, zoom) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* A temperature-chart for use with an rtr. Plots actual and set temperature. If the state is given it will be shown as pie.
-*
-* @param unique id for this widget
-* @param series of a item for the actual-temperature
-* @param series of a item for the set-temperature
-* @param series of a item for the state of the actor. It is shown as percental value within the pie. (> 0 is considered as 'on')
-*/
-{% macro rtr(id, item_actual, item_set, item_state) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* A complete house temperature plot. The rose shows all rooms with there actual and set temperature in one diagramm.
-*
-* @param unique id for this widget
-* @param a item for the actual-temperature. More item/s in array form: [ item1 , item2 ]
-* @param a item for the set-temperature. More item/s in array form: [ item1 , item2 ]
-* @param label/s for each axis
-*
-* @see misc/fundamentals#Array-Form
-*/
-{% macro temprose(id, item_actual, item_set, axis) %}
-
- {% if once('highcharts-more') %}
-
- {% endif %}
-
-
-
-{% endmacro %}
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* The diagram showing curves of relative humidity and effective temperature superimposed upon rectangular coordinates. The comfort-zones indicate when humans feel good.
+*
+* @param unique id for this widget
+* @param a item for the temperature
+* @param a item for the humidity
+*/
+{% macro comfortchart(id, item_temp, item_humidity) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* A simple widget for plotting charts with multiple y-axes (based on macro period)
+*
+* @param unique id for this widget
+* @param series of item/s. More item/s in array form: [ item1 , item2 ]
+* @param the mode: 'avg', 'sum', 'min', 'max'
+* @param the minimum time (x-axis): '1h', '2h'... (duration-format)
+* @param the maximum time (x-axis): '', '1h', '2h'... (duration-format, default: now)
+* @param the minimum for each y-axis (optional) use [ min_y-axis1, min_y-axis2, ...]
+* @param the maximum for each y-axis (optional) use [ max_y-axis1, max_y-axis2, ...]
+* @param the step between two time-points (optional, only for 'offline'-driver)
+* @param label/s for each series (optional)
+* @param color/s for each series e. g. '#f00' for red (optional, default: sutiable for design)
+* @param exposure is type/s for each series: 'line', 'stair', 'spline', 'area', 'areaspline', 'column' (optional, default 'line')
+* @param title/s for the x-axis and y-axis (
+* @param minimum time while zooming in sec (optional, duration-format)
+* @param yaxisnumber for each series (optional),
+* @param yaxisopposite true=1 or false=0 for each axis (optional)
+* @param yaxiscolor for each axis a color might be applied (optional)
+*
+* @see misc/fundamentals#Array-Form
+* @see misc/fundamentals#Duration-Format
+*/
+
+{% macro multiaxes( id, gad, mode, tmin, tmax, ymin, ymax, step, label, color, exposure, axes, zoom, yaxisnumber, yaxisopposite, yaxiscolor ) %}
+
+
+ ... Graph comes here ...
+
+ {% if once('multiaxes.js') %}
+
+ {% endif %}
+
+
+{% endmacro %}
+
+
+/**
+* A simple widget for plotting charts
+*
+* @param unique id for this widget
+* @param series of item/s. More item/s in array form: [ item1 , item2 ]
+* @param the mode: 'avg', 'sum', 'min', 'max'
+* @param the minimum time (x-axis): '1h', '2h'... (duration-format)
+* @param the maximum time (x-axis): '', '1h', '2h'... (duration-format, default: now)
+* @param the minimum y-axis (optional)
+* @param the maximum y-axis (optional)
+* @param the step between two time-points (optional, only for 'offline'-driver)
+* @param label/s for each series (optional)
+* @param color/s for each series e. g. '#f00' for red (optional, default: sutiable for design)
+* @param type/s for each series: 'line', 'stair', 'spline', 'area', 'areaspline', 'column' (optional, default 'line')
+* @param title/s for the x-axis and y-axis
+* @param minimum time while zooming in sec (optional, duration-format)
+*
+* @see misc/fundamentals#Array-Form
+* @see misc/fundamentals#Duration-Format
+*/
+{% macro period(id, item, mode, tmin, tmax, ymin, ymax, step, label, color, exposure, axes, zoom) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* A temperature-chart for use with an rtr. Plots actual and set temperature. If the state is given it will be shown as pie.
+*
+* @param unique id for this widget
+* @param series of a item for the actual-temperature
+* @param series of a item for the set-temperature
+* @param series of a item for the state of the actor. It is shown as percental value within the pie. (> 0 is considered as 'on')
+*/
+{% macro rtr(id, item_actual, item_set, item_state) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* A complete house temperature plot. The rose shows all rooms with there actual and set temperature in one diagramm.
+*
+* @param unique id for this widget
+* @param a item for the actual-temperature. More item/s in array form: [ item1 , item2 ]
+* @param a item for the set-temperature. More item/s in array form: [ item1 , item2 ]
+* @param label/s for each axis
+*
+* @see misc/fundamentals#Array-Form
+*/
+{% macro temprose(id, item_actual, item_set, axis) %}
+
+ {% if once('highcharts-more') %}
+
+ {% endif %}
+
+
+
+{% endmacro %}
diff --git a/widgets/status.html b/widgets/status.html
index d9c43551c..6f5526db1 100644
--- a/widgets/status.html
+++ b/widgets/status.html
@@ -1,89 +1,89 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Collapse a popup or a html-container
-*
-* @param unique id for this widget. Use this id in the child node (as class-attribute)
-* @param a item witch triggers the collapse
-*/
-{% macro collapse(id, item_trigger) %}
-
-
-
-{% endmacro %}
-
-
-/**
-* Displays a list of logging-information
-*
-* @param unique id for this widget
-* @param the name of the log
-* @param maximal number of entries (1 - 50)
-*/
-{% macro log(id, item, count) %}
-
-
-
-
-
-
-{% endmacro %}
-
-
-/**
-* Displays a notification edge window
-*
-* @param unique id for this widget
-* @param a item witch triggers the notification
-* @param a item with the dynamic message
-* @param a word for the signal corner
-* @param a title of the messagebox
-* @param a additional static text
-* @param the mode: 'info', 'warning', 'error' (optional, default 'info')
-*/
-{% macro notify(id, item_trigger, item_message, signal, title, text, mode) %}
-
- {{ title }}
{{ text }}
-
-
-{% endmacro %}
-
-
-/**
-* Displays a notification popup window
-*
-* @param unique id for this widget
-* @param a item witch triggers the popup: NOT 0 open it, 0 close it
-* @param a item with the dynamic message
-* @param a item with the a timestamp
-* @param a title of the messagebox
-* @param a additional static text
-* @param the mode: 'info', 'error' (optional, default 'info')
-*/
-{% macro popup(id, item_trigger, item_message, item_timestamp, title, text, mode) %}
-
-
-
-
-
-{% endmacro %}
-
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Show and hide a div or popup or collapse a section.
+*
+* @param unique id for this widget. Use this id in a div in the data-bind attribute to bind it to that widget
+* @param a item witch triggers the collapse
+*/
+{% macro collapse(id, item_trigger) %}
+
+
+
+{% endmacro %}
+
+
+/**
+* Displays a list of logging-information
+*
+* @param unique id for this widget
+* @param the name of the log
+* @param maximal number of entries (1 - 50)
+*/
+{% macro log(id, item, count) %}
+
+
+
+
+
+
+{% endmacro %}
+
+
+/**
+* Displays a notification edge window
+*
+* @param unique id for this widget
+* @param a item witch triggers the notification
+* @param a item with the dynamic message
+* @param a word for the signal corner
+* @param a title of the messagebox
+* @param a additional static text
+* @param the mode: 'info', 'warning', 'error' (optional, default 'info')
+*/
+{% macro notify(id, item_trigger, item_message, signal, title, text, mode) %}
+
+ {{ title }}
{{ text }}
+
+
+{% endmacro %}
+
+
+/**
+* Displays a notification popup window
+*
+* @param unique id for this widget
+* @param a item witch triggers the popup: NOT 0 open it, 0 close it
+* @param a item with the dynamic message
+* @param a item with the a timestamp
+* @param a title of the messagebox
+* @param a additional static text
+* @param the mode: 'info', 'error' (optional, default 'info')
+*/
+{% macro popup(id, item_trigger, item_message, item_timestamp, title, text, mode) %}
+
+
+
+
+
+{% endmacro %}
+
diff --git a/widgets/weather.html b/widgets/weather.html
index 4c7551452..2a995a80c 100644
--- a/widgets/weather.html
+++ b/widgets/weather.html
@@ -1,206 +1,206 @@
-/**
-* -----------------------------------------------------------------------------
-* @package smartVISU
-* @author Martin Gleiß
-* @copyright 2012 - 2015
-* @license GPL [http://www.gnu.de]
-* -----------------------------------------------------------------------------
-*/
-
-
-/**
-* Displays the actual weather at location
-*
-* @param unique id for this widget
-* @param location as string (optional)
-*
-* @info based on jDigiClock by Radoslav Dimov
-* @link http://www.radoslavdimov.com
-*/
-{% macro current(id, location) %}
- {% set uid = uid(page, id) %}
-
- {% if once('digiweather') %}
-
- {% endif %}
-
-
-
-
-
-
-
-
-
-
-
-
-{% endmacro %}
-
-
-/**
-* Displays the forecast weather of one day at location
-*
-* @param unique id for this widget
-* @param location as string (optional)
-* @param offset: 1 for tomorrow (default), 2 the day after tomorrow ..., (optional)
-*
-* @info based on jDigiClock by Radoslav Dimov
-* @link http://www.radoslavdimov.com
-*/
-{% macro forecast(id, location, day) %}
- {% set uid = uid(page, id) %}
-
- {% if once('digiweather') %}
-
- {% endif %}
-
-
-
-
-
-
-
-
-
-
-
-{% endmacro %}
-
-
-/**
-* Displays the forecast weather of the next 4 days
-*
-* @param unique id for this widget
-* @param location as string (optional)
-*
-* @info based on jDigiClock by Radoslav Dimov
-* @link http://www.radoslavdimov.com
-*/
-{% macro forecastweek(id, location) %}
- {% set uid = uid(page, id) %}
-
- {% if once('digiweather') %}
-
- {% endif %}
-
-
-
-
-
-
-{% endmacro %}
-
-
-/**
-* A Block with a map. The type specifies the kind of map.
-*
-* @param unique id for this widget
-* @param title of the block
-* @param the mode: 'day', 'night', 'forecast', 'wind', 'europe'
-*
-* @info Maps from tagesschau.de, Hessischer Rundfunk, Deutscher Wetterdienst
-* @link http://www.tagesschau.de
-*/
-{% macro map(id, title, mode) %}
- {% import "multimedia.html" as multimedia %}
-
-
-
- {% if mode == 'day' %}
- {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-tt_webL.jpg', 'corner-bottom') }}
- {% elseif mode == 'night' %}
- {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-tn_webL.jpg', 'corner-bottom') }}
- {% elseif mode == 'forecast' %}
- {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-3t_webL.jpg', 'corner-bottom') }}
- {% elseif mode == 'wind' %}
- {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-wi_webL.jpg', 'corner-bottom') }}
- {% elseif mode == 'europe' %}
- {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/eu-vs-t_webL.jpg', 'corner-bottom') }}
- {% endif %}
-
-
-
-{% endmacro %}
-
-
-/**
-* A block with a some weather-maps in a slideshow
-*
-* @param unique id for this widget
-* @param title of the block
-* @param delay between the slides in sec (optional, default: 2 sec)
-*
-* @info based on cycle2 jquery-plugin: (c) 2012 M. Alsup; Dual licensed: MIT/GPL
-* @link http://jquery.malsup.com/cycle2
-*/
-{% macro mapslides(id, title, delay) %}
- {% set uid = uid(page, id) %}
-
- {% if once('cycle2') %}
-
-
- {% endif %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{% endmacro %}
+/**
+* -----------------------------------------------------------------------------
+* @package smartVISU
+* @author Martin Gleiß
+* @copyright 2012 - 2015
+* @license GPL [http://www.gnu.de]
+* -----------------------------------------------------------------------------
+*/
+
+
+/**
+* Displays the actual weather at location
+*
+* @param unique id for this widget
+* @param location as string (optional)
+*
+* @info based on jDigiClock by Radoslav Dimov
+* @link http://www.radoslavdimov.com
+*/
+{% macro current(id, location) %}
+ {% set uid = uid(page, id) %}
+
+ {% if once('digiweather') %}
+
+ {% endif %}
+
+
-
+
+
+
+
+
+
+
+
+
+
+{% endmacro %}
+
+
+/**
+* Displays the forecast weather of one day at location
+*
+* @param unique id for this widget
+* @param location as string (optional)
+* @param offset: 1 for tomorrow (default), 2 the day after tomorrow ..., (optional)
+*
+* @info based on jDigiClock by Radoslav Dimov
+* @link http://www.radoslavdimov.com
+*/
+{% macro forecast(id, location, day) %}
+ {% set uid = uid(page, id) %}
+
+ {% if once('digiweather') %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+{% endmacro %}
+
+
+/**
+* Displays the forecast weather of the next 4 days
+*
+* @param unique id for this widget
+* @param location as string (optional)
+*
+* @info based on jDigiClock by Radoslav Dimov
+* @link http://www.radoslavdimov.com
+*/
+{% macro forecastweek(id, location) %}
+ {% set uid = uid(page, id) %}
+
+ {% if once('digiweather') %}
+
+ {% endif %}
+
+
+
+
+
+
+{% endmacro %}
+
+
+/**
+* A Block with a map. The type specifies the kind of map.
+*
+* @param unique id for this widget
+* @param title of the block
+* @param the mode: 'day', 'night', 'forecast', 'wind', 'europe'
+*
+* @info Maps from tagesschau.de, Hessischer Rundfunk, Deutscher Wetterdienst
+* @link http://www.tagesschau.de
+*/
+{% macro map(id, title, mode) %}
+ {% import "multimedia.html" as multimedia %}
+
+
+
+ {% if mode == 'day' %}
+ {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-tt_webL.jpg', 'corner-bottom') }}
+ {% elseif mode == 'night' %}
+ {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-tn_webL.jpg', 'corner-bottom') }}
+ {% elseif mode == 'forecast' %}
+ {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-3t_webL.jpg', 'corner-bottom') }}
+ {% elseif mode == 'wind' %}
+ {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/de-vs-wi_webL.jpg', 'corner-bottom') }}
+ {% elseif mode == 'europe' %}
+ {{ multimedia.image(id, 'http://wetter.tagesschau.de/import/wetter-cms/vorhersagen/img/eu-vs-t_webL.jpg', 'corner-bottom') }}
+ {% endif %}
+
+
+
+{% endmacro %}
+
+
+/**
+* A block with a some weather-maps in a slideshow
+*
+* @param unique id for this widget
+* @param title of the block
+* @param delay between the slides in sec (optional, default: 2 sec)
+*
+* @info based on cycle2 jquery-plugin: (c) 2012 M. Alsup; Dual licensed: MIT/GPL
+* @link http://jquery.malsup.com/cycle2
+*/
+{% macro mapslides(id, title, delay) %}
+ {% set uid = uid(page, id) %}
+
+ {% if once('cycle2') %}
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endmacro %}
diff --git a/widgets/widget.js b/widgets/widget.js
index e64853640..03efad888 100644
--- a/widgets/widget.js
+++ b/widgets/widget.js
@@ -1060,14 +1060,14 @@ $(document).delegate('span[data-widget="status.collapse"]', {
// response is: {{ gad_trigger }}
if (response[0] != 0) {
- $('.' + $(this).attr('data-id')).not('.ui-collapsible').show();
- $('.' + $(this).attr('data-id') + '.ui-popup').popup("open");
- $('.' + $(this).attr('data-id')).trigger("expand");
+ $('div[data-bind="' + $(this).attr('data-id') + '"]').not('.ui-collapsible').show();
+ $('div[data-bind="' + $(this).attr('data-id') + '"].ui-popup').popup("open");
+ $('div[data-bind="' + $(this).attr('data-id') + '"]').trigger("expand");
}
else {
- $('.' + $(this).attr('data-id')).not('.ui-collapsible').hide();
- $('.' + $(this).attr('data-id') + '.ui-popup').popup("close");
- $('.' + $(this).attr('data-id')).trigger("collapse");
+ $('div[data-bind="' + $(this).attr('data-id') + '"]').not('.ui-collapsible').hide();
+ $('div[data-bind="' + $(this).attr('data-id') + '"].ui-popup').popup("close");
+ $('div[data-bind="' + $(this).attr('data-id') + '"]').trigger("collapse");
}
}
});
diff --git a/widgets/widget.min.js b/widgets/widget.min.js
index beb67b2f2..66aea3750 100644
--- a/widgets/widget.min.js
+++ b/widgets/widget.min.js
@@ -2,20 +2,20 @@
$(document).delegate('a[data-widget="basic.button"]',{click:function(d){""!=$(this).attr("data-val")&&io.write($(this).attr("data-item"),$(this).attr("data-val"))}});$(document).delegate('input[data-widget="basic.checkbox"]',{update:function(d,a){$(this).prop("checked",0!=a).checkboxradio("refresh")},change:function(d){io.write($(this).attr("data-item"),$(this).prop("checked")?1:0)}});
$(document).delegate('a[data-widget="basic.colordisc"]',{update:function(d,a){var b=$(this).attr("data-max");$("#"+this.id+" span").css("background-color","rgb("+Math.round(a[0]/b*255)+","+Math.round(a[1]/b*255)+","+Math.round(a[2]/b*255)+")")},click:function(d){$("#"+this.id+"-screen").removeClass("hide").addClass("in");var a=$(this).offset();d=$("#"+this.id+"-disc");var b=a.top-d.height()/2+15,a=a.left-d.width()/2+25;d.css("top",b.limit(5,$(window).height()+$(document).scrollTop()-d.height()-5,
1));d.css("left",a.limit(5,$(window).width()-d.width()-5,1));d.show()}});$(document).delegate('div[data-widget="basic.colordisc"]',{click:function(d){d=this.id.substr(0,this.id.length-7);$("#"+d+"-disc").hide();$("#"+d+"-screen").removeClass("in").addClass("hide")}});
-$(document).delegate('canvas[data-widget="basic.colordisc"]',{init:function(d){d=parseFloat($(this).attr("data-colors"));var a=$(this)[0],b=100/($(this).attr("data-step")/2),c=Math.PI/(d+2)*2,e=-(Math.PI/2)+c,f=16.875/($(this).attr("data-step")/8),g=360/d;a.width=280;a.height=280;if(a.getContext){a=a.getContext("2d");a.beginPath();a.fillStyle="#888";a.shadowColor="rgba(96,96,96,0.4)";a.shadowOffsetX=2;a.shadowOffsetY=2;a.shadowBlur=4;a.arc(139,139,139,0,2*Math.PI,!1);a.fill();a.beginPath();a.shadowOffsetX=
-0;a.shadowOffsetY=0;a.shadowBlur=0;a.fillStyle="#555";a.arc(139,139,138,0,2*Math.PI,!1);a.fill();for(var h,l=0;l<=d;l++){var m=e+l*c,n=1,k=l*g;for(h=b;100>=h;h+=b)a.beginPath(),a.fillStyle=fx.hsv2rgb(k,100,h),a.arc(139,139,n*f+f+1,m,m+c+0.01,!1),a.arc(139,139,n*f,m+c+0.01,m,!0),a.fill(),n+=1;for(h=100-b;h>=b;h-=b)a.beginPath(),a.fillStyle=fx.hsv2rgb(k,h,100),a.arc(139,139,n*f+f+1,m,m+c+0.01,!1),a.arc(139,139,n*f,m+c+0.01,m,!0),a.fill(),n+=1}l-=1;m=e+l*c;n=1;k=l*g;for(h=b;100>=h;h+=b/2)a.beginPath(),
-a.fillStyle=fx.hsv2rgb(k,0,h),a.arc(139,139,n*f+f+1,m,m+2*c+0.01,!1),a.arc(139,139,n*f,m+2*c+0.01,m,!0),a.fill(),n+=1;a.beginPath();a.fillStyle="rgb(0,0,0)";a.arc(139,139,f+1,0,2*Math.PI,!1);a.fill()}},click:function(d){var a=this.id.substr(0,this.id.length-5),b=$(this)[0].getContext("2d"),c=$(this).offset(),e=Math.round(d.pageX-c.left);d=Math.round(d.pageY-c.top);b=b.getImageData(e,d,1,1).data;e=$("#"+a).attr("data-max");d=$("#"+a).attr("data-item").explode();io.write(d[0],Math.round(b[0]/255*e));
-io.write(d[1],Math.round(b[1]/255*e));io.write(d[2],Math.round(b[2]/255*e));$(this).hide();$("#"+a+"-screen").removeClass("in").addClass("hide")}});
+$(document).delegate('canvas[data-widget="basic.colordisc"]',{init:function(d){d=parseFloat($(this).attr("data-colors"));var a=$(this)[0],b=100/($(this).attr("data-step")/2),c=Math.PI/(d+2)*2,e=-(Math.PI/2)+c,f=16.875/($(this).attr("data-step")/8),h=360/d;a.width=280;a.height=280;if(a.getContext){a=a.getContext("2d");a.beginPath();a.fillStyle="#888";a.shadowColor="rgba(96,96,96,0.4)";a.shadowOffsetX=2;a.shadowOffsetY=2;a.shadowBlur=4;a.arc(139,139,139,0,2*Math.PI,!1);a.fill();a.beginPath();a.shadowOffsetX=
+0;a.shadowOffsetY=0;a.shadowBlur=0;a.fillStyle="#555";a.arc(139,139,138,0,2*Math.PI,!1);a.fill();for(var k,l=0;l<=d;l++){var m=e+l*c,n=1,p=l*h;for(k=b;100>=k;k+=b)a.beginPath(),a.fillStyle=fx.hsv2rgb(p,100,k),a.arc(139,139,n*f+f+1,m,m+c+.01,!1),a.arc(139,139,n*f,m+c+.01,m,!0),a.fill(),n+=1;for(k=100-b;k>=b;k-=b)a.beginPath(),a.fillStyle=fx.hsv2rgb(p,k,100),a.arc(139,139,n*f+f+1,m,m+c+.01,!1),a.arc(139,139,n*f,m+c+.01,m,!0),a.fill(),n+=1}--l;m=e+l*c;n=1;p=l*h;for(k=b;100>=k;k+=b/2)a.beginPath(),a.fillStyle=
+fx.hsv2rgb(p,0,k),a.arc(139,139,n*f+f+1,m,m+2*c+.01,!1),a.arc(139,139,n*f,m+2*c+.01,m,!0),a.fill(),n+=1;a.beginPath();a.fillStyle="rgb(0,0,0)";a.arc(139,139,f+1,0,2*Math.PI,!1);a.fill()}},click:function(d){var a=this.id.substr(0,this.id.length-5),b=$(this)[0].getContext("2d"),c=$(this).offset(),e=Math.round(d.pageX-c.left);d=Math.round(d.pageY-c.top);b=b.getImageData(e,d,1,1).data;e=$("#"+a).attr("data-max");d=$("#"+a).attr("data-item").explode();io.write(d[0],Math.round(b[0]/255*e));io.write(d[1],
+Math.round(b[1]/255*e));io.write(d[2],Math.round(b[2]/255*e));$(this).hide();$("#"+a+"-screen").removeClass("in").addClass("hide")}});
$(document).delegate('a[data-widget="basic.dual"]',{update:function(d,a){$("#"+this.id+" img").attr("src",a==$(this).attr("data-val-on")?$(this).attr("data-pic-on"):$(this).attr("data-pic-off"))},click:function(d){$("#"+this.id+" img").attr("src")==$(this).attr("data-pic-off")?io.write($(this).attr("data-item"),$(this).attr("data-val-on")):io.write($(this).attr("data-item"),$(this).attr("data-val-off"))}});
$(document).delegate('a[data-widget="basic.multistate"]',{update:function(d,a){list_val=$(this).attr("data-vals").explode();list_img=$(this).attr("data-img").explode();idx=list_val.indexOf(a.toString());$("#"+this.id+" img").attr("src",list_img[idx]);$(this).attr("index-mem",idx)},click:function(d){list_val=$(this).attr("data-vals").explode();old_idx=parseInt($(this).attr("index-mem"));d=old_idx+1;d>=list_val.length&&(d=0);io.write($(this).attr("data-item"),list_val[d]);$(this).attr("index-mem",d)}});
$(document).delegate('select[data-widget="basic.flip"]',{update:function(d,a){$(this).val(0
+ div',{click:function(d){d=$(this).css("background-color");d=d.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);var a=$(this).parent().attr("data-max"),b=$(this).parent().attr("data-item").explode();io.write(b[0],Math.round(d[1]/255*a));io.write(b[1],Math.round(d[2]/255*a));io.write(b[2],Math.round(d[3]/255*a));$(this).parent().popup("close")},mouseenter:function(d){$(this).addClass("ui-focus")},mouseleave:function(d){$(this).removeClass("ui-focus")}});
-$(document).delegate('span[data-widget="basic.shifter"]',{update:function(d,a){var b=Math.min(10*(a[0]/$(this).attr("data-max")*10+0.49).toFixed(0),100);0!=a[1]&&0 a > img',"hover",function(d){"mouseenter"===d.type?$(this).addClass("ui-focus"):$(this).removeClass("ui-focus")});
-$(document).delegate('div[data-widget="basic.shutter"]',{update:function(d,a){var b=13,c="half"==$(this).attr("data-mode")?0.5:1;void 0!==a[1]&&(b=parseInt(13/c*(a[1]/$(this).attr("data-max")+c-1)));for(var e=parseInt(182*a[0]/$(this).attr("data-max")),f=12;1<=f;f--)if(14<=e){var g=13-Math.abs(b),c="height: "+(e>14*f&&13==b?14-g:15-g)+"px;",c=13!=b?c+("margin-top: "+(14<=e-15?g:parseInt(g/2))+"px;"):c+("border-top: 1px dotted "+(e>14*f?"#ccc":"#333")+";");014*f&&13==b?14-h:15-h)+"px;",c=13!=b?c+("margin-top: "+(14<=e-15?h:parseInt(h/2))+"px;"):c+("border-top: 1px dotted "+(e>14*f?"#ccc":"#333")+";");0 div > a[data-icon="plus"]',{click:function(d,a){var b=$(this).parent().parent().attr("id"),c=$("#"+b).attr("data-step"),b=$("#"+b+"set").attr("data-item"),c=(Math.round(10*(1*widget.get(b)+1*c))/10).toFixed(1);io.write(b,c)}});
$(document).delegate('div[data-widget="plot.comfortchart"]',{update:function(d,a){var b=$(this).attr("data-label").explode(),c=$(this).attr("data-axis").explode(),e=[];e[0]={type:"area",name:b[0],lineWidth:0,data:[[17,35],[16,75],[17,85],[21,80],[25,60],[27,35],[25,19],[20,20],[17,35]]};e[1]={type:"area",name:b[1],lineWidth:0,data:[[17,75],[22.5,65],[25,33],[18.5,35],[17,75]]};e[2]={name:"point",data:[[1*a[0],1*a[1]]],marker:{enabled:!0,lineWidth:2,radius:6,symbol:"circle"},showInLegend:!1};$("#"+
this.id).highcharts({series:e,xAxis:{min:10,max:35,title:{text:c[0],align:"high",margin:-2}},yAxis:{min:0,max:100,title:{text:c[1],margin:7}},plotOptions:{area:{enableMouseTracking:!1}},tooltip:{formatter:function(){return this.x.transUnit("temp")+" / "+this.y.transUnit("%")}}})},point:function(d,a){var b=$("#"+this.id).highcharts(),c=b.series[2].data[0];a[0]||(a[0]=c.x);a[1]||(a[1]=c.y);b.series[2].data[0].update([1*a[0],1*a[1]],!0)}});
-$(document).delegate('div[data-widget="plot.multiaxes"]',{update:function(d,a){for(var b=$(this).attr("data-label").explode(),c=$(this).attr("data-color").explode(),e=$(this).attr("data-exposure").explode(),f=$(this).attr("data-axis").explode(),g=[],h=[],l=$(this).attr("data-ymin").explode(),m=$(this).attr("data-ymax").explode(),n=$(this).attr("data-axesassign").explode(),k=0;kg?g*=100:100h?h*=100:100"+(this.percentage?this.y.transUnit("%"):this.y.transUnit("temp"))+" "}}})},point:function(d,a){for(var b=0;b"+this.y.transUnit("temp")+" "}},legend:{x:10,layout:"vertical"}})},point:function(d,a){var b=$("#"+this.id).highcharts(),c=b.series[2].data[0];a[0]||(a[0]=c.x);a[1]||(a[1]=c.y);b.series[2].data[0].update([1*a[0],1*a[1]],!0)}});
+$(document).delegate('span[data-widget="status.collapse"]',{update:function(d,a){0!=a[0]?($("."+$(this).attr("data-id")).not(".ui-collapsible").show(),$("."+$(this).attr("data-id")+".ui-popup").popup("open"),$("."+$(this).attr("data-id")).trigger("expand")):($("."+$(this).attr("data-id")).not(".ui-collapsible").hide(),$("."+$(this).attr("data-id")+".ui-popup").popup("close"),$("."+$(this).attr("data-id")).trigger("collapse"))}});
$(document).delegate('span[data-widget="status.log"]',{update:function(d,a){var b,c="";if(a[0]instanceof Array){for(var e=a[0].slice(0,$(this).attr("data-count")),f=0;f ',b+=""+(new Date(e[f].time)).transLong()+"
",b+=""+e[f].message+"
",c+=''+b+" ";$("#"+this.id+" ul").html(c).trigger("prepare").listview("refresh").trigger("redraw")}}});
$(document).delegate('span[data-widget="status.notify"]',{update:function(d,a){0!=a[0]&&(notify.add($(this).attr("data-mode"),$(this).attr("data-signal"),$("#"+this.id+" h1").html(),""+a[1]+"
"+$("#"+this.id+" p").html()),notify.display())}});
+$(document).delegate('span[data-widget="status.popup"]',{update:function(d,a){0!=a[0]?($("#"+this.id+"-popup p span").html(a[1]?""+a[1]+"
":""),$("#"+this.id+"-popup .stamp").html(a[2]?(new Date(a[2])).transShort():(new Date).transShort()),$("#"+this.id+"-popup").popup("open")):$("#"+this.id+"-popup").popup("close")}});
$(document).delegate('svg[data-widget^="icon."]',{update:function(d,a){a instanceof Array&&this.setAttributeNS(null,"class","icon"+(a[0]&&a[1]?" icon1":" icon0"))},click:function(d){$(this).attr("data-item")&&(d=$(this).attr("data-item").explode(),d[1]&&io.write(d[1],0==widget.get(d[1])?1:0))}});
$(document).delegate('svg[data-widget="icon.arrow"]',{update:function(d,a){var b=a[0]/$(this).attr("data-max")*2*Math.PI,c=[],c=c.concat([50,50],fx.rotate([25,50],b,[50,50]),fx.rotate([50,18],b,[50,50]),fx.rotate([75,50],b,[50,50]),[50,50]);$("#"+this.id+" #line0").attr("points",c.toString());c=[];c=c.concat(fx.rotate([32,50],b,[50,50]),fx.rotate([32,60],b,[50,50]),fx.rotate([68,60],b,[50,50]),fx.rotate([68,50],b,[50,50]));$("#"+this.id+" #line1").attr("points",c.toString())}});
-$(document).delegate('svg[data-widget="icon.battery"]',{update:function(d,a){var b=Math.round(a[0]/$(this).attr("data-max")*40);fx.grid(this,b,[39,68],[61,28])}});$(document).delegate('svg[data-widget="icon.blade"]',{update:function(d,a){for(var b=a[0]/$(this).attr("data-max")*0.4*Math.PI,c,e=0;3>=e;e++)c=[],c=c.concat(fx.rotate([37,20+20*e],b,[50,20+20*e]),fx.rotate([63,20+20*e],b,[50,20+20*e])),$("#"+this.id+" #blade"+e).attr("points",c.toString())}});
-$(document).delegate('svg[data-widget="icon.blade_z"]',{update:function(d,a){var b=a[0]/$(this).attr("data-max")*0.5*Math.PI*-1,c=[],c=c.concat(fx.rotate([25,25],b,[50,30]),fx.rotate([45,25],b,[50,30]),fx.rotate([55,35],b,[50,30]),fx.rotate([75,35],b,[50,30]));$("#"+this.id+" #blade0").attr("points",c.toString());c=[];c=c.concat(fx.rotate([25,65],b,[50,70]),fx.rotate([45,65],b,[50,70]),fx.rotate([55,75],b,[50,70]),fx.rotate([75,75],b,[50,70]));$("#"+this.id+" #blade1").attr("points",c.toString())}});
-$(document).delegate('svg[data-widget="icon.blade_arc"]',{update:function(d,a){var b=a[0]/$(this).attr("data-max")*-0.7*Math.PI+0.35*Math.PI,c;c="M "+fx.rotate([30,40],b,[50,37])+" Q "+fx.rotate([50,22],b,[50,30])+" "+fx.rotate([70,40],b,[50,37]);$("#"+this.id+" #blade0").attr("d",c);c="M "+fx.rotate([30,80],b,[50,77])+" Q "+fx.rotate([50,62],b,[50,70])+" "+fx.rotate([70,80],b,[50,77]);$("#"+this.id+" #blade1").attr("d",c)}});
+$(document).delegate('svg[data-widget="icon.battery"]',{update:function(d,a){var b=Math.round(a[0]/$(this).attr("data-max")*40);fx.grid(this,b,[39,68],[61,28])}});$(document).delegate('svg[data-widget="icon.blade"]',{update:function(d,a){for(var b=a[0]/$(this).attr("data-max")*.4*Math.PI,c,e=0;3>=e;e++)c=[],c=c.concat(fx.rotate([37,20+20*e],b,[50,20+20*e]),fx.rotate([63,20+20*e],b,[50,20+20*e])),$("#"+this.id+" #blade"+e).attr("points",c.toString())}});
+$(document).delegate('svg[data-widget="icon.blade_z"]',{update:function(d,a){var b=a[0]/$(this).attr("data-max")*.5*Math.PI*-1,c=[],c=c.concat(fx.rotate([25,25],b,[50,30]),fx.rotate([45,25],b,[50,30]),fx.rotate([55,35],b,[50,30]),fx.rotate([75,35],b,[50,30]));$("#"+this.id+" #blade0").attr("points",c.toString());c=[];c=c.concat(fx.rotate([25,65],b,[50,70]),fx.rotate([45,65],b,[50,70]),fx.rotate([55,75],b,[50,70]),fx.rotate([75,75],b,[50,70]));$("#"+this.id+" #blade1").attr("points",c.toString())}});
+$(document).delegate('svg[data-widget="icon.blade_arc"]',{update:function(d,a){var b=a[0]/$(this).attr("data-max")*-.7*Math.PI+.35*Math.PI,c;c="M "+fx.rotate([30,40],b,[50,37])+" Q "+fx.rotate([50,22],b,[50,30])+" "+fx.rotate([70,40],b,[50,37]);$("#"+this.id+" #blade0").attr("d",c);c="M "+fx.rotate([30,80],b,[50,77])+" Q "+fx.rotate([50,62],b,[50,70])+" "+fx.rotate([70,80],b,[50,77]);$("#"+this.id+" #blade1").attr("d",c)}});
$(document).delegate('svg[data-widget="icon.clock"]',{update:function(d,a){var b=a[0]%60/60*2*Math.PI;$("#"+this.id+" #hand_l").attr("points","50,50 "+fx.rotate([50,30],b,[50,50]).toString());b=5*Math.floor(a[0]/60)/60*2*Math.PI;$("#"+this.id+" #hand_s").attr("points","50,50 "+fx.rotate([50,35],b,[50,50]).toString())}});
$(document).delegate('svg[data-widget="icon.compass"]',{update:function(d,a){var b=a[0]/$(this).attr("data-max")*2*Math.PI,c=[],c=c.concat(fx.rotate([40,50],b,[50,50]),fx.rotate([50,25],b,[50,50]),fx.rotate([60,50],b,[50,50]));$("#"+this.id+" #pin0").attr("points",c.toString());c=[];c=c.concat(fx.rotate([40,50],b,[50,50]),fx.rotate([50,75],b,[50,50]),fx.rotate([60,50],b,[50,50]));$("#"+this.id+" #pin1").attr("points",c.toString())}});
$(document).delegate('svg[data-widget="icon.graph"]',{update:function(d,a){var b=Math.round(a[0]/$(this).attr("data-max")*70),c=$("#"+this.id+" #graph").attr("d").substr(8),e=c.split("L");8e;e++)c=[],c=c.concat(fx.rotate([71+2*e,50+14*e],b,[80,22]),fx.rotate([89-2*e,50+14*e],b,[80,22]),fx.rotate([88-2*e,54+14*e],b,[80,22]),fx.rotate([72+2*e,54+14*e],b,[80,22])),$("#"+this.id+" #part"+e).attr("points",c.toString());
+$(document).delegate('svg[data-widget="icon.windsock"]',{update:function(d,a){var b=a[0]/$(this).attr("data-max")*.45*Math.PI,c=[],c=c.concat(fx.rotate([70,40],b,[80,22]),[80,22],fx.rotate([90,40],b,[80,22]));$("#"+this.id+" #top").attr("points",c.toString());for(var e=0;3>e;e++)c=[],c=c.concat(fx.rotate([71+2*e,50+14*e],b,[80,22]),fx.rotate([89-2*e,50+14*e],b,[80,22]),fx.rotate([88-2*e,54+14*e],b,[80,22]),fx.rotate([72+2*e,54+14*e],b,[80,22])),$("#"+this.id+" #part"+e).attr("points",c.toString());
c=[];c=c.concat(fx.rotate([70,40],b,[80,22]),fx.rotate([76,82],b,[80,22]),fx.rotate([84,82],b,[80,22]),fx.rotate([90,40],b,[80,22]));$("#"+this.id+" #part3").attr("points",c.toString())}});
-Use it with simle html: