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:
parent
9727e39167
commit
d743e8b76b
@ -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 = "";
|
||||
|
@ -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");
|
||||
}
|
||||
|
296
fhem/contrib/YAF/FHEM/YAF/widgets/generic/generic.pm
Normal file
296
fhem/contrib/YAF/FHEM/YAF/widgets/generic/generic.pm
Normal 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+" "+fhemname+" "+ 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/( )/ /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;
|
||||
|
@ -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();
|
||||
});
|
||||
}
|
@ -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 + "\"> </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\"> </button></td><td><button class=\"button_delete\" id=\"button_edit_" + view[0] + "\"> </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 + "\"> </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\"> </button></td><td><button class=\"button_delete\" id=\"button_edit_" + view[0] + "\"> </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();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user