2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-12 16:46:35 +00:00

YAF: added generic widget + minor fixes and enhancements

* generic widget allows all types of devices in a basic fashion
* several typos/formatting issues/dummy functions
* pressing "space" toggles menu
* save button in menu returns to fhem, executing "save" command


git-svn-id: https://svn.fhem.de/fhem/trunk@3560 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
marcproe 2013-07-31 14:10:06 +00:00
parent 9727e39167
commit d743e8b76b
8 changed files with 1010 additions and 684 deletions

View File

@ -71,6 +71,8 @@ sub fht80_get_widgetcss() {
sub fht80_get_widgetjs() {
my $output = '
function fht80_on_click(view_id, widget_id) {
}
function fht80_update_widget(view_id, widget_id) {
$.ajax({
type: "GET",
@ -206,8 +208,8 @@ sub fht80_get_temp() {
my $desi = fht80_isdef($defs{$fhemname}{READINGS}{"desired-temp"}{VAL}, "");
my $battery = fht80_isdef($defs{$fhemname}{READINGS}{battery}{VAL}, "");
my $nomode = YAF_getWidgetAttribute($viewid, $widgetid, "nomode", 0);
my $labeltype = YAF_getWidgetAttribute($viewid, $widgetid, "labeltype", "");
$ret[1] = YAF_getWidgetAttribute($viewid, $widgetid, "size", 1); #we don't process the size, so put it in the return array right away.
my $labeltype = YAF_getWidgetAttribute($viewid, $widgetid, "labeltype", "");
$ret[1] = YAF_getWidgetAttribute($viewid, $widgetid, "size", 1); #we don't process the size, so put it in the return array right away.
#process data
my $label = "";

View File

@ -70,9 +70,11 @@ sub fhttk_get_widgetcss() {
sub fhttk_get_widgetjs() {
my $output = '
function endsWith(str, suffix) {
function fhttk_endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
function fhttk_on_click(view_id, widget_id) {
}
function fhttk_update_widget(view_id, widget_id) {
$.ajax({
type: "GET",
@ -83,7 +85,7 @@ sub fhttk_get_widgetjs() {
success: function(get_state) {
var widget = $("#widget_"+view_id+"_"+widget_id);
$("#widget_"+view_id+"_"+widget_id).attr("title",get_state);
if (endsWith(get_state,"Open")) {
if (fhttk_endsWith(get_state,"Open")) {
if (widget.hasClass("widget_fhttk_closed")) {
widget.removeClass("widget_fhttk_closed");
}
@ -92,7 +94,7 @@ sub fhttk_get_widgetjs() {
}
widget.html("<span />");
}
else if (endsWith(get_state,"Closed")) {
else if (fhttk_endsWith(get_state,"Closed")) {
if (!widget.hasClass("widget_fhttk_closed")) {
widget.addClass("widget_fhttk_closed");
}

View File

@ -0,0 +1,296 @@
########################################################################################
#
# generic.pm
#
# YAF - Yet Another Floorplan
# FHEM Projektgruppe Hochschule Karlsruhe, 2013
# Markus Mangei, Daniel Weisensee, Prof. Dr. Peter A. Henning
#
# generic Widget: Marc Pro
#
########################################################################################
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
########################################################################################
package main;
use strict;
use warnings;
my $yaf_version = 0.41;
use vars qw(%_GET);
use vars qw(%defs);
#######################################################################################
#
# generic_get_widgetcss - Create the CSS code for this widget
#
# no parameter
#
########################################################################################
sub generic_get_widgetcss() {
my $output = "
.widget_generic {
width: 200px;
height: 50px;
background-repeat:no-repeat;
background-position:center center;
opacity:1 !important;
text-align: center;
}
";
return $output;
}
########################################################################################
#
# generic_get_widgetjs - Create the javascript code for this widget
#
# no parameter
#
########################################################################################
sub generic_get_widgetjs() {
my $output = '
function generic_endsWith(str, suffix) {
if(!str) {
return false;
}
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
function generic_on_click(view_id, widget_id) {
}
function generic_update_widget(view_id, widget_id) {
$.ajax({
type: "GET",
async: true,
url: "../../ajax/widget/generic/get_state",
data: "view_id="+view_id+"&widget_id="+widget_id,
context: document.body,
success: function(get_state) {
var data = jQuery.parseJSON(get_state);
var label = data[0];
var icon = data[1];
var statesave = $("#widget_generic_state_"+view_id+"_"+widget_id);
var state = data[2];
var statespan = data[3];
var fhemname = data[4];
var widget = $("#widget_"+view_id+"_"+widget_id);
if (!statesave.hasClass("widget_generic_"+state)) {
if(generic_endsWith(icon,"png")) {
var iconstring = label+"<br /><img src="+icon+" title="+label+"&nbsp;&#10;"+fhemname+"&nbsp;&#10;"+ state +" />"+statespan;
widget.html(iconstring);
} else {
var textstring = "<span title="+fhemname+" >"+label+"</span><br />" + state;
widget.html(textstring+" "+statespan);
}
}
}
});
}';
# $output .='
# function generic_get_reading_keys() {
# $.ajax({
# type: "GET",
# async: true,
# url: "../../ajax/widget/generic/get_reading_keys",
# data: "fhemname="+$("#combobox").val(),
# context: document.body,
# success: function(dataarr) {
# var data = jQuery.parseJSON(dataarr);
# //alert(data[0]);
# var mySelect = $("#generic_combobox_readings");
# mySelect
# .find("option")
# .remove()
# .end()
# ;
# ;
# $.each(data, function(val,text) {
# mySelect.append(
# $("<option></option>").val(text).html(text)
# );
# });
# }
# });
# }
# ';
return $output;
}
########################################################################################
#
# generic_getwidgethtml - HTML code for this widget
#
# no parameter
#
########################################################################################
sub generic_get_widgethtml() {
my $output = " ";
return $output;
}
########################################################################################
#
# generic_get_addwidget_setup_html - Create the selection of devices for this widget
#
# no parameter
#
########################################################################################
sub generic_get_addwidget_setup_html() {
my $output = "";
$output = "<script src='js/combobox.js'></script>";
$output .="<select name='generic_combobox' id='combobox' onClick=generic_get_reading_keys()>";
my @list = (keys %defs);
foreach my $d (sort @list) {
my $type = $defs{$d}{TYPE};
my $name = $defs{$d}{NAME};
if(defined $name) {
$output .= "<option value='$name'>$name</option>";
}
}
$output .= "</select>";
# $output .= "<br />Use Reading as state: <select name='generic_combobox_readings' id ='generic_combobox_readings' />";
# $output .= "<span onClick=generic_get_reading_keys('FHT_1b1b')>TEST</span>";
return $output;
}
# sub generic_get_reading_keys() {
# my $fhemname = $_GET{"fhemname"};
# my @ret = ();
# Log 3, "Loading Shit";
# foreach my $r (keys %{$defs{$fhemname}{READINGS}}) {
# Log 3,$r;
# push(@ret,$r);
# }
# return encode_json(\@ret);
# }
########################################################################################
#
# generic_get_addwidget_prepare_attributes -
#
#
# no parameter
#
########################################################################################
sub generic_get_addwidget_prepare_attributes() {
my $output = '
var temp_array = new Array();
temp_array[0] = "fhemname";
temp_array[1] = $("#combobox option:selected").val()
attributes_array[0] = temp_array;
';
return $output;
}
########################################################################################
#
# generic_getwidget_html - HTML code for this widget. DO WE NEED THIS ? SEE ABOVE
# DO WE NEED IT? WHO KNOWS. (It looks like this one fills the initial html of the
# widget, so let's keep it for science.)
#
# no parameter
#
########################################################################################
sub generic_getwidget_html() {
my $output = " ";
return $output;
}
########################################################################################
#
# generic_get_lamp_status - return the state of the lamp
#
# no parameter
#
########################################################################################
sub generic_get_state() {
my $fhemname = YAF_getWidgetAttribute($_GET{"view_id"}, $_GET{"widget_id"}, "fhemname");
my $labeltype = YAF_getWidgetAttribute($_GET{"view_id"}, $_GET{"widget_id"}, "labeltype","");
my $statetype = YAF_getWidgetAttribute($_GET{"view_id"}, $_GET{"widget_id"}, "statetype","");
my $showlabel = YAF_getWidgetAttribute($_GET{"view_id"}, $_GET{"widget_id"}, "showlabel","1");
my $showicon = YAF_getWidgetAttribute($_GET{"view_id"}, $_GET{"widget_id"}, "showicon","1");
my $d = $defs{$fhemname};
my $state = $d->{STATE};
my $iconpath = "/fhem/images/default/";
my @ret = ();
if(!defined $state) {
$state = "no-state-defined";
}
if(defined $d) {
my $devStateIcon = AttrVal($fhemname,"devStateIcon",undef);
if(defined $devStateIcon) {
foreach my $entry (split (/ /,$devStateIcon)) {
my @keyval = split(/:/,$entry);
if($keyval[0] =~ $state) {
$iconpath .= $keyval[1] . ".png";
}
}
$ret[1] = $iconpath;
}
if($labeltype ne "") {
$ret[0] = AttrVal($fhemname,$labeltype,$fhemname);
} else {
$ret[0] = $fhemname;
}
$ret[0] =~ s/( )/&nbsp;/g;
if($statetype ne "") {
$ret[2] = generic_isdef($defs{$fhemname}{READINGS}{$statetype}{VAL}, "no-reading");
} else {
$ret[2] = $state;
}
$ret[3] = "<span id=widget_generic_state_".$_GET{"view_id"}."_".$_GET{"widget_id"}." class=widget_generic_".$ret[2]." />";
if($showlabel==0) {
$ret[0] = "";
}
if($showicon==0) {
$ret[1] = "";
}
$ret[4] = $fhemname;
return encode_json(\@ret);
} else {
return "Widget not found. Maybe reload this page?";
}
}
sub generic_isdef() {
return ((defined $_[0]) ? $_[0] : $_[1]);
}
1;

View File

@ -25,128 +25,128 @@
* ########################################################################################
*/
function get_current_view_id() {
return current_view_id;
return current_view_id;
}
function get_current_widget_id() {
return current_widget_id;
return current_widget_id;
}
// Ändert den Modus der Oberfläche
// mode: id des Modus
function switch_mode(new_mode) {
view_mode = new_mode;
if (new_mode == 0) {
// Live Modus
$(".widgets").draggable("disable");
} else if (new_mode == 1) {
// Positionierungsmodus
$(".widgets").draggable("enable");
}
view_mode = new_mode;
if (new_mode == 0) {
// Live Modus
$(".widgets").draggable("disable");
} else if (new_mode == 1) {
// Positionierungsmodus
$(".widgets").draggable("enable");
}
}
// Timer für den Reload
// Wenn startIntervall = 1 ist, dann wird die Schleife gestartet,
// ansonsten ist es ein einmaliger aufruf
function refreshWidgets() {
$.each(widgets, function (index, widget) {
update_widget(widget[0], widget[1], widget[2])
});
setTimeout(function () {
refreshWidgets();
},
refreshTime * 1000);
$.each(widgets, function (index, widget) {
update_widget(widget[0], widget[1], widget[2])
});
setTimeout(function () {
refreshWidgets();
},
refreshTime * 1000);
}
function init_RefreshWidgets() {
$.ajax({
async: true,
url: "../../ajax/global/getRefreshTime",
context: document.body,
success: function (_refreshTime) {
refreshTime = _refreshTime;
refreshWidgets();
}
});
$.ajax({
async: true,
url: "../../ajax/global/getRefreshTime",
context: document.body,
success: function (_refreshTime) {
refreshTime = _refreshTime;
refreshWidgets();
}
});
}
// Läd die Sichten über AJAX vom Server.
// callback: wird aufgerufen, wenn der Server geantwortet hat
function load_views(callback) {
console.log("called load_views()");
$.ajax({
async: true,
url: "../../ajax/global/getViews",
context: document.body,
success: function (jsondata) {
views = jQuery.parseJSON(jsondata);
console.log(views);
if (callback) {
callback();
}
}
});
return;
//console.log("called load_views()");
$.ajax({
async: true,
url: "../../ajax/global/getViews",
context: document.body,
success: function (jsondata) {
views = jQuery.parseJSON(jsondata);
//console.log(views);
if (callback) {
callback();
}
}
});
return;
}
// Fügt eine neue Sicht zu den Tabs hinzu.
// id: Id der Sicht
// name: Name der Sicht
function add_tab(id, name) {
console.log("called add_tab()");
// Neues Div nur erzeugen, wenn es noch keins mit der entsprechenden Id gibt
if ($("#tabs-" + id).length <= 0) {
$("#tabs").append("<div id=\"tabs-" + id + "\" class=\"loaded tab\"></div>");
}
$("#views").append("<li id=\"tabs_li-" + id + "\"><a href=\"#tabs-" + id + "\">" + name + "</a></li>");
$("#tabs").tabs("refresh");
return;
//console.log("called add_tab()");
// Neues Div nur erzeugen, wenn es noch keins mit der entsprechenden Id gibt
if ($("#tabs-" + id).length <= 0) {
$("#tabs").append("<div id=\"tabs-" + id + "\" class=\"loaded tab\"></div>");
}
$("#views").append("<li id=\"tabs_li-" + id + "\"><a href=\"#tabs-" + id + "\">" + name + "</a></li>");
$("#tabs").tabs("refresh");
return;
}
// Löscht eine Sicht aus den Tabs.
// Das <div> sowie der <li> Eintrag werden gelöscht.
// id: Id der zu löschenden Sicht
function delete_tab(id) {
// Kann noch optimiert werden!
console.log("called delete_tab()");
$("#tabs-" + id).remove();
$("#tabs_li-" + id).remove();
load_views(show_views);
return;
// Kann noch optimiert werden!
//console.log("called delete_tab()");
$("#tabs-" + id).remove();
$("#tabs_li-" + id).remove();
load_views(show_views);
return;
}
// Zeigt alle Tabs neu an.
// Zuerst werden alle Tabs gelöscht und anschließend neu anzeigen.
function show_views() {
console.log("called show_views()");
$("#views").html("");
if (views.length == 0) {
$('#views').hide();
$('#tabs_error').html("Es wurden keine Sichten gefunden!");
$('#tabs_error').show();
} else {
$('#tabs_error').hide();
$('#views').show();
var selected_view_id = get_current_view_id();
var selected = 0;
var minId = 999;
$.each(views, function (index, view) {
add_tab(view[0], view[1]);
if (selected_view_id == view[0]) {
$('#tabs').tabs("select", "#tabs-" + view[0]);
selected = 1;
}
if (view[0] < minId) {
minId = view[0];
}
});
if (! selected) {
$('#tabs').tabs("select", "#tabs-" + minId);
}
}
return;
//console.log("called show_views()");
$("#views").html("");
if (views.length == 0) {
$('#views').hide();
$('#tabs_error').html("Es wurden keine Sichten gefunden!");
$('#tabs_error').show();
} else {
$('#tabs_error').hide();
$('#views').show();
var selected_view_id = get_current_view_id();
var selected = 0;
var minId = 999;
$.each(views, function (index, view) {
add_tab(view[0], view[1]);
if (selected_view_id == view[0]) {
$('#tabs').tabs("select", "#tabs-" + view[0]);
selected = 1;
}
if (view[0] < minId) {
minId = view[0];
}
});
if (! selected) {
$('#tabs').tabs("select", "#tabs-" + minId);
}
}
return;
}
// Zeigt ein neues Hintergrundbild in einer bestimmten Sicht an.
@ -155,17 +155,17 @@ function show_views() {
// x_pos: x Positon
// y_pos: y Position
function add_background_image(view_id, file, x_pos, y_pos) {
$("#tabs-" + view_id).append("<img src=\"" + file + "\" />");
$("#tabs-" + view_id).append("<img src=\"" + file + "\" />");
}
function update_widget(name, view_id, widget_id) {
console.log("update_widget " + name);
try {
eval(name + "_update_widget(" + view_id + ", " + widget_id + ")");
}
catch (exception) {
console.log("Error in update_widget()");
}
//console.log("update_widget " + name);
try {
eval(name + "_update_widget(" + view_id + ", " + widget_id + ")");
}
catch (exception) {
console.log("Error in update_widget()");
}
}
// Zeigt ein neues Widget in einer bestimmten Sicht an.
@ -175,264 +175,275 @@ function update_widget(name, view_id, widget_id) {
// y_pos: y Position
// attr_array: Ein Array mit den Attributen des Widgets.
function add_widget(view_id, widget_id, name, x_pos, y_pos, attr_array) {
var widget_html = "";
$.ajax({
type: "GET",
async: false,
url: "../../ajax/widget/" + name + "/getwidget_html",
context: document.body,
success: function (result) {
widget_html = result;
}
});
$("#tabs-" + view_id).append("<div id=\"widget_" + view_id + "_" + widget_id + "\" class=\"widgets widget_" + name + "\" style=\"left: " + x_pos + "px; top: " + y_pos + "px;\">" + widget_html + "</div>");
update_widget(name, view_id, widget_id);
$("#widget_" + view_id + "_" + widget_id).click(function () {
if (view_mode == 0) {
try {
eval(name + "_on_click(" + view_id + ", " + widget_id + ")");
}
catch (exception) {
console.log("Error in on_click()");
}
} else if (view_mode == 1) {
if (! widgetWasMoved) {
$("#widget_menue").show();
current_widget_id = widget_id;
var top = $("#widget_" + view_id + "_" + widget_id).position().top;
var left = $("#widget_" + view_id + "_" + widget_id).position().left;
// Nach links anzeigen
var offsetLeft = $("#widget_" + view_id + "_" + widget_id).width();
var positionLeft = left + offsetLeft - 10;
var positionTop = top - 23;
$("#widget_menue").css("top", positionTop);
$("#widget_menue").css("left", positionLeft);
setTimeout(function () {
if (close_widget_menue) {
$("#widget_menue").hide();
}
},
2500);
}
}
});
$("#widget_" + view_id + "_" + widget_id).draggable({
containment: "parent",
start: function (event, ui) {
close_widget_menue = true;
$("#widget_menue").hide();
},
stop: function (event, ui) {
widgetWasMoved = true;
setTimeout(function () {
widgetWasMoved = false;
},
500);
// Neue Position des Widget speichern. Kommastellen werden abgeschnitten.
x_pos = parseInt(ui.position.left);
y_pos = parseInt(ui.position.top);
widget_id = $(event.target).attr("id").split("_")[2];
view_id = $(event.target).attr("id").split("_")[1];
console.log("view-id: " + get_current_view_id() + " widget-id: " + widget_id + " x-pos: " + x_pos + " y-pos: " + y_pos);
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/setWidgetPosition",
data: "view_id=" + view_id + "&widget_id=" + widget_id + "&x_pos=" + x_pos + "&y_pos=" + y_pos,
context: document.body,
success: function (jsondata) {
console.log("Widget Position geändert: " + jsondata)
}
});
}
});
// widget in Widgetliste einfügen
var widget = new Array(name, get_current_view_id(), widget_id);
widgets[widgets.length] = widget;
var widget_html = "";
$.ajax({
type: "GET",
async: false,
url: "../../ajax/widget/" + name + "/getwidget_html",
context: document.body,
success: function (result) {
widget_html = result;
}
});
$("#tabs-" + view_id).append("<div id=\"widget_" + view_id + "_" + widget_id + "\" class=\"widgets widget_" + name + "\" style=\"left: " + x_pos + "px; top: " + y_pos + "px;\">" + widget_html + "</div>");
update_widget(name, view_id, widget_id);
$("#widget_" + view_id + "_" + widget_id).click(function () {
if (view_mode == 0) {
try {
eval(name + "_on_click(" + view_id + ", " + widget_id + ")");
}
catch (exception) {
console.log("Error in on_click()");
}
} else if (view_mode == 1) {
if (! widgetWasMoved) {
$("#widget_menue").show();
current_widget_id = widget_id;
var top = $("#widget_" + view_id + "_" + widget_id).position().top;
var left = $("#widget_" + view_id + "_" + widget_id).position().left;
// Nach links anzeigen
var offsetLeft = $("#widget_" + view_id + "_" + widget_id).width();
var positionLeft = left + offsetLeft - 10;
var positionTop = top - 23;
$("#widget_menue").css("top", positionTop);
$("#widget_menue").css("left", positionLeft);
setTimeout(function () {
if (close_widget_menue) {
$("#widget_menue").hide();
}
},
2500);
}
}
});
$("#widget_" + view_id + "_" + widget_id).draggable({
containment: "parent",
start: function (event, ui) {
close_widget_menue = true;
$("#widget_menue").hide();
},
stop: function (event, ui) {
widgetWasMoved = true;
setTimeout(function () {
widgetWasMoved = false;
},
500);
// Neue Position des Widget speichern. Kommastellen werden abgeschnitten.
x_pos = parseInt(ui.position.left);
y_pos = parseInt(ui.position.top);
widget_id = $(event.target).attr("id").split("_")[2];
view_id = $(event.target).attr("id").split("_")[1];
//console.log("view-id: " + get_current_view_id() + " widget-id: " + widget_id + " x-pos: " + x_pos + " y-pos: " + y_pos);
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/setWidgetPosition",
data: "view_id=" + view_id + "&widget_id=" + widget_id + "&x_pos=" + x_pos + "&y_pos=" + y_pos,
context: document.body,
success: function (jsondata) {
//console.log("Widget Position geändert: " + jsondata)
}
});
}
});
// widget in Widgetliste einfügen
var widget = new Array(name, get_current_view_id(), widget_id);
widgets[widgets.length] = widget;
}
// Behandelt das öffnen eines Tabs
// Entweder der Inhalt wurde bereits geladen, oder er muss über
// Ajax nachgeladen werden.
function activate_tab(view_id) {
if (! $("#tabs-" + view_id).hasClass("isLoaded")) {
current_view_id = view_id;
console.log("activate tab: " + view_id);
console.log("load widgets");
$("#tabs-" + view_id).html("");
// Speichern, dass view bereits geladen wurde
$("#tabs-" + view_id).addClass("isLoaded");
$("#tabs-" + view_id).html("");
$.ajax({
async: false,
url: "../../ajax/global/getView",
data: "id=" + view_id,
context: document.body,
success: function (jsondata) {
var view_data = jQuery.parseJSON(jsondata);
// background images laden
if (view_data.backgrounds) {
$.each(view_data.backgrounds, function (index, background) {
add_background_image(view_id, background.img_url, background.x_pos, background.y_pos);
});
} else {
console.log("keine Hintergrundbilder vorhanden!");
}
// widgets laden
if (view_data.widgets) {
$.each(view_data.widgets, function (index, widget) {
widget_x_pos = widget.x_pos;
widget_y_pos = widget.y_pos;
widget_name = widget.name;
widget_id = widget.id;
add_widget(view_id, widget_id, widget_name, widget_x_pos, widget_y_pos, 0);
});
// Aktueller View Mode für alle Widgets aktualisiert
switch_mode(view_mode);
} else {
console.log("keine widgets vorhanden!");
}
}
});
} else {
current_view_id = view_id;
console.log("switch to activated tab: " + view_id);
}
return;
if (! $("#tabs-" + view_id).hasClass("isLoaded")) {
current_view_id = view_id;
//console.log("activate tab: " + view_id);
//console.log("load widgets");
$("#tabs-" + view_id).html("");
// Speichern, dass view bereits geladen wurde
$("#tabs-" + view_id).addClass("isLoaded");
$("#tabs-" + view_id).html("");
$.ajax({
async: false,
url: "../../ajax/global/getView",
data: "id=" + view_id,
context: document.body,
success: function (jsondata) {
var view_data = jQuery.parseJSON(jsondata);
// background images laden
if (view_data.backgrounds) {
$.each(view_data.backgrounds, function (index, background) {
add_background_image(view_id, background.img_url, background.x_pos, background.y_pos);
});
} else {
console.log("keine Hintergrundbilder vorhanden!");
}
// widgets laden
if (view_data.widgets) {
$.each(view_data.widgets, function (index, widget) {
widget_x_pos = widget.x_pos;
widget_y_pos = widget.y_pos;
widget_name = widget.name;
widget_id = widget.id;
add_widget(view_id, widget_id, widget_name, widget_x_pos, widget_y_pos, 0);
});
// Aktueller View Mode für alle Widgets aktualisiert
switch_mode(view_mode);
} else {
console.log("keine Widgets vorhanden!");
}
}
});
} else {
current_view_id = view_id;
//console.log("switch to activated tab: " + view_id);
}
return;
}
// Initialisiert die Tabs. Diese Funktion muss nur einmal aufgerufen werden.
// Sobald das Tab gewechselt wird, wird die Funktion activate_tab(id)
// aufgerufen.
function init_tabs() {
$("#tabs").tabs({
activate: function (event, ui) {
activate_tab(ui.newPanel.selector.substr(6));
},
create: function (event, ui) {
//activate_tab(ui.panel.selector.substr(6));
}
});
$("#tabs").resizable({
containment: $(".widgets")
});
$("#tabs").tabs({
activate: function (event, ui) {
activate_tab(ui.newPanel.selector.substr(6));
},
create: function (event, ui) {
//activate_tab(ui.panel.selector.substr(6));
}
});
$("#tabs").resizable({
containment: $(".widgets")
});
}
// Initialisiert das Menü.
function init_menue() {
$("#button_back").button({
icons: {
secondary: "ui-icon-circle-arrow-w"
}
});
$("#button_addview").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_manageviews").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_addwidget").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_managewidgets").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_settings").button({
icons: {
secondary: "ui-icon-pencil"
}
});
$("#widget_menue_edit").button({
icons: {
secondary: "ui-icon-pencil"
}
});
$("#widget_menue_delete").button({
icons: {
secondary: "ui-icon-trash"
}
});
$("#button_editview").buttonset();
$("#button_back").button({
icons: {
secondary: "ui-icon-circle-arrow-w"
}
});
$("#button_addview").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_manageviews").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_addwidget").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_managewidgets").button({
icons: {
secondary: "ui-icon-plusthick"
}
});
$("#button_settings").button({
icons: {
secondary: "ui-icon-pencil"
}
});
$("#widget_menue_edit").button({
icons: {
secondary: "ui-icon-pencil"
}
});
$("#widget_menue_delete").button({
icons: {
secondary: "ui-icon-trash"
}
});
$("#button_editview").buttonset();
$("#button_saveconfig").button({
icons: {
secondary: "ui-icon-pencil"
}
});
}
// Initialisiert die Handler
function init_handlers() {
$("#button_back").click(function () {
window.location.href = "../../../../fhem";
return false;
});
$("#button_settings").click(function () {
$("#dialog_settings").dialog("open");
return false;
});
$("#button_addview").click(function () {
$("#dialog_addview").dialog("open");
return false;
});
$("#button_manageviews").click(function () {
$("#dialog_manageviews").dialog("open");
return false;
});
$("#button_addwidget").click(function () {
$("#dialog_addwidget").dialog("open");
return false;
});
$("#button_switchmode_0").click(function () {
if (view_mode != 0) {
switch_mode(0);
}
});
$("#button_switchmode_1").click(function () {
if (view_mode != 1) {
switch_mode(1);
}
});
$("#widget_menue_delete").click(function () {
$("#label_deletewidget").html(get_current_widget_id());
$("#dialog_deletewidget").dialog("open");
});
$("#widget_menue_edit").click(function () {
$("#label_editwidget").html(get_current_widget_id());
$("#dialog_editwidget").dialog("open");
$("#widget_menue").hide();
close_widget_menue = true;
});
$("#widget_menue").mouseenter(function () {
close_widget_menue = false;
});
$("#widget_menue").mouseleave(function () {
close_widget_menue = true;
$("#widget_menue").hide();
});
$("#button_back").click(function () {
window.location.href = "../../../../fhem";
return false;
});
$("#button_settings").click(function () {
$("#dialog_settings").dialog("open");
return false;
});
$("#button_addview").click(function () {
$("#dialog_addview").dialog("open");
return false;
});
$("#button_manageviews").click(function () {
$("#dialog_manageviews").dialog("open");
return false;
});
$("#button_addwidget").click(function () {
$("#dialog_addwidget").dialog("open");
return false;
});
$("#button_switchmode_0").click(function () {
if (view_mode != 0) {
switch_mode(0);
}
});
$("#button_switchmode_1").click(function () {
if (view_mode != 1) {
switch_mode(1);
}
});
$("#button_saveconfig").click(function () {
window.location.href = "../../../../fhem?cmd=save";
return false;
});
$("#widget_menue_delete").click(function () {
$("#label_deletewidget").html(get_current_widget_id());
$("#dialog_deletewidget").dialog("open");
});
$("#widget_menue_edit").click(function () {
$("#label_editwidget").html(get_current_widget_id());
$("#dialog_editwidget").dialog("open");
$("#widget_menue").hide();
close_widget_menue = true;
});
$("#widget_menue").mouseenter(function () {
close_widget_menue = false;
});
$("#widget_menue").mouseleave(function () {
close_widget_menue = true;
$("#widget_menue").hide();
});
}

View File

@ -26,346 +26,346 @@
*/
// Initialisiert die Dialoge
function init_dialogs() {
$("#dialog_addview").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Hinzufügen": function (event) {
console.log("before: " + views);
$("#dialog_addview_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/addView",
data: "name=" + $("#dialog_addview_name").val(),
context: document.body,
success: function (jsondata) {
$("#dialog_addview").dialog("close");
load_views(show_views);
$("#dialog_addview_loading").hide();
console.log("after: " + views);
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_deleteview").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Löschen": function (ui) {
$.ajax({
type: "GET",
async: false,
url: "../../ajax/global/deleteView",
data: "id=" + delete_view_id,
context: document.body,
success: function (jsondata) {
delete_tab(delete_view_id);
$("#dialog_deleteview").dialog("close");
$("#manageviews_tr_" + delete_view_id).remove();
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_editview").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Speichern": function (ui) {
console.log("before: " + views);
$("#dialog_editview_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/editView",
data: "id=" + edit_view_id + "&name=" + $("#dialog_editview_name").val(),
context: document.body,
success: function (jsondata) {
load_views(show_views);
$($("#manageviews_tr_" + edit_view_id).children().get(0)).text($("#dialog_editview_name").val());
$("#dialog_editview_loading").hide();
$("#dialog_editview").dialog("close");
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_addwidget").dialog({
autoOpen: false,
resizable: true,
height: 500,
width: 600,
modal: true,
buttons: {
"Schließen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
$("#dialog_addwidget_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/getWidgets",
context: document.body,
success: function (jsondata) {
var widgets = jQuery.parseJSON(jsondata);
$("#dialog_addwidget_table").html("<colgroup><col class=\"col1\"><col class=\"col2\"><col class=\"col3\"></colgroup>");
if (widgets) {
$.each(widgets, function (index, widget) {
$("#dialog_addwidget_table").append("<tr><td>" + widget + "</td><td></td><td><button class=\"button_addwidget\" id=\"addwidget_" + widget + "\">&nbsp;</button></td></tr>");
});
$(".button_addwidget").button({
icons: {
primary: "ui-icon-circle-plus"
},
text: false
});
$(".button_addwidget").click(function (ui) {
add_widget_name = $(ui.currentTarget).attr("id").substr(10);
$("#dialog_addwidget_setup_widget").html(add_widget_name);
$("#dialog_addwidget_setup").dialog("open");
$("#dialog_addwidget_setup_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/widget/" + add_widget_name + "/get_addwidget_setup_html",
context: document.body,
success: function (html_result) {
if (html_result != 0) {
$("#dialog_addwidget_setup_form").html(html_result);
} else {
$("#dialog_addwidget_setup_form").html("Das Widget stellt keine Konfigurationsmöglichkeiten bereit!")
}
$("#dialog_addwidget_setup_loading").hide();
}
});
console.log("widget hinzufügen: " + add_widget_name)
return false;
});
} else {
console.log("keine Widgets vorhanden!")
}
$("#dialog_addwidget_loading").hide();
}
});
}
});
$("#dialog_addwidget_setup").dialog({
autoOpen: false,
resizable: true,
height: 350,
width: 400,
modal: true,
buttons: {
"Hinzufügen": function (event) {
$("#dialog_addwidget_setup_loading").show();
var attributes_array = new Array();
$.ajax({
type: "GET",
async: false,
url: "../../ajax/widget/" + add_widget_name + "/get_addwidget_prepare_attributes",
context: document.body,
success: function (js_result) {
try {
eval(js_result);
}
catch (exception) {
console.log("exception in dialog_addwidget_setup dialog event");
}
}
});
console.log(JSON.stringify(attributes_array));
$.ajax({
type: "GET",
async: false,
url: "../../ajax/global/addWidget",
data: "view_id=" + current_view_id + "&widget=" + add_widget_name + "&attributes=" + JSON.stringify(attributes_array),
context: document.body,
success: function (widgetId) {
// Position links oben x= 28 y = 69, muss auch in 01_YAF.pm in addWidget() Methode angepasst werden!
add_widget(current_view_id, widgetId, add_widget_name, 28, 69, attributes_array);
// Aktueller View Mode für alle Widgets aktualisiert
switch_mode(view_mode);
}
});
$("#dialog_addwidget_setup_loading").hide();
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
console.log("dialog widget hinzufügen geöffnet => inhalt laden");
}
});
$("#dialog_deletewidget").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Löschen": function (ui) {
var view_id = get_current_view_id();
var widget_id = get_current_widget_id();
console.log("delete view " + view_id + " widget " + widget_id);
$.ajax({
type: "GET",
async: false,
url: "../../ajax/global/deleteWidget",
data: "view_id=" + view_id + "&widget_id=" + widget_id,
context: document.body,
success: function (jsondata) {
console.log("widget deleted");
$("#dialog_deletewidget").dialog("close");
$("#widget_menue").hide();
$("#widget_" + view_id + "_" + widget_id).remove();
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_editwidget").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Speichern": function (ui) {
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_manageviews").dialog({
autoOpen: false,
resizable: true,
height: 500,
width: 600,
modal: true,
buttons: {
"Schließen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
$("#dialog_manageviews-table").html("<colgroup><col class=\"col1\"><col class=\"col2\"><col class=\"col3\"></colgroup>");
$.each(views, function (index, view) {
$("#dialog_manageviews-table").append("<tr id=\"manageviews_tr_" + view[0] + "\"><td>" + view[1] + "</td><td><button id=\"button_edit_" + view[0] + "\" class=\"button_edit\">&nbsp;</button></td><td><button class=\"button_delete\" id=\"button_edit_" + view[0] + "\">&nbsp;</button></td></tr>");
});
$(".button_edit").button({
icons: {
primary: "ui-icon-pencil"
},
text: false
});
$(".button_delete").button({
icons: {
primary: "ui-icon-trash"
},
text: false
});
$(".button_delete").click(function (ui) {
var sichtName = $(ui.currentTarget.parentNode.parentNode.firstChild).html();
delete_view_id = $(ui.currentTarget).attr("id").substr(12);
$("#label_deleteview").html(sichtName);
$("#dialog_deleteview").dialog("open");
return false;
});
$(".button_edit").click(function (ui) {
edit_view_name = $(ui.currentTarget.parentNode.parentNode.firstChild).html();
edit_view_id = $(ui.currentTarget).attr("id").substr(12);
$("#dialog_editview_name").val(edit_view_name);
$("#dialog_editview").dialog("open");
return false;
});
}
});
$("#dialog_settings").dialog({
autoOpen: false,
resizable: true,
height: 500,
width: 600,
modal: true,
buttons: {
"Speichern": function () {
$("#dialog_settings_loading").show();
console.log("update widget refresh interval");
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/setRefreshTime",
data: "interval=" + $("#dialog_settings_intervall").val(),
context: document.body,
success: function () {
refreshTime = $("#dialog_settings_intervall").val();
$("#dialog_settings_loading").hide();
$("#dialog_settings").dialog("close");
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
console.log("dialog settings opened");
$("#dialog_settings_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/getRefreshTime",
data: "interval=" + $("#dialog_settings_intervall").val(),
context: document.body,
success: function (refreshInterval) {
$("#dialog_settings_intervall").val(refreshInterval);
$("#dialog_settings_loading").hide();
}
});
}
});
$("#dialog_addview").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Hinzufügen": function (event) {
//console.log("before: " + views);
$("#dialog_addview_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/addView",
data: "name=" + $("#dialog_addview_name").val(),
context: document.body,
success: function (jsondata) {
$("#dialog_addview").dialog("close");
load_views(show_views);
$("#dialog_addview_loading").hide();
//console.log("after: " + views);
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_deleteview").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Löschen": function (ui) {
$.ajax({
type: "GET",
async: false,
url: "../../ajax/global/deleteView",
data: "id=" + delete_view_id,
context: document.body,
success: function (jsondata) {
delete_tab(delete_view_id);
$("#dialog_deleteview").dialog("close");
$("#manageviews_tr_" + delete_view_id).remove();
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_editview").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Speichern": function (ui) {
//console.log("before: " + views);
$("#dialog_editview_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/editView",
data: "id=" + edit_view_id + "&name=" + $("#dialog_editview_name").val(),
context: document.body,
success: function (jsondata) {
load_views(show_views);
$($("#manageviews_tr_" + edit_view_id).children().get(0)).text($("#dialog_editview_name").val());
$("#dialog_editview_loading").hide();
$("#dialog_editview").dialog("close");
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_addwidget").dialog({
autoOpen: false,
resizable: true,
height: 500,
width: 600,
modal: true,
buttons: {
"Schließen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
$("#dialog_addwidget_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/getWidgets",
context: document.body,
success: function (jsondata) {
var widgets = jQuery.parseJSON(jsondata);
$("#dialog_addwidget_table").html("<colgroup><col class=\"col1\"><col class=\"col2\"><col class=\"col3\"></colgroup>");
if (widgets) {
$.each(widgets, function (index, widget) {
$("#dialog_addwidget_table").append("<tr><td>" + widget + "</td><td></td><td><button class=\"button_addwidget\" id=\"addwidget_" + widget + "\">&nbsp;</button></td></tr>");
});
$(".button_addwidget").button({
icons: {
primary: "ui-icon-circle-plus"
},
text: false
});
$(".button_addwidget").click(function (ui) {
add_widget_name = $(ui.currentTarget).attr("id").substr(10);
$("#dialog_addwidget_setup_widget").html(add_widget_name);
$("#dialog_addwidget_setup").dialog("open");
$("#dialog_addwidget_setup_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/widget/" + add_widget_name + "/get_addwidget_setup_html",
context: document.body,
success: function (html_result) {
if (html_result != 0) {
$("#dialog_addwidget_setup_form").html(html_result);
} else {
$("#dialog_addwidget_setup_form").html("Das Widget stellt keine Konfigurationsmöglichkeiten bereit!")
}
$("#dialog_addwidget_setup_loading").hide();
}
});
//console.log("widget hinzufügen: " + add_widget_name)
return false;
});
} else {
console.log("keine Widgets vorhanden!")
}
$("#dialog_addwidget_loading").hide();
}
});
}
});
$("#dialog_addwidget_setup").dialog({
autoOpen: false,
resizable: true,
height: 350,
width: 400,
modal: true,
buttons: {
"Hinzufügen": function (event) {
$("#dialog_addwidget_setup_loading").show();
var attributes_array = new Array();
$.ajax({
type: "GET",
async: false,
url: "../../ajax/widget/" + add_widget_name + "/get_addwidget_prepare_attributes",
context: document.body,
success: function (js_result) {
try {
eval(js_result);
}
catch (exception) {
console.log("exception in dialog_addwidget_setup dialog event");
}
}
});
//console.log(JSON.stringify(attributes_array));
$.ajax({
type: "GET",
async: false,
url: "../../ajax/global/addWidget",
data: "view_id=" + current_view_id + "&widget=" + add_widget_name + "&attributes=" + JSON.stringify(attributes_array),
context: document.body,
success: function (widgetId) {
// Position links oben x= 28 y = 69, muss auch in 01_YAF.pm in addWidget() Methode angepasst werden!
add_widget(current_view_id, widgetId, add_widget_name, 28, 69, attributes_array);
// Aktueller View Mode für alle Widgets aktualisiert
switch_mode(view_mode);
}
});
$("#dialog_addwidget_setup_loading").hide();
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
//console.log("dialog widget hinzufügen geöffnet => inhalt laden");
}
});
$("#dialog_deletewidget").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Löschen": function (ui) {
var view_id = get_current_view_id();
var widget_id = get_current_widget_id();
//console.log("delete view " + view_id + " widget " + widget_id);
$.ajax({
type: "GET",
async: false,
url: "../../ajax/global/deleteWidget",
data: "view_id=" + view_id + "&widget_id=" + widget_id,
context: document.body,
success: function (jsondata) {
//console.log("widget deleted");
$("#dialog_deletewidget").dialog("close");
$("#widget_menue").hide();
$("#widget_" + view_id + "_" + widget_id).remove();
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_editwidget").dialog({
autoOpen: false,
resizable: true,
height: 300,
width: 400,
modal: true,
buttons: {
"Speichern": function (ui) {
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
$("#dialog_manageviews").dialog({
autoOpen: false,
resizable: true,
height: 500,
width: 600,
modal: true,
buttons: {
"Schließen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
$("#dialog_manageviews-table").html("<colgroup><col class=\"col1\"><col class=\"col2\"><col class=\"col3\"></colgroup>");
$.each(views, function (index, view) {
$("#dialog_manageviews-table").append("<tr id=\"manageviews_tr_" + view[0] + "\"><td>" + view[1] + "</td><td><button id=\"button_edit_" + view[0] + "\" class=\"button_edit\">&nbsp;</button></td><td><button class=\"button_delete\" id=\"button_edit_" + view[0] + "\">&nbsp;</button></td></tr>");
});
$(".button_edit").button({
icons: {
primary: "ui-icon-pencil"
},
text: false
});
$(".button_delete").button({
icons: {
primary: "ui-icon-trash"
},
text: false
});
$(".button_delete").click(function (ui) {
var sichtName = $(ui.currentTarget.parentNode.parentNode.firstChild).html();
delete_view_id = $(ui.currentTarget).attr("id").substr(12);
$("#label_deleteview").html(sichtName);
$("#dialog_deleteview").dialog("open");
return false;
});
$(".button_edit").click(function (ui) {
edit_view_name = $(ui.currentTarget.parentNode.parentNode.firstChild).html();
edit_view_id = $(ui.currentTarget).attr("id").substr(12);
$("#dialog_editview_name").val(edit_view_name);
$("#dialog_editview").dialog("open");
return false;
});
}
});
$("#dialog_settings").dialog({
autoOpen: false,
resizable: true,
height: 500,
width: 600,
modal: true,
buttons: {
"Speichern": function () {
$("#dialog_settings_loading").show();
//console.log("update widget refresh interval");
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/setRefreshTime",
data: "interval=" + $("#dialog_settings_intervall").val(),
context: document.body,
success: function () {
refreshTime = $("#dialog_settings_intervall").val();
$("#dialog_settings_loading").hide();
$("#dialog_settings").dialog("close");
}
});
$(this).dialog("close");
},
"Abbrechen": function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
//console.log("dialog settings opened");
$("#dialog_settings_loading").show();
$.ajax({
type: "GET",
async: true,
url: "../../ajax/global/getRefreshTime",
data: "interval=" + $("#dialog_settings_intervall").val(),
context: document.body,
success: function (refreshInterval) {
$("#dialog_settings_intervall").val(refreshInterval);
$("#dialog_settings_loading").hide();
}
});
}
});
}

View File

@ -73,6 +73,9 @@
init_handlers();
load_views(show_views);
init_RefreshWidgets();
if(window.location != window.parent.location) {
$('#menue').toggle();
}
return;
}
@ -82,6 +85,13 @@
$(document).ready(function() {
init();
});
$(document).keydown(function(e){
if (e.keyCode == 32) {
$('#menue').toggle();
return false;
}
});
</script>
<style>
###widget_css###
@ -108,6 +118,9 @@
<input type="radio" id="button_switchmode_0" name="radio" checked="checked"/><label for="button_switchmode_0" style="width: 118px;">Live</label>
<input type="radio" id="button_switchmode_1" name="radio"/><label for="button_switchmode_1" style="width: 118px;">Bearbeiten</label>
</div>
</div>
<div class="menue_block">
<button id="button_saveconfig" class="menue_button">Config speichern</button>
</div>
</div>
<div id="content">
@ -176,6 +189,5 @@
<p>Einstellungen</p>
<label>Refresh-Intervall: </label><input id="dialog_settings_intervall" name="dialog_settings_intervall" value="" />
</div>
</body>
</html>

View File

@ -8,6 +8,8 @@ DIR FHEM/YAF/widgets/fht80
DIR FHEM/YAF/widgets/fht80/www
DIR FHEM/YAF/widgets/fhttk
DIR FHEM/YAF/widgets/fhttk/www
DIR FHEM/YAF/widgets/generic
DIR FHEM/YAF/widgets/generic/www
DIR FHEM/YAF/www
DIR FHEM/YAF/www/css
DIR FHEM/YAF/www/smoothness
@ -17,19 +19,20 @@ DIR FHEM/YAF/www/js
DIR FHEM/YAF/xml
UPD 2013-07-23_20:45:00 11477 FHEM/01_YAF.pm
UPD 2013-05-15_20:00:00 6590 FHEM/YAF/widgets/fs20st/fs20st.pm
UPD 2013-07-28_17:00:00 7498 FHEM/YAF/widgets/fht80/fht80.pm
UPD 2013-07-28_17:00:00 6460 FHEM/YAF/widgets/fhttk/fhttk.pm
UPD 2013-07-31_15:30:00 7548 FHEM/YAF/widgets/fht80/fht80.pm
UPD 2013-07-31_15:30:00 6534 FHEM/YAF/widgets/fhttk/fhttk.pm
UPD 2013-07-31_15:30:00 8834 FHEM/YAF/widgets/generic/generic.pm
UPD 2013-05-15_20:00:00 6617 FHEM/YAF/widgets/fs20easylamp/fs20easylamp.pm
UPD 2013-05-15_20:00:00 2608 FHEM/YAF/www/img/loading.gif
UPD 2013-05-15_20:00:00 766 FHEM/YAF/www/img/lamp_off.png
UPD 2013-05-15_20:00:00 19226 FHEM/YAF/www/img/background.png
UPD 2013-05-15_20:00:00 831 FHEM/YAF/www/img/lamp_on.png
UPD 2013-05-15_20:00:00 7146 FHEM/YAF/www/yaf.htm
UPD 2013-07-20_16:00:00 14672 FHEM/YAF/www/js/yaf-dialogs.js
UPD 2013-07-31_15:30:00 11957 FHEM/YAF/www/js/yaf-basics.js
UPD 2013-07-31_15:30:00 10727 FHEM/YAF/www/js/yaf-dialogs.js
UPD 2013-07-31_15:30:00 7512 FHEM/YAF/www/yaf.htm
UPD 2013-05-15_20:00:00 3433 FHEM/YAF/www/js/combobox.js
UPD 2013-05-15_20:00:00 4593 FHEM/YAF/www/js/jquery.ui.touch-punch.min.js
UPD 2013-05-15_20:00:00 237176 FHEM/YAF/www/js/jquery-ui-1.9.1.custom.min.js
UPD 2013-07-20_16:00:00 13913 FHEM/YAF/www/js/yaf-basics.js
UPD 2013-05-15_20:00:00 448301 FHEM/YAF/www/js/jquery-ui-1.9.1.custom.js
UPD 2013-05-15_20:00:00 265218 FHEM/YAF/www/js/jquery-1.8.2.js
UPD 2013-05-15_24:00:00 2313 FHEM/YAF/www/css/yaf.css