commit c4ef6603288de9f3d8625afc47ef4f92348ba156
parent 20c628e013a32b48792c5a080179ab68ff3adc2e
Author: Jan Dankert <devnull@localhost>
Date: Wed, 4 Jul 2018 01:13:02 +0200
Ansteuerung der History-API verbessert und alten Kram tlw. entfernt.
Diffstat:
2 files changed, 82 insertions(+), 344 deletions(-)
diff --git a/modules/cms-ui/themes/default/script/openrat.js b/modules/cms-ui/themes/default/script/openrat.js
@@ -23,7 +23,7 @@ $( function()
// Listening to the "popstate" event:
window.onpopstate = function(ev) {
- History.fromHistory(ev.state);
+ Navigator.navigateTo(ev.state);
};
initActualHistoryState();
@@ -32,33 +32,73 @@ $( function()
loadTree(); // Initial Loading of the navigationtree
+
+
});
function initActualHistoryState() {
- var state = new Object();
+ var state = {};
state.name = window.document.title;
- state.action = $('#editor').data('action');
- state.id = $('#editor').data('id' );
- History.toActualHistory( state );
+
+ var params = new URLSearchParams( window.location.search );
+
+ if (params.has('action')){
+
+ state.action = params.get('action');
+ state.id = params.get('id' );
+ state.name = window.document.title;
+
+ state.data = {};
+
+ //Iterate the search parameters.
+
+ var params = Array.from( params.entries() );
+ for( var entry in params ) {
+ state.data[params[entry][0]] = params[entry][1];
+ };
+
+ Navigator.toActualHistory( state );
+ }
}
/**
- * History-API.
+ * Navigation.
*/
-var History = new function () {
+var Navigator = new function () {
'use strict';
- this.fromHistory = function(state) {
- Workbench.loadNewAction(state.action,state.id);
+ /**
+ * Navigiert zu einer Action, aber ohne ein neues History-Element einzufügen.
+ */
+ this.navigateTo = function(state) {
+ Workbench.loadNewActionState(state);
}
- this.toHistory = function(obj) {
+
+ /**
+ *
+ * Navigiert zu einer neue Action und fügt einen neuen History-Eintrag hinzu.
+ */
+ this.navigateToNew = function(obj) {
+
+ Workbench.loadNewActionState(obj);
window.history.pushState(obj,obj.name,createUrl(obj.action,null,obj.id,obj.data,false) );
+
+ var state = {action:action,method:method,id:id,data:params};
+ }
+
+ this.navigateToNewAction = function(action, method, id, params ) {
+ var state = {action:action,method:method,id:id,data:params};
+ this.navigateToNew(state);
}
+ /**
+ * Setzt den State für den aktuellen History-Eintrag.
+ * @param obj
+ */
this.toActualHistory = function(obj) {
window.history.replaceState(obj,obj.name,createUrl(obj.action,null,obj.id,obj.data,false) );
}
@@ -76,22 +116,9 @@ var Workbench = new function()
// Initialze Ping timer.
this.initializePingTimer();
- this.loadInitialViews();
}
- this.loadInitialViews = function() {
-
- /*
- $('div#workbench > div .view').load( createUrl('login','login',0 ),function() {
- $(this).fadeIn('slow');
-
- registerHeaderEvents();
- });
- */
-
- }
-
/**
* Registriert den Ping-Timer für den Sitzungserhalt.
*/
@@ -115,13 +142,17 @@ var Workbench = new function()
}
+
+ this.loadNewActionState = function(state) {
+
+ Workbench.loadNewAction(state.action,state.method,state.id,state.data);
+ }
+
/**
*
*/
- this.loadNewAction = function(action, method, id, params ) {
- var state = {action:action,method:method,id:id,data:params};
- History.toHistory(state);
+ this.loadNewAction = function(action, method, id, params ) {
$('#workbench .view-loader').each( function(idx) {
var targetDOMElement = $(this);
@@ -152,6 +183,8 @@ var Workbench = new function()
});
});
+ filterMenus(action);
+
}
}
@@ -166,7 +199,6 @@ function refreshAll()
{
//$('ul#history').sortable();
- refreshTitleBar();
refreshWorkbench();
// Workbench-Events registrieren
@@ -232,57 +264,8 @@ function refreshActualView( element )
*/
function refreshWorkbench()
{
- // Workbench laden
- $('ul#history').empty();
-
- // View-Größe initial berechnen.
- resizeWorkbench();
-
- // Modale Dialoge beenden
- $('div.modaldialog').fadeOut(500);
- $('#workbench').removeClass('modal');
- $('div#filler').fadeOut(500);
-
- // Default-Inhalte der einzelnen Views laden.
- $('#workbench').fadeIn(750).find('li.active').each( function() {
- var method = $(this).attr('data-method');
- var action = $(this).attr('data-action');
-
- if ( action )
- loadView( $(this).closest('div.panel').find('div.content'),action,method,0);
- });
-
- // OnClick-Handler zum Scrollen der Tabs
- $('div.backward_link').click( function() {
- var $views = $(this).closest('div.header').find('ul.views');
- //$views.scrollTo( -50 );
- var $prev = $views.find('li.action.active').prev();
- $views.scrollTo( $prev,500,{"axis":"x"} );
- $prev.click();
- }
- );
- $('div.forward_link').click( function() {
- var $views = $(this).closest('div.header').find('ul.views');
- var $next = $views.find('li.action.active').next();
- $views.scrollTo( $next,500,{"axis":"x"} );
- $next.click();
- }
- );
-
-
-
registerWorkbenchEvents();
-
-
-
- // Modale Dialoge
- //$('form.login, form.profile').dialog( { modal:true, resizable:false, width:760, height:600, draggable: false } );
-
-
- $(window).resize( function() {
- resizeWorkbench();
- } );
}
@@ -292,145 +275,6 @@ function refreshWorkbench()
*/
function registerWorkbenchEvents()
{
- // Drag and Drop für Views
- $('ul.views > li.action').draggable(
- {
- cursor: 'move',
- revert: 'invalid'
- } );
-
- // Ziehen von Views in andere View-Leisten.
- // Die View wird dabei einfach kopiert. Container mit leeren View-Leisten werden gelöscht.
- $('ul.views').droppable(
- {
- accept : 'li.action',
- hoverClass : 'drophover',
- activeClass: 'dropactive',
- drop: function(event, ui) // View fällt auf eine andere, existierende View-Liste
- {
- var dropped = ui.draggable;
- var droppedOn = $(this);
- var oldViewList = dropped.parent();
-
- if ( $(dropped).closest('div.panel').attr('id') == $(droppedOn).closest('div.panel').attr('id') )
- $(dropped).css({top: 0,left: 0}); // Nicht auf das eigene Fenster fallen lassen.
- else
- $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn).click();
-
- // Falls die View-Liste, von der die View weggezogen wurde, jetzt leer ist:
- if ( oldViewList.find('li').size() == 0 )
- {
- var oldContainer = oldViewList.closest('div.container');
- oldViewList.closest('div.panel').remove(); // Die Bar, in der die leere Viewliste ist, entfernen.
-
- if ( oldContainer.hasClass('autosize') )
- oldContainer.children('div.panel').addClass('autosize').removeClass('resizable');
- else
- oldContainer.children('div.panel').addClass('resizable').removeClass('autosize');
-
- oldContainer.replaceWith( oldContainer.children('div.panel') ); // die andere Bar nehmen und den übergeordneten Container ersetzen.
- resizeWorkbench();
- }
- }
- }
- );
-
- // Ziehen von Views in anderen Inhalt-Bereichen
- // Dabei wird der Ziel-Bereich durch einen neuen View-Container ersetzt.
- $('div.content').droppable(
- {
- accept : 'li.action',
- hoverClass : 'drophover',
- activeClass: 'dropactive',
- drop : function(event, ui)
- {
- var dropped = ui.draggable;
- var droppedOn = $(this);
- var oldViewList = dropped.parent();
-
- var offsetDropped = dropped.offset();
- var offsetContent = droppedOn.offset();
-
- // Abstände im Zielelement zu dem Rändern bestimmen.
- var paddingLeft = offsetDropped.left-offsetContent.left;
- var paddingRight = offsetContent.left+droppedOn.width()-offsetDropped.left;
- var paddingTop = offsetDropped.top-offsetContent.top;
- var paddingBottom = offsetContent.top+droppedOn.height()-offsetDropped.top;
- //alert( ' L:' + paddingLeft + ' R:' + paddingRight + ' T:'+ paddingTop + ' B:' + paddingBottom );
-
- var newContainer = $('<div class="container"><div class="first" /><div class="divider" /><div class="second"></div>');
-
- if ( paddingLeft < Math.min(paddingRight,Math.min(paddingTop,paddingBottom)) )
- {
- // Linker Rand ist der nächste.
- newContainer.addClass('axle-x');
- newContainer.children('div.divider' ).addClass('to-right');
- newContainer.children('div.first' ).removeClass('first').addClass('resizable');
- newContainer.children('div.second').removeClass('first').addClass('autosize' );
- }
- else if ( paddingRight < Math.min(paddingTop,paddingBottom) )
- {
- // Rechter Rand ist der nächste.
- newContainer.addClass('axle-x');
- newContainer.children('div.divider' ).addClass('to-left');
- newContainer.children('div.first' ).removeClass('first').addClass('autosize');
- newContainer.children('div.second').removeClass('first').addClass('resizable' );
- }
- else if ( paddingTop < paddingBottom )
- {
- // Oberer Rand ist der nächste.
- newContainer.addClass('axle-y');
- newContainer.children('div.divider' ).addClass('to-bottom');
- newContainer.children('div.first' ).removeClass('first').addClass('resizable');
- newContainer.children('div.second').removeClass('first').addClass('autosize' );
- }
- else
- {
- // Unterer Rand ist der nächste.
- newContainer.addClass('axle-y');
- newContainer.children('div.divider' ).addClass('to-top');
- newContainer.children('div.first' ).removeClass('first').addClass('autosize');
- newContainer.children('div.second').removeClass('first').addClass('resizable' );
- }
-
- newContainer.children('div.resizable' ).addClass('bar').data('size-factor',0.4);
-
- // Die komplette Bar der Quelle kopieren.
- $(dropped).closest('div.panel').clone().addClass('resizable').removeClass('autosize').replaceAll( newContainer.children('div.resizable') );
- newContainer.find('ul.views > li').remove(); // Alle View entfernen
- $(dropped).detach().css({top: 0,left: 0}).appendTo( newContainer.find('ul.views') ).click(); // View kopieren
-
- // Neuen Container in den DOM einfügen.
- var oldContainer = $(droppedOn).closest('div.panel').replaceWith( newContainer );
- newContainer.children('div.autosize').replaceWith( oldContainer );
-
- if ( oldContainer.hasClass('autosize' )) { newContainer.addClass('autosize' ).removeClass('resizable'); }
- if ( oldContainer.hasClass('resizable')) { newContainer.addClass('resizable').removeClass('autosize' ); }
- oldContainer.addClass('autosize' ).removeClass('resizable');
-
- // Falls die View-Liste, von der die View weggezogen wurde, jetzt leer ist:
- if ( oldViewList.find('li').length == 0 )
- {
- var oldContainer = oldViewList.closest('div.container');
- oldViewList.closest('div.panel').remove(); // Die Bar, in der die leere Viewliste ist, entfernen.
-
- if ( oldContainer.hasClass('autosize') )
- oldContainer.children('div.panel').addClass('autosize').removeClass('resizable');
- else
- oldContainer.children('div.panel').addClass('resizable').removeClass('autosize');
-
- oldContainer.replaceWith( oldContainer.children('div.panel') ); // die andere Bar nehmen und den übergeordneten Container ersetzen.
- resizeWorkbench();
- }
-
- resizeWorkbench();
- registerWorkbenchEvents();
- }
- } );
-
- // geht nicht zusammen mit draggable...
- //$('ul.views').sortable();
-
// Modalen Dialog erzeugen.
if ( $('#workbench div.panel.modal').length > 0 )
{
@@ -440,82 +284,11 @@ function registerWorkbenchEvents()
}
- // Größe der einzelnen Bereiche verändern
- $('div.container.axle-x > div.divider').draggable(
-
- {
- stop: function( event, ui ) {
- var xoffset = ui.position.left;
- var lr = $(this).hasClass('to-right')?1:-1;
-
- $(this).parent().children('div.resizable').each( function()
- {
- var factor = ((lr*xoffset)+$(this).width()) / ($(this).parent().width());
- factor = Math.min(0.5,Math.max(0.1,factor)); // Erlaubter Bereich
-
- $(this).data('size-factor',factor);
- }
- );
- resizeWorkbenchContainer( $(this).parent() );
- },
- axis: "x",
- revert: true,
- revertDuration: 0
- }
- );
- $('div.container.axle-y > div.divider').draggable(
-
- {
- stop: function( event, ui ) {
- var yoffset = ui.position.top;
- var lr = $(this).hasClass('to-bottom')?1:-1;
-
- $(this).parent().children('div.resizable').each( function()
- {
- var factor = ((lr*yoffset)+$(this).height()) / ($(this).parent().height());
- factor = Math.min(0.5,Math.max(0.1,factor)); // Erlaubter Bereich
-
- $(this).data('size-factor',factor);
- }
- );
- resizeWorkbenchContainer( $(this).parent() );
- },
- axis: "y",
- revert: true,
- revertDuration: 0
- }
- );
-
- // OnClick-Handler für Klick auf einen Tab-Reiter.
- $('ul.views > li.action').click( function() {
- $(this).orLoadView();
- });
-
$('div.header').dblclick( function()
- {
- fullscreen( this );
- } );
-
-}
-
-
-
-/**
- * Laedt den Header neu.
- */
-function refreshTitleBar()
-{
- // Modale Dialoge
- //$('form.login, form.profile').dialog( { modal:true, resizable:false, width:760, height:600, draggable: false } );
-}
-
-
+ {
+ fullscreen( this );
+ } );
-function loadViewByName(viewName, url )
-{
- alert('loadViewByName');
-
- loadView( $('div#'+viewName),url );
}
@@ -530,7 +303,7 @@ function loadViewByName(viewName, url )
*/
function loadView(contentEl,action,method,id,params )
{
- Workbench.loadNewAction(action,method,id,params );
+ Navigator.navigateToNewAction( action,method,id,params );
}
@@ -607,7 +380,7 @@ function registerViewEvents( viewEl )
// Bei Änderungen in der View das Tab als 'dirty' markieren
$(viewEl).find('input').change( function() {
- $(this).closest('div.panel').find('ul.views li.action.active').addClass('dirty');
+ $('#editor').find('header').addClass('dirty');
});
}
@@ -664,6 +437,7 @@ function fullscreen( element ) {
} );
}
+
function loadTree()
{
// Oberstes Tree-Element erzeugen
@@ -682,7 +456,6 @@ function loadTree()
-
/**
* Setzt neue View und aktualisiert alle Fenster.
* @param element
@@ -711,36 +484,6 @@ function postUrl(url,element)
}
-/**
- * Ermittelt die aktuelle, ausgewählte View.
- *
- * @returns JSON
- */
-function getActiveView()
-{
- var element = $('#panel-content').find('li.active');
-
- return{
- 'action' : $(element).data('action'),
- 'id' : $(element).data('id' ),
- 'extraid' : $(element).data('extra' )
- };
-}
-
-
-/**
- * Setzt neue View und aktualisiert alle Fenster.
- * @param element
- * @param method
- */
-function startView( element,method )
-{
- loadView( $(element).closest('div.panel').find('div.content'), active.action,method,active.id,active.extraid );
-
- // Alle refresh-fähigen Views mit dem neuen Objekt laden.
- // refreshAllRefreshables();
-}
-
/**
* Setzt neuen modalen Dialog und aktualisiert alle Fenster.
@@ -826,9 +569,7 @@ function filterMenus(action)
*/
function setNewAction( action,id,extraId )
{
- filterMenus(action);
-
- Workbench.loadNewAction(action,'edit',id,extraId);
+ Navigator.navigateToNewAction(action,'edit',id,extraId);
// Alle refresh-fähigen Views mit dem neuen Objekt laden.
//refreshAllRefreshables();
}
@@ -838,11 +579,7 @@ function setNewAction( action,id,extraId )
* Setzt neue Id und aktualisiert alle Fenster.
* @param id Id
*/
-function setNewId( id )
-{
- $('#workbench div.refreshable').attr('data-id',id);
- // Alle refresh-fähigen Views mit dem neuen Objekt laden.
- refreshAllRefreshables();
+function setNewId( id ) {
}
@@ -997,12 +734,16 @@ function createUrl(action,subaction,id,extraid,embed)
if ( typeof extraid === 'string')
{
jQuery.each(jQuery.parseJSON(extraid), function(name, value) {
+ if(name=='action'||name=='subaction'||name=='id')
+ return;
url = url + '&' + name + '=' + value;
});
}
else if ( typeof extraid === 'object')
{
jQuery.each(extraid, function(name, field) {
+ if(name=='action'||name=='subaction'||name=='id')
+ return;
url = url + '&' + name + '=' + field;
});
}
diff --git a/modules/cms-ui/themes/default/script/openrat.min.js b/modules/cms-ui/themes/default/script/openrat.min.js
@@ -1,13 +1,10 @@
-;var DEFAULT_CONTENT_ACTION='edit',OR_THEMES_EXT_DIR='modules/cms-ui/themes/';$(function(){$('html').removeClass('nojs');$('.initial-hidden').removeClass('initial-hidden');refreshAll();registerHeaderEvents();$('#workbench .view').each(function(e){registerViewEvents(this)});window.onpopstate=function(e){History.fromHistory(e.state)};initActualHistoryState();Workbench.initialize();loadTree()});function initActualHistoryState(){var e={};e.name=window.document.title;e.action=$('#editor').data('action');e.id=$('#editor').data('id');History.toActualHistory(e)};var History=new function(){'use strict';this.fromHistory=function(e){Workbench.loadNewAction(e.action,e.id)};this.toHistory=function(e){window.history.pushState(e,e.name,createUrl(e.action,null,e.id,e.data,!1))};this.toActualHistory=function(e){window.history.replaceState(e,e.name,createUrl(e.action,null,e.id,e.data,!1))}},Workbench=new function(){'use strict';this.initialize=function(){this.initializePingTimer();this.loadInitialViews()};this.loadInitialViews=function(){};this.initializePingTimer=function(){var e=function(){$.ajax(createUrl('title','ping',0))},i=5;window.setInterval(e,i*60*1000)};this.loadNewAction=function(e,i,t,a){var n={action:e,method:i,id:t,data:a};History.toHistory(n);$('#workbench .view-loader').each(function(i){var n=$(this),s=n.data('method'),o=createUrl(e,s,t,a,!0);n.empty().fadeTo(1,0.7).addClass('loader').html('').load(o,function(e,i,t){n.fadeTo(350,1);if(i=='error'){$(n).html('');$(n).removeClass('loader');notify('error',e);return};$(n).removeClass('loader');registerViewEvents(n)})})}};function refreshAll(){refreshTitleBar();refreshWorkbench();$('div#filler').click(function(){if($('div#dialog').hasClass('modal')){}
-else{$('div#dialog').html('').hide();$('div#filler').fadeOut(500)}})};function refreshAllRefreshables(){$('#workbench div.panel > div.header > ul.views > li.active').each(function(){if($(this).hasClass('static'))return;var e=$(this).data('method'),i=$(this).data('action'),t=$(this).data('id'),a=$(this).data('extra');loadView($(this).closest('div.panel').find('div.content'),i,e,t,a)})};function refreshActualView(e){$(e).closest('div.panel').find('li.active').each(function(){var e=$(this).attr('data-method'),i=$(this).attr('data-action'),t=$(this).attr('data-id');loadView($(this).closest('div.panel').find('div.content'),i,e,t)})};function refreshWorkbench(){$('ul#history').empty();resizeWorkbench();$('div.modaldialog').fadeOut(500);$('#workbench').removeClass('modal');$('div#filler').fadeOut(500);$('#workbench').fadeIn(750).find('li.active').each(function(){var i=$(this).attr('data-method'),e=$(this).attr('data-action');if(e)loadView($(this).closest('div.panel').find('div.content'),e,i,0)});$('div.backward_link').click(function(){var e=$(this).closest('div.header').find('ul.views'),i=e.find('li.action.active').prev();e.scrollTo(i,500,{'axis':'x'});i.click()});$('div.forward_link').click(function(){var e=$(this).closest('div.header').find('ul.views'),i=e.find('li.action.active').next();e.scrollTo(i,500,{'axis':'x'});i.click()});registerWorkbenchEvents();$(window).resize(function(){resizeWorkbench()})};function registerWorkbenchEvents(){$('ul.views > li.action').draggable({cursor:'move',revert:'invalid'});$('ul.views').droppable({accept:'li.action',hoverClass:'drophover',activeClass:'dropactive',drop:function(e,i){var a=i.draggable,s=$(this),n=a.parent();if($(a).closest('div.panel').attr('id')==$(s).closest('div.panel').attr('id'))$(a).css({top:0,left:0});else $(a).detach().css({top:0,left:0}).appendTo(s).click();if(n.find('li').size()==0){var t=n.closest('div.container');n.closest('div.panel').remove();if(t.hasClass('autosize'))t.children('div.panel').addClass('autosize').removeClass('resizable');else t.children('div.panel').addClass('resizable').removeClass('autosize');t.replaceWith(t.children('div.panel'));resizeWorkbench()}}});$('div.content').droppable({accept:'li.action',hoverClass:'drophover',activeClass:'dropactive',drop:function(e,i){var n=i.draggable,s=$(this),d=n.parent(),o=n.offset(),r=s.offset(),f=o.left-r.left,v=r.left+s.width()-o.left,l=o.top-r.top,c=r.top+s.height()-o.top,t=$('<div class="container"><div class="first" /><div class="divider" /><div class="second"></div>');if(f<Math.min(v,Math.min(l,c))){t.addClass('axle-x');t.children('div.divider').addClass('to-right');t.children('div.first').removeClass('first').addClass('resizable');t.children('div.second').removeClass('first').addClass('autosize')}
-else if(v<Math.min(l,c)){t.addClass('axle-x');t.children('div.divider').addClass('to-left');t.children('div.first').removeClass('first').addClass('autosize');t.children('div.second').removeClass('first').addClass('resizable')}
-else if(l<c){t.addClass('axle-y');t.children('div.divider').addClass('to-bottom');t.children('div.first').removeClass('first').addClass('resizable');t.children('div.second').removeClass('first').addClass('autosize')}
-else{t.addClass('axle-y');t.children('div.divider').addClass('to-top');t.children('div.first').removeClass('first').addClass('autosize');t.children('div.second').removeClass('first').addClass('resizable')};t.children('div.resizable').addClass('bar').data('size-factor',0.4);$(n).closest('div.panel').clone().addClass('resizable').removeClass('autosize').replaceAll(t.children('div.resizable'));t.find('ul.views > li').remove();$(n).detach().css({top:0,left:0}).appendTo(t.find('ul.views')).click();var a=$(s).closest('div.panel').replaceWith(t);t.children('div.autosize').replaceWith(a);if(a.hasClass('autosize')){t.addClass('autosize').removeClass('resizable')};if(a.hasClass('resizable')){t.addClass('resizable').removeClass('autosize')};a.addClass('autosize').removeClass('resizable');if(d.find('li').length==0){var a=d.closest('div.container');d.closest('div.panel').remove();if(a.hasClass('autosize'))a.children('div.panel').addClass('autosize').removeClass('resizable');else a.children('div.panel').addClass('resizable').removeClass('autosize');a.replaceWith(a.children('div.panel'));resizeWorkbench()};resizeWorkbench();registerWorkbenchEvents()}});if($('#workbench div.panel.modal').length>0){$('#workbench div.panel.modal').parent().addClass('modal');$('div#filler').fadeTo(500,0.5);$('#workbench').addClass('modal')};$('div.container.axle-x > div.divider').draggable({stop:function(e,i){var t=i.position.left,a=$(this).hasClass('to-right')?1:-1;$(this).parent().children('div.resizable').each(function(){var e=((a*t)+$(this).width())/($(this).parent().width());e=Math.min(0.5,Math.max(0.1,e));$(this).data('size-factor',e)});resizeWorkbenchContainer($(this).parent())},axis:'x',revert:!0,revertDuration:0});$('div.container.axle-y > div.divider').draggable({stop:function(e,i){var t=i.position.top,a=$(this).hasClass('to-bottom')?1:-1;$(this).parent().children('div.resizable').each(function(){var e=((a*t)+$(this).height())/($(this).parent().height());e=Math.min(0.5,Math.max(0.1,e));$(this).data('size-factor',e)});resizeWorkbenchContainer($(this).parent())},axis:'y',revert:!0,revertDuration:0});$('ul.views > li.action').click(function(){$(this).orLoadView()});$('div.header').dblclick(function(){fullscreen(this)})};function refreshTitleBar(){};function loadViewByName(e,i){alert('loadViewByName');loadView($('div#'+e),i)};function loadView(e,i,t,a,n){Workbench.loadNewAction(i,t,a,n)};function registerViewEvents(e){$(e).trigger('orViewLoaded');$(e).find('input[data-hint]').orHint();$(e).closest('div.panel').find('div.header div.dropdown div.entry.perview').remove();$(e).find('div.headermenu > a').each(function(e,i){});$(e).find('div.header > a.back').each(function(i,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(i,t,a){var n=$(e).parent();$(n).find('input[type=text]').attr('value',i);$(n).find('input[type=hidden]').attr('value',a)}})});$('div.content li.object').draggable({cursor:'move',revert:'invalid'});$('div.content li.object > div.entry[data-type=\'folder\']').droppable({accept:'li.object',hoverClass:'drophover',activeClass:'dropactive',drop:function(e,i){var t=i.draggable,a=$(this).parent();startDialog($(this).text(),$(t).attr('data-type'),'copy',$(a).attr('data-id'),{'action':$(t).attr('data-type'),'subaction':'copy','id':$(t).attr('data-id'),'targetFolderId':$(a).attr('data-id')});$(t).detach().css({top:0,left:0}).appendTo(a).click()}});$(e).find('input').change(function(){$(this).closest('div.panel').find('ul.views li.action.active').addClass('dirty')})};function registerHeaderEvents(){$('body').click(function(){$('.toolbar-icon.menu').parent().removeClass('open')});$('#title .toolbar-icon.menu').click(function(e){e.stopPropagation();$(this).parent().toggleClass('open')});$('#title .toolbar-icon.menu').mouseover(function(){$(this).parent().find('.toolbar-icon.menu').removeClass('open');$(this).addClass('open')});$('#title').trigger('orHeaderLoaded');$('div.search input').blur(function(){$('div.search input div.dropdown').fadeOut()});$('div.search input').orHint();$('div.search input').orSearch({dropdown:'div.search div.dropdown'})};function fullscreen(e){$(e).closest('div.panel').fadeOut('fast',function(){$(this).toggleClass('fullscreen').fadeIn('fast')})};function loadTree(){$('#navigation').html(' ');$('#navigation').orTree({type:'root',id:0,onSelect:function(e,i,t,a){openNewAction(e,i,t,a)}});$('#navigation > div.sheet.action-tree.method-tree > ul.tree > div.tree').delay(500).click();$('#navigation > div.sheet.action-tree.method-tree > ul.tree > div.tree').delay(500).click()};function submitUrl(e,i){postUrl(i,e);refreshAllRefreshables()};function postUrl(e,i){e+='&output=json';$.ajax({'type':'POST',url:e,data:{},success:function(e,t,a){$('div.panel div.status div.loader').html(' ');doResponse(e,t,i)}})};function getActiveView(){var e=$('#panel-content').find('li.active');return{'action':$(e).data('action'),'id':$(e).data('id'),'extraid':$(e).data('extra')}};function startView(e,i){loadView($(e).closest('div.panel').find('div.content'),active.action,i,active.id,active.extraid)};function startDialog(e,i,t,a,n){$('div#filler').fadeTo(500,0.5);$('div#dialog').html('<div class="header"><ul class="views"><li class="action active"><img class="icon" title="" src="./themes/default/images/icon/'+t+'.png" /><div class="tabname" style="width:100px;">'+e+'</div></li></ul></div><div class="content" />');$('div#dialog').data('id',a);$('div#dialog').show();loadView($('div#dialog div.content'),i,t,a,n)};function modalView(e,i){var t=$(e).closest('div.panel').find('li.active').attr('data-action'),a=$(e).closest('div.panel').find('li.active').attr('data-method'),n=$(e).closest('div.panel').find('li.active').attr('data-id');$(e).closest('div.content').modal({'overlayClose':'true','xxxonClose':function(){alert('close)')}});loadView($(e).closest('div.content'),t,a,n)};function setTitle(e){if(e)$('head > title').text(e+' - '+$('head > title').data('default'));else $('head > title').text($('head > title').data('default'))};function openNewAction(e,i,t,a){setTitle(e);setNewAction(i,t,a)};function filterMenus(e){$('div.clickable').addClass('active');$('div.clickable.filtered').removeClass('active').addClass('inactive');$('div.clickable.filtered.on-action-'+e).addClass('active').removeClass('inactive')};function setNewAction(e,i,t){filterMenus(e);Workbench.loadNewAction(e,'edit',i,t)};function setNewId(e){$('#workbench div.refreshable').attr('data-id',e);refreshAllRefreshables()};function notifyBrowser(e){if(!('Notification' in window)){return}
-else if(Notification.permission==='granted'){var i=new Notification(e)}
-else if(Notification.permission!=='denied'){Notification.requestPermission(function(i){if(i==='granted'){var t=new Notification(e)}})}};function setUserStyle(e){var i=$('html'),t=i.attr('class').split(/\s+/);$.each(t,function(e,t){if(t.startsWith('theme-')){i.removeClass(t)}});i.addClass('theme-'+e.toLowerCase())};function insert(e,i,t){var a=document.forms[0].elements[e];a.focus();if(typeof document.selection!='undefined'){var o=document.selection.createRange(),n=o.text;o.text=i+n+t;o=document.selection.createRange();if(n.length==0){o.move('character',-t.length)}
-else{o.moveStart('character',i.length+n.length+t.length)};o.select()}
-else if(typeof a.selectionStart!='undefined'){var r=a.selectionStart,d=a.selectionEnd,n=a.value.substring(r,d);a.value=a.value.substr(0,r)+i+n+t+a.value.substr(d);var s;if(n.length==0){s=r+i.length}
-else{s=r+i.length+n.length+t.length};a.selectionStart=s;a.selectionEnd=s}
-else{s=a.value.length;var n=prompt('Text');a.value=a.value.substr(0,s)+i+n+t+a.value.substr(s)}};function createUrl(e,i,t,a,s){var n='./';n+='?action='+e;if(i!=null)n+='&subaction='+i;n+='&id='+t;if(s)n+='&embed=1';if(typeof a==='string'){jQuery.each(jQuery.parseJSON(a),function(e,i){n=n+'&'+e+'='+i})}
-else if(typeof a==='object'){jQuery.each(a,function(e,i){n=n+'&'+e+'='+i})}
-else{};return n};function resizeWorkbenchContainer(e){};function resizeWorkbench(){};function resizeTabs(e){};function help(e,i,t){var a=$(e).closest('div.panel').find('li.action.active').attr('data-action'),n=$(e).closest('div.panel').find('li.action.active').attr('data-method');window.open(i+a+'/'+n+t,'OpenRat_Help','location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes')};function notify(e,i){var t=$('<div class="notice '+e+'"><div class="text">'+i+'</div></div>');$('#noticebar').prepend(t);notifyBrowser(i);$(t).fadeIn().click(function(){$(this).fadeOut('fast',function(){$(this).remove()})})};-
\ No newline at end of file
+;var DEFAULT_CONTENT_ACTION='edit',OR_THEMES_EXT_DIR='modules/cms-ui/themes/';$(function(){$('html').removeClass('nojs');$('.initial-hidden').removeClass('initial-hidden');refreshAll();registerHeaderEvents();$('#workbench .view').each(function(e){registerViewEvents(this)});window.onpopstate=function(e){Navigator.navigateTo(e.state)};initActualHistoryState();Workbench.initialize();loadTree()});function initActualHistoryState(){var t={};t.name=window.document.title;var e=new URLSearchParams(window.location.search);if(e.has('action')){t.action=e.get('action');t.id=e.get('id');t.name=window.document.title;t.data={};var e=Array.from(e.entries());for(var i in e){t.data[e[i][0]]=e[i][1]};Navigator.toActualHistory(t)}};var Navigator=new function(){'use strict';this.navigateTo=function(e){Workbench.loadNewActionState(e)};this.navigateToNew=function(e){Workbench.loadNewActionState(e);window.history.pushState(e,e.name,createUrl(e.action,null,e.id,e.data,!1));var t={action:action,method:method,id:id,data:params}};this.navigateToNewAction=function(e,t,i,a){var n={action:e,method:t,id:i,data:a};this.navigateToNew(n)};this.toActualHistory=function(e){window.history.replaceState(e,e.name,createUrl(e.action,null,e.id,e.data,!1))}},Workbench=new function(){'use strict';this.initialize=function(){this.initializePingTimer()};this.initializePingTimer=function(){var e=function(){$.ajax(createUrl('title','ping',0))},t=5;window.setInterval(e,t*60*1000)};this.loadNewActionState=function(e){Workbench.loadNewAction(e.action,e.method,e.id,e.data)};this.loadNewAction=function(e,t,i,a){$('#workbench .view-loader').each(function(t){var n=$(this),o=n.data('method'),r=createUrl(e,o,i,a,!0);n.empty().fadeTo(1,0.7).addClass('loader').html('').load(r,function(e,t,i){n.fadeTo(350,1);if(t=='error'){$(n).html('');$(n).removeClass('loader');notify('error',e);return};$(n).removeClass('loader');registerViewEvents(n)})});filterMenus(e)}};function refreshAll(){refreshWorkbench();$('div#filler').click(function(){if($('div#dialog').hasClass('modal')){}
+else{$('div#dialog').html('').hide();$('div#filler').fadeOut(500)}})};function refreshAllRefreshables(){$('#workbench div.panel > div.header > ul.views > li.active').each(function(){if($(this).hasClass('static'))return;var e=$(this).data('method'),t=$(this).data('action'),i=$(this).data('id'),a=$(this).data('extra');loadView($(this).closest('div.panel').find('div.content'),t,e,i,a)})};function refreshActualView(e){$(e).closest('div.panel').find('li.active').each(function(){var e=$(this).attr('data-method'),t=$(this).attr('data-action'),i=$(this).attr('data-id');loadView($(this).closest('div.panel').find('div.content'),t,e,i)})};function refreshWorkbench(){registerWorkbenchEvents()};function registerWorkbenchEvents(){if($('#workbench div.panel.modal').length>0){$('#workbench div.panel.modal').parent().addClass('modal');$('div#filler').fadeTo(500,0.5);$('#workbench').addClass('modal')};$('div.header').dblclick(function(){fullscreen(this)})};function loadView(e,t,i,a,n){Navigator.navigateToNewAction(t,i,a,n)};function registerViewEvents(e){$(e).trigger('orViewLoaded');$(e).find('input[data-hint]').orHint();$(e).closest('div.panel').find('div.header div.dropdown div.entry.perview').remove();$(e).find('div.headermenu > a').each(function(e,t){});$(e).find('div.header > a.back').each(function(t,i){$(i).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,i,a){var n=$(e).parent();$(n).find('input[type=text]').attr('value',t);$(n).find('input[type=hidden]').attr('value',a)}})});$('div.content li.object').draggable({cursor:'move',revert:'invalid'});$('div.content li.object > div.entry[data-type=\'folder\']').droppable({accept:'li.object',hoverClass:'drophover',activeClass:'dropactive',drop:function(e,t){var i=t.draggable,a=$(this).parent();startDialog($(this).text(),$(i).attr('data-type'),'copy',$(a).attr('data-id'),{'action':$(i).attr('data-type'),'subaction':'copy','id':$(i).attr('data-id'),'targetFolderId':$(a).attr('data-id')});$(i).detach().css({top:0,left:0}).appendTo(a).click()}});$(e).find('input').change(function(){$('#editor').find('header').addClass('dirty')})};function registerHeaderEvents(){$('body').click(function(){$('.toolbar-icon.menu').parent().removeClass('open')});$('#title .toolbar-icon.menu').click(function(e){e.stopPropagation();$(this).parent().toggleClass('open')});$('#title .toolbar-icon.menu').mouseover(function(){$(this).parent().find('.toolbar-icon.menu').removeClass('open');$(this).addClass('open')});$('#title').trigger('orHeaderLoaded');$('div.search input').blur(function(){$('div.search input div.dropdown').fadeOut()});$('div.search input').orHint();$('div.search input').orSearch({dropdown:'div.search div.dropdown'})};function fullscreen(e){$(e).closest('div.panel').fadeOut('fast',function(){$(this).toggleClass('fullscreen').fadeIn('fast')})};function loadTree(){$('#navigation').html(' ');$('#navigation').orTree({type:'root',id:0,onSelect:function(e,t,i,a){openNewAction(e,t,i,a)}});$('#navigation > div.sheet.action-tree.method-tree > ul.tree > div.tree').delay(500).click();$('#navigation > div.sheet.action-tree.method-tree > ul.tree > div.tree').delay(500).click()};function submitUrl(e,t){postUrl(t,e);refreshAllRefreshables()};function postUrl(e,t){e+='&output=json';$.ajax({'type':'POST',url:e,data:{},success:function(e,i,a){$('div.panel div.status div.loader').html(' ');doResponse(e,i,t)}})};function startDialog(e,t,i,a,n){$('div#filler').fadeTo(500,0.5);$('div#dialog').html('<div class="header"><ul class="views"><li class="action active"><img class="icon" title="" src="./themes/default/images/icon/'+i+'.png" /><div class="tabname" style="width:100px;">'+e+'</div></li></ul></div><div class="content" />');$('div#dialog').data('id',a);$('div#dialog').show();loadView($('div#dialog div.content'),t,i,a,n)};function modalView(e,t){var i=$(e).closest('div.panel').find('li.active').attr('data-action'),a=$(e).closest('div.panel').find('li.active').attr('data-method'),n=$(e).closest('div.panel').find('li.active').attr('data-id');$(e).closest('div.content').modal({'overlayClose':'true','xxxonClose':function(){alert('close)')}});loadView($(e).closest('div.content'),i,a,n)};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,i,a){setTitle(e);setNewAction(t,i,a)};function filterMenus(e){$('div.clickable').addClass('active');$('div.clickable.filtered').removeClass('active').addClass('inactive');$('div.clickable.filtered.on-action-'+e).addClass('active').removeClass('inactive')};function setNewAction(e,t,i){Navigator.navigateToNewAction(e,'edit',t,i)};function setNewId(e){};function notifyBrowser(e){if(!('Notification' in window)){return}
+else if(Notification.permission==='granted'){var t=new Notification(e)}
+else if(Notification.permission!=='denied'){Notification.requestPermission(function(t){if(t==='granted'){var i=new Notification(e)}})}};function setUserStyle(e){var t=$('html'),i=t.attr('class').split(/\s+/);$.each(i,function(e,i){if(i.startsWith('theme-')){t.removeClass(i)}});t.addClass('theme-'+e.toLowerCase())};function insert(e,t,i){var a=document.forms[0].elements[e];a.focus();if(typeof document.selection!='undefined'){var r=document.selection.createRange(),n=r.text;r.text=t+n+i;r=document.selection.createRange();if(n.length==0){r.move('character',-i.length)}
+else{r.moveStart('character',t.length+n.length+i.length)};r.select()}
+else if(typeof a.selectionStart!='undefined'){var d=a.selectionStart,s=a.selectionEnd,n=a.value.substring(d,s);a.value=a.value.substr(0,d)+t+n+i+a.value.substr(s);var o;if(n.length==0){o=d+t.length}
+else{o=d+t.length+n.length+i.length};a.selectionStart=o;a.selectionEnd=o}
+else{o=a.value.length;var n=prompt('Text');a.value=a.value.substr(0,o)+t+n+i+a.value.substr(o)}};function createUrl(e,t,i,a,o){var n='./';n+='?action='+e;if(t!=null)n+='&subaction='+t;n+='&id='+i;if(o)n+='&embed=1';if(typeof a==='string'){jQuery.each(jQuery.parseJSON(a),function(e,t){if(e=='action'||e=='subaction'||e=='id')return;n=n+'&'+e+'='+t})}
+else if(typeof a==='object'){jQuery.each(a,function(e,t){if(e=='action'||e=='subaction'||e=='id')return;n=n+'&'+e+'='+t})}
+else{};return n};function resizeWorkbenchContainer(e){};function resizeWorkbench(){};function resizeTabs(e){};function help(e,t,i){var a=$(e).closest('div.panel').find('li.action.active').attr('data-action'),n=$(e).closest('div.panel').find('li.action.active').attr('data-method');window.open(t+a+'/'+n+i,'OpenRat_Help','location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes')};function notify(e,t){var i=$('<div class="notice '+e+'"><div class="text">'+t+'</div></div>');$('#noticebar').prepend(i);notifyBrowser(t);$(i).fadeIn().click(function(){$(this).fadeOut('fast',function(){$(this).remove()})})};+
\ No newline at end of file