openrat-cms

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

commit c875c66c6ef9a63e93cc164173e56c949bcba538
parent e253bd53ffc39fbe4ccfafd224a8d01d5dbafbfa
Author: Jan Dankert <develop@jandankert.de>
Date:   Sun, 27 Sep 2020 04:53:00 +0200

Refactoring: Loading the initial tree with javascript. So we could remove the 'tree'-method from the TreeAction.

Diffstat:
modules/cms/ui/action/TreeAction.class.php | 48------------------------------------------------
modules/cms/ui/themes/default/html/views/index/show.php | 2+-
modules/cms/ui/themes/default/html/views/tree/tree.tpl.src.xml | 1+
modules/cms/ui/themes/default/script/openrat.js | 24+++++++++++++++++++++---
modules/cms/ui/themes/default/script/openrat.min.js | 2+-
modules/cms/ui/themes/default/script/openrat/workbench.js | 24+++++++++++++++++++++---
6 files changed, 45 insertions(+), 56 deletions(-)

diff --git a/modules/cms/ui/action/TreeAction.class.php b/modules/cms/ui/action/TreeAction.class.php @@ -98,30 +98,6 @@ class TreeAction extends BaseAction /** - * Initialer Aufbau des Navigationsbaums. - */ - public function treeView() - { - $branch = $this->loadTreeBranch( 'root' ); - - foreach( $branch as $k=>$b ) - { - if ( !empty($b['type']) ) - $branch[$k]['children'] = $this->loadTreeBranch( $b['type'] ); - else - $branch[$k]['children'] = array(); - } - - $this->outputTreeBranch( $branch ); - - //$this->setTemplateVar( 'branch',$branch ); - - exit; // no template available. - - } - - - /** * The path to an object. */ public function pathView() @@ -281,30 +257,6 @@ class TreeAction extends BaseAction - private function outputTreeBranch($branch ) - { - $json = new JSON(); - echo '<ul class="or-navtree-list">'; - - foreach( $branch as $b ) - { - $hasChildren = isset($b['children']) && !empty($b['children']); - - $b['extraId']['type'] = $b['type']; - echo '<li class="or-navtree-node or-navtree-node--'.($hasChildren?'is-open':'is-closed').' or-draggable" data-id="'.$b['internalId'].'" data-type="'.$b['type'].'" data-extra="'.str_replace('"',"'",$json->encode($b['extraId'])).'"><div class="or-navtree-node-control"><i class="tree-icon image-icon image-icon--node-'.($hasChildren?'open':'closed').'"></i></div><div class="clickable"><a href="./#/'.$b['type'].($b['internalId']?'/'.$b['internalId']:'').'" class="entry" data-extra="'.str_replace('"',"'",$json->encode($b['extraId'])).'" data-id="'.$b['internalId'].'" data-action="'.$b['action'].'" data-type="open" title="'.$b['description'].'"><i class="image-icon image-icon--action-'.$b['icon'].'" ></i> '.$b['text'].'</a></div>'; - - if ($hasChildren) - { - $this->outputTreeBranch($b['children']); - } - - echo '</li>'; - } - - echo '</ul>'; - } - - private function pathItem( $action, $id = 0, $name = '' ) { return array('type'=>$this->typeToInternal($action),'action'=>$action ,'id'=>$id,'name'=>$name ); } diff --git a/modules/cms/ui/themes/default/html/views/index/show.php b/modules/cms/ui/themes/default/html/views/index/show.php @@ -40,7 +40,7 @@ <header> <a href=""></a> </header> - <div id="navigation" class="or-navtree view view-static" data-action="tree" data-method="tree"> + <div id="navigation" class="or-navtree view"> </div> </nav> diff --git a/modules/cms/ui/themes/default/html/views/tree/tree.tpl.src.xml b/modules/cms/ui/themes/default/html/views/tree/tree.tpl.src.xml @@ -1,4 +1,5 @@ <output xmlns="http://www.openrat.de/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openrat.de/template ../../../../../../../template_engine/components/template.xsd"> + <!-- The tree is displayed by javascript calls --> </output> \ No newline at end of file diff --git a/modules/cms/ui/themes/default/script/openrat.js b/modules/cms/ui/themes/default/script/openrat.js @@ -2126,13 +2126,12 @@ Openrat.Workbench = new function() this.reloadAll = function() { // View in geschlossenen Sektionen löschen, damit diese nicht stehen bleiben. - $('#workbench .view').empty(); - - Openrat.Workbench.loadViews( $('#workbench .view.view-loader, #workbench .view.view-static') ); + Openrat.Workbench.loadViews( $('.view-loader,.view-static').empty() ); this.loadUserStyle(); this.loadLanguage(); this.loadUISettings(); + this.loadNavigationTree(); } @@ -2151,6 +2150,25 @@ Openrat.Workbench = new function() }); } + this.loadNavigationTree = function() { + let loadBranchUrl = './?action=tree&subaction=branch&id=0&type=root'; + + $.get(loadBranchUrl).done( function (html) { + + // Den neuen Unter-Zweig erzeugen. + let $ul = $('<ul class="or-navtree-list" />'); + $ul.appendTo('.or-navtree').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(); + + // Open the first node. + $ul.find('.or-navtree-node-control').first().click(); + } ); + }; + this.settings = {}; this.language = {}; diff --git a/modules/cms/ui/themes/default/script/openrat.min.js b/modules/cms/ui/themes/default/script/openrat.min.js @@ -1179,7 +1179,7 @@ else{if(async);else Openrat.Workbench.reloadViews()}})},error:function(e,t,s){fo 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.')} -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(){$('#workbench .view').empty();Openrat.Workbench.loadViews($('#workbench .view.view-loader, #workbench .view.view-static'));this.loadUserStyle();this.loadLanguage();this.loadUISettings()};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.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{}})};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').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)})}}; ;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:'')}}; diff --git a/modules/cms/ui/themes/default/script/openrat/workbench.js b/modules/cms/ui/themes/default/script/openrat/workbench.js @@ -162,13 +162,12 @@ Openrat.Workbench = new function() this.reloadAll = function() { // View in geschlossenen Sektionen löschen, damit diese nicht stehen bleiben. - $('#workbench .view').empty(); - - Openrat.Workbench.loadViews( $('#workbench .view.view-loader, #workbench .view.view-static') ); + Openrat.Workbench.loadViews( $('.view-loader,.view-static').empty() ); this.loadUserStyle(); this.loadLanguage(); this.loadUISettings(); + this.loadNavigationTree(); } @@ -187,6 +186,25 @@ Openrat.Workbench = new function() }); } + this.loadNavigationTree = function() { + let loadBranchUrl = './?action=tree&subaction=branch&id=0&type=root'; + + $.get(loadBranchUrl).done( function (html) { + + // Den neuen Unter-Zweig erzeugen. + let $ul = $('<ul class="or-navtree-list" />'); + $ul.appendTo('.or-navtree').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(); + + // Open the first node. + $ul.find('.or-navtree-node-control').first().click(); + } ); + }; + this.settings = {}; this.language = {};