diff --git a/_build/data/transport.core.menus.php b/_build/data/transport.core.menus.php index 5f7e376a4d3..a7ee89b2078 100644 --- a/_build/data/transport.core.menus.php +++ b/_build/data/transport.core.menus.php @@ -79,7 +79,14 @@ 'action' => 'system/contenttype', ], // endregion - + // region: Trash + [ + 'text' => 'trash', + 'description' => 'trash_desc', + 'permissions' => 'menu_trash', + 'action' => 'resource/trash', + ], + // endregion ], ], // endregion diff --git a/_build/templates/default/sass/_buttons.scss b/_build/templates/default/sass/_buttons.scss index 4a98623a99e..a6ff191d4e8 100644 --- a/_build/templates/default/sass/_buttons.scss +++ b/_build/templates/default/sass/_buttons.scss @@ -672,12 +672,6 @@ html.ext-strict body #modx-container .x-small-editor .x-form-text { font-weight: 400; } -.tree-trash > em > button:before { - @extend %pseudo-font; - content: fa-content($fa-var-trash-alt); - font-weight: 400; -} - /* alignment overrides */ #modx-leftbar .x-toolbar-ct .x-btn .tree-new-symlink > em > button { top: 4px; diff --git a/_build/templates/default/sass/_tree.scss b/_build/templates/default/sass/_tree.scss index b8da8923242..3779c3f18f2 100644 --- a/_build/templates/default/sass/_tree.scss +++ b/_build/templates/default/sass/_tree.scss @@ -989,14 +989,15 @@ #modx-leftbar-tabpanel__modx-trash-link { .icon { opacity: .5; - &:hover { - color: $red; - } } &.active { .icon { opacity: 1; } + + &:hover .icon { + color: $red; + } } } diff --git a/_build/templates/default/sass/index.scss b/_build/templates/default/sass/index.scss index df7b202f751..67a987c5d60 100644 --- a/_build/templates/default/sass/index.scss +++ b/_build/templates/default/sass/index.scss @@ -663,7 +663,7 @@ a.x-grid-link:focus { background: scale-color($color: $red, $saturation: -10%, $lightness: 94%); font-weight: 400; } - // The "Call Stack" header row + // The "Call Stack" header row &[bgcolor^="#e9b"] { background: $colorSplash; color: $white !important; @@ -1685,6 +1685,15 @@ iframe[classname="x-hidden"] { color: $green; } +#modx-abtn-purge { + background-color: $red; + color: $white; + + &:hover { + background-color: darken($red, 10%); + } +} + #modx-abtn-help { color: $colorSplash; } diff --git a/core/lexicon/en/resource.inc.php b/core/lexicon/en/resource.inc.php index ee1198376d1..ce096018023 100644 --- a/core/lexicon/en/resource.inc.php +++ b/core/lexicon/en/resource.inc.php @@ -45,6 +45,8 @@ $_lang['resource_createdon'] = 'Created On'; $_lang['resource_delete'] = 'Delete'; $_lang['resource_delete_confirm'] = 'Are you sure you want to delete the resource: "[[+resource]]"?
NOTE: Any child resources will also be deleted!'; +$_lang['resource_purge'] = 'Erase resource'; +$_lang['resource_purge_confirm'] = 'Do you really want to finally erase the following resource: "[[+resource]]"?
WARNING: This cannot be undone.'; $_lang['resource_description'] = 'Description'; $_lang['resource_description_help'] = 'This is an optional description of the resource.'; $_lang['resource_duplicate'] = 'Duplicate'; diff --git a/core/lexicon/en/topmenu.inc.php b/core/lexicon/en/topmenu.inc.php index cb8f751c245..a90a174979c 100644 --- a/core/lexicon/en/topmenu.inc.php +++ b/core/lexicon/en/topmenu.inc.php @@ -119,6 +119,8 @@ $_lang['tools_desc'] = 'Utilities to keep your site sorted'; $_lang['topnav'] = 'Main Navigation'; $_lang['topnav_desc'] = ''; +$_lang['trash'] = 'Trash'; +$_lang['trash_desc'] = 'Manage deleted resources.'; $_lang['user'] = 'User'; $_lang['usernav'] = 'User Navigation'; $_lang['usernav_desc'] = ''; diff --git a/core/lexicon/en/trash.inc.php b/core/lexicon/en/trash.inc.php index 0bb38c892c7..69ad4f90cd5 100644 --- a/core/lexicon/en/trash.inc.php +++ b/core/lexicon/en/trash.inc.php @@ -21,7 +21,7 @@ $_lang['trash.restore_all'] = 'Restore all'; $_lang['trash.selected_purge'] = 'Erase selected resources'; $_lang['trash.selected_restore'] = 'Restore selected resources'; -$_lang['trash.purge'] = 'Erase resource'; +$_lang['trash.purge'] = 'Erase'; $_lang['trash.purge_confirm_title'] = 'Erase resource(s)?'; $_lang['trash.purge_confirm_message'] = 'Do you really want to finally erase the following resource(s)? This cannot be undone.
[[+list]]'; $_lang['trash.purge_all_confirm_message'] = 'Do you really want to finally erase the listed [[+count]] resource(s)?

This cannot be undone, and it affects all currently trashed resources in the grid.
[[+list]]'; diff --git a/core/src/Revolution/Processors/Resource/GetNodes.php b/core/src/Revolution/Processors/Resource/GetNodes.php index 0e009c65ba3..df463964942 100644 --- a/core/src/Revolution/Processors/Resource/GetNodes.php +++ b/core/src/Revolution/Processors/Resource/GetNodes.php @@ -109,6 +109,7 @@ public function prepare() 'edit_document' => $this->modx->hasPermission('edit_document') ? 'pedit' : '', 'delete_document' => $this->modx->hasPermission('delete_document') ? 'pdelete' : '', 'undelete_document' => $this->modx->hasPermission('undelete_document') ? 'pundelete' : '', + 'purge_deleted' => $this->modx->hasPermission('purge_deleted') ? 'ppurge' : '', 'publish_document' => $this->modx->hasPermission('publish_document') ? 'ppublish' : '', 'unpublish_document' => $this->modx->hasPermission('unpublish_document') ? 'punpublish' : '', 'resource_duplicate' => $this->modx->hasPermission('resource_duplicate') ? 'pduplicate' : '', diff --git a/core/src/Revolution/Processors/Resource/GetToolbar.php b/core/src/Revolution/Processors/Resource/GetToolbar.php index f46aeb5205e..1ffb3eaccdd 100644 --- a/core/src/Revolution/Processors/Resource/GetToolbar.php +++ b/core/src/Revolution/Processors/Resource/GetToolbar.php @@ -91,12 +91,10 @@ public function process() $items[] = [ 'id' => 'emptifier', - 'cls' => 'tree-trash', 'tooltip' => $this->modx->lexicon('trash.manage_recycle_bin_tooltip', [ 'count' => $deletedResources ]), - 'disabled' => ($deletedResources == 0) ? true : false, - 'handler' => 'new Function("this.redirect(\"?a=resource/trash\");");' + 'disabled' => $deletedResources === 0 ]; } diff --git a/core/src/Revolution/Processors/Resource/Trash/Purge.php b/core/src/Revolution/Processors/Resource/Trash/Purge.php index f23a7e41434..a308cb56f61 100644 --- a/core/src/Revolution/Processors/Resource/Trash/Purge.php +++ b/core/src/Revolution/Processors/Resource/Trash/Purge.php @@ -198,9 +198,12 @@ public function process() } } + $deletedCount = $this->modx->getCount(modResource::class, ['deleted' => 1]); + return $this->success($msg, [ 'count_success' => count($success), - 'count_failures' => count($this->failures) + 'count_failures' => count($this->failures), + 'deletedCount' => $deletedCount, ]); } } diff --git a/core/src/Revolution/modManagerController.php b/core/src/Revolution/modManagerController.php index 0059339c484..4b09ab599d0 100644 --- a/core/src/Revolution/modManagerController.php +++ b/core/src/Revolution/modManagerController.php @@ -138,6 +138,7 @@ public function prepareLanguage() { $this->modx->lexicon->load('action'); $languageTopics = $this->getLanguageTopics(); + $languageTopics[] = 'trash'; foreach ($languageTopics as $topic) { $this->modx->lexicon->load($topic); } diff --git a/manager/assets/modext/core/modx.layout.js b/manager/assets/modext/core/modx.layout.js index 3ecd762e6d1..c3af2f20978 100644 --- a/manager/assets/modext/core/modx.layout.js +++ b/manager/assets/modext/core/modx.layout.js @@ -299,7 +299,7 @@ Ext.extend(MODx.Layout, Ext.Viewport, { ,listeners: { afterrender: function() { const baseTabs = this, - header = Ext.get('modx-leftbar-header') + header = Ext.get('modx-leftbar-header') ; MODx.Ajax.request({ url: MODx.config.connector_url, @@ -313,8 +313,25 @@ Ext.extend(MODx.Layout, Ext.Viewport, { if (trashTrigger) { const trashTab = baseTabs.add({ id: 'modx-trash-link', - title: '', - handler: trashTrigger.handler + title: '', + updateState(deletedCount = 0) { + const tab = this; + const tabEl = tab.tabEl; + const tooltipTarget = new Ext.Element(tabEl); + + if (deletedCount === 0) { + tab.disable(); + tabEl.classList.remove('active'); + } else { + tab.enable(); + tabEl.classList.add('active'); + } + + tab.tooltip = new Ext.ToolTip({ + target: tooltipTarget, + title: _('trash.manage_recycle_bin_tooltip', { count: deletedCount }), + }); + }, }); if (!trashTrigger.disabled) { trashTab.tabEl.classList.add('active'); diff --git a/manager/assets/modext/modx.jsgrps-min.js b/manager/assets/modext/modx.jsgrps-min.js index cf095d292f5..274e078ebdb 100644 --- a/manager/assets/modext/modx.jsgrps-min.js +++ b/manager/assets/modext/modx.jsgrps-min.js @@ -47,4 +47,4 @@ Ext.ns("Ext.ux.grid"),Ext.ux.grid.RowExpander=Ext.extend(Ext.util.Observable,{ex /*! FileAPI 2.0.25 - BSD | git://github.com/mailru/FileAPI.git * FileAPI — a set of javascript tools for working with files. Multiupload, drag'n'drop and chunked file upload. Images: crop, resize and auto orientation by EXIF. */ -function(window){"use strict";var CanvasPrototype=window.HTMLCanvasElement&&window.HTMLCanvasElement.prototype,hasBlobConstructor=window.Blob&&function(){try{return Boolean(new Blob)}catch(e){return!1}}(),hasArrayBufferViewSupport=hasBlobConstructor&&window.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(e){return!1}}(),BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,dataURLtoBlob=(hasBlobConstructor||BlobBuilder)&&window.atob&&window.ArrayBuffer&&window.Uint8Array&&function(dataURI){var byteString,arrayBuffer,intArray,i,mimeString,bb;for(byteString=dataURI.split(",")[0].indexOf("base64")>=0?atob(dataURI.split(",")[1]):decodeURIComponent(dataURI.split(",")[1]),arrayBuffer=new ArrayBuffer(byteString.length),intArray=new Uint8Array(arrayBuffer),i=0;i0,dataURLtoBlob=window.dataURLtoBlob,_rimg=/img/i,_rcanvas=/canvas/i,_rimgcanvas=/img|canvas/i,_rinput=/input/i,_rdata=/^data:[^,]+,/,_toString={}.toString,Math=window.Math,_SIZE_CONST=function(pow){return(pow=new window.Number(Math.pow(1024,pow))).from=function(sz){return Math.round(sz*this)},pow},_elEvents={},_infoReader=[],_readerEvents="abort progress error load loadend",_xhrPropsExport="status statusText readyState response responseXML responseText responseBody".split(" "),_isArray=function(ar){return ar&&"length"in ar},_each=function(obj,fn,ctx){if(obj)if(_isArray(obj))for(var i=0,n=obj.length;i=_length&&!_fail&&queue.end()},isFail:function(){return _fail},fail:function(){!_fail&&fn(_fail=!0)},end:function(){_end||(_end=!0,fn())}};return queue},each:_each,afor:function(array,callback){var i=0,n=array.length;_isArray(array)&&n--?function _next(){callback(n!=i&&_next,array[i],i++)}():callback(!1)},extend:_extend,isFile:function(file){return"[object File]"===_toString.call(file)},isBlob:function(blob){return this.isFile(blob)||"[object Blob]"===_toString.call(blob)},isCanvas:function(el){return el&&_rcanvas.test(el.nodeName)},getFilesFilter:function(filter){return(filter="string"==typeof filter?filter:filter.getAttribute&&filter.getAttribute("accept")||"")?new RegExp("("+filter.replace(/\./g,"\\.").replace(/,/g,"|")+")$","i"):/./},readAsDataURL:function(file,fn){api.isCanvas(file)?_emit(file,fn,"load",api.toDataURL(file)):_readAs(file,fn,"DataURL")},readAsBinaryString:function(file,fn){_hasSupportReadAs("BinaryString")?_readAs(file,fn,"BinaryString"):_readAs(file,(function(evt){if("load"==evt.type)try{evt.result=api.toBinaryString(evt.result)}catch(e){evt.type="error",evt.message=e.toString()}fn(evt)}),"DataURL")},readAsArrayBuffer:function(file,fn){_readAs(file,fn,"ArrayBuffer")},readAsText:function(file,encoding,fn){fn||(fn=encoding,encoding="utf-8"),_readAs(file,fn,"Text",encoding)},toDataURL:function(el,type){return"string"==typeof el?el:el.toDataURL?el.toDataURL(type||"image/png"):void 0},toBinaryString:function(val){return window.atob(api.toDataURL(val).replace(_rdata,""))},readAsImage:function(file,fn,progress){if(api.isBlob(file))if(apiURL){var data=apiURL.createObjectURL(file);undefined===data?_emit(file,fn,"error"):api.readAsImage(data,fn,progress)}else api.readAsDataURL(file,(function(evt){"load"==evt.type?api.readAsImage(evt.result,fn,progress):(progress||"error"==evt.type)&&_emit(file,fn,evt,null,{loaded:evt.loaded,total:evt.total})}));else if(api.isCanvas(file))_emit(file,fn,"load",file);else if(_rimg.test(file.nodeName))if(file.complete)_emit(file,fn,"load",file);else{_one(file,"error abort load",(function _fn(evt){"load"==evt.type&&apiURL&&apiURL.revokeObjectURL(file.src),_off(file,"error abort load",_fn),_emit(file,fn,evt,file)}))}else if(file.iframe)_emit(file,fn,{type:"error"});else{var img=api.newImage(file.dataURL||file);api.readAsImage(img,fn,progress)}},checkFileObj:function(name){var file={},accept=api.accept;return"object"==typeof name?file=name:file.name=(name+"").split(/\\|\//g).pop(),null==file.type&&(file.type=file.name.split(".").pop()),_each(accept,(function(ext,type){((ext=new RegExp(ext.replace(/\s/g,"|"),"i")).test(file.type)||api.ext2mime[file.type])&&(file.type=api.ext2mime[file.type]||type.split("/")[0]+"/"+file.type)})),file},getDropFiles:function(evt,callback){var items,files=[],all=[],dataTransfer=_getDataTransfer(evt),transFiles=dataTransfer.files,transItems=dataTransfer.items,entrySupport=_isArray(transItems)&&transItems[0]&&_getAsEntry(transItems[0]),queue=api.queue((function(){callback(files,all)}));if(entrySupport)if(normalize&&transFiles){var file,entry,i=transFiles.length;for(items=new Array(i);i--;){file=transFiles[i];try{entry=_getAsEntry(transItems[i])}catch(err){api.log("[err] getDropFiles: ",err),entry=null}_isEntry(entry)&&(entry.isDirectory||entry.isFile&&file.name==file.name.normalize("NFC"))?items[i]=entry:items[i]=file}}else items=transItems;else items=transFiles;_each(items||[],(function(item){queue.inc();try{entrySupport&&_isEntry(item)?_readEntryAsFiles(item,(function(err,entryFiles,allEntries){err?api.log("[err] getDropFiles:",err):files.push.apply(files,entryFiles),all.push.apply(all,allEntries),queue.next()})):function(file,callback){if(!file.type&&(safari||file.size%4096==0&&file.size<=102400))if(FileReader)try{var reader=new FileReader;_one(reader,_readerEvents,(function(evt){var isFile="error"!=evt.type;isFile?(null!=reader.readyState&&reader.readyState!==reader.LOADING||reader.abort(),callback(isFile)):callback(!1,reader.error)})),reader.readAsDataURL(file)}catch(err){callback(!1,err)}else callback(null,new Error("FileReader is not supported"));else callback(!0)}(item,(function(yes,err){yes?files.push(item):item.error=err,all.push(item),queue.next()}))}catch(err){queue.next(),api.log("[err] getDropFiles: ",err)}})),queue.check()},getFiles:function(input,filter,callback){var files=[];return callback?(api.filterFiles(api.getFiles(input),filter,callback),null):(input.jquery&&(input.each((function(){files=files.concat(api.getFiles(this))})),input=files,files=[]),"string"==typeof filter&&(filter=api.getFilesFilter(filter)),input.originalEvent?input=_fixEvent(input.originalEvent):input.srcElement&&(input=_fixEvent(input)),input.dataTransfer?input=input.dataTransfer:input.target&&(input=input.target),input.files?(files=input.files,html5||(files[0].blob=input,files[0].iframe=!0)):!html5&&isInputFile(input)?api.trim(input.value)&&((files=[api.checkFileObj(input.value)])[0].blob=input,files[0].iframe=!0):_isArray(input)&&(files=input),api.filter(files,(function(file){return!filter||filter.test(file.name)})))},getTotalSize:function(files){for(var size=0,i=files&&files.length;i--;)size+=files[i].size;return size},getInfo:function(file,fn){var info={},readers=_infoReader.concat();api.isBlob(file)?function _next(){var reader=readers.shift();reader?reader.test(file.type)?reader(file,(function(err,res){err?fn(err):(_extend(info,res),_next())})):_next():fn(!1,info)}():fn("not_support_info",info)},addInfoReader:function(mime,fn){fn.test=function(type){return mime.test(type)},_infoReader.push(fn)},filter:function(input,fn){for(var val,result=[],i=0,n=input.length;i>2,enc2=(3&byte1)<<4|byte2>>4;isNaN(byte2)?enc3=enc4=64:(enc3=(15&byte2)<<2|byte3>>6,enc4=isNaN(byte3)?64:63&byte3),outStr+=b64.charAt(enc1)+b64.charAt(enc2)+b64.charAt(enc3)+b64.charAt(enc4)}return outStr}};function _emit(target,fn,name,res,ext){var evt={type:name.type||name,target,result:res};_extend(evt,ext),fn(evt)}function _hasSupportReadAs(method){return FileReader&&!!FileReader.prototype["readAs"+method]}function _readAs(file,fn,method,encoding){if(api.isBlob(file)&&_hasSupportReadAs(method)){var Reader=new FileReader;_on(Reader,_readerEvents,(function _fn(evt){var type=evt.type;"progress"==type?_emit(file,fn,evt,evt.target.result,{loaded:evt.loaded,total:evt.total}):"loadend"==type?(_off(Reader,_readerEvents,_fn),Reader=null):_emit(file,fn,evt,evt.target.result)}));try{encoding?Reader["readAs"+method](file,encoding):Reader["readAs"+method](file)}catch(err){_emit(file,fn,"error",undefined,{error:err.toString()})}}else _emit(file,fn,"error",undefined,{error:"filreader_not_support_"+method})}function _isEntry(item){return item&&(item.isFile||item.isDirectory)}function _getAsEntry(item){var entry;return item.getAsEntry?entry=item.getAsEntry():item.webkitGetAsEntry&&(entry=item.webkitGetAsEntry()),entry}function _readEntryAsFiles(entry,callback){if(entry)if(entry.isFile)entry.file((function(file){file.fullPath=entry.fullPath,callback(!1,[file],[file])}),(function(err){entry.error=err,callback("FileError.code: "+err.code,[],[entry])}));else if(entry.isDirectory){var reader=entry.createReader(),firstAttempt=!0,files=[],all=[entry],onerror=function(err){entry.error=err,callback("DirectoryError.code: "+err.code,files,all)};reader.readEntries((function ondone(entries){firstAttempt&&(firstAttempt=!1,entries.length||(entry.error=new Error("directory is empty"))),entries.length?api.afor(entries,(function(next,entry){_readEntryAsFiles(entry,(function(err,entryFiles,allEntries){err||(files=files.concat(entryFiles)),all=all.concat(allEntries),next?next():reader.readEntries(ondone,onerror)}))})):callback(!1,files,all)}),onerror)}else _readEntryAsFiles(_getAsEntry(entry),callback);else{var err=new Error("invalid entry");(entry=new Object(entry)).error=err,callback(err.message,[],[entry])}}function isInputFile(el){return _rinput.test(el&&el.tagName)}function _getDataTransfer(evt){return(evt.originalEvent||evt||"").dataTransfer||{}}api.addInfoReader(/^image/,(function(file,callback){if(!file.__dimensions){var defer=file.__dimensions=api.defer();api.readAsImage(file,(function(evt){var img=evt.target;defer.resolve("load"!=evt.type&&"error",{width:img.width,height:img.height}),img.src=api.EMPTY_PNG,img=null}))}file.__dimensions.then(callback)})),api.event.dnd=function(el,onHover,onDrop){var _id,_type;onDrop||(onDrop=onHover,onHover=api.F),FileReader?(_on(el,"dragenter dragleave dragover",onHover.ff=onHover.ff||function(evt){for(var types=_getDataTransfer(evt).types,i=types&&types.length,debounceTrigger=!1;i--;)if(~types[i].indexOf("File")){evt.preventDefault(),_type!==evt.type&&("dragleave"!=(_type=evt.type)&&onHover.call(evt.currentTarget,!0,evt),debounceTrigger=!0);break}debounceTrigger&&(clearTimeout(_id),_id=setTimeout((function(){onHover.call(evt.currentTarget,"dragleave"!=_type,evt)}),50))}),_on(el,"drop",onDrop.ff=onDrop.ff||function(evt){evt.preventDefault(),_type=0,api.getDropFiles(evt,(function(files,all){onDrop.call(evt.currentTarget,files,all,evt)})),onHover.call(evt.currentTarget,!1,evt)})):api.log("Drag'n'Drop -- not supported")},api.event.dnd.off=function(el,onHover,onDrop){_off(el,"dragenter dragleave dragover",onHover.ff),_off(el,"drop",onDrop.ff)},jQuery&&!jQuery.fn.dnd&&(jQuery.fn.dnd=function(onHover,onDrop){return this.each((function(){api.event.dnd(this,onHover,onDrop)}))},jQuery.fn.offdnd=function(onHover,onDrop){return this.each((function(){api.event.dnd.off(this,onHover,onDrop)}))}),window.FileAPI=_extend(api,window.FileAPI),api.log("FileAPI: "+api.version),api.log("protocol: "+window.location.protocol),api.log("doctype: ["+doctype.name+"] "+doctype.publicId+" "+doctype.systemId),_each(document.getElementsByTagName("meta"),(function(meta){/x-ua-compatible/i.test(meta.getAttribute("http-equiv"))&&api.log("meta.http-equiv: "+meta.getAttribute("content"))}));try{_supportConsoleLog=!!console.log,_supportConsoleLogApply=!!console.log.apply}catch(err){}api.flashUrl||(api.flashUrl=api.staticPath+"FileAPI.flash.swf"),api.flashImageUrl||(api.flashImageUrl=api.staticPath+"FileAPI.flash.image.swf"),api.flashWebcamUrl||(api.flashWebcamUrl=api.staticPath+"FileAPI.flash.camera.swf")}(window),function(api,document,undef){"use strict";var min=Math.min,round=Math.round,getCanvas=function(){return document.createElement("canvas")},support=!1,exifOrientation={8:270,3:180,6:90,7:270,4:180,5:90};try{support=getCanvas().toDataURL("image/png").indexOf("data:image/png")>-1}catch(e){}function Image(file){if(file instanceof Image){var img=new Image(file.file);return api.extend(img.matrix,file.matrix),img}if(!(this instanceof Image))return new Image(file);this.file=file,this.size=file.size||100,this.matrix={sx:0,sy:0,sw:0,sh:0,dx:0,dy:0,dw:0,dh:0,resize:0,deg:0,quality:1,filter:0}}Image.prototype={image:!0,constructor:Image,set:function(attrs){return api.extend(this.matrix,attrs),this},crop:function(x,y,w,h){return undefined===w&&(w=x,h=y,x=y=0),this.set({sx:x,sy:y,sw:w,sh:h||w})},resize:function(w,h,strategy){return/min|max|height|width/.test(h)&&(strategy=h,h=w),this.set({dw:w,dh:h||w,resize:strategy})},preview:function(w,h){return this.resize(w,h||w,"preview")},rotate:function(deg){return this.set({deg})},filter:function(filter){return this.set({filter})},overlay:function(images){return this.set({overlay:images})},clone:function(){return new Image(this)},_load:function(image,fn){var self=this;/img|video/i.test(image.nodeName)?fn.call(self,null,image):api.readAsImage(image,(function(evt){fn.call(self,"load"!=evt.type,evt.result)}))},_apply:function(image,fn){var copy,canvas=getCanvas(),m=this.getMatrix(image),ctx=canvas.getContext("2d"),width=image.videoWidth||image.width,height=image.videoHeight||image.height,deg=m.deg,dw=m.dw,dh=m.dh,w=width,h=height,filter=m.filter,buffer=image,overlay=m.overlay,queue=api.queue((function(){image.src=api.EMPTY_PNG,fn(!1,canvas)})),renderImageToCanvas=api.renderImageToCanvas;for(deg-=360*Math.floor(deg/360),image._type=this.file.type;m.multipass&&min(w/dw,h/dh)>2;)w=w/2+.5|0,h=h/2+.5|0,(copy=getCanvas()).width=w,copy.height=h,buffer!==image?(renderImageToCanvas(copy,buffer,0,0,buffer.width,buffer.height,0,0,w,h),buffer=copy):(renderImageToCanvas(buffer=copy,image,m.sx,m.sy,m.sw,m.sh,0,0,w,h),m.sx=m.sy=m.sw=m.sh=0);canvas.width=deg%180?dh:dw,canvas.height=deg%180?dw:dh,canvas.type=m.type,canvas.quality=m.quality,ctx.rotate(deg*Math.PI/180),renderImageToCanvas(ctx.canvas,buffer,m.sx,m.sy,m.sw||buffer.width,m.sh||buffer.height,180==deg||270==deg?-dw:0,90==deg||180==deg?-dh:0,dw,dh),dw=canvas.width,dh=canvas.height,overlay&&api.each([].concat(overlay),(function(over){queue.inc();var img=new window.Image,fn=function(){var x=0|over.x,y=0|over.y,w=over.w||img.width,h=over.h||img.height,rel=over.rel;x=1==rel||4==rel||7==rel?(dw-w+x)/2:2==rel||5==rel||8==rel?dw-(w+x):x,y=3==rel||4==rel||5==rel?(dh-h+y)/2:rel>=6?dh-(h+y):y,api.event.off(img,"error load abort",fn);try{ctx.globalAlpha=over.opacity||1,ctx.drawImage(img,x,y,w,h)}catch(er){}queue.next()};api.event.on(img,"error load abort",fn),img.src=over.src,img.complete&&fn()})),filter&&(queue.inc(),Image.applyFilter(canvas,filter,queue.next)),queue.check()},getMatrix:function(image){var w,h,m=api.extend({},this.matrix),sw=m.sw=m.sw||image.videoWidth||image.naturalWidth||image.width,sh=m.sh=m.sh||image.videoHeight||image.naturalHeight||image.height,dw=m.dw=m.dw||sw,dh=m.dh=m.dh||sh,sf=sw/sh,df=dw/dh,strategy=m.resize;"preview"==strategy?dw==sw&&dh==sh||(df>=sf?h=(w=sw)/df:w=(h=sh)*df,w==sw&&h==sh||(m.sx=~~((sw-w)/2),m.sy=~~((sh-h)/2),sw=w,sh=h)):"height"==strategy?dw=dh*sf:"width"==strategy?dh=dw/sf:strategy&&(sw>dw||sh>dh?"min"==strategy?(dw=round(sf=df?min(sw,dw):dh*sf),dh=round(sf>=df?dw/sf:min(sh,dh))):(dw=sw,dh=sh));return m.sw=sw,m.sh=sh,m.dw=dw,m.dh=dh,m.multipass=api.multiPassResize,m},_trans:function(fn){this._load(this.file,(function(err,image){if(err)fn(err);else try{this._apply(image,fn)}catch(err){api.log("[err] FileAPI.Image.fn._apply:",err),fn(err)}}))},get:function(fn){if(api.support.transform){var _this=this,matrix=_this.matrix;"auto"==matrix.deg?api.getInfo(_this.file,(function(err,info){matrix.deg=exifOrientation[info&&info.exif&&info.exif.Orientation]||0,_this._trans(fn)})):_this._trans(fn)}else fn("not_support_transform");return this},toData:function(fn){return this.get(fn)}},Image.exifOrientation=exifOrientation,Image.transform=function(file,transform,autoOrientation,fn){function _transform(err,img){var images={},queue=api.queue((function(err){fn(err,images)}));err?queue.fail():api.each(transform,(function(params,name){if(!queue.isFail()){var ImgTrans=new Image(img.nodeType?img:file),isFn="function"==typeof params;if(isFn?params(img,ImgTrans):params.width?ImgTrans[params.preview?"preview":"resize"](params.width,params.height,params.strategy):params.maxWidth&&(img.width>params.maxWidth||img.height>params.maxHeight)&&ImgTrans.resize(params.maxWidth,params.maxHeight,"max"),params.crop){var crop=params.crop;ImgTrans.crop(0|crop.x,0|crop.y,crop.w||crop.width,crop.h||crop.height)}undefined===params.rotate&&autoOrientation&&(params.rotate="auto"),ImgTrans.set({type:ImgTrans.matrix.type||params.type||file.type||"image/png"}),isFn||ImgTrans.set({deg:params.rotate,overlay:params.overlay,filter:params.filter,quality:params.quality||1}),queue.inc(),ImgTrans.toData((function(err,image){err?queue.fail():(images[name]=image,queue.next())}))}}))}file.width?_transform(!1,file):api.getInfo(file,_transform)},api.each(["TOP","CENTER","BOTTOM"],(function(x,i){api.each(["LEFT","CENTER","RIGHT"],(function(y,j){Image[x+"_"+y]=3*i+j,Image[y+"_"+x]=3*i+j}))})),Image.toCanvas=function(el){var canvas=document.createElement("canvas");return canvas.width=el.videoWidth||el.width,canvas.height=el.videoHeight||el.height,canvas.getContext("2d").drawImage(el,0,0),canvas},Image.fromDataURL=function(dataURL,size,callback){var img=api.newImage(dataURL);api.extend(img,size),callback(img)},Image.applyFilter=function(canvas,filter,doneFn){"function"==typeof filter?filter(canvas,doneFn):window.Caman&&window.Caman("IMG"==canvas.tagName?Image.toCanvas(canvas):canvas,(function(){"string"==typeof filter?this[filter]():api.each(filter,(function(val,method){this[method](val)}),this),this.render(doneFn)}))},api.renderImageToCanvas=function(canvas,img,sx,sy,sw,sh,dx,dy,dw,dh){try{return canvas.getContext("2d").drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh)}catch(ex){throw api.log("renderImageToCanvas failed"),ex}},api.support.canvas=api.support.transform=support,api.Image=Image}(FileAPI,document),function(factory){"use strict";!function(loadImage){if(!window.navigator||!window.navigator.platform||!/iP(hone|od|ad)/.test(window.navigator.platform))return;var originalRenderMethod=loadImage.renderImageToCanvas;loadImage.detectSubsampling=function(img){var canvas,context;return img.width*img.height>1048576&&((canvas=document.createElement("canvas")).width=canvas.height=1,(context=canvas.getContext("2d")).drawImage(img,1-img.width,0),0===context.getImageData(0,0,1,1).data[3])},loadImage.detectVerticalSquash=function(img,subsampled){var data,sy,ey,py,naturalHeight=img.naturalHeight||img.height,canvas=document.createElement("canvas"),context=canvas.getContext("2d");for(subsampled&&(naturalHeight/=2),canvas.width=1,canvas.height=naturalHeight,context.drawImage(img,0,0),data=context.getImageData(0,0,1,naturalHeight).data,sy=0,ey=naturalHeight,py=naturalHeight;py>sy;)0===data[4*(py-1)+3]?ey=py:sy=py,py=ey+sy>>1;return py/naturalHeight||1},loadImage.renderImageToCanvas=function(canvas,img,sourceX,sourceY,sourceWidth,sourceHeight,destX,destY,destWidth,destHeight){if("image/jpeg"===img._type){var subsampled,vertSquashRatio,tileX,tileY,context=canvas.getContext("2d"),tmpCanvas=document.createElement("canvas"),tileSize=1024,tmpContext=tmpCanvas.getContext("2d");if(tmpCanvas.width=tileSize,tmpCanvas.height=tileSize,context.save(),(subsampled=loadImage.detectSubsampling(img))&&(sourceX/=2,sourceY/=2,sourceWidth/=2,sourceHeight/=2),vertSquashRatio=loadImage.detectVerticalSquash(img,subsampled),subsampled||1!==vertSquashRatio){for(sourceY*=vertSquashRatio,destWidth=Math.ceil(tileSize*destWidth/sourceWidth),destHeight=Math.ceil(tileSize*destHeight/sourceHeight/vertSquashRatio),destY=0,tileY=0;tileY0&&1==api.filter(this.items,(function(item){return item.file})).length,api.support.html5?api.formData&&!this.multipart&&FormData?options._chunked?(api.log("FileAPI.Form.toPlainData"),this.toPlainData(fn)):(api.log("FileAPI.Form.toFormData"),this.toFormData(fn)):(api.log("FileAPI.Form.toMultipartData"),this.toMultipartData(fn)):(api.log("FileAPI.Form.toHtmlData"),this.toHtmlData(fn))},_to:function(data,complete,next,arg){var queue=api.queue((function(){complete(data)}));this.each((function(file){try{next(file,data,queue,arg)}catch(err){api.log("FileAPI.Form._to: "+err.message),complete(err)}})),queue.check()},toHtmlData:function(fn){this._to(document.createDocumentFragment(),fn,(function(file,data){var hidden,blob=file.blob;file.file?(api.reset(blob,!0),blob.name=file.name,blob.disabled=!1,data.appendChild(blob)):((hidden=document.createElement("input")).name=file.name,hidden.type="hidden",hidden.value=blob,data.appendChild(hidden))}))},toPlainData:function(fn){this._to({},fn,(function(file,data,queue){file.file&&(data.type=file.file),file.blob.toBlob?(queue.inc(),_convertFile(file,(function(file,blob){data.name=file.name,data.file=blob,data.size=blob.length,data.type=file.type,queue.next()}))):file.file?(data.name=file.blob.name,data.file=file.blob,data.size=file.blob.size,data.type=file.type):(data.params||(data.params=[]),data.params.push(encodeURIComponent(file.name)+"="+encodeURIComponent(file.blob))),data.start=-1,data.end=data.file&&data.file.FileAPIReadPosition||-1,data.retry=0}))},toFormData:function(fn){this._to(new FormData,fn,(function(file,data,queue){file.blob&&file.blob.toBlob?(queue.inc(),_convertFile(file,(function(file,blob){data.append(file.name,blob,file.file),queue.next()}))):file.file?data.append(file.name,file.blob,file.file):data.append(file.name,file.blob),file.file&&data.append("_"+file.name,file.file)}))},toMultipartData:function(fn){this._to([],fn,(function(file,data,queue,boundary){queue.inc(),_convertFile(file,(function(file,blob){data.push("--_"+boundary+'\r\nContent-Disposition: form-data; name="'+file.name+'"'+(file.file?'; filename="'+encodeURIComponent(file.file)+'"':"")+(file.file?"\r\nContent-Type: "+(file.type||"application/octet-stream"):"")+"\r\n\r\n"+(file.file?blob:encodeURIComponent(blob))+"\r\n"),queue.next()}),!0)}),api.expando)}},api.Form=Form}(FileAPI,window),function(window,api){"use strict";var noop=function(){},document=window.document,XHR=function(options){this.uid=api.uid(),this.xhr={abort:noop,getResponseHeader:noop,getAllResponseHeaders:noop},this.options=options},_xhrResponsePostfix={"":1,XML:1,Text:1,Body:1};XHR.prototype={status:0,statusText:"",constructor:XHR,getResponseHeader:function(name){return this.xhr.getResponseHeader(name)},getAllResponseHeaders:function(){return this.xhr.getAllResponseHeaders()||{}},end:function(status,statusText){var _this=this,options=_this.options;_this.end=_this.abort=noop,_this.status=status,statusText&&(_this.statusText=statusText),api.log("xhr.end:",status,statusText),options.complete(200!=status&&201!=status&&(_this.statusText||"unknown"),_this),_this.xhr&&_this.xhr.node&&setTimeout((function(){var node=_this.xhr.node;try{node.parentNode.removeChild(node)}catch(e){}try{delete window[_this.uid]}catch(e){}window[_this.uid]=_this.xhr.node=null}),9)},abort:function(){this.end(0,"abort"),this.xhr&&(this.xhr.aborted=!0,this.xhr.abort())},send:function(FormData){var _this=this,options=this.options;FormData.toData((function(data){data instanceof Error?_this.end(0,data.message):(options.upload(options,_this),_this._send.call(_this,options,data))}),options)},_send:function(options,data){var xhr,_this=this,uid=_this.uid,onLoadFnName=_this.uid+"Load",url=options.url;if(api.log("XHR._send:",data),options.cache||(url+=(~url.indexOf("?")?"&":"?")+api.uid()),data.nodeName){var jsonp=options.jsonp;url=url.replace(/([a-z]+)=(\?)/i,"$1="+uid),options.upload(options,_this);var onPostMessage=function(evt){if(~url.indexOf(evt.origin))try{var result=api.parseJSON(evt.data);result.id==uid&&complete(result.status,result.statusText,result.response)}catch(err){complete(0,err.message)}},complete=window[uid]=function(status,statusText,response){_this.readyState=4,_this.responseText=response,_this.end(status,statusText),api.event.off(window,"message",onPostMessage),window[uid]=xhr=transport=window[onLoadFnName]=null};_this.xhr.abort=function(){try{transport.stop?transport.stop():transport.contentWindow.stop?transport.contentWindow.stop():transport.contentWindow.document.execCommand("Stop")}catch(er){}complete(0,"abort")},api.event.on(window,"message",onPostMessage),window[onLoadFnName]=function(){try{var win=transport.contentWindow,doc=win.document,result=win.result||api.parseJSON(doc.body.innerHTML);complete(result.status,result.statusText,result.response)}catch(e){api.log("[transport.onload]",e)}},(xhr=document.createElement("div")).innerHTML='
'+(jsonp&&options.url.indexOf("=?")<0?'':"")+"
";var form=xhr.getElementsByTagName("form")[0],transport=xhr.getElementsByTagName("iframe")[0];form.appendChild(data),api.log(form.parentNode.innerHTML),document.body.appendChild(xhr),_this.xhr.node=xhr,_this.readyState=2;try{form.submit()}catch(err){api.log("iframe.error: "+err)}form=null}else{if(url=url.replace(/([a-z]+)=(\?)&?/i,""),this.xhr&&this.xhr.aborted)return void api.log("Error: already aborted");if(xhr=_this.xhr=api.getXHR(),data.params&&(url+=(url.indexOf("?")<0?"?":"&")+data.params.join("&")),xhr.open("POST",url,!0),api.withCredentials&&(xhr.withCredentials="true"),options.headers&&options.headers["X-Requested-With"]||xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),api.each(options.headers,(function(val,key){xhr.setRequestHeader(key,val)})),options._chunked){xhr.upload&&xhr.upload.addEventListener("progress",api.throttle((function(evt){data.retry||options.progress({type:evt.type,total:data.size,loaded:data.start+evt.loaded,totalSize:data.size},_this,options)}),100),!1),xhr.onreadystatechange=function(){var lkb=parseInt(xhr.getResponseHeader("X-Last-Known-Byte"),10);if(_this.status=xhr.status,_this.statusText=xhr.statusText,_this.readyState=xhr.readyState,4==xhr.readyState){for(var k in _xhrResponsePostfix)_this["response"+k]=xhr["response"+k];if(xhr.onreadystatechange=null,!xhr.status||xhr.status-201>0)if(api.log("Error: "+xhr.status),(!xhr.status&&!xhr.aborted||500==xhr.status||416==xhr.status)&&++data.retry<=options.chunkUploadRetry){var delay=xhr.status?0:api.chunkNetworkDownRetryTimeout;options.pause(data.file,options),api.log("X-Last-Known-Byte: "+lkb),lkb?data.end=lkb:(data.end=data.start-1,416==xhr.status&&(data.end=data.end-options.chunkSize)),setTimeout((function(){_this._send(options,data)}),delay)}else _this.end(xhr.status);else data.retry=0,data.end==data.size-1?_this.end(xhr.status):(api.log("X-Last-Known-Byte: "+lkb),lkb&&(data.end=lkb),data.file.FileAPIReadPosition=data.end,setTimeout((function(){_this._send(options,data)}),0));xhr=null}},data.start=data.end+1,data.end=Math.max(Math.min(data.start+options.chunkSize,data.size)-1,data.start);var file=data.file,slice=(file.slice||file.mozSlice||file.webkitSlice).call(file,data.start,data.end+1);data.size&&!slice.size?setTimeout((function(){_this.end(-1)})):(xhr.setRequestHeader("Content-Range","bytes "+data.start+"-"+data.end+"/"+data.size),xhr.setRequestHeader("Content-Disposition","attachment; filename="+encodeURIComponent(data.name)),xhr.setRequestHeader("Content-Type",data.type||"application/octet-stream"),xhr.send(slice)),file=slice=null}else if(xhr.upload&&xhr.upload.addEventListener("progress",api.throttle((function(evt){options.progress(evt,_this,options)}),100),!1),xhr.onreadystatechange=function(){if(_this.status=xhr.status,_this.statusText=xhr.statusText,_this.readyState=xhr.readyState,4==xhr.readyState){for(var k in _xhrResponsePostfix)_this["response"+k]=xhr["response"+k];if(xhr.onreadystatechange=null,!xhr.status||xhr.status>201)if(api.log("Error: "+xhr.status),(!xhr.status&&!xhr.aborted||500==xhr.status)&&(options.retry||0)=0?val+"px":val}Camera.Shot=Shot,api.Camera=Camera}(window,FileAPI),function(window,jQuery,api){"use strict";var document=window.document,location=window.location,navigator=window.navigator,_each=api.each;api.support.flash=!1,api.support.flash&&(!api.html5||!api.support.html5||api.cors&&!api.support.cors||api.media&&!api.support.media||api.insecureChrome)&&function(){var _attr=api.uid(),_retry=0,_files={},_rhttp=/^https?:/i,flash={_fn:{},init:function(){var child=document.body&&document.body.firstChild;if(child)do{if(1==child.nodeType){api.log("FlashAPI.state: awaiting");var dummy=document.createElement("div");return dummy.id="_"+_attr,_css(dummy,{top:1,right:1,width:5,height:5,position:"absolute",zIndex:"2147483647"}),child.parentNode.insertBefore(dummy,child),void flash.publish(dummy,_attr)}}while(child=child.nextSibling);_retry<10&&setTimeout(flash.init,50*++_retry)},publish:function(el,id,opts){opts=opts||{},el.innerHTML=_makeFlashHTML({id,src:_getUrl(api.flashUrl,"r="+api.version),wmode:opts.camera?"":"transparent",flashvars:"callback="+(opts.onEvent||"FileAPI.Flash.onEvent")+"&flashId="+id+"&storeKey="+navigator.userAgent.match(/\d/gi).join("")+"_"+api.version+(flash.isReady||(api.pingUrl?"&ping="+api.pingUrl:""))+"&timeout="+api.flashAbortTimeout+(opts.camera?"&useCamera="+_getUrl(api.flashWebcamUrl):"")+"&debug="+(api.debug?"1":"")})},ready:function(){api.log("FlashAPI.state: ready"),flash.ready=api.F,flash.isReady=!0,flash.patch(),flash.patchCamera&&flash.patchCamera(),api.event.on(document,"mouseover",flash.mouseover),api.event.on(document,"click",(function(evt){flash.mouseover(evt)&&(evt.preventDefault?evt.preventDefault():evt.returnValue=!0)}))},getEl:function(){return document.getElementById("_"+_attr)},getWrapper:function(node){do{if(/js-fileapi-wrapper/.test(node.className))return node}while((node=node.parentNode)&&node!==document.body)},mouseover:function(evt){var target=api.event.fix(evt).target;if(/input/i.test(target.nodeName)&&"file"==target.type&&!target.disabled){var state=target.getAttribute(_attr),wrapper=flash.getWrapper(target);if(api.multiFlash){if("i"==state||"r"==state)return!1;if("p"!=state){target.setAttribute(_attr,"i");var dummy=document.createElement("div");if(!wrapper)return void api.log("[err] FlashAPI.mouseover: js-fileapi-wrapper not found");_css(dummy,{top:0,left:0,width:target.offsetWidth,height:target.offsetHeight,zIndex:"2147483647",position:"absolute"}),wrapper.appendChild(dummy),flash.publish(dummy,api.uid()),target.setAttribute(_attr,"p")}return!0}if(wrapper){var box=function(el){var box=el.getBoundingClientRect(),body=document.body,docEl=(el&&el.ownerDocument).documentElement;return{top:box.top+(window.pageYOffset||docEl.scrollTop)-(docEl.clientTop||body.clientTop||0),left:box.left+(window.pageXOffset||docEl.scrollLeft)-(docEl.clientLeft||body.clientLeft||0),width:box.right-box.left,height:box.bottom-box.top}}(wrapper);_css(flash.getEl(),box),flash.curInp=target}}else/object|embed/i.test(target.nodeName)||_css(flash.getEl(),{top:1,left:1,width:5,height:5})},onEvent:function(evt){var type=evt.type;if("ready"==type){try{flash.getInput(evt.flashId).setAttribute(_attr,"r")}catch(e){}return flash.ready(),setTimeout((function(){flash.mouseenter(evt)}),50),!0}"ping"===type?api.log("(flash -> js).ping:",[evt.status,evt.savedStatus],evt.error):"log"===type?api.log("(flash -> js).log:",evt.target):type in flash&&setTimeout((function(){api.log("FlashAPI.event."+evt.type+":",evt),flash[type](evt)}),1)},mouseenter:function(evt){var node=flash.getInput(evt.flashId);if(node){flash.cmd(evt,"multiple",null!=node.getAttribute("multiple"));var accept=[],exts={};_each((node.getAttribute("accept")||"").split(/,\s*/),(function(mime){api.accept[mime]&&_each(api.accept[mime].split(" "),(function(ext){exts[ext]=1}))})),_each(exts,(function(i,ext){accept.push(ext)})),flash.cmd(evt,"accept",accept.length?accept.join(",")+","+accept.join(",").toUpperCase():"*")}},get:function(id){return document[id]||window[id]||document.embeds[id]},getInput:function(id){if(!api.multiFlash)return flash.curInp;try{var node=flash.getWrapper(flash.get(id));if(node)return node.getElementsByTagName("input")[0]}catch(e){api.log('[err] Can not find "input" by flashId:',id,e)}},select:function(evt){var event,inp=flash.getInput(evt.flashId),uid=api.uid(inp),files=evt.target.files;_each(files,(function(file){api.checkFileObj(file)})),_files[uid]=files,document.createEvent?((event=document.createEvent("Event")).files=files,event.initEvent("change",!0,!0),inp.dispatchEvent(event)):jQuery?jQuery(inp).trigger({type:"change",files}):((event=document.createEventObject()).files=files,inp.fireEvent("onchange",event))},cmd:function(id,name,data,last){try{return api.log("(js -> flash)."+name+":",data),flash.get(id.flashId||id).cmd(name,data)}catch(err){api.log("(js -> flash).onError:",err.toString()),last||setTimeout((function(){flash.cmd(id,name,data,!0)}),50)}},patch:function(){api.flashEngine=!0,_inherit(api,{getFiles:function(input,filter,callback){if(callback)return api.filterFiles(api.getFiles(input),filter,callback),null;var files=api.isArray(input)?input:_files[api.uid(input.target||input.srcElement||input)];return files?(filter&&(filter=api.getFilesFilter(filter),files=api.filter(files,(function(file){return filter.test(file.name)}))),files):this.parent.apply(this,arguments)},getInfo:function(file,fn){if(_isHtmlFile(file))this.parent.apply(this,arguments);else if(file.isShot)fn(null,file.info={width:file.width,height:file.height});else{if(!file.__info){var defer=file.__info=api.defer();flash.cmd(file,"getFileInfo",{id:file.id,callback:_wrap((function _(err,info){_unwrap(_),defer.resolve(err,file.info=info)}))})}file.__info.then(fn)}}}),api.support.transform=!0,api.Image&&_inherit(api.Image.prototype,{get:function(fn,scaleMode){return this.set({scaleMode:scaleMode||"noScale"}),this.parent(fn)},_load:function(file,fn){if(api.log("FlashAPI.Image._load:",file),_isHtmlFile(file))this.parent.apply(this,arguments);else{var _this=this;api.getInfo(file,(function(err){fn.call(_this,err,file)}))}},_apply:function(file,fn){if(api.log("FlashAPI.Image._apply:",file),_isHtmlFile(file))this.parent.apply(this,arguments);else{var m=this.getMatrix(file.info),doneFn=fn;flash.cmd(file,"imageTransform",{id:file.id,matrix:m,callback:_wrap((function _(err,base64){api.log("FlashAPI.Image._apply.callback:",err),_unwrap(_),err?doneFn(err):api.support.html5||api.support.dataURI&&!(base64.length>3e4)?(m.filter&&(doneFn=function(err,img){err?fn(err):api.Image.applyFilter(img,m.filter,(function(){fn(err,this.canvas)}))}),api.newImage("data:"+file.type+";base64,"+base64,doneFn)):_makeFlashImage({width:m.deg%180?m.dh:m.dw,height:m.deg%180?m.dw:m.dh,scale:m.scaleMode},base64,doneFn)}))})}},toData:function(fn){var file=this.file,info=file.info,matrix=this.getMatrix(info);api.log("FlashAPI.Image.toData"),_isHtmlFile(file)?this.parent.apply(this,arguments):("auto"==matrix.deg&&(matrix.deg=api.Image.exifOrientation[info&&info.exif&&info.exif.Orientation]||0),fn.call(this,!file.info,{id:file.id,flashId:file.flashId,name:file.name,type:file.type,matrix}))}}),api.Image&&_inherit(api.Image,{fromDataURL:function(dataURL,size,callback){!api.support.dataURI||dataURL.length>3e4?_makeFlashImage(api.extend({scale:"exactFit"},size),dataURL.replace(/^data:[^,]+,/,""),(function(err,el){callback(el)})):this.parent(dataURL,size,callback)}}),_inherit(api.Form.prototype,{toData:function(fn){for(var items=this.items,i=items.length;i--;)if(items[i].file&&_isHtmlFile(items[i].blob))return this.parent.apply(this,arguments);api.log("FlashAPI.Form.toData"),fn(items)}}),_inherit(api.XHR.prototype,{_send:function(options,formData){if(formData.nodeName||formData.append&&api.support.html5||api.isArray(formData)&&"string"==typeof formData[0])return this.parent.apply(this,arguments);var flashId,fileId,data={},files={},_this=this;if(_each(formData,(function(item){item.file?(files[item.name]=item=_getFileDescr(item.blob),fileId=item.id,flashId=item.flashId):data[item.name]=item.blob})),fileId||(flashId=_attr),!flashId)return api.log("[err] FlashAPI._send: flashId -- undefined"),this.parent.apply(this,arguments);api.log("FlashAPI.XHR._send: "+flashId+" -> "+fileId),_this.xhr={headers:{},abort:function(){flash.cmd(flashId,"abort",{id:fileId})},getResponseHeader:function(name){return this.headers[name]},getAllResponseHeaders:function(){return this.headers}};var queue=api.queue((function(){flash.cmd(flashId,"upload",{url:_getUrl(options.url.replace(/([a-z]+)=(\?)&?/i,"")),data,files:fileId?files:null,headers:options.headers||{},callback:_wrap((function upload(evt){var type=evt.type,result=evt.result;api.log("FlashAPI.upload."+type),"progress"==type?(evt.loaded=Math.min(evt.loaded,evt.total),evt.lengthComputable=!0,options.progress(evt)):"complete"==type?(_unwrap(upload),"string"==typeof result&&(_this.responseText=result.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%")),_this.end(evt.status||200)):"abort"!=type&&"error"!=type||(_this.end(evt.status||0,evt.message),_unwrap(upload))}))})}));_each(files,(function(file){queue.inc(),api.getInfo(file,queue.next)})),queue.check()}})}};function _makeFlashHTML(opts){return('').replace(/#(\w+)#/gi,(function(a,name){return opts[name]}))}function _css(el,css){var key,val;if(el&&el.style)for(key in css){"number"==typeof(val=css[key])&&(val+="px");try{el.style[key]=val}catch(e){}}}function _inherit(obj,methods){_each(methods,(function(fn,name){var prev=obj[name];obj[name]=function(){return this.parent=prev,fn.apply(this,arguments)}}))}function _isHtmlFile(file){return file&&!file.flashId}function _wrap(fn){var id=fn.wid=api.uid();return flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{flash._fn[fn.wid]=null,delete flash._fn[fn.wid]}catch(e){}}function _getUrl(url,params){if(!_rhttp.test(url)){if(/^\.\//.test(url)||"/"!=url.charAt(0)){var path=location.pathname;url=((path=path.substr(0,path.lastIndexOf("/")))+"/"+url).replace("/./","/")}"//"!=url.substr(0,2)&&(url="//"+location.host+url),_rhttp.test(url)||(url=location.protocol+url)}return params&&(url+=(/\?/.test(url)?"&":"?")+params),url}function _makeFlashImage(opts,base64,fn){var key,flashId=api.uid(),el=document.createElement("div"),attempts=10;for(key in opts)el.setAttribute(key,opts[key]),el[key]=opts[key];_css(el,opts),opts.width="100%",opts.height="100%",el.innerHTML=_makeFlashHTML(api.extend({id:flashId,src:_getUrl(api.flashImageUrl,"r="+api.uid()),wmode:"opaque",flashvars:"scale="+opts.scale+"&callback="+_wrap((function _(){return _unwrap(_),--attempts>0&&function(){try{flash.get(flashId).setImage(base64)}catch(e){api.log('[err] FlashAPI.Preview.setImage -- can not set "base64":',e)}}(),!0}))},opts)),fn(!1,el),el=null}function _getFileDescr(file){return{id:file.id,name:file.name,matrix:file.matrix,flashId:file.flashId}}api.Flash=flash,api.newImage("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",(function(err,img){api.support.dataURI=!(1!=img.width||1!=img.height),flash.init()}))}()}(window,window.jQuery,FileAPI),function(window,jQuery,api){"use strict";var _each=api.each,_cameraQueue=[];!api.support.flash||!api.media||api.support.media&&api.html5&&!api.insecureChrome||function(){function _wrap(fn){var id=fn.wid=api.uid();return api.Flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{api.Flash._fn[fn.wid]=null,delete api.Flash._fn[fn.wid]}catch(e){}}var flash=api.Flash;api.extend(api.Flash,{patchCamera:function(){api.Camera.fallback=function(el,options,callback){var camId=api.uid();api.log("FlashAPI.Camera.publish: "+camId),flash.publish(el,camId,api.extend(options,{camera:!0,onEvent:_wrap((function _(evt){"camera"===evt.type&&(_unwrap(_),evt.error?(api.log("FlashAPI.Camera.publish.error: "+evt.error),callback(evt.error)):(api.log("FlashAPI.Camera.publish.success: "+camId),callback(null)))}))}))},_each(_cameraQueue,(function(args){api.Camera.fallback.apply(api.Camera,args)})),_cameraQueue=[],api.extend(api.Camera.prototype,{_id:function(){return this.video.id},start:function(callback){var _this=this;flash.cmd(this._id(),"camera.on",{callback:_wrap((function _(evt){_unwrap(_),evt.error?(api.log("FlashAPI.camera.on.error: "+evt.error),callback(evt.error,_this)):(api.log("FlashAPI.camera.on.success: "+_this._id()),_this._active=!0,callback(null,_this))}))})},stop:function(){this._active=!1,flash.cmd(this._id(),"camera.off")},shot:function(){api.log("FlashAPI.Camera.shot:",this._id());var shot=api.Flash.cmd(this._id(),"shot",{});return shot.type="image/png",shot.flashId=this._id(),shot.isShot=!0,new api.Camera.Shot(shot)}})}}),api.Camera.fallback=function(){_cameraQueue.push(arguments)}}()}(window,window.jQuery,FileAPI),"function"==typeof define&&define.amd&&define("FileAPI",[],(function(){return FileAPI})),function(){Ext.namespace("MODx.util.MultiUploadDialog");var maxFileSize=parseInt(MODx.config.upload_maxsize,10),permittedFileTypes=MODx.config.upload_files.toLowerCase().split(",");FileAPI.debug=!1,FileAPI.support.flash=!1,FileAPI.staticPath=MODx.config.manager_url+"assets/fileapi/";var api={humanFileSize:function(bytes,si){var thresh=si?1e3:1024;if(bytes=thresh);return bytes.toFixed(1)+" "+units[u]},getFileExtension:function(filename){var result="",parts=filename.split(".");return parts.length>1&&(result=parts.pop()),result},isFileSizePermitted:function(size){return size<=maxFileSize},formatBytes:function(size,unit){return unit=unit||FileAPI.MB,Math.round(100*(size/unit+1e-5))/100},isFileTypePermitted:function(filename,extensions){var ext=this.getFileExtension(filename);return extensions.indexOf(ext.toLowerCase())>-1}};MODx.util.MultiUploadDialog.Upload=function(config){Ext.applyIf(config,{url:MODx.config.connector_url,permitted_extensions:permittedFileTypes,base_params:{action:"Browser/File/Upload",wctx:MODx.ctx||"",source:1}}),MODx.util.MultiUploadDialog.Upload.superclass.constructor.call(this,config)},Ext.extend(MODx.util.MultiUploadDialog.Upload,Ext.Component,{errors:{},initComponent:function(){this.input_file=document.createElement("input"),this.input_file.type="file",this.input_file.name=this.input_name||Ext.id(this.el),this.input_file.hidden=!0,this.input_file.multiple=!0,this.input_file.accept="."+this.permitted_extensions.join(",."),this.input_file.addEventListener("change",this.onInputFileChange.bind(this)),this.input_file.addEventListener("click",(function(e){e.stopPropagation()})),document.getElementsByTagName("body")[0].appendChild(this.input_file)},addDropZone:function(dnd,browser){var el=dnd.getEl().dom,upload=this;el.className+=" drag-n-drop",FileAPI.event.dnd(el,(function(over){over?el.className.match(/drag-over/)||(el.className+=" drag-over"):el.className=el.className.replace(" drag-over","")}),(function(files){upload.startUpload(files,browser)}))},setBaseParams:function(params){this.base_params=Ext.apply(this.base_params,params)},show:function(){this.fireEvent("show"),this.input_file.click()},onInputFileChange:function(e){var files=FileAPI.getFiles(e);this.input_file.value="",this.startUpload(files,this.browser)},startUpload:function(files,browser){var upload=this,approved=[];if(this.fireEvent("beforeupload",files),FileAPI.each(files,(function(file){api.isFileSizePermitted(file.size)?api.isFileTypePermitted(file.name,upload.permitted_extensions)?approved.push(file):upload.addError(file.name,_("upload.notpermitted.extension",{ext:api.getFileExtension(file.name)})):upload.addError(file.name,_("upload.notpermitted.filesize",{size:api.humanFileSize(file.size),max:api.humanFileSize(maxFileSize)}))})),!approved.length)return this.showErrors(),!1;this.progress=Ext.MessageBox.progress(_("please_wait")),FileAPI.upload({url:this.url,data:Ext.apply(this.base_params,{HTTP_MODAUTH:MODx.siteId}),files:{file:approved},fileprogress:function(e,file){upload.progress&&(upload.progress.updateText(file.name),upload.progress.updateProgress(e.loaded/e.total))},filecomplete:function(err,xhr,file){if(err)401!==xhr.status&&(upload.fireEvent("uploadfailed",err,xhr,file),MODx.msg.alert(_("upload.msg.title.error"),err));else{var r=Ext.util.JSON.decode(xhr.response);r.success||upload.addError(file.name,r.message)}},complete:function(err,xhr){err?upload.fireEvent("uploadfailed",xhr):(upload.fireEvent("uploadsuccess"),upload.progress&&upload.progress.hide(),void 0!==browser&&void 0!==browser.run&&browser.run()),upload.showErrors()}})},addError:function(key,message){this.errors[key]=message},showErrors:function(){var errors="";for(var i in this.errors)this.errors.hasOwnProperty(i)&&(errors+=this.errors[i]+"
");""!=errors&&MODx.msg.alert(_("error"),errors),this.errors={}}}),MODx.util.MultiUploadDialog.BrowseButton=Ext.extend(Ext.Button,{input_name:"file",input_file:null,original_handler:null,original_scope:null,initComponent:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.initComponent.call(this),this.original_handler=this.handler||null,this.original_scope=this.scope||window,this.handler=null,this.scope=null},onRender:function(ct,position){MODx.util.MultiUploadDialog.BrowseButton.superclass.onRender.call(this,ct,position),this.createInputFile()},createInputFile:function(){var button_container=this.el.child("button").wrap();this.input_file=button_container.createChild({tag:"input",type:"file",size:1,name:this.input_name||Ext.id(this.el),style:"cursor: pointer; display: inline-block; opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%;",multiple:!0}),this.handleMouseEvents&&(this.input_file.on("mouseover",this.onMouseOver,this),this.input_file.on("mousedown",this.onMouseDown,this)),this.tooltip&&("object"==typeof this.tooltip?Ext.QuickTips.register(Ext.apply({target:this.input_file},this.tooltip)):this.input_file.dom[this.tooltipType]=this.tooltip),this.input_file.on("change",this.onInputFileChange,this),this.input_file.on("click",(function(e){e.stopPropagation()}))},detachInputFile:function(no_create){var result=this.input_file;return"object"==typeof this.tooltip?Ext.QuickTips.unregister(this.input_file):this.input_file.dom[this.tooltipType]=null,this.input_file.removeAllListeners(),this.input_file=null,result},getInputFile:function(){return this.input_file},disable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.disable.call(this),this.input_file.dom.disabled=!0},enable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.enable.call(this),this.input_file.dom.disabled=!1},destroy:function(){var input_file=this.detachInputFile(!0);input_file.remove(),input_file=null,MODx.util.MultiUploadDialog.BrowseButton.superclass.destroy.call(this)},reset:function(){var form=new Ext.Element(document.createElement("form")),buttonParent=this.input_file.parent();form.appendChild(this.input_file),form.dom.reset(),buttonParent.appendChild(this.input_file)},onInputFileChange:function(ev){this.original_handler&&this.original_handler.call(this.original_scope,this,ev),this.fireEvent("click",this,ev)}}),Ext.reg("multiupload-browse-btn",MODx.util.MultiUploadDialog.BrowseButton),MODx.util.MultiUploadDialog.FilesGrid=function(config){config=config||{},Ext.applyIf(config,{height:300,autoScroll:!0,border:!1,fields:["name","size","file","permitted","message","uploaded"],paging:!1,remoteSort:!1,viewConfig:{forceFit:!0,getRowClass:function(record,index,rowParams){return record.get("permitted")?record.get("uploaded")?"upload-success":void 0:"upload-error"}},sortInfo:{field:"name",direction:"ASC"},deferRowRender:!0,anchor:"100%",autoExpandColumn:"state",columns:[{header:_("upload.columns.file"),dataIndex:"name",sortable:!0,width:200,renderer:function(value,meta,record){var id=Ext.id();return FileAPI.Image(record.get("file")).resize(100,50,"max").get((function(err,img){err||(img=new Ext.Element(img).addClass("upload-thumb"),Ext.get(id).insertFirst(img))})),'

'+value+"

"}},{header:_("upload.columns.state"),id:"state",width:100,renderer:function(value,meta,record){if(!record.get("permitted")||record.get("uploaded"))return'

'+record.get("message")+"

";var id=Ext.id();return function(){record.progressbar=new Ext.ProgressBar({renderTo:id,value:0,text:"0 / "+record.get("size")})}.defer(25),'
'}}],getMenu:function(){return[{text:_("upload.contextmenu.remove_entry"),handler:this.removeFile}]}}),MODx.util.MultiUploadDialog.FilesGrid.superclass.constructor.call(this,config)},Ext.extend(MODx.util.MultiUploadDialog.FilesGrid,MODx.grid.LocalGrid,{removeFile:function(){var selected=this.getSelectionModel().getSelections();this.getStore().remove(selected)}}),Ext.reg("multiupload-grid-files",MODx.util.MultiUploadDialog.FilesGrid),MODx.util.MultiUploadDialog.Dialog=function(config){this.filesGridId=Ext.id(),config=config||{},Ext.applyIf(config,{permitted_extensions:permittedFileTypes,autoHeight:!0,width:600,closeAction:"hide",layout:"anchor",listeners:{show:{fn:this.onShow},hide:{fn:this.onHide}},items:[{xtype:"multiupload-grid-files",id:this.filesGridId,anchor:"100%"}],buttons:[{xtype:"multiupload-browse-btn",text:_("upload.buttons.choose"),cls:"primary-button",listeners:{click:{scope:this,fn:function(btn,ev){var files=FileAPI.getFiles(ev);this.addFiles(files),btn.reset()}}}},{xtype:"splitbutton",text:_("upload.buttons.clear"),listeners:{click:{scope:this,fn:this.clearStore}},menu:new Ext.menu.Menu({items:[{text:_("upload.clear_list.all"),listeners:{click:{scope:this,fn:this.clearStore}}},{text:_("upload.clear_list.notpermitted"),listeners:{click:{scope:this,fn:this.clearNotPermittedItems}}}]})},{xtype:"button",text:_("upload.buttons.upload"),cls:"primary-button",listeners:{click:{scope:this,fn:this.startUpload}}},{xtype:"button",text:_("upload.buttons.close"),listeners:{click:{scope:this,fn:this.hideDialog}}}]}),MODx.util.MultiUploadDialog.Dialog.superclass.constructor.call(this,config)};var originalWindowOnShow=Ext.Window.prototype.onShow,originalWindowOnHide=Ext.Window.prototype.onHide;Ext.extend(MODx.util.MultiUploadDialog.Dialog,Ext.Window,{addFiles:function(files){var store=Ext.getCmp(this.filesGridId).getStore(),dialog=this;FileAPI.each(files,(function(file){var permitted=!0,message="";api.isFileSizePermitted(file.size)||(message=_("upload.notpermitted.filesize",{size:api.humanFileSize(file.size),max:api.humanFileSize(maxFileSize)}),permitted=!1),api.isFileTypePermitted(file.name,dialog.permitted_extensions)||(message=_("upload.notpermitted.extension",{ext:api.getFileExtension(file.name)}),permitted=!1);var data={name:file.name,size:api.humanFileSize(file.size),file,permitted,message,uploaded:!1},p=new store.recordType(data);store.insert(0,p)}))},startUpload:function(){var dialog=this,files=[],params=Ext.apply(this.base_params,{HTTP_MODAUTH:MODx.siteId});Ext.getCmp(this.filesGridId).getStore().each((function(){var file=this.get("file");this.get("permitted")&&!this.get("uploaded")&&(file.record=this,files.push(file))}));FileAPI.upload({url:this.url,data:params,files:{file:files},fileprogress:function(evt,file){file.record.progressbar.updateProgress(evt.loaded/evt.total,_("upload.upload_progress",{loaded:api.humanFileSize(evt.loaded),total:file.record.get("size")}),!0)},filecomplete:function(err,xhr,file,options){if(err)401!==xhr.status&&MODx.msg.alert(_("upload.msg.title.error"),err);else{var resp=Ext.util.JSON.decode(xhr.response);resp.success?(file.record.set("uploaded",!0),file.record.set("message",_("upload.upload.success"))):(file.record.set("permitted",!1),file.record.set("message",resp.message))}},complete:function(err,xhr){dialog.fireEvent("uploadsuccess")}})},removeEntry:function(record){Ext.getCmp(this.filesGridId).getStore().remove(record)},clearStore:function(){Ext.getCmp(this.filesGridId).getStore().removeAll()},clearNotPermittedItems:function(){var store=Ext.getCmp(this.filesGridId).getStore(),notPermitted=store.query("permitted",!1);store.remove(notPermitted.getRange())},hideDialog:function(){this.hide()},onDDrag:function(ev){ev&&ev.preventDefault()},onDDrop:function(ev){ev&&ev.preventDefault();var dialog=this;FileAPI.getDropFiles(ev.browserEvent,(function(files){files.length&&dialog.addFiles(files)}))},onShow:function(){var ret=originalWindowOnShow.apply(this,arguments),store=Ext.getCmp(this.filesGridId).getStore();return store.removeAll(),this.isDDSet||(this.el.on("dragenter",this.onDDrag,this),this.el.on("dragover",this.onDDrag,this),this.el.on("dragleave",this.onDDrag,this),this.el.on("drop",this.onDDrop,this),this.isDDSet=!0),ret},onHide:function(){var ret=originalWindowOnHide.apply(this,arguments);return this.el.un("dragenter",this.onDDrag,this),this.el.un("dragover",this.onDDrag,this),this.el.un("dragleave",this.onDDrag,this),this.el.un("drop",this.onDDrop,this),this.isDDSet=!1,ret},setBaseParams:function(params){this.base_params=params,this.setTitle(_("upload.title.destination_path",{path:this.base_params.path}))}}),Ext.reg("multiupload-window-dialog",MODx.util.MultiUploadDialog.Dialog)}(),Ext.namespace("MODx.tree"),MODx.tree.Tree=function(config){var tl,root;if(config=config||{},Ext.applyIf(config,{baseParams:{},action:"getNodes",loaderConfig:{}}),config.action&&(config.baseParams.action=config.action),config.loaderConfig.dataUrl=config.url,config.loaderConfig.baseParams=config.baseParams,Ext.applyIf(config.loaderConfig,{preloadChildren:!0,clearOnLoad:!0}),this.config=config,this.config.url?((tl=new MODx.tree.TreeLoader(config.loaderConfig)).on("beforeload",(function(l,node){tl.dataUrl=this.config.url+"?action="+this.config.action+"&id="+node.attributes.id,node.attributes.type&&(tl.dataUrl+="&type="+node.attributes.type)}),this),tl.on("load",this.onLoad,this),root={nodeType:"async",text:config.root_name||config.rootName||"",qtip:config.root_qtip||config.rootQtip||"",draggable:!1,id:config.root_id||config.rootId||"root",pseudoroot:!0,attributes:{pseudoroot:!0},cls:"tree-pseudoroot-node",iconCls:config.root_iconCls||config.rootIconCls||""}):(tl=new Ext.tree.TreeLoader({preloadChildren:!0,baseAttrs:{uiProvider:MODx.tree.CheckboxNodeUI}}),root=new Ext.tree.TreeNode({text:this.config.rootName||"",draggable:!1,id:this.config.rootId||"root",children:this.config.data||[],pseudoroot:!0})),Ext.applyIf(config,{useArrows:!0,autoScroll:!0,animate:!0,enableDD:!0,enableDrop:!0,ddAppendOnly:!1,containerScroll:!0,collapsible:!0,border:!1,autoHeight:!0,rootVisible:!0,loader:tl,header:!1,hideBorders:!0,bodyBorder:!1,cls:"modx-tree",root,preventRender:!1,stateful:!0,menuConfig:{defaultAlign:"tl-b?",enableScrolling:!1,listeners:{show:function(){var node=this.activeNode;node&&node.ui.addClass("x-tree-selected")},hide:function(){var node=this.activeNode;node&&(node.isSelected()||node.ui&&node.ui.removeClass("x-tree-selected"))}}}}),!0!==config.remoteToolbar||void 0!==config.tbar&&null!==config.tbar){var tb=this.getToolbar();if(config.tbar&&config.useDefaultToolbar)for(var i=0;i150&&(w=this.config.width),el.setWidth(w),this.doLayout()}},setup:function(config){config.listeners=config.listeners||{},config.listeners.render={fn:function(){!1===config.autoExpandRoot&&config.hasOwnProperty("autoExpandRoot")||this.root.expand();var tl=this.getLoader();Ext.apply(tl,{fullMask:new Ext.LoadMask(this.getEl())}),tl.fullMask.removeMask=!1,tl.on({load:function(){this.fullMask.hide()},loadexception:function(){this.fullMask.hide()},beforeload:function(){this.fullMask.show()},scope:tl})},scope:this},MODx.tree.Tree.superclass.constructor.call(this,config),this.addEvents("afterSort","beforeSort","refresh"),this.cm=new Ext.menu.Menu(config.menuConfig),this.on("contextmenu",this._showContextMenu,this),this.on("beforenodedrop",this._handleDrop,this),this.on("nodedragover",this._handleDrop,this),this.on("nodedrop",this._handleDrag,this),this.on("click",this._saveState,this),this.on("contextmenu",this._saveState,this),this.on("click",this._handleClick,this),this.treestate_id=this.config.id||Ext.id(),this.on("load",this._initExpand,this,{single:!0}),this.on("expandnode",this._saveState,this),this.on("collapsenode",this._saveState,this),this.on("expandnode",(function(){var cnt=Ext.getCmp("modx-content");cnt&&cnt.doLayout()}),this)},_initExpand:function(){var treeState=Ext.state.Manager.get(this.treestate_id);if(Ext.isEmpty(treeState)&&this.root)this.root.expand(),this.root.firstChild&&this.config.expandFirst&&this.root.firstChild.expand();else for(var i=0;i"+node.attributes.text+"",target:this}),node,handler:function(btn,evt){evt.stopPropagation(evt),node.getOwnerTree().handleDirectCreateClick(node)},iconCls:"icon-plus-circle",renderTo:elId,listeners:{mouseover:function(button,e){button.tooltip.onTargetOver(e)},mouseout:function(button,e){button.tooltip.onTargetOut(e)}}})}},_showContextMenu:function(node,e){var m;this.cm.activeNode=node,this.cm.removeAll();var handled=!1;if(!Ext.isEmpty(node.attributes.treeHandler)||node.isRoot&&!Ext.isEmpty(node.childNodes[0].attributes.treeHandler)){var h=Ext.getCmp(node.isRoot?node.childNodes[0].attributes.treeHandler:node.attributes.treeHandler);h&&(node.isRoot&&(node.attributes.type="root"),m=h.getMenu(this,node,e),handled=!0)}handled||(this.getMenu?m=this.getMenu(node,e):node.attributes.menu&&node.attributes.menu.items&&(m=node.attributes.menu.items)),m&&m.length>0&&(this.addContextMenuItem(m),this.cm.showAt(e.xy)),e.preventDefault(),e.stopEvent()},hasNode:function(t,n){return t.findChild("id",n.id)||!0===t.leaf&&t.parentNode.findChild("id",n.id)},refresh:function(func,scope,args){var treeState=Ext.state.Manager.get(this.treestate_id);return this.root.reload(),this.fireEvent("refresh",{}),void 0===treeState?this.root.expand():Ext.isArray(treeState)&&Ext.each(treeState,(function(path,idx){this.expandPath(path)}),this),func&&(scope=scope||this,args=args||[],this.root.on("load",(function(){Ext.callback(func,scope,args)}),scope)),!0},removeChildren:function(node){for(;node.firstChild;){var c=node.firstChild;node.removeChild(c),c.destroy()}},loadRemoteData:function(data){for(var c in this.removeChildren(this.getRootNode()),data)"object"==typeof data[c]&&this.getRootNode().appendChild(data[c])},reloadNode:function(n){this.getLoader().load(n),n.expand()},remove:function(text,substr,split){if(this.destroying)return MODx.tree.Tree.superclass.remove.apply(this,arguments);var node=this.cm.activeNode,id=this._extractId(node.id,substr,split),p={action:this.config.removeAction||"remove"},pk=this.config.primaryKey||"id";p[pk]=id,MODx.msg.confirm({title:this.config.removeTitle||_("warning"),text:_(text),url:this.config.url,params:p,listeners:{success:{fn:this.refresh,scope:this}}})},_extractId:function(id,substr,split){return split=split||!1,!1!==(substr=substr||!1)&&(id=node.id.substr(substr)),!1!==split&&(id=(id=node.id.split("_"))[split]),id},expandNodes:function(){this.root&&(this.root.expand(),this.root.expandChildNodes(!0))},collapseNodes:function(){this.root&&(this.root.collapseChildNodes(!0),this.root.collapse())},_saveState:function(n){if(!this.stateful)return!0;var i,s=Ext.state.Manager.get(this.treestate_id),p=n.getPath();if(s=Ext.isObject(s)||Ext.isArray(s)?s.slice():[s],!Ext.isEmpty(p)&&null!=p){if(n.expanded){if(Ext.isString(p)&&-1===s.indexOf(p)){var sr,f=!1;for(i=0;is[i].length&&(f=!0):s.splice(i,1);f||s.push(p)}}else for(s=s.remove(p),i=0;i{let node=this.getNodeById(encodeURIComponent(dir));node||(node=this.getRootNode()),node.select(),this.cm.activeNode=node}))}}),Ext.reg("modx-tree",MODx.tree.Tree),window.BTNS=[],MODx.tree.TreeLoader=function(config){(config=config||{}).id=config.id||Ext.id(),Ext.applyIf(config,{}),MODx.tree.TreeLoader.superclass.constructor.call(this,config)},Ext.extend(MODx.tree.TreeLoader,Ext.tree.TreeLoader,{processResponse:function(response,node,callback,scope){var json=response.responseText;if("string"==typeof json&&(json=Ext.decode(json)),void 0!==json.results?response.responseText=Ext.encode(json.results):void 0!==json.object&&(response.responseText=Ext.encode(json.object)),void 0!==json.success&&void 0!==json.message&&0==json.success){if("object"==typeof json.message){var msg=[];for(var i in json.message)json.message.hasOwnProperty(i)&&msg.push(json.message[i]);json.message=msg.join("\n")}MODx.msg.alert(_("alert"),json.message)}Ext.tree.TreeLoader.prototype.processResponse.call(this,response,node,callback,scope)}}),Ext.reg("modx-tree-treeloader",MODx.tree.TreeLoader),Ext.dd.DragDropMgr.getZIndex=function(element){var z,body=document.body,zIndex=-1,overTargetEl=element;for(element=Ext.getDom(element);element!==body;){if(!element){this._remove(overTargetEl);break}isNaN(z=Number(Ext.fly(element).getStyle("zIndex")))||(zIndex=z),element=element.parentNode}return zIndex},MODx.TreeDrop=function(config){config=config||{},Ext.applyIf(config,{id:"modx-treedrop",ddGroup:"modx-treedrop-dd"}),MODx.TreeDrop.superclass.constructor.call(this,config),this.config=config,this.setup()},Ext.extend(MODx.TreeDrop,Ext.Component,{setup:function(){var ddTarget=this.config.target,ddTargetEl=this.config.targetEl,cfg=this.config;this.targetEl=new Ext.dd.DropTarget(this.config.targetEl,{ddGroup:this.config.ddGroup,notifyEnter:function(ddSource,e,data){if(ddTarget.getEl){var el=ddTarget.getEl();el&&el.isVisible()&&(el.frame(),el.focus())}},notifyDrop:function(ddSource,e,data){if(!data.node||!data.node.attributes||!data.node.attributes.type)return!1;if("MODX\\Revolution\\modResource"!=data.node.attributes.type&&1!=data.node.attributes.leaf)return!1;var v="",win=!1;switch(data.node.attributes.type){case"MODX\\Revolution\\modResource":v="[[~"+data.node.attributes.pk+"]]";break;case"snippet":case"chunk":case"tv":win=!0;break;case"file":v=data.node.attributes.url;break;default:var dh=Ext.getCmp(data.node.attributes.type+"-drop-handler");return!!dh&&dh.handle(data,{ddTargetEl,cfg,iframe:cfg.iframe,iframeEl:cfg.iframeEl,onInsert:cfg.onInsert,panel:cfg.panel})}if(win)MODx.loadInsertElement({pk:data.node.attributes.pk,classKey:data.node.attributes.classKey,name:data.node.attributes.name,output:v,ddTargetEl,cfg,iframe:cfg.iframe,iframeEl:cfg.iframeEl,onInsert:cfg.onInsert,panel:cfg.panel});else if(cfg.iframe)MODx.insertForRTE(v,cfg);else{var el=Ext.get(ddTargetEl);if("modx-static-content"==el.dom.id&&(v=v.substring(1),Ext.getCmp(el.dom.id).setValue("")),"modx-symlink-content"==el.dom.id||"modx-weblink-content"==el.dom.id)Ext.getCmp(el.dom.id).setValue(""),void 0!==typeof data.node.attributes.pk&&void 0!==data.node.attributes.pk?MODx.insertAtCursor(ddTargetEl,data.node.attributes.pk,cfg.onInsert):MODx.insertAtCursor(ddTargetEl,v,cfg.onInsert);else if("modx-resource-parent"==el.dom.id){v=data.node.attributes.pk;var p,pf=Ext.getCmp("modx-resource-parent");if(v==pf.currentid)return MODx.msg.alert("",_("resource_err_own_parent")),!1;pf.setValue(v),Ext.getCmp(pf.parentcmp).setValue(v),(p=Ext.getCmp(pf.formpanel))&&p.markDirty()}else MODx.insertAtCursor(ddTargetEl,v,cfg.onInsert);if(cfg.panel)(p=Ext.getCmp(cfg.panel))&&p.markDirty()}return!0}}),this.targetEl.addToGroup("modx-treedrop-elements-dd"),this.targetEl.addToGroup("modx-treedrop-sources-dd")}}),Ext.reg("modx-treedrop",MODx.TreeDrop),MODx.loadInsertElement=function(r){MODx.InsertElementWindow&&(MODx.InsertElementWindow.hide(),MODx.InsertElementWindow.destroy()),MODx.InsertElementWindow=MODx.load({xtype:"modx-window-insert-element",record:r,listeners:{success:{fn:function(){},scope:this},hide:{fn:function(){this.destroy()}}}}),MODx.InsertElementWindow.setValues(r),MODx.InsertElementWindow.show()},MODx.insertAtCursor=function(myField,myValue,h){if(!Ext.isEmpty(h)){var z=h(myValue);null!=z&&(myValue=z)}if(myField.blur(),document.selection)sel=document.selection.createRange(),sel.text=myValue;else if(myField.selectionStart||"0"==myField.selectionStart){var startPos=myField.selectionStart,endPos=myField.selectionEnd;myField.value=myField.value.substring(0,startPos)+myValue+myField.value.substring(endPos,myField.value.length),myField.selectionStart=startPos+myValue.length,myField.selectionEnd=myField.selectionStart}else myField.value+=myValue;myField.focus()},MODx.insertForRTE=function(v,cfg){var fn=cfg.onInsert||!1;if(fn)fn(v,cfg);else{if("object"==typeof cfg.iframeEl)var doc=cfg.iframeEl;else doc=window.frames[0].document.getElementById(cfg.iframeEl);doc.value?doc.value=doc.value+v:doc.innerHTML=doc.innerHTML+v}},MODx.insertIntoContent=function(v,opt){opt.iframe?MODx.insertForRTE(v,opt.cfg):MODx.insertAtCursor(opt.ddTargetEl,v)},MODx.window.InsertElement=function(config){config=config||{};var resourceCmp=Ext.get("modx-resource-id"),resourceId=null!==resourceCmp?resourceCmp.getValue():0;Ext.applyIf(config,{title:_("select_el_opts"),id:"modx-window-insert-element",width:522,labelAlign:"left",labelWidth:160,url:MODx.config.connector_url,action:"Element/Template/Create",fields:[{xtype:"hidden",name:"pk",id:"modx-dise-pk"},{xtype:"hidden",name:"classKey",id:"modx-dise-classkey"},{xtype:"xcheckbox",fieldLabel:_("cached"),name:"cached",id:"modx-dise-cached",inputValue:1,checked:!0},{xtype:"modx-combo-property-set",fieldLabel:_("property_set"),name:"propertyset",id:"modx-dise-propset",width:300,baseParams:{action:"Element/PropertySet/GetList",showAssociated:!0,elementId:config.record.pk,elementType:config.record.classKey},listeners:{render:{fn:function(){Ext.getCmp("modx-dise-propset").getStore().load(),Ext.getCmp("modx-dise-propset").value="0"},scope:this},select:{fn:this.changePropertySet,scope:this}}},{id:"modx-dise-proplist",autoLoad:{url:MODx.config.connector_url,params:{action:"Element/GetInsertProperties",classKey:config.record.classKey,pk:config.record.pk,resourceId,propertySet:0},scripts:!0,callback:this.onPropFormLoad,scope:this},style:"display: none;"},{xtype:"fieldset",title:_("properties"),height:.6*Ext.getBody().getViewSize().height,collapsible:!0,autoScroll:!0,items:[{html:'
',id:"modx-iprops-container"}]}],modps:[]}),MODx.window.InsertElement.superclass.constructor.call(this,config),this.on("show",(function(){this.center(),this.mask=new Ext.LoadMask(Ext.get("modx-iprops-container"),{msg:_("loading")}),this.mask.show()}),this)},Ext.extend(MODx.window.InsertElement,MODx.Window,{changePropertySet:function(cb){var fp=Ext.getCmp("modx-iprops-fp");fp&&fp.destroy();var resourceCmp=Ext.get("modx-resource-id"),resourceId=null!==resourceCmp?resourceCmp.getValue():0;Ext.getCmp("modx-dise-proplist").getUpdater().update({url:MODx.config.connector_url,params:{action:"Element/GetInsertProperties",classKey:this.config.record.classKey,pk:this.config.record.pk,resourceId,propertySet:cb.getValue()},scripts:!0,callback:this.onPropFormLoad,scope:this}),this.modps=[],this.mask.show()},createStore:function(data){return new Ext.data.SimpleStore({fields:["v","d"],data})},onPropFormLoad:function(el,s,r){this.mask.hide();var vs=Ext.decode(r.responseText);if(!vs||vs.length<=0)return!1;for(var i=0;i]+)>)/gi,"")))}var menuindexField=Ext.getCmp("modx-resource-menuindex");menuindexField&&void 0!==o.result.object.menuindex&&menuindexField.setValue(o.result.object.menuindex);var isfolderFieldCmb=Ext.getCmp("modx-resource-isfolder");isfolderFieldCmb&&"boolean"==typeof o.result.object.isfolder&&isfolderFieldCmb.setValue(o.result.object.isfolder)}},_handleDrop:function(e){var dropNode=e.dropNode,targetParent=e.target;if(null!==targetParent.findChild("id",dropNode.attributes.id))return!1;if("modContext"==dropNode.attributes.type&&(targetParent.getDepth()>1||targetParent.attributes.id==targetParent.attributes.pk+"_0"&&"append"==e.point))return!1;if("modContext"!==dropNode.attributes.type&&targetParent.getDepth()<=1&&"append"!==e.point)return!1;if(null==MODx.config.resource_classes_drop[targetParent.attributes.classKey]){if(targetParent.attributes.hide_children_in_tree)return!1}else if(0==MODx.config.resource_classes_drop[targetParent.attributes.classKey])return!1;return"root"!=dropNode.attributes.text&&""!==dropNode.attributes.text&&"root"!=targetParent.attributes.text&&""!==targetParent.attributes.text},getContextSettingForNode:function(node,ctx,setting,dv){var val=dv||null;if("modContext"!=node.attributes.type){var cn=node.getOwnerTree().getRootNode().findChild("ctx",ctx,!1);cn&&(val=cn.attributes.settings[setting])}else val=node.attributes.settings[setting];return val},quickCreate:function(itm,e,cls,ctx,p){var r={class_key:cls=cls||"MODX\\Revolution\\modDocument",context_key:ctx||"web",parent:p||0,template:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"default_template",MODx.config.default_template)),richtext:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"richtext_default",MODx.config.richtext_default)),hidemenu:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"hidemenu_default",MODx.config.hidemenu_default)),searchable:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"search_default",MODx.config.search_default)),cacheable:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"cache_default",MODx.config.cache_default)),published:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"publish_default",MODx.config.publish_default)),content_type:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"default_content_type",MODx.config.default_content_type))};if("modContext"!=this.cm.activeNode.attributes.type){var cn=this.cm.activeNode.getOwnerTree().getRootNode().findChild("ctx",ctx,!1);cn&&(r.template=cn.attributes.settings.default_template)}else r.template=this.cm.activeNode.attributes.settings.default_template;var w=MODx.load({xtype:"modx-window-quick-create-modResource",record:r,listeners:{success:{fn:function(){this.refreshNode(this.cm.activeNode.id,this.cm.activeNode.childNodes.length>0)},scope:this},hide:{fn:function(){this.destroy()}},show:{fn:function(){this.center()}}}});w.setValues(r),w.show(e.target,(function(){Ext.isSafari?w.setPosition(null,30):w.center()}),this)},quickUpdate:function(itm,e,cls){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Resource/Get",id:this.cm.activeNode.attributes.pk,skipFormatDates:!0},listeners:{success:{fn:function(r){var pr=r.object;pr.class_key=cls;var w=MODx.load({xtype:"modx-window-quick-update-modResource",record:pr,listeners:{success:{fn:function(r){this.refreshNode(this.cm.activeNode.id);var newTitle=''+r.f.findField("pagetitle").getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+Ext.util.Format.htmlEncode(w.record.pagetitle)+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target,(function(){Ext.isSafari?w.setPosition(null,30):w.center()}),this)},scope:this}}})},_getModContextMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+" ("+a.ctx+")",handler:function(){return!1},header:!0}),m.push("-"),m.push({text:_("refresh_context"),handler:function(){this.refreshNode(this.cm.activeNode.id,!0)}}),ui.hasClass("pedit")&&m.push({text:_("edit_context"),handler:function(){var at=this.cm.activeNode.attributes;this.loadAction("a=context/update&key="+at.pk)}}),ui.hasClass("pnew")&&m.push({text:_("duplicate_context"),handler:this.duplicateContext}),ui.hasClass("pdelete")&&(m.push("-"),m.push({text:_("remove_context"),handler:this.removeContext})),ui.hasClass("pnewdoc")&&(m.push("-"),this._getCreateMenus(m,"0",ui)),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),m},overviewResource:function(){this.loadAction("a=resource/data")},quickUpdateResource:function(itm,e){this.quickUpdate(itm,e,itm.classKey)},editResource:function(){this.loadAction("a=resource/update")},_getModResourceMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pview")&&m.push({text:_("resource_overview"),handler:this.overviewResource}),ui.hasClass("pedit")&&m.push({text:_("resource_edit"),handler:this.editResource}),ui.hasClass("pqupdate")&&m.push({text:_("quick_update_resource"),classKey:a.classKey,handler:this.quickUpdateResource}),ui.hasClass("pduplicate")&&m.push({text:_("resource_duplicate"),handler:this.duplicateResource}),m.push({text:_("resource_refresh"),handler:this.refreshResource,scope:this}),ui.hasClass("pnew")&&(m.push("-"),this._getCreateMenus(m,null,ui)),ui.hasClass("psave")&&(m.push("-"),ui.hasClass("ppublish")&&ui.hasClass("unpublished")?m.push({text:_("resource_publish"),handler:this.publishDocument}):ui.hasClass("punpublish")&&m.push({text:_("resource_unpublish"),handler:this.unpublishDocument}),ui.hasClass("pundelete")&&ui.hasClass("deleted")?m.push({text:_("resource_undelete"),handler:this.undeleteDocument}):ui.hasClass("pdelete")&&!ui.hasClass("deleted")&&m.push({text:_("resource_delete"),handler:this.deleteDocument})),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),ui.hasClass("pview")&&""!=a.preview_url&&(m.push("-"),m.push({text:_("resource_view"),handler:this.preview})),m},refreshResource:function(){this.refreshNode(this.cm.activeNode.id)},createResourceHere:function(itm){var at=this.cm.activeNode.attributes,parent=itm.usePk?itm.usePk:at.pk;parseInt(MODx.config.enable_template_picker_in_tree)?MODx.createResource({class_key:itm.classKey,parent,context_key:at.ctx||MODx.config.default_context}):this.loadAction("a=resource/create&class_key="+itm.classKey+"&parent="+parent+(at.ctx?"&context_key="+at.ctx:""))},createResource:function(itm,e){var at=this.cm.activeNode.attributes,p=itm.usePk?itm.usePk:at.pk;this.quickCreate(itm,e,itm.classKey,at.ctx,p)},_getCreateMenus:function(m,pk,ui){var types=MODx.config.resource_classes,o=this.fireEvent("loadCreateMenus",types);Ext.isObject(o)&&Ext.apply(types,o);var coreTypes=["MODXRevolutionmodDocument","MODXRevolutionmodWebLink","MODXRevolutionmodSymLink","MODXRevolutionmodStaticResource"],ct=[],qct=[];for(var k in types)(-1==coreTypes.indexOf(k)||ui.hasClass("pnew_"+k))&&(ct.push({text:types[k].text_create_here,classKey:k,usePk:pk||!1,handler:this.createResourceHere,scope:this}),ui&&ui.hasClass("pqcreate")&&qct.push({text:types[k].text_create,classKey:k,handler:this.createResource,scope:this}));return m.push({text:_("create"),handler:function(){return!1},menu:{items:ct}}),ui&&ui.hasClass("pqcreate")&&m.push({text:_("quick_create"),handler:function(){return!1},menu:{items:qct}}),m},_handleDrag:function(dropEvent){var encNodes=Ext.encode(function simplifyNodes(node){for(var resultNode={},kids=node.childNodes,len=kids.length,i=0;i[[*pagetitle]]
"+_("resource_pagetitle_help"),anchor:"100%",allowBlank:!1},{xtype:"textfield",name:"longtitle",id:"modx-"+this.ident+"-longtitle",fieldLabel:_("resource_longtitle"),description:"[[*longtitle]]
"+_("resource_longtitle_help"),anchor:"100%"},{xtype:"textarea",name:"description",id:"modx-"+this.ident+"-description",fieldLabel:_("resource_description"),description:"[[*description]]
"+_("resource_description_help"),anchor:"100%",grow:!1,height:50},{xtype:"textarea",name:"introtext",id:"modx-"+this.ident+"-introtext",fieldLabel:_("resource_summary"),description:"[[*introtext]]
"+_("resource_summary_help"),anchor:"100%",height:50}]},{columnWidth:.4,border:!1,layout:"form",items:[{xtype:"modx-combo-template",name:"template",id:"modx-"+this.ident+"-template",fieldLabel:_("resource_template"),description:"[[*template]]
"+_("resource_template_help"),editable:!1,anchor:"100%",baseParams:{action:"Element/Template/GetList",combo:!0},value:MODx.config.default_template},{xtype:"textfield",name:"alias",id:"modx-"+this.ident+"-alias",fieldLabel:_("resource_alias"),description:"[[*alias]]
"+_("resource_alias_help"),anchor:"100%"},{xtype:"textfield",name:"menutitle",id:"modx-"+this.ident+"-menutitle",fieldLabel:_("resource_menutitle"),description:"[[*menutitle]]
"+_("resource_menutitle_help"),anchor:"100%"},{xtype:"textfield",fieldLabel:_("resource_link_attributes"),description:"[[*link_attributes]]
"+_("resource_link_attributes_help"),name:"link_attributes",id:"modx-"+this.ident+"-attributes",maxLength:255,anchor:"100%"},{xtype:"xcheckbox",boxLabel:_("resource_hide_from_menus"),description:"[[*hidemenu]]
"+_("resource_hide_from_menus_help"),hideLabel:!0,name:"hidemenu",id:"modx-"+this.ident+"-hidemenu",inputValue:1,checked:"1"==MODx.config.hidemenu_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_published"),description:"[[*published]]
"+_("resource_published_help"),hideLabel:!0,name:"published",id:"modx-"+this.ident+"-published",inputValue:1,checked:"1"==MODx.config.publish_default?1:0},{xtype:"xcheckbox",boxLabel:_("deleted"),description:"[[*deleted]]
"+_("resource_delete"),hideLabel:!0,name:"deleted",id:"modx-"+this.ident+"-deleted",inputValue:1,checked:"1"==MODx.config.deleted_default?1:0}]}]},MODx.getQRContentField(this.ident,config.record.class_key)]},{id:"modx-"+this.ident+"-settings",title:_("settings"),layout:"form",cls:"modx-panel",autoHeight:!0,forceLayout:!0,labelWidth:100,defaults:{autoHeight:!0,border:!1},items:MODx.getQRSettings(this.ident,config.record)}]}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateResource,MODx.Window),Ext.reg("modx-window-quick-create-modResource",MODx.window.QuickCreateResource),MODx.window.QuickUpdateResource=function(config){config=config||{},this.ident=config.ident||"qur"+Ext.id(),Ext.applyIf(config,{title:_("quick_update_resource"),id:this.ident,action:"Resource/Update",buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateResource,MODx.window.QuickCreateResource),Ext.reg("modx-window-quick-update-modResource",MODx.window.QuickUpdateResource),MODx.getQRContentField=function(id,cls){id=id||"qur",cls=cls||"MODX\\Revolution\\modDocument";Ext.getBody().getViewSize();var o={};switch(cls){case"MODX\\Revolution\\modSymLink":o={xtype:"textfield",fieldLabel:_("symlink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255};break;case"MODX\\Revolution\\modWebLink":o={xtype:"textfield",fieldLabel:_("weblink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:""};break;case"MODX\\Revolution\\modStaticResource":o={xtype:"modx-combo-browser",browserEl:"modx-browser",prependPath:!1,prependUrl:!1,fieldLabel:_("static_resource"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:"",listeners:{select:{fn:function(data){"/"==data.url.substring(0,1)&&Ext.getCmp("modx-"+id+"-content").setValue(data.url.substring(1))},scope:this}}};break;default:o={xtype:"textarea",name:"content",id:"modx-"+id+"-content",fieldLabel:_("content"),labelSeparator:"",anchor:"100%",style:"min-height: 200px",grow:!0}}return o},MODx.getQRSettings=function(id,va){return[{layout:"column",border:!1,anchor:"100%",defaults:{labelSeparator:"",labelAlign:"top",border:!1,layout:"form"},items:[{columnWidth:.5,items:[{xtype:"hidden",name:"parent",id:"modx-"+(id=id||"qur")+"-parent",value:va.parent},{xtype:"hidden",name:"context_key",id:"modx-"+id+"-context_key",value:va.context_key},{xtype:"hidden",name:"class_key",id:"modx-"+id+"-class_key",value:va.class_key},{xtype:"hidden",name:"publishedon",id:"modx-"+id+"-publishedon",value:va.publishedon},{xtype:"modx-field-parent-change",fieldLabel:_("resource_parent"),description:"[[*parent]]
"+_("resource_parent_help"),name:"parent-cmb",id:"modx-"+id+"-parent-change",value:va.parent||0,anchor:"100%",parentcmp:"modx-"+id+"-parent",contextcmp:"modx-"+id+"-context_key",currentid:va.id||0},{xtype:"modx-combo-class-derivatives",fieldLabel:_("resource_type"),description:"[[*class_key]]
",name:"class_key",hiddenName:"class_key",id:"modx-"+id+"-class-key",anchor:"100%",value:null!=va.class_key?va.class_key:"MODX\\Revolution\\modDocument"},{xtype:"modx-combo-content-type",fieldLabel:_("resource_content_type"),description:"[[*content_type]]
"+_("resource_content_type_help"),name:"content_type",hiddenName:"content_type",id:"modx-"+id+"-type",anchor:"100%",value:null!=va.content_type?va.content_type:MODx.config.default_content_type||1},{xtype:"modx-combo-content-disposition",fieldLabel:_("resource_contentdispo"),description:"[[*content_dispo]]
"+_("resource_contentdispo_help"),name:"content_dispo",hiddenName:"content_dispo",id:"modx-"+id+"-dispo",anchor:"100%",value:null!=va.content_dispo?va.content_dispo:0},{xtype:"numberfield",fieldLabel:_("resource_menuindex"),description:"[[*menuindex]]
"+_("resource_menuindex_help"),name:"menuindex",id:"modx-"+id+"-menuindex",width:75,value:va.menuindex||0}]},{columnWidth:.5,items:[{xtype:"xdatetime",fieldLabel:_("resource_publishedon"),description:"[[*publishedon]]
"+_("resource_publishedon_help"),name:"publishedon",id:"modx-"+id+"-publishedon",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.publishedon},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_publishdate"),description:"[[*pub_date]]
"+_("resource_publishdate_help"),name:"pub_date",id:"modx-"+id+"-pub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.pub_date},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_unpublishdate"),description:"[[*unpub_date]]
"+_("resource_unpublishdate_help"),name:"unpub_date",id:"modx-"+id+"-unpub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.unpub_date},{xtype:"xcheckbox",boxLabel:_("resource_folder"),description:_("resource_folder_help"),hideLabel:!0,name:"isfolder",id:"modx-"+id+"-isfolder",inputValue:1,checked:null!=va.isfolder&&va.isfolder},{xtype:"xcheckbox",boxLabel:_("resource_show_in_tree"),description:_("resource_show_in_tree_help"),hideLabel:!0,name:"show_in_tree",id:"modx-"+id+"-show_in_tree",inputValue:1,checked:null!=va.show_in_tree?va.show_in_tree:1},{xtype:"xcheckbox",boxLabel:_("resource_hide_children_in_tree"),description:_("resource_hide_children_in_tree_help"),hideLabel:!0,name:"hide_children_in_tree",id:"modx-"+id+"-hide_children_in_tree",inputValue:1,checked:null!=va.hide_children_in_tree&&va.hide_children_in_tree},{xtype:"xcheckbox",boxLabel:_("resource_alias_visible"),description:_("resource_alias_visible_help"),hideLabel:!0,name:"alias_visible",id:"modx-"+id+"-alias-visible",inputValue:1,checked:null!=va.alias_visible?va.alias_visible:1},{xtype:"xcheckbox",boxLabel:_("resource_uri_override"),description:_("resource_uri_override_help"),hideLabel:!0,name:"uri_override",id:"modx-"+id+"-uri-override",value:1,checked:!!parseInt(va.uri_override),listeners:{check:{fn:MODx.handleFreezeUri}}},{xtype:"textfield",fieldLabel:_("resource_uri"),description:"[[*uri]]
"+_("resource_uri_help"),name:"uri",id:"modx-"+id+"-uri",maxLength:255,anchor:"100%",value:va.uri||"",hidden:!va.uri_override},{xtype:"xcheckbox",boxLabel:_("resource_richtext"),description:_("resource_richtext_help"),hideLabel:!0,name:"richtext",id:"modx-"+id+"-richtext",inputValue:1,checked:void 0!==va.richtext?va.richtext?1:0:"1"==MODx.config.richtext_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_searchable"),description:_("resource_searchable_help"),hideLabel:!0,name:"searchable",id:"modx-"+id+"-searchable",inputValue:1,checked:void 0!==va.searchable?va.searchable?1:0:"1"==MODx.config.search_default?1:0,listeners:{check:{fn:MODx.handleQUCB}}},{xtype:"xcheckbox",boxLabel:_("resource_cacheable"),description:_("resource_cacheable_help"),hideLabel:!0,name:"cacheable",id:"modx-"+id+"-cacheable",inputValue:1,checked:void 0!==va.cacheable?va.cacheable?1:0:"1"==MODx.config.cache_default?1:0},{xtype:"xcheckbox",name:"clearCache",id:"modx-"+id+"-clearcache",boxLabel:_("resource_syncsite"),description:_("resource_syncsite_help"),hideLabel:!0,inputValue:1,checked:void 0!==va.clearCache?va.clearCache?1:0:"1"==MODx.config.syncsite_default?1:0}]}]}]},MODx.handleQUCB=function(cb){var h=Ext.getCmp(cb.id+"-hd");cb.checked&&h?(cb.setValue(1),h.setValue(1)):h&&(cb.setValue(0),h.setValue(0))},MODx.handleFreezeUri=function(cb){var uri=Ext.getCmp(cb.id.replace("-override",""));if(!uri)return!1;cb.checked?uri.show():uri.hide()},Ext.override(Ext.tree.AsyncTreeNode,{listeners:{click:{fn:function(){return console.log("Clicked me!",arguments),!1},scope:this}}}),MODx.window.CreateResource=function(config={}){this.ident=config.ident||`tplpick${Ext.id()}`;const id=this.ident,requireAlias=parseInt(MODx.config.friendly_urls,10)&&!parseInt(MODx.config.automatic_alias,10),aliasLength=parseInt(MODx.config.friendly_alias_max_length,10)||0,resourceDetail=[{columnWidth:requireAlias?.33:.5,items:[{xtype:"modx-combo-class-derivatives",fieldLabel:_("resource_type"),description:MODx.expandHelp?"":_("resource_type_help"),name:"class_key",hiddenName:"class_key",anchor:"100%",allowBlank:!1,value:config.record.class_key||"MODX\\Revolution\\modDocument"}]},{columnWidth:requireAlias?.33:.5,items:[{xtype:"modx-field-parent-change",fieldLabel:_("resource_parent"),description:`[[*parent]]
${_("resource_parent_help")}`,name:"parent-cmb",id:`modx-${id}-parent-change`,value:config.record.parent||0,anchor:"100%",parentcmp:"modx-template-picker-parent-id",contextcmp:"modx-template-picker-parent-context",currentid:id}]}];requireAlias&&resourceDetail.push({columnWidth:.34,defaults:{anchor:"100%",enableKeyEvents:!0,validationEvent:"change",validateOnBlur:!1,msgTarget:"under"},items:[{xtype:"textfield",fieldLabel:_("resource_alias"),name:"alias",allowBlank:!1,maxLength:aliasLength>191||0===aliasLength?191:aliasLength,value:config.record.alias||"",listeners:{afterrender:function(){this.clearInvalid()}}}]}),Ext.applyIf(config,{autoHeight:!0,title:_("document_new"),url:MODx.config.connector_url,baseParams:{action:"Resource/Create"},width:600,fields:[{xtype:"textfield",fieldLabel:_("resource_pagetitle"),description:MODx.expandHelp?"":_("resource_pagetitle_help"),name:"pagetitle",maxLength:191,anchor:"100%",allowBlank:!1,validationEvent:"change",validateOnBlur:!1,value:config.record.pagetitle||"",listeners:{afterrender:function(){this.clearInvalid()}}},{xtype:"hidden",name:"parent",id:"modx-template-picker-parent-id"},{xtype:"hidden",name:"context_key",id:"modx-template-picker-parent-context"},{layout:"column",defaults:{layout:"form",labelSeparator:""},items:resourceDetail},{xtype:"modx-panel-template-picker",fieldLabel:_("resource_template"),description:MODx.expandHelp?"":_("resource_template_help"),name:"template",value:config.record.template||MODx.config.default_template}]}),MODx.window.CreateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.CreateResource,MODx.Window),Ext.reg("modx-window-create-resource",MODx.window.CreateResource),MODx.panel.TemplatePicker=function(config){config=config||{},Ext.applyIf(config,{xtype:"panel",layout:"form",labelSeparator:"",items:[{layout:"column",defaults:{layout:"form",labelSeparator:""},items:[{columnWidth:.4,items:[{xtype:"modx-combo-template-picker",id:"modx-resource-template-picker",name:"template",value:config.record||MODx.config.default_template,listeners:{select:{fn:this.setPreview,scope:this}}}]},{columnWidth:.6,items:[{xtype:"modx-panel-template-preview",id:"modx-resource-template-preview"}]}]}]}),MODx.panel.TemplatePicker.superclass.constructor.call(this,config)},Ext.extend(MODx.panel.TemplatePicker,Ext.Panel,{setPreview:function(record){Ext.getCmp("modx-resource-template-preview").setPreview(record)}}),Ext.reg("modx-panel-template-picker",MODx.panel.TemplatePicker),MODx.combo.TemplatePicker=function(config){config=config||{},Ext.applyIf(config,{cls:"x-form-template-picker",layout:"form",defaults:{hideLabel:!0},items:[{xtype:"textfield",itemCls:"x-form-template-picker-search",cls:"x-form-field-search",anchor:"100%",emptyText:_("search"),listeners:{keyup:{fn:this.filterItems,scope:this}},enableKeyEvents:!0}],store:new Ext.data.JsonStore({url:MODx.config.connector_url,baseParams:{action:"Element/Template/GetList",combo:!0,limit:0},root:"results",totalProperty:"total",fields:["id","templatename","description","category_name","preview"],errorReader:MODx.util.JSONReader,autoDestroy:!0,autoLoad:!0,listeners:{load:{fn:this.loadItems,scope:this},loadexception:{fn:function(o,trans,resp){var status=_("code")+": "+resp.status+" "+resp.statusText+"
";MODx.msg.alert(_("error"),status+resp.responseText)}}}})}),MODx.combo.TemplatePicker.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.TemplatePicker,Ext.Panel,{loadItems:function(store,data){var value=this.value,items=[],category="";Ext.each(data,(function(record){category!==record.data.category_name&&(Ext.isEmpty(record.data.category_name)||items.push({hideLabel:!0,boxLabel:record.data.category_name,disabled:!0,itemCls:"x-form-template-picker-category"})),items.push({hideLabel:!0,boxLabel:record.data.templatename,name:this.name||"template",inputValue:record.data.id,itemCls:"x-form-template-picker-item",record,checked:record.data.id==value}),category=record.data.category_name}),this),this.add({xtype:"radiogroup",id:"modx-template-picker-templates",itemCls:"x-form-template-picker-templates",columns:1,items,listeners:{render:{fn:function(cmp){const record=cmp.getValue()?.record;record&&this.fireEvent("select",record)},scope:this},change:{fn:function(cmp,checked){checked.record&&this.fireEvent("select",checked.record)},scope:this}}}),this.doLayout()},filterItems:function(tf){void 0!==(panel=Ext.getCmp("modx-template-picker-templates"))&&panel.items.each((function(object){if(!Ext.isEmpty(tf.getValue())&&object.record){var regex=new RegExp(tf.getValue(),"i");-1===object.record.data.templatename.search(regex)?object.hide():object.show()}else object.show()}))}}),Ext.reg("modx-combo-template-picker",MODx.combo.TemplatePicker),MODx.panel.TemplatePreview=function(config){config=config||{},Ext.applyIf(config,{cls:"x-form-template-preview"}),MODx.panel.TemplatePreview.superclass.constructor.call(this,config)},Ext.extend(MODx.panel.TemplatePreview,Ext.Panel,{setPreview:function(record){if(this.removeAll(),""==record.data.preview||void 0===record.data.preview){this.addClass("x-form-template-preview-empty");var html=""}else{this.removeClass("x-form-template-preview-empty");html=''+record.data.templatename+''}this.add({xtype:"box",autoEl:{tag:"div",cls:"x-form-template-preview-image",html},hidden:""==record.data.image},{xtype:"box",autoEl:{tag:"div",cls:"x-form-template-preview-desc",html:"

"+record.data.description+"

"},hidden:""==record.data.description}),this.doLayout()}}),Ext.reg("modx-panel-template-preview",MODx.panel.TemplatePreview),MODx.tree.Element=function(config){config=config||{},Ext.applyIf(config,{rootVisible:!1,enableDD:!Ext.isEmpty(MODx.config.enable_dragdrop),ddGroup:"modx-treedrop-elements-dd",title:"",url:MODx.config.connector_url,action:"Element/GetNodes",sortAction:"Element/Sort",baseParams:{currentElement:MODx.request.id||0,currentAction:MODx.request.a||0}}),MODx.tree.Element.superclass.constructor.call(this,config),this.on("afterSort",this.afterSort)},Ext.extend(MODx.tree.Element,MODx.tree.Tree,{forms:{},windows:{},stores:{},getToolbar:function(){return[]},createCategory:function(n,e){var r={};this.cm.activeNode&&this.cm.activeNode.attributes.data&&(r.parent=this.cm.activeNode.attributes.data.id),MODx.load({xtype:"modx-window-category-create",record:r,listeners:{success:{fn:function(){var node=this.cm.activeNode?this.cm.activeNode.id:"n_category",self=-1!==node.indexOf("_category_");this.refreshNode(node,self)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameCategory:function(itm,e){var r=this.cm.activeNode.attributes.data,w=MODx.load({xtype:"modx-window-category-rename",record:r,listeners:{success:{fn:function(r){var c=r.a.result.object,n=this.cm.activeNode;n.setText(c.category+" ("+c.id+")"),Ext.get(n.getUI().getEl()).frame(),n.attributes.data.id=c.id,n.attributes.data.category=c.category,n.attributes.data.rank=c.rank},scope:this},hide:{fn:function(){this.destroy()}}}});w.show(e.target)},removeCategory:function(itm,e){var id=this.cm.activeNode.attributes.data.id;MODx.msg.confirm({title:_("warning"),text:_("category_confirm_delete"),url:MODx.config.connector_url,params:{action:"Element/Category/Remove",id},listeners:{success:{fn:function(){this.cm.activeNode.remove()},scope:this}}})},duplicateElement:function(itm,e,id,type){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"element/"+type+"/get",id},listeners:{success:{fn:function(results){var rec={id,type,name:_("duplicate_of",{name:this.cm.activeNode.attributes.name}),caption:_("duplicate_of",{name:this.cm.activeNode.attributes.caption}),category:results.object.category,source:results.object.source,static:results.object.static,static_file:results.object.static_file};MODx.load({xtype:"modx-window-element-duplicate",record:rec,redirect:!1,listeners:{success:{fn:function(r){var response=Ext.decode(r.a.response.responseText);response.object.redirect?MODx.loadPage("element/"+rec.type+"/update","id="+response.object.id):this.refreshNode(this.cm.activeNode.id)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},extractElementIdentifiersFromActiveNode:function(activeNode){let startIndex;const extractedData={};switch(!0){case 0===activeNode.id.indexOf("n_type_"):startIndex=7;break;case 0===activeNode.id.indexOf("n_c_"):startIndex=4;break;default:startIndex=2}const identifiers=activeNode.id.substr(startIndex).split("_");switch([extractedData.type]=identifiers,identifiers.length){case 4:return{...extractedData,elementId:parseInt(identifiers[2],10),categoryId:parseInt(identifiers[3],10)};case 3:return{...extractedData,categoryId:parseInt(identifiers[2],10)};case 1:return extractedData}return!1},removeElement:function(itm,e){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);MODx.msg.confirm({title:_("warning"),text:_("remove_this_confirm",{type:_(elementIdentifiers.type),name:this.cm.activeNode.attributes.name}),url:MODx.config.connector_url,params:{action:`element/${elementIdentifiers.type}/remove`,id:elementIdentifiers.elementId},listeners:{success:{fn:function(){this.cm.activeNode.remove(),MODx.request.a===`element/${elementIdentifiers.type}/update`&&parseInt(MODx.request.id,10)===elementIdentifiers.elementId&&MODx.loadPage("welcome")},scope:this}}})},activatePlugin:function(itm,e){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Element/Plugin/Activate",id:elementIdentifiers.elementId},listeners:{success:{fn:function(){this.refreshParentNode()},scope:this}}})},deactivatePlugin:function(itm,e){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Element/Plugin/Deactivate",id:elementIdentifiers.elementId},listeners:{success:{fn:function(){this.refreshParentNode()},scope:this}}})},quickCreate:function(itm,e,type){var r={category:this.cm.activeNode.attributes.pk||""},w=MODx.load({xtype:"modx-window-quick-create-"+type,record:r,listeners:{success:{fn:function(){this.refreshNode(this.cm.activeNode.id,!0)},scope:this},hide:{fn:function(){this.destroy()}}}});w.setValues(r),w.show(e.target)},quickUpdate:function(itm,e,type){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"element/"+type+"/get",id:this.cm.activeNode.attributes.pk},listeners:{success:{fn:function(r){var nameField="template"==type?"templatename":"name",w=MODx.load({xtype:"modx-window-quick-update-"+type,record:r.object,listeners:{success:{fn:function(r){this.refreshNode(this.cm.activeNode.id);var newTitle=''+r.f.findField(nameField).getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+w.record[nameField]+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target)},scope:this}}})},_createElement:function(itm,e,t){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);return this.redirect(`?a=element/${elementIdentifiers.type}/create&category=${elementIdentifiers.categoryId}`),this.cm.hide(),!1},afterSort:function(o){var tn=o.event.target.attributes;if("category"==tn.type){var dn=o.event.dropNode.attributes;"n_category"!=tn.id&&"category"==dn.type?o.event.target.expand():(this.refreshNode(o.event.target.attributes.id,!0),this.refreshNode("n_type_"+o.event.dropNode.attributes.type,!0))}},_handleDrop:function(e){var target=e.target;return"above"!=e.point&&"below"!=e.point&&(("MODX\\Revolution\\modCategory"==target.attributes.classKey||"root"==target.attributes.classKey)&&(!!this.isCorrectType(e.dropNode,target)&&("category"==target.attributes.type&&"append"==e.point||target.getDepth()>0)))},isCorrectType:function(dropNode,targetNode){var r=!1;return targetNode.attributes.type==dropNode.attributes.type&&(targetNode.parentNode&&("folder"==dropNode.attributes.cls&&"folder"==targetNode.attributes.cls&&dropNode.parentNode.id==targetNode.parentNode.id||"file"==targetNode.attributes.cls)||(r=!0)),r},_showContextMenu:function(n,e){if(this.cm.activeNode=n,this.cm.removeAll(),n.attributes.menu&&n.attributes.menu.items)this.addContextMenuItem(n.attributes.menu.items),this.cm.show(n.getUI().getEl(),"t?");else{var m=[];switch(n.attributes.classKey){case"root":m=this._getRootMenu(n);break;case"MODX\\Revolution\\modCategory":m=this._getCategoryMenu(n);break;default:m=this._getElementMenu(n)}this.addContextMenuItem(m),this.cm.showAt(e.xy)}e.stopEvent()},_getQuickCreateMenu:function(n,m){for(var t,ui=n.getUI(),mn=[],types=["template","tv","chunk","snippet","plugin"],i=0;i0&&m.push({text:_("quick_create"),handler:function(){return!1},menu:{items:mn}}),m},_getElementMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pedit")&&(m.push({text:_("edit_"+a.type),type:a.type,pk:a.pk,handler:function(itm,e){MODx.loadPage("element/"+itm.type+"/update","id="+itm.pk)}}),m.push({text:_("quick_update_"+a.type),type:a.type,handler:function(itm,e){this.quickUpdate(itm,e,itm.type)}}),"MODX\\Revolution\\modPlugin"===a.classKey&&(a.active?m.push({text:_("plugin_deactivate"),type:a.type,handler:this.deactivatePlugin}):m.push({text:_("plugin_activate"),type:a.type,handler:this.activatePlugin}))),ui.hasClass("pnew")&&m.push({text:_("duplicate_"+a.type),pk:a.pk,type:a.type,handler:function(itm,e){this.duplicateElement(itm,e,itm.pk,itm.type)}}),ui.hasClass("pdelete")&&(m.push("-"),m.push({text:_("remove_"+a.type),handler:this.removeElement})),m.push("-"),ui.hasClass("pnew")&&m.push({text:_("add_to_category_"+a.type),handler:this._createElement}),ui.hasClass("pnewcat")&&m.push({text:_("category_create"),handler:this.createCategory}),m},_getCategoryMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pnewcat")&&m.push({text:_("category_create"),handler:this.createCategory}),ui.hasClass("peditcat")&&m.push({text:_("category_rename"),handler:this.renameCategory}),m.length>2&&m.push("-"),ui.hasClass("pnew_"+a.type)&&m.push({text:_("add_to_category_"+a.type),handler:this._createElement}),this._getQuickCreateMenu(n,m),ui.hasClass("pdelcat")&&(m.push("-"),m.push({text:_("category_remove"),handler:this.removeCategory})),m},_getRootMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];if(ui.hasClass("pnew")&&(m.push({text:_("new_"+a.type),handler:this._createElement}),m.push({text:_("quick_create_"+a.type),type:a.type,handler:function(itm,e){this.quickCreate(itm,e,itm.type)}})),ui.hasClass("pnewcat")&&(ui.hasClass("pnew")&&m.push("-"),m.push({text:_("category_create"),handler:this.createCategory})),n.isLoaded()){var childNodes=n.childNodes;childNodes.some((function(child){return!child.leaf}))&&(m.push("-"),n.isExpanded()&&childNodes.some((function(child){return child.isExpanded()}))&&m.push({text:_("collapse_all"),handler:function(){n.collapseChildNodes()}}),m.push({text:_("expand_all"),handler:function(){n.isExpandable()&&n.expand(!0)}}))}return m},handleCreateClick:function(node){this.cm.activeNode=node,"category"!=this.cm.activeNode.id.substr(2).split("_")[0]?this._createElement(null,null,null):this.createCategory(null,{target:this})}}),Ext.reg("modx-tree-element",MODx.tree.Element),MODx.tree.Directory=function(config){(config=config||{}).id=config.id||Ext.id(),Ext.applyIf(config,{rootVisible:!0,rootName:"Filesystem",rootId:"/",title:_("files"),ddAppendOnly:!0,ddGroup:"modx-treedrop-sources-dd",url:MODx.config.connector_url,hideSourceCombo:!1,baseParams:{hideFiles:config.hideFiles||!1,hideTooltips:config.hideTooltips||!1,wctx:MODx.ctx||"web",currentAction:MODx.request.a||0,currentFile:MODx.request.file||"",source:config.source||0},action:"Browser/Directory/GetList",primaryKey:"dir",useDefaultToolbar:!0,autoExpandRoot:!1,tbar:[{cls:"x-btn-icon icon-folder",tooltip:{text:_("file_folder_create")},handler:this.createDirectory,scope:this,hidden:!MODx.perm.directory_create},{cls:"x-btn-icon icon-page_white",tooltip:{text:_("file_create")},handler:this.quickCreateFile,scope:this,hidden:!MODx.perm.file_create},{cls:"x-btn-icon icon-file_upload",tooltip:{text:_("upload_files")},handler:this.uploadFiles,scope:this,hidden:!MODx.perm.file_upload},"->",{cls:"x-btn-icon icon-file_manager",tooltip:{text:_("modx_browser")},handler:this.loadFileManager,scope:this,hidden:!(MODx.perm.file_manager&&!MODx.browserOpen)}],tbarCfg:{id:config.id+"-tbar"}}),MODx.tree.Directory.superclass.constructor.call(this,config),this.addEvents({beforeUpload:!0,afterUpload:!0,afterQuickCreate:!0,afterRename:!0,afterRemove:!0,fileBrowserSelect:!0,changeSource:!0,afterSort:!0}),this.on("click",(function(n,e){n.select(),this.cm.activeNode=n}),this),this.on("render",(function(){var el=Ext.get(this.config.id);el.createChild({tag:"div",id:this.config.id+"_tb"}),el.createChild({tag:"div",id:this.config.id+"_filter"}),this.addSourceToolbar()}),this),this.on("show",(function(){if(!this.config.hideSourceCombo)try{this.sourceCombo.show()}catch(e){}}),this),this._init(),this.on("afterrender",this.showRefresh,this),this.on("afterSort",this._handleAfterDrop,this),this.on("click",(function(e){null!=this.uploader&&this.uploader.setBaseParams({path:e.id})})),this.uploader=new MODx.util.MultiUploadDialog.Upload({url:MODx.config.connector_url,base_params:{action:"Browser/File/Upload",wctx:MODx.ctx||"",source:this.getSource()}}),this.uploader.on("beforeupload",this.beforeUpload,this),this.uploader.on("uploadsuccess",this.uploadSuccess,this),this.uploader.on("uploaderror",this.uploadError,this),this.uploader.on("uploadfailed",this.uploadFailed,this)},Ext.extend(MODx.tree.Directory,MODx.tree.Tree,{windows:{},getRootMenu:function(node){var menu=[];return MODx.perm.directory_create&&menu.push({text:_("file_folder_create"),handler:this.createDirectory,scope:this}),MODx.perm.file_create&&menu.push({text:_("file_create"),handler:this.createFile,scope:this}),MODx.perm.file_upload&&menu.push({text:_("upload_files"),handler:this.uploadFiles,scope:this}),node.ownerTree.el.hasClass("pupdate")&&menu.push(["-",{text:_("edit"),handler:function(){MODx.loadPage("source/update","id="+node.ownerTree.source)}}]),menu},_showContextMenu:function(node,e){this.cm.activeNode=node,this.cm.removeAll();var m=[];m.push({text:""+node.attributes.text+"",handler:function(){return!1},header:!0}),m.push("-"),node.isRoot?m=m.concat(this.getRootMenu(node)):node.attributes.menu&&node.attributes.menu.items&&(m=m.concat(node.attributes.menu.items)),m&&m.length>0&&(this.addContextMenuItem(m),this.cm.showAt(e.xy)),e.preventDefault(),e.stopEvent()},showRefresh:function(){var node=this.getRootNode(),inlineButtonsLang=this.getInlineButtonsLang(node),elId=node.ui.elNode.id+"_tools",el=document.createElement("div");el.id=elId,el.className="modx-tree-node-tool-ct",node.ui.elNode.appendChild(el),MODx.load({xtype:"modx-button",text:"",scope:this,tooltip:new Ext.ToolTip({title:inlineButtonsLang.refresh,target:this}),node,handler:function(btn,evt){evt.stopPropagation(evt),node.reload()},iconCls:"icon-refresh",renderTo:elId,listeners:{mouseover:function(button,e){button.tooltip.onTargetOver(e)},mouseout:function(button,e){button.tooltip.onTargetOut(e)}}})},addSourceToolbar:function(){if(this.sourceCombo=new MODx.combo.MediaSource({value:this.config.source||MODx.config.default_media_source,listWidth:236,listeners:{select:{fn:this.changeSource,scope:this},loaded:{fn:function(combo){var rec=combo.store.getById(this.config.source),rn=this.getRootNode();rn&&rec&&rn.setText(rec.data.name)},scope:this}}}),this.searchBar=new Ext.Toolbar({renderTo:this.tbar,id:this.config.id+"-sourcebar",items:[this.sourceCombo]}),this.on("resize",(function(){this.sourceCombo.setWidth(this.getWidth()-12)}),this),this.config.hideSourceCombo)try{this.sourceCombo.hide()}catch(e){}},changeSource:function(sel){this.cm.activeNode="";var s=sel.getValue(),rn=this.getRootNode();rn&&rn.setText(sel.getRawValue()),this.config.baseParams.source=s,this.fireEvent("changeSource",s),this.refresh()},_init:function(){var treeState=Ext.state.Manager.get(this.treestate_id);this.root.getPath("text")!==treeState&&this.root.expand()},_initExpand:function(){var treeState=Ext.state.Manager.get(this.treestate_id);Ext.isEmpty(this.config.openTo)?this.expandPath(treeState,"text"):this.selectPath("/"+_("files")+"/"+this.config.openTo,"text")},_saveState:function(n){n.expanded||n.isRoot||(n=n.parentNode),n.id==this.config.openTo&&n.select();var p=n.getPath("text");Ext.state.Manager.set(this.treestate_id,p)},_handleAfterDrop:function(o,r){var targetNode=o.event.target,dropNode=o.event.dropNode;if("append"==o.event.point&&targetNode){var ui=targetNode.getUI();ui.addClass("haschildren"),ui.removeClass("icon-resource")}if("resource/update"===MODx.request.a&&dropNode.attributes.pk==MODx.request.id){var parentFieldCmb=Ext.getCmp("modx-resource-parent"),parentFieldHidden=Ext.getCmp("modx-resource-parent-hidden");parentFieldCmb&&parentFieldHidden&&(parentFieldHidden.setValue(dropNode.parentNode.attributes.pk),parentFieldCmb.setValue(dropNode.parentNode.attributes.text.replace(/(<([^>]+)>)/gi,"")))}targetNode.reload(!0)},_handleDrag:function(dropEvent){var from=dropEvent.dropNode.attributes.id,to=dropEvent.target.attributes.id,orgSource="number"==typeof dropEvent.dropNode.attributes.sid?dropEvent.dropNode.attributes.sid:this.config.baseParams.source,destSource="number"==typeof dropEvent.target.attributes.sid?dropEvent.target.attributes.sid:0;destSource||(destSource=dropEvent.tree.source),MODx.Ajax.request({url:this.config.url,params:{source:orgSource,from,destSource,to,action:this.config.sortAction||"Browser/Directory/Sort",point:dropEvent.point},listeners:{success:{fn:function(r){var el=dropEvent.dropNode.getUI().getTextEl();el&&Ext.get(el).frame(),this.fireEvent("afterSort",{event:dropEvent,result:r})},scope:this},failure:{fn:function(r){return MODx.form.Handler.errorJSON(r),this.refresh(),""!=r.message?MODx.msg.alert(_("error"),r.message):r.data&&r.data[0]&&MODx.msg.alert(r.data[0].id,r.data[0].msg),!1},scope:this}}})},getPath:function(node){let path=node?.attributes?.path||"";return path=path.replace(/^[\/\.]*/,""),path+"/"},editFile:function(itm,e){MODx.loadPage("system/file/edit","file="+this.cm.activeNode.attributes.id+"&source="+this.config.source)},openFile:function(itm,e){this.cm.activeNode.attributes.urlExternal&&window.open(this.cm.activeNode.attributes.urlExternal)},quickUpdateFile:function(itm,e){var node=this.cm.activeNode;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Get",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(response){var r={file:node.attributes.id,name:node.text,path:node.attributes.pathRelative,source:this.getSource(),content:response.object.content};MODx.load({xtype:"modx-window-file-quick-update",record:r,listeners:{hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},createFile:function(itm,e){var active=this.cm.activeNode,dir="";if(active&&active.attributes)if(active.isRoot||"dir"===active.attributes.type)dir=active.attributes.id;else if("file"===active.attributes.type){var path=active.attributes.path;dir=path.substr(0,path.lastIndexOf("/")+1)}MODx.loadPage("system/file/create","directory="+dir+"&source="+this.getSource())},quickCreateFile:function(itm,e){var node=this.cm.activeNode,r={directory:node?decodeURIComponent(node.attributes.id):"/",source:this.getSource()};MODx.load({xtype:"modx-window-file-quick-create",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterQuickCreate"),this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},browser:null,loadFileManager:function(btn,e){var refresh=!1;null===this.browser?this.browser=MODx.load({xtype:"modx-browser",hideFiles:MODx.config.modx_browser_tree_hide_files,rootId:"/",wctx:MODx.ctx,source:this.config.baseParams.source,listeners:{select:{fn:function(data){this.fireEvent("fileBrowserSelect",data)},scope:this}}}):refresh=!0,this.browser&&(this.browser.setSource(this.config.baseParams.source),refresh&&this.browser.win.tree.refresh(),this.browser.show())},renameNode:function(field,nv,ov){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Rename",new_name:nv,old_name:ov,file:this.treeEditor.editNode.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshActiveNode()},scope:this}}})},renameDirectory:function(item,e){var node=this.cm.activeNode,r={old_name:node.text,name:node.text,path:node.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-directory-rename",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameFile:function(item,e){var node=this.cm.activeNode,r={old_name:node.text,name:node.text,path:node.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-file-rename",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshParentNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},createDirectory:function(item,e){var node=!(!this.cm||!this.cm.activeNode)&&this.cm.activeNode,r={parent:node&&"dir"==node.attributes.type?node.attributes.pathRelative:"/",source:this.getSource()};MODx.load({xtype:"modx-window-directory-create",record:r,listeners:{success:{fn:function(){var parent=Ext.getCmp("folder-parent").getValue();this.cm.activeNode&&"constructor"===this.cm.activeNode.constructor.name||""===parent||"/"===parent?this.refresh():this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e?e.target:Ext.getBody())},setVisibility:function(item,e){var node=this.cm.activeNode,r={path:node.attributes.path,visibility:node.attributes.visibility,source:this.getSource()};MODx.load({xtype:"modx-window-set-visibility",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},removeDirectory:function(item,e){var node=this.cm.activeNode,directory=node.attributes.text;MODx.msg.confirm({text:_("file_folder_remove_confirm",{directory}),url:MODx.config.connector_url,params:{action:"Browser/Directory/Remove",dir:node.attributes.path,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},removeFile:function(item,e){var node=this.cm.activeNode,fileName=node.attributes.text,filePath=node.attributes.pathRelative;MODx.msg.confirm({text:_("file_remove_confirm",{file:fileName}),url:MODx.config.connector_url,params:{action:"Browser/File/Remove",file:filePath,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},_afterRemove:function(){this.fireEvent("afterRemove"),this.refreshParentNode(),this.cm.activeNode=null},unpackFile:function(item,e){var node=this.cm.activeNode;MODx.msg.confirm({text:_("file_download_unzip")+" "+node.attributes.id,url:MODx.config.connectors_url,params:{action:"Browser/File/Unpack",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource(),path:node.attributes.directory},listeners:{success:{fn:this.refreshParentNode,scope:this}}})},downloadFile:function(item,e){var node=this.cm.activeNode;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Download",file:node.attributes.pathRelative,wctx:MODx.ctx||"",source:this.getSource()},listeners:{failure:{fn:function(r){MODx.msg.alert(_("alert"),r.message)},scope:this},success:{fn:function(r){Ext.isEmpty(r.object.url)||(location.href=MODx.config.connector_url+"?action=Browser/File/Download&download=1&file="+r.object.url+"&HTTP_MODAUTH="+MODx.siteId+"&source="+this.getSource()+"&wctx="+MODx.ctx)},scope:this}}})},copyRelativePath:function(item,e){var node=this.cm.activeNode,dummyRelativePathInput=document.createElement("input");document.body.appendChild(dummyRelativePathInput),dummyRelativePathInput.setAttribute("value",node.attributes.pathRelative),dummyRelativePathInput.select(),document.execCommand("copy"),document.body.removeChild(dummyRelativePathInput)},getSource:function(){return this.config.baseParams.source},uploadFiles:function(){this.uploader.setBaseParams({source:this.getSource()}),this.uploader.browser=MODx.config.browserview,this.uploader.show()},uploadError:function(dlg,file,data,rec){},uploadFailed:function(dlg,file,rec){},uploadSuccess:function(){if(this.cm.activeNode){var node=this.cm.activeNode;if(node.isLeaf()){var pn=node.isLeaf()?node.parentNode:node;pn?pn.reload():node.id.match(/.*?\/$/)&&this.refreshActiveNode(),this.fireEvent("afterUpload",node)}else this.refreshActiveNode()}else this.refresh(),this.fireEvent("afterUpload")},beforeUpload:function(){var path=this.config.openTo||this.config.rootId||"/";this.cm.activeNode&&(path=this.getPath(this.cm.activeNode),this.cm.activeNode.isLeaf()&&(path=this.getPath(this.cm.activeNode.parentNode))),this.uploader.setBaseParams({action:"Browser/File/Upload",path,wctx:MODx.ctx||"",source:this.getSource()}),this.fireEvent("beforeUpload",this.cm.activeNode)}}),Ext.reg("modx-tree-directory",MODx.tree.Directory),MODx.window.CreateDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_create"),url:MODx.config.connector_url,action:"Browser/Directory/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("file_folder_parent"),id:"folder-parent",name:"parent",xtype:"textfield",anchor:"100%"},{xtype:"label",forId:"folder-parent",html:_("file_folder_parent_desc"),cls:"desc-under"}]}),MODx.window.CreateDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.CreateDirectory,MODx.Window),Ext.reg("modx-window-directory-create",MODx.window.CreateDirectory),MODx.window.SetVisibility=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_visibility"),url:MODx.config.connector_url,action:"Browser/Visibility",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{name:"path",fieldLabel:_("file_folder_path"),xtype:"statictextfield",anchor:"100%",submitValue:!0},{fieldLabel:_("file_folder_visibility_label"),name:"visibility",xtype:"modx-combo-visibility",anchor:"100%",allowBlank:!1},{hideLabel:!0,xtype:"displayfield",value:_("file_folder_visibility_desc"),anchor:"100%",allowBlank:!1}]}),MODx.window.SetVisibility.superclass.constructor.call(this,config)},Ext.extend(MODx.window.SetVisibility,MODx.Window),Ext.reg("modx-window-set-visibility",MODx.window.SetVisibility),MODx.window.RenameDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/Directory/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1}]}),MODx.window.RenameDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameDirectory,MODx.Window),Ext.reg("modx-window-directory-rename",MODx.window.RenameDirectory),MODx.window.RenameFile=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/File/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{name:"dir",xtype:"hidden"}]}),MODx.window.RenameFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameFile,MODx.Window),Ext.reg("modx-window-file-rename",MODx.window.RenameFile),MODx.window.QuickUpdateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_update"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Update",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{xtype:"hidden",name:"file"},{fieldLabel:_("name"),name:"name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}],buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateFile,MODx.Window),Ext.reg("modx-window-file-quick-update",MODx.window.QuickUpdateFile),MODx.window.QuickCreateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_create"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("directory"),name:"directory",submitValue:!0,xtype:"statictextfield",anchor:"100%"},{xtype:"label",html:_("file_folder_parent_desc"),cls:"desc-under"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateFile,MODx.Window),Ext.reg("modx-window-file-quick-create",MODx.window.QuickCreateFile),MODx.panel.FileTree=function(config){config=config||{},Ext.applyIf(config,{_treePrefix:"source-tree-",autoHeight:!0,defaults:{autoHeight:!0,border:!1}}),MODx.panel.FileTree.superclass.constructor.call(this,config),this.on("render",this.getSourceList,this)},Ext.extend(MODx.panel.FileTree,Ext.Container,{getSourceList:function(){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Source/GetList",limit:0},listeners:{success:{fn:function(data){this.onSourceListReceived(data.results)},scope:this},failure:{fn:function(data){return data.total>0&&null!=data.results&&this.onSourceListReceived(data.results),!1},scope:this}}})},onSourceListReceived:function(sources){for(var k=0;k=0&&rect.left>=0&&rect.top<=height&&(image.src=image.getAttribute("data-src"),delete this.thumbnails[i])}}},refresh:function(){MODx.DataView.prototype.refresh.call(this),this.thumbnails=Array.prototype.slice.call(document.querySelectorAll("img[data-src]")),this.lazyLoad()},listeners:{selectionchange:{fn:this.showDetails,scope:this,buffer:100},dblclick:config.onSelect||{fn:Ext.emptyFn,scope:this},render:{fn:this.sortStore,scope:this},afterrender:{fn:function(){this.getEl().parent().on("scroll",(function(){this.lazyLoad()}),this),null!=this.tree&&null!=this.tree.uploader&&this.tree.uploader.addDropZone(this.ownerCt,this),MODx.config.browserview=this},scope:this}},prepareData:this.formatData.createDelegate(this),multiSelect:!0}),MODx.browser.View.superclass.constructor.call(this,config)},Ext.extend(MODx.browser.View,MODx.DataView,{templates:{},run:function(p){(p=p||{}).dir&&(this.dir=p.dir),Ext.applyIf(p,{action:"Browser/Directory/GetFiles",dir:this.dir,source:this.config.source||MODx.config.default_media_source}),this.mask=new Ext.LoadMask(Ext.getBody(),{msg:_("loading")}),this.mask.show(),this.store.load({params:p,callback:function(rec,options,success){this.mask.hide(),this.refresh(),Ext.getCmp(this.ident+"-filepath").setValue(""),this.select(0)},scope:this})},editFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id];MODx.loadPage("system/file/edit","file="+data.pathRelative+"&source="+this.config.source)},quickUpdateFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id];MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Get",file:data.pathRelative,wctx:MODx.ctx||"",source:this.config.source},listeners:{success:{fn:function(response){var r={file:data.pathRelative,name:data.name,path:decodeURIComponent(data.pathRelative),source:this.config.source,content:response.object.content};MODx.load({xtype:"modx-window-file-quick-update",record:r,listeners:{hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},renameFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id],r={old_name:data.name,name:data.name,path:data.pathRelative,source:this.config.source};MODx.load({xtype:"modx-window-file-rename",record:r,listeners:{success:{fn:function(r){this.config.tree.refreshParentNode(),this.run()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},downloadFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id];MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Download",file:data.pathRelative,wctx:MODx.ctx||"",source:this.config.source},listeners:{failure:{fn:function(r){MODx.msg.alert(_("alert"),r.message)},scope:this},success:{fn:function(r){Ext.isEmpty(r.object.url)||(location.href=MODx.config.connector_url+"?action=Browser/File/Download&download=1&file="+r.object.url+"&HTTP_MODAUTH="+MODx.siteId+"&source="+this.config.source+"&wctx="+MODx.ctx)},scope:this}}})},copyRelativePath:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id],dummyRelativePathInput=document.createElement("input");document.body.appendChild(dummyRelativePathInput),dummyRelativePathInput.setAttribute("value",data.pathRelative),dummyRelativePathInput.select(),document.execCommand("copy"),document.body.removeChild(dummyRelativePathInput)},removeFile:function(){var files=[],filesNames=[],selected=this.getSelectedRecords();for(var i in selected)selected.hasOwnProperty(i)&&(files.push(selected[i].id),filesNames.push(selected[i].data.name));MODx.msg.confirm({text:_("file_remove_confirm",{file:filesNames.pop()}),url:MODx.config.connector_url,params:{action:"Browser/File/Remove",file:files.pop(),source:this.config.source,wctx:this.config.wctx||"web"},listeners:{success:{fn:function(r){this.config.tree&&(this.config.tree.cm.activeNode&&this.config.tree.cm.activeNode.id.match(/.*?\/$/)?this.config.tree.refreshParentNode():this.config.tree.refresh()),this.run()},scope:this}}})},setTemplate:function(tpl){"list"===tpl?(this.tpl=this.templates.list,this.itemSelector="div.modx-browser-list-item"):(this.tpl=this.templates.thumb,this.itemSelector="div.modx-browser-thumb-wrap"),this.refresh(),this.select(0)},setVisibility:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id],r={path:decodeURIComponent(data.pathRelative),visibility:data.visibility,source:this.config.source};MODx.load({xtype:"modx-window-set-visibility",record:r,listeners:{success:{fn:function(){this.run()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},sortStore:function(){var v=MODx.config.modx_browser_default_sort||"name";this.store.sort(v,"name"==v?"ASC":"DESC"),this.select(0)},showDetails:function(){var node=this.getSelectedNodes(),detailPanel=Ext.getCmp(this.config.ident+"-img-detail-panel").body,okBtn=Ext.getCmp(this.ident+"-ok-btn"),keys=Object.keys(node);if(node&&node.length>0){node=node[keys[keys.length-1]],okBtn&&okBtn.enable();var data=this.lookup[node.id];this.config.tree.getNodeById(data.pathRelative)&&(this.config.tree.cm.activeNode=this.config.tree.getNodeById(data.pathRelative),this.config.tree.getSelectionModel().select(this.config.tree.getNodeById(data.pathRelative))),Ext.getCmp(this.ident+"-filepath").setValue((-1===data.fullRelativeUrl.indexOf("http")?"/":"")+data.fullRelativeUrl),detailPanel.hide(),this.templates.details.overwrite(detailPanel,data),detailPanel.slideIn("l",{stopFx:!0,duration:".2"})}else okBtn&&okBtn.disable(),detailPanel.update("")},showFullView:function(name,ident){var data=this.lookup[name];if(data){this.fvWin||(this.fvWin=new Ext.Window({layout:"fit",width:600,height:450,bodyStyle:"padding: 0;",closeAction:"hide",plain:!0,items:[{id:this.ident+"modx-view-item-full",cls:"modx-browser-fullview",html:""}],buttons:[{text:_("close"),cls:"primary-button",handler:function(){this.fvWin.hide()},scope:this}]})),this.fvWin.show();var ratio=data.image_width>800?800/data.image_width:1,w=data.image_width<250?250:data.image_width>800?800:data.image_width,hfit=data.image_height*ratio+this.fvWin.footer.dom.clientHeight+1+this.fvWin.header.dom.clientHeight+1,h=data.image_height<200?200:data.image_height>600?hfit>600?600:hfit:data.image_height;this.fvWin.setSize(w,h),this.fvWin.center(),this.fvWin.setTitle(data.name),Ext.get(this.ident+"modx-view-item-full").update(''+data.name+'")}},formatData:function(data){var size;return data.shortName=Ext.util.Format.ellipsis(data.name,18),data.sizeString=0!=data.size?(size=data.size)<1024?size+" "+_("file_size_bytes"):Math.round(10*size/1024)/10+" "+_("file_size_kilobytes"):0,data.imageSizeString=0!=data.preview?data.original_width+"x"+data.original_height+"px":0,data.imageSizeString="xpx"===data.imageSizeString?0:data.imageSizeString,data.dateString=Ext.isEmpty(data.lastmod)?0:new Date(data.lastmod).format(MODx.config.manager_date_format+" "+MODx.config.manager_time_format),this.lookup[data.name]=data,data},_initTemplates:function(){this.templates.thumb=new Ext.XTemplate('','
','','
',' {name:htmlEncode}',"
","
",'','
',' \t
.{ext}
',"
","
"," {shortName:htmlEncode}","
","
"),this.templates.thumb.compile(),this.templates.list=new Ext.XTemplate('','
',' ',' {name:htmlEncode}',' ',' {sizeString}'," ",' ',' {imageSizeString}'," "," ","
","
"),this.templates.list.compile(),this.templates.details=new Ext.XTemplate('
',' ',' ','
",' {name:htmlEncode}',"
","
",' ','
','
.{ext}
',"
","
",'
'," "+_("file_name")+":"," {name:htmlEncode}",' '," "+_("file_size")+":"," {sizeString}"," ",' '," "+_("image_size")+":"," {imageSizeString}"," ",' '," "+_("file_last_modified")+":"," {dateString}"," ",' '," "+_("visibility")+":"," {visibility}"," ","
","
","
"),this.templates.details.compile()},_showContextMenu:function(v,i,n,e){e.preventDefault(),this.select(n.id);var data=this.lookup[n.id],m=this.cm;if(m.removeAll(),data.menu){var menu=[];if(this.getSelectedRecords().length>1)for(var ii=0;ii{MODx.browser.onPopState(e,this)},Ext.applyIf(config,{title:_("modx_browser")+" ("+(MODx.ctx?MODx.ctx:"web")+")",cls:"modx-browser modx-browser-window",layout:"border",minWidth:500,minHeight:300,width:"90%",height:.9*Ext.getBody().getViewSize().height,modal:!1,closeAction:"hide",border:!1,items:[{id:this.ident+"-browser-tree",cls:"modx-browser-tree",region:"west",width:250,height:"100%",items:this.tree,autoScroll:!0,split:!0,border:!1},{id:this.ident+"-browser-view",cls:"modx-browser-view-ct",region:"center",autoScroll:!0,border:!1,items:this.view,tbar:this.getToolbar(),bbar:this.getPathbar()},{id:this.ident+"-img-detail-panel",cls:"modx-browser-details-ct",region:"east",split:!0,border:!1,width:250}],buttons:[{id:this.ident+"-cancel-btn",text:_("cancel"),handler:this.close,scope:this},{id:this.ident+"-ok-btn",text:_("ok"),cls:"primary-button",handler:this.onSelect,scope:this}],keys:{key:27,handler:this.hide,scope:this}}),MODx.browser.Window.superclass.constructor.call(this,config),this.config=config,this.addEvents({select:!0,hide:!0}),this.on("hide",(()=>{MODx.util.UrlParams.remove("source"),MODx.util.UrlParams.remove("dir")}))},Ext.extend(MODx.browser.Window,Ext.Window,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),MODx.util.UrlParams.set({...MODx.util.UrlParams.get(),dir:decodeURIComponent(dir)}),this.view.run({dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",(function(){this.filter()}),this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout((function(){var field=el.getEl().dom;if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()}else field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)}),50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(){const selNodes=this.view.getSelectedNodes(),callback=this.config.onSelect||this.onSelectHandler,lookup=this.view.lookup,scope=this.config.scope,source=parseInt(this.config.source||MODx.config.default_media_source);this.hide(this.config.animEl||null,(function(){callback&&selNodes.forEach((selNode=>{try{let selData=lookup[selNode.id];selData.source=source,Ext.callback(callback,scope||this,[selData]),this.fireEvent("select",selData)}catch(e){console.error("Error processing MODx.Browser onSelect callback:",e)}}))}),scope)},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-browser-window",MODx.browser.Window),MODx.Media=function(config){config=config||{},this.ident=config.ident||Ext.id(),MODx.browserOpen=!0,this.tree=MODx.load({xtype:"modx-tree-directory",onUpload:function(){this.view.run()},scope:this,source:config.source||MODx.util.UrlParams.get().source||MODx.config.default_media_source,originalSource:config.source||MODx.config.default_media_source,hideFiles:config.hideFiles||MODx.config.modx_browser_tree_hide_files,hideTooltips:config.hideTooltips||MODx.config.modx_browser_tree_hide_tooltips||!0,openTo:config.openTo||MODx.util.UrlParams.get().dir||"",ident:this.ident,rootIconCls:MODx.config.mgr_source_icon,rootId:config.rootId||"/",rootName:_("files"),rootVisible:null==config.rootVisible||!Ext.isEmpty(config.rootId),id:this.ident+"-tree",hideSourceCombo:config.hideSourceCombo||!1,useDefaultToolbar:!1,listeners:{afterUpload:{fn:function(){this.view.run()},scope:this},afterQuickCreate:{fn:function(){this.view.run()},scope:this},afterRename:{fn:function(){this.view.run()},scope:this},afterRemove:{fn:function(){this.view.run()},scope:this},changeSource:{fn:function(s){this.config.source=s,this.view.config.source=s,this.view.baseParams.source=s,this.view.dir="/",this.view.run(),MODx.util.UrlParams.set({...MODx.util.UrlParams.get(),source:s,dir:"/"})},scope:this},afterrender:{fn:function(tree){tree.root.expand()},scope:this},beforeclick:{fn:function(node,e){if(node.leaf)return this.view.select(this.view.store.indexOfId("/"+node.attributes.url)),this.view.dir!==node.parentNode.id&&this.load(node.parentNode.id),!1;this.load(node.id)},scope:this},load:{fn:function({childNodes}){const dir=MODx.util.History.get().dir;if(dir)for(const childNode of childNodes)if(dir===decodeURIComponent(childNode.id)){childNode.on("load",(()=>{childNode.select(),this.tree.cm.activeNode=childNode}));break}},scope:this},load:{fn:function(){const dir=MODx.util.UrlParams.get().dir;dir&&this.tree.expandTreePath(dir)},scope:this}}}),this.view=MODx.load({xtype:"modx-browser-view",onSelect:{fn:this.onSelect,scope:this},source:config.source||MODx.util.UrlParams.get().source||MODx.config.default_media_source,originalSource:config.source||MODx.config.default_media_source,allowedFileTypes:config.allowedFileTypes||"",wctx:config.wctx||"web",openTo:config.openTo||MODx.util.UrlParams.get().dir||"",ident:this.ident,id:this.ident+"-view",tree:this.tree}),window.onpopstate=e=>{MODx.browser.onPopState(e,this)},Ext.applyIf(config,{cls:"modx-browser modx-browser-panel",layout:"border",width:"100%",height:"100%",style:"background-color: transparent",border:!1,items:[{region:"west",width:250,items:this.tree,id:this.ident+"-browser-tree",cls:"modx-browser-tree",autoScroll:!0,split:!0,margins:"10 0 10 18"},{region:"center",layout:"fit",items:this.view,id:this.ident+"-browser-view",cls:"modx-browser-view-ct",autoScroll:!0,border:!1,tbar:this.getToolbar(),bbar:this.getPathbar(),margins:"10 0 10 0"},{region:"east",width:250,id:this.ident+"-img-detail-panel",cls:"modx-browser-details-ct",split:!0,margins:"10 10 10 0"}]}),MODx.Media.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.Media,Ext.Container,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),MODx.util.UrlParams.set({...MODx.util.UrlParams.get(),dir:decodeURIComponent(dir)}),this.view.run({dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",(function(){this.filter()}),this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout((function(){var field=el.getEl().dom;if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()}else field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)}),50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(data){},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-media-view",MODx.Media),MODx.browser.RTE=function(config){config=config||{},this.ident=config.ident||Ext.id(),MODx.browserOpen=!0,Ext.Ajax.defaultHeaders={modAuth:config.auth},Ext.Ajax.extraParams={HTTP_MODAUTH:config.auth},this.tree=MODx.load({xtype:"modx-tree-directory",onUpload:function(){this.view.run()},scope:this,source:config.source||MODx.config.default_media_source,hideFiles:config.hideFiles||MODx.config.modx_browser_tree_hide_files,hideTooltips:config.hideTooltips||MODx.config.modx_browser_tree_hide_tooltips||!0,openTo:config.openTo||"",ident:this.ident,rootIconCls:MODx.config.mgr_source_icon,rootId:config.rootId||"/",rootName:_("files"),rootVisible:null==config.rootVisible||!Ext.isEmpty(config.rootId),id:this.ident+"-tree",hideSourceCombo:config.hideSourceCombo||!1,useDefaultToolbar:!1,listeners:{afterUpload:{fn:function(){this.view.run()},scope:this},afterQuickCreate:{fn:function(){this.view.run()},scope:this},afterRename:{fn:function(){this.view.run()},scope:this},afterRemove:{fn:function(){this.view.run()},scope:this},changeSource:{fn:function(s){this.config.source=s,this.view.config.source=s,this.view.baseParams.source=s,this.view.dir="/",this.view.run()},scope:this},afterrender:{fn:function(tree){tree.root.expand()},scope:this},beforeclick:{fn:function(node,e){if(node.leaf)return this.view.select(this.view.store.indexOfId("/"+node.attributes.url)),this.view.dir!==node.parentNode.id&&this.load(node.parentNode.id),!1;this.load(node.id)},scope:this}}}),this.view=MODx.load({xtype:"modx-browser-view",onSelect:{fn:this.onSelect,scope:this},source:config.source||MODx.config.default_media_source,allowedFileTypes:config.allowedFileTypes||"",wctx:config.wctx||"web",openTo:config.openTo||"",multiSelect:config.multiSelect||!1,ident:this.ident,id:this.ident+"-view",tree:this.tree}),Ext.applyIf(config,{title:_("modx_browser"),cls:"modx-browser modx-browser-rte",layout:"border",renderTo:document.body,id:this.ident+"-viewport",onSelect:MODx.onBrowserReturn||function(data){},items:[{id:this.ident+"-browser-tree",cls:"modx-browser-tree",region:"west",width:250,height:"100%",split:!0,items:this.tree,autoScroll:!0},{id:this.ident+"-browser-view",cls:"modx-browser-view-ct",region:"center",autoScroll:!0,width:450,items:this.view,tbar:this.getToolbar(),bbar:this.getPathbar()},{id:this.ident+"-img-detail-panel",cls:"modx-browser-details-ct",region:"east",split:!0,width:200,minWidth:200,maxWidth:300},{id:this.ident+"-south",cls:"modx-browser-rte-buttons",region:"south",split:!1,bbar:["->",{xtype:"button",id:this.ident+"-cancel-btn",text:_("cancel"),minWidth:75,handler:this.onCancel,scope:this},{xtype:"button",id:this.ident+"-ok-btn",text:_("ok"),cls:"primary-button",minWidth:75,handler:this.onSelect,scope:this}]}]}),MODx.browser.RTE.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.browser.RTE,Ext.Viewport,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),this.view.run({dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",(function(){this.filter()}),this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout((function(){var field=el.getEl().dom;if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()}else field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)}),50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(){const selNodes=this.view.getSelectedNodes(),callback=this.config.onSelect||this.onSelectHandler,lookup=this.view.lookup,scope=this.config.scope,source=parseInt(this.config.source||MODx.config.default_media_source);callback&&selNodes.forEach((selNode=>{try{let selData=lookup[selNode.id];selData.source=source,Ext.callback(callback,scope||this,[selData]),this.fireEvent("select",selData)}catch(e){console.error("Error processing MODx.Browser onSelect callback:",e)}})),window.top.opener&&(window.top.close(),window.top.opener.focus())},onCancel:function(){var callback=this.config.onSelect||this.onSelectHandler,scope=this.config.scope;Ext.callback(callback,scope||this,[null]),this.fireEvent("select",null),window.top.opener&&(window.top.close(),window.top.opener.focus())},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-browser-rte",MODx.browser.RTE),MODx.browser.onPopState=function({state},{tree,view}){const params=MODx.util.UrlParams.parse(state),defaultSource=view.config.originalSource,source=params.source||defaultSource;tree.sourceCombo&&!tree.config.hideSourceCombo&&source!==tree.sourceCombo.getValue()?(tree.config.source=source,tree.baseParams.source=source,tree.dir=params.dir||"/",tree.sourceCombo.getStore().load({scope:tree,callback(){tree.sourceCombo.setValue(source),tree.refresh();const root=tree.getRootNode();root&&root.setText(tree.sourceCombo.getRawValue()),view.run({dir:params.dir||"/",source,allowedFileTypes:view.config.allowedFileTypes||"",wctx:view.config.wctx||"web"}),tree.expandTreePath(params.dir||"/")}})):(view.run({dir:params.dir||"/",source,allowedFileTypes:view.config.allowedFileTypes||"",wctx:view.config.wctx||"web"}),tree.expandTreePath(params.dir||"/"))},Ext.apply(Ext,{isFirebug:window.console&&window.console.firebug}),MODx.Layout=function(config={}){Ext.BLANK_IMAGE_URL=MODx.config.manager_url+"assets/ext3/resources/images/default/s.gif",Ext.Ajax.defaultHeaders={modAuth:config.auth},Ext.Ajax.extraParams={HTTP_MODAUTH:config.auth},MODx.siteId=config.auth,MODx.expandHelp=!!+MODx.config.inline_help;const sp=new MODx.HttpProvider;Ext.state.Manager.setProvider(sp),sp.initState(MODx.defaultState),config.showTree=!1,config.search&&new MODx.SearchBar,Ext.applyIf(config,{layout:"border",id:"modx-layout",stateSave:!0,items:this.buildLayout(config)}),MODx.Layout.superclass.constructor.call(this,config),this.config=config,this.addEvents({afterLayout:!0,loadKeyMap:!0,loadTabs:!0}),this.loadKeys(),config.showTree||Ext.getCmp("modx-leftbar-tabs").collapse(!1),this.fireEvent("afterLayout")},Ext.extend(MODx.Layout,Ext.Viewport,{menuBarWidth:70,splitBarMargin:8,focusRestoreEls:[],subNavOpen:!1,getSplitBarMargin:function(){return this.splitBarMargin},buildLayout:function(config){var items=[],north=this.getNorth(config),west=this.getWest(config),center=this.getCenter(config),south=this.getSouth(config),east=this.getEast(config);return north&&Ext.isObject(north)&&items.push(north),west&&Ext.isObject(west)&&items.push(west),center&&Ext.isObject(center)&&items.push(center),south&&Ext.isObject(south)&&items.push(south),east&&Ext.isObject(east)&&items.push(east),items},getNorth:function(config){return window.innerWidth<=640&&{xtype:"box",region:"north",applyTo:"modx-header",listeners:{afterrender:this.initPopper,scope:this}}},getWest:function(config){return window.innerWidth<=640?this.getTree(config):{region:"west",xtype:"box",id:"modx-header",applyTo:"modx-header",width:this.menuBarWidth,listeners:{afterrender:{fn:this.initPopper,scope:this}}}},getCenter:function(config){const center={region:"center",applyTo:"modx-content",padding:"0 1px 0 0",margins:{top:0,right:0,bottom:0,left:0},style:"width:100%",bodyStyle:"background-color:transparent;",id:"modx-content",autoScroll:!0};if(window.innerWidth<=640)return center;const tree=this.getTree(config);return center.margins.right=-this.menuBarWidth,tree.margins={left:this.menuBarWidth},{region:"center",layout:"border",id:"modx-split-wrapper",items:[tree,center],listeners:{render:{fn:function(cmp){cmp.collapsed||(cmp.items.map["modx-content"].margins.left=-this.getSplitBarMargin())},scope:this}}}},getSouth:function(config){},getEast:function(config){},getTree:function(config){const tabs=[],layout=this;MODx.perm.resource_tree&&(tabs.push({title:_("resources"),xtype:"modx-tree-resource",id:"modx-resource-tree"}),config.showTree=!0),MODx.perm.element_tree&&(tabs.push({title:_("elements"),xtype:"modx-tree-element",id:"modx-tree-element"}),config.showTree=!0),MODx.perm.file_tree&&(tabs.push({title:_("files"),xtype:"modx-panel-filetree",id:"modx-file-tree"}),config.showTree=!0);return{region:"west",applyTo:"modx-leftbar",id:"modx-leftbar-tabs",split:!0,width:300,minSize:280,autoScroll:!0,unstyled:!0,useSplitTips:!0,monitorResize:!0,layout:"anchor",headerCfg:window.innerWidth<=640?{}:{tag:"div",cls:"none",id:"modx-leftbar-header",html:MODx.config.site_name},items:[{xtype:"modx-tabs",plain:!0,defaults:{autoScroll:!0,fitToFrame:!0},id:"modx-leftbar-tabpanel",border:!1,activeTab:0,stateful:!0,stateEvents:["tabchange"],getState:function(){return{activeTab:this.items.indexOf(this.getActiveTab())}},items:tabs,listeners:{afterrender:function(){const baseTabs=this,header=Ext.get("modx-leftbar-header");if(MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Resource/GetToolbar"},listeners:{success:{fn:function(response){const trashTrigger=Object.values(response.object).find((item=>"emptifier"===item.id));if(trashTrigger){const trashTab=baseTabs.add({id:"modx-trash-link",title:'',handler:trashTrigger.handler});trashTrigger.disabled||trashTab.tabEl.classList.add("active"),trashTrigger.tooltip&&(trashTab.tooltip=new Ext.ToolTip({target:new Ext.Element(trashTab.tabEl),title:trashTrigger.tooltip}))}},scope:this}}}),header){let html="";const el=document.createElement("a");""!==MODx.config.manager_logo&&void 0!==MODx.config.manager_logo&&(html+=''),el.href=MODx.config.default_site_url||MODx.config.site_url,el.title=MODx.config.site_name,el.innerText=Ext.util.Format.ellipsis(MODx.config.site_name,45,!0),el.target="_blank",html+=el.outerHTML,header.dom.innerHTML=html}},beforetabchange:{fn:function(panel,tab){if(tab&&"modx-trash-link"==tab.id){if(tab.tabEl.classList.contains("active")){var tree=Ext.getCmp("modx-resource-tree");tree&&tree.redirect("?a=resource/trash")}return!1}},scope:this}}}],getState:function(){return{collapsed:this.collapsed,width:this.width}},collapse:function(animate){if(this.collapsed||this.el.hasFxBlock()||!1===this.fireEvent("beforecollapse",this,animate))return;const contentRegion=Ext.getCmp("modx-content");if(contentRegion&&(contentRegion.margins.left=0,Ext.getCmp("modx-layout").doLayout()),animate&&window.innerWidth>960){Ext.getCmp("modx-leftbar-tabpanel").getEl().dom.style.opacity=0,this.el.dom.style.left="-"+this.el.dom.style.width}else this.el.dom.style.display="none";return this.collapsed=!0,this.saveState(),this.fireEvent("collapse",this),this},expand:function(animate){if(!this.collapsed||this.el.hasFxBlock()||!1===this.fireEvent("beforeexpand",this,animate))return;const contentRegion=Ext.getCmp("modx-content");if(contentRegion&&(contentRegion.margins.left=-layout.getSplitBarMargin()),animate&&window.innerWidth>960){const tree=Ext.getCmp("modx-leftbar-tabpanel").getEl();window.setTimeout((()=>{tree.dom.style.visibility="visible",tree.dom.style.opacity=1}),100)}else this.el.dom.style.display="";return this.collapsed=!1,this.saveState(),this.fireEvent("expand",this),this},listeners:{beforestatesave:{fn:this.onBeforeSaveState,scope:this},afterrender:function(){const trigger=Ext.get("modx-leftbar-trigger");this.collapsed&&trigger.addClass("collapsed"),trigger.on("click",(function(){this.collapsed?(trigger.removeClass("collapsed"),this.expand(!0)):(trigger.addClass("collapsed"),this.collapse(!0))}),this)}}}},initPopper:function(){for(var el=this,buttons=document.getElementById("modx-navbar").getElementsByClassName("top"),position=window.innerWidth<=960?"bottom":"right",i=0;i960&&this.initSubPopper()},showMenu:function(el){var submenu=document.getElementById(el.id+"-submenu");if(submenu.classList.contains("active"))submenu.classList.remove("active");else{this.hideMenu(),submenu.classList.add("active"),setTimeout((()=>{submenu.querySelectorAll("a")[0].focus()}),50);var focusRestore=e=>{setTimeout((()=>{this.subNavOpen||submenu.contains(document.activeElement)||(this.focusRestoreEls?.pop()?.focus(),this.hideMenu(),window.removeEventListener("focusout",focusRestore))}),1)},menuArrowKeysNavigation=e=>{"Escape"==e.code&&(this.hideMenu(),this.focusRestoreEls[0]?.focus(),this.focusRestoreEls=[],window.removeEventListener("keyup",menuArrowKeysNavigation))};window.addEventListener("focusout",focusRestore),window.addEventListener("keyup",menuArrowKeysNavigation)}this.hideSubMenu()},hideMenu:function(){for(var submenus=document.getElementsByClassName("modx-subnav"),i=0;i{requestAnimationFrame((()=>{menu.contains(document.activeElement)||(_this.focusRestoreEls?.pop()?.parentNode?.nextSibling?.focus(),hide(button),window.removeEventListener("focusout",focusRestore))}))};window.addEventListener("focusout",focusRestore)}function hide(button){var parentmenu=button.closest("ul");button.classList.remove("active");for(var buttons=parentmenu.querySelectorAll(".sub"),i=0;i=0?atob(dataURI.split(",")[1]):decodeURIComponent(dataURI.split(",")[1]),arrayBuffer=new ArrayBuffer(byteString.length),intArray=new Uint8Array(arrayBuffer),i=0;i0,dataURLtoBlob=window.dataURLtoBlob,_rimg=/img/i,_rcanvas=/canvas/i,_rimgcanvas=/img|canvas/i,_rinput=/input/i,_rdata=/^data:[^,]+,/,_toString={}.toString,Math=window.Math,_SIZE_CONST=function(pow){return(pow=new window.Number(Math.pow(1024,pow))).from=function(sz){return Math.round(sz*this)},pow},_elEvents={},_infoReader=[],_readerEvents="abort progress error load loadend",_xhrPropsExport="status statusText readyState response responseXML responseText responseBody".split(" "),_isArray=function(ar){return ar&&"length"in ar},_each=function(obj,fn,ctx){if(obj)if(_isArray(obj))for(var i=0,n=obj.length;i=_length&&!_fail&&queue.end()},isFail:function(){return _fail},fail:function(){!_fail&&fn(_fail=!0)},end:function(){_end||(_end=!0,fn())}};return queue},each:_each,afor:function(array,callback){var i=0,n=array.length;_isArray(array)&&n--?function _next(){callback(n!=i&&_next,array[i],i++)}():callback(!1)},extend:_extend,isFile:function(file){return"[object File]"===_toString.call(file)},isBlob:function(blob){return this.isFile(blob)||"[object Blob]"===_toString.call(blob)},isCanvas:function(el){return el&&_rcanvas.test(el.nodeName)},getFilesFilter:function(filter){return(filter="string"==typeof filter?filter:filter.getAttribute&&filter.getAttribute("accept")||"")?new RegExp("("+filter.replace(/\./g,"\\.").replace(/,/g,"|")+")$","i"):/./},readAsDataURL:function(file,fn){api.isCanvas(file)?_emit(file,fn,"load",api.toDataURL(file)):_readAs(file,fn,"DataURL")},readAsBinaryString:function(file,fn){_hasSupportReadAs("BinaryString")?_readAs(file,fn,"BinaryString"):_readAs(file,(function(evt){if("load"==evt.type)try{evt.result=api.toBinaryString(evt.result)}catch(e){evt.type="error",evt.message=e.toString()}fn(evt)}),"DataURL")},readAsArrayBuffer:function(file,fn){_readAs(file,fn,"ArrayBuffer")},readAsText:function(file,encoding,fn){fn||(fn=encoding,encoding="utf-8"),_readAs(file,fn,"Text",encoding)},toDataURL:function(el,type){return"string"==typeof el?el:el.toDataURL?el.toDataURL(type||"image/png"):void 0},toBinaryString:function(val){return window.atob(api.toDataURL(val).replace(_rdata,""))},readAsImage:function(file,fn,progress){if(api.isBlob(file))if(apiURL){var data=apiURL.createObjectURL(file);undefined===data?_emit(file,fn,"error"):api.readAsImage(data,fn,progress)}else api.readAsDataURL(file,(function(evt){"load"==evt.type?api.readAsImage(evt.result,fn,progress):(progress||"error"==evt.type)&&_emit(file,fn,evt,null,{loaded:evt.loaded,total:evt.total})}));else if(api.isCanvas(file))_emit(file,fn,"load",file);else if(_rimg.test(file.nodeName))if(file.complete)_emit(file,fn,"load",file);else{_one(file,"error abort load",(function _fn(evt){"load"==evt.type&&apiURL&&apiURL.revokeObjectURL(file.src),_off(file,"error abort load",_fn),_emit(file,fn,evt,file)}))}else if(file.iframe)_emit(file,fn,{type:"error"});else{var img=api.newImage(file.dataURL||file);api.readAsImage(img,fn,progress)}},checkFileObj:function(name){var file={},accept=api.accept;return"object"==typeof name?file=name:file.name=(name+"").split(/\\|\//g).pop(),null==file.type&&(file.type=file.name.split(".").pop()),_each(accept,(function(ext,type){((ext=new RegExp(ext.replace(/\s/g,"|"),"i")).test(file.type)||api.ext2mime[file.type])&&(file.type=api.ext2mime[file.type]||type.split("/")[0]+"/"+file.type)})),file},getDropFiles:function(evt,callback){var items,files=[],all=[],dataTransfer=_getDataTransfer(evt),transFiles=dataTransfer.files,transItems=dataTransfer.items,entrySupport=_isArray(transItems)&&transItems[0]&&_getAsEntry(transItems[0]),queue=api.queue((function(){callback(files,all)}));if(entrySupport)if(normalize&&transFiles){var file,entry,i=transFiles.length;for(items=new Array(i);i--;){file=transFiles[i];try{entry=_getAsEntry(transItems[i])}catch(err){api.log("[err] getDropFiles: ",err),entry=null}_isEntry(entry)&&(entry.isDirectory||entry.isFile&&file.name==file.name.normalize("NFC"))?items[i]=entry:items[i]=file}}else items=transItems;else items=transFiles;_each(items||[],(function(item){queue.inc();try{entrySupport&&_isEntry(item)?_readEntryAsFiles(item,(function(err,entryFiles,allEntries){err?api.log("[err] getDropFiles:",err):files.push.apply(files,entryFiles),all.push.apply(all,allEntries),queue.next()})):function(file,callback){if(!file.type&&(safari||file.size%4096==0&&file.size<=102400))if(FileReader)try{var reader=new FileReader;_one(reader,_readerEvents,(function(evt){var isFile="error"!=evt.type;isFile?(null!=reader.readyState&&reader.readyState!==reader.LOADING||reader.abort(),callback(isFile)):callback(!1,reader.error)})),reader.readAsDataURL(file)}catch(err){callback(!1,err)}else callback(null,new Error("FileReader is not supported"));else callback(!0)}(item,(function(yes,err){yes?files.push(item):item.error=err,all.push(item),queue.next()}))}catch(err){queue.next(),api.log("[err] getDropFiles: ",err)}})),queue.check()},getFiles:function(input,filter,callback){var files=[];return callback?(api.filterFiles(api.getFiles(input),filter,callback),null):(input.jquery&&(input.each((function(){files=files.concat(api.getFiles(this))})),input=files,files=[]),"string"==typeof filter&&(filter=api.getFilesFilter(filter)),input.originalEvent?input=_fixEvent(input.originalEvent):input.srcElement&&(input=_fixEvent(input)),input.dataTransfer?input=input.dataTransfer:input.target&&(input=input.target),input.files?(files=input.files,html5||(files[0].blob=input,files[0].iframe=!0)):!html5&&isInputFile(input)?api.trim(input.value)&&((files=[api.checkFileObj(input.value)])[0].blob=input,files[0].iframe=!0):_isArray(input)&&(files=input),api.filter(files,(function(file){return!filter||filter.test(file.name)})))},getTotalSize:function(files){for(var size=0,i=files&&files.length;i--;)size+=files[i].size;return size},getInfo:function(file,fn){var info={},readers=_infoReader.concat();api.isBlob(file)?function _next(){var reader=readers.shift();reader?reader.test(file.type)?reader(file,(function(err,res){err?fn(err):(_extend(info,res),_next())})):_next():fn(!1,info)}():fn("not_support_info",info)},addInfoReader:function(mime,fn){fn.test=function(type){return mime.test(type)},_infoReader.push(fn)},filter:function(input,fn){for(var val,result=[],i=0,n=input.length;i>2,enc2=(3&byte1)<<4|byte2>>4;isNaN(byte2)?enc3=enc4=64:(enc3=(15&byte2)<<2|byte3>>6,enc4=isNaN(byte3)?64:63&byte3),outStr+=b64.charAt(enc1)+b64.charAt(enc2)+b64.charAt(enc3)+b64.charAt(enc4)}return outStr}};function _emit(target,fn,name,res,ext){var evt={type:name.type||name,target,result:res};_extend(evt,ext),fn(evt)}function _hasSupportReadAs(method){return FileReader&&!!FileReader.prototype["readAs"+method]}function _readAs(file,fn,method,encoding){if(api.isBlob(file)&&_hasSupportReadAs(method)){var Reader=new FileReader;_on(Reader,_readerEvents,(function _fn(evt){var type=evt.type;"progress"==type?_emit(file,fn,evt,evt.target.result,{loaded:evt.loaded,total:evt.total}):"loadend"==type?(_off(Reader,_readerEvents,_fn),Reader=null):_emit(file,fn,evt,evt.target.result)}));try{encoding?Reader["readAs"+method](file,encoding):Reader["readAs"+method](file)}catch(err){_emit(file,fn,"error",undefined,{error:err.toString()})}}else _emit(file,fn,"error",undefined,{error:"filreader_not_support_"+method})}function _isEntry(item){return item&&(item.isFile||item.isDirectory)}function _getAsEntry(item){var entry;return item.getAsEntry?entry=item.getAsEntry():item.webkitGetAsEntry&&(entry=item.webkitGetAsEntry()),entry}function _readEntryAsFiles(entry,callback){if(entry)if(entry.isFile)entry.file((function(file){file.fullPath=entry.fullPath,callback(!1,[file],[file])}),(function(err){entry.error=err,callback("FileError.code: "+err.code,[],[entry])}));else if(entry.isDirectory){var reader=entry.createReader(),firstAttempt=!0,files=[],all=[entry],onerror=function(err){entry.error=err,callback("DirectoryError.code: "+err.code,files,all)};reader.readEntries((function ondone(entries){firstAttempt&&(firstAttempt=!1,entries.length||(entry.error=new Error("directory is empty"))),entries.length?api.afor(entries,(function(next,entry){_readEntryAsFiles(entry,(function(err,entryFiles,allEntries){err||(files=files.concat(entryFiles)),all=all.concat(allEntries),next?next():reader.readEntries(ondone,onerror)}))})):callback(!1,files,all)}),onerror)}else _readEntryAsFiles(_getAsEntry(entry),callback);else{var err=new Error("invalid entry");(entry=new Object(entry)).error=err,callback(err.message,[],[entry])}}function isInputFile(el){return _rinput.test(el&&el.tagName)}function _getDataTransfer(evt){return(evt.originalEvent||evt||"").dataTransfer||{}}api.addInfoReader(/^image/,(function(file,callback){if(!file.__dimensions){var defer=file.__dimensions=api.defer();api.readAsImage(file,(function(evt){var img=evt.target;defer.resolve("load"!=evt.type&&"error",{width:img.width,height:img.height}),img.src=api.EMPTY_PNG,img=null}))}file.__dimensions.then(callback)})),api.event.dnd=function(el,onHover,onDrop){var _id,_type;onDrop||(onDrop=onHover,onHover=api.F),FileReader?(_on(el,"dragenter dragleave dragover",onHover.ff=onHover.ff||function(evt){for(var types=_getDataTransfer(evt).types,i=types&&types.length,debounceTrigger=!1;i--;)if(~types[i].indexOf("File")){evt.preventDefault(),_type!==evt.type&&("dragleave"!=(_type=evt.type)&&onHover.call(evt.currentTarget,!0,evt),debounceTrigger=!0);break}debounceTrigger&&(clearTimeout(_id),_id=setTimeout((function(){onHover.call(evt.currentTarget,"dragleave"!=_type,evt)}),50))}),_on(el,"drop",onDrop.ff=onDrop.ff||function(evt){evt.preventDefault(),_type=0,api.getDropFiles(evt,(function(files,all){onDrop.call(evt.currentTarget,files,all,evt)})),onHover.call(evt.currentTarget,!1,evt)})):api.log("Drag'n'Drop -- not supported")},api.event.dnd.off=function(el,onHover,onDrop){_off(el,"dragenter dragleave dragover",onHover.ff),_off(el,"drop",onDrop.ff)},jQuery&&!jQuery.fn.dnd&&(jQuery.fn.dnd=function(onHover,onDrop){return this.each((function(){api.event.dnd(this,onHover,onDrop)}))},jQuery.fn.offdnd=function(onHover,onDrop){return this.each((function(){api.event.dnd.off(this,onHover,onDrop)}))}),window.FileAPI=_extend(api,window.FileAPI),api.log("FileAPI: "+api.version),api.log("protocol: "+window.location.protocol),api.log("doctype: ["+doctype.name+"] "+doctype.publicId+" "+doctype.systemId),_each(document.getElementsByTagName("meta"),(function(meta){/x-ua-compatible/i.test(meta.getAttribute("http-equiv"))&&api.log("meta.http-equiv: "+meta.getAttribute("content"))}));try{_supportConsoleLog=!!console.log,_supportConsoleLogApply=!!console.log.apply}catch(err){}api.flashUrl||(api.flashUrl=api.staticPath+"FileAPI.flash.swf"),api.flashImageUrl||(api.flashImageUrl=api.staticPath+"FileAPI.flash.image.swf"),api.flashWebcamUrl||(api.flashWebcamUrl=api.staticPath+"FileAPI.flash.camera.swf")}(window),function(api,document,undef){"use strict";var min=Math.min,round=Math.round,getCanvas=function(){return document.createElement("canvas")},support=!1,exifOrientation={8:270,3:180,6:90,7:270,4:180,5:90};try{support=getCanvas().toDataURL("image/png").indexOf("data:image/png")>-1}catch(e){}function Image(file){if(file instanceof Image){var img=new Image(file.file);return api.extend(img.matrix,file.matrix),img}if(!(this instanceof Image))return new Image(file);this.file=file,this.size=file.size||100,this.matrix={sx:0,sy:0,sw:0,sh:0,dx:0,dy:0,dw:0,dh:0,resize:0,deg:0,quality:1,filter:0}}Image.prototype={image:!0,constructor:Image,set:function(attrs){return api.extend(this.matrix,attrs),this},crop:function(x,y,w,h){return undefined===w&&(w=x,h=y,x=y=0),this.set({sx:x,sy:y,sw:w,sh:h||w})},resize:function(w,h,strategy){return/min|max|height|width/.test(h)&&(strategy=h,h=w),this.set({dw:w,dh:h||w,resize:strategy})},preview:function(w,h){return this.resize(w,h||w,"preview")},rotate:function(deg){return this.set({deg})},filter:function(filter){return this.set({filter})},overlay:function(images){return this.set({overlay:images})},clone:function(){return new Image(this)},_load:function(image,fn){var self=this;/img|video/i.test(image.nodeName)?fn.call(self,null,image):api.readAsImage(image,(function(evt){fn.call(self,"load"!=evt.type,evt.result)}))},_apply:function(image,fn){var copy,canvas=getCanvas(),m=this.getMatrix(image),ctx=canvas.getContext("2d"),width=image.videoWidth||image.width,height=image.videoHeight||image.height,deg=m.deg,dw=m.dw,dh=m.dh,w=width,h=height,filter=m.filter,buffer=image,overlay=m.overlay,queue=api.queue((function(){image.src=api.EMPTY_PNG,fn(!1,canvas)})),renderImageToCanvas=api.renderImageToCanvas;for(deg-=360*Math.floor(deg/360),image._type=this.file.type;m.multipass&&min(w/dw,h/dh)>2;)w=w/2+.5|0,h=h/2+.5|0,(copy=getCanvas()).width=w,copy.height=h,buffer!==image?(renderImageToCanvas(copy,buffer,0,0,buffer.width,buffer.height,0,0,w,h),buffer=copy):(renderImageToCanvas(buffer=copy,image,m.sx,m.sy,m.sw,m.sh,0,0,w,h),m.sx=m.sy=m.sw=m.sh=0);canvas.width=deg%180?dh:dw,canvas.height=deg%180?dw:dh,canvas.type=m.type,canvas.quality=m.quality,ctx.rotate(deg*Math.PI/180),renderImageToCanvas(ctx.canvas,buffer,m.sx,m.sy,m.sw||buffer.width,m.sh||buffer.height,180==deg||270==deg?-dw:0,90==deg||180==deg?-dh:0,dw,dh),dw=canvas.width,dh=canvas.height,overlay&&api.each([].concat(overlay),(function(over){queue.inc();var img=new window.Image,fn=function(){var x=0|over.x,y=0|over.y,w=over.w||img.width,h=over.h||img.height,rel=over.rel;x=1==rel||4==rel||7==rel?(dw-w+x)/2:2==rel||5==rel||8==rel?dw-(w+x):x,y=3==rel||4==rel||5==rel?(dh-h+y)/2:rel>=6?dh-(h+y):y,api.event.off(img,"error load abort",fn);try{ctx.globalAlpha=over.opacity||1,ctx.drawImage(img,x,y,w,h)}catch(er){}queue.next()};api.event.on(img,"error load abort",fn),img.src=over.src,img.complete&&fn()})),filter&&(queue.inc(),Image.applyFilter(canvas,filter,queue.next)),queue.check()},getMatrix:function(image){var w,h,m=api.extend({},this.matrix),sw=m.sw=m.sw||image.videoWidth||image.naturalWidth||image.width,sh=m.sh=m.sh||image.videoHeight||image.naturalHeight||image.height,dw=m.dw=m.dw||sw,dh=m.dh=m.dh||sh,sf=sw/sh,df=dw/dh,strategy=m.resize;"preview"==strategy?dw==sw&&dh==sh||(df>=sf?h=(w=sw)/df:w=(h=sh)*df,w==sw&&h==sh||(m.sx=~~((sw-w)/2),m.sy=~~((sh-h)/2),sw=w,sh=h)):"height"==strategy?dw=dh*sf:"width"==strategy?dh=dw/sf:strategy&&(sw>dw||sh>dh?"min"==strategy?(dw=round(sf=df?min(sw,dw):dh*sf),dh=round(sf>=df?dw/sf:min(sh,dh))):(dw=sw,dh=sh));return m.sw=sw,m.sh=sh,m.dw=dw,m.dh=dh,m.multipass=api.multiPassResize,m},_trans:function(fn){this._load(this.file,(function(err,image){if(err)fn(err);else try{this._apply(image,fn)}catch(err){api.log("[err] FileAPI.Image.fn._apply:",err),fn(err)}}))},get:function(fn){if(api.support.transform){var _this=this,matrix=_this.matrix;"auto"==matrix.deg?api.getInfo(_this.file,(function(err,info){matrix.deg=exifOrientation[info&&info.exif&&info.exif.Orientation]||0,_this._trans(fn)})):_this._trans(fn)}else fn("not_support_transform");return this},toData:function(fn){return this.get(fn)}},Image.exifOrientation=exifOrientation,Image.transform=function(file,transform,autoOrientation,fn){function _transform(err,img){var images={},queue=api.queue((function(err){fn(err,images)}));err?queue.fail():api.each(transform,(function(params,name){if(!queue.isFail()){var ImgTrans=new Image(img.nodeType?img:file),isFn="function"==typeof params;if(isFn?params(img,ImgTrans):params.width?ImgTrans[params.preview?"preview":"resize"](params.width,params.height,params.strategy):params.maxWidth&&(img.width>params.maxWidth||img.height>params.maxHeight)&&ImgTrans.resize(params.maxWidth,params.maxHeight,"max"),params.crop){var crop=params.crop;ImgTrans.crop(0|crop.x,0|crop.y,crop.w||crop.width,crop.h||crop.height)}undefined===params.rotate&&autoOrientation&&(params.rotate="auto"),ImgTrans.set({type:ImgTrans.matrix.type||params.type||file.type||"image/png"}),isFn||ImgTrans.set({deg:params.rotate,overlay:params.overlay,filter:params.filter,quality:params.quality||1}),queue.inc(),ImgTrans.toData((function(err,image){err?queue.fail():(images[name]=image,queue.next())}))}}))}file.width?_transform(!1,file):api.getInfo(file,_transform)},api.each(["TOP","CENTER","BOTTOM"],(function(x,i){api.each(["LEFT","CENTER","RIGHT"],(function(y,j){Image[x+"_"+y]=3*i+j,Image[y+"_"+x]=3*i+j}))})),Image.toCanvas=function(el){var canvas=document.createElement("canvas");return canvas.width=el.videoWidth||el.width,canvas.height=el.videoHeight||el.height,canvas.getContext("2d").drawImage(el,0,0),canvas},Image.fromDataURL=function(dataURL,size,callback){var img=api.newImage(dataURL);api.extend(img,size),callback(img)},Image.applyFilter=function(canvas,filter,doneFn){"function"==typeof filter?filter(canvas,doneFn):window.Caman&&window.Caman("IMG"==canvas.tagName?Image.toCanvas(canvas):canvas,(function(){"string"==typeof filter?this[filter]():api.each(filter,(function(val,method){this[method](val)}),this),this.render(doneFn)}))},api.renderImageToCanvas=function(canvas,img,sx,sy,sw,sh,dx,dy,dw,dh){try{return canvas.getContext("2d").drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh)}catch(ex){throw api.log("renderImageToCanvas failed"),ex}},api.support.canvas=api.support.transform=support,api.Image=Image}(FileAPI,document),function(factory){"use strict";!function(loadImage){if(!window.navigator||!window.navigator.platform||!/iP(hone|od|ad)/.test(window.navigator.platform))return;var originalRenderMethod=loadImage.renderImageToCanvas;loadImage.detectSubsampling=function(img){var canvas,context;return img.width*img.height>1048576&&((canvas=document.createElement("canvas")).width=canvas.height=1,(context=canvas.getContext("2d")).drawImage(img,1-img.width,0),0===context.getImageData(0,0,1,1).data[3])},loadImage.detectVerticalSquash=function(img,subsampled){var data,sy,ey,py,naturalHeight=img.naturalHeight||img.height,canvas=document.createElement("canvas"),context=canvas.getContext("2d");for(subsampled&&(naturalHeight/=2),canvas.width=1,canvas.height=naturalHeight,context.drawImage(img,0,0),data=context.getImageData(0,0,1,naturalHeight).data,sy=0,ey=naturalHeight,py=naturalHeight;py>sy;)0===data[4*(py-1)+3]?ey=py:sy=py,py=ey+sy>>1;return py/naturalHeight||1},loadImage.renderImageToCanvas=function(canvas,img,sourceX,sourceY,sourceWidth,sourceHeight,destX,destY,destWidth,destHeight){if("image/jpeg"===img._type){var subsampled,vertSquashRatio,tileX,tileY,context=canvas.getContext("2d"),tmpCanvas=document.createElement("canvas"),tileSize=1024,tmpContext=tmpCanvas.getContext("2d");if(tmpCanvas.width=tileSize,tmpCanvas.height=tileSize,context.save(),(subsampled=loadImage.detectSubsampling(img))&&(sourceX/=2,sourceY/=2,sourceWidth/=2,sourceHeight/=2),vertSquashRatio=loadImage.detectVerticalSquash(img,subsampled),subsampled||1!==vertSquashRatio){for(sourceY*=vertSquashRatio,destWidth=Math.ceil(tileSize*destWidth/sourceWidth),destHeight=Math.ceil(tileSize*destHeight/sourceHeight/vertSquashRatio),destY=0,tileY=0;tileY0&&1==api.filter(this.items,(function(item){return item.file})).length,api.support.html5?api.formData&&!this.multipart&&FormData?options._chunked?(api.log("FileAPI.Form.toPlainData"),this.toPlainData(fn)):(api.log("FileAPI.Form.toFormData"),this.toFormData(fn)):(api.log("FileAPI.Form.toMultipartData"),this.toMultipartData(fn)):(api.log("FileAPI.Form.toHtmlData"),this.toHtmlData(fn))},_to:function(data,complete,next,arg){var queue=api.queue((function(){complete(data)}));this.each((function(file){try{next(file,data,queue,arg)}catch(err){api.log("FileAPI.Form._to: "+err.message),complete(err)}})),queue.check()},toHtmlData:function(fn){this._to(document.createDocumentFragment(),fn,(function(file,data){var hidden,blob=file.blob;file.file?(api.reset(blob,!0),blob.name=file.name,blob.disabled=!1,data.appendChild(blob)):((hidden=document.createElement("input")).name=file.name,hidden.type="hidden",hidden.value=blob,data.appendChild(hidden))}))},toPlainData:function(fn){this._to({},fn,(function(file,data,queue){file.file&&(data.type=file.file),file.blob.toBlob?(queue.inc(),_convertFile(file,(function(file,blob){data.name=file.name,data.file=blob,data.size=blob.length,data.type=file.type,queue.next()}))):file.file?(data.name=file.blob.name,data.file=file.blob,data.size=file.blob.size,data.type=file.type):(data.params||(data.params=[]),data.params.push(encodeURIComponent(file.name)+"="+encodeURIComponent(file.blob))),data.start=-1,data.end=data.file&&data.file.FileAPIReadPosition||-1,data.retry=0}))},toFormData:function(fn){this._to(new FormData,fn,(function(file,data,queue){file.blob&&file.blob.toBlob?(queue.inc(),_convertFile(file,(function(file,blob){data.append(file.name,blob,file.file),queue.next()}))):file.file?data.append(file.name,file.blob,file.file):data.append(file.name,file.blob),file.file&&data.append("_"+file.name,file.file)}))},toMultipartData:function(fn){this._to([],fn,(function(file,data,queue,boundary){queue.inc(),_convertFile(file,(function(file,blob){data.push("--_"+boundary+'\r\nContent-Disposition: form-data; name="'+file.name+'"'+(file.file?'; filename="'+encodeURIComponent(file.file)+'"':"")+(file.file?"\r\nContent-Type: "+(file.type||"application/octet-stream"):"")+"\r\n\r\n"+(file.file?blob:encodeURIComponent(blob))+"\r\n"),queue.next()}),!0)}),api.expando)}},api.Form=Form}(FileAPI,window),function(window,api){"use strict";var noop=function(){},document=window.document,XHR=function(options){this.uid=api.uid(),this.xhr={abort:noop,getResponseHeader:noop,getAllResponseHeaders:noop},this.options=options},_xhrResponsePostfix={"":1,XML:1,Text:1,Body:1};XHR.prototype={status:0,statusText:"",constructor:XHR,getResponseHeader:function(name){return this.xhr.getResponseHeader(name)},getAllResponseHeaders:function(){return this.xhr.getAllResponseHeaders()||{}},end:function(status,statusText){var _this=this,options=_this.options;_this.end=_this.abort=noop,_this.status=status,statusText&&(_this.statusText=statusText),api.log("xhr.end:",status,statusText),options.complete(200!=status&&201!=status&&(_this.statusText||"unknown"),_this),_this.xhr&&_this.xhr.node&&setTimeout((function(){var node=_this.xhr.node;try{node.parentNode.removeChild(node)}catch(e){}try{delete window[_this.uid]}catch(e){}window[_this.uid]=_this.xhr.node=null}),9)},abort:function(){this.end(0,"abort"),this.xhr&&(this.xhr.aborted=!0,this.xhr.abort())},send:function(FormData){var _this=this,options=this.options;FormData.toData((function(data){data instanceof Error?_this.end(0,data.message):(options.upload(options,_this),_this._send.call(_this,options,data))}),options)},_send:function(options,data){var xhr,_this=this,uid=_this.uid,onLoadFnName=_this.uid+"Load",url=options.url;if(api.log("XHR._send:",data),options.cache||(url+=(~url.indexOf("?")?"&":"?")+api.uid()),data.nodeName){var jsonp=options.jsonp;url=url.replace(/([a-z]+)=(\?)/i,"$1="+uid),options.upload(options,_this);var onPostMessage=function(evt){if(~url.indexOf(evt.origin))try{var result=api.parseJSON(evt.data);result.id==uid&&complete(result.status,result.statusText,result.response)}catch(err){complete(0,err.message)}},complete=window[uid]=function(status,statusText,response){_this.readyState=4,_this.responseText=response,_this.end(status,statusText),api.event.off(window,"message",onPostMessage),window[uid]=xhr=transport=window[onLoadFnName]=null};_this.xhr.abort=function(){try{transport.stop?transport.stop():transport.contentWindow.stop?transport.contentWindow.stop():transport.contentWindow.document.execCommand("Stop")}catch(er){}complete(0,"abort")},api.event.on(window,"message",onPostMessage),window[onLoadFnName]=function(){try{var win=transport.contentWindow,doc=win.document,result=win.result||api.parseJSON(doc.body.innerHTML);complete(result.status,result.statusText,result.response)}catch(e){api.log("[transport.onload]",e)}},(xhr=document.createElement("div")).innerHTML='
'+(jsonp&&options.url.indexOf("=?")<0?'':"")+"
";var form=xhr.getElementsByTagName("form")[0],transport=xhr.getElementsByTagName("iframe")[0];form.appendChild(data),api.log(form.parentNode.innerHTML),document.body.appendChild(xhr),_this.xhr.node=xhr,_this.readyState=2;try{form.submit()}catch(err){api.log("iframe.error: "+err)}form=null}else{if(url=url.replace(/([a-z]+)=(\?)&?/i,""),this.xhr&&this.xhr.aborted)return void api.log("Error: already aborted");if(xhr=_this.xhr=api.getXHR(),data.params&&(url+=(url.indexOf("?")<0?"?":"&")+data.params.join("&")),xhr.open("POST",url,!0),api.withCredentials&&(xhr.withCredentials="true"),options.headers&&options.headers["X-Requested-With"]||xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),api.each(options.headers,(function(val,key){xhr.setRequestHeader(key,val)})),options._chunked){xhr.upload&&xhr.upload.addEventListener("progress",api.throttle((function(evt){data.retry||options.progress({type:evt.type,total:data.size,loaded:data.start+evt.loaded,totalSize:data.size},_this,options)}),100),!1),xhr.onreadystatechange=function(){var lkb=parseInt(xhr.getResponseHeader("X-Last-Known-Byte"),10);if(_this.status=xhr.status,_this.statusText=xhr.statusText,_this.readyState=xhr.readyState,4==xhr.readyState){for(var k in _xhrResponsePostfix)_this["response"+k]=xhr["response"+k];if(xhr.onreadystatechange=null,!xhr.status||xhr.status-201>0)if(api.log("Error: "+xhr.status),(!xhr.status&&!xhr.aborted||500==xhr.status||416==xhr.status)&&++data.retry<=options.chunkUploadRetry){var delay=xhr.status?0:api.chunkNetworkDownRetryTimeout;options.pause(data.file,options),api.log("X-Last-Known-Byte: "+lkb),lkb?data.end=lkb:(data.end=data.start-1,416==xhr.status&&(data.end=data.end-options.chunkSize)),setTimeout((function(){_this._send(options,data)}),delay)}else _this.end(xhr.status);else data.retry=0,data.end==data.size-1?_this.end(xhr.status):(api.log("X-Last-Known-Byte: "+lkb),lkb&&(data.end=lkb),data.file.FileAPIReadPosition=data.end,setTimeout((function(){_this._send(options,data)}),0));xhr=null}},data.start=data.end+1,data.end=Math.max(Math.min(data.start+options.chunkSize,data.size)-1,data.start);var file=data.file,slice=(file.slice||file.mozSlice||file.webkitSlice).call(file,data.start,data.end+1);data.size&&!slice.size?setTimeout((function(){_this.end(-1)})):(xhr.setRequestHeader("Content-Range","bytes "+data.start+"-"+data.end+"/"+data.size),xhr.setRequestHeader("Content-Disposition","attachment; filename="+encodeURIComponent(data.name)),xhr.setRequestHeader("Content-Type",data.type||"application/octet-stream"),xhr.send(slice)),file=slice=null}else if(xhr.upload&&xhr.upload.addEventListener("progress",api.throttle((function(evt){options.progress(evt,_this,options)}),100),!1),xhr.onreadystatechange=function(){if(_this.status=xhr.status,_this.statusText=xhr.statusText,_this.readyState=xhr.readyState,4==xhr.readyState){for(var k in _xhrResponsePostfix)_this["response"+k]=xhr["response"+k];if(xhr.onreadystatechange=null,!xhr.status||xhr.status>201)if(api.log("Error: "+xhr.status),(!xhr.status&&!xhr.aborted||500==xhr.status)&&(options.retry||0)=0?val+"px":val}Camera.Shot=Shot,api.Camera=Camera}(window,FileAPI),function(window,jQuery,api){"use strict";var document=window.document,location=window.location,navigator=window.navigator,_each=api.each;api.support.flash=!1,api.support.flash&&(!api.html5||!api.support.html5||api.cors&&!api.support.cors||api.media&&!api.support.media||api.insecureChrome)&&function(){var _attr=api.uid(),_retry=0,_files={},_rhttp=/^https?:/i,flash={_fn:{},init:function(){var child=document.body&&document.body.firstChild;if(child)do{if(1==child.nodeType){api.log("FlashAPI.state: awaiting");var dummy=document.createElement("div");return dummy.id="_"+_attr,_css(dummy,{top:1,right:1,width:5,height:5,position:"absolute",zIndex:"2147483647"}),child.parentNode.insertBefore(dummy,child),void flash.publish(dummy,_attr)}}while(child=child.nextSibling);_retry<10&&setTimeout(flash.init,50*++_retry)},publish:function(el,id,opts){opts=opts||{},el.innerHTML=_makeFlashHTML({id,src:_getUrl(api.flashUrl,"r="+api.version),wmode:opts.camera?"":"transparent",flashvars:"callback="+(opts.onEvent||"FileAPI.Flash.onEvent")+"&flashId="+id+"&storeKey="+navigator.userAgent.match(/\d/gi).join("")+"_"+api.version+(flash.isReady||(api.pingUrl?"&ping="+api.pingUrl:""))+"&timeout="+api.flashAbortTimeout+(opts.camera?"&useCamera="+_getUrl(api.flashWebcamUrl):"")+"&debug="+(api.debug?"1":"")})},ready:function(){api.log("FlashAPI.state: ready"),flash.ready=api.F,flash.isReady=!0,flash.patch(),flash.patchCamera&&flash.patchCamera(),api.event.on(document,"mouseover",flash.mouseover),api.event.on(document,"click",(function(evt){flash.mouseover(evt)&&(evt.preventDefault?evt.preventDefault():evt.returnValue=!0)}))},getEl:function(){return document.getElementById("_"+_attr)},getWrapper:function(node){do{if(/js-fileapi-wrapper/.test(node.className))return node}while((node=node.parentNode)&&node!==document.body)},mouseover:function(evt){var target=api.event.fix(evt).target;if(/input/i.test(target.nodeName)&&"file"==target.type&&!target.disabled){var state=target.getAttribute(_attr),wrapper=flash.getWrapper(target);if(api.multiFlash){if("i"==state||"r"==state)return!1;if("p"!=state){target.setAttribute(_attr,"i");var dummy=document.createElement("div");if(!wrapper)return void api.log("[err] FlashAPI.mouseover: js-fileapi-wrapper not found");_css(dummy,{top:0,left:0,width:target.offsetWidth,height:target.offsetHeight,zIndex:"2147483647",position:"absolute"}),wrapper.appendChild(dummy),flash.publish(dummy,api.uid()),target.setAttribute(_attr,"p")}return!0}if(wrapper){var box=function(el){var box=el.getBoundingClientRect(),body=document.body,docEl=(el&&el.ownerDocument).documentElement;return{top:box.top+(window.pageYOffset||docEl.scrollTop)-(docEl.clientTop||body.clientTop||0),left:box.left+(window.pageXOffset||docEl.scrollLeft)-(docEl.clientLeft||body.clientLeft||0),width:box.right-box.left,height:box.bottom-box.top}}(wrapper);_css(flash.getEl(),box),flash.curInp=target}}else/object|embed/i.test(target.nodeName)||_css(flash.getEl(),{top:1,left:1,width:5,height:5})},onEvent:function(evt){var type=evt.type;if("ready"==type){try{flash.getInput(evt.flashId).setAttribute(_attr,"r")}catch(e){}return flash.ready(),setTimeout((function(){flash.mouseenter(evt)}),50),!0}"ping"===type?api.log("(flash -> js).ping:",[evt.status,evt.savedStatus],evt.error):"log"===type?api.log("(flash -> js).log:",evt.target):type in flash&&setTimeout((function(){api.log("FlashAPI.event."+evt.type+":",evt),flash[type](evt)}),1)},mouseenter:function(evt){var node=flash.getInput(evt.flashId);if(node){flash.cmd(evt,"multiple",null!=node.getAttribute("multiple"));var accept=[],exts={};_each((node.getAttribute("accept")||"").split(/,\s*/),(function(mime){api.accept[mime]&&_each(api.accept[mime].split(" "),(function(ext){exts[ext]=1}))})),_each(exts,(function(i,ext){accept.push(ext)})),flash.cmd(evt,"accept",accept.length?accept.join(",")+","+accept.join(",").toUpperCase():"*")}},get:function(id){return document[id]||window[id]||document.embeds[id]},getInput:function(id){if(!api.multiFlash)return flash.curInp;try{var node=flash.getWrapper(flash.get(id));if(node)return node.getElementsByTagName("input")[0]}catch(e){api.log('[err] Can not find "input" by flashId:',id,e)}},select:function(evt){var event,inp=flash.getInput(evt.flashId),uid=api.uid(inp),files=evt.target.files;_each(files,(function(file){api.checkFileObj(file)})),_files[uid]=files,document.createEvent?((event=document.createEvent("Event")).files=files,event.initEvent("change",!0,!0),inp.dispatchEvent(event)):jQuery?jQuery(inp).trigger({type:"change",files}):((event=document.createEventObject()).files=files,inp.fireEvent("onchange",event))},cmd:function(id,name,data,last){try{return api.log("(js -> flash)."+name+":",data),flash.get(id.flashId||id).cmd(name,data)}catch(err){api.log("(js -> flash).onError:",err.toString()),last||setTimeout((function(){flash.cmd(id,name,data,!0)}),50)}},patch:function(){api.flashEngine=!0,_inherit(api,{getFiles:function(input,filter,callback){if(callback)return api.filterFiles(api.getFiles(input),filter,callback),null;var files=api.isArray(input)?input:_files[api.uid(input.target||input.srcElement||input)];return files?(filter&&(filter=api.getFilesFilter(filter),files=api.filter(files,(function(file){return filter.test(file.name)}))),files):this.parent.apply(this,arguments)},getInfo:function(file,fn){if(_isHtmlFile(file))this.parent.apply(this,arguments);else if(file.isShot)fn(null,file.info={width:file.width,height:file.height});else{if(!file.__info){var defer=file.__info=api.defer();flash.cmd(file,"getFileInfo",{id:file.id,callback:_wrap((function _(err,info){_unwrap(_),defer.resolve(err,file.info=info)}))})}file.__info.then(fn)}}}),api.support.transform=!0,api.Image&&_inherit(api.Image.prototype,{get:function(fn,scaleMode){return this.set({scaleMode:scaleMode||"noScale"}),this.parent(fn)},_load:function(file,fn){if(api.log("FlashAPI.Image._load:",file),_isHtmlFile(file))this.parent.apply(this,arguments);else{var _this=this;api.getInfo(file,(function(err){fn.call(_this,err,file)}))}},_apply:function(file,fn){if(api.log("FlashAPI.Image._apply:",file),_isHtmlFile(file))this.parent.apply(this,arguments);else{var m=this.getMatrix(file.info),doneFn=fn;flash.cmd(file,"imageTransform",{id:file.id,matrix:m,callback:_wrap((function _(err,base64){api.log("FlashAPI.Image._apply.callback:",err),_unwrap(_),err?doneFn(err):api.support.html5||api.support.dataURI&&!(base64.length>3e4)?(m.filter&&(doneFn=function(err,img){err?fn(err):api.Image.applyFilter(img,m.filter,(function(){fn(err,this.canvas)}))}),api.newImage("data:"+file.type+";base64,"+base64,doneFn)):_makeFlashImage({width:m.deg%180?m.dh:m.dw,height:m.deg%180?m.dw:m.dh,scale:m.scaleMode},base64,doneFn)}))})}},toData:function(fn){var file=this.file,info=file.info,matrix=this.getMatrix(info);api.log("FlashAPI.Image.toData"),_isHtmlFile(file)?this.parent.apply(this,arguments):("auto"==matrix.deg&&(matrix.deg=api.Image.exifOrientation[info&&info.exif&&info.exif.Orientation]||0),fn.call(this,!file.info,{id:file.id,flashId:file.flashId,name:file.name,type:file.type,matrix}))}}),api.Image&&_inherit(api.Image,{fromDataURL:function(dataURL,size,callback){!api.support.dataURI||dataURL.length>3e4?_makeFlashImage(api.extend({scale:"exactFit"},size),dataURL.replace(/^data:[^,]+,/,""),(function(err,el){callback(el)})):this.parent(dataURL,size,callback)}}),_inherit(api.Form.prototype,{toData:function(fn){for(var items=this.items,i=items.length;i--;)if(items[i].file&&_isHtmlFile(items[i].blob))return this.parent.apply(this,arguments);api.log("FlashAPI.Form.toData"),fn(items)}}),_inherit(api.XHR.prototype,{_send:function(options,formData){if(formData.nodeName||formData.append&&api.support.html5||api.isArray(formData)&&"string"==typeof formData[0])return this.parent.apply(this,arguments);var flashId,fileId,data={},files={},_this=this;if(_each(formData,(function(item){item.file?(files[item.name]=item=_getFileDescr(item.blob),fileId=item.id,flashId=item.flashId):data[item.name]=item.blob})),fileId||(flashId=_attr),!flashId)return api.log("[err] FlashAPI._send: flashId -- undefined"),this.parent.apply(this,arguments);api.log("FlashAPI.XHR._send: "+flashId+" -> "+fileId),_this.xhr={headers:{},abort:function(){flash.cmd(flashId,"abort",{id:fileId})},getResponseHeader:function(name){return this.headers[name]},getAllResponseHeaders:function(){return this.headers}};var queue=api.queue((function(){flash.cmd(flashId,"upload",{url:_getUrl(options.url.replace(/([a-z]+)=(\?)&?/i,"")),data,files:fileId?files:null,headers:options.headers||{},callback:_wrap((function upload(evt){var type=evt.type,result=evt.result;api.log("FlashAPI.upload."+type),"progress"==type?(evt.loaded=Math.min(evt.loaded,evt.total),evt.lengthComputable=!0,options.progress(evt)):"complete"==type?(_unwrap(upload),"string"==typeof result&&(_this.responseText=result.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%")),_this.end(evt.status||200)):"abort"!=type&&"error"!=type||(_this.end(evt.status||0,evt.message),_unwrap(upload))}))})}));_each(files,(function(file){queue.inc(),api.getInfo(file,queue.next)})),queue.check()}})}};function _makeFlashHTML(opts){return('').replace(/#(\w+)#/gi,(function(a,name){return opts[name]}))}function _css(el,css){var key,val;if(el&&el.style)for(key in css){"number"==typeof(val=css[key])&&(val+="px");try{el.style[key]=val}catch(e){}}}function _inherit(obj,methods){_each(methods,(function(fn,name){var prev=obj[name];obj[name]=function(){return this.parent=prev,fn.apply(this,arguments)}}))}function _isHtmlFile(file){return file&&!file.flashId}function _wrap(fn){var id=fn.wid=api.uid();return flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{flash._fn[fn.wid]=null,delete flash._fn[fn.wid]}catch(e){}}function _getUrl(url,params){if(!_rhttp.test(url)){if(/^\.\//.test(url)||"/"!=url.charAt(0)){var path=location.pathname;url=((path=path.substr(0,path.lastIndexOf("/")))+"/"+url).replace("/./","/")}"//"!=url.substr(0,2)&&(url="//"+location.host+url),_rhttp.test(url)||(url=location.protocol+url)}return params&&(url+=(/\?/.test(url)?"&":"?")+params),url}function _makeFlashImage(opts,base64,fn){var key,flashId=api.uid(),el=document.createElement("div"),attempts=10;for(key in opts)el.setAttribute(key,opts[key]),el[key]=opts[key];_css(el,opts),opts.width="100%",opts.height="100%",el.innerHTML=_makeFlashHTML(api.extend({id:flashId,src:_getUrl(api.flashImageUrl,"r="+api.uid()),wmode:"opaque",flashvars:"scale="+opts.scale+"&callback="+_wrap((function _(){return _unwrap(_),--attempts>0&&function(){try{flash.get(flashId).setImage(base64)}catch(e){api.log('[err] FlashAPI.Preview.setImage -- can not set "base64":',e)}}(),!0}))},opts)),fn(!1,el),el=null}function _getFileDescr(file){return{id:file.id,name:file.name,matrix:file.matrix,flashId:file.flashId}}api.Flash=flash,api.newImage("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",(function(err,img){api.support.dataURI=!(1!=img.width||1!=img.height),flash.init()}))}()}(window,window.jQuery,FileAPI),function(window,jQuery,api){"use strict";var _each=api.each,_cameraQueue=[];!api.support.flash||!api.media||api.support.media&&api.html5&&!api.insecureChrome||function(){function _wrap(fn){var id=fn.wid=api.uid();return api.Flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{api.Flash._fn[fn.wid]=null,delete api.Flash._fn[fn.wid]}catch(e){}}var flash=api.Flash;api.extend(api.Flash,{patchCamera:function(){api.Camera.fallback=function(el,options,callback){var camId=api.uid();api.log("FlashAPI.Camera.publish: "+camId),flash.publish(el,camId,api.extend(options,{camera:!0,onEvent:_wrap((function _(evt){"camera"===evt.type&&(_unwrap(_),evt.error?(api.log("FlashAPI.Camera.publish.error: "+evt.error),callback(evt.error)):(api.log("FlashAPI.Camera.publish.success: "+camId),callback(null)))}))}))},_each(_cameraQueue,(function(args){api.Camera.fallback.apply(api.Camera,args)})),_cameraQueue=[],api.extend(api.Camera.prototype,{_id:function(){return this.video.id},start:function(callback){var _this=this;flash.cmd(this._id(),"camera.on",{callback:_wrap((function _(evt){_unwrap(_),evt.error?(api.log("FlashAPI.camera.on.error: "+evt.error),callback(evt.error,_this)):(api.log("FlashAPI.camera.on.success: "+_this._id()),_this._active=!0,callback(null,_this))}))})},stop:function(){this._active=!1,flash.cmd(this._id(),"camera.off")},shot:function(){api.log("FlashAPI.Camera.shot:",this._id());var shot=api.Flash.cmd(this._id(),"shot",{});return shot.type="image/png",shot.flashId=this._id(),shot.isShot=!0,new api.Camera.Shot(shot)}})}}),api.Camera.fallback=function(){_cameraQueue.push(arguments)}}()}(window,window.jQuery,FileAPI),"function"==typeof define&&define.amd&&define("FileAPI",[],(function(){return FileAPI})),function(){Ext.namespace("MODx.util.MultiUploadDialog");var maxFileSize=parseInt(MODx.config.upload_maxsize,10),permittedFileTypes=MODx.config.upload_files.toLowerCase().split(",");FileAPI.debug=!1,FileAPI.support.flash=!1,FileAPI.staticPath=MODx.config.manager_url+"assets/fileapi/";var api={humanFileSize:function(bytes,si){var thresh=si?1e3:1024;if(bytes=thresh);return bytes.toFixed(1)+" "+units[u]},getFileExtension:function(filename){var result="",parts=filename.split(".");return parts.length>1&&(result=parts.pop()),result},isFileSizePermitted:function(size){return size<=maxFileSize},formatBytes:function(size,unit){return unit=unit||FileAPI.MB,Math.round(100*(size/unit+1e-5))/100},isFileTypePermitted:function(filename,extensions){var ext=this.getFileExtension(filename);return extensions.indexOf(ext.toLowerCase())>-1}};MODx.util.MultiUploadDialog.Upload=function(config){Ext.applyIf(config,{url:MODx.config.connector_url,permitted_extensions:permittedFileTypes,base_params:{action:"Browser/File/Upload",wctx:MODx.ctx||"",source:1}}),MODx.util.MultiUploadDialog.Upload.superclass.constructor.call(this,config)},Ext.extend(MODx.util.MultiUploadDialog.Upload,Ext.Component,{errors:{},initComponent:function(){this.input_file=document.createElement("input"),this.input_file.type="file",this.input_file.name=this.input_name||Ext.id(this.el),this.input_file.hidden=!0,this.input_file.multiple=!0,this.input_file.accept="."+this.permitted_extensions.join(",."),this.input_file.addEventListener("change",this.onInputFileChange.bind(this)),this.input_file.addEventListener("click",(function(e){e.stopPropagation()})),document.getElementsByTagName("body")[0].appendChild(this.input_file)},addDropZone:function(dnd,browser){var el=dnd.getEl().dom,upload=this;el.className+=" drag-n-drop",FileAPI.event.dnd(el,(function(over){over?el.className.match(/drag-over/)||(el.className+=" drag-over"):el.className=el.className.replace(" drag-over","")}),(function(files){upload.startUpload(files,browser)}))},setBaseParams:function(params){this.base_params=Ext.apply(this.base_params,params)},show:function(){this.fireEvent("show"),this.input_file.click()},onInputFileChange:function(e){var files=FileAPI.getFiles(e);this.input_file.value="",this.startUpload(files,this.browser)},startUpload:function(files,browser){var upload=this,approved=[];if(this.fireEvent("beforeupload",files),FileAPI.each(files,(function(file){api.isFileSizePermitted(file.size)?api.isFileTypePermitted(file.name,upload.permitted_extensions)?approved.push(file):upload.addError(file.name,_("upload.notpermitted.extension",{ext:api.getFileExtension(file.name)})):upload.addError(file.name,_("upload.notpermitted.filesize",{size:api.humanFileSize(file.size),max:api.humanFileSize(maxFileSize)}))})),!approved.length)return this.showErrors(),!1;this.progress=Ext.MessageBox.progress(_("please_wait")),FileAPI.upload({url:this.url,data:Ext.apply(this.base_params,{HTTP_MODAUTH:MODx.siteId}),files:{file:approved},fileprogress:function(e,file){upload.progress&&(upload.progress.updateText(file.name),upload.progress.updateProgress(e.loaded/e.total))},filecomplete:function(err,xhr,file){if(err)401!==xhr.status&&(upload.fireEvent("uploadfailed",err,xhr,file),MODx.msg.alert(_("upload.msg.title.error"),err));else{var r=Ext.util.JSON.decode(xhr.response);r.success||upload.addError(file.name,r.message)}},complete:function(err,xhr){err?upload.fireEvent("uploadfailed",xhr):(upload.fireEvent("uploadsuccess"),upload.progress&&upload.progress.hide(),void 0!==browser&&void 0!==browser.run&&browser.run()),upload.showErrors()}})},addError:function(key,message){this.errors[key]=message},showErrors:function(){var errors="";for(var i in this.errors)this.errors.hasOwnProperty(i)&&(errors+=this.errors[i]+"
");""!=errors&&MODx.msg.alert(_("error"),errors),this.errors={}}}),MODx.util.MultiUploadDialog.BrowseButton=Ext.extend(Ext.Button,{input_name:"file",input_file:null,original_handler:null,original_scope:null,initComponent:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.initComponent.call(this),this.original_handler=this.handler||null,this.original_scope=this.scope||window,this.handler=null,this.scope=null},onRender:function(ct,position){MODx.util.MultiUploadDialog.BrowseButton.superclass.onRender.call(this,ct,position),this.createInputFile()},createInputFile:function(){var button_container=this.el.child("button").wrap();this.input_file=button_container.createChild({tag:"input",type:"file",size:1,name:this.input_name||Ext.id(this.el),style:"cursor: pointer; display: inline-block; opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%;",multiple:!0}),this.handleMouseEvents&&(this.input_file.on("mouseover",this.onMouseOver,this),this.input_file.on("mousedown",this.onMouseDown,this)),this.tooltip&&("object"==typeof this.tooltip?Ext.QuickTips.register(Ext.apply({target:this.input_file},this.tooltip)):this.input_file.dom[this.tooltipType]=this.tooltip),this.input_file.on("change",this.onInputFileChange,this),this.input_file.on("click",(function(e){e.stopPropagation()}))},detachInputFile:function(no_create){var result=this.input_file;return"object"==typeof this.tooltip?Ext.QuickTips.unregister(this.input_file):this.input_file.dom[this.tooltipType]=null,this.input_file.removeAllListeners(),this.input_file=null,result},getInputFile:function(){return this.input_file},disable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.disable.call(this),this.input_file.dom.disabled=!0},enable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.enable.call(this),this.input_file.dom.disabled=!1},destroy:function(){var input_file=this.detachInputFile(!0);input_file.remove(),input_file=null,MODx.util.MultiUploadDialog.BrowseButton.superclass.destroy.call(this)},reset:function(){var form=new Ext.Element(document.createElement("form")),buttonParent=this.input_file.parent();form.appendChild(this.input_file),form.dom.reset(),buttonParent.appendChild(this.input_file)},onInputFileChange:function(ev){this.original_handler&&this.original_handler.call(this.original_scope,this,ev),this.fireEvent("click",this,ev)}}),Ext.reg("multiupload-browse-btn",MODx.util.MultiUploadDialog.BrowseButton),MODx.util.MultiUploadDialog.FilesGrid=function(config){config=config||{},Ext.applyIf(config,{height:300,autoScroll:!0,border:!1,fields:["name","size","file","permitted","message","uploaded"],paging:!1,remoteSort:!1,viewConfig:{forceFit:!0,getRowClass:function(record,index,rowParams){return record.get("permitted")?record.get("uploaded")?"upload-success":void 0:"upload-error"}},sortInfo:{field:"name",direction:"ASC"},deferRowRender:!0,anchor:"100%",autoExpandColumn:"state",columns:[{header:_("upload.columns.file"),dataIndex:"name",sortable:!0,width:200,renderer:function(value,meta,record){var id=Ext.id();return FileAPI.Image(record.get("file")).resize(100,50,"max").get((function(err,img){err||(img=new Ext.Element(img).addClass("upload-thumb"),Ext.get(id).insertFirst(img))})),'

'+value+"

"}},{header:_("upload.columns.state"),id:"state",width:100,renderer:function(value,meta,record){if(!record.get("permitted")||record.get("uploaded"))return'

'+record.get("message")+"

";var id=Ext.id();return function(){record.progressbar=new Ext.ProgressBar({renderTo:id,value:0,text:"0 / "+record.get("size")})}.defer(25),'
'}}],getMenu:function(){return[{text:_("upload.contextmenu.remove_entry"),handler:this.removeFile}]}}),MODx.util.MultiUploadDialog.FilesGrid.superclass.constructor.call(this,config)},Ext.extend(MODx.util.MultiUploadDialog.FilesGrid,MODx.grid.LocalGrid,{removeFile:function(){var selected=this.getSelectionModel().getSelections();this.getStore().remove(selected)}}),Ext.reg("multiupload-grid-files",MODx.util.MultiUploadDialog.FilesGrid),MODx.util.MultiUploadDialog.Dialog=function(config){this.filesGridId=Ext.id(),config=config||{},Ext.applyIf(config,{permitted_extensions:permittedFileTypes,autoHeight:!0,width:600,closeAction:"hide",layout:"anchor",listeners:{show:{fn:this.onShow},hide:{fn:this.onHide}},items:[{xtype:"multiupload-grid-files",id:this.filesGridId,anchor:"100%"}],buttons:[{xtype:"multiupload-browse-btn",text:_("upload.buttons.choose"),cls:"primary-button",listeners:{click:{scope:this,fn:function(btn,ev){var files=FileAPI.getFiles(ev);this.addFiles(files),btn.reset()}}}},{xtype:"splitbutton",text:_("upload.buttons.clear"),listeners:{click:{scope:this,fn:this.clearStore}},menu:new Ext.menu.Menu({items:[{text:_("upload.clear_list.all"),listeners:{click:{scope:this,fn:this.clearStore}}},{text:_("upload.clear_list.notpermitted"),listeners:{click:{scope:this,fn:this.clearNotPermittedItems}}}]})},{xtype:"button",text:_("upload.buttons.upload"),cls:"primary-button",listeners:{click:{scope:this,fn:this.startUpload}}},{xtype:"button",text:_("upload.buttons.close"),listeners:{click:{scope:this,fn:this.hideDialog}}}]}),MODx.util.MultiUploadDialog.Dialog.superclass.constructor.call(this,config)};var originalWindowOnShow=Ext.Window.prototype.onShow,originalWindowOnHide=Ext.Window.prototype.onHide;Ext.extend(MODx.util.MultiUploadDialog.Dialog,Ext.Window,{addFiles:function(files){var store=Ext.getCmp(this.filesGridId).getStore(),dialog=this;FileAPI.each(files,(function(file){var permitted=!0,message="";api.isFileSizePermitted(file.size)||(message=_("upload.notpermitted.filesize",{size:api.humanFileSize(file.size),max:api.humanFileSize(maxFileSize)}),permitted=!1),api.isFileTypePermitted(file.name,dialog.permitted_extensions)||(message=_("upload.notpermitted.extension",{ext:api.getFileExtension(file.name)}),permitted=!1);var data={name:file.name,size:api.humanFileSize(file.size),file,permitted,message,uploaded:!1},p=new store.recordType(data);store.insert(0,p)}))},startUpload:function(){var dialog=this,files=[],params=Ext.apply(this.base_params,{HTTP_MODAUTH:MODx.siteId});Ext.getCmp(this.filesGridId).getStore().each((function(){var file=this.get("file");this.get("permitted")&&!this.get("uploaded")&&(file.record=this,files.push(file))}));FileAPI.upload({url:this.url,data:params,files:{file:files},fileprogress:function(evt,file){file.record.progressbar.updateProgress(evt.loaded/evt.total,_("upload.upload_progress",{loaded:api.humanFileSize(evt.loaded),total:file.record.get("size")}),!0)},filecomplete:function(err,xhr,file,options){if(err)401!==xhr.status&&MODx.msg.alert(_("upload.msg.title.error"),err);else{var resp=Ext.util.JSON.decode(xhr.response);resp.success?(file.record.set("uploaded",!0),file.record.set("message",_("upload.upload.success"))):(file.record.set("permitted",!1),file.record.set("message",resp.message))}},complete:function(err,xhr){dialog.fireEvent("uploadsuccess")}})},removeEntry:function(record){Ext.getCmp(this.filesGridId).getStore().remove(record)},clearStore:function(){Ext.getCmp(this.filesGridId).getStore().removeAll()},clearNotPermittedItems:function(){var store=Ext.getCmp(this.filesGridId).getStore(),notPermitted=store.query("permitted",!1);store.remove(notPermitted.getRange())},hideDialog:function(){this.hide()},onDDrag:function(ev){ev&&ev.preventDefault()},onDDrop:function(ev){ev&&ev.preventDefault();var dialog=this;FileAPI.getDropFiles(ev.browserEvent,(function(files){files.length&&dialog.addFiles(files)}))},onShow:function(){var ret=originalWindowOnShow.apply(this,arguments),store=Ext.getCmp(this.filesGridId).getStore();return store.removeAll(),this.isDDSet||(this.el.on("dragenter",this.onDDrag,this),this.el.on("dragover",this.onDDrag,this),this.el.on("dragleave",this.onDDrag,this),this.el.on("drop",this.onDDrop,this),this.isDDSet=!0),ret},onHide:function(){var ret=originalWindowOnHide.apply(this,arguments);return this.el.un("dragenter",this.onDDrag,this),this.el.un("dragover",this.onDDrag,this),this.el.un("dragleave",this.onDDrag,this),this.el.un("drop",this.onDDrop,this),this.isDDSet=!1,ret},setBaseParams:function(params){this.base_params=params,this.setTitle(_("upload.title.destination_path",{path:this.base_params.path}))}}),Ext.reg("multiupload-window-dialog",MODx.util.MultiUploadDialog.Dialog)}(),Ext.namespace("MODx.tree"),MODx.tree.Tree=function(config){var tl,root;if(config=config||{},Ext.applyIf(config,{baseParams:{},action:"getNodes",loaderConfig:{}}),config.action&&(config.baseParams.action=config.action),config.loaderConfig.dataUrl=config.url,config.loaderConfig.baseParams=config.baseParams,Ext.applyIf(config.loaderConfig,{preloadChildren:!0,clearOnLoad:!0}),this.config=config,this.config.url?((tl=new MODx.tree.TreeLoader(config.loaderConfig)).on("beforeload",(function(l,node){tl.dataUrl=this.config.url+"?action="+this.config.action+"&id="+node.attributes.id,node.attributes.type&&(tl.dataUrl+="&type="+node.attributes.type)}),this),tl.on("load",this.onLoad,this),root={nodeType:"async",text:config.root_name||config.rootName||"",qtip:config.root_qtip||config.rootQtip||"",draggable:!1,id:config.root_id||config.rootId||"root",pseudoroot:!0,attributes:{pseudoroot:!0},cls:"tree-pseudoroot-node",iconCls:config.root_iconCls||config.rootIconCls||""}):(tl=new Ext.tree.TreeLoader({preloadChildren:!0,baseAttrs:{uiProvider:MODx.tree.CheckboxNodeUI}}),root=new Ext.tree.TreeNode({text:this.config.rootName||"",draggable:!1,id:this.config.rootId||"root",children:this.config.data||[],pseudoroot:!0})),Ext.applyIf(config,{useArrows:!0,autoScroll:!0,animate:!0,enableDD:!0,enableDrop:!0,ddAppendOnly:!1,containerScroll:!0,collapsible:!0,border:!1,autoHeight:!0,rootVisible:!0,loader:tl,header:!1,hideBorders:!0,bodyBorder:!1,cls:"modx-tree",root,preventRender:!1,stateful:!0,menuConfig:{defaultAlign:"tl-b?",enableScrolling:!1,listeners:{show:function(){var node=this.activeNode;node&&node.ui.addClass("x-tree-selected")},hide:function(){var node=this.activeNode;node&&(node.isSelected()||node.ui&&node.ui.removeClass("x-tree-selected"))}}}}),!0!==config.remoteToolbar||void 0!==config.tbar&&null!==config.tbar){var tb=this.getToolbar();if(config.tbar&&config.useDefaultToolbar)for(var i=0;i150&&(w=this.config.width),el.setWidth(w),this.doLayout()}},setup:function(config){config.listeners=config.listeners||{},config.listeners.render={fn:function(){!1===config.autoExpandRoot&&config.hasOwnProperty("autoExpandRoot")||this.root.expand();var tl=this.getLoader();Ext.apply(tl,{fullMask:new Ext.LoadMask(this.getEl())}),tl.fullMask.removeMask=!1,tl.on({load:function(){this.fullMask.hide()},loadexception:function(){this.fullMask.hide()},beforeload:function(){this.fullMask.show()},scope:tl})},scope:this},MODx.tree.Tree.superclass.constructor.call(this,config),this.addEvents("afterSort","beforeSort","refresh"),this.cm=new Ext.menu.Menu(config.menuConfig),this.on("contextmenu",this._showContextMenu,this),this.on("beforenodedrop",this._handleDrop,this),this.on("nodedragover",this._handleDrop,this),this.on("nodedrop",this._handleDrag,this),this.on("click",this._saveState,this),this.on("contextmenu",this._saveState,this),this.on("click",this._handleClick,this),this.treestate_id=this.config.id||Ext.id(),this.on("load",this._initExpand,this,{single:!0}),this.on("expandnode",this._saveState,this),this.on("collapsenode",this._saveState,this),this.on("expandnode",(function(){var cnt=Ext.getCmp("modx-content");cnt&&cnt.doLayout()}),this)},_initExpand:function(){var treeState=Ext.state.Manager.get(this.treestate_id);if(Ext.isEmpty(treeState)&&this.root)this.root.expand(),this.root.firstChild&&this.config.expandFirst&&this.root.firstChild.expand();else for(var i=0;i"+node.attributes.text+"",target:this}),node,handler:function(btn,evt){evt.stopPropagation(evt),node.getOwnerTree().handleDirectCreateClick(node)},iconCls:"icon-plus-circle",renderTo:elId,listeners:{mouseover:function(button,e){button.tooltip.onTargetOver(e)},mouseout:function(button,e){button.tooltip.onTargetOut(e)}}})}},_showContextMenu:function(node,e){var m;this.cm.activeNode=node,this.cm.removeAll();var handled=!1;if(!Ext.isEmpty(node.attributes.treeHandler)||node.isRoot&&!Ext.isEmpty(node.childNodes[0].attributes.treeHandler)){var h=Ext.getCmp(node.isRoot?node.childNodes[0].attributes.treeHandler:node.attributes.treeHandler);h&&(node.isRoot&&(node.attributes.type="root"),m=h.getMenu(this,node,e),handled=!0)}handled||(this.getMenu?m=this.getMenu(node,e):node.attributes.menu&&node.attributes.menu.items&&(m=node.attributes.menu.items)),m&&m.length>0&&(this.addContextMenuItem(m),this.cm.showAt(e.xy)),e.preventDefault(),e.stopEvent()},hasNode:function(t,n){return t.findChild("id",n.id)||!0===t.leaf&&t.parentNode.findChild("id",n.id)},refresh:function(func,scope,args){var treeState=Ext.state.Manager.get(this.treestate_id);return this.root.reload(),this.fireEvent("refresh",{}),void 0===treeState?this.root.expand():Ext.isArray(treeState)&&Ext.each(treeState,(function(path,idx){this.expandPath(path)}),this),func&&(scope=scope||this,args=args||[],this.root.on("load",(function(){Ext.callback(func,scope,args)}),scope)),!0},removeChildren:function(node){for(;node.firstChild;){var c=node.firstChild;node.removeChild(c),c.destroy()}},loadRemoteData:function(data){for(var c in this.removeChildren(this.getRootNode()),data)"object"==typeof data[c]&&this.getRootNode().appendChild(data[c])},reloadNode:function(n){this.getLoader().load(n),n.expand()},remove:function(text,substr,split){if(this.destroying)return MODx.tree.Tree.superclass.remove.apply(this,arguments);var node=this.cm.activeNode,id=this._extractId(node.id,substr,split),p={action:this.config.removeAction||"remove"},pk=this.config.primaryKey||"id";p[pk]=id,MODx.msg.confirm({title:this.config.removeTitle||_("warning"),text:_(text),url:this.config.url,params:p,listeners:{success:{fn:this.refresh,scope:this}}})},_extractId:function(id,substr,split){return split=split||!1,!1!==(substr=substr||!1)&&(id=node.id.substr(substr)),!1!==split&&(id=(id=node.id.split("_"))[split]),id},expandNodes:function(){this.root&&(this.root.expand(),this.root.expandChildNodes(!0))},collapseNodes:function(){this.root&&(this.root.collapseChildNodes(!0),this.root.collapse())},_saveState:function(n){if(!this.stateful)return!0;var i,s=Ext.state.Manager.get(this.treestate_id),p=n.getPath();if(s=Ext.isObject(s)||Ext.isArray(s)?s.slice():[s],!Ext.isEmpty(p)&&null!=p){if(n.expanded){if(Ext.isString(p)&&-1===s.indexOf(p)){var sr,f=!1;for(i=0;is[i].length&&(f=!0):s.splice(i,1);f||s.push(p)}}else for(s=s.remove(p),i=0;i{let node=this.getNodeById(encodeURIComponent(dir));node||(node=this.getRootNode()),node.select(),this.cm.activeNode=node}))}}),Ext.reg("modx-tree",MODx.tree.Tree),window.BTNS=[],MODx.tree.TreeLoader=function(config){(config=config||{}).id=config.id||Ext.id(),Ext.applyIf(config,{}),MODx.tree.TreeLoader.superclass.constructor.call(this,config)},Ext.extend(MODx.tree.TreeLoader,Ext.tree.TreeLoader,{processResponse:function(response,node,callback,scope){var json=response.responseText;if("string"==typeof json&&(json=Ext.decode(json)),void 0!==json.results?response.responseText=Ext.encode(json.results):void 0!==json.object&&(response.responseText=Ext.encode(json.object)),void 0!==json.success&&void 0!==json.message&&0==json.success){if("object"==typeof json.message){var msg=[];for(var i in json.message)json.message.hasOwnProperty(i)&&msg.push(json.message[i]);json.message=msg.join("\n")}MODx.msg.alert(_("alert"),json.message)}Ext.tree.TreeLoader.prototype.processResponse.call(this,response,node,callback,scope)}}),Ext.reg("modx-tree-treeloader",MODx.tree.TreeLoader),Ext.dd.DragDropMgr.getZIndex=function(element){var z,body=document.body,zIndex=-1,overTargetEl=element;for(element=Ext.getDom(element);element!==body;){if(!element){this._remove(overTargetEl);break}isNaN(z=Number(Ext.fly(element).getStyle("zIndex")))||(zIndex=z),element=element.parentNode}return zIndex},MODx.TreeDrop=function(config){config=config||{},Ext.applyIf(config,{id:"modx-treedrop",ddGroup:"modx-treedrop-dd"}),MODx.TreeDrop.superclass.constructor.call(this,config),this.config=config,this.setup()},Ext.extend(MODx.TreeDrop,Ext.Component,{setup:function(){var ddTarget=this.config.target,ddTargetEl=this.config.targetEl,cfg=this.config;this.targetEl=new Ext.dd.DropTarget(this.config.targetEl,{ddGroup:this.config.ddGroup,notifyEnter:function(ddSource,e,data){if(ddTarget.getEl){var el=ddTarget.getEl();el&&el.isVisible()&&(el.frame(),el.focus())}},notifyDrop:function(ddSource,e,data){if(!data.node||!data.node.attributes||!data.node.attributes.type)return!1;if("MODX\\Revolution\\modResource"!=data.node.attributes.type&&1!=data.node.attributes.leaf)return!1;var v="",win=!1;switch(data.node.attributes.type){case"MODX\\Revolution\\modResource":v="[[~"+data.node.attributes.pk+"]]";break;case"snippet":case"chunk":case"tv":win=!0;break;case"file":v=data.node.attributes.url;break;default:var dh=Ext.getCmp(data.node.attributes.type+"-drop-handler");return!!dh&&dh.handle(data,{ddTargetEl,cfg,iframe:cfg.iframe,iframeEl:cfg.iframeEl,onInsert:cfg.onInsert,panel:cfg.panel})}if(win)MODx.loadInsertElement({pk:data.node.attributes.pk,classKey:data.node.attributes.classKey,name:data.node.attributes.name,output:v,ddTargetEl,cfg,iframe:cfg.iframe,iframeEl:cfg.iframeEl,onInsert:cfg.onInsert,panel:cfg.panel});else if(cfg.iframe)MODx.insertForRTE(v,cfg);else{var el=Ext.get(ddTargetEl);if("modx-static-content"==el.dom.id&&(v=v.substring(1),Ext.getCmp(el.dom.id).setValue("")),"modx-symlink-content"==el.dom.id||"modx-weblink-content"==el.dom.id)Ext.getCmp(el.dom.id).setValue(""),void 0!==typeof data.node.attributes.pk&&void 0!==data.node.attributes.pk?MODx.insertAtCursor(ddTargetEl,data.node.attributes.pk,cfg.onInsert):MODx.insertAtCursor(ddTargetEl,v,cfg.onInsert);else if("modx-resource-parent"==el.dom.id){v=data.node.attributes.pk;var p,pf=Ext.getCmp("modx-resource-parent");if(v==pf.currentid)return MODx.msg.alert("",_("resource_err_own_parent")),!1;pf.setValue(v),Ext.getCmp(pf.parentcmp).setValue(v),(p=Ext.getCmp(pf.formpanel))&&p.markDirty()}else MODx.insertAtCursor(ddTargetEl,v,cfg.onInsert);if(cfg.panel)(p=Ext.getCmp(cfg.panel))&&p.markDirty()}return!0}}),this.targetEl.addToGroup("modx-treedrop-elements-dd"),this.targetEl.addToGroup("modx-treedrop-sources-dd")}}),Ext.reg("modx-treedrop",MODx.TreeDrop),MODx.loadInsertElement=function(r){MODx.InsertElementWindow&&(MODx.InsertElementWindow.hide(),MODx.InsertElementWindow.destroy()),MODx.InsertElementWindow=MODx.load({xtype:"modx-window-insert-element",record:r,listeners:{success:{fn:function(){},scope:this},hide:{fn:function(){this.destroy()}}}}),MODx.InsertElementWindow.setValues(r),MODx.InsertElementWindow.show()},MODx.insertAtCursor=function(myField,myValue,h){if(!Ext.isEmpty(h)){var z=h(myValue);null!=z&&(myValue=z)}if(myField.blur(),document.selection)sel=document.selection.createRange(),sel.text=myValue;else if(myField.selectionStart||"0"==myField.selectionStart){var startPos=myField.selectionStart,endPos=myField.selectionEnd;myField.value=myField.value.substring(0,startPos)+myValue+myField.value.substring(endPos,myField.value.length),myField.selectionStart=startPos+myValue.length,myField.selectionEnd=myField.selectionStart}else myField.value+=myValue;myField.focus()},MODx.insertForRTE=function(v,cfg){var fn=cfg.onInsert||!1;if(fn)fn(v,cfg);else{if("object"==typeof cfg.iframeEl)var doc=cfg.iframeEl;else doc=window.frames[0].document.getElementById(cfg.iframeEl);doc.value?doc.value=doc.value+v:doc.innerHTML=doc.innerHTML+v}},MODx.insertIntoContent=function(v,opt){opt.iframe?MODx.insertForRTE(v,opt.cfg):MODx.insertAtCursor(opt.ddTargetEl,v)},MODx.window.InsertElement=function(config){config=config||{};var resourceCmp=Ext.get("modx-resource-id"),resourceId=null!==resourceCmp?resourceCmp.getValue():0;Ext.applyIf(config,{title:_("select_el_opts"),id:"modx-window-insert-element",width:522,labelAlign:"left",labelWidth:160,url:MODx.config.connector_url,action:"Element/Template/Create",fields:[{xtype:"hidden",name:"pk",id:"modx-dise-pk"},{xtype:"hidden",name:"classKey",id:"modx-dise-classkey"},{xtype:"xcheckbox",fieldLabel:_("cached"),name:"cached",id:"modx-dise-cached",inputValue:1,checked:!0},{xtype:"modx-combo-property-set",fieldLabel:_("property_set"),name:"propertyset",id:"modx-dise-propset",width:300,baseParams:{action:"Element/PropertySet/GetList",showAssociated:!0,elementId:config.record.pk,elementType:config.record.classKey},listeners:{render:{fn:function(){Ext.getCmp("modx-dise-propset").getStore().load(),Ext.getCmp("modx-dise-propset").value="0"},scope:this},select:{fn:this.changePropertySet,scope:this}}},{id:"modx-dise-proplist",autoLoad:{url:MODx.config.connector_url,params:{action:"Element/GetInsertProperties",classKey:config.record.classKey,pk:config.record.pk,resourceId,propertySet:0},scripts:!0,callback:this.onPropFormLoad,scope:this},style:"display: none;"},{xtype:"fieldset",title:_("properties"),height:.6*Ext.getBody().getViewSize().height,collapsible:!0,autoScroll:!0,items:[{html:'
',id:"modx-iprops-container"}]}],modps:[]}),MODx.window.InsertElement.superclass.constructor.call(this,config),this.on("show",(function(){this.center(),this.mask=new Ext.LoadMask(Ext.get("modx-iprops-container"),{msg:_("loading")}),this.mask.show()}),this)},Ext.extend(MODx.window.InsertElement,MODx.Window,{changePropertySet:function(cb){var fp=Ext.getCmp("modx-iprops-fp");fp&&fp.destroy();var resourceCmp=Ext.get("modx-resource-id"),resourceId=null!==resourceCmp?resourceCmp.getValue():0;Ext.getCmp("modx-dise-proplist").getUpdater().update({url:MODx.config.connector_url,params:{action:"Element/GetInsertProperties",classKey:this.config.record.classKey,pk:this.config.record.pk,resourceId,propertySet:cb.getValue()},scripts:!0,callback:this.onPropFormLoad,scope:this}),this.modps=[],this.mask.show()},createStore:function(data){return new Ext.data.SimpleStore({fields:["v","d"],data})},onPropFormLoad:function(el,s,r){this.mask.hide();var vs=Ext.decode(r.responseText);if(!vs||vs.length<=0)return!1;for(var i=0;i{const deletedCount=+data.object.deletedCount;Ext.getCmp("modx-trash-link")?.updateState(deletedCount);const nodeUI=node.getUI();nodeUI.addClass("deleted"),node.cascade((childNode=>childNode.getUI().addClass("deleted")),this),Ext.getCmp("modx-trash-resources")?.refresh(),Ext.get(nodeUI.getEl()).frame();const updatePanel=Ext.getCmp("modx-panel-resource");updatePanel&&"resource/update"===MODx.request.a&&MODx.request.id===id&&updatePanel.handleDeleted(!0)},scope:this}}})},undeleteDocument:function(){const node=this.cm.activeNode,id=node.id.split("_")[1];MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Resource/Undelete",id},listeners:{success:{fn:function(response){const deletedCount=+response.object.deletedCount;Ext.getCmp("modx-trash-link")?.updateState(deletedCount);const activeNodeUI=node.getUI();activeNodeUI.removeClass("deleted"),node.cascade((childNode=>childNode.getUI().removeClass("deleted")),this);const trashResourcesPanel=Ext.getCmp("modx-trash-resources");trashResourcesPanel&&trashResourcesPanel.refresh(),Ext.get(activeNodeUI.getEl()).frame();const updatePanel=Ext.getCmp("modx-panel-resource");updatePanel&&"resource/update"===MODx.request.a&&MODx.request.id===id&&updatePanel.handleDeleted(!1)},scope:this}}})},purgeDocument:function(itm,e){const node=this.cm.activeNode,id=node.id.split("_")[1],name=Ext.util.Format.htmlEncode(node.ui.textNode.innerText);MODx.msg.confirm({text:_("resource_purge_confirm",{resource:name+" ("+id+")"}),url:MODx.config.connector_url,params:{action:"Resource/Trash/Purge",ids:id},listeners:{success:{fn:function(data){if("resource/update"===MODx.request.a&&MODx.request.id===id){const updatePanel=Ext.getCmp("modx-panel-resource");return updatePanel&&(updatePanel.warnUnsavedChanges=!1),void MODx.loadPage("?")}Ext.getCmp("modx-trash-link")?.updateState(+data.object.deletedCount),node.remove(),Ext.getCmp("modx-trash-resources")?.refresh(),MODx.msg.status({title:_("success"),message:data.message})},scope:this}}})},publishDocument:function(itm,e){var id=this.cm.activeNode.id.split("_");id=id[1],MODx.msg.confirm({title:_("resource_publish"),text:_("resource_publish_confirm"),url:MODx.config.connector_url,params:{action:"Resource/Publish",id},listeners:{success:{fn:function(){var ui=this.cm.activeNode.getUI();ui.removeClass("unpublished"),Ext.get(ui.getEl()).frame()},scope:this}}})},unpublishDocument:function(itm,e){var id=this.cm.activeNode.id.split("_");id=id[1],MODx.msg.confirm({title:_("resource_unpublish"),text:_("resource_unpublish_confirm"),url:MODx.config.connector_url,params:{action:"Resource/Unpublish",id},listeners:{success:{fn:function(){var ui=this.cm.activeNode.getUI();ui.addClass("unpublished"),Ext.get(ui.getEl()).frame()},scope:this}}})},getDefaultSortBy:function(config){var v="menuindex";Ext.isEmpty(config)||Ext.isEmpty(config.sortBy)?Ext.state.Manager.get(this.treestate_id+"-sort-default")!=MODx.config.tree_default_sort?(v=MODx.config.tree_default_sort,Ext.state.Manager.set(this.treestate_id+"-sort-default",v),Ext.state.Manager.set(this.treestate_id+"-sort",v)):v=Ext.state.Manager.get(this.treestate_id+"-sort")||MODx.config.tree_default_sort:v=config.sortBy;return v},filterSort:function(itm,e){this.getLoader().baseParams={action:this.config.action,sortBy:itm.sortBy,sortDir:itm.sortDir,node:this.cm.activeNode.ide},this.refreshActiveNode()},hideFilter:function(itm,e){this.filterBar.destroy(),this._filterVisible=!1},_handleAfterDrop:function(o,r){var targetNode=o.event.target,dropNode=o.event.dropNode;if("append"==o.event.point&&targetNode){var ui=targetNode.getUI();ui.addClass("haschildren"),ui.removeClass("icon-resource")}if("resource/update"===MODx.request.a){if(dropNode.attributes.pk==MODx.request.id){var parentFieldCmb=Ext.getCmp("modx-resource-parent"),parentFieldHidden=Ext.getCmp("modx-resource-parent-hidden");parentFieldCmb&&parentFieldHidden&&(parentFieldHidden.setValue(dropNode.parentNode.attributes.pk),parentFieldCmb.setValue(dropNode.parentNode.attributes.text.replace(/(<([^>]+)>)/gi,"")))}var menuindexField=Ext.getCmp("modx-resource-menuindex");menuindexField&&void 0!==o.result.object.menuindex&&menuindexField.setValue(o.result.object.menuindex);var isfolderFieldCmb=Ext.getCmp("modx-resource-isfolder");isfolderFieldCmb&&"boolean"==typeof o.result.object.isfolder&&isfolderFieldCmb.setValue(o.result.object.isfolder)}},_handleDrop:function(e){var dropNode=e.dropNode,targetParent=e.target;if(null!==targetParent.findChild("id",dropNode.attributes.id))return!1;if("modContext"==dropNode.attributes.type&&(targetParent.getDepth()>1||targetParent.attributes.id==targetParent.attributes.pk+"_0"&&"append"==e.point))return!1;if("modContext"!==dropNode.attributes.type&&targetParent.getDepth()<=1&&"append"!==e.point)return!1;if(null==MODx.config.resource_classes_drop[targetParent.attributes.classKey]){if(targetParent.attributes.hide_children_in_tree)return!1}else if(0==MODx.config.resource_classes_drop[targetParent.attributes.classKey])return!1;return"root"!=dropNode.attributes.text&&""!==dropNode.attributes.text&&"root"!=targetParent.attributes.text&&""!==targetParent.attributes.text},getContextSettingForNode:function(node,ctx,setting,dv){var val=dv||null;if("modContext"!=node.attributes.type){var cn=node.getOwnerTree().getRootNode().findChild("ctx",ctx,!1);cn&&(val=cn.attributes.settings[setting])}else val=node.attributes.settings[setting];return val},quickCreate:function(itm,e,cls,ctx,p){var r={class_key:cls=cls||"MODX\\Revolution\\modDocument",context_key:ctx||"web",parent:p||0,template:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"default_template",MODx.config.default_template)),richtext:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"richtext_default",MODx.config.richtext_default)),hidemenu:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"hidemenu_default",MODx.config.hidemenu_default)),searchable:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"search_default",MODx.config.search_default)),cacheable:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"cache_default",MODx.config.cache_default)),published:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"publish_default",MODx.config.publish_default)),content_type:parseInt(this.getContextSettingForNode(this.cm.activeNode,ctx,"default_content_type",MODx.config.default_content_type))};if("modContext"!=this.cm.activeNode.attributes.type){var cn=this.cm.activeNode.getOwnerTree().getRootNode().findChild("ctx",ctx,!1);cn&&(r.template=cn.attributes.settings.default_template)}else r.template=this.cm.activeNode.attributes.settings.default_template;var w=MODx.load({xtype:"modx-window-quick-create-modResource",record:r,listeners:{success:{fn:function(){this.refreshNode(this.cm.activeNode.id,this.cm.activeNode.childNodes.length>0)},scope:this},hide:{fn:function(){this.destroy()}},show:{fn:function(){this.center()}}}});w.setValues(r),w.show(e.target,(function(){Ext.isSafari?w.setPosition(null,30):w.center()}),this)},quickUpdate:function(itm,e,cls){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Resource/Get",id:this.cm.activeNode.attributes.pk,skipFormatDates:!0},listeners:{success:{fn:function(r){var pr=r.object;pr.class_key=cls;var w=MODx.load({xtype:"modx-window-quick-update-modResource",record:pr,listeners:{success:{fn:function(r){this.refreshNode(this.cm.activeNode.id);var newTitle=''+r.f.findField("pagetitle").getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+Ext.util.Format.htmlEncode(w.record.pagetitle)+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target,(function(){Ext.isSafari?w.setPosition(null,30):w.center()}),this)},scope:this}}})},_getModContextMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+" ("+a.ctx+")",handler:function(){return!1},header:!0}),m.push("-"),m.push({text:_("refresh_context"),handler:function(){this.refreshNode(this.cm.activeNode.id,!0)}}),ui.hasClass("pedit")&&m.push({text:_("edit_context"),handler:function(){var at=this.cm.activeNode.attributes;this.loadAction("a=context/update&key="+at.pk)}}),ui.hasClass("pnew")&&m.push({text:_("duplicate_context"),handler:this.duplicateContext}),ui.hasClass("pdelete")&&(m.push("-"),m.push({text:_("remove_context"),handler:this.removeContext})),ui.hasClass("pnewdoc")&&(m.push("-"),this._getCreateMenus(m,"0",ui)),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),m},overviewResource:function(){this.loadAction("a=resource/data")},quickUpdateResource:function(itm,e){this.quickUpdate(itm,e,itm.classKey)},editResource:function(){this.loadAction("a=resource/update")},_getModResourceMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pview")&&m.push({text:_("resource_overview"),handler:this.overviewResource}),ui.hasClass("pedit")&&m.push({text:_("resource_edit"),handler:this.editResource}),ui.hasClass("pqupdate")&&m.push({text:_("quick_update_resource"),classKey:a.classKey,handler:this.quickUpdateResource}),ui.hasClass("pduplicate")&&m.push({text:_("resource_duplicate"),handler:this.duplicateResource}),m.push({text:_("resource_refresh"),handler:this.refreshResource,scope:this}),ui.hasClass("pnew")&&(m.push("-"),this._getCreateMenus(m,null,ui)),ui.hasClass("psave")&&(m.push("-"),ui.hasClass("ppublish")&&ui.hasClass("unpublished")?m.push({text:_("resource_publish"),handler:this.publishDocument}):ui.hasClass("punpublish")&&m.push({text:_("resource_unpublish"),handler:this.unpublishDocument}),ui.hasClass("pundelete")&&ui.hasClass("deleted")?(m.push({text:_("resource_undelete"),handler:this.undeleteDocument}),m.push({text:_("resource_purge"),handler:this.purgeDocument})):ui.hasClass("pdelete")&&!ui.hasClass("deleted")&&m.push({text:_("resource_delete"),handler:this.deleteDocument})),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),ui.hasClass("pview")&&""!=a.preview_url&&(m.push("-"),m.push({text:_("resource_view"),handler:this.preview})),m},refreshResource:function(){this.refreshNode(this.cm.activeNode.id)},createResourceHere:function(itm){var at=this.cm.activeNode.attributes,parent=itm.usePk?itm.usePk:at.pk;parseInt(MODx.config.enable_template_picker_in_tree)?MODx.createResource({class_key:itm.classKey,parent,context_key:at.ctx||MODx.config.default_context}):this.loadAction("a=resource/create&class_key="+itm.classKey+"&parent="+parent+(at.ctx?"&context_key="+at.ctx:""))},createResource:function(itm,e){var at=this.cm.activeNode.attributes,p=itm.usePk?itm.usePk:at.pk;this.quickCreate(itm,e,itm.classKey,at.ctx,p)},_getCreateMenus:function(m,pk,ui){var types=MODx.config.resource_classes,o=this.fireEvent("loadCreateMenus",types);Ext.isObject(o)&&Ext.apply(types,o);var coreTypes=["MODXRevolutionmodDocument","MODXRevolutionmodWebLink","MODXRevolutionmodSymLink","MODXRevolutionmodStaticResource"],ct=[],qct=[];for(var k in types)(-1==coreTypes.indexOf(k)||ui.hasClass("pnew_"+k))&&(ct.push({text:types[k].text_create_here,classKey:k,usePk:pk||!1,handler:this.createResourceHere,scope:this}),ui&&ui.hasClass("pqcreate")&&qct.push({text:types[k].text_create,classKey:k,handler:this.createResource,scope:this}));return m.push({text:_("create"),handler:function(){return!1},menu:{items:ct}}),ui&&ui.hasClass("pqcreate")&&m.push({text:_("quick_create"),handler:function(){return!1},menu:{items:qct}}),m},_handleDrag:function(dropEvent){var encNodes=Ext.encode(function simplifyNodes(node){for(var resultNode={},kids=node.childNodes,len=kids.length,i=0;i[[*pagetitle]]
"+_("resource_pagetitle_help"),anchor:"100%",allowBlank:!1},{xtype:"textfield",name:"longtitle",id:"modx-"+this.ident+"-longtitle",fieldLabel:_("resource_longtitle"),description:"[[*longtitle]]
"+_("resource_longtitle_help"),anchor:"100%"},{xtype:"textarea",name:"description",id:"modx-"+this.ident+"-description",fieldLabel:_("resource_description"),description:"[[*description]]
"+_("resource_description_help"),anchor:"100%",grow:!1,height:50},{xtype:"textarea",name:"introtext",id:"modx-"+this.ident+"-introtext",fieldLabel:_("resource_summary"),description:"[[*introtext]]
"+_("resource_summary_help"),anchor:"100%",height:50}]},{columnWidth:.4,border:!1,layout:"form",items:[{xtype:"modx-combo-template",name:"template",id:"modx-"+this.ident+"-template",fieldLabel:_("resource_template"),description:"[[*template]]
"+_("resource_template_help"),editable:!1,anchor:"100%",baseParams:{action:"Element/Template/GetList",combo:!0},value:MODx.config.default_template},{xtype:"textfield",name:"alias",id:"modx-"+this.ident+"-alias",fieldLabel:_("resource_alias"),description:"[[*alias]]
"+_("resource_alias_help"),anchor:"100%"},{xtype:"textfield",name:"menutitle",id:"modx-"+this.ident+"-menutitle",fieldLabel:_("resource_menutitle"),description:"[[*menutitle]]
"+_("resource_menutitle_help"),anchor:"100%"},{xtype:"textfield",fieldLabel:_("resource_link_attributes"),description:"[[*link_attributes]]
"+_("resource_link_attributes_help"),name:"link_attributes",id:"modx-"+this.ident+"-attributes",maxLength:255,anchor:"100%"},{xtype:"xcheckbox",boxLabel:_("resource_hide_from_menus"),description:"[[*hidemenu]]
"+_("resource_hide_from_menus_help"),hideLabel:!0,name:"hidemenu",id:"modx-"+this.ident+"-hidemenu",inputValue:1,checked:"1"==MODx.config.hidemenu_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_published"),description:"[[*published]]
"+_("resource_published_help"),hideLabel:!0,name:"published",id:"modx-"+this.ident+"-published",inputValue:1,checked:"1"==MODx.config.publish_default?1:0},{xtype:"xcheckbox",boxLabel:_("deleted"),description:"[[*deleted]]
"+_("resource_delete"),hideLabel:!0,name:"deleted",id:"modx-"+this.ident+"-deleted",inputValue:1,checked:"1"==MODx.config.deleted_default?1:0}]}]},MODx.getQRContentField(this.ident,config.record.class_key)]},{id:"modx-"+this.ident+"-settings",title:_("settings"),layout:"form",cls:"modx-panel",autoHeight:!0,forceLayout:!0,labelWidth:100,defaults:{autoHeight:!0,border:!1},items:MODx.getQRSettings(this.ident,config.record)}]}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateResource,MODx.Window),Ext.reg("modx-window-quick-create-modResource",MODx.window.QuickCreateResource),MODx.window.QuickUpdateResource=function(config){config=config||{},this.ident=config.ident||"qur"+Ext.id(),Ext.applyIf(config,{title:_("quick_update_resource"),id:this.ident,action:"Resource/Update",buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateResource,MODx.window.QuickCreateResource),Ext.reg("modx-window-quick-update-modResource",MODx.window.QuickUpdateResource),MODx.getQRContentField=function(id,cls){id=id||"qur",cls=cls||"MODX\\Revolution\\modDocument";Ext.getBody().getViewSize();var o={};switch(cls){case"MODX\\Revolution\\modSymLink":o={xtype:"textfield",fieldLabel:_("symlink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255};break;case"MODX\\Revolution\\modWebLink":o={xtype:"textfield",fieldLabel:_("weblink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:""};break;case"MODX\\Revolution\\modStaticResource":o={xtype:"modx-combo-browser",browserEl:"modx-browser",prependPath:!1,prependUrl:!1,fieldLabel:_("static_resource"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:"",listeners:{select:{fn:function(data){"/"==data.url.substring(0,1)&&Ext.getCmp("modx-"+id+"-content").setValue(data.url.substring(1))},scope:this}}};break;default:o={xtype:"textarea",name:"content",id:"modx-"+id+"-content",fieldLabel:_("content"),labelSeparator:"",anchor:"100%",style:"min-height: 200px",grow:!0}}return o},MODx.getQRSettings=function(id,va){return[{layout:"column",border:!1,anchor:"100%",defaults:{labelSeparator:"",labelAlign:"top",border:!1,layout:"form"},items:[{columnWidth:.5,items:[{xtype:"hidden",name:"parent",id:"modx-"+(id=id||"qur")+"-parent",value:va.parent},{xtype:"hidden",name:"context_key",id:"modx-"+id+"-context_key",value:va.context_key},{xtype:"hidden",name:"class_key",id:"modx-"+id+"-class_key",value:va.class_key},{xtype:"hidden",name:"publishedon",id:"modx-"+id+"-publishedon",value:va.publishedon},{xtype:"modx-field-parent-change",fieldLabel:_("resource_parent"),description:"[[*parent]]
"+_("resource_parent_help"),name:"parent-cmb",id:"modx-"+id+"-parent-change",value:va.parent||0,anchor:"100%",parentcmp:"modx-"+id+"-parent",contextcmp:"modx-"+id+"-context_key",currentid:va.id||0},{xtype:"modx-combo-class-derivatives",fieldLabel:_("resource_type"),description:"[[*class_key]]
",name:"class_key",hiddenName:"class_key",id:"modx-"+id+"-class-key",anchor:"100%",value:null!=va.class_key?va.class_key:"MODX\\Revolution\\modDocument"},{xtype:"modx-combo-content-type",fieldLabel:_("resource_content_type"),description:"[[*content_type]]
"+_("resource_content_type_help"),name:"content_type",hiddenName:"content_type",id:"modx-"+id+"-type",anchor:"100%",value:null!=va.content_type?va.content_type:MODx.config.default_content_type||1},{xtype:"modx-combo-content-disposition",fieldLabel:_("resource_contentdispo"),description:"[[*content_dispo]]
"+_("resource_contentdispo_help"),name:"content_dispo",hiddenName:"content_dispo",id:"modx-"+id+"-dispo",anchor:"100%",value:null!=va.content_dispo?va.content_dispo:0},{xtype:"numberfield",fieldLabel:_("resource_menuindex"),description:"[[*menuindex]]
"+_("resource_menuindex_help"),name:"menuindex",id:"modx-"+id+"-menuindex",width:75,value:va.menuindex||0}]},{columnWidth:.5,items:[{xtype:"xdatetime",fieldLabel:_("resource_publishedon"),description:"[[*publishedon]]
"+_("resource_publishedon_help"),name:"publishedon",id:"modx-"+id+"-publishedon",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.publishedon},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_publishdate"),description:"[[*pub_date]]
"+_("resource_publishdate_help"),name:"pub_date",id:"modx-"+id+"-pub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.pub_date},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_unpublishdate"),description:"[[*unpub_date]]
"+_("resource_unpublishdate_help"),name:"unpub_date",id:"modx-"+id+"-unpub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.unpub_date},{xtype:"xcheckbox",boxLabel:_("resource_folder"),description:_("resource_folder_help"),hideLabel:!0,name:"isfolder",id:"modx-"+id+"-isfolder",inputValue:1,checked:null!=va.isfolder&&va.isfolder},{xtype:"xcheckbox",boxLabel:_("resource_show_in_tree"),description:_("resource_show_in_tree_help"),hideLabel:!0,name:"show_in_tree",id:"modx-"+id+"-show_in_tree",inputValue:1,checked:null!=va.show_in_tree?va.show_in_tree:1},{xtype:"xcheckbox",boxLabel:_("resource_hide_children_in_tree"),description:_("resource_hide_children_in_tree_help"),hideLabel:!0,name:"hide_children_in_tree",id:"modx-"+id+"-hide_children_in_tree",inputValue:1,checked:null!=va.hide_children_in_tree&&va.hide_children_in_tree},{xtype:"xcheckbox",boxLabel:_("resource_alias_visible"),description:_("resource_alias_visible_help"),hideLabel:!0,name:"alias_visible",id:"modx-"+id+"-alias-visible",inputValue:1,checked:null!=va.alias_visible?va.alias_visible:1},{xtype:"xcheckbox",boxLabel:_("resource_uri_override"),description:_("resource_uri_override_help"),hideLabel:!0,name:"uri_override",id:"modx-"+id+"-uri-override",value:1,checked:!!parseInt(va.uri_override),listeners:{check:{fn:MODx.handleFreezeUri}}},{xtype:"textfield",fieldLabel:_("resource_uri"),description:"[[*uri]]
"+_("resource_uri_help"),name:"uri",id:"modx-"+id+"-uri",maxLength:255,anchor:"100%",value:va.uri||"",hidden:!va.uri_override},{xtype:"xcheckbox",boxLabel:_("resource_richtext"),description:_("resource_richtext_help"),hideLabel:!0,name:"richtext",id:"modx-"+id+"-richtext",inputValue:1,checked:void 0!==va.richtext?va.richtext?1:0:"1"==MODx.config.richtext_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_searchable"),description:_("resource_searchable_help"),hideLabel:!0,name:"searchable",id:"modx-"+id+"-searchable",inputValue:1,checked:void 0!==va.searchable?va.searchable?1:0:"1"==MODx.config.search_default?1:0,listeners:{check:{fn:MODx.handleQUCB}}},{xtype:"xcheckbox",boxLabel:_("resource_cacheable"),description:_("resource_cacheable_help"),hideLabel:!0,name:"cacheable",id:"modx-"+id+"-cacheable",inputValue:1,checked:void 0!==va.cacheable?va.cacheable?1:0:"1"==MODx.config.cache_default?1:0},{xtype:"xcheckbox",name:"clearCache",id:"modx-"+id+"-clearcache",boxLabel:_("resource_syncsite"),description:_("resource_syncsite_help"),hideLabel:!0,inputValue:1,checked:void 0!==va.clearCache?va.clearCache?1:0:"1"==MODx.config.syncsite_default?1:0}]}]}]},MODx.handleQUCB=function(cb){var h=Ext.getCmp(cb.id+"-hd");cb.checked&&h?(cb.setValue(1),h.setValue(1)):h&&(cb.setValue(0),h.setValue(0))},MODx.handleFreezeUri=function(cb){var uri=Ext.getCmp(cb.id.replace("-override",""));if(!uri)return!1;cb.checked?uri.show():uri.hide()},Ext.override(Ext.tree.AsyncTreeNode,{listeners:{click:{fn:function(){return console.log("Clicked me!",arguments),!1},scope:this}}}),MODx.window.CreateResource=function(config={}){this.ident=config.ident||`tplpick${Ext.id()}`;const id=this.ident,requireAlias=parseInt(MODx.config.friendly_urls,10)&&!parseInt(MODx.config.automatic_alias,10),aliasLength=parseInt(MODx.config.friendly_alias_max_length,10)||0,resourceDetail=[{columnWidth:requireAlias?.33:.5,items:[{xtype:"modx-combo-class-derivatives",fieldLabel:_("resource_type"),description:MODx.expandHelp?"":_("resource_type_help"),name:"class_key",hiddenName:"class_key",anchor:"100%",allowBlank:!1,value:config.record.class_key||"MODX\\Revolution\\modDocument"}]},{columnWidth:requireAlias?.33:.5,items:[{xtype:"modx-field-parent-change",fieldLabel:_("resource_parent"),description:`[[*parent]]
${_("resource_parent_help")}`,name:"parent-cmb",id:`modx-${id}-parent-change`,value:config.record.parent||0,anchor:"100%",parentcmp:"modx-template-picker-parent-id",contextcmp:"modx-template-picker-parent-context",currentid:id}]}];requireAlias&&resourceDetail.push({columnWidth:.34,defaults:{anchor:"100%",enableKeyEvents:!0,validationEvent:"change",validateOnBlur:!1,msgTarget:"under"},items:[{xtype:"textfield",fieldLabel:_("resource_alias"),name:"alias",allowBlank:!1,maxLength:aliasLength>191||0===aliasLength?191:aliasLength,value:config.record.alias||"",listeners:{afterrender:function(){this.clearInvalid()}}}]}),Ext.applyIf(config,{autoHeight:!0,title:_("document_new"),url:MODx.config.connector_url,baseParams:{action:"Resource/Create"},width:600,fields:[{xtype:"textfield",fieldLabel:_("resource_pagetitle"),description:MODx.expandHelp?"":_("resource_pagetitle_help"),name:"pagetitle",maxLength:191,anchor:"100%",allowBlank:!1,validationEvent:"change",validateOnBlur:!1,value:config.record.pagetitle||"",listeners:{afterrender:function(){this.clearInvalid()}}},{xtype:"hidden",name:"parent",id:"modx-template-picker-parent-id"},{xtype:"hidden",name:"context_key",id:"modx-template-picker-parent-context"},{layout:"column",defaults:{layout:"form",labelSeparator:""},items:resourceDetail},{xtype:"modx-panel-template-picker",fieldLabel:_("resource_template"),description:MODx.expandHelp?"":_("resource_template_help"),name:"template",value:config.record.template||MODx.config.default_template}]}),MODx.window.CreateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.CreateResource,MODx.Window),Ext.reg("modx-window-create-resource",MODx.window.CreateResource),MODx.panel.TemplatePicker=function(config){config=config||{},Ext.applyIf(config,{xtype:"panel",layout:"form",labelSeparator:"",items:[{layout:"column",defaults:{layout:"form",labelSeparator:""},items:[{columnWidth:.4,items:[{xtype:"modx-combo-template-picker",id:"modx-resource-template-picker",name:"template",value:config.record||MODx.config.default_template,listeners:{select:{fn:this.setPreview,scope:this}}}]},{columnWidth:.6,items:[{xtype:"modx-panel-template-preview",id:"modx-resource-template-preview"}]}]}]}),MODx.panel.TemplatePicker.superclass.constructor.call(this,config)},Ext.extend(MODx.panel.TemplatePicker,Ext.Panel,{setPreview:function(record){Ext.getCmp("modx-resource-template-preview").setPreview(record)}}),Ext.reg("modx-panel-template-picker",MODx.panel.TemplatePicker),MODx.combo.TemplatePicker=function(config){config=config||{},Ext.applyIf(config,{cls:"x-form-template-picker",layout:"form",defaults:{hideLabel:!0},items:[{xtype:"textfield",itemCls:"x-form-template-picker-search",cls:"x-form-field-search",anchor:"100%",emptyText:_("search"),listeners:{keyup:{fn:this.filterItems,scope:this}},enableKeyEvents:!0}],store:new Ext.data.JsonStore({url:MODx.config.connector_url,baseParams:{action:"Element/Template/GetList",combo:!0,limit:0},root:"results",totalProperty:"total",fields:["id","templatename","description","category_name","preview"],errorReader:MODx.util.JSONReader,autoDestroy:!0,autoLoad:!0,listeners:{load:{fn:this.loadItems,scope:this},loadexception:{fn:function(o,trans,resp){var status=_("code")+": "+resp.status+" "+resp.statusText+"
";MODx.msg.alert(_("error"),status+resp.responseText)}}}})}),MODx.combo.TemplatePicker.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.TemplatePicker,Ext.Panel,{loadItems:function(store,data){var value=this.value,items=[],category="";Ext.each(data,(function(record){category!==record.data.category_name&&(Ext.isEmpty(record.data.category_name)||items.push({hideLabel:!0,boxLabel:record.data.category_name,disabled:!0,itemCls:"x-form-template-picker-category"})),items.push({hideLabel:!0,boxLabel:record.data.templatename,name:this.name||"template",inputValue:record.data.id,itemCls:"x-form-template-picker-item",record,checked:record.data.id==value}),category=record.data.category_name}),this),this.add({xtype:"radiogroup",id:"modx-template-picker-templates",itemCls:"x-form-template-picker-templates",columns:1,items,listeners:{render:{fn:function(cmp){const record=cmp.getValue()?.record;record&&this.fireEvent("select",record)},scope:this},change:{fn:function(cmp,checked){checked.record&&this.fireEvent("select",checked.record)},scope:this}}}),this.doLayout()},filterItems:function(tf){void 0!==(panel=Ext.getCmp("modx-template-picker-templates"))&&panel.items.each((function(object){if(!Ext.isEmpty(tf.getValue())&&object.record){var regex=new RegExp(tf.getValue(),"i");-1===object.record.data.templatename.search(regex)?object.hide():object.show()}else object.show()}))}}),Ext.reg("modx-combo-template-picker",MODx.combo.TemplatePicker),MODx.panel.TemplatePreview=function(config){config=config||{},Ext.applyIf(config,{cls:"x-form-template-preview"}),MODx.panel.TemplatePreview.superclass.constructor.call(this,config)},Ext.extend(MODx.panel.TemplatePreview,Ext.Panel,{setPreview:function(record){if(this.removeAll(),""==record.data.preview||void 0===record.data.preview){this.addClass("x-form-template-preview-empty");var html=""}else{this.removeClass("x-form-template-preview-empty");html=''+record.data.templatename+''}this.add({xtype:"box",autoEl:{tag:"div",cls:"x-form-template-preview-image",html},hidden:""==record.data.image},{xtype:"box",autoEl:{tag:"div",cls:"x-form-template-preview-desc",html:"

"+record.data.description+"

"},hidden:""==record.data.description}),this.doLayout()}}),Ext.reg("modx-panel-template-preview",MODx.panel.TemplatePreview),MODx.tree.Element=function(config){config=config||{},Ext.applyIf(config,{rootVisible:!1,enableDD:!Ext.isEmpty(MODx.config.enable_dragdrop),ddGroup:"modx-treedrop-elements-dd",title:"",url:MODx.config.connector_url,action:"Element/GetNodes",sortAction:"Element/Sort",baseParams:{currentElement:MODx.request.id||0,currentAction:MODx.request.a||0}}),MODx.tree.Element.superclass.constructor.call(this,config),this.on("afterSort",this.afterSort)},Ext.extend(MODx.tree.Element,MODx.tree.Tree,{forms:{},windows:{},stores:{},getToolbar:function(){return[]},createCategory:function(n,e){var r={};this.cm.activeNode&&this.cm.activeNode.attributes.data&&(r.parent=this.cm.activeNode.attributes.data.id),MODx.load({xtype:"modx-window-category-create",record:r,listeners:{success:{fn:function(){var node=this.cm.activeNode?this.cm.activeNode.id:"n_category",self=-1!==node.indexOf("_category_");this.refreshNode(node,self)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameCategory:function(itm,e){var r=this.cm.activeNode.attributes.data,w=MODx.load({xtype:"modx-window-category-rename",record:r,listeners:{success:{fn:function(r){var c=r.a.result.object,n=this.cm.activeNode;n.setText(c.category+" ("+c.id+")"),Ext.get(n.getUI().getEl()).frame(),n.attributes.data.id=c.id,n.attributes.data.category=c.category,n.attributes.data.rank=c.rank},scope:this},hide:{fn:function(){this.destroy()}}}});w.show(e.target)},removeCategory:function(itm,e){var id=this.cm.activeNode.attributes.data.id;MODx.msg.confirm({title:_("warning"),text:_("category_confirm_delete"),url:MODx.config.connector_url,params:{action:"Element/Category/Remove",id},listeners:{success:{fn:function(){this.cm.activeNode.remove()},scope:this}}})},duplicateElement:function(itm,e,id,type){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"element/"+type+"/get",id},listeners:{success:{fn:function(results){var rec={id,type,name:_("duplicate_of",{name:this.cm.activeNode.attributes.name}),caption:_("duplicate_of",{name:this.cm.activeNode.attributes.caption}),category:results.object.category,source:results.object.source,static:results.object.static,static_file:results.object.static_file};MODx.load({xtype:"modx-window-element-duplicate",record:rec,redirect:!1,listeners:{success:{fn:function(r){var response=Ext.decode(r.a.response.responseText);response.object.redirect?MODx.loadPage("element/"+rec.type+"/update","id="+response.object.id):this.refreshNode(this.cm.activeNode.id)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},extractElementIdentifiersFromActiveNode:function(activeNode){let startIndex;const extractedData={};switch(!0){case 0===activeNode.id.indexOf("n_type_"):startIndex=7;break;case 0===activeNode.id.indexOf("n_c_"):startIndex=4;break;default:startIndex=2}const identifiers=activeNode.id.substr(startIndex).split("_");switch([extractedData.type]=identifiers,identifiers.length){case 4:return{...extractedData,elementId:parseInt(identifiers[2],10),categoryId:parseInt(identifiers[3],10)};case 3:return{...extractedData,categoryId:parseInt(identifiers[2],10)};case 1:return extractedData}return!1},removeElement:function(itm,e){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);MODx.msg.confirm({title:_("warning"),text:_("remove_this_confirm",{type:_(elementIdentifiers.type),name:this.cm.activeNode.attributes.name}),url:MODx.config.connector_url,params:{action:`element/${elementIdentifiers.type}/remove`,id:elementIdentifiers.elementId},listeners:{success:{fn:function(){this.cm.activeNode.remove(),MODx.request.a===`element/${elementIdentifiers.type}/update`&&parseInt(MODx.request.id,10)===elementIdentifiers.elementId&&MODx.loadPage("welcome")},scope:this}}})},activatePlugin:function(itm,e){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Element/Plugin/Activate",id:elementIdentifiers.elementId},listeners:{success:{fn:function(){this.refreshParentNode()},scope:this}}})},deactivatePlugin:function(itm,e){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Element/Plugin/Deactivate",id:elementIdentifiers.elementId},listeners:{success:{fn:function(){this.refreshParentNode()},scope:this}}})},quickCreate:function(itm,e,type){var r={category:this.cm.activeNode.attributes.pk||""},w=MODx.load({xtype:"modx-window-quick-create-"+type,record:r,listeners:{success:{fn:function(){this.refreshNode(this.cm.activeNode.id,!0)},scope:this},hide:{fn:function(){this.destroy()}}}});w.setValues(r),w.show(e.target)},quickUpdate:function(itm,e,type){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"element/"+type+"/get",id:this.cm.activeNode.attributes.pk},listeners:{success:{fn:function(r){var nameField="template"==type?"templatename":"name",w=MODx.load({xtype:"modx-window-quick-update-"+type,record:r.object,listeners:{success:{fn:function(r){this.refreshNode(this.cm.activeNode.id);var newTitle=''+r.f.findField(nameField).getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+w.record[nameField]+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target)},scope:this}}})},_createElement:function(itm,e,t){const elementIdentifiers=this.extractElementIdentifiersFromActiveNode(this.cm.activeNode);return this.redirect(`?a=element/${elementIdentifiers.type}/create&category=${elementIdentifiers.categoryId}`),this.cm.hide(),!1},afterSort:function(o){var tn=o.event.target.attributes;if("category"==tn.type){var dn=o.event.dropNode.attributes;"n_category"!=tn.id&&"category"==dn.type?o.event.target.expand():(this.refreshNode(o.event.target.attributes.id,!0),this.refreshNode("n_type_"+o.event.dropNode.attributes.type,!0))}},_handleDrop:function(e){var target=e.target;return"above"!=e.point&&"below"!=e.point&&(("MODX\\Revolution\\modCategory"==target.attributes.classKey||"root"==target.attributes.classKey)&&(!!this.isCorrectType(e.dropNode,target)&&("category"==target.attributes.type&&"append"==e.point||target.getDepth()>0)))},isCorrectType:function(dropNode,targetNode){var r=!1;return targetNode.attributes.type==dropNode.attributes.type&&(targetNode.parentNode&&("folder"==dropNode.attributes.cls&&"folder"==targetNode.attributes.cls&&dropNode.parentNode.id==targetNode.parentNode.id||"file"==targetNode.attributes.cls)||(r=!0)),r},_showContextMenu:function(n,e){if(this.cm.activeNode=n,this.cm.removeAll(),n.attributes.menu&&n.attributes.menu.items)this.addContextMenuItem(n.attributes.menu.items),this.cm.show(n.getUI().getEl(),"t?");else{var m=[];switch(n.attributes.classKey){case"root":m=this._getRootMenu(n);break;case"MODX\\Revolution\\modCategory":m=this._getCategoryMenu(n);break;default:m=this._getElementMenu(n)}this.addContextMenuItem(m),this.cm.showAt(e.xy)}e.stopEvent()},_getQuickCreateMenu:function(n,m){for(var t,ui=n.getUI(),mn=[],types=["template","tv","chunk","snippet","plugin"],i=0;i0&&m.push({text:_("quick_create"),handler:function(){return!1},menu:{items:mn}}),m},_getElementMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pedit")&&(m.push({text:_("edit_"+a.type),type:a.type,pk:a.pk,handler:function(itm,e){MODx.loadPage("element/"+itm.type+"/update","id="+itm.pk)}}),m.push({text:_("quick_update_"+a.type),type:a.type,handler:function(itm,e){this.quickUpdate(itm,e,itm.type)}}),"MODX\\Revolution\\modPlugin"===a.classKey&&(a.active?m.push({text:_("plugin_deactivate"),type:a.type,handler:this.deactivatePlugin}):m.push({text:_("plugin_activate"),type:a.type,handler:this.activatePlugin}))),ui.hasClass("pnew")&&m.push({text:_("duplicate_"+a.type),pk:a.pk,type:a.type,handler:function(itm,e){this.duplicateElement(itm,e,itm.pk,itm.type)}}),ui.hasClass("pdelete")&&(m.push("-"),m.push({text:_("remove_"+a.type),handler:this.removeElement})),m.push("-"),ui.hasClass("pnew")&&m.push({text:_("add_to_category_"+a.type),handler:this._createElement}),ui.hasClass("pnewcat")&&m.push({text:_("category_create"),handler:this.createCategory}),m},_getCategoryMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pnewcat")&&m.push({text:_("category_create"),handler:this.createCategory}),ui.hasClass("peditcat")&&m.push({text:_("category_rename"),handler:this.renameCategory}),m.length>2&&m.push("-"),ui.hasClass("pnew_"+a.type)&&m.push({text:_("add_to_category_"+a.type),handler:this._createElement}),this._getQuickCreateMenu(n,m),ui.hasClass("pdelcat")&&(m.push("-"),m.push({text:_("category_remove"),handler:this.removeCategory})),m},_getRootMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];if(ui.hasClass("pnew")&&(m.push({text:_("new_"+a.type),handler:this._createElement}),m.push({text:_("quick_create_"+a.type),type:a.type,handler:function(itm,e){this.quickCreate(itm,e,itm.type)}})),ui.hasClass("pnewcat")&&(ui.hasClass("pnew")&&m.push("-"),m.push({text:_("category_create"),handler:this.createCategory})),n.isLoaded()){var childNodes=n.childNodes;childNodes.some((function(child){return!child.leaf}))&&(m.push("-"),n.isExpanded()&&childNodes.some((function(child){return child.isExpanded()}))&&m.push({text:_("collapse_all"),handler:function(){n.collapseChildNodes()}}),m.push({text:_("expand_all"),handler:function(){n.isExpandable()&&n.expand(!0)}}))}return m},handleCreateClick:function(node){this.cm.activeNode=node,"category"!=this.cm.activeNode.id.substr(2).split("_")[0]?this._createElement(null,null,null):this.createCategory(null,{target:this})}}),Ext.reg("modx-tree-element",MODx.tree.Element),MODx.tree.Directory=function(config){(config=config||{}).id=config.id||Ext.id(),Ext.applyIf(config,{rootVisible:!0,rootName:"Filesystem",rootId:"/",title:_("files"),ddAppendOnly:!0,ddGroup:"modx-treedrop-sources-dd",url:MODx.config.connector_url,hideSourceCombo:!1,baseParams:{hideFiles:config.hideFiles||!1,hideTooltips:config.hideTooltips||!1,wctx:MODx.ctx||"web",currentAction:MODx.request.a||0,currentFile:MODx.request.file||"",source:config.source||0},action:"Browser/Directory/GetList",primaryKey:"dir",useDefaultToolbar:!0,autoExpandRoot:!1,tbar:[{cls:"x-btn-icon icon-folder",tooltip:{text:_("file_folder_create")},handler:this.createDirectory,scope:this,hidden:!MODx.perm.directory_create},{cls:"x-btn-icon icon-page_white",tooltip:{text:_("file_create")},handler:this.quickCreateFile,scope:this,hidden:!MODx.perm.file_create},{cls:"x-btn-icon icon-file_upload",tooltip:{text:_("upload_files")},handler:this.uploadFiles,scope:this,hidden:!MODx.perm.file_upload},"->",{cls:"x-btn-icon icon-file_manager",tooltip:{text:_("modx_browser")},handler:this.loadFileManager,scope:this,hidden:!(MODx.perm.file_manager&&!MODx.browserOpen)}],tbarCfg:{id:config.id+"-tbar"}}),MODx.tree.Directory.superclass.constructor.call(this,config),this.addEvents({beforeUpload:!0,afterUpload:!0,afterQuickCreate:!0,afterRename:!0,afterRemove:!0,fileBrowserSelect:!0,changeSource:!0,afterSort:!0}),this.on("click",(function(n,e){n.select(),this.cm.activeNode=n}),this),this.on("render",(function(){var el=Ext.get(this.config.id);el.createChild({tag:"div",id:this.config.id+"_tb"}),el.createChild({tag:"div",id:this.config.id+"_filter"}),this.addSourceToolbar()}),this),this.on("show",(function(){if(!this.config.hideSourceCombo)try{this.sourceCombo.show()}catch(e){}}),this),this._init(),this.on("afterrender",this.showRefresh,this),this.on("afterSort",this._handleAfterDrop,this),this.on("click",(function(e){null!=this.uploader&&this.uploader.setBaseParams({path:e.id})})),this.uploader=new MODx.util.MultiUploadDialog.Upload({url:MODx.config.connector_url,base_params:{action:"Browser/File/Upload",wctx:MODx.ctx||"",source:this.getSource()}}),this.uploader.on("beforeupload",this.beforeUpload,this),this.uploader.on("uploadsuccess",this.uploadSuccess,this),this.uploader.on("uploaderror",this.uploadError,this),this.uploader.on("uploadfailed",this.uploadFailed,this)},Ext.extend(MODx.tree.Directory,MODx.tree.Tree,{windows:{},getRootMenu:function(node){var menu=[];return MODx.perm.directory_create&&menu.push({text:_("file_folder_create"),handler:this.createDirectory,scope:this}),MODx.perm.file_create&&menu.push({text:_("file_create"),handler:this.createFile,scope:this}),MODx.perm.file_upload&&menu.push({text:_("upload_files"),handler:this.uploadFiles,scope:this}),node.ownerTree.el.hasClass("pupdate")&&menu.push(["-",{text:_("edit"),handler:function(){MODx.loadPage("source/update","id="+node.ownerTree.source)}}]),menu},_showContextMenu:function(node,e){this.cm.activeNode=node,this.cm.removeAll();var m=[];m.push({text:""+node.attributes.text+"",handler:function(){return!1},header:!0}),m.push("-"),node.isRoot?m=m.concat(this.getRootMenu(node)):node.attributes.menu&&node.attributes.menu.items&&(m=m.concat(node.attributes.menu.items)),m&&m.length>0&&(this.addContextMenuItem(m),this.cm.showAt(e.xy)),e.preventDefault(),e.stopEvent()},showRefresh:function(){var node=this.getRootNode(),inlineButtonsLang=this.getInlineButtonsLang(node),elId=node.ui.elNode.id+"_tools",el=document.createElement("div");el.id=elId,el.className="modx-tree-node-tool-ct",node.ui.elNode.appendChild(el),MODx.load({xtype:"modx-button",text:"",scope:this,tooltip:new Ext.ToolTip({title:inlineButtonsLang.refresh,target:this}),node,handler:function(btn,evt){evt.stopPropagation(evt),node.reload()},iconCls:"icon-refresh",renderTo:elId,listeners:{mouseover:function(button,e){button.tooltip.onTargetOver(e)},mouseout:function(button,e){button.tooltip.onTargetOut(e)}}})},addSourceToolbar:function(){if(this.sourceCombo=new MODx.combo.MediaSource({value:this.config.source||MODx.config.default_media_source,listWidth:236,listeners:{select:{fn:this.changeSource,scope:this},loaded:{fn:function(combo){var rec=combo.store.getById(this.config.source),rn=this.getRootNode();rn&&rec&&rn.setText(rec.data.name)},scope:this}}}),this.searchBar=new Ext.Toolbar({renderTo:this.tbar,id:this.config.id+"-sourcebar",items:[this.sourceCombo]}),this.on("resize",(function(){this.sourceCombo.setWidth(this.getWidth()-12)}),this),this.config.hideSourceCombo)try{this.sourceCombo.hide()}catch(e){}},changeSource:function(sel){this.cm.activeNode="";var s=sel.getValue(),rn=this.getRootNode();rn&&rn.setText(sel.getRawValue()),this.config.baseParams.source=s,this.fireEvent("changeSource",s),this.refresh()},_init:function(){var treeState=Ext.state.Manager.get(this.treestate_id);this.root.getPath("text")!==treeState&&this.root.expand()},_initExpand:function(){var treeState=Ext.state.Manager.get(this.treestate_id);Ext.isEmpty(this.config.openTo)?this.expandPath(treeState,"text"):this.selectPath("/"+_("files")+"/"+this.config.openTo,"text")},_saveState:function(n){n.expanded||n.isRoot||(n=n.parentNode),n.id==this.config.openTo&&n.select();var p=n.getPath("text");Ext.state.Manager.set(this.treestate_id,p)},_handleAfterDrop:function(o,r){var targetNode=o.event.target,dropNode=o.event.dropNode;if("append"==o.event.point&&targetNode){var ui=targetNode.getUI();ui.addClass("haschildren"),ui.removeClass("icon-resource")}if("resource/update"===MODx.request.a&&dropNode.attributes.pk==MODx.request.id){var parentFieldCmb=Ext.getCmp("modx-resource-parent"),parentFieldHidden=Ext.getCmp("modx-resource-parent-hidden");parentFieldCmb&&parentFieldHidden&&(parentFieldHidden.setValue(dropNode.parentNode.attributes.pk),parentFieldCmb.setValue(dropNode.parentNode.attributes.text.replace(/(<([^>]+)>)/gi,"")))}targetNode.reload(!0)},_handleDrag:function(dropEvent){var from=dropEvent.dropNode.attributes.id,to=dropEvent.target.attributes.id,orgSource="number"==typeof dropEvent.dropNode.attributes.sid?dropEvent.dropNode.attributes.sid:this.config.baseParams.source,destSource="number"==typeof dropEvent.target.attributes.sid?dropEvent.target.attributes.sid:0;destSource||(destSource=dropEvent.tree.source),MODx.Ajax.request({url:this.config.url,params:{source:orgSource,from,destSource,to,action:this.config.sortAction||"Browser/Directory/Sort",point:dropEvent.point},listeners:{success:{fn:function(r){var el=dropEvent.dropNode.getUI().getTextEl();el&&Ext.get(el).frame(),this.fireEvent("afterSort",{event:dropEvent,result:r})},scope:this},failure:{fn:function(r){return MODx.form.Handler.errorJSON(r),this.refresh(),""!=r.message?MODx.msg.alert(_("error"),r.message):r.data&&r.data[0]&&MODx.msg.alert(r.data[0].id,r.data[0].msg),!1},scope:this}}})},getPath:function(node){let path=node?.attributes?.path||"";return path=path.replace(/^[\/\.]*/,""),path+"/"},editFile:function(itm,e){MODx.loadPage("system/file/edit","file="+this.cm.activeNode.attributes.id+"&source="+this.config.source)},openFile:function(itm,e){this.cm.activeNode.attributes.urlExternal&&window.open(this.cm.activeNode.attributes.urlExternal)},quickUpdateFile:function(itm,e){var node=this.cm.activeNode;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Get",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(response){var r={file:node.attributes.id,name:node.text,path:node.attributes.pathRelative,source:this.getSource(),content:response.object.content};MODx.load({xtype:"modx-window-file-quick-update",record:r,listeners:{hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},createFile:function(itm,e){var active=this.cm.activeNode,dir="";if(active&&active.attributes)if(active.isRoot||"dir"===active.attributes.type)dir=active.attributes.id;else if("file"===active.attributes.type){var path=active.attributes.path;dir=path.substr(0,path.lastIndexOf("/")+1)}MODx.loadPage("system/file/create","directory="+dir+"&source="+this.getSource())},quickCreateFile:function(itm,e){var node=this.cm.activeNode,r={directory:node?decodeURIComponent(node.attributes.id):"/",source:this.getSource()};MODx.load({xtype:"modx-window-file-quick-create",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterQuickCreate"),this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},browser:null,loadFileManager:function(btn,e){var refresh=!1;null===this.browser?this.browser=MODx.load({xtype:"modx-browser",hideFiles:MODx.config.modx_browser_tree_hide_files,rootId:"/",wctx:MODx.ctx,source:this.config.baseParams.source,listeners:{select:{fn:function(data){this.fireEvent("fileBrowserSelect",data)},scope:this}}}):refresh=!0,this.browser&&(this.browser.setSource(this.config.baseParams.source),refresh&&this.browser.win.tree.refresh(),this.browser.show())},renameNode:function(field,nv,ov){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Rename",new_name:nv,old_name:ov,file:this.treeEditor.editNode.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshActiveNode()},scope:this}}})},renameDirectory:function(item,e){var node=this.cm.activeNode,r={old_name:node.text,name:node.text,path:node.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-directory-rename",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameFile:function(item,e){var node=this.cm.activeNode,r={old_name:node.text,name:node.text,path:node.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-file-rename",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshParentNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},createDirectory:function(item,e){var node=!(!this.cm||!this.cm.activeNode)&&this.cm.activeNode,r={parent:node&&"dir"==node.attributes.type?node.attributes.pathRelative:"/",source:this.getSource()};MODx.load({xtype:"modx-window-directory-create",record:r,listeners:{success:{fn:function(){var parent=Ext.getCmp("folder-parent").getValue();this.cm.activeNode&&"constructor"===this.cm.activeNode.constructor.name||""===parent||"/"===parent?this.refresh():this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e?e.target:Ext.getBody())},setVisibility:function(item,e){var node=this.cm.activeNode,r={path:node.attributes.path,visibility:node.attributes.visibility,source:this.getSource()};MODx.load({xtype:"modx-window-set-visibility",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},removeDirectory:function(item,e){var node=this.cm.activeNode,directory=node.attributes.text;MODx.msg.confirm({text:_("file_folder_remove_confirm",{directory}),url:MODx.config.connector_url,params:{action:"Browser/Directory/Remove",dir:node.attributes.path,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},removeFile:function(item,e){var node=this.cm.activeNode,fileName=node.attributes.text,filePath=node.attributes.pathRelative;MODx.msg.confirm({text:_("file_remove_confirm",{file:fileName}),url:MODx.config.connector_url,params:{action:"Browser/File/Remove",file:filePath,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},_afterRemove:function(){this.fireEvent("afterRemove"),this.refreshParentNode(),this.cm.activeNode=null},unpackFile:function(item,e){var node=this.cm.activeNode;MODx.msg.confirm({text:_("file_download_unzip")+" "+node.attributes.id,url:MODx.config.connectors_url,params:{action:"Browser/File/Unpack",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource(),path:node.attributes.directory},listeners:{success:{fn:this.refreshParentNode,scope:this}}})},downloadFile:function(item,e){var node=this.cm.activeNode;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Download",file:node.attributes.pathRelative,wctx:MODx.ctx||"",source:this.getSource()},listeners:{failure:{fn:function(r){MODx.msg.alert(_("alert"),r.message)},scope:this},success:{fn:function(r){Ext.isEmpty(r.object.url)||(location.href=MODx.config.connector_url+"?action=Browser/File/Download&download=1&file="+r.object.url+"&HTTP_MODAUTH="+MODx.siteId+"&source="+this.getSource()+"&wctx="+MODx.ctx)},scope:this}}})},copyRelativePath:function(item,e){var node=this.cm.activeNode,dummyRelativePathInput=document.createElement("input");document.body.appendChild(dummyRelativePathInput),dummyRelativePathInput.setAttribute("value",node.attributes.pathRelative),dummyRelativePathInput.select(),document.execCommand("copy"),document.body.removeChild(dummyRelativePathInput)},getSource:function(){return this.config.baseParams.source},uploadFiles:function(){this.uploader.setBaseParams({source:this.getSource()}),this.uploader.browser=MODx.config.browserview,this.uploader.show()},uploadError:function(dlg,file,data,rec){},uploadFailed:function(dlg,file,rec){},uploadSuccess:function(){if(this.cm.activeNode){var node=this.cm.activeNode;if(node.isLeaf()){var pn=node.isLeaf()?node.parentNode:node;pn?pn.reload():node.id.match(/.*?\/$/)&&this.refreshActiveNode(),this.fireEvent("afterUpload",node)}else this.refreshActiveNode()}else this.refresh(),this.fireEvent("afterUpload")},beforeUpload:function(){var path=this.config.openTo||this.config.rootId||"/";this.cm.activeNode&&(path=this.getPath(this.cm.activeNode),this.cm.activeNode.isLeaf()&&(path=this.getPath(this.cm.activeNode.parentNode))),this.uploader.setBaseParams({action:"Browser/File/Upload",path,wctx:MODx.ctx||"",source:this.getSource()}),this.fireEvent("beforeUpload",this.cm.activeNode)}}),Ext.reg("modx-tree-directory",MODx.tree.Directory),MODx.window.CreateDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_create"),url:MODx.config.connector_url,action:"Browser/Directory/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("file_folder_parent"),id:"folder-parent",name:"parent",xtype:"textfield",anchor:"100%"},{xtype:"label",forId:"folder-parent",html:_("file_folder_parent_desc"),cls:"desc-under"}]}),MODx.window.CreateDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.CreateDirectory,MODx.Window),Ext.reg("modx-window-directory-create",MODx.window.CreateDirectory),MODx.window.SetVisibility=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_visibility"),url:MODx.config.connector_url,action:"Browser/Visibility",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{name:"path",fieldLabel:_("file_folder_path"),xtype:"statictextfield",anchor:"100%",submitValue:!0},{fieldLabel:_("file_folder_visibility_label"),name:"visibility",xtype:"modx-combo-visibility",anchor:"100%",allowBlank:!1},{hideLabel:!0,xtype:"displayfield",value:_("file_folder_visibility_desc"),anchor:"100%",allowBlank:!1}]}),MODx.window.SetVisibility.superclass.constructor.call(this,config)},Ext.extend(MODx.window.SetVisibility,MODx.Window),Ext.reg("modx-window-set-visibility",MODx.window.SetVisibility),MODx.window.RenameDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/Directory/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1}]}),MODx.window.RenameDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameDirectory,MODx.Window),Ext.reg("modx-window-directory-rename",MODx.window.RenameDirectory),MODx.window.RenameFile=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/File/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{name:"dir",xtype:"hidden"}]}),MODx.window.RenameFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameFile,MODx.Window),Ext.reg("modx-window-file-rename",MODx.window.RenameFile),MODx.window.QuickUpdateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_update"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Update",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{xtype:"hidden",name:"file"},{fieldLabel:_("name"),name:"name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}],buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateFile,MODx.Window),Ext.reg("modx-window-file-quick-update",MODx.window.QuickUpdateFile),MODx.window.QuickCreateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_create"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("directory"),name:"directory",submitValue:!0,xtype:"statictextfield",anchor:"100%"},{xtype:"label",html:_("file_folder_parent_desc"),cls:"desc-under"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateFile,MODx.Window),Ext.reg("modx-window-file-quick-create",MODx.window.QuickCreateFile),MODx.panel.FileTree=function(config){config=config||{},Ext.applyIf(config,{_treePrefix:"source-tree-",autoHeight:!0,defaults:{autoHeight:!0,border:!1}}),MODx.panel.FileTree.superclass.constructor.call(this,config),this.on("render",this.getSourceList,this)},Ext.extend(MODx.panel.FileTree,Ext.Container,{getSourceList:function(){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Source/GetList",limit:0},listeners:{success:{fn:function(data){this.onSourceListReceived(data.results)},scope:this},failure:{fn:function(data){return data.total>0&&null!=data.results&&this.onSourceListReceived(data.results),!1},scope:this}}})},onSourceListReceived:function(sources){for(var k=0;k=0&&rect.left>=0&&rect.top<=height&&(image.src=image.getAttribute("data-src"),delete this.thumbnails[i])}}},refresh:function(){MODx.DataView.prototype.refresh.call(this),this.thumbnails=Array.prototype.slice.call(document.querySelectorAll("img[data-src]")),this.lazyLoad()},listeners:{selectionchange:{fn:this.showDetails,scope:this,buffer:100},dblclick:config.onSelect||{fn:Ext.emptyFn,scope:this},render:{fn:this.sortStore,scope:this},afterrender:{fn:function(){this.getEl().parent().on("scroll",(function(){this.lazyLoad()}),this),null!=this.tree&&null!=this.tree.uploader&&this.tree.uploader.addDropZone(this.ownerCt,this),MODx.config.browserview=this},scope:this}},prepareData:this.formatData.createDelegate(this),multiSelect:!0}),MODx.browser.View.superclass.constructor.call(this,config)},Ext.extend(MODx.browser.View,MODx.DataView,{templates:{},run:function(p){(p=p||{}).dir&&(this.dir=p.dir),Ext.applyIf(p,{action:"Browser/Directory/GetFiles",dir:this.dir,source:this.config.source||MODx.config.default_media_source}),this.mask=new Ext.LoadMask(Ext.getBody(),{msg:_("loading")}),this.mask.show(),this.store.load({params:p,callback:function(rec,options,success){this.mask.hide(),this.refresh(),Ext.getCmp(this.ident+"-filepath").setValue(""),this.select(0)},scope:this})},editFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id];MODx.loadPage("system/file/edit","file="+data.pathRelative+"&source="+this.config.source)},quickUpdateFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id];MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Get",file:data.pathRelative,wctx:MODx.ctx||"",source:this.config.source},listeners:{success:{fn:function(response){var r={file:data.pathRelative,name:data.name,path:decodeURIComponent(data.pathRelative),source:this.config.source,content:response.object.content};MODx.load({xtype:"modx-window-file-quick-update",record:r,listeners:{hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},renameFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id],r={old_name:data.name,name:data.name,path:data.pathRelative,source:this.config.source};MODx.load({xtype:"modx-window-file-rename",record:r,listeners:{success:{fn:function(r){this.config.tree.refreshParentNode(),this.run()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},downloadFile:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id];MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Download",file:data.pathRelative,wctx:MODx.ctx||"",source:this.config.source},listeners:{failure:{fn:function(r){MODx.msg.alert(_("alert"),r.message)},scope:this},success:{fn:function(r){Ext.isEmpty(r.object.url)||(location.href=MODx.config.connector_url+"?action=Browser/File/Download&download=1&file="+r.object.url+"&HTTP_MODAUTH="+MODx.siteId+"&source="+this.config.source+"&wctx="+MODx.ctx)},scope:this}}})},copyRelativePath:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id],dummyRelativePathInput=document.createElement("input");document.body.appendChild(dummyRelativePathInput),dummyRelativePathInput.setAttribute("value",data.pathRelative),dummyRelativePathInput.select(),document.execCommand("copy"),document.body.removeChild(dummyRelativePathInput)},removeFile:function(){var files=[],filesNames=[],selected=this.getSelectedRecords();for(var i in selected)selected.hasOwnProperty(i)&&(files.push(selected[i].id),filesNames.push(selected[i].data.name));MODx.msg.confirm({text:_("file_remove_confirm",{file:filesNames.pop()}),url:MODx.config.connector_url,params:{action:"Browser/File/Remove",file:files.pop(),source:this.config.source,wctx:this.config.wctx||"web"},listeners:{success:{fn:function(r){this.config.tree&&(this.config.tree.cm.activeNode&&this.config.tree.cm.activeNode.id.match(/.*?\/$/)?this.config.tree.refreshParentNode():this.config.tree.refresh()),this.run()},scope:this}}})},setTemplate:function(tpl){"list"===tpl?(this.tpl=this.templates.list,this.itemSelector="div.modx-browser-list-item"):(this.tpl=this.templates.thumb,this.itemSelector="div.modx-browser-thumb-wrap"),this.refresh(),this.select(0)},setVisibility:function(item,e){var node=this.cm.activeNode,data=this.lookup[node.id],r={path:decodeURIComponent(data.pathRelative),visibility:data.visibility,source:this.config.source};MODx.load({xtype:"modx-window-set-visibility",record:r,listeners:{success:{fn:function(){this.run()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},sortStore:function(){var v=MODx.config.modx_browser_default_sort||"name";this.store.sort(v,"name"==v?"ASC":"DESC"),this.select(0)},showDetails:function(){var node=this.getSelectedNodes(),detailPanel=Ext.getCmp(this.config.ident+"-img-detail-panel").body,okBtn=Ext.getCmp(this.ident+"-ok-btn"),keys=Object.keys(node);if(node&&node.length>0){node=node[keys[keys.length-1]],okBtn&&okBtn.enable();var data=this.lookup[node.id];this.config.tree.getNodeById(data.pathRelative)&&(this.config.tree.cm.activeNode=this.config.tree.getNodeById(data.pathRelative),this.config.tree.getSelectionModel().select(this.config.tree.getNodeById(data.pathRelative))),Ext.getCmp(this.ident+"-filepath").setValue((-1===data.fullRelativeUrl.indexOf("http")?"/":"")+data.fullRelativeUrl),detailPanel.hide(),this.templates.details.overwrite(detailPanel,data),detailPanel.slideIn("l",{stopFx:!0,duration:".2"})}else okBtn&&okBtn.disable(),detailPanel.update("")},showFullView:function(name,ident){var data=this.lookup[name];if(data){this.fvWin||(this.fvWin=new Ext.Window({layout:"fit",width:600,height:450,bodyStyle:"padding: 0;",closeAction:"hide",plain:!0,items:[{id:this.ident+"modx-view-item-full",cls:"modx-browser-fullview",html:""}],buttons:[{text:_("close"),cls:"primary-button",handler:function(){this.fvWin.hide()},scope:this}]})),this.fvWin.show();var ratio=data.image_width>800?800/data.image_width:1,w=data.image_width<250?250:data.image_width>800?800:data.image_width,hfit=data.image_height*ratio+this.fvWin.footer.dom.clientHeight+1+this.fvWin.header.dom.clientHeight+1,h=data.image_height<200?200:data.image_height>600?hfit>600?600:hfit:data.image_height;this.fvWin.setSize(w,h),this.fvWin.center(),this.fvWin.setTitle(data.name),Ext.get(this.ident+"modx-view-item-full").update(''+data.name+'")}},formatData:function(data){var size;return data.shortName=Ext.util.Format.ellipsis(data.name,18),data.sizeString=0!=data.size?(size=data.size)<1024?size+" "+_("file_size_bytes"):Math.round(10*size/1024)/10+" "+_("file_size_kilobytes"):0,data.imageSizeString=0!=data.preview?data.original_width+"x"+data.original_height+"px":0,data.imageSizeString="xpx"===data.imageSizeString?0:data.imageSizeString,data.dateString=Ext.isEmpty(data.lastmod)?0:new Date(data.lastmod).format(MODx.config.manager_date_format+" "+MODx.config.manager_time_format),this.lookup[data.name]=data,data},_initTemplates:function(){this.templates.thumb=new Ext.XTemplate('','
','','
',' {name:htmlEncode}',"
","
",'','
',' \t
.{ext}
',"
","
"," {shortName:htmlEncode}","
","
"),this.templates.thumb.compile(),this.templates.list=new Ext.XTemplate('','
',' ',' {name:htmlEncode}',' ',' {sizeString}'," ",' ',' {imageSizeString}'," "," ","
","
"),this.templates.list.compile(),this.templates.details=new Ext.XTemplate('
',' ',' ','
",' {name:htmlEncode}',"
","
",' ','
','
.{ext}
',"
","
",'
'," "+_("file_name")+":"," {name:htmlEncode}",' '," "+_("file_size")+":"," {sizeString}"," ",' '," "+_("image_size")+":"," {imageSizeString}"," ",' '," "+_("file_last_modified")+":"," {dateString}"," ",' '," "+_("visibility")+":"," {visibility}"," ","
","
","
"),this.templates.details.compile()},_showContextMenu:function(v,i,n,e){e.preventDefault(),this.select(n.id);var data=this.lookup[n.id],m=this.cm;if(m.removeAll(),data.menu){var menu=[];if(this.getSelectedRecords().length>1)for(var ii=0;ii{MODx.browser.onPopState(e,this)},Ext.applyIf(config,{title:_("modx_browser")+" ("+(MODx.ctx?MODx.ctx:"web")+")",cls:"modx-browser modx-browser-window",layout:"border",minWidth:500,minHeight:300,width:"90%",height:.9*Ext.getBody().getViewSize().height,modal:!1,closeAction:"hide",border:!1,items:[{id:this.ident+"-browser-tree",cls:"modx-browser-tree",region:"west",width:250,height:"100%",items:this.tree,autoScroll:!0,split:!0,border:!1},{id:this.ident+"-browser-view",cls:"modx-browser-view-ct",region:"center",autoScroll:!0,border:!1,items:this.view,tbar:this.getToolbar(),bbar:this.getPathbar()},{id:this.ident+"-img-detail-panel",cls:"modx-browser-details-ct",region:"east",split:!0,border:!1,width:250}],buttons:[{id:this.ident+"-cancel-btn",text:_("cancel"),handler:this.close,scope:this},{id:this.ident+"-ok-btn",text:_("ok"),cls:"primary-button",handler:this.onSelect,scope:this}],keys:{key:27,handler:this.hide,scope:this}}),MODx.browser.Window.superclass.constructor.call(this,config),this.config=config,this.addEvents({select:!0,hide:!0}),this.on("hide",(()=>{MODx.util.UrlParams.remove("source"),MODx.util.UrlParams.remove("dir")}))},Ext.extend(MODx.browser.Window,Ext.Window,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),MODx.util.UrlParams.set({...MODx.util.UrlParams.get(),dir:decodeURIComponent(dir)}),this.view.run({dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",(function(){this.filter()}),this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout((function(){var field=el.getEl().dom;if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()}else field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)}),50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(){const selNodes=this.view.getSelectedNodes(),callback=this.config.onSelect||this.onSelectHandler,lookup=this.view.lookup,scope=this.config.scope,source=parseInt(this.config.source||MODx.config.default_media_source);this.hide(this.config.animEl||null,(function(){callback&&selNodes.forEach((selNode=>{try{let selData=lookup[selNode.id];selData.source=source,Ext.callback(callback,scope||this,[selData]),this.fireEvent("select",selData)}catch(e){console.error("Error processing MODx.Browser onSelect callback:",e)}}))}),scope)},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-browser-window",MODx.browser.Window),MODx.Media=function(config){config=config||{},this.ident=config.ident||Ext.id(),MODx.browserOpen=!0,this.tree=MODx.load({xtype:"modx-tree-directory",onUpload:function(){this.view.run()},scope:this,source:config.source||MODx.util.UrlParams.get().source||MODx.config.default_media_source,originalSource:config.source||MODx.config.default_media_source,hideFiles:config.hideFiles||MODx.config.modx_browser_tree_hide_files,hideTooltips:config.hideTooltips||MODx.config.modx_browser_tree_hide_tooltips||!0,openTo:config.openTo||MODx.util.UrlParams.get().dir||"",ident:this.ident,rootIconCls:MODx.config.mgr_source_icon,rootId:config.rootId||"/",rootName:_("files"),rootVisible:null==config.rootVisible||!Ext.isEmpty(config.rootId),id:this.ident+"-tree",hideSourceCombo:config.hideSourceCombo||!1,useDefaultToolbar:!1,listeners:{afterUpload:{fn:function(){this.view.run()},scope:this},afterQuickCreate:{fn:function(){this.view.run()},scope:this},afterRename:{fn:function(){this.view.run()},scope:this},afterRemove:{fn:function(){this.view.run()},scope:this},changeSource:{fn:function(s){this.config.source=s,this.view.config.source=s,this.view.baseParams.source=s,this.view.dir="/",this.view.run(),MODx.util.UrlParams.set({...MODx.util.UrlParams.get(),source:s,dir:"/"})},scope:this},afterrender:{fn:function(tree){tree.root.expand()},scope:this},beforeclick:{fn:function(node,e){if(node.leaf)return this.view.select(this.view.store.indexOfId("/"+node.attributes.url)),this.view.dir!==node.parentNode.id&&this.load(node.parentNode.id),!1;this.load(node.id)},scope:this},load:{fn:function({childNodes}){const dir=MODx.util.History.get().dir;if(dir)for(const childNode of childNodes)if(dir===decodeURIComponent(childNode.id)){childNode.on("load",(()=>{childNode.select(),this.tree.cm.activeNode=childNode}));break}},scope:this},load:{fn:function(){const dir=MODx.util.UrlParams.get().dir;dir&&this.tree.expandTreePath(dir)},scope:this}}}),this.view=MODx.load({xtype:"modx-browser-view",onSelect:{fn:this.onSelect,scope:this},source:config.source||MODx.util.UrlParams.get().source||MODx.config.default_media_source,originalSource:config.source||MODx.config.default_media_source,allowedFileTypes:config.allowedFileTypes||"",wctx:config.wctx||"web",openTo:config.openTo||MODx.util.UrlParams.get().dir||"",ident:this.ident,id:this.ident+"-view",tree:this.tree}),window.onpopstate=e=>{MODx.browser.onPopState(e,this)},Ext.applyIf(config,{cls:"modx-browser modx-browser-panel",layout:"border",width:"100%",height:"100%",style:"background-color: transparent",border:!1,items:[{region:"west",width:250,items:this.tree,id:this.ident+"-browser-tree",cls:"modx-browser-tree",autoScroll:!0,split:!0,margins:"10 0 10 18"},{region:"center",layout:"fit",items:this.view,id:this.ident+"-browser-view",cls:"modx-browser-view-ct",autoScroll:!0,border:!1,tbar:this.getToolbar(),bbar:this.getPathbar(),margins:"10 0 10 0"},{region:"east",width:250,id:this.ident+"-img-detail-panel",cls:"modx-browser-details-ct",split:!0,margins:"10 10 10 0"}]}),MODx.Media.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.Media,Ext.Container,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),MODx.util.UrlParams.set({...MODx.util.UrlParams.get(),dir:decodeURIComponent(dir)}),this.view.run({dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",(function(){this.filter()}),this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout((function(){var field=el.getEl().dom;if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()}else field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)}),50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(data){},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-media-view",MODx.Media),MODx.browser.RTE=function(config){config=config||{},this.ident=config.ident||Ext.id(),MODx.browserOpen=!0,Ext.Ajax.defaultHeaders={modAuth:config.auth},Ext.Ajax.extraParams={HTTP_MODAUTH:config.auth},this.tree=MODx.load({xtype:"modx-tree-directory",onUpload:function(){this.view.run()},scope:this,source:config.source||MODx.config.default_media_source,hideFiles:config.hideFiles||MODx.config.modx_browser_tree_hide_files,hideTooltips:config.hideTooltips||MODx.config.modx_browser_tree_hide_tooltips||!0,openTo:config.openTo||"",ident:this.ident,rootIconCls:MODx.config.mgr_source_icon,rootId:config.rootId||"/",rootName:_("files"),rootVisible:null==config.rootVisible||!Ext.isEmpty(config.rootId),id:this.ident+"-tree",hideSourceCombo:config.hideSourceCombo||!1,useDefaultToolbar:!1,listeners:{afterUpload:{fn:function(){this.view.run()},scope:this},afterQuickCreate:{fn:function(){this.view.run()},scope:this},afterRename:{fn:function(){this.view.run()},scope:this},afterRemove:{fn:function(){this.view.run()},scope:this},changeSource:{fn:function(s){this.config.source=s,this.view.config.source=s,this.view.baseParams.source=s,this.view.dir="/",this.view.run()},scope:this},afterrender:{fn:function(tree){tree.root.expand()},scope:this},beforeclick:{fn:function(node,e){if(node.leaf)return this.view.select(this.view.store.indexOfId("/"+node.attributes.url)),this.view.dir!==node.parentNode.id&&this.load(node.parentNode.id),!1;this.load(node.id)},scope:this}}}),this.view=MODx.load({xtype:"modx-browser-view",onSelect:{fn:this.onSelect,scope:this},source:config.source||MODx.config.default_media_source,allowedFileTypes:config.allowedFileTypes||"",wctx:config.wctx||"web",openTo:config.openTo||"",multiSelect:config.multiSelect||!1,ident:this.ident,id:this.ident+"-view",tree:this.tree}),Ext.applyIf(config,{title:_("modx_browser"),cls:"modx-browser modx-browser-rte",layout:"border",renderTo:document.body,id:this.ident+"-viewport",onSelect:MODx.onBrowserReturn||function(data){},items:[{id:this.ident+"-browser-tree",cls:"modx-browser-tree",region:"west",width:250,height:"100%",split:!0,items:this.tree,autoScroll:!0},{id:this.ident+"-browser-view",cls:"modx-browser-view-ct",region:"center",autoScroll:!0,width:450,items:this.view,tbar:this.getToolbar(),bbar:this.getPathbar()},{id:this.ident+"-img-detail-panel",cls:"modx-browser-details-ct",region:"east",split:!0,width:200,minWidth:200,maxWidth:300},{id:this.ident+"-south",cls:"modx-browser-rte-buttons",region:"south",split:!1,bbar:["->",{xtype:"button",id:this.ident+"-cancel-btn",text:_("cancel"),minWidth:75,handler:this.onCancel,scope:this},{xtype:"button",id:this.ident+"-ok-btn",text:_("ok"),cls:"primary-button",minWidth:75,handler:this.onSelect,scope:this}]}]}),MODx.browser.RTE.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.browser.RTE,Ext.Viewport,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),this.view.run({dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",(function(){this.filter()}),this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout((function(){var field=el.getEl().dom;if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()}else field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)}),50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(){const selNodes=this.view.getSelectedNodes(),callback=this.config.onSelect||this.onSelectHandler,lookup=this.view.lookup,scope=this.config.scope,source=parseInt(this.config.source||MODx.config.default_media_source);callback&&selNodes.forEach((selNode=>{try{let selData=lookup[selNode.id];selData.source=source,Ext.callback(callback,scope||this,[selData]),this.fireEvent("select",selData)}catch(e){console.error("Error processing MODx.Browser onSelect callback:",e)}})),window.top.opener&&(window.top.close(),window.top.opener.focus())},onCancel:function(){var callback=this.config.onSelect||this.onSelectHandler,scope=this.config.scope;Ext.callback(callback,scope||this,[null]),this.fireEvent("select",null),window.top.opener&&(window.top.close(),window.top.opener.focus())},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-browser-rte",MODx.browser.RTE),MODx.browser.onPopState=function({state},{tree,view}){const params=MODx.util.UrlParams.parse(state),defaultSource=view.config.originalSource,source=params.source||defaultSource;tree.sourceCombo&&!tree.config.hideSourceCombo&&source!==tree.sourceCombo.getValue()?(tree.config.source=source,tree.baseParams.source=source,tree.dir=params.dir||"/",tree.sourceCombo.getStore().load({scope:tree,callback(){tree.sourceCombo.setValue(source),tree.refresh();const root=tree.getRootNode();root&&root.setText(tree.sourceCombo.getRawValue()),view.run({dir:params.dir||"/",source,allowedFileTypes:view.config.allowedFileTypes||"",wctx:view.config.wctx||"web"}),tree.expandTreePath(params.dir||"/")}})):(view.run({dir:params.dir||"/",source,allowedFileTypes:view.config.allowedFileTypes||"",wctx:view.config.wctx||"web"}),tree.expandTreePath(params.dir||"/"))},Ext.apply(Ext,{isFirebug:window.console&&window.console.firebug}),MODx.Layout=function(config={}){Ext.BLANK_IMAGE_URL=MODx.config.manager_url+"assets/ext3/resources/images/default/s.gif",Ext.Ajax.defaultHeaders={modAuth:config.auth},Ext.Ajax.extraParams={HTTP_MODAUTH:config.auth},MODx.siteId=config.auth,MODx.expandHelp=!!+MODx.config.inline_help;const sp=new MODx.HttpProvider;Ext.state.Manager.setProvider(sp),sp.initState(MODx.defaultState),config.showTree=!1,config.search&&new MODx.SearchBar,Ext.applyIf(config,{layout:"border",id:"modx-layout",stateSave:!0,items:this.buildLayout(config)}),MODx.Layout.superclass.constructor.call(this,config),this.config=config,this.addEvents({afterLayout:!0,loadKeyMap:!0,loadTabs:!0}),this.loadKeys(),config.showTree||Ext.getCmp("modx-leftbar-tabs").collapse(!1),this.fireEvent("afterLayout")},Ext.extend(MODx.Layout,Ext.Viewport,{menuBarWidth:70,splitBarMargin:8,focusRestoreEls:[],subNavOpen:!1,getSplitBarMargin:function(){return this.splitBarMargin},buildLayout:function(config){var items=[],north=this.getNorth(config),west=this.getWest(config),center=this.getCenter(config),south=this.getSouth(config),east=this.getEast(config);return north&&Ext.isObject(north)&&items.push(north),west&&Ext.isObject(west)&&items.push(west),center&&Ext.isObject(center)&&items.push(center),south&&Ext.isObject(south)&&items.push(south),east&&Ext.isObject(east)&&items.push(east),items},getNorth:function(config){return window.innerWidth<=640&&{xtype:"box",region:"north",applyTo:"modx-header",listeners:{afterrender:this.initPopper,scope:this}}},getWest:function(config){return window.innerWidth<=640?this.getTree(config):{region:"west",xtype:"box",id:"modx-header",applyTo:"modx-header",width:this.menuBarWidth,listeners:{afterrender:{fn:this.initPopper,scope:this}}}},getCenter:function(config){const center={region:"center",applyTo:"modx-content",padding:"0 1px 0 0",margins:{top:0,right:0,bottom:0,left:0},style:"width:100%",bodyStyle:"background-color:transparent;",id:"modx-content",autoScroll:!0};if(window.innerWidth<=640)return center;const tree=this.getTree(config);return center.margins.right=-this.menuBarWidth,tree.margins={left:this.menuBarWidth},{region:"center",layout:"border",id:"modx-split-wrapper",items:[tree,center],listeners:{render:{fn:function(cmp){cmp.collapsed||(cmp.items.map["modx-content"].margins.left=-this.getSplitBarMargin())},scope:this}}}},getSouth:function(config){},getEast:function(config){},getTree:function(config){const tabs=[],layout=this;MODx.perm.resource_tree&&(tabs.push({title:_("resources"),xtype:"modx-tree-resource",id:"modx-resource-tree"}),config.showTree=!0),MODx.perm.element_tree&&(tabs.push({title:_("elements"),xtype:"modx-tree-element",id:"modx-tree-element"}),config.showTree=!0),MODx.perm.file_tree&&(tabs.push({title:_("files"),xtype:"modx-panel-filetree",id:"modx-file-tree"}),config.showTree=!0);return{region:"west",applyTo:"modx-leftbar",id:"modx-leftbar-tabs",split:!0,width:300,minSize:280,autoScroll:!0,unstyled:!0,useSplitTips:!0,monitorResize:!0,layout:"anchor",headerCfg:window.innerWidth<=640?{}:{tag:"div",cls:"none",id:"modx-leftbar-header",html:MODx.config.site_name},items:[{xtype:"modx-tabs",plain:!0,defaults:{autoScroll:!0,fitToFrame:!0},id:"modx-leftbar-tabpanel",border:!1,activeTab:0,stateful:!0,stateEvents:["tabchange"],getState:function(){return{activeTab:this.items.indexOf(this.getActiveTab())}},items:tabs,listeners:{afterrender:function(){const baseTabs=this,header=Ext.get("modx-leftbar-header");if(MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Resource/GetToolbar"},listeners:{success:{fn:function(response){const trashTrigger=Object.values(response.object).find((item=>"emptifier"===item.id));if(trashTrigger){const trashTab=baseTabs.add({id:"modx-trash-link",title:'',updateState(deletedCount=0){const tab=this,tabEl=tab.tabEl,tooltipTarget=new Ext.Element(tabEl);0===deletedCount?(tab.disable(),tabEl.classList.remove("active")):(tab.enable(),tabEl.classList.add("active")),tab.tooltip=new Ext.ToolTip({target:tooltipTarget,title:_("trash.manage_recycle_bin_tooltip",{count:deletedCount})})}});trashTrigger.disabled||trashTab.tabEl.classList.add("active"),trashTrigger.tooltip&&(trashTab.tooltip=new Ext.ToolTip({target:new Ext.Element(trashTab.tabEl),title:trashTrigger.tooltip}))}},scope:this}}}),header){let html="";const el=document.createElement("a");""!==MODx.config.manager_logo&&void 0!==MODx.config.manager_logo&&(html+=''),el.href=MODx.config.default_site_url||MODx.config.site_url,el.title=MODx.config.site_name,el.innerText=Ext.util.Format.ellipsis(MODx.config.site_name,45,!0),el.target="_blank",html+=el.outerHTML,header.dom.innerHTML=html}},beforetabchange:{fn:function(panel,tab){if(tab&&"modx-trash-link"==tab.id){if(tab.tabEl.classList.contains("active")){var tree=Ext.getCmp("modx-resource-tree");tree&&tree.redirect("?a=resource/trash")}return!1}},scope:this}}}],getState:function(){return{collapsed:this.collapsed,width:this.width}},collapse:function(animate){if(this.collapsed||this.el.hasFxBlock()||!1===this.fireEvent("beforecollapse",this,animate))return;const contentRegion=Ext.getCmp("modx-content");if(contentRegion&&(contentRegion.margins.left=0,Ext.getCmp("modx-layout").doLayout()),animate&&window.innerWidth>960){Ext.getCmp("modx-leftbar-tabpanel").getEl().dom.style.opacity=0,this.el.dom.style.left="-"+this.el.dom.style.width}else this.el.dom.style.display="none";return this.collapsed=!0,this.saveState(),this.fireEvent("collapse",this),this},expand:function(animate){if(!this.collapsed||this.el.hasFxBlock()||!1===this.fireEvent("beforeexpand",this,animate))return;const contentRegion=Ext.getCmp("modx-content");if(contentRegion&&(contentRegion.margins.left=-layout.getSplitBarMargin()),animate&&window.innerWidth>960){const tree=Ext.getCmp("modx-leftbar-tabpanel").getEl();window.setTimeout((()=>{tree.dom.style.visibility="visible",tree.dom.style.opacity=1}),100)}else this.el.dom.style.display="";return this.collapsed=!1,this.saveState(),this.fireEvent("expand",this),this},listeners:{beforestatesave:{fn:this.onBeforeSaveState,scope:this},afterrender:function(){const trigger=Ext.get("modx-leftbar-trigger");this.collapsed&&trigger.addClass("collapsed"),trigger.on("click",(function(){this.collapsed?(trigger.removeClass("collapsed"),this.expand(!0)):(trigger.addClass("collapsed"),this.collapse(!0))}),this)}}}},initPopper:function(){for(var el=this,buttons=document.getElementById("modx-navbar").getElementsByClassName("top"),position=window.innerWidth<=960?"bottom":"right",i=0;i960&&this.initSubPopper()},showMenu:function(el){var submenu=document.getElementById(el.id+"-submenu");if(submenu.classList.contains("active"))submenu.classList.remove("active");else{this.hideMenu(),submenu.classList.add("active"),setTimeout((()=>{submenu.querySelectorAll("a")[0].focus()}),50);var focusRestore=e=>{setTimeout((()=>{this.subNavOpen||submenu.contains(document.activeElement)||(this.focusRestoreEls?.pop()?.focus(),this.hideMenu(),window.removeEventListener("focusout",focusRestore))}),1)},menuArrowKeysNavigation=e=>{"Escape"==e.code&&(this.hideMenu(),this.focusRestoreEls[0]?.focus(),this.focusRestoreEls=[],window.removeEventListener("keyup",menuArrowKeysNavigation))};window.addEventListener("focusout",focusRestore),window.addEventListener("keyup",menuArrowKeysNavigation)}this.hideSubMenu()},hideMenu:function(){for(var submenus=document.getElementsByClassName("modx-subnav"),i=0;i{requestAnimationFrame((()=>{menu.contains(document.activeElement)||(_this.focusRestoreEls?.pop()?.parentNode?.nextSibling?.focus(),hide(button),window.removeEventListener("focusout",focusRestore))}))};window.addEventListener("focusout",focusRestore)}function hide(button){var parentmenu=button.closest("ul");button.classList.remove("active");for(var buttons=parentmenu.querySelectorAll(".sub"),i=0;i', + id: 'modx-abtn-purge', + handler: this.purgeResource, + hidden: !config.record.deleted, + scope: this, + }); + } + buttons.push({ text: '' ,id: 'modx-abtn-help' diff --git a/manager/assets/modext/widgets/resource/modx.grid.trash.js b/manager/assets/modext/widgets/resource/modx.grid.trash.js index ad50e5e8085..0849f12cbcb 100644 --- a/manager/assets/modext/widgets/resource/modx.grid.trash.js +++ b/manager/assets/modext/widgets/resource/modx.grid.trash.js @@ -244,7 +244,7 @@ Ext.extend(MODx.grid.Trash, MODx.grid.Grid, { 'success': { fn: function (data) { this.getSelectionModel().clearSelections(true); - this.refreshEverything(data.total); + this.refreshEverything(data.object.deletedCount); }, scope: this }, 'error': { @@ -404,25 +404,7 @@ Ext.extend(MODx.grid.Trash, MODx.grid.Grid, { }, refreshRecycleBinButton: function (total) { - var trashButton = Ext.getCmp('modx-trash-link'); - - if (total !== undefined) { - // if no resource is deleted, we disable the icon. - // otherwise we have to update the tooltip - if (total == 0) { - trashButton.disable(); - trashButton.tooltip = new Ext.ToolTip({ - target: trashButton.tabEl, - title: _('trash.manage_recycle_bin_tooltip') - }); - } else { - trashButton.enable(); - trashButton.tooltip = new Ext.ToolTip({ - target: trashButton.tabEl, - title: _('trash.manage_recycle_bin_tooltip', {count: total}) - }); - } - } + Ext.getCmp('modx-trash-link')?.updateState(+total); }, listResources: function (separator) { diff --git a/manager/assets/modext/widgets/resource/modx.panel.resource.js b/manager/assets/modext/widgets/resource/modx.panel.resource.js index 7fe99bed179..f596be17d07 100644 --- a/manager/assets/modext/widgets/resource/modx.panel.resource.js +++ b/manager/assets/modext/widgets/resource/modx.panel.resource.js @@ -141,24 +141,30 @@ Ext.extend(MODx.panel.Resource,MODx.FormPanel,{ } } - ,handleDeleted: function(deleted) { - if (this.config.canDelete == 1 && !this.config.locked) { - var deleteBtn = Ext.getCmp('modx-abtn-delete'); - var unDeleteBtn = Ext.getCmp('modx-abtn-undelete'); - var deleteChk = Ext.getCmp('modx-resource-deleted'); - if (deleteBtn && unDeleteBtn) { - if (deleted) { - deleteBtn.hide(); - unDeleteBtn.show(); - } else { - unDeleteBtn.hide(); - deleteBtn.show(); - } - } - if (deleteChk) { - deleteChk.setValue(deleted); + ,handleDeleted: function(isDeleted) { + const canDelete = this.config.canDelete === 1 && !this.config.locked; + + if (!canDelete) { + return; + } + + const deleteButton = Ext.getCmp('modx-abtn-delete'); + const unDeleteButton = Ext.getCmp('modx-abtn-undelete'); + const purgeButton = Ext.getCmp('modx-abtn-purge'); + + if (deleteButton && unDeleteButton && purgeButton) { + if (isDeleted) { + deleteButton.hide(); + purgeButton.show(); + unDeleteButton.show(); + } else { + deleteButton.show(); + purgeButton.hide(); + unDeleteButton.hide(); } } + + Ext.getCmp('modx-resource-deleted')?.setValue(isDeleted); } ,updateTree: function() { diff --git a/manager/assets/modext/widgets/resource/modx.tree.resource.js b/manager/assets/modext/widgets/resource/modx.tree.resource.js index c656574c156..046bf498783 100644 --- a/manager/assets/modext/widgets/resource/modx.tree.resource.js +++ b/manager/assets/modext/widgets/resource/modx.tree.resource.js @@ -174,95 +174,126 @@ Ext.extend(MODx.tree.Resource,MODx.tree.Tree,{ window.open(this.cm.activeNode.attributes.preview_url); } - ,deleteDocument: function(itm,e) { - var node = this.cm.activeNode; - var id = node.id.split('_');id = id[1]; - var resource = Ext.util.Format.htmlEncode(node.ui.textNode.innerText); + ,deleteDocument: function() { + const node = this.cm.activeNode; + const id = node.id.split('_')[1]; + const resource = Ext.util.Format.htmlEncode(node.ui.textNode.innerText); + MODx.msg.confirm({ - text: _('resource_delete_confirm',{ - resource: resource - }) - ,url: MODx.config.connector_url - ,params: { - action: 'Resource/Delete' - ,id: id - } - ,listeners: { - 'success': {fn:function(data) { - var trashButton = Ext.getCmp('modx-trash-link'); - if (trashButton) { - if (!data.object.deletedCount) { - trashButton.tabEl.classList.remove('active'); - } else { - trashButton.tabEl.classList.add('active'); + text: _('resource_delete_confirm', { resource }), + url: MODx.config.connector_url, + params: { + action: 'Resource/Delete', + id, + }, + listeners: { + success: { + fn: (data) => { + const deletedCount = +data.object.deletedCount; + Ext.getCmp('modx-trash-link')?.updateState(deletedCount); + + const nodeUI = node.getUI(); + nodeUI.addClass('deleted'); + node.cascade((childNode) => childNode.getUI().addClass('deleted'), this); + + // Refresh the trash manager if possible + Ext.getCmp('modx-trash-resources')?.refresh(); + + Ext.get(nodeUI.getEl()).frame(); + + // Handle deleted resource in update panel + const updatePanel = Ext.getCmp('modx-panel-resource'); + if (updatePanel && MODx.request.a === 'resource/update' && MODx.request.id === id) { + updatePanel.handleDeleted(true); } - trashButton.tooltip = new Ext.ToolTip({ - target: trashButton.tabEl, - title: _('trash.manage_recycle_bin_tooltip', {count: data.object.deletedCount}) - }); - } + }, + scope: this, + }, + } + }); + } - var n = this.cm.activeNode; - var ui = n.getUI(); + ,undeleteDocument: function() { + const node = this.cm.activeNode; + const id = node.id.split('_')[1]; - ui.addClass('deleted'); - n.cascade(function(nd) { - nd.getUI().addClass('deleted'); - },this); + MODx.Ajax.request({ + url: MODx.config.connector_url, + params: { + action: 'Resource/Undelete', + id, + }, + listeners: { + success: { + fn: function(response) { + const deletedCount = +response.object.deletedCount; + Ext.getCmp('modx-trash-link')?.updateState(deletedCount); + + const activeNodeUI = node.getUI(); + + activeNodeUI.removeClass('deleted'); + node.cascade((childNode) => childNode.getUI().removeClass('deleted'), this); + + const trashResourcesPanel = Ext.getCmp('modx-trash-resources'); + if (trashResourcesPanel) { + trashResourcesPanel.refresh(); + } - // refresh the trash manager if possible - var trashlist = Ext.getCmp('modx-trash-resources'); - if (trashlist) { - trashlist.refresh(); - } + Ext.get(activeNodeUI.getEl()).frame(); - Ext.get(ui.getEl()).frame(); - },scope:this} + const updatePanel = Ext.getCmp('modx-panel-resource'); + if (updatePanel && MODx.request.a === 'resource/update' && MODx.request.id === id) { + updatePanel.handleDeleted(false); + } + }, + scope: this + } } }); } - ,undeleteDocument: function(itm,e) { - var node = this.cm.activeNode; - var id = node.id.split('_');id = id[1]; - MODx.Ajax.request({ - url: MODx.config.connector_url - ,params: { - action: 'Resource/Undelete' - ,id: id - } - ,listeners: { - 'success': {fn:function(data) { - var trashButton = Ext.getCmp('modx-trash-link'); - if (trashButton) { - if (!data.object.deletedCount) { - trashButton.tabEl.classList.remove('active'); - } else { - trashButton.tabEl.classList.add('active'); + ,purgeDocument: function(itm,e) { + const node = this.cm.activeNode; + const id = node.id.split('_')[1]; + const name = Ext.util.Format.htmlEncode(node.ui.textNode.innerText); + + MODx.msg.confirm({ + text: _('resource_purge_confirm',{ + resource: name + ' ('+ id + ')' + }), + url: MODx.config.connector_url, + params: { + action: 'Resource/Trash/Purge', + ids: id + }, + listeners: { + success: { + fn: function(data) { + if (MODx.request.a === 'resource/update' && MODx.request.id === id) { + const updatePanel = Ext.getCmp('modx-panel-resource'); + if (updatePanel) { + updatePanel.warnUnsavedChanges = false; + } + MODx.loadPage('?'); + + return; } - trashButton.tooltip = new Ext.ToolTip({ - target: trashButton.tabEl, - title: _('trash.manage_recycle_bin_tooltip', {count: data.object.deletedCount}) - }); - } - var n = this.cm.activeNode; - var ui = n.getUI(); + Ext.getCmp('modx-trash-link')?.updateState(+data.object.deletedCount); - ui.removeClass('deleted'); - n.cascade(function(nd) { - nd.getUI().removeClass('deleted'); - },this); + node.remove(); - // refresh the trash manager if possible - var trashlist = Ext.getCmp('modx-trash-resources'); - if (trashlist) { - trashlist.refresh(); - } + // refresh the trash manager if possible + Ext.getCmp('modx-trash-resources')?.refresh(); - Ext.get(ui.getEl()).frame(); - },scope:this} - } + MODx.msg.status({ + title: _('success'), + message: data.message, + }); + }, + scope: this, + }, + }, }); } @@ -610,6 +641,10 @@ Ext.extend(MODx.tree.Resource,MODx.tree.Tree,{ text: _('resource_undelete') ,handler: this.undeleteDocument }); + m.push({ + text: _('resource_purge') + ,handler: this.purgeDocument + }); } else if (ui.hasClass('pdelete') && !ui.hasClass('deleted')) { m.push({ text: _('resource_delete') diff --git a/manager/controllers/default/resource/resource.class.php b/manager/controllers/default/resource/resource.class.php index 6ee2e395adf..bf7a01f209e 100644 --- a/manager/controllers/default/resource/resource.class.php +++ b/manager/controllers/default/resource/resource.class.php @@ -155,6 +155,7 @@ public function setPermissions() $this->canCreate = $this->modx->hasPermission('new_document'); $this->canPublish = $this->modx->hasPermission('publish_document'); $this->canDelete = ($this->modx->hasPermission('delete_document') && $this->resource->checkPolicy(['save' => true, 'delete' => true])); + $this->canPurge = ($this->modx->hasPermission('purge_deleted') && $this->resource->checkPolicy(['save' => true, 'delete' => true])); $this->canDuplicate = ($this->modx->hasPermission('resource_duplicate') && $this->resource->checkPolicy('save')); $this->canCreateRoot = $this->modx->hasPermission('new_document_in_root'); } diff --git a/manager/controllers/default/resource/staticresource/update.class.php b/manager/controllers/default/resource/staticresource/update.class.php index 7b5604ce208..a61c8656c19 100644 --- a/manager/controllers/default/resource/staticresource/update.class.php +++ b/manager/controllers/default/resource/staticresource/update.class.php @@ -43,6 +43,7 @@ public function loadCustomCssJs() 'canEdit' => (int)$this->modx->hasPermission('edit_document'), 'canCreate' => (int)$this->modx->hasPermission('new_document'), 'canDelete' => (int)$this->modx->hasPermission('delete_document'), + 'canPurge' => (int)$this->canPurge, 'show_tvs' => (int)!empty($this->tvCounts), ]; $this->addHtml('