/* Copyright (c) 2006-2007, ePages GmbH All Rights Reserved. epages.cartridges.de_epages.design.widget.Designtoolcontroller $Revision: 1.28 $ */ dojo.provide("epages.cartridges.de_epages.design.widget.Designtoolcontroller"); dojo.require("epages.widget.LocalizedWidget"); dojo.require("epages.io.json"); dojo.require("epages.lang.array"); dojo.require("epages.cartridges.de_epages.design.widget.Designtool"); dojo.require("epages.widget.Message"); dojo.require("epages.widget.Modaldialog"); dojo.declare( "epages.cartridges.de_epages.design.widget.Designtoolcontroller", [epages.widget.LocalizedWidget], { /** * public properties */ uri : '?', id : 'Designtoolcontroller', undobuttonsId : 'undoWidget', objectTreeId : 'contentExplorerObjectTree', eventHandler : '', imageUrl : epages.vars.StoreRoot ? epages.vars.StoreRoot + '/BO/icons' : undefined, /** * private properties */ objects : {}, pagetypes : {}, _dialogWidget : undefined, _visiblePageType : undefined, // _showDesignTools /** * widget properties */ templatePath : dojo.moduleUrl('epages.cartridges.de_epages.design.widget','templates/Designtoolcontroller.html'), translationName : dojo.moduleUrl('epages.cartridges.de_epages.design.widget','templates/translation'), postCreate: function() { this.inherited("postCreate", arguments); dojo.subscribe(this.objectTreeId+'/select', this, '_onSelectObject'); dojo.subscribe('Designtool/select', this, '_onSelectDesigntool'); //set Reference to EventHandler if exists this.eventHandler = typeof contentEventHandler != 'undefined' ? contentEventHandler : undefined; }, _createInputsForUndo: function (objectId) { var templates = this.objects[objectId].templates; var inputFields = {}; var me = this; $H(templates).each( function(pair){ var inputField = document.createElement('input'); inputField.type = "hidden"; inputField.name = objectId +':'+ pair.key + ':1:LayoutUndo'; inputField.value = pair.value; // read current values inputField.size = 4; me.ControllerNode.appendChild(inputField); me.connect(inputField, 'onchange', 'callOnChange'); var undoObject = $$(me.undobuttonsId).getUndoObject(); undoObject.setDefaultValue(inputField); inputFields[pair.key] = inputField; }); return inputFields; }, _loadObject:function(node){ if (this.objects[node.item.objectId] === undefined) { var json = new epages.io.Json(); var output = json.loadSync(this.uri, { ObjectID: node.item.objectId, ViewAction: 'JSONViewResponse', ChangeAction: 'JSONLayout', KnownPageTypes: $H(this.pagetypes).keys() }); this.objects[node.item.objectId] = { templates : output.data.Templates, pagetype : output.data.PageType, treeNode : node }; if (this.pagetypes[output.data.PageType] === undefined) { this.pagetypes[output.data.PageType] = { templates : output.data.TemplateTypes, controller : undefined }; } } }, _showDesignTools: function (objectId) { $('Designbox').style.display = 'none'; // hide old if (this._visiblePageType !== undefined) { $A(this.pagetypes[this._visiblePageType].controller).each(function (widget) { widget.hide(); }); } // create new if necessary var pagetype = this.objects[objectId].pagetype; if (this.pagetypes[pagetype].controller === undefined) { this.pagetypes[pagetype].controller = this._createDesigntoolcontroller(pagetype,objectId); } // show new this._visiblePageType = pagetype; var templates = this.objects[objectId].templates; if(this.pagetypes[pagetype].controller.length != 0){ $A(this.pagetypes[pagetype].controller).each(function (widget) { if(templates[widget.folder] != 0){ widget.setOption(templates[widget.folder],false,objectId); widget.show(); } }); //correct Layout if some Designtools are hidden var first = true; $A(this.pagetypes[this._visiblePageType].controller).each(function (widget) { if(widget.visible && first){ widget.isfirst = true; widget.setSeperator(false); first = false; } else{ widget.isfirst = false; widget.setSeperator(true); } }); //show Designtoolcontroller $('Designbox').style.display = ''; } //hide Designtoolcontroller if there are no templates for this pagetype else{ $('Designbox').style.display = 'none'; } }, _onSelectObject: function(node){ this._loadObject(node); this._showDesignTools(node.item.objectId); }, allowSelectLayout: function(widgetId){ //check if changes in page where made an ask to save them before opening Designtool if($$(this.undobuttonsId) !== undefined && $$(this.undobuttonsId).existsChanges()){ this._activDesigntoolId = widgetId; if(!this._dialogWidget){ this._createDialog(); } this._dialogWidget.show(); } else{ //if no changes where made open Designtool $$(widgetId).openMenuWidget(); } }, _createDialog: function(){ var messageWidget = new epages.widget.Message({ headline:this.translation.get("SaveQuestion"), message: this.translation.get("ChangeLayoutDescription"), sizeClass:"Large", typeClass:"Warning" }); var me =this; var buttons = [{ label: this.translation.get("Save"), cssClass: 'Active', onclick: function() { this._modalDialogWidget.hide(); //if Save was clicked, undowidget saves changes $$(me.undobuttonsId).sendChanges(); //open Designtool $$(me._activDesigntoolId).openMenuWidget(); } }, { label: this.translation.get("Cancel"), onclick: function() { this._modalDialogWidget.hide(); } }]; this._dialogWidget = new epages.widget.Modaldialog({ id: "Designtoolcontroller_DialogWidget", options:{ title : this.translation.get("ChangeOnLayout"), width : 400, height: 120, content: messageWidget }, buttons : buttons }); document.body.appendChild(this._dialogWidget.domNode); }, _createDesigntoolcontroller: function(pagetype,objectId){ if(this.imageUrl){ var returnArray = []; var templates = this.pagetypes[pagetype].templates; for(templateTypeFolder in templates){ var info = templates[templateTypeFolder]; if (info.Variations.length) { var widget = new epages.cartridges.de_epages.design.widget.Designtool({ folder : templateTypeFolder, folderID : this.objects[objectId].templates[templateTypeFolder], objectId : objectId, title : info.NameOrAlias, data : info.Variations, imagedir : this.imageUrl, controllerId : this.id, position : info.Position }); returnArray.push(widget); } } dojo.forEach(returnArray.sort(function(a,b) { return a.position - b.position; }), function (el) { this.ContainerNode.appendChild(el.domNode); }, this); return returnArray; } else{ return []; } }, _onSelectDesigntool:function(opt){ var widgetId = opt.id; var active = $$(widgetId).getActive(); if(active !== undefined){ this.changeLayout(active); } }, changeLayout:function(active){ // save changes on server var json = new epages.io.Json(); var params = { ObjectID : active.objectId, ViewAction : 'JSONViewResponse', ChangeAction: 'SaveDesign' }; params[active.folder] = active.alias; var output = json.loadSync(this.uri, params); var objectInfo = this.objects[active.objectId]; // correct internal data for next time objectInfo.templates[active.folder] = active.templateTypeId; if($$(this.undobuttonsId) !== undefined){ $$(this.undobuttonsId).sendChanges(); } // reload content if contentEventHandler is defined if(this.eventHandler !== undefined){ this.eventHandler.reloadContent(active.objectId, true); } //update page cache flag if(typeof pageCache_SetStatus == 'function'){ pageCache_SetStatus(true); } }, callOnChange: function(evt){ var name = evt.target.name.split(':'); var templateType = evt.target.value; var objectId = name[0]; var templateTypeFolder = name[1]; var pagetype = this.objects[objectId].pagetype; for( var i=0,iLength=this.pagetypes[pagetype].controller.length ; i<iLength ; i++ ){ if(this.pagetypes[pagetype].controller[i].folder == templateTypeFolder){ var designtool = this.pagetypes[pagetype].controller[i]; designtool.setOption(templateType,true,objectId); this._showDesignTools(objectId); //$$(this.objectControllerId).selectNode(this.objects[objectId].treeNode); } } } } );