dojo.provide("epages.cartridges.de_epages.mediagallery.widget.Mediagallery"); dojo.require("epages.widget.LocalizedWidget"); dojo.require("epages.widget.Dialog"); dojo.require('epages.cartridges.de_epages.mediagallery.widget.Filebrowser'); dojo.require("epages.cartridges.de_epages.mediagallery.widget.GallerySizeUsage"); dojo.require('epages.string'); dojo.require('epages.html'); dojo.require('epages.browser'); dojo.declare ( "epages.cartridges.de_epages.mediagallery.widget.Mediagallery", [epages.widget.LocalizedWidget], { /** * public properties */ onApply : '', // onApply function applyButtonLabel: '', // label of apply button // pass properties to filebrowser widget siteId : epages.vars.SiteID, // epages SiteID url : '?', // request url directory : 'MediaGallery', // base directory multiSelect : 'true', // multi item selection on or off validFileTypes : "", // show only files with these file extensions imageDB : epages.vars.ImageDbRoot, // url to image database opener : '', // string to define from where it was opend, passed to the Filebrowser // pass properties to gallery size usage widget maxGallerySize : '', currentGallerySize : '', /** * private properties */ _applyButtonDisabled: true, // flag: indicates wether the apply button is disabled or not _applyButtonActive : false, // flag: indicates wether the apply button is active (highlighted) or not /** * widget properties */ templatePath : dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget','templates/Mediagallery.html'), translationName : dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget','templates/translation'), widgetsInTemplate:true, /** * widget life cycle */ postMixInProperties: function() { // summary: initalize values - adjust properites this.inherited("postMixInProperties", arguments); }, postCreate: function() { // summary: initalize widget - append events, adjust properites this.inherited("postCreate", arguments); this.multiSelect = epages.string.toBoolean(this.multiSelect); this._appendEvents(); this._initButtonBar(); // remove the dialog title this.dialogWidget.titleBar.removeAttribute("title"); // gallery usage updater this.gallerySizeUsage.updateUsage(this.fileBrowserWidget.galleryUsage); }, _initButtonBar: function() { // summary: move buttons into dialog widget, init apply button if(this.applyButtonLabel !=""){ this.applyButtonLabelNode.firstChild.data = this.applyButtonLabel; } if(dojo.hasClass(this.applyButtonNode,'Active')){ this._applyButtonActive = true; } this._doDisableApplyButton(true); // move buttons into the Dialogs button bar this.dialogWidget.buttonBarNode.appendChild(this.buttonsNode); this.dialogWidget.buttonBarNode.style.display = "block"; if (this.onApply == ''){ this._hideApplyButton(); }else{ this._showApplyButton(); } var bNode = this.buttonsNode; // silly workaround for msie (force rendering again) bNode.style.display="none"; window.setTimeout(function() {bNode.style.display="block";}, 10); }, _appendEvents: function() { // summary: append button events, subscribe to filetree and imagedb // events this.connect(this.applyButtonNode, 'onclick', '_OnApply'); this.connect(this.cancelButtonNode, 'onclick', 'hide'); // subscriptions dojo.subscribe(this.id+'_Filebrowser/fileTreeNodeSelected', this, '_enableApplyButton'); // on select folder -> show apply button //dojo.subscribe(this.id+'_Filebrowser/imageDBSelected', this, '_disableApplyButton'); // on select imageDB -> hide apply button dojo.subscribe('Mediagallery/hide',this,'hide'); dojo.subscribe('Mediagallery/disableApplyButton',this,'_disableApplyButton'); dojo.subscribe('Mediagallery/enableApplyButton',this,'_enableApplyButton'); // propagate upload/delete/create events dojo.subscribe(this.id+'_Filebrowser/updateCurrentBytes', this, function(kilobytes) { dojo.publish(this.gallerySizeUsage.id+'/updateCurrentBytes', [kilobytes]); }); }, /** * getter, setter and other public functions */ hide: function() { // summary: hide dialog widget this.dialogWidget.hide(); }, show: function() { // summary: show dialog widget this.dialogWidget.show(); }, changeOpener: function(opener){ if(opener){ this.opener = opener; this.fileBrowserWidget.changeOpener(opener); } }, setOnApply: function(/* function */ onApply) { // summary: setter for onApply function if(onApply != '' && onApply != null && onApply !== undefined) { this.onApply=onApply; this._showApplyButton(); } else { // reset on invalid onApply value this.onApply=''; this._hideApplyButton(); } }, setFileTypes: function(/* String */ fileTypes) { // summary: updates the list of allowed file extensions if(typeof(fileTypes) === "string" && (this.validFileTypes != fileTypes)) { this.validFileTypes = fileTypes; this.fileBrowserWidget.setFileTypes(this.validFileTypes); } }, /** * widget button/ display functions */ _showApplyButton: function() { // summary: show and enable apply button dojo.removeClass(this.applyButtonNode, "HideElementSoft"); this._doDisableApplyButton(false); }, _hideApplyButton: function() { // summary: hide and disable apply button dojo.addClass(this.applyButtonNode, "HideElementSoft"); this._doDisableApplyButton(true); }, _disableApplyButton: function() { // summary: disable apply button this._doDisableApplyButton(true); }, _enableApplyButton: function() { // summary: enable apply button this._doDisableApplyButton(false); }, _doDisableApplyButton: function(/* boolean */ doDisable) { // summary: disable or enable apply button this._applyButtonDisabled = doDisable; if(doDisable){ dojo.addClass(this.applyButtonNode, "Disabled"); if(this._applyButtonActive){ dojo.removeClass(this.applyButtonNode, "Active"); } } else { dojo.removeClass(this.applyButtonNode, "Disabled"); if(this._applyButtonActive){ dojo.addClass(this.applyButtonNode, "Active"); } } }, _OnApply: function(evt) { // summary: call callback function onApply and pass selected items //check if apply button is clicked while plugin is open if(!this._applyButtonDisabled) { this.fileBrowserWidget.onApply(); if(this.fileBrowserWidget.pluginActive()){ //if inside the filebrowser a plugin ist still active return and do nothing //plugin has to be deactivated or has to close the mediagallery return; } this.dialogWidget.hide(); var items = this.fileBrowserWidget.getSelectedItems(); //only do custom onApply if now plugin is active inside filebrowser if (typeof(this.onApply) == 'function') { this.onApply(items); } else { console.warn("Invalid function passed to onApply in "+this.declaredClass); } } } });