function KTDashlet() { } KTDashlet.prototype = { 'initialize' : function(e, dashboard) { bindMethods(this); this.dashboard = dashboard; this.id = e.id; this.elm = e; this.body = getElementsByTagAndClassName('*', 'dashboard_block_body', e)[0]; connect(getElementsByTagAndClassName('*', 'action_rollup', e)[0], 'onclick', this, 'toggleRollup'); connect(getElementsByTagAndClassName('*', 'action_close', e)[0], 'onclick', this, 'toggleClose'); }, 'toggleRollup' : function(event) { toggleElementClass('rolled-up', this.elm); if(this.getStatus() == KTDashboard.OPEN) { this.setStatus(KTDashboard.ROLLEDUP); } else { this.setStatus(KTDashboard.OPEN); } if(event) { event.stop(); } }, 'toggleClose' : function(event) { toggleElementClass('closed', this.elm); if(this.getStatus() == KTDashboard.OPEN || this.getStatus() == KTDashboard.ROLLEDUP) { this.setStatus(KTDashboard.CLOSED); } else { this.setStatus(KTDashboard.OPEN); } if(event) { event.stop(); } }, 'setStatus' : function(status) { this.dashboard.setStatus(this.id, status); }, 'getStatus' : function() { return this.dashboard.getStatus(this.id); } }; function KTDashboard() { this.dashlets = {}; } KTDashboard.OPEN = 0; KTDashboard.ROLLEDUP = 1; KTDashboard.CLOSED = 2; KTDashboard.columns = Set('left', 'right'); KTDashboard.prototype = { 'initialize' : function(dashboard) { this.element = dashboard; this.initializeDraggables(); var self = this; map(function(e) { if(hasElementClass(e, 'empty')) { return; } var d = new KTDashlet(); d.initialize(e, self); self.dashlets[e.id] = { 'object' : d, 'state' : KTDashboard.OPEN }; }, this.getDashletBlocks()); // make add button var breadcrumbs = $('add-dashlet'); this.addButton = INPUT({'id':'add_dashlet', 'type':'submit', 'value':_('Add Dashlet')}); breadcrumbs.insertBefore(this.addButton, breadcrumbs.firstChild); this.hideAddButton(); connect(this.addButton, 'onclick', this, 'onclickAdd'); connect(window, 'onbeforeunload', this, 'pushState'); }, 'mochikitInitializeDraggables' : function() { var dashOpts = { 'tag':'div', 'constraint': false, 'tree':true, 'only' : ['dashboard_block'], 'handle' : 'dashboard_block_handle' }; MochiKit.Sortable.Sortable.create(this.element, dashOpts); }, 'initializeDraggables' : function() { map(function(e) { if(e.id) { new YAHOO.example.DDList(e.id); //new YAHOO.util.DD(e.id); } }, this.getDashletBlocks()); map(function(e) { if(e.id) { new YAHOO.example.DDList(e.id); //new YAHOO.util.DD(e.id); } }, this.getDashletBlockStoppers()); new YAHOO.example.DDListBoundary('copyrightbar'); new YAHOO.example.DDListBoundary('breadcrumbs'); new YAHOO.example.DDListBoundary('bodyLeftRepeat'); new YAHOO.example.DDListBoundary('bodyRightRepeat'); YAHOO.util.DDM.mode = 1; }, 'getDashletBlocks' : function() { return getElementsByTagAndClassName('*', 'dashboard_block', this.element); }, 'getDashletBlockStoppers' : function(){ return getElementsByTagAndClassName('*', 'dashboard_block_empty', this.element); }, 'hideAddButton' : function() { hideElement(this.addButton); }, 'showAddButton' : function() { showElement(this.addButton); }, 'statusChange' : function(status) { var s = 0; if(status == KTDashboard.CLOSED) { s = 'closed'; } else if (status == KTDashboard.OPEN) { s = 'open'; } else if (status == KTDashboard.ROLLEDUP) { s = 'rolled'; } else { s = 'undefined'; } if(status == KTDashboard.CLOSED) { this.showAddButton(); } else if(status == KTDashboard.OPEN || status == KTDashboard.ROLLEDUP) { var closed = this.getDashletsInState(KTDashboard.CLOSED); if(closed.length === 0) { hideElement(this.addButton); } } }, 'setStatus' : function(id, status) { this.dashlets[id]['state'] = status; this.statusChange(status); }, 'getStatus' : function(id) { return this.dashlets[id]['state']; }, 'getDashletsInState' : function(state) { var ret = []; for(var i in this.dashlets) { if(this.dashlets[i]['state'] == state) { ret.push(i); } } return ret; }, 'getDashletTitle' : function(elm) { var h2 = getElementsByTagAndClassName('H2', null, elm); if(h2.length) { return h2[0].innerHTML; } else { return null; } }, 'onclickAdd': function(event) { var closed = this.getDashletsInState(KTDashboard.CLOSED); var self = this; var addDialogScreen = DIV({'class':'addDialogScreen'}); var addDialog = DIV({'class':'addDialog'}); var dashletList = UL(null); forEach(closed, function(id) { var dashletelm = $(id); var dashlet = self.dashlets[id]['object']; var link = A({'class':'dashletLink', 'href':'#'}, self.getDashletTitle(dashletelm)); var linkli = LI(null, link); connect(link, 'onclick', function(event) { removeElement(linkli); dashlet.toggleClose(event); if(hasElementClass(dashlet.elm, 'rolled-up')) { self.setStatus(id, KTDashboard.ROLLEDUP); } event.stop(); }); appendChildNodes(dashletList, linkli); }); appendChildNodes(addDialog, H2(null, _('Add Dashlets'))); appendChildNodes(addDialog, dashletList); var closeLink = A({'class':'closeLink','href':'#'}, _('close')); connect(closeLink, 'onclick', function(event) { removeElement(addDialogScreen); }); appendChildNodes(addDialog, closeLink); appendChildNodes(addDialogScreen, addDialog); appendChildNodes(document.body, addDialogScreen); event.stop(); }, 'getColumn' : function(which) { return $('dashboard-container-' + which); }, 'serialize' : function() { var self = this; var ret = {}; for(var col in KTDashboard.columns) { ret[col] = []; var container = this.getColumn(col); forEach(getElementsByTagAndClassName('*', 'dashboard_block', container), function(e) { if(e.id) { try { ret[col].push({'id':e.id, 'state':self.dashlets[e.id]['state']}); } catch(e) { }; } }); } return ret; }, 'unserialize' : function(state) { var bucket = DIV({'style':'display:none'}); appendChildNodes(document.body, bucket); forEach(this.getDashletBlocks(), function(d) { if(d.id && !hasElementClass(d, 'empty')) { appendChildNodes(bucket, d); }}); var hasClosed = false; for(var col in KTDashboard.columns) { var container = this.getColumn(col); for(var i=0; i