diff --git a/action.php b/action.php --- a/action.php +++ b/action.php @@ -1,163 +1,204 @@ */ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); class action_plugin_metaeditor extends DokuWiki_Action_Plugin { // Load the helper plugin public function action_plugin_metaeditor() { } // Register our hooks function register(&$controller) { $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax_call_unknown'); } function handle_ajax_call_unknown($event, $param) { if($event->data != 'plugin_metaeditor') return; $event->preventDefault(); $event->stopPropagation(); global $INPUT; - //global $auth; // FIXME: Add auth check for admin user here $action = trim($INPUT->post->str('q')); $pageid = trim($INPUT->post->str('r')); - $key = $INPUT->post->arr('k'); + $opts = $INPUT->post->arr('opts'); $data = array(); - $json = false; + $useJson = true; - switch($action) + $perm = auth_quickaclcheck($pageid); + if($perm == AUTH_ADMIN) { - case 'getMeta': - $data = $this->getMetaForPage($pageid); - $json = true; - break; - case 'getMetaValue': - $data = $this->getMetaValueForPage($pageid, $key); - break; - case 'setMetaValue': - $oldval = $key['oldval']; - $newval = $key['newval']; - $key = $key['key']; - $data = $this->setMetaValueForPage($pageid, $key, $oldval, $newval); - break; - case 'deleteMetaValue': - $json = true; - $key = $key['key']; - $data = $this->deleteMetaValueForPage($pageid, $key); - break; - + switch($action) + { + case 'getMeta': + $data = $this->getMetaForPage($pageid); + break; + case 'getMetaValue': + $useJson = false; + $data = $this->getMetaValueForPage($pageid, $opts['key']); + break; + case 'setMetaValue': + $data = $this->setMetaValueForPage($pageid, $opts['key'], $opts['oldval'], $opts['newval']); + break; + case 'deleteMetaValue': + $data = $this->deleteMetaValueForPage($pageid, $opts['key']); + break; + case 'createMetaArray': + $data = $this->createMetaArrayForPage($pageid, $opts['key'], $opts['newval']); + break; + case 'createMetaValue': + $data = $this->createMetaValueForPage($pageid, $opts['key'], $opts['newkey'], $opts['newval']); + break; + } + } + else + { + $data = array(false, "You are not an admin"); } - //$data = $_SERVER['REMOTE_USER']; - - if($json) + if($useJson) { //json library of DokuWiki require_once DOKU_INC . 'inc/JSON.php'; $json = new JSON(); //set content type header('Content-Type: application/json'); echo $json->encode($data); } else { echo $data; } } + function createMetaArrayForPage($pageid, $key, $newval) + { + $cache = false; + $meta = p_read_metadata($pageid, $cache); + $m = &$meta; + foreach($key as $k) + { + $m = &$m[$k]; + } + $m[$newval] = array(); + if(p_save_metadata($pageid, $meta)) + return array(true, "Successfully saved: $newval"); + else + return array(false, "Error saving value: $newval"); + } + + function createMetaValueForPage($pageid, $key, $newkey, $newval) + { + $cache = false; + $meta = p_read_metadata($pageid, $cache); + $m = &$meta; + foreach($key as $k) + { + $m = &$m[$k]; + } + $m[$newkey] = $newval; + if(p_save_metadata($pageid, $meta)) + return array(true, "Successfully saved: $newval"); + else + return array(false, "Error saving value: $newval"); + } + function setMetaValueForPage($pageid, $key, $oldval, $newval) { $cache = false; $meta = p_read_metadata($pageid, $cache); $m = &$meta; foreach($key as $k) $m = &$m[$k]; if($m == $oldval) { $m = $newval; if(p_save_metadata($pageid, $meta)) - return "Successfully saved: $newval"; + return array(true, "Successfully saved: $newval"); else - return "Error saving value: $newval"; + return array(false, "Error saving value: $newval"); } else { - return "Key has changed in the meantime, expected $oldval but got $m. Nothing was saved!"; + return array(false, "Key has changed in the meantime, expected $oldval but got $m. Nothing was saved!"); } } function deleteMetaValueForPage($pageid, $key) { $cache = false; $meta = p_read_metadata($pageid, $cache); $m = &$meta; for($i=0;$i $v) { $a = array(); $a['text'] = $k; if(is_array($v)) { $a['children'] = $this->parseMetaTree($v); + $a['li_attr'] = array('data-type' => 'folder'); } else - $a['icon'] = DOKU_URL."/lib/images/page.png"; + { + $a['li_attr'] = array('data-type' => 'file'); + $a['icon'] = DOKU_URL."/lib/images/page.png"; + } $out[] = $a; } return $out; } function getMetaForPage($pageid) { $cache = false; $meta = p_read_metadata($pageid, $cache); $out = $this->parseMetaTree($meta); return $out; } function getMetaValueForPage($pageid, $key) { $cache = false; $meta = p_read_metadata($pageid, $cache); foreach($key as $k) { $meta = $meta[$k]; } return $meta; } } diff --git a/admin/editor.php b/admin/editor.php --- a/admin/editor.php +++ b/admin/editor.php @@ -1,85 +1,85 @@ */ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); require_once(DOKU_PLUGIN.'admin.php'); class admin_plugin_metaeditor_editor extends DokuWiki_Admin_Plugin { /** * Constructor. Load helper plugin */ function admin_plugin_metaeditor_editor(){ } function getMenuSort() { return 501; } function forAdminOnly() { return true; } function getMenuText($language) { - return "Simple Persistent Meta Data Editor"; + return "Simple Meta Data Editor"; } function handle() { if(!is_array($_REQUEST['d']) || !checkSecurityToken()) return; } function recurseTree($ns) { global $conf; $out = ''; $list = array(); $opts = array( 'depth' => 1, 'listfiles' => true, 'listdirs' => true, 'pagesonly' => true, 'firsthead' => true, 'sneakyacl' => $conf['sneaky_index'], ); search($list,$conf['datadir'],'search_universal',$opts,$ns); foreach($list as $item) { if($item['type'] == 'f' || $item['type'] == 'd') { if($item['type'] == 'd') { $out .= '
  • '.$item['id']; $out .= ''; } else { $out .= '
  • '.$item['id']; } $out .= '
  • '; } } return $out; } function html() { echo '

    Meta Data Editor

    '; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } } // vim:ts=4:sw=4:et:enc=utf-8: diff --git a/plugin.info.txt b/plugin.info.txt --- a/plugin.info.txt +++ b/plugin.info.txt @@ -1,7 +1,7 @@ base metaeditor author Andreas Boehler email dev@aboehler.at -date 2015-04-28 +date 2015-04-29 name Meta Data Editor -desc Edit persistent metadata of a page +desc Edit metadata of pages url http://www.dokuwiki.org/plugin:metaeditor diff --git a/script.js b/script.js --- a/script.js +++ b/script.js @@ -1,188 +1,383 @@ /* DOKUWIKI:include_once jstree.js */ jQuery(function() { var selectedPageId = null; var selectedNode = null; var selectedNodePath = null; var selectedNodeValue = null; - var jqConfirmModal = null; + + jqModalManager.init(); jQuery('#event_save').click(function() { var newVal = jQuery('#event_value').val() jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_metaeditor', q: 'setMetaValue', r: selectedPageId, - k: { + opts: { key : selectedNode, oldval : selectedNodeValue, newval : newVal } }, function(data) { - alert(data); + jqModalManager.msg = data[1]; + jqModalManager.showInfoDialog(); + selectedNodeValue = newVal; } ); }); - jqConfirmModal = jQuery(document.createElement('div')) - .dialog({ - autoOpen: false, - draggable: true, - //title: LANG.plugins.signpage.signpage, - title: "Confirmation", - resizable: true, - buttons: { - Yes: function() { - jQuery.post( - DOKU_BASE + 'lib/exe/ajax.php', - jqConfirmModal.data, - function(data) { - alert(data); - } - ); - jQuery( this ).parent().hide("scale", {percentage: 0}, 750); - }, - Cancel: function() { - jQuery( this ).parent().hide("scale", {percentage: 0}, 750); - } - } - }) - .html( - '
    Really proceed with the requested action? It cannot be undone.
    ' - ) - .parent() - .attr('id','metaeditor__confirm') - .hide() - .appendTo('.dokuwiki:first'); + function refreshMetaTree() { + jQuery.post( + DOKU_BASE + 'lib/exe/ajax.php', + { + call: 'plugin_metaeditor', + q: 'getMeta', + r: selectedPageId + }, + function(data) { + jQuery('#event_path').html(''); + jQuery('#event_value').val('...'); + selectedNodePath = null; + selectedNodeValue = null; + selectedNode = null; + jQuery('#metaTree').jstree(true).settings.core.data = data; + jQuery('#metaTree').jstree(true).refresh(); + } + ); + + } + + + function customMenu(node) { + // The default set of all items + var items = { + /*renameItem: { // The "rename" menu item + label: "Rename", + action: function () { + alert('rename called'); + } + },*/ + deleteItem: { // The "delete" menu item + label: "Delete", + action: function () { + jqModalManager.data = + { + call : 'plugin_metaeditor', + q: 'deleteMetaValue', + r: selectedPageId, + opts: { + key: selectedNodePath, + oldval: selectedNodeValue + } + } + jqModalManager.msg = "Do you really want to delete the selected node?"; + jqModalManager.completeCb = function(data) { + jqModalManager.msg = data[1]; + jqModalManager.showInfoDialog(); + refreshMetaTree(); + } + jqModalManager.showConfirmDialog(); + } + }, + createFolderItem: { // The "Create folder" menu item + label: "Create Folder", + action: function (data) { + var tree = jQuery("#metaTree").jstree(true); + var nodePath = tree.get_path(node); + if(node.li_attr['data-type'] == 'file') + { + var id = tree.get_parent(node); + var parentNode = tree.get_node(id); + nodePath = tree.get_path(parentNode); + } + jqModalManager.data = + { + call : 'plugin_metaeditor', + q: 'createMetaArray', + r: selectedPageId, + opts: { + key : nodePath, + newval: null + } + } + jqModalManager.msg = "Create new folder"; + jqModalManager.completeCb = function(data) { + jqModalManager.msg = data[1]; + jqModalManager.showInfoDialog(); + refreshMetaTree(); + } + jqModalManager.createValue = false; + jqModalManager.showCreateDialog(); + } + }, + createItem: { // The "Create" menu item + label: "Create Property", + action: function () { + var tree = jQuery("#metaTree").jstree(true); + var nodePath = tree.get_path(node); + if(node.li_attr['data-type'] == 'file') + { + var id = tree.get_parent(node); + var parentNode = tree.get_node(id); + nodePath = tree.get_path(parentNode); + } + jqModalManager.data = + { + call : 'plugin_metaeditor', + q: 'createMetaValue', + r: selectedPageId, + opts: { + key : nodePath, + newkey: null, + newval: null + } + } + jqModalManager.msg = "Create new item"; + jqModalManager.completeCb = function(data) { + jqModalManager.msg = data[1]; + jqModalManager.showInfoDialog(); + refreshMetaTree(); + } + jqModalManager.createValue = true; + jqModalManager.showCreateDialog(); + } + } + }; - - - // attach event handlers - jQuery('#metaeditor__confirm .ui-dialog-titlebar-close').click(function(){ - jqConfirmModal.hide("scale", {percentage: 0}, 750); - }); + return items; + } jQuery('#metaTree').on('changed.jstree', function (e, data) { var i, j, r; if(data.selected.length != 1) return; var node = data.instance.get_node(data.selected[0]); r = data.instance.get_path(data.selected[0]); selectedNodePath = r; - if(!data.instance.is_leaf(node)) + if(node.li_attr['data-type'] == 'folder') return; + //if(!data.instance.is_leaf(node)) + // return; selectedNode = r; jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_metaeditor', q: 'getMetaValue', r: selectedPageId, - k: r + opts: { + key: r + } }, function(data) { jQuery('#event_path').html(selectedNode.join(':')); jQuery('#event_value').val(data); selectedNodeValue = data; } ); }) - .on('delete_node.jstree', function (e, data) { - - jQuery.post( - DOKU_BASE + 'lib/exe/ajax.php', - { - call : 'plugin_metaeditor', - q: 'deleteMetaValue', - r: selectedPageId, - k: { - key: selectedNodePath, - oldval: selectedNodeValue - }, - }, - function(data) { - alert(data[1]); - if(!data[0]) - { - jQuery.post( - DOKU_BASE + 'lib/exe/ajax.php', - { - call: 'plugin_metaeditor', - q: 'getMeta', - r: selectedPageId - }, - function(data) { - jQuery('#metaTree').jstree(true).settings.core.data = data; - jQuery('#metaTree').jstree(true).refresh(); - } - ); - } - } - ); - }) - .on('create_node.jstree', function (e, data) { - alert('Create Node CB'); - }) - .on('rename_node.jstree', function (e, data) { - alert('Rename Node CB'); - }) - .on('move_node.jstree', function (e, data) { - alert('Move Node CB'); - }) - .on('copy_node.jstree', function (e, data) { - alert('Copy node CB'); - }) // create the instance .jstree({ core : { multiple: false, - check_callback: function (op, node, par, pos, more) { - if(op === "delete_node") { return confirm("Are you sure you want to delete?"); } - } }, - plugins: ["wholerow", "contextmenu"] + plugins: ["wholerow", "contextmenu"], + contextmenu: { items: customMenu } }); jQuery('#fileTree').on('changed.jstree', function (e, data) { var i, j, r; if(data.selected.length != 1) return; var node = data.instance.get_node(data.selected[0]); if(!data.instance.is_leaf(node)) return; r = node.text; selectedPageId = r; jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_metaeditor', q: 'getMeta', r: r }, function(data) { jQuery('#metaTree').jstree(true).settings.core.data = data; jQuery('#metaTree').jstree(true).refresh(); } ); }) // create the instance .jstree({ core : { multiple: false }, plugins: ["wholerow"] }); }); +var jqModalManager = { + jqConfirmModal : null, + jqCreateModal : null, + jqInfoModal : null, + completeCb : null, + data : null, + msg : null, + createValue: false, + + + init : function() + { + + }, + + showCreateDialog : function() { + jqModalManager.jqCreateModal = jQuery(document.createElement('div')) + .dialog({ + autoOpen: false, + draggable: true, + title: "Create", + resizable: true, + buttons: { + Create: function() { + if(jqModalManager.createValue) + { + jqModalManager.data.opts.newkey = jQuery("#metaeditor__createInput").val(); + jqModalManager.data.opts.newval = jQuery("#metaeditor__createValue").val(); + } + else + { + jqModalManager.data.opts.newval = jQuery("#metaeditor__createInput").val(); + } + jQuery.post( + DOKU_BASE + 'lib/exe/ajax.php', + jqModalManager.data, + function(data) { + jqModalManager.completeCb(data); + } + ); + jqModalManager.hideCreateDialog(); + }, + Cancel: function() { + jqModalManager.hideCreateDialog(); + } + } + }) + .html( + '
    ' + jqModalManager.msg + '
    ' + + '
    Name
    ' + + (jqModalManager.createValue ? '
    Value
    ' : '') + ) + .parent() + .attr('id','metaeditor__create') + .show() + .appendTo('.dokuwiki:first'); + + jQuery('#metaeditor__createInput').focus(); + + // attach event handlers + jQuery('#metaeditor__create .ui-dialog-titlebar-close').click(function(){ + jqModalManager.hideCreateDialog(); + }); + + + }, + + showInfoDialog : function() { + jqModalManager.jqInfoModal = jQuery(document.createElement('div')) + .dialog({ + autoOpen: false, + draggable: true, + title: "Info", + resizable: true, + buttons: { + OK: function() { + jqModalManager.hideInfoDialog(); + } + } + }) + .html( + '
    ' + jqModalManager.msg + '
    ' + ) + .parent() + .attr('id','metaeditor__info') + .show() + .appendTo('.dokuwiki:first'); + + // attach event handlers + jQuery('#metaeditor__info .ui-dialog-titlebar-close').click(function(){ + jqModalManager.hideInfoDialog(); + }); + }, + + showConfirmDialog : function() { + jqModalManager.jqConfirmModal = jQuery(document.createElement('div')) + .dialog({ + autoOpen: false, + draggable: true, + title: "Confirmation", + resizable: true, + buttons: { + Yes: function() { + jQuery.post( + DOKU_BASE + 'lib/exe/ajax.php', + jqModalManager.data, + function(data) { + jqModalManager.completeCb(data); + } + ); + jqModalManager.hideConfirmDialog(); + }, + Cancel: function() { + jqModalManager.hideConfirmDialog(); + } + } + }) + .html( + '
    ' + jqModalManager.msg + '
    ' + ) + .parent() + .attr('id','metaeditor__confirm') + .show() + .appendTo('.dokuwiki:first'); + + // attach event handlers + jQuery('#metaeditor__confirm .ui-dialog-titlebar-close').click(function(){ + jqModalManager.hideConfirmDialog(); + }); + }, + + hideConfirmDialog : function() { + jqModalManager.jqConfirmModal.empty(); + jqModalManager.jqConfirmModal.remove(); + jqModalManager.jqConfirmModal = null; + }, + + hideCreateDialog : function() { + jqModalManager.jqCreateModal.empty(); + jqModalManager.jqCreateModal.remove(); + jqModalManager.jqCreateModal = null; + }, + + hideInfoDialog : function() { + jqModalManager.jqInfoModal.empty(); + jqModalManager.jqInfoModal.remove(); + jqModalManager.jqInfoModal = null; + } + + +} + diff --git a/style.css b/style.css --- a/style.css +++ b/style.css @@ -1,1031 +1,1043 @@ +#metaeditor__confirm, +#metaeditor__info, +#metaeditor__create { + position: absolute; + top: 50%; + left: 50%; + width: 300px; + margin-left:-130px; + margin-right: 0px; +} + + /* jsTree default theme */ .jstree-node, .jstree-children, .jstree-container-ul { display: block; margin: 0; padding: 0; list-style-type: none; list-style-image: none; } .jstree-node { white-space: nowrap; } .jstree-anchor { display: inline-block; color: black; white-space: nowrap; padding: 0 4px 0 1px; margin: 0; vertical-align: top; } .jstree-anchor:focus { outline: 0; } .jstree-anchor, .jstree-anchor:link, .jstree-anchor:visited, .jstree-anchor:hover, .jstree-anchor:active { text-decoration: none; color: inherit; } .jstree-icon { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-icon:empty { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-ocl { cursor: pointer; } .jstree-leaf > .jstree-ocl { cursor: default; } .jstree .jstree-open > .jstree-children { display: block; } .jstree .jstree-closed > .jstree-children, .jstree .jstree-leaf > .jstree-children { display: none; } .jstree-anchor > .jstree-themeicon { margin-right: 2px; } .jstree-no-icons .jstree-themeicon, .jstree-anchor > .jstree-themeicon-hidden { display: none; } .jstree-rtl .jstree-anchor { padding: 0 1px 0 4px; } .jstree-rtl .jstree-anchor > .jstree-themeicon { margin-left: 2px; margin-right: 0; } .jstree-rtl .jstree-node { margin-left: 0; } .jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-wholerow-ul { position: relative; display: inline-block; min-width: 100%; } .jstree-wholerow-ul .jstree-leaf > .jstree-ocl { cursor: pointer; } .jstree-wholerow-ul .jstree-anchor, .jstree-wholerow-ul .jstree-icon { position: relative; } .jstree-wholerow-ul .jstree-wholerow { width: 100%; cursor: pointer; position: absolute; left: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .vakata-context { display: none; } .vakata-context, .vakata-context ul { margin: 0; padding: 2px; position: absolute; background: #f5f5f5; border: 1px solid #979797; box-shadow: 2px 2px 2px #999999; } .vakata-context ul { list-style: none; left: 100%; margin-top: -2.7em; margin-left: -4px; } .vakata-context .vakata-context-right ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context li { list-style: none; display: inline; } .vakata-context li > a { display: block; padding: 0 2em 0 2em; text-decoration: none; width: auto; color: black; white-space: nowrap; line-height: 2.4em; text-shadow: 1px 1px 0 white; border-radius: 1px; } .vakata-context li > a:hover { position: relative; background-color: #e8eff7; box-shadow: 0 0 2px #0a6aa1; } .vakata-context li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); background-position: right center; background-repeat: no-repeat; } .vakata-context li > a:focus { outline: 0; } .vakata-context .vakata-context-hover > a { position: relative; background-color: #e8eff7; box-shadow: 0 0 2px #0a6aa1; } .vakata-context .vakata-context-separator > a, .vakata-context .vakata-context-separator > a:hover { background: white; border: 0; border-top: 1px solid #e2e3e3; height: 1px; min-height: 1px; max-height: 1px; padding: 0; margin: 0 0 0 2.4em; border-left: 1px solid #e0e0e0; text-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; border-radius: 0; } .vakata-context .vakata-contextmenu-disabled a, .vakata-context .vakata-contextmenu-disabled a:hover { color: silver; background-color: transparent; border: 0; box-shadow: 0 0 0; } .vakata-context li > a > i { text-decoration: none; display: inline-block; width: 2.4em; height: 2.4em; background: transparent; margin: 0 0 0 -2em; vertical-align: top; text-align: center; line-height: 2.4em; } .vakata-context li > a > i:empty { width: 2.4em; line-height: 2.4em; } .vakata-context li > a .vakata-contextmenu-sep { display: inline-block; width: 1px; height: 2.4em; background: white; margin: 0 0.5em 0 0; border-left: 1px solid #e2e3e3; } .vakata-context .vakata-contextmenu-shortcut { font-size: 0.8em; color: silver; opacity: 0.5; display: none; } .vakata-context-rtl ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context-rtl li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); background-position: left center; background-repeat: no-repeat; } .vakata-context-rtl .vakata-context-separator > a { margin: 0 2.4em 0 0; border-left: 0; border-right: 1px solid #e2e3e3; } .vakata-context-rtl .vakata-context-left ul { right: auto; left: 100%; margin-left: -4px; margin-right: auto; } .vakata-context-rtl li > a > i { margin: 0 -2em 0 0; } .vakata-context-rtl li > a .vakata-contextmenu-sep { margin: 0 0 0 0.5em; border-left-color: white; background: #e2e3e3; } #jstree-marker { position: absolute; top: 0; left: 0; margin: -5px 0 0 0; padding: 0; border-right: 0; border-top: 5px solid transparent; border-bottom: 5px solid transparent; border-left: 5px solid; width: 0; height: 0; font-size: 0; line-height: 0; } #jstree-dnd { line-height: 16px; margin: 0; padding: 4px; } #jstree-dnd .jstree-icon, #jstree-dnd .jstree-copy { display: inline-block; text-decoration: none; margin: 0 2px 0 0; padding: 0; width: 16px; height: 16px; } #jstree-dnd .jstree-ok { background: green; } #jstree-dnd .jstree-er { background: red; } #jstree-dnd .jstree-copy { margin: 0 2px 0 2px; } .jstree-default .jstree-node, .jstree-default .jstree-icon { background-repeat: no-repeat; background-color: transparent; } .jstree-default .jstree-anchor, .jstree-default .jstree-wholerow { transition: background-color 0.15s, box-shadow 0.15s; } .jstree-default .jstree-hovered { background: #e7f4f9; border-radius: 2px; box-shadow: inset 0 0 1px #cccccc; } .jstree-default .jstree-clicked { background: #beebff; border-radius: 2px; box-shadow: inset 0 0 1px #999999; } .jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { display: none; } .jstree-default .jstree-disabled { background: transparent; color: #666666; } .jstree-default .jstree-disabled.jstree-hovered { background: transparent; box-shadow: none; } .jstree-default .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default .jstree-disabled > .jstree-icon { opacity: 0.8; filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } .jstree-default .jstree-search { font-style: italic; color: #8b0000; font-weight: bold; } .jstree-default .jstree-no-checkboxes .jstree-checkbox { display: none !important; } .jstree-default.jstree-checkbox-no-clicked .jstree-clicked { background: transparent; box-shadow: none; } .jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { background: #e7f4f9; } .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { background: transparent; } .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default > .jstree-striped { min-width: 100%; display: inline-block; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; } .jstree-default > .jstree-wholerow-ul .jstree-hovered, .jstree-default > .jstree-wholerow-ul .jstree-clicked { background: transparent; box-shadow: none; border-radius: 0; } .jstree-default .jstree-wholerow { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } .jstree-default .jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default .jstree-wholerow-clicked { background: #beebff; background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); } .jstree-default .jstree-node { min-height: 24px; line-height: 24px; margin-left: 24px; min-width: 24px; } .jstree-default .jstree-anchor { line-height: 24px; height: 24px; } .jstree-default .jstree-icon { width: 24px; height: 24px; line-height: 24px; } .jstree-default .jstree-icon:empty { width: 24px; height: 24px; line-height: 24px; } .jstree-default.jstree-rtl .jstree-node { margin-right: 24px; } .jstree-default .jstree-wholerow { height: 24px; } .jstree-default .jstree-node, .jstree-default .jstree-icon { background-image: url("img/32px.png"); } .jstree-default .jstree-node { background-position: -292px -4px; background-repeat: repeat-y; } .jstree-default .jstree-last { background: transparent; } .jstree-default .jstree-open > .jstree-ocl { background-position: -132px -4px; } .jstree-default .jstree-closed > .jstree-ocl { background-position: -100px -4px; } .jstree-default .jstree-leaf > .jstree-ocl { background-position: -68px -4px; } .jstree-default .jstree-themeicon { background-position: -260px -4px; } .jstree-default > .jstree-no-dots .jstree-node, .jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -36px -4px; } .jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -4px -4px; } .jstree-default .jstree-disabled { background: transparent; } .jstree-default .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default .jstree-checkbox { background-position: -164px -4px; } .jstree-default .jstree-checkbox:hover { background-position: -164px -36px; } .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default .jstree-checked > .jstree-checkbox { background-position: -228px -4px; } .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default .jstree-checked > .jstree-checkbox:hover { background-position: -228px -36px; } .jstree-default .jstree-anchor > .jstree-undetermined { background-position: -196px -4px; } .jstree-default .jstree-anchor > .jstree-undetermined:hover { background-position: -196px -36px; } .jstree-default > .jstree-striped { background-size: auto 48px; } .jstree-default.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default.jstree-rtl .jstree-last { background: transparent; } .jstree-default.jstree-rtl .jstree-open > .jstree-ocl { background-position: -132px -36px; } .jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -100px -36px; } .jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -68px -36px; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -36px -36px; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -4px -36px; } .jstree-default .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("img/throbber.gif") center center no-repeat; } .jstree-default .jstree-file { background: url("img/32px.png") -100px -68px no-repeat; } .jstree-default .jstree-folder { background: url("img/32px.png") -260px -4px no-repeat; } .jstree-default > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default { line-height: 24px; padding: 0 4px; } #jstree-dnd.jstree-default .jstree-ok, #jstree-dnd.jstree-default .jstree-er { background-image: url("img/32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default i { background: transparent; width: 24px; height: 24px; line-height: 24px; } #jstree-dnd.jstree-default .jstree-ok { background-position: -4px -68px; } #jstree-dnd.jstree-default .jstree-er { background-position: -36px -68px; } .jstree-default.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); } .jstree-default.jstree-rtl .jstree-last { background: transparent; } .jstree-default-small .jstree-node { min-height: 18px; line-height: 18px; margin-left: 18px; min-width: 18px; } .jstree-default-small .jstree-anchor { line-height: 18px; height: 18px; } .jstree-default-small .jstree-icon { width: 18px; height: 18px; line-height: 18px; } .jstree-default-small .jstree-icon:empty { width: 18px; height: 18px; line-height: 18px; } .jstree-default-small.jstree-rtl .jstree-node { margin-right: 18px; } .jstree-default-small .jstree-wholerow { height: 18px; } .jstree-default-small .jstree-node, .jstree-default-small .jstree-icon { background-image: url("img/32px.png"); } .jstree-default-small .jstree-node { background-position: -295px -7px; background-repeat: repeat-y; } .jstree-default-small .jstree-last { background: transparent; } .jstree-default-small .jstree-open > .jstree-ocl { background-position: -135px -7px; } .jstree-default-small .jstree-closed > .jstree-ocl { background-position: -103px -7px; } .jstree-default-small .jstree-leaf > .jstree-ocl { background-position: -71px -7px; } .jstree-default-small .jstree-themeicon { background-position: -263px -7px; } .jstree-default-small > .jstree-no-dots .jstree-node, .jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -7px; } .jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -7px; } .jstree-default-small .jstree-disabled { background: transparent; } .jstree-default-small .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default-small .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default-small .jstree-checkbox { background-position: -167px -7px; } .jstree-default-small .jstree-checkbox:hover { background-position: -167px -39px; } .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-small .jstree-checked > .jstree-checkbox { background-position: -231px -7px; } .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-small .jstree-checked > .jstree-checkbox:hover { background-position: -231px -39px; } .jstree-default-small .jstree-anchor > .jstree-undetermined { background-position: -199px -7px; } .jstree-default-small .jstree-anchor > .jstree-undetermined:hover { background-position: -199px -39px; } .jstree-default-small > .jstree-striped { background-size: auto 36px; } .jstree-default-small.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default-small.jstree-rtl .jstree-last { background: transparent; } .jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { background-position: -135px -39px; } .jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -103px -39px; } .jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -71px -39px; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -39px; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -39px; } .jstree-default-small .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("img/throbber.gif") center center no-repeat; } .jstree-default-small .jstree-file { background: url("img/32px.png") -103px -71px no-repeat; } .jstree-default-small .jstree-folder { background: url("img/32px.png") -263px -7px no-repeat; } .jstree-default-small > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default-small { line-height: 18px; padding: 0 4px; } #jstree-dnd.jstree-default-small .jstree-ok, #jstree-dnd.jstree-default-small .jstree-er { background-image: url("img/32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default-small i { background: transparent; width: 18px; height: 18px; line-height: 18px; } #jstree-dnd.jstree-default-small .jstree-ok { background-position: -7px -71px; } #jstree-dnd.jstree-default-small .jstree-er { background-position: -39px -71px; } .jstree-default-small.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); } .jstree-default-small.jstree-rtl .jstree-last { background: transparent; } .jstree-default-large .jstree-node { min-height: 32px; line-height: 32px; margin-left: 32px; min-width: 32px; } .jstree-default-large .jstree-anchor { line-height: 32px; height: 32px; } .jstree-default-large .jstree-icon { width: 32px; height: 32px; line-height: 32px; } .jstree-default-large .jstree-icon:empty { width: 32px; height: 32px; line-height: 32px; } .jstree-default-large.jstree-rtl .jstree-node { margin-right: 32px; } .jstree-default-large .jstree-wholerow { height: 32px; } .jstree-default-large .jstree-node, .jstree-default-large .jstree-icon { background-image: url("img/32px.png"); } .jstree-default-large .jstree-node { background-position: -288px 0px; background-repeat: repeat-y; } .jstree-default-large .jstree-last { background: transparent; } .jstree-default-large .jstree-open > .jstree-ocl { background-position: -128px 0px; } .jstree-default-large .jstree-closed > .jstree-ocl { background-position: -96px 0px; } .jstree-default-large .jstree-leaf > .jstree-ocl { background-position: -64px 0px; } .jstree-default-large .jstree-themeicon { background-position: -256px 0px; } .jstree-default-large > .jstree-no-dots .jstree-node, .jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px 0px; } .jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px 0px; } .jstree-default-large .jstree-disabled { background: transparent; } .jstree-default-large .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default-large .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default-large .jstree-checkbox { background-position: -160px 0px; } .jstree-default-large .jstree-checkbox:hover { background-position: -160px -32px; } .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-large .jstree-checked > .jstree-checkbox { background-position: -224px 0px; } .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-large .jstree-checked > .jstree-checkbox:hover { background-position: -224px -32px; } .jstree-default-large .jstree-anchor > .jstree-undetermined { background-position: -192px 0px; } .jstree-default-large .jstree-anchor > .jstree-undetermined:hover { background-position: -192px -32px; } .jstree-default-large > .jstree-striped { background-size: auto 64px; } .jstree-default-large.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default-large.jstree-rtl .jstree-last { background: transparent; } .jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { background-position: -128px -32px; } .jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -96px -32px; } .jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -64px -32px; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px -32px; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px -32px; } .jstree-default-large .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("img/throbber.gif") center center no-repeat; } .jstree-default-large .jstree-file { background: url("img/32px.png") -96px -64px no-repeat; } .jstree-default-large .jstree-folder { background: url("img/32px.png") -256px 0px no-repeat; } .jstree-default-large > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default-large { line-height: 32px; padding: 0 4px; } #jstree-dnd.jstree-default-large .jstree-ok, #jstree-dnd.jstree-default-large .jstree-er { background-image: url("img/32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default-large i { background: transparent; width: 32px; height: 32px; line-height: 32px; } #jstree-dnd.jstree-default-large .jstree-ok { background-position: 0px -64px; } #jstree-dnd.jstree-default-large .jstree-er { background-position: -32px -64px; } .jstree-default-large.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); } .jstree-default-large.jstree-rtl .jstree-last { background: transparent; } @media (max-width: 768px) { #jstree-dnd.jstree-dnd-responsive { line-height: 40px; font-weight: bold; font-size: 1.1em; text-shadow: 1px 1px white; } #jstree-dnd.jstree-dnd-responsive > i { background: transparent; width: 40px; height: 40px; } #jstree-dnd.jstree-dnd-responsive > .jstree-ok { background-image: url("img/40px.png"); background-position: 0 -200px; background-size: 120px 240px; } #jstree-dnd.jstree-dnd-responsive > .jstree-er { background-image: url("img/40px.png"); background-position: -40px -200px; background-size: 120px 240px; } #jstree-marker.jstree-dnd-responsive { border-left-width: 10px; border-top-width: 10px; border-bottom-width: 10px; margin-top: -10px; } } @media (max-width: 768px) { .jstree-default-responsive { /* .jstree-open > .jstree-ocl, .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } */ } .jstree-default-responsive .jstree-icon { background-image: url("img/40px.png"); } .jstree-default-responsive .jstree-node, .jstree-default-responsive .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-responsive .jstree-node { min-height: 40px; line-height: 40px; margin-left: 40px; min-width: 40px; white-space: nowrap; } .jstree-default-responsive .jstree-anchor { line-height: 40px; height: 40px; } .jstree-default-responsive .jstree-icon, .jstree-default-responsive .jstree-icon:empty { width: 40px; height: 40px; line-height: 40px; } .jstree-default-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; } .jstree-default-responsive.jstree-rtl .jstree-node { margin-left: 0; margin-right: 40px; } .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-default-responsive .jstree-ocl, .jstree-default-responsive .jstree-themeicon, .jstree-default-responsive .jstree-checkbox { background-size: 120px 240px; } .jstree-default-responsive .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-responsive .jstree-open > .jstree-ocl { background-position: 0 0px !important; } .jstree-default-responsive .jstree-closed > .jstree-ocl { background-position: 0 -40px !important; } .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -40px 0px !important; } .jstree-default-responsive .jstree-themeicon { background-position: -40px -40px; } .jstree-default-responsive .jstree-checkbox, .jstree-default-responsive .jstree-checkbox:hover { background-position: -40px -80px; } .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-responsive .jstree-checked > .jstree-checkbox, .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { background-position: 0 -80px; } .jstree-default-responsive .jstree-anchor > .jstree-undetermined, .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { background-position: 0 -120px; } .jstree-default-responsive .jstree-anchor { font-weight: bold; font-size: 1.1em; text-shadow: 1px 1px white; } .jstree-default-responsive > .jstree-striped { background: transparent; } .jstree-default-responsive .jstree-wholerow { border-top: 1px solid rgba(255, 255, 255, 0.7); border-bottom: 1px solid rgba(64, 64, 64, 0.2); background: #ebebeb; height: 40px; } .jstree-default-responsive .jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default-responsive .jstree-wholerow-clicked { background: #beebff; } .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { box-shadow: inset 0 -6px 3px -5px #666666; } .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { box-shadow: inset 0 6px 3px -5px #666666; border-top: 0; } .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { box-shadow: none; } .jstree-default-responsive .jstree-node, .jstree-default-responsive .jstree-icon, .jstree-default-responsive .jstree-node > .jstree-ocl, .jstree-default-responsive .jstree-themeicon, .jstree-default-responsive .jstree-checkbox { background-image: url("img/40px.png"); background-size: 120px 240px; } .jstree-default-responsive .jstree-node { background-position: -80px 0; background-repeat: repeat-y; } .jstree-default-responsive .jstree-last { background: transparent; } .jstree-default-responsive .jstree-leaf > .jstree-ocl { background-position: -40px -120px; } .jstree-default-responsive .jstree-last > .jstree-ocl { background-position: -40px -160px; } .jstree-default-responsive .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-responsive .jstree-file { background: url("img/40px.png") 0 -160px no-repeat; background-size: 120px 240px; } .jstree-default-responsive .jstree-folder { background: url("img/40px.png") -40px -40px no-repeat; background-size: 120px 240px; } .jstree-default-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } }
    PageMeta DataValue
    '; echo '
      '.$this->recurseTree('/').'
    '; echo '

    '; echo '
    '; echo ''; echo '