/** * * * @author Florian Ziegler * @author Justin Otherguy * @author Steffen Vogel * @copyright Copyright (c) 2011, The volkszaehler.org project * @package default * @license http://opensource.org/licenses/gpl-license.php GNU Public License */ /* * This file is part of volkzaehler.org * * volkzaehler.org 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 any later version. * * volkzaehler.org 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 * volkszaehler.org. If not, see . */ /** * Save minimal Entity in JSON cookie */ vz.entities.saveCookie = function() { var expires = new Date(new Date().getTime() + 3e10); // in about a year var arr = new Array; this.each(function(entity) { if (entity.cookie === true) { arr.push(entity.uuid + '@' + entity.middleware); } }, true); // recursive! $.setCookie('vz_entities', arr.join('|'), {expires: expires}); }; /** * Load entities from JSON cookie */ vz.entities.loadCookie = function() { var cookie = $.getCookie('vz_entities'); if (cookie) { var arr = cookie.split('|'); arr.each(function(index, entry) { var entity = entry.split('@'); vz.entities.push(new Entity({ middleware: entity[1], uuid: entity[0], cookie: true })); }); } }; /** * Load JSON data from the middleware */ vz.entities.loadData = function() { $('#overlay').html('loading...

loading...

'); var queue = new Array; this.each(function(entity) { if (entity.active && entity.definition.model == 'Volkszaehler\\Model\\Channel') { queue.push(entity.loadData()); } }, true); // recursive! return $.when.apply($, queue); }; /** * Overwritten each iterator to iterate recursively throug all entities */ vz.entities.each = function(cb, recursive) { for (var i = 0; i < this.length; i++) { cb(this[i]); if (recursive && this[i] !== undefined) { this[i].each(cb, true); } } } /** * Create nested entity list * * @todo move to Entity class */ vz.entities.showTable = function() { $('#entity-list tbody').empty(); vz.entities.sort(Entity.compare); var c = 0; // for colors this.each(function(entity, parent) { entity.color = vz.options.plot.colors[c++ % vz.options.plot.colors.length]; $('#entity-list tbody').append(entity.getDOMRow(parent)); }, true); // recursive! /* * Initialize treeTable * * http://ludo.cubicphuse.nl/jquery-plugins/treeTable/doc/index.html * https://github.com/ludo/jquery-plugins/tree/master/treeTable */ // configure entities as draggable $('#entity-list tr.channel span.indicator, #entity-list tr.aggregator span.indicator').draggable({ helper: 'clone', opacity: 0.75, refreshPositions: true, // Performance? revert: 'invalid', revertDuration: 300, scroll: true }); // configure aggregators as droppable $('#entity-list tr.aggregator span.indicator').each(function() { $(this).parents('tr').droppable({ //accept: 'tr.channel span.indicator, tr.aggregator span.indicator', // TODO drop: function(event, ui) { var child = $(ui.draggable.parents('tr')[0]).data('entity'); var from = child.parent; var to = $(this).data('entity'); $('#entity-move').dialog({ // confirm prompt resizable: false, modal: true, title: 'Verschieben', width: 400, buttons: { 'Verschieben': function() { try { var queue = new Array; queue.push(to.addChild(child)); // add to new aggregator if (from !== undefined) { queue.push(from.removeChild(child)); // remove from aggregator } else { child.cookie = false; // remove from cookies vz.entities.saveCookie(); } } catch (e) { vz.wui.dialogs.exception(e); } finally { $.when(queue).done(function() { // wait for middleware $.when(from.loadDetails(), to.loadDetails).done(vz.entities.showTable); }); $(this).dialog('close'); } }, 'Abbrechen': function() { $(this).dialog('close'); } } }); }, hoverClass: 'accept', over: function(event, ui) { // make the droppable branch expand when a draggable node is moved over it if (this.id != $(ui.draggable.parents('tr')[0]).id && !$(this).hasClass('expanded')) { $(this).expand(); } } }); }); // make visible that a row is clicked $('#entity-list table tbody tr').mousedown(function() { $('tr.selected').removeClass('selected'); // deselect currently selected rows $(this).addClass('selected'); }); // make sure row is selected when span is clicked $('#entity-list table tbody tr span').mousedown(function() { $($(this).parents('tr')[0]).trigger('mousedown'); }); $('#entity-list table').treeTable({ treeColumn: 2, clickableNodeNames: true, initialState: 'expanded' }); };