openrat-cms

OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

commit 922f381eae1978c99710d273afe53e6b1b69bea8
parent b9e8045cb5d37e5ff0c350fd2faa387c71b33d88
Author: Jan Dankert <develop@jandankert.de>
Date:   Thu,  1 Oct 2020 20:55:34 +0200

Refactoring: Moving some global JS functions into the OR Namespace

Diffstat:
modules/cms/ui/themes/default/script/openrat.js | 455++++++++++++++++++++++++++++++++++---------------------------------------------
modules/cms/ui/themes/default/script/openrat.min.js | 20++++++++------------
modules/cms/ui/themes/default/script/openrat/common.js | 248++-----------------------------------------------------------------------------
modules/cms/ui/themes/default/script/openrat/workbench.js | 170+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
modules/cms/ui/themes/default/script/plugin/jquery-plugin-orLinkify.js | 21+++++++++++----------
modules/cms/ui/themes/default/script/plugin/jquery-plugin-orTree.js | 12+++++++++---
6 files changed, 394 insertions(+), 532 deletions(-)

diff --git a/modules/cms/ui/themes/default/script/openrat.js b/modules/cms/ui/themes/default/script/openrat.js @@ -183,23 +183,21 @@ jQuery.fn.orSearch = function( options ) }; /* Include script: jquery-plugin-orLinkify */ /** - * Enable clicking on '.clickable'-Areas. + * JQuery-Plugin, enable clicking on an area. + * It searches for an anchor (<a href="..." />) in the child elements and virtually clicks on it. */ - -var popupWindow; - jQuery.fn.orLinkify = function() { - // Das 'echte' Ausführen der Links deaktivieren, da dies schon per Javascript erfolgt. - // Das Öffnen in einem neuen Tab funktioniert aber weiterhin über die URL. + // Disable all links in this linkified area. + // The user is already able to open the link in a new tab. $(this).find('a').click( function(event) { event.preventDefault(); } ); return $(this).click(function() { - + // Searching for the first link in all children. $(this).find('a').first().each( function() { let type = $(this).attr('data-type'); @@ -210,6 +208,9 @@ jQuery.fn.orLinkify = function() switch( type ) { + /** + * Creating a temporary form element for submitting a POST request. + */ case 'post': // Create a temporary form element. @@ -233,7 +234,7 @@ jQuery.fn.orLinkify = function() case 'edit': case 'dialog': - startDialog($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-method'),$(this).attr('data-id'),$(this).attr('data-extra') ); + Openrat.Workbench.startDialog($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-method'),$(this).attr('data-id'),$(this).attr('data-extra') ); break; case 'external': @@ -241,7 +242,7 @@ jQuery.fn.orLinkify = function() break; case 'popup': - popupWindow = window.open( $(this).attr('data-url'), 'Popup', 'location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes'); + Openrat.Workbench.popupWindow = window.open( $(this).attr('data-url'), 'Popup', 'location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes'); break; case 'help': @@ -253,7 +254,7 @@ jQuery.fn.orLinkify = function() break; case 'open': - openNewAction( $(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-id') ); + Openrat.Workbench.openNewAction( $(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-id') ); break; default: @@ -275,7 +276,13 @@ jQuery.fn.orLinkify = function() */ jQuery.fn.orTree = function () { - $(this).each(function (idxx, treeEl) + let registerTreeBranchEvents = function (viewEl) + { + Openrat.Workbench.registerDraggable(viewEl); + } + + + $(this).each(function (idxx, treeEl) { // Klick-Funktion zum Öffnen des Zweiges. $(treeEl).children('.or-navtree-node-control').click( function () @@ -325,13 +332,13 @@ jQuery.fn.orTree = function () $ul.append( html ); $ul.find('li').orTree(); // All subnodes are getting event listener for open/close - // Die Navigationspunkte sind anklickbar, hier wird der Standardmechanismus benutzt. - $ul.find('.clickable').orLinkify(); /* macht linkify schon $(new_li).find('.clickable a').click( function(event) { event.preventDefault(); // Links werden per Javascript geöffnet. Beim Öffnen im neuen Tab hat das aber keine Bedeutung. } );*/ registerTreeBranchEvents($ul); + // Die Navigationspunkte sind anklickbar, hier wird der Standardmechanismus benutzt. + $ul.find('.clickable').orLinkify(); $ul.slideDown('fast'); // Einblenden }).fail(function () { @@ -1971,6 +1978,7 @@ Openrat.Workbench = new function() this.state = {}; + this.popupWindow = null; /** * Initializes the Workbench. @@ -2012,7 +2020,7 @@ Openrat.Workbench = new function() this.openModalDialog = function () { if ( $('#dialog').data('action') ) { - startDialog('',$('#dialog').data('action'),$('#dialog').data('action'),0,{}) + this.startDialog('',$('#dialog').data('action'),$('#dialog').data('action'),0,{}) } } @@ -2364,8 +2372,8 @@ Openrat.Workbench = new function() this.dataChangedHandler = $.Callbacks(); this.dataChangedHandler.add( function() { - if ( popupWindow !== undefined ) - popupWindow.location.reload(); + if ( Openrat.Workbench.popupWindow ) + Openrat.Workbench.popupWindow.location.reload(); } ); this.afterViewLoadedHandler = $.Callbacks(); @@ -2383,8 +2391,169 @@ Openrat.Workbench = new function() }); } -} + /** + * Sets the application title. + */ + this.setApplicationTitle = function( title ) { + + if (title) + $('head > title').text( title + ' - ' + $('head > title').data('default') ); + else + $('head > title').text( $('head > title').data('default') ); + } + + + /** + * Escape HTML entities. + * + * @param str + * @returns {string} + */ + var htmlEntities = function( str ) { + return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); + } + + + /** + * open and close groups. + * + * @param $el + */ + this.registerOpenClose = function( $el ) + { + $($el).children('.on-click-open-close').click( function() { + $(this).closest('.toggle-open-close').toggleClass('open closed'); + }); + } + + + + /** + * Setzt neue Action und aktualisiert alle Fenster. + * + * @param action Action + * @param id Id + */ + this.openNewAction = function( name,action,id ) + { + // Im Mobilmodus soll das Menü verschwinden, wenn eine neue Action geoeffnet wird. + $('nav').removeClass('open'); + + Openrat.Workbench.setApplicationTitle( name ); // Sets the title. + + Openrat.Navigator.navigateToNew( {'action':action, 'id':id } ); + } + + + + /** + * Creating a new modal dialog. + * + * @param name + * @param action Action + * @param method + * @param id Id + * @param params + */ + this.startDialog = function( name,action,method,id,params ) + { + // Attribute aus dem aktuellen Editor holen, falls die Daten beim Aufrufer nicht angegeben sind. + if (!action) + action = $('#editor').attr('data-action'); + + if (!id) + id = $('#editor').attr('data-id'); + + let view = new Openrat.View( action,method,id,params ); + + view.before = function() { + $('#dialog > .view').html('<div class="header"><img class="icon" title="" src="./themes/default/images/icon/'+method+'.png" />'+name+'</div>'); + $('#dialog > .view').data('id',id); + $('#dialog').removeClass('is-closed').addClass('is-open'); + + let view = this; + + this.escapeKeyClosingHandler = function (e) { + if (e.keyCode == 27) { // ESC keycode + view.close(); + + $(document).off('keyup'); // de-register. + } + }; + + $(document).keyup(this.escapeKeyClosingHandler); + + // Nicht-Modale Dialoge durch Klick auf freie Fläche schließen. + $('#dialog .filler').click( function() + { + view.close(); + }); + + } + + view.close = function() { + + // Strong modal dialogs are unable to close. + // Really? + if ( $('div#dialog').hasClass('modal') ) + return; + + $('#dialog .view').removeClass('dirty'); + $('#dialog .view').html(''); + $('#dialog').removeClass('is-open').addClass('is-closed'); // Dialog schließen + + $(document).unbind('keyup',this.escapeKeyClosingHandler); // Cleanup ESC-Key-Listener + } + + view.start( $('div#dialog > .view') ); + } + + + + + this.registerDraggable = function(viewEl) { + +// Drag n Drop: Inhaltselemente (Dateien,Seiten,Ordner,Verknuepfungen) koennen auf Ordner gezogen werden. + + $(viewEl).find('.or-draggable').draggable( + { + helper: 'clone', + opacity: 0.7, + zIndex: 2, + distance: 10, + cursor: 'move', + revert: 'false' + } + ); + + } + + + this.registerDroppable = function(viewEl) { + + + $(viewEl).find('.or-droppable').droppable({ + accept: '.or-draggable', + hoverClass: 'or-droppable--hover', + activeClass: 'or-droppable--active', + + drop: function (event, ui) { + + let dropped = ui.draggable; + + let id = dropped.data('id' ); + let name = dropped.data('name'); + if (!name) + name = id; + + $(this).find('.or-selector-link-value').val( id ); + $(this).find('.or-selector-link-name' ).val( name ).attr('placeholder',name ); + } + }); + } + +} /* Include script: navigator */ @@ -2612,9 +2781,9 @@ Openrat.Workbench.afterNewActionHandler.add( function() { Openrat.Workbench.afterViewLoadedHandler.add( function(element) { // Refresh already opened popup windows. - if ( typeof popupWindow != "undefined" ) + if ( Openrat.Workbench.popupWindow ) $(element).find("a[data-type='popup']").each( function() { - popupWindow.location.href = $(this).attr('data-url'); + Openrat.Workbench.popupWindow.location.href = $(this).attr('data-url'); }); }); @@ -2726,7 +2895,7 @@ Openrat.Workbench.afterViewLoadedHandler.add( function(viewEl ) { $($element).find('.search input').orSearch( { dropdown:'#title div.search div.dropdown', select: function(obj) { - openNewAction( obj.name, obj.action, obj.id ); + Openrat.Workbench.openNewAction( obj.name, obj.action, obj.id ); } } ); @@ -2762,8 +2931,8 @@ Openrat.Workbench.afterViewLoadedHandler.add( function(viewEl ) { function registerDragAndDrop(viewEl) { - registerDraggable(viewEl); - registerDroppable(viewEl); + Openrat.Workbench.registerDraggable(viewEl); + Openrat.Workbench.registerDroppable(viewEl); } registerDragAndDrop(viewEl); @@ -2772,242 +2941,6 @@ Openrat.Workbench.afterViewLoadedHandler.add( function(viewEl ) { } ); - -function registerDraggable(viewEl) { - -// Drag n Drop: Inhaltselemente (Dateien,Seiten,Ordner,Verknuepfungen) koennen auf Ordner gezogen werden. - - $(viewEl).find('.or-draggable').draggable( - { - helper: 'clone', - opacity: 0.7, - zIndex: 2, - distance: 10, - cursor: 'move', - revert: 'false' - } - ); - -} - -function registerTreeBranchEvents(viewEl) -{ - registerDraggable(viewEl); -} - - -function registerDroppable(viewEl) { - - - $(viewEl).find('.or-droppable').droppable({ - accept: '.or-draggable', - hoverClass: 'or-droppable--hover', - activeClass: 'or-droppable--active', - - drop: function (event, ui) { - - let dropped = ui.draggable; - - let id = dropped.data('id' ); - let name = dropped.data('name'); - if (!name) - name = id; - - $(this).find('.or-selector-link-value').val( id ); - $(this).find('.or-selector-link-name' ).val( name ).attr('placeholder',name ); - } - }); -} - - - - - - -/** - * Setzt neuen modalen Dialog und aktualisiert alle Fenster. - * @param name - * @param action Action - * @param method - * @param id Id - * @param params - */ -function startDialog( name,action,method,id,params ) -{ - // Attribute aus dem aktuellen Editor holen, falls die Daten beim Aufrufer nicht angegeben sind. - if (!action) - action = $('#editor').attr('data-action'); - - if (!id) - id = $('#editor').attr('data-id'); - - let view = new Openrat.View( action,method,id,params ); - - view.before = function() { - $('#dialog > .view').html('<div class="header"><img class="icon" title="" src="./themes/default/images/icon/'+method+'.png" />'+name+'</div>'); - $('#dialog > .view').data('id',id); - $('#dialog').removeClass('is-closed').addClass('is-open'); - - let view = this; - - this.escapeKeyClosingHandler = function (e) { - if (e.keyCode == 27) { // ESC keycode - view.close(); - - $(document).off('keyup'); // de-register. - } - }; - - $(document).keyup(this.escapeKeyClosingHandler); - - // Nicht-Modale Dialoge durch Klick auf freie Fläche schließen. - $('#dialog .filler').click( function() - { - view.close(); - }); - - } - - view.close = function() { - - // Strong modal dialogs are unable to close. - // Really? - if ( $('div#dialog').hasClass('modal') ) - return; - - $('#dialog .view').removeClass('dirty'); - $('#dialog .view').html(''); - $('#dialog').removeClass('is-open').addClass('is-closed'); // Dialog schließen - - $(document).unbind('keyup',this.escapeKeyClosingHandler); // Cleanup ESC-Key-Listener - } - - view.start( $('div#dialog > .view') ); -} - - - - -/** - * Setzt einen Fenster-Titel für die ganze Anwendung. - */ -function setTitle( title ) -{ - if ( title ) - $('head > title').text( title + ' - ' + $('head > title').data('default') ); - else - $('head > title').text( $('head > title').data('default') ); -} - - - -/** - * Setzt neue Action und aktualisiert alle Fenster. - * - * @param action Action - * @param id Id - */ -function openNewAction( name,action,id ) -{ - // Im Mobilmodus soll das Menü verschwinden, wenn eine neue Action geoeffnet wird. - $('nav').removeClass('open'); - - setTitle( name ); // Title setzen. - - Openrat.Navigator.navigateToNew( {'action':action, 'id':id } ); -} - - - - -//Quelle: -//http://aktuell.de.selfhtml.org/tippstricks/javascript/bbcode/ -function insert(tagName, aTag, eTag) -{ -var input = document.forms[0].elements[tagName]; -input.focus(); -/* IE */ -if(typeof document.selection != 'undefined') { - /* Einfuegen des Formatierungscodes */ -// alert('IE'); - var range = document.selection.createRange(); - var insText = range.text; - range.text = aTag + insText + eTag; - /* Anpassen der Cursorposition */ - range = document.selection.createRange(); - if (insText.length == 0) { - range.move('character', -eTag.length); - } else { - range.moveStart('character', aTag.length + insText.length + eTag.length); - } - range.select(); -} -/* Gecko */ -else if(typeof input.selectionStart != 'undefined') -{ -// alert('Gecko'); - /* Einfuegen des Formatierungscodes */ - var start = input.selectionStart; - var end = input.selectionEnd; - var insText = input.value.substring(start, end); - input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end); - /* Anpassen der Cursorposition */ - var pos; - if (insText.length == 0) { - pos = start + aTag.length; - } else { - pos = start + aTag.length + insText.length + eTag.length; - } - input.selectionStart = pos; - input.selectionEnd = pos; -} -/* uebrige Browser */ -else -{ - /* Abfrage der Einfuegeposition */ - - /* - var pos; - var re = new RegExp('^[0-9]{0,3}$'); - while(!re.test(pos)) { - pos = prompt("Position (0.." + input.value.length + "):", "0"); - } - if(pos > input.value.length) { - pos = input.value.length; - } - */ - pos = input.value.length; - - /* Einfuegen des Formatierungscodes */ - var insText = prompt("Text"); - input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos); -} -} - - - - - -function help(el,url,suffix) -{ - var action = $(el).closest('div.panel').find('li.action.active').attr('data-action'); - var method = $(el).closest('div.panel').find('li.action.active').attr('data-method'); - - window.open(url + action + '/'+ method + suffix, 'OpenRat_Help', 'location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes'); -} - - -function htmlEntities(str) { - return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); -} - -function registerOpenClose( $el ) -{ - $($el).children('.on-click-open-close').click( function() { - $(this).closest('.toggle-open-close').toggleClass('open closed'); - }); - -} /* Include script: editor */ Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { @@ -3403,10 +3336,12 @@ $(document).on('orViewLoaded',function(event, data) { }); */ /* Include script: group */ +/** + * open/close handler for groups. + */ Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - registerOpenClose( $(element).find('.or-group.toggle-open-close') ); - + Openrat.Workbench.registerOpenClose( $(element).find('.or-group.toggle-open-close') ); }); /* Include script: upload */ diff --git a/modules/cms/ui/themes/default/script/openrat.min.js b/modules/cms/ui/themes/default/script/openrat.min.js @@ -115,11 +115,11 @@ else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseIn else{this.currentItem.show()};if(this.fromOutside&&!e){s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))})};if((this.fromOutside||this.domPosition.prev!==this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!==this.currentItem.parent()[0])&&!e){s.push(function(t){this._trigger("update",t,this._uiHash())})};if(this!==this.currentContainer){if(!e){s.push(function(t){this._trigger("remove",t,this._uiHash())});s.push((function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}).call(this,this.currentContainer));s.push((function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}).call(this,this.currentContainer))}};function o(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}};for(i=this.containers.length-1;i>=0;i--){if(!e){s.push(o("deactivate",this,this.containers[i]))};if(this.containers[i].containerCache.over){s.push(o("out",this,this.containers[i]));this.containers[i].containerCache.over=0}};if(this.storedCursor){this.document.find("body").css("cursor",this.storedCursor);this.storedStylesheet.remove()};if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)};if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex==="auto"?"":this._storedZIndex)};this.dragging=!1;if(!e){this._trigger("beforeStop",t,this._uiHash())};this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(!this.cancelHelperRemoval){if(this.helper[0]!==this.currentItem[0]){this.helper.remove()};this.helper=null};if(!e){for(i=0;i<s.length;i++){s[i].call(this,t)};this._trigger("stop",t,this._uiHash())};this.fromOutside=!1;return!this.cancelHelperRemoval},_trigger:function(){if(t.Widget.prototype._trigger.apply(this,arguments)===!1){this.cancel()}},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})); ;jQuery.fn.orSearch=function(e){var t=$.extend({'dropdown':$(),'select':function(e){}},e);return $(this).on('input',function(){let searchArgument=$(this).val();let dropdownEl=$(t.dropdown);if(searchArgument.length){$(dropdownEl).empty();$.ajax({'type':'GET',url:'./api/?action=search&subaction=quicksearch&output=json&search='+searchArgument,data:null,success:function(e,n,r){for(id in e.output.result){let result=e.output.result[id];let div=$('<div class="entry or-search-result" title="'+result.desc+'"></div>');div.data('object',{'name':result.name,'action':result.type,'id':result.id});let link=$('<a />').attr('href',Openrat.Navigator.createShortUrl(result.type,result.id));link.click(function(e){e.preventDefault()});$(link).append('<i class="image-icon image-icon--action-'+result.type+'" />');$(link).append('<span>'+result.name+'</span>');$(div).append(link);$(dropdownEl).append(div)};$(dropdownEl).closest('.or-menu').addClass('open');$(dropdownEl).find('.or-search-result').click(function(e){t.select($(this).data('object'))})}})} else{$(dropdownEl).empty()}})}; -;var popupWindow;jQuery.fn.orLinkify=function(){$(this).find('a').click(function(t){t.preventDefault()});return $(this).click(function(){$(this).find('a').first().each(function(){let type=$(this).attr('data-type');if($(this).parent().hasClass('inactive'))return;switch(type){case'post':$form=$('<form />').attr('method','POST').addClass('invisible');$form.data('afterSuccess',$(this).data('afterSuccess'));let params=jQuery.parseJSON($(this).attr('data-data'));params.output='json';$.each(params,function(t,a){let $input=$('<input />').attr('type','hidden').attr('name',t).attr('value',a);$form.append($input)});let form=new Openrat.Form();form.initOnElement($form);form.submit();break;case'edit':case'dialog':startDialog($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-method'),$(this).attr('data-id'),$(this).attr('data-extra'));break;case'external':window.open($(this).attr('data-url'),' _blank');break;case'popup':popupWindow=window.open($(this).attr('data-url'),'Popup','location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes');break;case'help':help(this,$(this).attr('data-url'),$(this).attr('data-suffix'));break;case'fullscreen':fullscreen(this);break;case'open':openNewAction($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-id'));break;default:throw'UI error: Unknown link type: '+type+' in link '+$(this).html()}})})}; -;jQuery.fn.orTree=function(){$(this).each(function(n,e){$(e).children('.or-navtree-node-control').click(function(){let $node=$(this).parent('.or-navtree-node');if($node.is('.or-navtree-node--is-open')){$node.children('ul').slideUp('fast').remove();$node.removeClass('or-navtree-node--is-open').addClass('or-navtree-node--is-closed').find('.tree-icon').removeClass('image-icon--node-open').addClass('image-icon--node-closed')} +;jQuery.fn.orLinkify=function(){$(this).find('a').click(function(t){t.preventDefault()});return $(this).click(function(){$(this).find('a').first().each(function(){let type=$(this).attr('data-type');if($(this).parent().hasClass('inactive'))return;switch(type){case'post':$form=$('<form />').attr('method','POST').addClass('invisible');$form.data('afterSuccess',$(this).data('afterSuccess'));let params=jQuery.parseJSON($(this).attr('data-data'));params.output='json';$.each(params,function(t,a){let $input=$('<input />').attr('type','hidden').attr('name',t).attr('value',a);$form.append($input)});let form=new Openrat.Form();form.initOnElement($form);form.submit();break;case'edit':case'dialog':Openrat.Workbench.startDialog($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-method'),$(this).attr('data-id'),$(this).attr('data-extra'));break;case'external':window.open($(this).attr('data-url'),' _blank');break;case'popup':Openrat.Workbench.popupWindow=window.open($(this).attr('data-url'),'Popup','location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes');break;case'help':help(this,$(this).attr('data-url'),$(this).attr('data-suffix'));break;case'fullscreen':fullscreen(this);break;case'open':Openrat.Workbench.openNewAction($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-id'));break;default:throw'UI error: Unknown link type: '+type+' in link '+$(this).html()}})})}; +;jQuery.fn.orTree=function(){let registerTreeBranchEvents=function(e){Openrat.Workbench.registerDraggable(e)};$(this).each(function(n,e){$(e).children('.or-navtree-node-control').click(function(){let $node=$(this).parent('.or-navtree-node');if($node.is('.or-navtree-node--is-open')){$node.children('ul').slideUp('fast').remove();$node.removeClass('or-navtree-node--is-open').addClass('or-navtree-node--is-closed').find('.tree-icon').removeClass('image-icon--node-open').addClass('image-icon--node-closed')} else{$(e).closest('div.view').addClass('loader');let $link=$node.find('a');let id=$link.data('id');let extraId=$link.data('extra');let loadBranchUrl='./?action=tree&subaction=branch&id='+id+'';if(typeof extraId==='string'){jQuery.each(jQuery.parseJSON(extraId.replace(/'/g,'"')),function(e,n){loadBranchUrl=loadBranchUrl+'&'+e+'='+n})} else if(typeof extraId==='object'){jQuery.each(extraId,function(e,n){loadBranchUrl=loadBranchUrl+'&'+e+'='+n})} -else{};$.get(loadBranchUrl).done(function(n){let $ul=$('<ul class="or-navtree-list" />');$(e).append($ul);$ul.append(n);$ul.find('li').orTree();$ul.find('.clickable').orLinkify();registerTreeBranchEvents($ul);$ul.slideDown('fast')}).fail(function(){Openrat.Workbench.notify('','','ERROR','Failed to load subtree',[],!1)}).always(function(){$(e).closest('div.view').removeClass('loader')});$node.addClass('or-navtree-node--is-open').removeClass('or-navtree-node--is-closed').find('.tree-icon').addClass('image-icon--node-open').removeClass('image-icon--node-closed')}})})}; +else{};$.get(loadBranchUrl).done(function(n){let $ul=$('<ul class="or-navtree-list" />');$(e).append($ul);$ul.append(n);$ul.find('li').orTree();registerTreeBranchEvents($ul);$ul.find('.clickable').orLinkify();$ul.slideDown('fast')}).fail(function(){Openrat.Workbench.notify('','','ERROR','Failed to load subtree',[],!1)}).always(function(){$(e).closest('div.view').removeClass('loader')});$node.addClass('or-navtree-node--is-open').removeClass('or-navtree-node--is-closed').find('.tree-icon').addClass('image-icon--node-open').removeClass('image-icon--node-closed')}})})}; ;jQuery.fn.orAutoheight=function(){var t=function(t){var n=$(t).val().split('\n').length;$(t).attr('rows',n+3)};$(this).each(function(n){t(this)});return $(this).keypress(function(){t(this)})}; /*! jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */ !function(r){"use strict";function t(t,e,n,o){function a(r,t){return r-=o,t-=o,0>r||r>=c||0>t||t>=c?!1:f.isDark(r,t)}function i(r,t,e,n){var o=u.isDark,a=1/l;u.isDark=function(i,u){var f=u*a,c=i*a,l=f+a,g=c+a;return o(i,u)&&(r>l||f>e||t>g||c>n)}}var u={},f=r(n,e);f.addData(t),f.make(),o=o||0;var c=f.getModuleCount(),l=f.getModuleCount()+2*o;return u.text=t,u.level=e,u.version=n,u.moduleCount=l,u.isDark=a,u.addBlank=i,u}function e(r,e,n,o,a){n=Math.max(1,n||1),o=Math.min(40,o||40);for(var i=n;o>=i;i+=1)try{return t(r,e,i,a)}catch(u){}}function n(r,t,e){var n=e.size,o="bold "+e.mSize*n+"px "+e.fontname,a=w("<canvas/>")[0].getContext("2d");a.font=o;var i=a.measureText(e.label).width,u=e.mSize,f=i/n,c=(1-f)*e.mPosX,l=(1-u)*e.mPosY,g=c+f,s=l+u,v=.01;1===e.mode?r.addBlank(0,l-v,n,s+v):r.addBlank(c-v,l-v,g+v,s+v),t.fillStyle=e.fontcolor,t.font=o,t.fillText(e.label,c*n,l*n+.75*e.mSize*n)}function o(r,t,e){var n=e.size,o=e.image.naturalWidth||1,a=e.image.naturalHeight||1,i=e.mSize,u=i*o/a,f=(1-u)*e.mPosX,c=(1-i)*e.mPosY,l=f+u,g=c+i,s=.01;3===e.mode?r.addBlank(0,c-s,n,g+s):r.addBlank(f-s,c-s,l+s,g+s),t.drawImage(e.image,f*n,c*n,u*n,i*n)}function a(r,t,e){w(e.background).is("img")?t.drawImage(e.background,0,0,e.size,e.size):e.background&&(t.fillStyle=e.background,t.fillRect(e.left,e.top,e.size,e.size));var a=e.mode;1===a||2===a?n(r,t,e):(3===a||4===a)&&o(r,t,e)}function i(r,t,e,n,o,a,i,u){r.isDark(i,u)&&t.rect(n,o,a,a)}function u(r,t,e,n,o,a,i,u,f,c){i?r.moveTo(t+a,e):r.moveTo(t,e),u?(r.lineTo(n-a,e),r.arcTo(n,e,n,o,a)):r.lineTo(n,e),f?(r.lineTo(n,o-a),r.arcTo(n,o,t,o,a)):r.lineTo(n,o),c?(r.lineTo(t+a,o),r.arcTo(t,o,t,e,a)):r.lineTo(t,o),i?(r.lineTo(t,e+a),r.arcTo(t,e,n,e,a)):r.lineTo(t,e)}function f(r,t,e,n,o,a,i,u,f,c){i&&(r.moveTo(t+a,e),r.lineTo(t,e),r.lineTo(t,e+a),r.arcTo(t,e,t+a,e,a)),u&&(r.moveTo(n-a,e),r.lineTo(n,e),r.lineTo(n,e+a),r.arcTo(n,e,n-a,e,a)),f&&(r.moveTo(n-a,o),r.lineTo(n,o),r.lineTo(n,o-a),r.arcTo(n,o,n-a,o,a)),c&&(r.moveTo(t+a,o),r.lineTo(t,o),r.lineTo(t,o-a),r.arcTo(t,o,t+a,o,a))}function c(r,t,e,n,o,a,i,c){var l=r.isDark,g=n+a,s=o+a,v=e.radius*a,h=i-1,d=i+1,w=c-1,m=c+1,y=l(i,c),T=l(h,w),p=l(h,c),B=l(h,m),A=l(i,m),E=l(d,m),k=l(d,c),M=l(d,w),C=l(i,w);y?u(t,n,o,g,s,v,!p&&!C,!p&&!A,!k&&!A,!k&&!C):f(t,n,o,g,s,v,p&&C&&T,p&&A&&B,k&&A&&E,k&&C&&M)}function l(r,t,e){var n,o,a=r.moduleCount,u=e.size/a,f=i;for(e.radius>0&&e.radius<=.5&&(f=c),t.beginPath(),n=0;a>n;n+=1)for(o=0;a>o;o+=1){var l=e.left+o*u,g=e.top+n*u,s=u;f(r,t,e,l,g,s,n,o)}if(w(e.fill).is("img")){t.strokeStyle="rgba(0,0,0,0.5)",t.lineWidth=2,t.stroke();var v=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",t.fill(),t.globalCompositeOperation=v,t.clip(),t.drawImage(e.fill,0,0,e.size,e.size),t.restore()}else t.fillStyle=e.fill,t.fill()}function g(r,t){var n=e(t.text,t.ecLevel,t.minVersion,t.maxVersion,t.quiet);if(!n)return null;var o=w(r).data("qrcode",n),i=o[0].getContext("2d");return a(n,i,t),l(n,i,t),o}function s(r){var t=w("<canvas/>").attr("width",r.size).attr("height",r.size);return g(t,r)}function v(r){return w("<img/>").attr("src",s(r)[0].toDataURL("image/png"))}function h(r){var t=e(r.text,r.ecLevel,r.minVersion,r.maxVersion,r.quiet);if(!t)return null;var n,o,a=r.size,i=r.background,u=Math.floor,f=t.moduleCount,c=u(a/f),l=u(.5*(a-c*f)),g={position:"relative",left:0,top:0,padding:0,margin:0,width:a,height:a},s={position:"absolute",padding:0,margin:0,width:c,height:c,"background-color":r.fill},v=w("<div/>").data("qrcode",t).css(g);for(i&&v.css("background-color",i),n=0;f>n;n+=1)for(o=0;f>o;o+=1)t.isDark(n,o)&&w("<div/>").css(s).css({left:l+o*c,top:l+n*c}).appendTo(v);return v}function d(r){return m&&"canvas"===r.render?s(r):m&&"image"===r.render?v(r):h(r)}var w=window.jQuery,m=function(){var r=document.createElement("canvas");return!(!r.getContext||!r.getContext("2d"))}(),y={render:"canvas",minVersion:1,maxVersion:40,ecLevel:"L",left:0,top:0,size:200,fill:"#000",background:null,text:"no text",radius:0,quiet:0,mode:0,mSize:.1,mPosX:.5,mPosY:.5,label:"no label",fontname:"sans",fontcolor:"#000",image:null};w.fn.qrcode=function(r){var t=w.extend({},y,r);return this.each(function(r,e){"canvas"===e.nodeName.toLowerCase()?g(e,t):w(e).append(d(t))})}}(function(){var r=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;r<t.length&&0==t[r];)r+=1;for(var n=new Array(t.length-r+e),o=0;o<t.length-r;o+=1)n[o]=t[o+r];return n}(),o={};return o.getAt=function(r){return n[r]},o.getLength=function(){return n.length},o.multiply=function(t){for(var e=new Array(o.getLength()+t.getLength()-1),n=0;n<o.getLength();n+=1)for(var a=0;a<t.getLength();a+=1)e[n+a]^=i.gexp(i.glog(o.getAt(n))+i.glog(t.getAt(a)));return r(e,0)},o.mod=function(t){if(o.getLength()-t.getLength()<0)return o;for(var e=i.glog(o.getAt(0))-i.glog(t.getAt(0)),n=new Array(o.getLength()),a=0;a<o.getLength();a+=1)n[a]=o.getAt(a);for(var a=0;a<t.getLength();a+=1)n[a]^=i.gexp(i.glog(t.getAt(a))+e);return r(n,0).mod(t)},o}var t=function(t,e){var o=236,i=17,l=t,g=n[e],s=null,v=0,d=null,w=new Array,m={},y=function(r,t){v=4*l+17,s=function(r){for(var t=new Array(r),e=0;r>e;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(v),T(0,0),T(v-7,0),T(0,v-7),A(),B(),k(r,t),l>=7&&E(r),null==d&&(d=D(l,g,w)),M(d,t)},T=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=v))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=v||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?s[r+e][t+n]=!0:s[r+e][t+n]=!1)},p=function(){for(var r=0,t=0,e=0;8>e;e+=1){y(!0,e);var n=a.getLostPoint(m);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;v-8>r;r+=1)null==s[r][6]&&(s[r][6]=r%2==0);for(var t=8;v-8>t;t+=1)null==s[6][t]&&(s[6][t]=t%2==0)},A=function(){for(var r=a.getPatternPosition(l),t=0;t<r.length;t+=1)for(var e=0;e<r.length;e+=1){var n=r[t],o=r[e];if(null==s[n][o])for(var i=-2;2>=i;i+=1)for(var u=-2;2>=u;u+=1)-2==i||2==i||-2==u||2==u||0==i&&0==u?s[n+i][o+u]=!0:s[n+i][o+u]=!1}},E=function(r){for(var t=a.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[Math.floor(e/3)][e%3+v-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[e%3+v-8-3][Math.floor(e/3)]=n}},k=function(r,t){for(var e=g<<3|t,n=a.getBCHTypeInfo(e),o=0;15>o;o+=1){var i=!r&&1==(n>>o&1);6>o?s[o][8]=i:8>o?s[o+1][8]=i:s[v-15+o][8]=i}for(var o=0;15>o;o+=1){var i=!r&&1==(n>>o&1);8>o?s[8][v-o-1]=i:9>o?s[8][15-o-1+1]=i:s[8][15-o-1]=i}s[v-8][8]=!r},M=function(r,t){for(var e=-1,n=v-1,o=7,i=0,u=a.getMaskFunction(t),f=v-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==s[n][f-c]){var l=!1;i<r.length&&(l=1==(r[i]>>>o&1));var g=u(n,f-c);g&&(l=!l),s[n][f-c]=l,o-=1,-1==o&&(i+=1,o=7)}if(n+=e,0>n||n>=v){n-=e,e=-e;break}}},C=function(t,e){for(var n=0,o=0,i=0,u=new Array(e.length),f=new Array(e.length),c=0;c<e.length;c+=1){var l=e[c].dataCount,g=e[c].totalCount-l;o=Math.max(o,l),i=Math.max(i,g),u[c]=new Array(l);for(var s=0;s<u[c].length;s+=1)u[c][s]=255&t.getBuffer()[s+n];n+=l;var v=a.getErrorCorrectPolynomial(g),h=r(u[c],v.getLength()-1),d=h.mod(v);f[c]=new Array(v.getLength()-1);for(var s=0;s<f[c].length;s+=1){var w=s+d.getLength()-f[c].length;f[c][s]=w>=0?d.getAt(w):0}}for(var m=0,s=0;s<e.length;s+=1)m+=e[s].totalCount;for(var y=new Array(m),T=0,s=0;o>s;s+=1)for(var c=0;c<e.length;c+=1)s<u[c].length&&(y[T]=u[c][s],T+=1);for(var s=0;i>s;s+=1)for(var c=0;c<e.length;c+=1)s<f[c].length&&(y[T]=f[c][s],T+=1);return y},D=function(r,t,e){for(var n=u.getRSBlocks(r,t),c=f(),l=0;l<e.length;l+=1){var g=e[l];c.put(g.getMode(),4),c.put(g.getLength(),a.getLengthInBits(g.getMode(),r)),g.write(c)}for(var s=0,l=0;l<n.length;l+=1)s+=n[l].dataCount;if(c.getLengthInBits()>8*s)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*s+")");for(c.getLengthInBits()+4<=8*s&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*s)break;if(c.put(o,8),c.getLengthInBits()>=8*s)break;c.put(i,8)}return C(c,n)};return m.addData=function(r){var t=c(r);w.push(t),d=null},m.isDark=function(r,t){if(0>r||r>=v||0>t||t>=v)throw new Error(r+","+t);return s[r][t]},m.getModuleCount=function(){return v},m.make=function(){y(!1,p())},m.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='<table style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: "+t+"px;",e+='">',e+="<tbody>";for(var n=0;n<m.getModuleCount();n+=1){e+="<tr>";for(var o=0;o<m.getModuleCount();o+=1)e+='<td style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: 0px;",e+=" width: "+r+"px;",e+=" height: "+r+"px;",e+=" background-color: ",e+=m.isDark(n,o)?"#000000":"#ffffff",e+=";",e+='"/>';e+="</tr>"}return e+="</tbody>",e+="</table>"},m.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=m.getModuleCount()*r+2*t,n=t,o=e-t;return h(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var a=Math.floor((t-n)/r),i=Math.floor((e-n)/r);return m.isDark(i,a)?0:1}return 1})},m};t.stringToBytes=function(r){for(var t=new Array,e=0;e<r.length;e+=1){var n=r.charCodeAt(e);t.push(255&n)}return t},t.createStringToBytes=function(r,t){var e=function(){for(var e=s(r),n=function(){var r=e.read();if(-1==r)throw new Error;return r},o=0,a={};;){var i=e.read();if(-1==i)break;var u=n(),f=n(),c=n(),l=String.fromCharCode(i<<8|u),g=f<<8|c;a[l]=g,o+=1}if(o!=t)throw new Error(o+" != "+t);return a}(),n="?".charCodeAt(0);return function(r){for(var t=new Array,o=0;o<r.length;o+=1){var a=r.charCodeAt(o);if(128>a)t.push(a);else{var i=e[r.charAt(o)];"number"==typeof i?(255&i)==i?t.push(i):(t.push(i>>>8),t.push(255&i)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},a=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,a=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<<c(t)-c(n);return(r<<10|t)^u},f.getBCHTypeNumber=function(r){for(var t=r<<12;c(t)-c(a)>=0;)t^=a<<c(t)-c(a);return r<<12|t},f.getPatternPosition=function(r){return t[r-1]},f.getMaskFunction=function(r){switch(r){case o.PATTERN000:return function(r,t){return(r+t)%2==0};case o.PATTERN001:return function(r,t){return r%2==0};case o.PATTERN010:return function(r,t){return t%3==0};case o.PATTERN011:return function(r,t){return(r+t)%3==0};case o.PATTERN100:return function(r,t){return(Math.floor(r/2)+Math.floor(t/3))%2==0};case o.PATTERN101:return function(r,t){return r*t%2+r*t%3==0};case o.PATTERN110:return function(r,t){return(r*t%2+r*t%3)%2==0};case o.PATTERN111:return function(r,t){return(r*t%3+(r+t)%2)%2==0};default:throw new Error("bad maskPattern:"+r)}},f.getErrorCorrectPolynomial=function(t){for(var e=r([1],0),n=0;t>n;n+=1)e=e.multiply(r([1,i.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var a=0,i=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||(0!=u||0!=f)&&i==r.isDark(n+u,o+f)&&(a+=1);a>5&&(e+=3+a-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),(0==c||4==c)&&(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var g=Math.abs(100*l/t/t-50)/5;return e+=10*g},f}(),i=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<<e;for(var e=8;256>e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var a=n.length/3,i=new Array,u=0;a>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],g=0;f>g;g+=1)i.push(t(c,l));return i},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),a={};return a.getMode=function(){return n},a.getLength=function(r){return o.length},a.write=function(r){for(var t=0;t<o.length;t+=1)r.put(o[t],8)},a},l=function(){var r=new Array,t={};return t.writeByte=function(t){r.push(255&t)},t.writeShort=function(r){t.writeByte(r),t.writeByte(r>>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e<r.length;e+=1)t.writeByte(r.charCodeAt(e))},t.toByteArray=function(){return r},t.toString=function(){var t="";t+="[";for(var e=0;e<r.length;e+=1)e>0&&(t+=","),t+=r[e];return t+="]"},t},g=function(){var r=0,t=0,e=0,n="",o={},a=function(r){n+=String.fromCharCode(i(63&r))},i=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)a(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(a(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,i=0;o>i;i+=1)n+="="},o.toString=function(){return n},o},s=function(r){var t=r,e=0,n=0,o=0,a={};a.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|i(r.charCodeAt(0)),o+=6)}var a=n>>>o-8&255;return o-=8,a};var i=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return a},v=function(r,t){var e=r,n=t,o=new Array(r*t),a={};a.setPixel=function(r,t,n){o[t*e+r]=n},a.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var a=0;o.length-a>255;)r.writeByte(255),r.writeBytes(o,a,255),a+=255;r.writeByte(o.length-a),r.writeBytes(o,a,o.length-a),r.writeByte(0),r.writeString(";")};var i=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<<e|n)),o-=8-e,r>>>=8-e,n=0,e=0;n=r<<e|n,e+=o},o.flush=function(){e>0&&t.writeByte(n)},o},u=function(r){for(var t=1<<r,e=(1<<r)+1,n=r+1,a=f(),u=0;t>u;u+=1)a.add(String.fromCharCode(u));a.add(String.fromCharCode(t)),a.add(String.fromCharCode(e));var c=l(),g=i(c);g.write(t,n);var s=0,v=String.fromCharCode(o[s]);for(s+=1;s<o.length;){var h=String.fromCharCode(o[s]);s+=1,a.contains(v+h)?v+=h:(g.write(a.indexOf(v),n),a.size()<4095&&(a.size()==1<<n&&(n+=1),a.add(v+h)),v=h)}return g.write(a.indexOf(v),n),g.write(e,n),g.flush(),c.toByteArray()},f=function(){var r={},t=0,e={};return e.add=function(n){if(e.contains(n))throw new Error("dup key:"+n);r[n]=t,t+=1},e.size=function(){return t},e.indexOf=function(t){return r[t]},e.contains=function(t){return"undefined"!=typeof r[t]},e};return a},h=function(r,t,e,n){for(var o=v(r,t),a=0;t>a;a+=1)for(var i=0;r>i;i+=1)o.setPixel(i,a,e(i,a));var u=l();o.write(u);for(var f=g(),c=u.toByteArray(),s=0;s<c.length;s+=1)f.writeByte(c[s]);f.flush();var h="";return h+="<img",h+=' src="',h+="data:image/gif;base64,",h+=f,h+='"',h+=' width="',h+=r,h+='"',h+=' height="',h+=t,h+='"',n&&(h+=' alt="',h+=n,h+='"'),h+="/>"};return t}();return function(r){"function"==typeof define&&define.amd?define([],r):"object"==typeof exports&&(module.exports=r())}(function(){return r}),!function(r){r.stringToBytes=function(r){function t(r){for(var t=[],e=0;e<r.length;e++){var n=r.charCodeAt(e);128>n?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(r),r}()); @@ -1177,22 +1177,18 @@ else{};return url}}; else{let url='./api/';this.setLoadStatus(!0);url+='';data.output='json';if(e==modes.closeAfterSubmit)this.close();let form=this;$.ajax({'type':'POST',url:url,data:data,success:function(t,s,o){form.setLoadStatus(!1);$(status).remove();form.doResponse(t,s,form.element,function(){if(e==modes.closeAfterSuccess){form.close();$(form.element).closest('div.panel').find('div.header ul.views li.action.active').removeClass('dirty')};let afterSuccess=$(form.element).data('afterSuccess');let async=$(form.element).data('async');if(afterSuccess){if(afterSuccess=='reloadAll'){Openrat.Workbench.reloadAll()}} else{if(async);else Openrat.Workbench.reloadViews()}})},error:function(e,t,s){form.setLoadStatus(!1);$(status).remove();try{let error=jQuery.parseJSON(e.responseText);Openrat.Workbench.notify('','','error',error.error,[error.description])}catch(o){let msg=e.responseText;Openrat.Workbench.notify('','','error','Server Error',[msg])}}});$(form.element).fadeIn()}};this.doResponse=function(e,t,s,onSuccess=$.noop){if(t!='success'){alert('Server error: '+t);return};let form=this;$.each(e['notices'],function(t,e){let notifyBrowser=$(s).data('async');Openrat.Workbench.notify(e.type,e.name,e.status,e.text,e.log,notifyBrowser);if(e.status=='ok'){onSuccess();Openrat.Workbench.dataChangedHandler.fire()} else{}});$.each(e['errors'],function(e,t){$('input[name='+t+']').addClass('error').parent().addClass('error').parents('fieldset').removeClass('closed').addClass('show').addClass('open')});if(e.control.redirect)window.location.href=e.control.redirect}}; -;Openrat.Workbench=new function(){'use strict';this.state={};this.initialize=function(){this.initializePingTimer();this.initializeDirtyWarning();this.initializeState();this.openModalDialog()};this.initializeDirtyWarning=function(){window.addEventListener('beforeunload',function(t){if($('.view.dirty').length>0){t.preventDefault();return'Unsaved content will be lost.'} -else{return undefined}})};this.openModalDialog=function(){if($('#dialog').data('action')){startDialog('',$('#dialog').data('action'),$('#dialog').data('action'),0,{})}};this.initializeState=function(){let parts=window.location.hash.split('/');let state={action:'index',id:0};if(parts.length>=2)state.action=parts[1].toLowerCase();if(parts.length>=3)state.id=parts[2].replace(/[^0-9_]/gim,'');Openrat.Workbench.state=state;$('#editor').attr('data-action',state.action);$('#editor').attr('data-id',state.id);$('#editor').attr('data-extra','{}');Openrat.Navigator.toActualHistory(state)};this.initializePingTimer=function(){let ping=function(){let pingPromise=$.getJSON(Openrat.View.createUrl('profile','ping',0,{},!0));pingPromise.fail(function(){console.warn('The server ping has failed.');if($('.view.dirty').length>0){window.alert('The server session is lost, please save your data.')} +;Openrat.Workbench=new function(){'use strict';this.state={};this.popupWindow=null;this.initialize=function(){this.initializePingTimer();this.initializeDirtyWarning();this.initializeState();this.openModalDialog()};this.initializeDirtyWarning=function(){window.addEventListener('beforeunload',function(t){if($('.view.dirty').length>0){t.preventDefault();return'Unsaved content will be lost.'} +else{return undefined}})};this.openModalDialog=function(){if($('#dialog').data('action')){this.startDialog('',$('#dialog').data('action'),$('#dialog').data('action'),0,{})}};this.initializeState=function(){let parts=window.location.hash.split('/');let state={action:'index',id:0};if(parts.length>=2)state.action=parts[1].toLowerCase();if(parts.length>=3)state.id=parts[2].replace(/[^0-9_]/gim,'');Openrat.Workbench.state=state;$('#editor').attr('data-action',state.action);$('#editor').attr('data-id',state.id);$('#editor').attr('data-extra','{}');Openrat.Navigator.toActualHistory(state)};this.initializePingTimer=function(){let ping=function(){let pingPromise=$.getJSON(Openrat.View.createUrl('profile','ping',0,{},!0));pingPromise.fail(function(){console.warn('The server ping has failed.');if($('.view.dirty').length>0){window.alert('The server session is lost, please save your data.')} else{}})};let timeoutMinutes=5;window.setInterval(ping,timeoutMinutes*60*1000)};this.loadNewActionState=function(t){Openrat.Workbench.state=t;Openrat.Workbench.loadNewAction(t.action,t.id,t.data);this.afterNewActionHandler.fire()};this.afterNewActionHandler=$.Callbacks();this.loadNewAction=function(t,e,i){$('#editor').attr('data-action',t);$('#editor').attr('data-id',e);$('#editor').attr('data-extra',JSON.stringify(i));this.reloadViews()};this.reloadViews=function(){$('#workbench section.closed .view-loader').empty();Openrat.Workbench.loadViews($('#workbench section.open .view-loader'))};this.reloadAll=function(){Openrat.Workbench.loadViews($('.view-loader,.view-static').empty());this.loadUserStyle();this.loadLanguage();this.loadUISettings();this.loadNavigationTree()};this.loadUserStyle=function(){let url=Openrat.View.createUrl('profile','userinfo',0,{},!0);$.getJSON(url,function(t){let style=t.output['style'];Openrat.Workbench.setUserStyle(style);let color=t.output['theme-color'];Openrat.Workbench.setThemeColor(color)})};this.loadNavigationTree=function(){let loadBranchUrl='./?action=tree&subaction=branch&id=0&type=root';$.get(loadBranchUrl).done(function(t){let $ul=$('<ul class="or-navtree-list" />');$ul.appendTo($('.or-navtree').empty()).append(t);$ul.find('li').orTree();$ul.find('.clickable').orLinkify();$ul.find('.or-navtree-node-control').first().click()})};this.settings={};this.language={};this.loadLanguage=function(){let url=Openrat.View.createUrl('profile','language',0,{},!0);$.getJSON(url,function(t){Openrat.Workbench.language=t.output.language})};this.loadUISettings=function(){let url=Openrat.View.createUrl('profile','uisettings',0,{},!0);$.getJSON(url,function(t){Openrat.Workbench.settings=t.output.settings.settings})};this.loadViews=function(t){t.each(function(t){let $targetDOMElement=$(this);Openrat.Workbench.loadNewActionIntoElement($targetDOMElement)})};this.loadNewActionIntoElement=function(t){let action;if(t.is('.view-static'))action=t.attr('data-action');else action=$('#editor').attr('data-action');let id=$('#editor').attr('data-id');let params=$('#editor').attr('data-extra');let method=t.data('method');let view=new Openrat.View(action,method,id,params);view.start(t)};this.setUserStyle=function(t){var e=$('html'),i=e.attr('class').split(/\s+/);$.each(i,function(t,i){if(i.startsWith('theme-')){e.removeClass(i)}});e.addClass('theme-'+t.toLowerCase())};this.setThemeColor=function(t){$('#theme-color').attr('content',t)};let notifyBrowser=function(t){if(!('Notification' in window)){return} else if(Notification.permission==='granted'){let notification=new Notification(t)} -else if(Notification.permission!=='denied'){Notification.requestPermission(function(e){if(e==='granted'){let notification=new Notification(t)}})}};this.notify=function(t,i,e,n,log=[],notifyTheBrowser=!1){if(notifyTheBrowser)notifyBrowser(n);let notice=$('<div class="notice '+e+'"></div>');let toolbar=$('<div class="or-notice-toolbar"></div>');if(log.length)$(toolbar).append('<i class="or-action-full image-icon image-icon--menu-fullscreen"></i>');$(toolbar).append('<i class="or-action-close image-icon image-icon--menu-close"></i>');$(notice).append(toolbar);let id=0;if(i)$(notice).append('<div class="name clickable"><a href="" data-type="open" data-action="'+t+'" data-id="'+id+'"><i class="or-action-full image-icon image-icon--action-'+t+'"></i> '+i+'</a></div>');$(notice).append('<div class="text">'+htmlEntities(n)+'</div>');if(log.length){let logLi=log.reduce((result,item)=>{result+='<li><pre>'+htmlEntities(item)+'</pre></li>';return result},'');$(notice).append('<div class="log"><ul>'+logLi+'</ul></div>')};$('#noticebar').prepend(notice);$(notice).orLinkify();$(notice).find('.or-action-full').click(function(){$(notice).toggleClass('full')});$(notice).find('.or-action-close').click(function(){$(notice).fadeOut('fast',function(){$(notice).remove()})});let timeout=1;if(e=='ok')timeout=20;if(e=='info')timeout=60;if(e=='warning')timeout=120;if(e=='error')timeout=120;if(timeout>0)setTimeout(function(){$(notice).fadeOut('slow',function(){$(this).remove()})},timeout*1000)};this.dataChangedHandler=$.Callbacks();this.dataChangedHandler.add(function(){if(popupWindow!==undefined)popupWindow.location.reload()});this.afterViewLoadedHandler=$.Callbacks();let afterViewFunctions=[];this.registerAfterViewLoaded=function(t){afterViewFunctions.push(t)};this.afterViewLoaded=function(t){afterViewFunctions.forEach(function(e){e(t)})}}; +else if(Notification.permission!=='denied'){Notification.requestPermission(function(e){if(e==='granted'){let notification=new Notification(t)}})}};this.notify=function(e,a,i,o,log=[],notifyTheBrowser=!1){if(notifyTheBrowser)notifyBrowser(o);let notice=$('<div class="notice '+i+'"></div>');let toolbar=$('<div class="or-notice-toolbar"></div>');if(log.length)$(toolbar).append('<i class="or-action-full image-icon image-icon--menu-fullscreen"></i>');$(toolbar).append('<i class="or-action-close image-icon image-icon--menu-close"></i>');$(notice).append(toolbar);let id=0;if(a)$(notice).append('<div class="name clickable"><a href="" data-type="open" data-action="'+e+'" data-id="'+id+'"><i class="or-action-full image-icon image-icon--action-'+e+'"></i> '+a+'</a></div>');$(notice).append('<div class="text">'+t(o)+'</div>');if(log.length){let logLi=log.reduce((result,item)=>{result+='<li><pre>'+t(item)+'</pre></li>';return result},'');$(notice).append('<div class="log"><ul>'+logLi+'</ul></div>')};$('#noticebar').prepend(notice);$(notice).orLinkify();$(notice).find('.or-action-full').click(function(){$(notice).toggleClass('full')});$(notice).find('.or-action-close').click(function(){$(notice).fadeOut('fast',function(){$(notice).remove()})});let timeout=1;if(i=='ok')timeout=20;if(i=='info')timeout=60;if(i=='warning')timeout=120;if(i=='error')timeout=120;if(timeout>0)setTimeout(function(){$(notice).fadeOut('slow',function(){$(this).remove()})},timeout*1000)};this.dataChangedHandler=$.Callbacks();this.dataChangedHandler.add(function(){if(Openrat.Workbench.popupWindow)Openrat.Workbench.popupWindow.location.reload()});this.afterViewLoadedHandler=$.Callbacks();let afterViewFunctions=[];this.registerAfterViewLoaded=function(t){afterViewFunctions.push(t)};this.afterViewLoaded=function(t){afterViewFunctions.forEach(function(e){e(t)})};this.setApplicationTitle=function(t){if(t)$('head > title').text(t+' - '+$('head > title').data('default'));else $('head > title').text($('head > title').data('default'))};var t=function(t){return String(t).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;')};this.registerOpenClose=function(t){$(t).children('.on-click-open-close').click(function(){$(this).closest('.toggle-open-close').toggleClass('open closed')})};this.openNewAction=function(t,e,i){$('nav').removeClass('open');Openrat.Workbench.setApplicationTitle(t);Openrat.Navigator.navigateToNew({'action':e,'id':i})};this.startDialog=function(t,e,i,a,o){if(!e)e=$('#editor').attr('data-action');if(!a)a=$('#editor').attr('data-id');let view=new Openrat.View(e,i,a,o);view.before=function(){$('#dialog > .view').html('<div class="header"><img class="icon" title="" src="./themes/default/images/icon/'+i+'.png" />'+t+'</div>');$('#dialog > .view').data('id',a);$('#dialog').removeClass('is-closed').addClass('is-open');let view=this;this.escapeKeyClosingHandler=function(t){if(t.keyCode==27){view.close();$(document).off('keyup')}};$(document).keyup(this.escapeKeyClosingHandler);$('#dialog .filler').click(function(){view.close()})};view.close=function(){if($('div#dialog').hasClass('modal'))return;$('#dialog .view').removeClass('dirty');$('#dialog .view').html('');$('#dialog').removeClass('is-open').addClass('is-closed');$(document).unbind('keyup',this.escapeKeyClosingHandler)};view.start($('div#dialog > .view'))};this.registerDraggable=function(t){$(t).find('.or-draggable').draggable({helper:'clone',opacity:0.7,zIndex:2,distance:10,cursor:'move',revert:'false'})};this.registerDroppable=function(t){$(t).find('.or-droppable').droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(t,e){let dropped=e.draggable;let id=dropped.data('id');let name=dropped.data('name');if(!name)name=id;$(this).find('.or-selector-link-value').val(id);$(this).find('.or-selector-link-name').val(name).attr('placeholder',name)}})}}; ;Openrat.Navigator=new function(){'use strict';this.navigateTo=function(t){Openrat.Workbench.loadNewActionState(t)};this.navigateToNew=function(t){this.navigateTo(t);window.history.pushState(t,t.name,this.createShortUrl(t.action,t.id))};this.toActualHistory=function(t){window.history.replaceState(t,t.name,this.createShortUrl(t.action,t.id))};this.createShortUrl=function(t,i){return'./#/'+t+(i?'/'+i:'')}}; -;var OR_THEMES_EXT_DIR='modules/cms-ui/themes/';$(function(){$('html').removeClass('nojs');$('.initial-hidden').removeClass('initial-hidden');function e(){function e(e){$(e).closest('div.panel').fadeOut('fast',function(){$(this).toggleClass('fullscreen').fadeIn('fast')})};$('div.header').dblclick(function(){e(this)})};e();window.onpopstate=function(e){Openrat.Navigator.navigateTo(e.state)};Openrat.Workbench.initialize();Openrat.Workbench.reloadAll();let registerWorkbenchGlobalEvents=function(){$('.keystroke').each(function(){let keystrokeElement=$(this);let keystroke=keystrokeElement.text();if(keystroke.length==0)return;let keyaction=function(){keystrokeElement.click()};$(document).bind('keydown',keystroke,keyaction)});$('section.toggle-open-close .on-click-open-close').click(function(){var t=$(this).closest('section');if(t.hasClass('disabled'))return;var e=t.find('div.view-loader');if(e.children().length==0)Openrat.Workbench.loadNewActionIntoElement(e)})};$('.or-initial-notice').each(function(){Openrat.Workbench.notify('','','info',$(this).text());$(this).remove()});registerWorkbenchGlobalEvents();let closeMenu=function(){$('body').click(function(){$('.toolbar-icon.menu').parents('.or-menu').removeClass('open')})};closeMenu();Openrat.Workbench.afterNewActionHandler.add(function(){let url=Openrat.View.createUrl('tree','path',Openrat.Workbench.state.id,{'type':Openrat.Workbench.state.action});let loadPromise=$.get(url);loadPromise.done(function(e){$('.or-breadcrumb').empty().append(e).find('.clickable').orLinkify();$('nav .or-navtree-node').removeClass('or-navtree-node--selected');$('.or-breadcrumb a').each(function(){let action=$(this).data('action');let id=$(this).data('id');let $navControl=$('nav .or-navtree-node[data-type='+action+'][data-id='+id+'].or-navtree-node--is-closed .or-navtree-node-control');$navControl.click()})}).fail(function(e){console.warn(e);console.warn('failed to load path from '+url)}).always(function(){})})});let filterMenus=function(){let action=Openrat.Workbench.state.action;let id=Openrat.Workbench.state.id;$('div.clickable').addClass('active');$('div.clickable.filtered').removeClass('active').addClass('inactive');$('div.clickable.filtered.on-action-'+action).addClass('active').removeClass('inactive');$('div.clickable.filtered a').attr('data-id',id)};$('#title.view').data('afterViewLoaded',function(){filterMenus()});Openrat.Workbench.afterNewActionHandler.add(function(){filterMenus()});Openrat.Workbench.afterViewLoadedHandler.add(function(e){if(typeof popupWindow!='undefined')$(e).find('a[data-type=\'popup\']').each(function(){popupWindow.location.href=$(this).attr('data-url')})});Openrat.Workbench.afterViewLoadedHandler.add(function(e){var t=$(e).closest('section');t.toggleClass('is-empty',$(e).is(':empty'));if(!$(e).is(':empty'))t.slideDown('fast');else t.slideUp('fast');$(e).closest('div.panel').find('div.header div.dropdown div.entry.perview').remove();$(e).find('.toggle-nav-open-close').click(function(){$('nav').toggleClass('open')});$(e).find('.toggle-nav-small').click(function(){$('nav').toggleClass('small')});$(e).find('div.headermenu > a').each(function(e,t){});$(e).find('div.header > a.back').each(function(t,n){$(n).removeClass('button').wrap('<div class="entry perview" />').parent().appendTo($(e).closest('div.panel').find('div.header div.dropdown').first())});$(e).find('div.selector.tree').each(function(){var e=this;$(this).orTree({type:'project',selectable:$(e).attr('data-types').split(','),id:$(e).attr('data-init-folderid'),onSelect:function(t,n,a){var i=$(e).parent();$(i).find('input[type=text]').attr('value',t);$(i).find('input[type=hidden]').attr('value',a)}})});n(e);$(e).find('input,select,textarea').change(function(){$(this).closest('.view').addClass('dirty')});$(e).find('.or-theme-chooser').change(function(){Openrat.Workbench.setUserStyle(this.value)});function a(e){$(e).find('.toolbar-icon.menu').click(function(e){e.stopPropagation();$(this).parents('.or-menu').toggleClass('open')});$(e).find('.toolbar-icon.menu').mouseover(function(){$(this).parents('.or-menu').find('.toolbar-icon.menu').removeClass('open');$(this).addClass('open')})};function i(e){$(e).find('.search input').orSearch({dropdown:'#title div.search div.dropdown',select:function(e){openNewAction(e.name,e.action,e.id)}})};function o(e){$(e).find('.selector input').orSearch({dropdown:'.dropdown',select:function(t){$(e).find('.or-selector-link-value').val(t.id);$(e).find('.or-selector-link-name').val(t.name).attr('placeholder',t.name)}})};function l(e){$(e).find('.or-navtree-node').orTree()};a(e);i(e);o(e);l(e);function n(e){registerDraggable(e);registerDroppable(e)};n(e)});function registerDraggable(e){$(e).find('.or-draggable').draggable({helper:'clone',opacity:0.7,zIndex:2,distance:10,cursor:'move',revert:'false'})};function registerTreeBranchEvents(e){registerDraggable(e)};function registerDroppable(e){$(e).find('.or-droppable').droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let id=dropped.data('id');let name=dropped.data('name');if(!name)name=id;$(this).find('.or-selector-link-value').val(id);$(this).find('.or-selector-link-name').val(name).attr('placeholder',name)}})};function startDialog(e,t,n,a,i){if(!t)t=$('#editor').attr('data-action');if(!a)a=$('#editor').attr('data-id');let view=new Openrat.View(t,n,a,i);view.before=function(){$('#dialog > .view').html('<div class="header"><img class="icon" title="" src="./themes/default/images/icon/'+n+'.png" />'+e+'</div>');$('#dialog > .view').data('id',a);$('#dialog').removeClass('is-closed').addClass('is-open');let view=this;this.escapeKeyClosingHandler=function(e){if(e.keyCode==27){view.close();$(document).off('keyup')}};$(document).keyup(this.escapeKeyClosingHandler);$('#dialog .filler').click(function(){view.close()})};view.close=function(){if($('div#dialog').hasClass('modal'))return;$('#dialog .view').removeClass('dirty');$('#dialog .view').html('');$('#dialog').removeClass('is-open').addClass('is-closed');$(document).unbind('keyup',this.escapeKeyClosingHandler)};view.start($('div#dialog > .view'))};function setTitle(e){if(e)$('head > title').text(e+' - '+$('head > title').data('default'));else $('head > title').text($('head > title').data('default'))};function openNewAction(e,t,n){$('nav').removeClass('open');setTitle(e);Openrat.Navigator.navigateToNew({'action':t,'id':n})};function insert(e,n,a){var t=document.forms[0].elements[e];t.focus();if(typeof document.selection!='undefined'){var l=document.selection.createRange(),i=l.text;l.text=n+i+a;l=document.selection.createRange();if(i.length==0){l.move('character',-a.length)} -else{l.moveStart('character',n.length+i.length+a.length)};l.select()} -else if(typeof t.selectionStart!='undefined'){var r=t.selectionStart,d=t.selectionEnd,i=t.value.substring(r,d);t.value=t.value.substr(0,r)+n+i+a+t.value.substr(d);var o;if(i.length==0){o=r+n.length} -else{o=r+n.length+i.length+a.length};t.selectionStart=o;t.selectionEnd=o} -else{o=t.value.length;var i=prompt('Text');t.value=t.value.substr(0,o)+n+i+a+t.value.substr(o)}};function help(e,t,n){var a=$(e).closest('div.panel').find('li.action.active').attr('data-action'),i=$(e).closest('div.panel').find('li.action.active').attr('data-method');window.open(t+a+'/'+i+n,'OpenRat_Help','location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes')};function htmlEntities(e){return String(e).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;')};function registerOpenClose(e){$(e).children('.on-click-open-close').click(function(){$(this).closest('.toggle-open-close').toggleClass('open closed')})}; +;var OR_THEMES_EXT_DIR='modules/cms-ui/themes/';$(function(){$('html').removeClass('nojs');$('.initial-hidden').removeClass('initial-hidden');function e(){function e(e){$(e).closest('div.panel').fadeOut('fast',function(){$(this).toggleClass('fullscreen').fadeIn('fast')})};$('div.header').dblclick(function(){e(this)})};e();window.onpopstate=function(e){Openrat.Navigator.navigateTo(e.state)};Openrat.Workbench.initialize();Openrat.Workbench.reloadAll();let registerWorkbenchGlobalEvents=function(){$('.keystroke').each(function(){let keystrokeElement=$(this);let keystroke=keystrokeElement.text();if(keystroke.length==0)return;let keyaction=function(){keystrokeElement.click()};$(document).bind('keydown',keystroke,keyaction)});$('section.toggle-open-close .on-click-open-close').click(function(){var n=$(this).closest('section');if(n.hasClass('disabled'))return;var e=n.find('div.view-loader');if(e.children().length==0)Openrat.Workbench.loadNewActionIntoElement(e)})};$('.or-initial-notice').each(function(){Openrat.Workbench.notify('','','info',$(this).text());$(this).remove()});registerWorkbenchGlobalEvents();let closeMenu=function(){$('body').click(function(){$('.toolbar-icon.menu').parents('.or-menu').removeClass('open')})};closeMenu();Openrat.Workbench.afterNewActionHandler.add(function(){let url=Openrat.View.createUrl('tree','path',Openrat.Workbench.state.id,{'type':Openrat.Workbench.state.action});let loadPromise=$.get(url);loadPromise.done(function(e){$('.or-breadcrumb').empty().append(e).find('.clickable').orLinkify();$('nav .or-navtree-node').removeClass('or-navtree-node--selected');$('.or-breadcrumb a').each(function(){let action=$(this).data('action');let id=$(this).data('id');let $navControl=$('nav .or-navtree-node[data-type='+action+'][data-id='+id+'].or-navtree-node--is-closed .or-navtree-node-control');$navControl.click()})}).fail(function(e){console.warn(e);console.warn('failed to load path from '+url)}).always(function(){})})});let filterMenus=function(){let action=Openrat.Workbench.state.action;let id=Openrat.Workbench.state.id;$('div.clickable').addClass('active');$('div.clickable.filtered').removeClass('active').addClass('inactive');$('div.clickable.filtered.on-action-'+action).addClass('active').removeClass('inactive');$('div.clickable.filtered a').attr('data-id',id)};$('#title.view').data('afterViewLoaded',function(){filterMenus()});Openrat.Workbench.afterNewActionHandler.add(function(){filterMenus()});Openrat.Workbench.afterViewLoadedHandler.add(function(e){if(Openrat.Workbench.popupWindow)$(e).find('a[data-type=\'popup\']').each(function(){Openrat.Workbench.popupWindow.location.href=$(this).attr('data-url')})});Openrat.Workbench.afterViewLoadedHandler.add(function(e){var n=$(e).closest('section');n.toggleClass('is-empty',$(e).is(':empty'));if(!$(e).is(':empty'))n.slideDown('fast');else n.slideUp('fast');$(e).closest('div.panel').find('div.header div.dropdown div.entry.perview').remove();$(e).find('.toggle-nav-open-close').click(function(){$('nav').toggleClass('open')});$(e).find('.toggle-nav-small').click(function(){$('nav').toggleClass('small')});$(e).find('div.headermenu > a').each(function(e,n){});$(e).find('div.header > a.back').each(function(n,t){$(t).removeClass('button').wrap('<div class="entry perview" />').parent().appendTo($(e).closest('div.panel').find('div.header div.dropdown').first())});$(e).find('div.selector.tree').each(function(){var e=this;$(this).orTree({type:'project',selectable:$(e).attr('data-types').split(','),id:$(e).attr('data-init-folderid'),onSelect:function(n,t,i){var o=$(e).parent();$(o).find('input[type=text]').attr('value',n);$(o).find('input[type=hidden]').attr('value',i)}})});t(e);$(e).find('input,select,textarea').change(function(){$(this).closest('.view').addClass('dirty')});$(e).find('.or-theme-chooser').change(function(){Openrat.Workbench.setUserStyle(this.value)});function o(e){$(e).find('.toolbar-icon.menu').click(function(e){e.stopPropagation();$(this).parents('.or-menu').toggleClass('open')});$(e).find('.toolbar-icon.menu').mouseover(function(){$(this).parents('.or-menu').find('.toolbar-icon.menu').removeClass('open');$(this).addClass('open')})};function i(e){$(e).find('.search input').orSearch({dropdown:'#title div.search div.dropdown',select:function(e){Openrat.Workbench.openNewAction(e.name,e.action,e.id)}})};function a(e){$(e).find('.selector input').orSearch({dropdown:'.dropdown',select:function(n){$(e).find('.or-selector-link-value').val(n.id);$(e).find('.or-selector-link-name').val(n.name).attr('placeholder',n.name)}})};function r(e){$(e).find('.or-navtree-node').orTree()};o(e);i(e);a(e);r(e);function t(e){Openrat.Workbench.registerDraggable(e);Openrat.Workbench.registerDroppable(e)};t(e)}); ;Openrat.Workbench.afterViewLoadedHandler.add(function(e){$(e).find('textarea').orAutoheight();$(e).find('textarea.editor.code-editor').each(function(){let mode=$(this).data('mode');let mimetype=$(this).data('mimetype');if(mimetype.length>0)mode=mimetype;let textareaEl=this;let editor=CodeMirror.fromTextArea(textareaEl,{lineNumbers:!0,viewportMargin:Infinity,mode:mode});editor.on('change',function(){let newValue=editor.getValue();$(textareaEl).val(newValue)});$(editor.getWrapperElement()).droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let pos=editor.getCursor();editor.setSelection(pos,pos);let insertText=dropped.data('id');let toInsert=''+insertText;editor.replaceSelection(toInsert)}})});$(e).find('textarea.editor.markdown-editor').each(function(){let textarea=this;let toolbar=[{name:'bold',action:SimpleMDE.toggleBold,className:'image-icon image-icon--editor-bold',title:'Bold',},{name:'italic',action:SimpleMDE.toggleItalic,className:'image-icon image-icon--editor-italic',title:'Italic',},{name:'heading',action:SimpleMDE.toggleHeadingBigger,className:'image-icon image-icon--editor-headline',title:'Headline',},'|',{name:'quote',action:SimpleMDE.toggleBlockquote,className:'image-icon image-icon--editor-quote',title:'Quote',},{name:'code',action:SimpleMDE.toggleCodeBlock,className:'image-icon image-icon--editor-code',title:'Code',},'|',{name:'generic list',action:SimpleMDE.toggleUnorderedList,className:'image-icon image-icon--editor-unnumberedlist',title:'Unnumbered list',},{name:'numbered list',action:SimpleMDE.toggleOrderedList,className:'image-icon image-icon--editor-numberedlist',title:'Numbered list',},'|',{name:'table',action:SimpleMDE.drawTable,className:'image-icon image-icon--editor-table',title:'Table',},{name:'horizontalrule',action:SimpleMDE.drawHorizontalRule,className:'image-icon image-icon--editor-horizontalrule',title:'Horizontal rule',},'|',{name:'undo',action:SimpleMDE.undo,className:'image-icon image-icon--editor-undo',title:'Undo',},{name:'redo',action:SimpleMDE.redo,className:'image-icon image-icon--editor-redo',title:'Redo',},'|',{name:'link',action:SimpleMDE.drawLink,className:'image-icon image-icon--editor-link',title:'Link',},{name:'image',action:SimpleMDE.drawImage,className:'image-icon image-icon--editor-image',title:'Image',},'|',{name:'guide',action:'https://simplemde.com/markdown-guide',className:'image-icon image-icon--editor-help',title:'Howto markdown',},];let mde=new SimpleMDE({element:$(this)[0],toolbar:toolbar,autoDownloadFontAwesome:!1});let codemirror=mde.codemirror;$(codemirror.getWrapperElement()).droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let insertText='';let id=dropped.data('id');let url='__OID__'+id+'__';if(dropped.data('type')=='image')insertText='![]('+url+')';else insertText='['+id+']('+url+')';let pos=codemirror.getCursor();codemirror.setSelection(pos,pos);codemirror.replaceSelection(insertText)}});codemirror.on('change',function(){let newValue=codemirror.getValue();$(textarea).val(newValue)})});$(e).find('textarea.editor.html-editor').each(function(){let textarea=this;$.trumbowyg.svgPath='./modules/editor/trumbowyg/ui/icons.svg';$(textarea).trumbowyg();$(textarea).closest('form').find('.trumbowyg-editor').droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let id=dropped.data('id');let url='./?_='+dropped.data('type')+'-'+id+'&subaction=show&embed=1&__OID__'+id+'__='+id;let insertText='';if(dropped.data('type')=='image')insertText='<img src="'+url+'" alt="" />';else insertText='<a href="'+url+'" />'+id+'</a>';$(textarea).trumbowyg('execCmd',{cmd:'insertHTML',param:insertText,forceCss:!1,})}})})}); ;Openrat.Workbench.afterViewLoadedHandler.add(function(e){$(e).find('.clickable').orLinkify()}); ;Openrat.Workbench.afterViewLoadedHandler.add(function(r){$(r).find('.or-qrcode').mouseover(function(){let r=this;if($(r).children().length>0)return;let wrapper=$('<div class="or-info-popup"></div>');$(r).append(wrapper);var e=$(r).attr('data-qrcode');$(wrapper).qrcode({render:'div',text:e,fill:'currentColor'});wrapper.attr('title','')})}); ;Openrat.Workbench.afterViewLoadedHandler.add(function(t){$(t).find('table.or-table--sortable > tbody').sortable();$(t).find('table.or-table--sortable > tbody').closest('form').submit(function(){var t=[];$(this).find('table.or-table--sortable').find('tbody > tr.data').each(function(){let objectid=$(this).data('id');t.push(objectid)});$(this).find('input[name=order]').val(t.join(','))});$(t).find('tr.headline > td > input.checkbox').click(function(){$(this).closest('table').find('tr.data > td > input.checkbox').attr('checked',Boolean($(this).attr('checked')))});$(t).find('.or-table-filter > input').keyup(function(){let filterExpression=$(this).val().toLowerCase();let table=$(this).parents('.or-table-wrapper').find('table');table.addClass('loader');setTimeout(()=>{table.find('tr:not(.headline)').filter(function(){$(this).toggle($(this).text().toLowerCase().indexOf(filterExpression)>-1)});table.removeClass('loader')},50)});$(t).find('table > tbody > tr.headline > td, table > tbody > tr > th').click(function(){let column=$(this);let table=column.parents('table');table.addClass('loader');let isAscending=!column.hasClass('sort-asc');table.find('tr.headline > td, tr > th').removeClass('sort-asc sort-desc');if(isAscending)column.addClass('sort-asc');else column.addClass('sort-desc');setTimeout(function(){let rows=table.find('tr:gt(0)').toArray().sort(a(column.index()));if(!isAscending){rows=rows.reverse()};for(var t=0;t<rows.length;t++){table.append(rows[t])};table.removeClass('loader')},50)});function a(t){return function(a,l){let valA=e(a,t),valB=e(l,t);return $.isNumeric(valA)&&$.isNumeric(valB)?valA-valB:valA.toString().localeCompare(valB)}};function e(t,e){return $(t).children('td').eq(e).text()}}); ;Openrat.Workbench.afterViewLoadedHandler.add(function(e){}); ; -;Openrat.Workbench.afterViewLoadedHandler.add(function(e){registerOpenClose($(e).find('.or-group.toggle-open-close'))}); +;Openrat.Workbench.afterViewLoadedHandler.add(function(e){Openrat.Workbench.registerOpenClose($(e).find('.or-group.toggle-open-close'))}); ;Openrat.Workbench.afterViewLoadedHandler.add(function(e){var o=$(e).find('form'),n=$(e).find('div.or-dropzone-upload > div.input');n.on('dragenter',function(e){e.stopPropagation();e.preventDefault();$(this).css('border','1px dotted gray')});n.on('dragover',function(e){e.stopPropagation();e.preventDefault()});n.on('drop',function(e){$(this).css('border','1px dotted red');e.preventDefault();var n=e.originalEvent.dataTransfer.files;handleFileUpload(o,n)});$(e).find('input[type=file]').change(function(){var e=$(this).prop('files');handleFileUpload(o,e)})});function handleFileUpload(e,a){for(var r=0,t;t=a[r];r++){var n=new FormData();n.append('file',t);n.append('action','folder');n.append('subaction',$(e).data('method'));n.append('output','json');n.append('token',$(e).find('input[name=token]').val());n.append('id',$(e).find('input[name=id]').val());var o=$('<div class="notice info"><div class="text loader"></div></div>');$('#noticebar').prepend(o);$(o).show();$.ajax({'type':'POST',url:'./api/',cache:!1,contentType:!1,processData:!1,data:n,success:function(n,a,r){$(o).remove();let oform=new Openrat.Form();oform.doResponse(n,a,e)},error:function(n,t,d){$(e).closest('div.content').removeClass('loader');$(o).remove();var r;try{var a=jQuery.parseJSON(n.responseText);r=a.error+'/'+a.description+': '+a.reason}catch(i){r=n.responseText};Openrat.Workbench.notify('Upload error',r)}})}}; diff --git a/modules/cms/ui/themes/default/script/openrat/common.js b/modules/cms/ui/themes/default/script/openrat/common.js @@ -179,9 +179,9 @@ Openrat.Workbench.afterNewActionHandler.add( function() { Openrat.Workbench.afterViewLoadedHandler.add( function(element) { // Refresh already opened popup windows. - if ( typeof popupWindow != "undefined" ) + if ( Openrat.Workbench.popupWindow ) $(element).find("a[data-type='popup']").each( function() { - popupWindow.location.href = $(this).attr('data-url'); + Openrat.Workbench.popupWindow.location.href = $(this).attr('data-url'); }); }); @@ -293,7 +293,7 @@ Openrat.Workbench.afterViewLoadedHandler.add( function(viewEl ) { $($element).find('.search input').orSearch( { dropdown:'#title div.search div.dropdown', select: function(obj) { - openNewAction( obj.name, obj.action, obj.id ); + Openrat.Workbench.openNewAction( obj.name, obj.action, obj.id ); } } ); @@ -329,8 +329,8 @@ Openrat.Workbench.afterViewLoadedHandler.add( function(viewEl ) { function registerDragAndDrop(viewEl) { - registerDraggable(viewEl); - registerDroppable(viewEl); + Openrat.Workbench.registerDraggable(viewEl); + Openrat.Workbench.registerDroppable(viewEl); } registerDragAndDrop(viewEl); @@ -338,240 +338,3 @@ Openrat.Workbench.afterViewLoadedHandler.add( function(viewEl ) { } ); - - -function registerDraggable(viewEl) { - -// Drag n Drop: Inhaltselemente (Dateien,Seiten,Ordner,Verknuepfungen) koennen auf Ordner gezogen werden. - - $(viewEl).find('.or-draggable').draggable( - { - helper: 'clone', - opacity: 0.7, - zIndex: 2, - distance: 10, - cursor: 'move', - revert: 'false' - } - ); - -} - -function registerTreeBranchEvents(viewEl) -{ - registerDraggable(viewEl); -} - - -function registerDroppable(viewEl) { - - - $(viewEl).find('.or-droppable').droppable({ - accept: '.or-draggable', - hoverClass: 'or-droppable--hover', - activeClass: 'or-droppable--active', - - drop: function (event, ui) { - - let dropped = ui.draggable; - - let id = dropped.data('id' ); - let name = dropped.data('name'); - if (!name) - name = id; - - $(this).find('.or-selector-link-value').val( id ); - $(this).find('.or-selector-link-name' ).val( name ).attr('placeholder',name ); - } - }); -} - - - - - - -/** - * Setzt neuen modalen Dialog und aktualisiert alle Fenster. - * @param name - * @param action Action - * @param method - * @param id Id - * @param params - */ -function startDialog( name,action,method,id,params ) -{ - // Attribute aus dem aktuellen Editor holen, falls die Daten beim Aufrufer nicht angegeben sind. - if (!action) - action = $('#editor').attr('data-action'); - - if (!id) - id = $('#editor').attr('data-id'); - - let view = new Openrat.View( action,method,id,params ); - - view.before = function() { - $('#dialog > .view').html('<div class="header"><img class="icon" title="" src="./themes/default/images/icon/'+method+'.png" />'+name+'</div>'); - $('#dialog > .view').data('id',id); - $('#dialog').removeClass('is-closed').addClass('is-open'); - - let view = this; - - this.escapeKeyClosingHandler = function (e) { - if (e.keyCode == 27) { // ESC keycode - view.close(); - - $(document).off('keyup'); // de-register. - } - }; - - $(document).keyup(this.escapeKeyClosingHandler); - - // Nicht-Modale Dialoge durch Klick auf freie Fläche schließen. - $('#dialog .filler').click( function() - { - view.close(); - }); - - } - - view.close = function() { - - // Strong modal dialogs are unable to close. - // Really? - if ( $('div#dialog').hasClass('modal') ) - return; - - $('#dialog .view').removeClass('dirty'); - $('#dialog .view').html(''); - $('#dialog').removeClass('is-open').addClass('is-closed'); // Dialog schließen - - $(document).unbind('keyup',this.escapeKeyClosingHandler); // Cleanup ESC-Key-Listener - } - - view.start( $('div#dialog > .view') ); -} - - - - -/** - * Setzt einen Fenster-Titel für die ganze Anwendung. - */ -function setTitle( title ) -{ - if ( title ) - $('head > title').text( title + ' - ' + $('head > title').data('default') ); - else - $('head > title').text( $('head > title').data('default') ); -} - - - -/** - * Setzt neue Action und aktualisiert alle Fenster. - * - * @param action Action - * @param id Id - */ -function openNewAction( name,action,id ) -{ - // Im Mobilmodus soll das Menü verschwinden, wenn eine neue Action geoeffnet wird. - $('nav').removeClass('open'); - - setTitle( name ); // Title setzen. - - Openrat.Navigator.navigateToNew( {'action':action, 'id':id } ); -} - - - - -//Quelle: -//http://aktuell.de.selfhtml.org/tippstricks/javascript/bbcode/ -function insert(tagName, aTag, eTag) -{ -var input = document.forms[0].elements[tagName]; -input.focus(); -/* IE */ -if(typeof document.selection != 'undefined') { - /* Einfuegen des Formatierungscodes */ -// alert('IE'); - var range = document.selection.createRange(); - var insText = range.text; - range.text = aTag + insText + eTag; - /* Anpassen der Cursorposition */ - range = document.selection.createRange(); - if (insText.length == 0) { - range.move('character', -eTag.length); - } else { - range.moveStart('character', aTag.length + insText.length + eTag.length); - } - range.select(); -} -/* Gecko */ -else if(typeof input.selectionStart != 'undefined') -{ -// alert('Gecko'); - /* Einfuegen des Formatierungscodes */ - var start = input.selectionStart; - var end = input.selectionEnd; - var insText = input.value.substring(start, end); - input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end); - /* Anpassen der Cursorposition */ - var pos; - if (insText.length == 0) { - pos = start + aTag.length; - } else { - pos = start + aTag.length + insText.length + eTag.length; - } - input.selectionStart = pos; - input.selectionEnd = pos; -} -/* uebrige Browser */ -else -{ - /* Abfrage der Einfuegeposition */ - - /* - var pos; - var re = new RegExp('^[0-9]{0,3}$'); - while(!re.test(pos)) { - pos = prompt("Position (0.." + input.value.length + "):", "0"); - } - if(pos > input.value.length) { - pos = input.value.length; - } - */ - pos = input.value.length; - - /* Einfuegen des Formatierungscodes */ - var insText = prompt("Text"); - input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos); -} -} - - - - - -function help(el,url,suffix) -{ - var action = $(el).closest('div.panel').find('li.action.active').attr('data-action'); - var method = $(el).closest('div.panel').find('li.action.active').attr('data-method'); - - window.open(url + action + '/'+ method + suffix, 'OpenRat_Help', 'location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes'); -} - - -function htmlEntities(str) { - return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); -} - -function registerOpenClose( $el ) -{ - $($el).children('.on-click-open-close').click( function() { - $(this).closest('.toggle-open-close').toggleClass('open closed'); - }); - -}- \ No newline at end of file diff --git a/modules/cms/ui/themes/default/script/openrat/workbench.js b/modules/cms/ui/themes/default/script/openrat/workbench.js @@ -7,6 +7,7 @@ Openrat.Workbench = new function() this.state = {}; + this.popupWindow = null; /** * Initializes the Workbench. @@ -48,7 +49,7 @@ Openrat.Workbench = new function() this.openModalDialog = function () { if ( $('#dialog').data('action') ) { - startDialog('',$('#dialog').data('action'),$('#dialog').data('action'),0,{}) + this.startDialog('',$('#dialog').data('action'),$('#dialog').data('action'),0,{}) } } @@ -400,8 +401,8 @@ Openrat.Workbench = new function() this.dataChangedHandler = $.Callbacks(); this.dataChangedHandler.add( function() { - if ( popupWindow !== undefined ) - popupWindow.location.reload(); + if ( Openrat.Workbench.popupWindow ) + Openrat.Workbench.popupWindow.location.reload(); } ); this.afterViewLoadedHandler = $.Callbacks(); @@ -419,6 +420,167 @@ Openrat.Workbench = new function() }); } -} + /** + * Sets the application title. + */ + this.setApplicationTitle = function( title ) { + + if (title) + $('head > title').text( title + ' - ' + $('head > title').data('default') ); + else + $('head > title').text( $('head > title').data('default') ); + } + + + /** + * Escape HTML entities. + * + * @param str + * @returns {string} + */ + var htmlEntities = function( str ) { + return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); + } + + + /** + * open and close groups. + * + * @param $el + */ + this.registerOpenClose = function( $el ) + { + $($el).children('.on-click-open-close').click( function() { + $(this).closest('.toggle-open-close').toggleClass('open closed'); + }); + } + + + + /** + * Setzt neue Action und aktualisiert alle Fenster. + * + * @param action Action + * @param id Id + */ + this.openNewAction = function( name,action,id ) + { + // Im Mobilmodus soll das Menü verschwinden, wenn eine neue Action geoeffnet wird. + $('nav').removeClass('open'); + + Openrat.Workbench.setApplicationTitle( name ); // Sets the title. + + Openrat.Navigator.navigateToNew( {'action':action, 'id':id } ); + } + + + + /** + * Creating a new modal dialog. + * + * @param name + * @param action Action + * @param method + * @param id Id + * @param params + */ + this.startDialog = function( name,action,method,id,params ) + { + // Attribute aus dem aktuellen Editor holen, falls die Daten beim Aufrufer nicht angegeben sind. + if (!action) + action = $('#editor').attr('data-action'); + + if (!id) + id = $('#editor').attr('data-id'); + + let view = new Openrat.View( action,method,id,params ); + + view.before = function() { + $('#dialog > .view').html('<div class="header"><img class="icon" title="" src="./themes/default/images/icon/'+method+'.png" />'+name+'</div>'); + $('#dialog > .view').data('id',id); + $('#dialog').removeClass('is-closed').addClass('is-open'); + + let view = this; + + this.escapeKeyClosingHandler = function (e) { + if (e.keyCode == 27) { // ESC keycode + view.close(); + + $(document).off('keyup'); // de-register. + } + }; + + $(document).keyup(this.escapeKeyClosingHandler); + + // Nicht-Modale Dialoge durch Klick auf freie Fläche schließen. + $('#dialog .filler').click( function() + { + view.close(); + }); + + } + + view.close = function() { + + // Strong modal dialogs are unable to close. + // Really? + if ( $('div#dialog').hasClass('modal') ) + return; + + $('#dialog .view').removeClass('dirty'); + $('#dialog .view').html(''); + $('#dialog').removeClass('is-open').addClass('is-closed'); // Dialog schließen + + $(document).unbind('keyup',this.escapeKeyClosingHandler); // Cleanup ESC-Key-Listener + } + + view.start( $('div#dialog > .view') ); + } + + + + + this.registerDraggable = function(viewEl) { + +// Drag n Drop: Inhaltselemente (Dateien,Seiten,Ordner,Verknuepfungen) koennen auf Ordner gezogen werden. + + $(viewEl).find('.or-draggable').draggable( + { + helper: 'clone', + opacity: 0.7, + zIndex: 2, + distance: 10, + cursor: 'move', + revert: 'false' + } + ); + + } + + + this.registerDroppable = function(viewEl) { + + + $(viewEl).find('.or-droppable').droppable({ + accept: '.or-draggable', + hoverClass: 'or-droppable--hover', + activeClass: 'or-droppable--active', + + drop: function (event, ui) { + + let dropped = ui.draggable; + + let id = dropped.data('id' ); + let name = dropped.data('name'); + if (!name) + name = id; + + $(this).find('.or-selector-link-value').val( id ); + $(this).find('.or-selector-link-name' ).val( name ).attr('placeholder',name ); + } + }); + } + +} diff --git a/modules/cms/ui/themes/default/script/plugin/jquery-plugin-orLinkify.js b/modules/cms/ui/themes/default/script/plugin/jquery-plugin-orLinkify.js @@ -1,21 +1,19 @@ /** - * Enable clicking on '.clickable'-Areas. + * JQuery-Plugin, enable clicking on an area. + * It searches for an anchor (<a href="..." />) in the child elements and virtually clicks on it. */ - -var popupWindow; - jQuery.fn.orLinkify = function() { - // Das 'echte' Ausführen der Links deaktivieren, da dies schon per Javascript erfolgt. - // Das Öffnen in einem neuen Tab funktioniert aber weiterhin über die URL. + // Disable all links in this linkified area. + // The user is already able to open the link in a new tab. $(this).find('a').click( function(event) { event.preventDefault(); } ); return $(this).click(function() { - + // Searching for the first link in all children. $(this).find('a').first().each( function() { let type = $(this).attr('data-type'); @@ -26,6 +24,9 @@ jQuery.fn.orLinkify = function() switch( type ) { + /** + * Creating a temporary form element for submitting a POST request. + */ case 'post': // Create a temporary form element. @@ -49,7 +50,7 @@ jQuery.fn.orLinkify = function() case 'edit': case 'dialog': - startDialog($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-method'),$(this).attr('data-id'),$(this).attr('data-extra') ); + Openrat.Workbench.startDialog($(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-method'),$(this).attr('data-id'),$(this).attr('data-extra') ); break; case 'external': @@ -57,7 +58,7 @@ jQuery.fn.orLinkify = function() break; case 'popup': - popupWindow = window.open( $(this).attr('data-url'), 'Popup', 'location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes'); + Openrat.Workbench.popupWindow = window.open( $(this).attr('data-url'), 'Popup', 'location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes'); break; case 'help': @@ -69,7 +70,7 @@ jQuery.fn.orLinkify = function() break; case 'open': - openNewAction( $(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-id') ); + Openrat.Workbench.openNewAction( $(this).attr('data-name'),$(this).attr('data-action'),$(this).attr('data-id') ); break; default: diff --git a/modules/cms/ui/themes/default/script/plugin/jquery-plugin-orTree.js b/modules/cms/ui/themes/default/script/plugin/jquery-plugin-orTree.js @@ -6,7 +6,13 @@ */ jQuery.fn.orTree = function () { - $(this).each(function (idxx, treeEl) + let registerTreeBranchEvents = function (viewEl) + { + Openrat.Workbench.registerDraggable(viewEl); + } + + + $(this).each(function (idxx, treeEl) { // Klick-Funktion zum Öffnen des Zweiges. $(treeEl).children('.or-navtree-node-control').click( function () @@ -56,13 +62,13 @@ jQuery.fn.orTree = function () $ul.append( html ); $ul.find('li').orTree(); // All subnodes are getting event listener for open/close - // Die Navigationspunkte sind anklickbar, hier wird der Standardmechanismus benutzt. - $ul.find('.clickable').orLinkify(); /* macht linkify schon $(new_li).find('.clickable a').click( function(event) { event.preventDefault(); // Links werden per Javascript geöffnet. Beim Öffnen im neuen Tab hat das aber keine Bedeutung. } );*/ registerTreeBranchEvents($ul); + // Die Navigationspunkte sind anklickbar, hier wird der Standardmechanismus benutzt. + $ul.find('.clickable').orLinkify(); $ul.slideDown('fast'); // Einblenden }).fail(function () {