From e7ca8ad9005484436f009c8450f997e07003a084 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Fri, 1 Sep 2017 15:58:39 +0300 Subject: [PATCH 001/577] start new 1.4 version) --- manager/includes/version.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/version.inc.php b/manager/includes/version.inc.php index f3f678117e..8d0e8d5279 100755 --- a/manager/includes/version.inc.php +++ b/manager/includes/version.inc.php @@ -1,5 +1,5 @@ Date: Fri, 1 Sep 2017 16:51:48 +0300 Subject: [PATCH 002/577] deleted frames/menu.php --- manager/frames/menu.php | 272 ---------------------------------------- 1 file changed, 272 deletions(-) delete mode 100644 manager/frames/menu.php diff --git a/manager/frames/menu.php b/manager/frames/menu.php deleted file mode 100644 index b0d6ba8cc3..0000000000 --- a/manager/frames/menu.php +++ /dev/null @@ -1,272 +0,0 @@ -INCLUDE_ORDERING_ERROR

Please use the MODX Content Manager instead of accessing this file directly."); -} -if(!array_key_exists('mail_check_timeperiod', $modx->config) || !is_numeric($modx->config['mail_check_timeperiod'])) { - $modx->config['mail_check_timeperiod'] = 5; -} -$modx_textdir = isset($modx_textdir) ? $modx_textdir : null; -$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; -?> - -> - - - nav - - - - - - - - -invokeEvent('OnManagerTopPrerender', $_REQUEST); -if(is_array($evtOut)) { - echo implode("\n", $evtOut); -} -?> -
>
-
-
- -
- - -
- -
- ' . $modx->getLoginUserName() . '' . ($modx->hasPermission('change_password') ? ' ' . $_lang['change_password'] . '' . "\n" : "\n") - ?> - - config['settings_version'] != $modx->getVersionData('version') ? 'style="color:#ffff8a;"' : ''; ?> - hasPermission('help')) { - echo sprintf('%s ', $site_name, $modx->getVersionData('full_appname'), $style, $modx->config['settings_version']); - } else { - echo sprintf('%s ', $site_name, $modx->getVersionData('full_appname'), $style, $modx->config['settings_version']); - } - ?> -
- -
-
-
-
- - -
-
-
- - -
- - - - From f13fe371c145fed8f357ccc53df94404a9941466 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 16:54:58 +0300 Subject: [PATCH 003/577] fix assigments parent.tree.ca remove setLastClickedElement --- manager/actions/mutate_content.dynamic.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/manager/actions/mutate_content.dynamic.php b/manager/actions/mutate_content.dynamic.php index 2bb87ebcfe..304f27148a 100644 --- a/manager/actions/mutate_content.dynamic.php +++ b/manager/actions/mutate_content.dynamic.php @@ -197,13 +197,14 @@ function changestate(el) { var allowLinkSelection = false; function enableLinkSelection(b) { - parent.tree.ca = "link"; var llock = document.getElementById('llock'); if(b) { + parent.tree.ca = "link"; llock.className = ""; allowLinkSelection = true; } else { + parent.tree.ca = "open"; llock.className = ""; allowLinkSelection = false; } @@ -220,13 +221,14 @@ function setLink(lId) { } function enableParentSelection(b) { - parent.tree.ca = "parent"; var plock = document.getElementById('plock'); if(b) { + parent.tree.ca = "parent"; plock.className = ""; allowParentSelection = true; } else { + parent.tree.ca = "open"; plock.className = ""; allowParentSelection = false; } @@ -476,10 +478,6 @@ function decode(s) { return s; } - function setLastClickedElement(type, id) { - localStorage.setItem('MODX_lastClickedElement', '[' + type + ',' + id + ']'); - } - manager->action == '72') { // Web Link specific ?> var lastImageCtrl; var lastFileCtrl; @@ -626,7 +624,7 @@ function SetUrl(url, width, height, alt) {
From 57ea58d1a48705427c7876040034ce9231d25617 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 16:58:25 +0300 Subject: [PATCH 004/577] changed headers pages H1 --- manager/actions/move_document.dynamic.php | 14 ++++++++------ manager/actions/mutate_htmlsnippet.dynamic.php | 2 +- manager/actions/mutate_menuindex_sort.dynamic.php | 2 +- manager/actions/mutate_module.dynamic.php | 2 +- .../actions/mutate_module_resources.dynamic.php | 2 +- manager/actions/mutate_plugin.dynamic.php | 2 +- manager/actions/mutate_role.dynamic.php | 4 +++- manager/actions/mutate_snippet.dynamic.php | 2 +- manager/actions/mutate_templates.dynamic.php | 2 +- manager/actions/mutate_tmplvars.dynamic.php | 2 +- manager/actions/mutate_user.dynamic.php | 5 ++++- manager/actions/mutate_web_user.dynamic.php | 5 ++++- 12 files changed, 27 insertions(+), 17 deletions(-) diff --git a/manager/actions/move_document.dynamic.php b/manager/actions/move_document.dynamic.php index 1caf165976..d65854afba 100644 --- a/manager/actions/move_document.dynamic.php +++ b/manager/actions/move_document.dynamic.php @@ -35,15 +35,17 @@ var actions = { save: function() { document.newdocumentparent.submit(); - }, cancel: function() { + }, + cancel: function() { documentDirty = false; - }, + } }; function setMoveValue(pId, pName) { - if (pId == 0 || checkParentChildRelation(pId, pName)) { + if (pId === 0 || checkParentChildRelation(pId, pName)) { + documentDirty = true; document.newdocumentparent.new_parent.value = pId; document.getElementById('parentName').innerHTML = ': ' + pId + ' (' + pName + ')'; } @@ -59,13 +61,13 @@ function checkParentChildRelation(pId, pName) if (!pn) { return; } - if (pn.id.substr(4) == id) { + if (pn.id.substr(4) === id) { alert(''); return; } else { while (pn.p > 0) { pn = (tdoc.getElementById) ? tdoc.getElementById('node' + pn.p) : tdoc.all['node' + pn.p]; - if (pn.id.substr(4) == id) { + if (pn.id.substr(4) === id) { alert(''); return; } @@ -77,7 +79,7 @@ function checkParentChildRelation(pId, pName)

- + (' . $id . ')' : $_lang['move_resource_title']) ?>

diff --git a/manager/actions/mutate_htmlsnippet.dynamic.php b/manager/actions/mutate_htmlsnippet.dynamic.php index a983d11a2a..b0cd4ba057 100644 --- a/manager/actions/mutate_htmlsnippet.dynamic.php +++ b/manager/actions/mutate_htmlsnippet.dynamic.php @@ -136,7 +136,7 @@ function changeRTE()

- + (' . $content['id'] . ')' : $_lang['new_htmlsnippet']) ?>

diff --git a/manager/actions/mutate_menuindex_sort.dynamic.php b/manager/actions/mutate_menuindex_sort.dynamic.php index fed6a80053..1ffbfda0ac 100644 --- a/manager/actions/mutate_menuindex_sort.dynamic.php +++ b/manager/actions/mutate_menuindex_sort.dynamic.php @@ -140,7 +140,7 @@ function resetSortOrder()

- + (' . $id . ')' : $_lang['sort_menuindex']) ?>

diff --git a/manager/actions/mutate_module.dynamic.php b/manager/actions/mutate_module.dynamic.php index 27060f84f2..adea2f1e83 100644 --- a/manager/actions/mutate_module.dynamic.php +++ b/manager/actions/mutate_module.dynamic.php @@ -449,7 +449,7 @@ function SetUrl(url, width, height, alt) {

- + (' . $content['id'] . ')' : $_lang['new_module']) ?>

diff --git a/manager/actions/mutate_module_resources.dynamic.php b/manager/actions/mutate_module_resources.dynamic.php index 280fb16bbf..75ffbdfc2f 100644 --- a/manager/actions/mutate_module_resources.dynamic.php +++ b/manager/actions/mutate_module_resources.dynamic.php @@ -188,7 +188,7 @@ function openSelector(resource, mode, callback, w, h) {

- + (' . $content['id'] . ')' : $_lang['module_resource_title']) ?>

diff --git a/manager/actions/mutate_plugin.dynamic.php b/manager/actions/mutate_plugin.dynamic.php index 7f984c609e..c7ccb56c61 100644 --- a/manager/actions/mutate_plugin.dynamic.php +++ b/manager/actions/mutate_plugin.dynamic.php @@ -478,7 +478,7 @@ function contains(a, obj)

- + (' . $content['id'] . ')' : $_lang['new_plugin']) ?>

diff --git a/manager/actions/mutate_role.dynamic.php b/manager/actions/mutate_role.dynamic.php index f6b3fa31a6..0595fab81a 100644 --- a/manager/actions/mutate_role.dynamic.php +++ b/manager/actions/mutate_role.dynamic.php @@ -81,7 +81,9 @@ function changestate(element) { -

+

+ (' . $roledata['id'] . ')' : $_lang['role_title']) ?> +

diff --git a/manager/actions/mutate_snippet.dynamic.php b/manager/actions/mutate_snippet.dynamic.php index a2a216a150..0ec8a8ae45 100644 --- a/manager/actions/mutate_snippet.dynamic.php +++ b/manager/actions/mutate_snippet.dynamic.php @@ -431,7 +431,7 @@ function contains(a, obj)

- + (' . $content['id'] . ')' : $_lang['new_snippet']) ?>

diff --git a/manager/actions/mutate_templates.dynamic.php b/manager/actions/mutate_templates.dynamic.php index 632c3c64b7..3db63f5441 100644 --- a/manager/actions/mutate_templates.dynamic.php +++ b/manager/actions/mutate_templates.dynamic.php @@ -109,7 +109,7 @@

- + (' . $content['id'] . ')' : $_lang['new_template']) ?>

diff --git a/manager/actions/mutate_tmplvars.dynamic.php b/manager/actions/mutate_tmplvars.dynamic.php index f370c36201..6f86a96755 100644 --- a/manager/actions/mutate_tmplvars.dynamic.php +++ b/manager/actions/mutate_tmplvars.dynamic.php @@ -291,7 +291,7 @@ function decode(s) {

- + (' . $content['id'] . ')' : $_lang['new_tmplvars']) ?>

diff --git a/manager/actions/mutate_user.dynamic.php b/manager/actions/mutate_user.dynamic.php index d17f5d609f..839105e376 100644 --- a/manager/actions/mutate_user.dynamic.php +++ b/manager/actions/mutate_user.dynamic.php @@ -208,7 +208,10 @@ function showHide(what, onoff) { " /> -

+ +

+ (' . $usernamedata['id'] . ')' : $_lang['user_title']) ?> +

diff --git a/manager/actions/mutate_web_user.dynamic.php b/manager/actions/mutate_web_user.dynamic.php index ed306a3be1..1f5addadda 100644 --- a/manager/actions/mutate_web_user.dynamic.php +++ b/manager/actions/mutate_web_user.dynamic.php @@ -197,7 +197,10 @@ function showHide(what, onoff) { " /> -

+ +

+ (' . $usernamedata['id'] . ')' : $_lang['web_user_title']) ?> +

From 777b164ace26fcfbab4526cb68b71ca1eab66971 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 17:01:10 +0300 Subject: [PATCH 005/577] changed header page H1 --- manager/actions/mutate_template_tv_rank.dynamic.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manager/actions/mutate_template_tv_rank.dynamic.php b/manager/actions/mutate_template_tv_rank.dynamic.php index 78a80dd768..644ad7abcd 100644 --- a/manager/actions/mutate_template_tv_rank.dynamic.php +++ b/manager/actions/mutate_template_tv_rank.dynamic.php @@ -16,6 +16,7 @@ $siteURL = $modx->config['site_url']; $updateMsg = ''; +$templatename = ''; if (isset($_POST['listSubmitted'])) { $updateMsg .= '
' . $_lang['sort_updated'] . '
'; @@ -42,8 +43,9 @@ INNER JOIN {$tbl_site_templates} AS tm ON tr.templateid = tm.id", "tr.templateid='{$id}'", "tr.rank ASC, tv.rank ASC, tv.id ASC"); if ($modx->db->getRecordCount($rs)) { - $sortableList = '
' . $row['templatename'] . '
    '; + $sortableList = '
      '; while ($row = $modx->db->getRow($rs)) { + $templatename = $row['templatename']; $caption = $row['caption'] != '' ? $row['caption'] : $row['name']; $sortableList .= '
    • ' . $caption . ' [*' . $row['name'] . '*]
    • '; } @@ -126,7 +128,7 @@ function resetSortOrder()

      - + (' . $id . ')' : $_lang['template_tv_edit_title']) ?>

      From 8de907a80d6a22b652f44eb7208afdcfc6b2dc13 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 17:02:14 +0300 Subject: [PATCH 006/577] deleted excess html --- manager/actions/mutate_tv_rank.dynamic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/actions/mutate_tv_rank.dynamic.php b/manager/actions/mutate_tv_rank.dynamic.php index 9fcbcc79ba..d73ba88f7c 100644 --- a/manager/actions/mutate_tv_rank.dynamic.php +++ b/manager/actions/mutate_tv_rank.dynamic.php @@ -37,7 +37,7 @@ $rs = $modx->db->select("name, caption, id, rank", $tbl_site_tmplvars, "", "rank ASC, id ASC"); if ($modx->db->getRecordCount($rs)) { - $sortableList = '
      ' . $row['templatename'] . '
        '; + $sortableList = '
          '; while ($row = $modx->db->getRow($rs)) { $caption = $row['caption'] != '' ? $row['caption'] : $row['name']; $sortableList .= '
        • ' . $caption . ' [*' . $row['name'] . '*]
        • '; From d2b8ca6fefae691fddbcc5ea094d2da9eabfc5d2 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 17:05:12 +0300 Subject: [PATCH 007/577] correct locks resources and elements deleted navigator.sendBeacon (polyfill sendBeacon) --- manager/includes/active_user_locks.inc.php | 88 ++++++---------------- 1 file changed, 25 insertions(+), 63 deletions(-) diff --git a/manager/includes/active_user_locks.inc.php b/manager/includes/active_user_locks.inc.php index 821d7c063d..a6fda0071b 100644 --- a/manager/includes/active_user_locks.inc.php +++ b/manager/includes/active_user_locks.inc.php @@ -1,73 +1,35 @@ INCLUDE_ORDERING_ERROR

          Please use the MODX Content Manager instead of accessing this file directly."); +if (IN_MANAGER_MODE != "true") { + die("INCLUDE_ORDERING_ERROR

          Please use the MODX Content Manager instead of accessing this file directly."); +} $lockElementId = intval($lockElementId); -if($lockElementId > 0) { -?> - - + \ No newline at end of file From 3206b8766a38f8dea70a4b606a00bbff0e3cf9b5 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 17:09:38 +0300 Subject: [PATCH 008/577] changed border-radius actionButtons --- manager/media/style/default/css/custom.css | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/manager/media/style/default/css/custom.css b/manager/media/style/default/css/custom.css index 6d7107cb92..3b8b377f5a 100644 --- a/manager/media/style/default/css/custom.css +++ b/manager/media/style/default/css/custom.css @@ -51,7 +51,7 @@ select[name=docgroup] + input[type=submit] { float: none; margin: 0; } #actions .btn-group .dropdown-toggle::after { margin: 0; border-width: 0.4em; transition-duration: 0.25s } #actions .btn-group .show .dropdown-toggle::after { transform: rotate(180deg) } #_actions .btn-group .input-group-btn .btn { margin-left: .1875rem } -#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: .1rem } +#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: .1em } @media (max-width: 840px) { #actions { right: 0 } #actions .btn-group .btn span, #actions .btn-group select#stay, #_actions .btn-group .btn span { display: none } @@ -60,8 +60,8 @@ select[name=docgroup] + input[type=submit] { float: none; margin: 0; } #actions .btn-group .dropdown-menu span { padding-left: 0; padding-right: 0; text-align: center } #_actions .btn-group .input-group-btn .btn { margin-left: -1px } #_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: 0 } -#_actions .btn-group .form-control:first-child { border-top-left-radius: .1rem; border-bottom-left-radius: .1rem; } -#_actions .btn-group .btn:last-child { border-top-right-radius: .1rem; border-bottom-right-radius: .1rem; } +#_actions .btn-group .form-control:first-child { border-top-left-radius: .1em; border-bottom-left-radius: .1em; } +#_actions .btn-group .btn:last-child { border-top-right-radius: .1em; border-bottom-right-radius: .1em; } } /* old style */ #actions .actionButtons { float: left; min-height: 32px } @@ -92,11 +92,10 @@ select[name=docgroup] + input[type=submit] { float: none; margin: 0; } .actionButtons { margin: 0; padding: 0; background: none; width: auto; white-space: nowrap; } .actionButtons li { float: left; margin: 0; padding: 0; list-style: none; } .actionButtons li:before, .mmTagList li:before, .rTable li:before, .tab-pane ul li ul li:before, .dashboard li:before, div#idShowHideSocialBox.sectionBody > div.btn-group.ope > ul.dropdown-menu > li:before, .sectionBody .multitv .list li:before { display: none; content: ''; } -.actionButtons img { vertical-align: top; margin-top: 1px; filter: alpha(opacity=30); -moz-opacity: 0.3; opacity: 0.3; } -.actionButtons:hover img { filter: alpha(opacity=100); -moz-opacity: 1; opacity: 1; } -.actionButtons a:hover { border-color: #999; -moz-box-shadow: 1px 1px 2px #aaa; -webkit-box-shadow: 1px 1px 2px #aaa; box-shadow: 1px 1px 2px #aaa; -webkit-transition: all .3s ease; -moz-transition: all .3s ease; -o-transition: all .3s ease; transition: .3s ease; background: -moz-linear-gradient(#fff, #f5f5f5); background: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f5f5f5)); background: -o-linear-gradient(#fff, #f5f5f5); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fff, endColorstr=#f5f5f5); -zoom: 1; text-decoration: none !important; } -.actionButtons a:active { background: #92aac4 bottom left; -webkit-box-shadow: 0 0 10px #b8c7d6; -moz-box-shadow: 0 0 10px #b8c7d6; box-shadow: 0 0 10px #b8c7d6; } +.actionButtons img { vertical-align: top; margin-top: 1px; opacity: 0.3; } +.actionButtons:hover img { opacity: 1; } +.actionButtons a:hover { border-color: #999; -webkit-box-shadow: 1px 1px 2px #aaa; box-shadow: 1px 1px 2px #aaa; -webkit-transition: .3s ease; transition: .3s ease; background: -moz-linear-gradient(#fff, #f5f5f5); background: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f5f5f5)); background: -o-linear-gradient(#fff, #f5f5f5); text-decoration: none !important; } +.actionButtons a:active { background: #92aac4 bottom left; -webkit-box-shadow: 0 0 10px #b8c7d6; box-shadow: 0 0 10px #b8c7d6; } .actionButtons a { float: left; padding: 5px 10px; height: 32px; font-size: 13px; font-weight: 500; } .actionButtons a, .actionButtons li.primary a, .actionButtons a.primary, .actionButtons a.default { text-shadow: none; background: #fff; color: #555; border: 1px solid #e4e4e4; border-radius: 3px; /*box-shadow: 0 0 0 1px #E4E4E4;*/ box-shadow: none; transition: none; } .actionButtons a:hover { background: #1377c5; box-shadow: none; border-color: #1377c5; color: #fff !important; transition: none; } From 8971d6bcd71761df855ea3565624c850caa191ea Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 17:13:12 +0300 Subject: [PATCH 009/577] fix JS bugs --- manager/includes/header.inc.php | 113 +++++++++++++++++++------------- 1 file changed, 67 insertions(+), 46 deletions(-) diff --git a/manager/includes/header.inc.php b/manager/includes/header.inc.php index d453bd8841..442e47f043 100644 --- a/manager/includes/header.inc.php +++ b/manager/includes/header.inc.php @@ -30,7 +30,7 @@ - ' . "\n", $modx->config['mgr_jquery_path']) ?> + ' . "\n", $modx->config['mgr_jquery_path']) ?> = o.el.offsetHeight && o.el.nextElementSibling) { - o.y += o.el.offsetHeight + o.marginY; - o.el.parentNode.insertBefore(o.el, o.el.nextElementSibling.nextElementSibling); - o.change(); - y = 0; - } else if (y <= -o.el.offsetHeight && o.el.previousElementSibling) { - o.y -= o.el.offsetHeight + o.marginY; - o.el.parentNode.insertBefore(o.el, o.el.previousElementSibling); - o.change(); - y = 0; - } else if (!o.el.previousElementSibling && y < 0 || !o.el.nextElementSibling && y > 0) { - y = 0; + if (o.position === 'vertical') { + var y = (e.pageY - o.y); + if (y >= o.el.offsetHeight && o.el.nextElementSibling) { + o.y += o.el.offsetHeight + o.marginY; + o.el.parentNode.insertBefore(o.el, o.el.nextElementSibling.nextElementSibling); + o.change(); + y = 0; + } else if (y <= -o.el.offsetHeight && o.el.previousElementSibling) { + o.y -= o.el.offsetHeight + o.marginY; + o.el.parentNode.insertBefore(o.el, o.el.previousElementSibling); + o.change(); + y = 0; + } else if (!o.el.previousElementSibling && y < 0 || !o.el.nextElementSibling && y > 0) { + y = 0; + } + o.el.style.webkitTransform = 'translateY(' + y + 'px)'; + o.el.style.transform = 'translateY(' + y + 'px)'; + } else { + var x = (e.pageX - o.x); + if (x >= o.el.offsetWidth && o.el.nextElementSibling) { + o.x += o.el.offsetWidth + o.marginX; + o.el.parentNode.insertBefore(o.el, o.el.nextElementSibling.nextElementSibling); + o.change(); + x = 0; + } else if (x <= -o.el.offsetWidth && o.el.previousElementSibling) { + o.x -= o.el.offsetHeight + o.marginX; + o.el.parentNode.insertBefore(o.el, o.el.previousElementSibling); + o.change(); + x = 0; + } else if (!o.el.previousElementSibling && x < 0 || !o.el.nextElementSibling && x > 0) { + x = 0; + } + o.el.style.webkitTransform = 'translateX(' + x + 'px)'; + o.el.style.transform = 'translateX(' + x + 'px)'; } - o.el.style.webkitTransform = 'translateY(' + y + 'px)'; - o.el.style.transform = 'translateY(' + y + 'px)'; } function onmouseup() @@ -160,13 +180,13 @@ function onmouseup() o.el.style.webkitTransform = ''; o.el.style.transform = ''; o.el.classList.remove(o.handleClass); - document.removeEventListener('mousemove', onmousemove); - document.removeEventListener('mouseup', onmouseup); - document.onselectstart = null; + o.el.ownerDocument.removeEventListener('mousemove', onmousemove); + o.el.ownerDocument.removeEventListener('mouseup', onmouseup); + o.el.ownerDocument.onselectstart = null; o.complete(o.el); } - for (let i = 0; i < a.length; i++) { + for (var i = 0; i < a.length; i++) { a[i].addEventListener('mousedown', onmousedown); } }; @@ -180,7 +200,7 @@ function onmouseup() a = 'string' === typeof a ? document.querySelectorAll(a) : a; b = b || {}; } - let o = { + var o = { handle: { start: function(c) { 'function' === typeof b.handle.start ? b.handle.start.call(c) : ''; @@ -223,7 +243,7 @@ function onmousedown(e) function onmousemove(e) { - let x = e.pageX - o.x, y = e.pageY - o.y; + var x = e.pageX - o.x, y = e.pageY - o.y; if (Math.abs(x) + Math.abs(y) > 10) { o.draggable = true; o.el.style.pointerEvents = 'none'; @@ -244,7 +264,7 @@ function onmouseup() o.el.style.left = ''; o.el.style.top = ''; o.el.draggable = false; - let h = document.querySelector('.' + o.container.classOver); + var h = document.querySelector('.' + o.container.classOver); if (h && h !== o.parent) { h.appendChild(o.el); o.container.drop(h, o.el); @@ -253,11 +273,11 @@ function onmouseup() } } - for (let i = 0; i < a.length; i++) { + for (var i = 0; i < a.length; i++) { a[i].addEventListener('mousedown', onmousedown); } - for (let i = 0; i < o.container.els.length; i++) { + for (var i = 0; i < o.container.els.length; i++) { o.container.els[i].onmouseenter = function() { this.classList.add(b.container.classOver); }; @@ -275,11 +295,11 @@ function onmouseup() } else { a = 'string' === typeof a ? document.querySelectorAll(a) : a; } - let h = { + var h = { containerClass: b && b.containerClass || 'tab-body' }; - for (let i = 0; i < a.length; i++) { + for (var i = 0; i < a.length; i++) { if (a[i].nextElementSibling && a[i].nextElementSibling.classList.contains(h.containerClass)) { a[i].nextElementSibling.classList.add('collapse', 'in'); a[i].onclick = function() { @@ -297,7 +317,7 @@ function onmouseup() // check connection to server evo.checkConnectionToServer = function() { - let xhr = new ( window.ActiveXObject || XMLHttpRequest )('Microsoft.XMLHTTP'); + var xhr = new ( window.ActiveXObject || XMLHttpRequest )('Microsoft.XMLHTTP'); xhr.open('HEAD', 'includes/version.inc.php?time=' + new Date().getTime(), false); try { xhr.send(); @@ -317,9 +337,9 @@ function document_onload() } ?> - let actionButtons = document.getElementById('actions'), actionSelect = document.getElementById('stay'); + var actionButtons = document.getElementById('actions'), actionSelect = document.getElementById('stay'); if (actionButtons !== null && actionSelect !== null) { - let actionPlus = actionButtons.querySelector('.plus'), actionSaveButton = actionButtons.querySelector('a#Button1') || actionButtons.querySelector('#Button1 > a'), actionStay = []; + var actionPlus = actionButtons.querySelector('.plus'), actionSaveButton = actionButtons.querySelector('a#Button1') || actionButtons.querySelector('#Button1 > a'), actionStay = []; actionPlus.classList.add('dropdown-toggle'); actionStay['stay1'] = ''; actionStay['stay2'] = ''; @@ -327,17 +347,17 @@ function document_onload() if (actionSelect.value) { actionSaveButton.innerHTML += ' + ' + actionStay['stay' + actionSelect.value] + '' + actionSelect.children['stay' + actionSelect.value].innerHTML + ''; } - let actionSelectNewOption = null, actionSelectOptions = actionSelect.children, div = document.createElement('div'); + var actionSelectNewOption = null, actionSelectOptions = actionSelect.children, div = document.createElement('div'); div.className = 'dropdown-menu'; actionSaveButton.parentNode.classList.add('dropdown'); - for (let i = 0; i < actionSelectOptions.length; i++) { + for (var i = 0; i < actionSelectOptions.length; i++) { if (!actionSelectOptions[i].selected) { actionSelectNewOption = document.createElement('SPAN'); actionSelectNewOption.className = 'btn btn-block'; actionSelectNewOption.dataset.id = i; actionSelectNewOption.innerHTML = actionStay[actionSelect.children[i].id] + ' ' + actionSelect.children[i].innerHTML + ''; actionSelectNewOption.onclick = function() { - let s = actionSelect.querySelector('option[selected=selected]'); + var s = actionSelect.querySelector('option[selected=selected]'); if (s) { s.selected = false; } @@ -360,7 +380,7 @@ function reset_path(elementName) document.getElementById(elementName).value = document.getElementById('default_' + elementName).innerHTML; } - let dontShowWorker = false; + var dontShowWorker = false; function document_onunload(e) { @@ -406,8 +426,9 @@ function doRefresh(r) function checkDirt(evt) { evt = evt || window.event; + var message = ''; if (!evo.checkConnectionToServer()) { - let message = ''; + message = ''; setTimeout(function() { alert(message); }, 10); @@ -416,7 +437,7 @@ function checkDirt(evt) return message; } if (documentDirty === true) { - let message = ''; + message = ''; evt.returnValue = message; timerForUnload = setTimeout('stopWorker()', 100); return message; @@ -426,12 +447,12 @@ function checkDirt(evt) function saveWait(fName) { document.getElementById('savingMessage').innerHTML = ''; - for (let i = 0; i < document.forms[fName].elements.length; i++) { + for (var i = 0; i < document.forms[fName].elements.length; i++) { document.forms[fName].elements[i].disabled = 'disabled'; } } - let managerPath = ''; + var managerPath = ''; function hideLoader() { From a53693528d2173187215dc9c946624a1c752d9fd Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 17:16:28 +0300 Subject: [PATCH 010/577] changed version ?v=1.3.5 fix zIndex #main and #tree --- manager/media/style/default/css/page.css | 12 ++++++------ manager/media/style/default/style.css | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manager/media/style/default/css/page.css b/manager/media/style/default/css/page.css index b96b002964..96f0cb576b 100644 --- a/manager/media/style/default/css/page.css +++ b/manager/media/style/default/css/page.css @@ -1,16 +1,16 @@ @import "../../common/bootstrap/css/bootstrap.min.css?v=4.0.0-alpha.5"; @import "../../common/font-awesome/css/font-awesome.min.css?v=4.7.0"; -@import 'fonts.css?v=1.3.3'; -@import "forms.css?v=1.3.3"; -@import "mainmenu.css?v=1.3.3"; +@import 'fonts.css?v=1.3.5'; +@import "forms.css?v=1.3.5"; +@import "mainmenu.css?v=1.3.5"; @import "tree.css"; @import "tabpane.css"; @import "contextmenu.css"; #frameset { position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; } #mainMenu, #tree, #main { position: absolute; } #mainMenu { top: 0; left: 0; width: 100%; height: 2.2rem; z-index: 100; } -#tree { left: 0; top: 2.2rem; bottom: 0; width: 25rem; max-width: 100%; overflow: hidden; z-index: 1; } -#main { left: 25rem; top: 2.2rem; right: 0; bottom: 0; z-index: 2; } +#tree { left: 0; top: 2.2rem; bottom: 0; width: 25rem; max-width: 100%; overflow: hidden; z-index: 2; } +#main { left: 25rem; top: 2.2rem; right: 0; bottom: 0; z-index: 1; } #main #mainframe { display: block; position: absolute; width: 100%; height: 100%; overflow: auto; } /* floater */ #floater { position: fixed; z-index: 1000; opacity: 0; visibility: hidden; max-width: 20rem; padding: 1.5rem; top: 4rem; left: 2rem; border-radius: 0.25rem; background-color: #fff; -webkit-box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); transition-duration: 0.15s } @@ -43,4 +43,4 @@ to { transform: rotate(360deg) } } /* dark */ .dark #main { background-color: #ecf0f1 } -.dark #mainloader { background-color: rgba(236, 240, 241, 0.64); } \ No newline at end of file +.dark #mainloader { background-color: rgba(0, 0, 0, 0.1); } diff --git a/manager/media/style/default/style.css b/manager/media/style/default/style.css index a33f13d084..076193cddb 100644 --- a/manager/media/style/default/style.css +++ b/manager/media/style/default/style.css @@ -1,8 +1,8 @@ @import "../common/bootstrap/css/bootstrap.min.css?v=4.0.0-alpha.5"; @import "../common/font-awesome/css/font-awesome.min.css?v=4.7.0"; -@import "css/fonts.css?v=1.3.3"; -@import "css/forms.css?v=1.3.3"; -@import "css/custom.css?v=1.3.3"; +@import "css/fonts.css?v=1.3.5"; +@import "css/forms.css?v=1.3.5"; +@import "css/custom.css?v=1.3.5"; @import "css/tabpane.css"; @import "css/contextmenu.css"; /* -------------------------[ Misc stuff ]--- */ From ca69da17505a2151fc70551afcd21cf51bf9e611 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 17:18:06 +0300 Subject: [PATCH 011/577] remove setLastClickedElement(0,0) --- manager/includes/menu.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/menu.class.inc.php b/manager/includes/menu.class.inc.php index 63316ff224..fedaf9fced 100644 --- a/manager/includes/menu.class.inc.php +++ b/manager/includes/menu.class.inc.php @@ -69,7 +69,7 @@ function DrawSub($parentid, $level) $ph['href'] = $value[3]; $ph['alt'] = $value[4]; $ph['target'] = $value[7]; - $ph['onclick'] = 'setLastClickedElement(0,0);' . $value[5]; + $ph['onclick'] = $value[5]; $ph['a_class'] = $this->get_a_class($id); $ph['LinkAttr'] = $this->getLinkAttr($id); $ph['itemName'] = $value[2] . $this->getItemName($id); From 52c67ac6e73039c91ec043fdd7d650da1c4b5dff Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 18:16:48 +0300 Subject: [PATCH 012/577] added global tabs js method modx.tabs js method modx.popup click + push key Shift openes new window sub button clear cache in popup --- .../tab4_manager_settings.inc.php | 17 + manager/frames/1.php | 987 ++--- manager/frames/mainmenu.php | 924 ++-- manager/frames/tree.php | 2 +- manager/includes/default_config.php | 1 + manager/includes/lang/english.inc.php | 2 + manager/includes/lang/russian-UTF8.inc.php | 2 + manager/media/style/default/ajax.php | 20 +- manager/media/style/default/css/mainmenu.css | 6 +- manager/media/style/default/css/tabpane.css | 165 +- manager/media/style/default/css/tree.css | 130 +- manager/media/style/default/js/modx.js | 3756 ++++++++++------- 12 files changed, 3350 insertions(+), 2662 deletions(-) diff --git a/manager/actions/mutate_settings/tab4_manager_settings.inc.php b/manager/actions/mutate_settings/tab4_manager_settings.inc.php index 73b57ef383..3a6c382e04 100644 --- a/manager/actions/mutate_settings/tab4_manager_settings.inc.php +++ b/manager/actions/mutate_settings/tab4_manager_settings.inc.php @@ -159,6 +159,23 @@
          + +
          + [(global_tabs)] + + + +
          + + + + + +
          + +
          diff --git a/manager/frames/1.php b/manager/frames/1.php index 4c7712d241..6c95e85d55 100644 --- a/manager/frames/1.php +++ b/manager/frames/1.php @@ -1,480 +1,509 @@ -INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); -} -header("X-XSS-Protection: 0"); - -$_SESSION['browser'] = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 1') !== false) ? 'legacy_IE' : 'modern'; - -// invoke OnManagerPreFrameLoader -$modx->invokeEvent('OnManagerPreFrameLoader', array('action' => $action)); - -$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; - -if(!isset($modx->config['manager_menu_height'])) { - $modx->config['manager_menu_height'] = 2.2; // rem -} - -if(!isset($modx->config['manager_tree_width'])) { - $modx->config['manager_tree_width'] = 20; // rem -} - -if(isset($_SESSION['onLoginForwardToAction']) && is_int($_SESSION['onLoginForwardToAction'])) { - $initMainframeAction = $_SESSION['onLoginForwardToAction']; - unset($_SESSION['onLoginForwardToAction']); -} else { - $initMainframeAction = 2; // welcome.static -} - -if(!isset($_SESSION['tree_show_only_folders'])) { - $_SESSION['tree_show_only_folders'] = 0; -} - -$body_class = ''; -$menu_height = $modx->config['manager_menu_height']; -$tree_width = $modx->config['manager_tree_width']; -$tree_min_width = 0; - -if(isset($_COOKIE['MODX_widthSideBar'])) { - $MODX_widthSideBar = $_COOKIE['MODX_widthSideBar']; -} else { - $MODX_widthSideBar = $tree_width; -} - -if(!$MODX_widthSideBar) { - $body_class .= 'sidebar-closed'; -} - -if(isset($_COOKIE['MODX_themeColor'])) { - $body_class .= ' ' . $_COOKIE['MODX_themeColor']; -} - -if(isset($modx->pluginCache['ElementsInTree'])) { - $body_class .= ' ElementsInTree'; -} - -$unlockTranslations = array( - 'msg' => $_lang["unlock_element_id_warning"], - 'type1' => $_lang["lock_element_type_1"], - 'type2' => $_lang["lock_element_type_2"], - 'type3' => $_lang["lock_element_type_3"], - 'type4' => $_lang["lock_element_type_4"], - 'type5' => $_lang["lock_element_type_5"], - 'type6' => $_lang["lock_element_type_6"], - 'type7' => $_lang["lock_element_type_7"], - 'type8' => $_lang["lock_element_type_8"] -); - -foreach($unlockTranslations as $key => $value) { - $unlockTranslations[$key] = iconv($modx->config["modx_charset"], "utf-8", $value); -} - -$user = $modx->getUserInfo($modx->getLoginUserID()); -if($user['which_browser'] == 'default') { - $user['which_browser'] = $modx->config['which_browser']; -} -?> - -> - - <?= $site_name ?>- (EVO CMS Manager) - - - - - - - - - - - invokeEvent('OnManagerTopPrerender', $_REQUEST); - if(is_array($evtOut)) { - echo implode("\n", $evtOut); - } - ?> - - - -
          - -
          - -
          -
          - -
          -
          -
          -
          - - - - - - - ', $action, $action); - echo sprintf(' %s
          ', $img, $text); - } - } - - ?> - - - - invokeEvent('OnManagerFrameLoader', array('action' => $action)); - ?> - -
        - - +INCLUDE_ORDERING_ERROR

        Please use the EVO Content Manager instead of accessing this file directly."); +} +header("X-XSS-Protection: 0"); + +$_SESSION['browser'] = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 1') !== false) ? 'legacy_IE' : 'modern'; + +// invoke OnManagerPreFrameLoader +$modx->invokeEvent('OnManagerPreFrameLoader', array('action' => $action)); + +$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; + +if (!isset($modx->config['manager_menu_height'])) { + $modx->config['manager_menu_height'] = 2.2; // rem +} + +if (!isset($modx->config['manager_tree_width'])) { + $modx->config['manager_tree_width'] = 20; // rem +} + +if (isset($_SESSION['onLoginForwardToAction']) && is_int($_SESSION['onLoginForwardToAction'])) { + $initMainframeAction = $_SESSION['onLoginForwardToAction']; + unset($_SESSION['onLoginForwardToAction']); +} else { + $initMainframeAction = 2; // welcome.static +} + +if (!isset($_SESSION['tree_show_only_folders'])) { + $_SESSION['tree_show_only_folders'] = 0; +} + +$body_class = ''; +$menu_height = $modx->config['manager_menu_height']; +$tree_width = $modx->config['manager_tree_width']; +$tree_min_width = 0; + +if (isset($_COOKIE['MODX_widthSideBar'])) { + $MODX_widthSideBar = $_COOKIE['MODX_widthSideBar']; +} else { + $MODX_widthSideBar = $tree_width; +} + +if (!$MODX_widthSideBar) { + $body_class .= 'sidebar-closed'; +} + +if (isset($_COOKIE['MODX_themeColor'])) { + $body_class .= ' ' . $_COOKIE['MODX_themeColor']; +} + +if (isset($modx->pluginCache['ElementsInTree'])) { + $body_class .= ' ElementsInTree'; +} + +$unlockTranslations = array( + 'msg' => $_lang["unlock_element_id_warning"], + 'type1' => $_lang["lock_element_type_1"], + 'type2' => $_lang["lock_element_type_2"], + 'type3' => $_lang["lock_element_type_3"], + 'type4' => $_lang["lock_element_type_4"], + 'type5' => $_lang["lock_element_type_5"], + 'type6' => $_lang["lock_element_type_6"], + 'type7' => $_lang["lock_element_type_7"], + 'type8' => $_lang["lock_element_type_8"] +); + +foreach ($unlockTranslations as $key => $value) { + $unlockTranslations[$key] = iconv($modx->config["modx_charset"], "utf-8", $value); +} + +$user = $modx->getUserInfo($modx->getLoginUserID()); +if ($user['which_browser'] == 'default') { + $user['which_browser'] = $modx->config['which_browser']; +} +?> + +> + + <?= $site_name ?>- (EVO CMS Manager) + + + + + + + + + + + invokeEvent('OnManagerTopPrerender', $_REQUEST); + if (is_array($evtOut)) { + echo implode("\n", $evtOut); + } + ?> + + + +
        + +
        + +
        +
        + config['global_tabs']): ?> +
        +

        +
        +
        + +
        + + + +
        +
        +
        +
        + + + + + + + ', $action, $action); + echo sprintf(' %s
        ', $img, $text); + } + } + + ?> + + + + invokeEvent('OnManagerFrameLoader', array('action' => $action)); + ?> + +
      + + \ No newline at end of file diff --git a/manager/frames/mainmenu.php b/manager/frames/mainmenu.php index 6ad1a8fb99..79ef982e80 100644 --- a/manager/frames/mainmenu.php +++ b/manager/frames/mainmenu.php @@ -1,462 +1,462 @@ -Build('id','parent','name','link','alt','onclick','permission','target','divider 1/0','menuindex', 'class') -*/ - -$sitemenu['bars'] = array( - 'bars', - 'main', - '', - 'javascript:;', - $_lang['home'], - 'modx.resizer.toggle(); return false;', - ' return false;', - '', - 0, - 10, - '' -); - -//mainMenu -$sitemenu['site'] = array( - 'site', - 'main', - '' . $_lang['home'], - 'index.php?a=2', - $_lang['home'], - '', - '', - 'main', - 0, - 10, - 'active' -); - -if($modx->hasPermission('edit_template') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('edit_chunk') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('file_manager')) { - $sitemenu['elements'] = array( - 'elements', - 'main', - '' . $_lang['elements'], - 'javascript:;', - $_lang['elements'], - ' return false;', - '', - '', - 0, - 20, - '' - ); -} - -if($modx->hasPermission('exec_module')) { - $sitemenu['modules'] = array( - 'modules', - 'main', - '' . $_lang['modules'], - 'javascript:;', - $_lang['modules'], - ' return false;', - '', - '', - 0, - 30, - '' - ); -} - -if($modx->hasPermission('edit_user') || $modx->hasPermission('edit_web_user') || $modx->hasPermission('edit_role') || $modx->hasPermission('access_permissions') || $modx->hasPermission('web_access_permissions')) { - $sitemenu['users'] = array( - 'users', - 'main', - '' . $_lang['users'], - 'javascript:;', - $_lang['users'], - ' return false;', - 'edit_user', - '', - 0, - 40, - '' - ); -} - -if($modx->hasPermission('empty_cache') || $modx->hasPermission('bk_manager') || $modx->hasPermission('remove_locks') || $modx->hasPermission('import_static') || $modx->hasPermission('export_static')) { - $sitemenu['tools'] = array( - 'tools', - 'main', - '' . $_lang['tools'], - 'javascript:;', - $_lang['tools'], - ' return false;', - '', - '', - 0, - 50, - '' - ); -} - -$tab = 0; -if($modx->hasPermission('edit_template')) { - $sitemenu['element_templates'] = array( - 'element_templates', - 'elements', - '' . $_lang['manage_templates'], - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_templates'], - '', - 'new_template,edit_template', - 'main', - 0, - 10, - 'toggle-dropdown' - ); -} -if($modx->hasPermission('edit_template') && $modx->hasPermission('edit_snippet') && $modx->hasPermission('edit_chunk') && $modx->hasPermission('edit_plugin')) { - $sitemenu['element_tplvars'] = array( - 'element_tplvars', - 'elements', - '' . $_lang['tmplvars'], - 'index.php?a=76&tab=' . $tab++, - $_lang['tmplvars'], - '', - 'new_template,edit_template', - 'main', - 0, - 20, - 'toggle-dropdown' - ); -} -if($modx->hasPermission('edit_chunk')) { - $sitemenu['element_htmlsnippets'] = array( - 'element_htmlsnippets', - 'elements', - '' . $_lang['manage_htmlsnippets'], - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_htmlsnippets'], - '', - 'new_chunk,edit_chunk', - 'main', - 0, - 30, - 'toggle-dropdown' - ); -} -if($modx->hasPermission('edit_snippet')) { - $sitemenu['element_snippets'] = array( - 'element_snippets', - 'elements', - '' . $_lang['manage_snippets'], - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_snippets'], - '', - 'new_snippet,edit_snippet', - 'main', - 0, - 40, - 'toggle-dropdown' - ); -} -if($modx->hasPermission('edit_plugin')) { - $sitemenu['element_plugins'] = array( - 'element_plugins', - 'elements', - '' . $_lang['manage_plugins'], - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_plugins'], - '', - 'new_plugin,edit_plugin', - 'main', - 0, - 50, - 'toggle-dropdown' - ); -} -//$sitemenu['element_categories'] = array('element_categories','elements',$_lang['element_categories'],'index.php?a=76&tab=5',$_lang['element_categories'],'','new_template,edit_template,new_snippet,edit_snippet,new_chunk,edit_chunk,new_plugin,edit_plugin','main',1,60,''); - -if($modx->hasPermission('file_manager')) { - $sitemenu['manage_files'] = array( - 'manage_files', - 'elements', - '' . $_lang['manage_files'], - 'index.php?a=31', - $_lang['manage_files'], - '', - 'file_manager', - 'main', - 0, - 70, - '' - ); -} -if($modx->hasPermission('category_manager')) { - $sitemenu['manage_categories'] = array( - 'manage_categories', - 'elements', - '' . $_lang['manage_categories'], - 'index.php?a=120', - $_lang['manage_categories'], - '', - 'category_manager', - 'main', - 0, - 80, - '' - ); -} - -// Modules Menu Items -if($modx->hasPermission('new_module') || $modx->hasPermission('edit_module') || $modx->hasPermission('save_module')) { - $sitemenu['new_module'] = array( - 'new_module', - 'modules', - '' . $_lang['module_management'], - 'index.php?a=106', - $_lang['module_management'], - '', - 'new_module,edit_module', - 'main', - 1, - 0, - '' - ); -} - -if($modx->hasPermission('exec_module')) { - if($_SESSION['mgrRole'] != 1 && !empty($modx->config['use_udperms'])) { - $rs = $modx->db->query('SELECT DISTINCT sm.id, sm.name, mg.member - FROM ' . $modx->getFullTableName('site_modules') . ' AS sm - LEFT JOIN ' . $modx->getFullTableName('site_module_access') . ' AS sma ON sma.module = sm.id - LEFT JOIN ' . $modx->getFullTableName('member_groups') . ' AS mg ON sma.usergroup = mg.user_group - WHERE (mg.member IS NULL OR mg.member = ' . $modx->getLoginUserID() . ') AND sm.disabled != 1 AND sm.locked != 1 - ORDER BY sm.name'); - } else { - $rs = $modx->db->select('*', $modx->getFullTableName('site_modules'), 'disabled != 1', 'name'); - } - if($modx->db->getRecordCount($rs)) { - while ($row = $modx->db->getRow($rs)) { - $sitemenu['module' . $row['id']] = array( - 'module' . $row['id'], - 'modules', - ($row['name'] == 'Extras' ? '' : '') . $row['name'], - 'index.php?a=112&id=' . $row['id'], - $row['name'], - '', - '', - 'main', - 0, - 1, - '' - ); - } - } -} - -// security menu items (users) - -if($modx->hasPermission('edit_user')) { - $sitemenu['user_management_title'] = array( - 'user_management_title', - 'users', - '' . $_lang['user_management_title'], - 'index.php?a=75', - $_lang['user_management_title'], - '', - 'edit_user', - 'main', - 0, - 10, - 'toggle-dropdown' - ); -} - -if($modx->hasPermission('edit_web_user')) { - $sitemenu['web_user_management_title'] = array( - 'web_user_management_title', - 'users', - '' . $_lang['web_user_management_title'], - 'index.php?a=99', - $_lang['web_user_management_title'], - '', - 'edit_web_user', - 'main', - 0, - 20, - 'toggle-dropdown' - ); -} - -if($modx->hasPermission('edit_role')) { - $sitemenu['role_management_title'] = array( - 'role_management_title', - 'users', - '' . $_lang['role_management_title'], - 'index.php?a=86', - $_lang['role_management_title'], - '', - 'new_role,edit_role,delete_role', - 'main', - 0, - 30, - '' - ); -} - -if($modx->hasPermission('access_permissions')) { - $sitemenu['manager_permissions'] = array( - 'manager_permissions', - 'users', - '' . $_lang['manager_permissions'], - 'index.php?a=40', - $_lang['manager_permissions'], - '', - 'access_permissions', - 'main', - 0, - 40, - '' - ); -} - -if($modx->hasPermission('web_access_permissions')) { - $sitemenu['web_permissions'] = array( - 'web_permissions', - 'users', - '' . $_lang['web_permissions'], - 'index.php?a=91', - $_lang['web_permissions'], - '', - 'web_access_permissions', - 'main', - 0, - 50, - '' - ); -} - -// Tools Menu - -$sitemenu['refresh_site'] = array( - 'refresh_site', - 'tools', - '' . $_lang['refresh_site'], - 'index.php?a=26', - $_lang['refresh_site'], - '', - '', - 'main', - 0, - 5, - 'item-group', - array( - 'refresh_site_in_window' => array( - 'a', // tag - 'javascript:;', // href - 'btn btn-secondary', // class or btn-success - 'modx.openWindow({url:\'index.php?a=26\', title:\'' . $_lang['refresh_site'] . '\'})', // onclick - $_lang['refresh_site'], // title - '' // innerHTML - ) - ) -); - -$sitemenu['search'] = array( - 'search', - 'tools', - '' . $_lang['search'], - 'index.php?a=71', - $_lang['search'], - '', - '', - 'main', - 1, - 9, - '' -); - -if($modx->hasPermission('bk_manager')) { - $sitemenu['bk_manager'] = array( - 'bk_manager', - 'tools', - '' . $_lang['bk_manager'], - 'index.php?a=93', - $_lang['bk_manager'], - '', - 'bk_manager', - 'main', - 0, - 10, - '' - ); -} - -if($modx->hasPermission('remove_locks')) { - $sitemenu['remove_locks'] = array( - 'remove_locks', - 'tools', - '' . $_lang['remove_locks'], - 'javascript:modx.removeLocks();', - $_lang['remove_locks'], - '', - 'remove_locks', - '', - 0, - 20, - '' - ); -} - -if($modx->hasPermission('import_static')) { - $sitemenu['import_site'] = array( - 'import_site', - 'tools', - '' . $_lang['import_site'], - 'index.php?a=95', - $_lang['import_site'], - '', - 'import_static', - 'main', - 0, - 30, - '' - ); -} - -if($modx->hasPermission('export_static')) { - $sitemenu['export_site'] = array( - 'export_site', - 'tools', - '' . $_lang['export_site'], - 'index.php?a=83', - $_lang['export_site'], - '', - 'export_static', - 'main', - 1, - 40, - '' - ); -} - -$menu = $modx->invokeEvent("OnManagerMenuPrerender", array('menu' => $sitemenu)); -if(is_array($menu)) { - $newmenu = array(); - foreach($menu as $item){ - if(is_array(unserialize($item))){ - $newmenu = array_merge($newmenu, unserialize($item)); - } - } - if(count($newmenu)> 0) $sitemenu = $newmenu; -} - -if(file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php')) { - include_once(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php'); -} else { - include_once(MODX_MANAGER_PATH . 'includes/menu.class.inc.php'); -} -$menu = new EVOmenu(); -$menu->Build($sitemenu, array( - 'outerClass' => 'nav', - 'innerClass' => 'dropdown-menu', - 'parentClass' => 'dropdown' -)); +Build('id','parent','name','link','alt','onclick','permission','target','divider 1/0','menuindex', 'class') +*/ + +$sitemenu['bars'] = array( + 'bars', + 'main', + '', + 'javascript:;', + $_lang['home'], + 'modx.resizer.toggle(); return false;', + ' return false;', + '', + 0, + 10, + '' +); + +//mainMenu +$sitemenu['site'] = array( + 'site', + 'main', + '' . $_lang['home'], + 'index.php?a=2', + $_lang['home'], + '', + '', + 'main', + 0, + 10, + 'active' +); + +if($modx->hasPermission('edit_template') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('edit_chunk') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('file_manager')) { + $sitemenu['elements'] = array( + 'elements', + 'main', + '' . $_lang['elements'], + 'javascript:;', + $_lang['elements'], + ' return false;', + '', + '', + 0, + 20, + '' + ); +} + +if($modx->hasPermission('exec_module')) { + $sitemenu['modules'] = array( + 'modules', + 'main', + '' . $_lang['modules'], + 'javascript:;', + $_lang['modules'], + ' return false;', + '', + '', + 0, + 30, + '' + ); +} + +if($modx->hasPermission('edit_user') || $modx->hasPermission('edit_web_user') || $modx->hasPermission('edit_role') || $modx->hasPermission('access_permissions') || $modx->hasPermission('web_access_permissions')) { + $sitemenu['users'] = array( + 'users', + 'main', + '' . $_lang['users'], + 'javascript:;', + $_lang['users'], + ' return false;', + 'edit_user', + '', + 0, + 40, + '' + ); +} + +if($modx->hasPermission('empty_cache') || $modx->hasPermission('bk_manager') || $modx->hasPermission('remove_locks') || $modx->hasPermission('import_static') || $modx->hasPermission('export_static')) { + $sitemenu['tools'] = array( + 'tools', + 'main', + '' . $_lang['tools'], + 'javascript:;', + $_lang['tools'], + ' return false;', + '', + '', + 0, + 50, + '' + ); +} + +$tab = 0; +if($modx->hasPermission('edit_template')) { + $sitemenu['element_templates'] = array( + 'element_templates', + 'elements', + '' . $_lang['manage_templates'], + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_templates'], + '', + 'new_template,edit_template', + 'main', + 0, + 10, + 'toggle-dropdown' + ); +} +if($modx->hasPermission('edit_template') && $modx->hasPermission('edit_snippet') && $modx->hasPermission('edit_chunk') && $modx->hasPermission('edit_plugin')) { + $sitemenu['element_tplvars'] = array( + 'element_tplvars', + 'elements', + '' . $_lang['tmplvars'], + 'index.php?a=76&tab=' . $tab++, + $_lang['tmplvars'], + '', + 'new_template,edit_template', + 'main', + 0, + 20, + 'toggle-dropdown' + ); +} +if($modx->hasPermission('edit_chunk')) { + $sitemenu['element_htmlsnippets'] = array( + 'element_htmlsnippets', + 'elements', + '' . $_lang['manage_htmlsnippets'], + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_htmlsnippets'], + '', + 'new_chunk,edit_chunk', + 'main', + 0, + 30, + 'toggle-dropdown' + ); +} +if($modx->hasPermission('edit_snippet')) { + $sitemenu['element_snippets'] = array( + 'element_snippets', + 'elements', + '' . $_lang['manage_snippets'], + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_snippets'], + '', + 'new_snippet,edit_snippet', + 'main', + 0, + 40, + 'toggle-dropdown' + ); +} +if($modx->hasPermission('edit_plugin')) { + $sitemenu['element_plugins'] = array( + 'element_plugins', + 'elements', + '' . $_lang['manage_plugins'], + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_plugins'], + '', + 'new_plugin,edit_plugin', + 'main', + 0, + 50, + 'toggle-dropdown' + ); +} +//$sitemenu['element_categories'] = array('element_categories','elements',$_lang['element_categories'],'index.php?a=76&tab=5',$_lang['element_categories'],'','new_template,edit_template,new_snippet,edit_snippet,new_chunk,edit_chunk,new_plugin,edit_plugin','main',1,60,''); + +if($modx->hasPermission('file_manager')) { + $sitemenu['manage_files'] = array( + 'manage_files', + 'elements', + '' . $_lang['manage_files'], + 'index.php?a=31', + $_lang['manage_files'], + '', + 'file_manager', + 'main', + 0, + 70, + '' + ); +} +if($modx->hasPermission('category_manager')) { + $sitemenu['manage_categories'] = array( + 'manage_categories', + 'elements', + '' . $_lang['manage_categories'], + 'index.php?a=120', + $_lang['manage_categories'], + '', + 'category_manager', + 'main', + 0, + 80, + '' + ); +} + +// Modules Menu Items +if($modx->hasPermission('new_module') || $modx->hasPermission('edit_module') || $modx->hasPermission('save_module')) { + $sitemenu['new_module'] = array( + 'new_module', + 'modules', + '' . $_lang['module_management'], + 'index.php?a=106', + $_lang['module_management'], + '', + 'new_module,edit_module', + 'main', + 1, + 0, + '' + ); +} + +if($modx->hasPermission('exec_module')) { + if($_SESSION['mgrRole'] != 1 && !empty($modx->config['use_udperms'])) { + $rs = $modx->db->query('SELECT DISTINCT sm.id, sm.name, mg.member + FROM ' . $modx->getFullTableName('site_modules') . ' AS sm + LEFT JOIN ' . $modx->getFullTableName('site_module_access') . ' AS sma ON sma.module = sm.id + LEFT JOIN ' . $modx->getFullTableName('member_groups') . ' AS mg ON sma.usergroup = mg.user_group + WHERE (mg.member IS NULL OR mg.member = ' . $modx->getLoginUserID() . ') AND sm.disabled != 1 AND sm.locked != 1 + ORDER BY sm.name'); + } else { + $rs = $modx->db->select('*', $modx->getFullTableName('site_modules'), 'disabled != 1', 'name'); + } + if($modx->db->getRecordCount($rs)) { + while ($row = $modx->db->getRow($rs)) { + $sitemenu['module' . $row['id']] = array( + 'module' . $row['id'], + 'modules', + ($row['name'] == 'Extras' ? '' : '') . $row['name'], + 'index.php?a=112&id=' . $row['id'], + $row['name'], + '', + '', + 'main', + 0, + 1, + '' + ); + } + } +} + +// security menu items (users) + +if($modx->hasPermission('edit_user')) { + $sitemenu['user_management_title'] = array( + 'user_management_title', + 'users', + '' . $_lang['user_management_title'], + 'index.php?a=75', + $_lang['user_management_title'], + '', + 'edit_user', + 'main', + 0, + 10, + 'toggle-dropdown' + ); +} + +if($modx->hasPermission('edit_web_user')) { + $sitemenu['web_user_management_title'] = array( + 'web_user_management_title', + 'users', + '' . $_lang['web_user_management_title'], + 'index.php?a=99', + $_lang['web_user_management_title'], + '', + 'edit_web_user', + 'main', + 0, + 20, + 'toggle-dropdown' + ); +} + +if($modx->hasPermission('edit_role')) { + $sitemenu['role_management_title'] = array( + 'role_management_title', + 'users', + '' . $_lang['role_management_title'], + 'index.php?a=86', + $_lang['role_management_title'], + '', + 'new_role,edit_role,delete_role', + 'main', + 0, + 30, + '' + ); +} + +if($modx->hasPermission('access_permissions')) { + $sitemenu['manager_permissions'] = array( + 'manager_permissions', + 'users', + '' . $_lang['manager_permissions'], + 'index.php?a=40', + $_lang['manager_permissions'], + '', + 'access_permissions', + 'main', + 0, + 40, + '' + ); +} + +if($modx->hasPermission('web_access_permissions')) { + $sitemenu['web_permissions'] = array( + 'web_permissions', + 'users', + '' . $_lang['web_permissions'], + 'index.php?a=91', + $_lang['web_permissions'], + '', + 'web_access_permissions', + 'main', + 0, + 50, + '' + ); +} + +// Tools Menu + +$sitemenu['refresh_site'] = array( + 'refresh_site', + 'tools', + '' . $_lang['refresh_site'], + 'index.php?a=26', + $_lang['refresh_site'], + '', + '', + 'main', + 0, + 5, + 'item-group', + array( + 'refresh_site_in_window' => array( + 'a', // tag + 'javascript:;', // href + 'btn btn-secondary', // class or btn-success + 'modx.popup({url:\'index.php?a=26\', title:\'' . $_lang['refresh_site'] . '\', icon: \'fa-recycle\', iframe: \'ajax\', selector: \'.tab-page>.container\', position: \'right top\', width: \'auto\', maxheight: \'50%\'})', // onclick + $_lang['refresh_site'], // title + '' // innerHTML + ) + ) +); + +$sitemenu['search'] = array( + 'search', + 'tools', + '' . $_lang['search'], + 'index.php?a=71', + $_lang['search'], + '', + '', + 'main', + 1, + 9, + '' +); + +if($modx->hasPermission('bk_manager')) { + $sitemenu['bk_manager'] = array( + 'bk_manager', + 'tools', + '' . $_lang['bk_manager'], + 'index.php?a=93', + $_lang['bk_manager'], + '', + 'bk_manager', + 'main', + 0, + 10, + '' + ); +} + +if($modx->hasPermission('remove_locks')) { + $sitemenu['remove_locks'] = array( + 'remove_locks', + 'tools', + '' . $_lang['remove_locks'], + 'javascript:modx.removeLocks();', + $_lang['remove_locks'], + '', + 'remove_locks', + '', + 0, + 20, + '' + ); +} + +if($modx->hasPermission('import_static')) { + $sitemenu['import_site'] = array( + 'import_site', + 'tools', + '' . $_lang['import_site'], + 'index.php?a=95', + $_lang['import_site'], + '', + 'import_static', + 'main', + 0, + 30, + '' + ); +} + +if($modx->hasPermission('export_static')) { + $sitemenu['export_site'] = array( + 'export_site', + 'tools', + '' . $_lang['export_site'], + 'index.php?a=83', + $_lang['export_site'], + '', + 'export_static', + 'main', + 1, + 40, + '' + ); +} + +$menu = $modx->invokeEvent("OnManagerMenuPrerender", array('menu' => $sitemenu)); +if(is_array($menu)) { + $newmenu = array(); + foreach($menu as $item){ + if(is_array(unserialize($item))){ + $newmenu = array_merge($newmenu, unserialize($item)); + } + } + if(count($newmenu)> 0) $sitemenu = $newmenu; +} + +if(file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php')) { + include_once(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php'); +} else { + include_once(MODX_MANAGER_PATH . 'includes/menu.class.inc.php'); +} +$menu = new EVOmenu(); +$menu->Build($sitemenu, array( + 'outerClass' => 'nav', + 'innerClass' => 'dropdown-menu', + 'parentClass' => 'dropdown' +)); diff --git a/manager/frames/tree.php b/manager/frames/tree.php index 8c2a1bb582..0434b1c36c 100644 --- a/manager/frames/tree.php +++ b/manager/frames/tree.php @@ -27,7 +27,7 @@ hasPermission('edit_document')) { ?> - + hasPermission('assets_images')) { ?> diff --git a/manager/includes/default_config.php b/manager/includes/default_config.php index af48ce2d23..c695664fa3 100644 --- a/manager/includes/default_config.php +++ b/manager/includes/default_config.php @@ -105,3 +105,4 @@ $c['cache_default'] = '1'; $c['search_default'] = '1'; $c['group_tvs'] = 0; +$c['global_tabs'] = 0; diff --git a/manager/includes/lang/english.inc.php b/manager/includes/lang/english.inc.php index 1d69bdfd8e..e67041fd3e 100644 --- a/manager/includes/lang/english.inc.php +++ b/manager/includes/lang/english.inc.php @@ -383,6 +383,7 @@ $_lang["functionnotimpl"] = 'Sorry!'; $_lang["functionnotimpl_message"] = 'This function has not been implemented yet.'; $_lang["further_info"] = 'Further information'; +$_lang["global_tabs"] = 'Global Tabs'; $_lang["go"] = 'Go'; $_lang["group_access_permissions"] = 'User group access'; $_lang['group_tvs'] = 'Group TV'; @@ -1124,6 +1125,7 @@ $_lang["use_alias_path_title"] = 'Use Friendly URL alias path'; $_lang["use_editor_message"] = 'Enable editing with a Rich Text Editor (RTE). This setting applies to all Resources, but can be overridden in the User settings.'; $_lang["use_editor_title"] = 'Enable editor'; +$_lang["use_global_tabs"] = 'Use global Tabs'; $_lang["user"] = 'User'; $_lang["user_block"] = 'Blocked'; $_lang["user_blockedafter"] = 'Blocked After'; diff --git a/manager/includes/lang/russian-UTF8.inc.php b/manager/includes/lang/russian-UTF8.inc.php index 63a981ab3d..4bed7b1199 100644 --- a/manager/includes/lang/russian-UTF8.inc.php +++ b/manager/includes/lang/russian-UTF8.inc.php @@ -383,6 +383,7 @@ $_lang["functionnotimpl"] = 'Увы'; $_lang["functionnotimpl_message"] = 'Эта функция еще не используется данной версией EVO.'; $_lang["further_info"] = 'Подробная информация'; +$_lang["global_tabs"] = 'Глобальные вкладки'; $_lang["go"] = 'Перейти'; $_lang["group_access_permissions"] = 'Доступ групп пользователей'; $_lang['group_tvs'] = 'Группировать ТВ параметры'; @@ -1116,6 +1117,7 @@ $_lang["use_alias_path_title"] = 'Использовать вложенные URL:'; $_lang["use_editor_message"] = 'Хотите использовать HTML-редактор? Если вы привыкли писать HTML-теги вручную, отключите данную функцию. Имейте в виду, что эта настройка применяется ко всем ресурсам для всех менеджеров'; $_lang["use_editor_title"] = 'Использовать HTML-редактор:'; +$_lang["use_global_tabs"] = 'Использовать глобальные вкладки'; $_lang["user"] = 'Пользователь'; $_lang["user_block"] = 'Заблокирован'; $_lang["user_blockedafter"] = 'Заблокирован после'; diff --git a/manager/media/style/default/ajax.php b/manager/media/style/default/ajax.php index 35e9a48653..b943f91005 100644 --- a/manager/media/style/default/ajax.php +++ b/manager/media/style/default/ajax.php @@ -254,7 +254,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'onclick' => "modx.openWindow({url: 'index.php?a=22&id=" . $row['id'] . "'})" + 'url' => "index.php?a=22&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -270,7 +270,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_snippet'], - 'onclick' => "modx.openWindow({url: 'index.php?a=23&itemname=" . $name . "'})" + 'url' => "index.php?a=23&itemname=" . $name ) ); } @@ -292,7 +292,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'onclick' => "modx.openWindow({url: 'index.php?a=78&id=" . $row['id'] . "'})" + 'url' => "index.php?a=78&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -308,7 +308,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], - 'onclick' => "modx.openWindow({url: 'index.php?a=77&itemname=" . $name . "'})" + 'url' => "index.php?a=77&itemname=" . $name ) ); } @@ -329,7 +329,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'onclick' => "modx.openWindow({url: 'index.php?a=78&id=" . $row['id'] . "'})" + 'url' => "index.php?a=78&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -353,7 +353,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'onclick' => "modx.openWindow({url: 'index.php?a=22&id=" . $row['id'] . "'})" + 'url' => "index.php?a=22&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -369,11 +369,11 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], - 'onclick' => "modx.openWindow({url: 'index.php?a=77&itemname=" . $name . "'})" + 'url' => "index.php?a=77&itemname=" . $name ), 'item2' => array( 'innerHTML' => ' ' . $_lang['new_snippet'], - 'onclick' => "modx.openWindow({url: 'index.php?a=23&itemname=" . $name . "'})" + 'url' => "index.php?a=23&itemname=" . $name ) ); } @@ -441,7 +441,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'onclick' => "modx.openWindow({url: 'index.php?a=301&id=" . $row['id'] . "'})" + 'url' => "index.php?a=301&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -457,7 +457,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_tmplvars'], - 'onclick' => "modx.openWindow({url: 'index.php?a=300&itemname=" . $name . "'})" + 'url' => "index.php?a=300&itemname=" . $name ) ); } diff --git a/manager/media/style/default/css/mainmenu.css b/manager/media/style/default/css/mainmenu.css index 26a752b0d2..51142f0c4e 100644 --- a/manager/media/style/default/css/mainmenu.css +++ b/manager/media/style/default/css/mainmenu.css @@ -1,5 +1,5 @@ /* #mainMenu */ -#mainMenu { background-color: #1d2023; color: #8b9298; -webkit-box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); -moz-box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); } +#mainMenu { background-color: #1d2023; color: #8b9298; -webkit-box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); } #mainMenu.show { overflow: visible } #mainMenu.show + #tree::before, #mainMenu.show + #tree + #main::before { content: ""; position: absolute; z-index: 9999; left: 0; top: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, .1); } #mainMenu > .container { display: table; width: 100%; border-collapse: collapse } @@ -31,12 +31,12 @@ #mainMenu #settings.nav > li > ul { left: auto; right: 0 } #mainMenu .nav > li > ul > li { border-bottom: 1px solid rgba(0, 0, 0, 0.05); margin-bottom: -1px; } #mainMenu .nav > li > ul > li:last-child { border: none; margin-bottom: 0 } -#mainMenu .nav > li > ul > li.item-input { padding: 0.35em 0.5em; } +#mainMenu .nav > li > ul > li.item-input { padding: 0.375em 0.5em; } #mainMenu .nav > li > ul > li > a:first-child, #mainMenu .nav > li > ul > li > span { display: block; position: relative; padding: 0 2rem 0 1rem; line-height: 2.2rem; color: #444; text-decoration: none } #mainMenu .nav > li > ul > li.hover > a:first-child { color: #fff; background-color: #1976d2; } #mainMenu .nav > li > ul > li > span:first-child { padding: 0 1em; text-align: center; font-size: 0.875em; color: #aaa; } #mainMenu .nav > li > ul > li .fa { width: 1.3em; margin-right: 0.5em; font-size: .8rem; line-height: .8rem; text-align: center; vertical-align: baseline } -#mainMenu .nav > li > ul > li.selected a:first-child::before { content: ''; position: absolute; right: 0.25em; top: 0.25em; width: 0.5em; height: 0.5em; background-color: #ffc107; -webkit-border-radius: 50%; -moz-border-radius: 50%; border-radius: 50%; } +#mainMenu .nav > li > ul > li.selected a:first-child::before, #main .evo-tab-row .tab.changed::before { content: ''; position: absolute; right: 0.25em; top: 0.25em; width: 0.5em; height: 0.5em; background-color: #ffc107; -webkit-border-radius: 50%; border-radius: 50%; pointer-events: none } #mainMenu .nav > li > ul > li.toggle-dropdown > a::after { content: "\f105"; position: absolute; top: 0.6em; right: 0.6em; font: normal normal normal 1.2em/1 FontAwesome; } #mainMenu .nav > li > ul > li.disabled > a { opacity: 0.5; color: #7d2a24; } #mainMenu .nav > li > ul > li.locked > a { font-style: italic } diff --git a/manager/media/style/default/css/tabpane.css b/manager/media/style/default/css/tabpane.css index 0e3c3f254a..7f1ab7fa57 100644 --- a/manager/media/style/default/css/tabpane.css +++ b/manager/media/style/default/css/tabpane.css @@ -1,59 +1,106 @@ -/* [ Tabs ] */ -.tab-row { position: relative; z-index: 1; white-space: nowrap; padding: 0 1.5rem } -.tab-row::after, .tab-row-container::after { content: ""; position: absolute; z-index: 1; left: 0; right: 0; bottom: 0; height: 1px; background-color: #ddd } -.tab-row .tab { position: relative; display: inline-block; margin: 0; padding: 0 0.875rem; line-height: 2.7rem; height: 2.5rem; text-transform: uppercase; border: 1px solid rgba(0, 0, 0, 0); border-bottom: none; cursor: pointer; -webkit-user-select: none; user-select: none; } -.tab-row .tab, .tab-row .tab a { color: rgba(0, 0, 0, 0.6); font-size: 0.75rem } -.tab-row .tab.selected { z-index: 2; border-color: #ddd; background-color: #fff; color: #444; font-weight: 700 } -.tab-row .tab .fa { margin-right: 0.1em; font-size: 0.875rem } -/* tabs-container */ -.tab-row-container { height: 2.5rem; left: 0; overflow-y: hidden; padding: 0 1.5rem; position: relative; } -.tab-row-container .tab-row { z-index: 2; -webkit-overflow-scrolling: touch; overflow-x: auto; padding: 0 0 2rem; white-space: nowrap } -.tab-row-container .tab-row::after { display: none } -.tab-row-container > i { position: absolute; top: 0; height: 100%; text-align: center; font: normal normal normal 1.2rem/2.7rem FontAwesome; cursor: pointer; transition-duration: 0.2s; width: 1.5rem; } -.tab-row-container > i.prev { left: 0; } -.tab-row-container > i.next { right: 0; } -.tab-row-container > i.disable { font-size: 0.8rem; color: rgba(0, 0, 0, 0.2); pointer-events: none } -/* tab-page */ -.tab-page { clear: both; width: 100%; background-color: #fff; padding: 0; border: 0; border-radius: 0; box-shadow: 0 0 0.3rem 0 rgba(0, 0, 0, .1) } -.tab-page .tab-header, .sectionHeader { margin-top: 1em; padding: .5rem 1.25rem; letter-spacing: .03rem } -.tab-page .tab-header + .tab-header, .tab-page .sectionHeader + .sectionHeader { margin-top: 0; border-top: 1px solid #ccc; } -.tab-page > .tab-body .tab-header { padding-left: 0; padding-right: 0 } -.tab-page > .tab-header:first-child, .tab-page > .tab-body > .tab-header:first-child, .tab-page .sectionHeader:first-child, .tab-page > script + .sectionHeader, .sectionBody .tab-page > script + .tab-section { margin-top: 0 } -.tab-page > .tab-body { width: 100%; padding: 1.25rem; } -.tab-page > .tab-body > .tab-body, .tab-page .sectionBody { padding: 1rem 0; } -.tab-page > .tab-header + .tab-body, .tab-page > .tab-body .tab-header + .tab-body, .tab-page .sectionHeader + .sectionBody { padding-top: 1em; border-top: 1px solid rgba(0, 0, 0, 0.1); } -.tab-page > .tab-body::after { display: table; width: 100%; content: '' } -.tab-page .tab-body > .form-group:last-child, .tab-page .tab-body > .form-row:last-child, .tab-page .tab-body > p:last-child, .tab-page .tab-body > .form-group:last-child > p:last-child, .tab-page .sectionBody:last-child { margin-bottom: 0 } -.tab-page .tab-section, .tab-page .sectionHeader + .sectionBody { margin-top: 1.25rem; background-color: #fafafa; border: 1px solid #e0e0e0; border-radius: .1rem; } -.tab-page .tab-section:first-child, .tab-page .sectionHeader + .sectionBody, .tab-page .sectionBody ~ .sectionHeader { margin-top: 0 } -.tab-page .tab-section .tab-header, .tab-page .sectionHeader { margin-left: -1px; margin-right: -1px; padding-left: .5rem; padding-right: .5rem; background-color: #efeff6; border: 1px solid #e0e0e0; border-bottom: 2px solid #e0e0ec; } -.tab-page .tab-section .tab-header:first-child, .tab-page .sectionHeader { margin-top: 0; border-top: none } -.tab-page .tab-section .tab-header + .tab-header, .tab-page .tab-section .tab-body + .tab-header, .tab-page .sectionHeader { border-top: 1px solid #e0e0e0; } -.tab-page .tab-section .tab-body, .tab-page .sectionBody { padding: 1rem; } -.tab-page > .sectionHeader, .sectionBody .tab-page > .tab-section { margin-top: 1rem; margin-left: .25rem; margin-right: .25rem } -.tab-page .sectionBody { margin: 1rem .25rem; } -.tab-page .sectionHeader + .sectionBody { border-top-color: transparent; border-radius: 0 } -.tab-page > .tab-section .tab-pane { padding-top: 1.25rem } -.tab-page > .tab-pane { margin-left: -1.25rem; margin-right: -1.25rem } -.tab-page > .tab-pane > .tab-page { box-shadow: none; } -.tab-page > .tab-pane > .tab-page > .tab-body { padding-bottom: 0 } -/* tab-page-header collapse */ -.tab-page .tab-header[data-toggle="collapse"]::after { float: right; content: "\f107"; font-family: FontAwesome; font-size: 1rem; line-height: 1em; color: #777; cursor: pointer; transition-duration: .3s } -.tab-page .tab-header[data-toggle="collapse"].collapsed::after { transform: rotate(180deg) } -.tab-page .tab-header[data-toggle="collapse"]:hover::after { color: #333 } -/* old style */ -.sectionBody .tab-page { clear: both; width: 100%; background-color: #fff; padding: 0; border: 0; border-radius: 0; box-shadow: 0 0 0.3rem 0 rgba(0, 0, 0, .1) } -.sectionBody > .tab-pane > .tab-page { padding: 1.25rem; } -.tab-page > table { width: 100%; border-collapse: collapse } -.sectionBody .displayparams, .sectionBody .permissiongroup { margin-bottom: 0.15rem; background-color: #eee; border-collapse: separate; border-spacing: 1px; } -.sectionBody .displayparams th, .sectionBody .displayparams td { padding: 4px 4px; } -.sectionBody .displayparams thead td, .sectionBody .permissiongroup thead td { border-top: none; } -.sectionBody fieldset { background: none repeat scroll 0 0 #fdfdfd; border: 1px solid #ccc; padding: 1rem !important; } -.sectionBody legend { font-weight: 500; padding: 5px 1rem; background: #fff; border: 1px solid #ccc; -moz-box-shadow: 1px 1px 3px #ccc; -webkit-box-shadow: 1px 1px 3px #ccc; box-shadow: 1px 1px 3px #ccc; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } -.sectionBody fieldset h3 { font-size: 14px; color: #789; font-weight: 500; padding-bottom: 0; margin-bottom: 0; } -.showHideVisible { color: #333; margin: 0 1rem; padding: 5px 3px 5px; zoom: 1; font-weight: 500; text-shadow: 0 1px 0 #fff; } -.showHideVisible + .sectionBody { margin-top: -1px !important } -.sectionBody, .layerVisible { position: relative; } -.sectionBody > p:first-child { margin-left: 1rem; margin-right: 1rem } -.showHideVisible, .layerVisible { margin: 0 10px 4px; } -.sectionBody td, .sectionBody th { padding: 0.15rem 0.25rem; vertical-align: top; } +/* [ Tabs ] */ +.tab-row { position: relative; z-index: 1; white-space: nowrap; padding: 0 1.5rem } +.tab-row::after, .tab-row-container::after { content: ""; position: absolute; z-index: 1; left: 0; right: 0; bottom: 0; height: 1px; background-color: #ddd } +.tab-row .tab { position: relative; display: inline-block; margin: 0; padding: 0 0.875rem; line-height: 2.7rem; height: 2.5rem; text-transform: uppercase; border: 1px solid rgba(0, 0, 0, 0); border-bottom: none; cursor: pointer; -webkit-user-select: none; user-select: none; } +.tab-row .tab, .tab-row .tab a { color: rgba(0, 0, 0, 0.6); font-size: 0.75rem } +.tab-row .tab.selected { z-index: 2; border-color: #ddd; background-color: #fff; color: #444; font-weight: 700 } +.tab-row .tab .fa { margin-right: 0.1em; font-size: 0.875rem } +/* tabs-container */ +.tab-row-container { height: 2.5rem; left: 0; overflow-y: hidden; padding: 0 1.5rem; position: relative; z-index: 0 } +.tab-row-container .tab-row { z-index: 2; -webkit-overflow-scrolling: touch; overflow-x: auto; padding: 0 0 2rem; white-space: nowrap } +.tab-row-container .tab-row::after { display: none } +.tab-row-container > i { position: absolute; top: 0; height: 100%; text-align: center; font: normal normal normal 1.2rem/2.7rem FontAwesome; cursor: pointer; transition-duration: 0.2s; width: 1.5rem; } +.tab-row-container > i.prev { left: 0; } +.tab-row-container > i.next { right: 0; } +.tab-row-container > i.disable { font-size: 0.8rem; color: rgba(0, 0, 0, 0.2); pointer-events: none } +/* tab-page */ +.tab-page { clear: both; width: 100%; background-color: #fff; padding: 0; border: 0; border-radius: 0; box-shadow: 0 0 0.3rem 0 rgba(0, 0, 0, .1) } +.tab-page .tab-header, .sectionHeader { margin-top: 1em; padding: .5rem 1.25rem; letter-spacing: .03rem } +.tab-page .tab-header + .tab-header, .tab-page .sectionHeader + .sectionHeader { margin-top: 0; border-top: 1px solid #ccc; } +.tab-page > .tab-body .tab-header { padding-left: 0; padding-right: 0 } +.tab-page > .tab-header:first-child, .tab-page > .tab-body > .tab-header:first-child, .tab-page .sectionHeader:first-child, .tab-page > script + .sectionHeader, .sectionBody .tab-page > script + .tab-section { margin-top: 0 } +.tab-page > .tab-body { width: 100%; padding: 1.25rem; } +.tab-page > .tab-body > .tab-body, .tab-page .sectionBody { padding: 1rem 0; } +.tab-page > .tab-header + .tab-body, .tab-page > .tab-body .tab-header + .tab-body, .tab-page .sectionHeader + .sectionBody { padding-top: 1em; border-top: 1px solid rgba(0, 0, 0, 0.1); } +.tab-page > .tab-body::after { display: table; width: 100%; content: '' } +.tab-page .tab-body > .form-group:last-child, .tab-page .tab-body > .form-row:last-child, .tab-page .tab-body > p:last-child, .tab-page .tab-body > .form-group:last-child > p:last-child, .tab-page .sectionBody:last-child { margin-bottom: 0 } +.tab-page .tab-section, .tab-page .sectionHeader + .sectionBody { margin-top: 1.25rem; background-color: #fafafa; border: 1px solid #e0e0e0; border-radius: .1rem; } +.tab-page .tab-section:first-child, .tab-page .sectionHeader + .sectionBody, .tab-page .sectionBody ~ .sectionHeader { margin-top: 0 } +.tab-page .tab-section .tab-header, .tab-page .sectionHeader { margin-left: -1px; margin-right: -1px; padding-left: .5rem; padding-right: .5rem; background-color: #efeff6; border: 1px solid #e0e0e0; border-bottom: 2px solid #e0e0ec; } +.tab-page .tab-section .tab-header:first-child, .tab-page .sectionHeader { margin-top: 0; border-top: none } +.tab-page .tab-section .tab-header + .tab-header, .tab-page .tab-section .tab-body + .tab-header, .tab-page .sectionHeader { border-top: 1px solid #e0e0e0; } +.tab-page .tab-section .tab-body, .tab-page .sectionBody { padding: 1rem; } +.tab-page > .sectionHeader, .sectionBody .tab-page > .tab-section { margin-top: 1rem; margin-left: .25rem; margin-right: .25rem } +.tab-page .sectionBody { margin: 1rem .25rem; } +.tab-page .sectionHeader + .sectionBody { border-top-color: transparent; border-radius: 0 } +.tab-page > .tab-section .tab-pane { padding-top: 1.25rem } +.tab-page > .tab-pane { margin-left: -1.25rem; margin-right: -1.25rem } +.tab-page > .tab-pane > .tab-page { box-shadow: none; } +.tab-page > .tab-pane > .tab-page > .tab-body { padding-bottom: 0 } +/* tab-page-header collapse */ +.tab-page .tab-header[data-toggle="collapse"]::after { float: right; content: "\f107"; font-family: FontAwesome; font-size: 1rem; line-height: 1em; color: #777; cursor: pointer; transition-duration: .3s } +.tab-page .tab-header[data-toggle="collapse"].collapsed::after { transform: rotate(180deg) } +.tab-page .tab-header[data-toggle="collapse"]:hover::after { color: #333 } +/* old style */ +.sectionBody .tab-page { clear: both; width: 100%; background-color: #fff; padding: 0; border: 0; border-radius: 0; box-shadow: 0 0 0.3rem 0 rgba(0, 0, 0, .1) } +.sectionBody > .tab-pane > .tab-page { padding: 1.25rem; } +.tab-page > table { width: 100%; border-collapse: collapse } +.sectionBody .displayparams, .sectionBody .permissiongroup { margin-bottom: 0.15rem; background-color: #eee; border-collapse: separate; border-spacing: 1px; } +.sectionBody .displayparams th, .sectionBody .displayparams td { padding: 4px 4px; } +.sectionBody .displayparams thead td, .sectionBody .permissiongroup thead td { border-top: none; } +.sectionBody fieldset { background: none repeat scroll 0 0 #fdfdfd; border: 1px solid #ccc; padding: 1rem !important; } +.sectionBody legend { font-weight: 500; padding: 5px 1rem; background: #fff; border: 1px solid #ccc; -webkit-box-shadow: 1px 1px 3px #ccc; box-shadow: 1px 1px 3px #ccc; -webkit-border-radius: 3px; border-radius: 3px; } +.sectionBody fieldset h3 { font-size: 14px; color: #789; font-weight: 500; padding-bottom: 0; margin-bottom: 0; } +.showHideVisible { color: #333; margin: 0 1rem; padding: 5px 3px 5px; font-weight: 500; text-shadow: 0 1px 0 #fff; } +.showHideVisible + .sectionBody { margin-top: -1px !important } +.sectionBody, .layerVisible { position: relative; } +.sectionBody > p:first-child { margin-left: 1rem; margin-right: 1rem } +.showHideVisible, .layerVisible { margin: 0 10px 4px; } +.sectionBody td, .sectionBody th { padding: 0.15rem 0.25rem; vertical-align: top; } +/* [ POPUPS ] */ +.evo-popup { display: none; position: absolute; z-index: 10500; box-shadow: 0 0.2rem 2rem rgba(0, 0, 0, 0.1); } +.evo-popup.animation { -webkit-transition: .25s; -o-transition: .25s; transition: .25s } +.evo-popup:hover { box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); } +.evo-popup.alert { margin: 0; height: 100%; border-color: rgba(0, 0, 0, 0.1); background-color: #fff; color: #444; border-radius: .15rem; } +.evo-popup.alert-dark { background-color: #202329; color: #ccc; } +.evo-popup.alert-dark hr { border-color: rgba(255, 255, 255, 0.5); } +.evo-popup.alert-dark .close { color: #fff; text-shadow: 0 0 #000; } +.evo-popup.alert-success { border-color: rgba(0, 0, 0, 0.1); background-color: #5cb85c; color: #fff; } +.evo-popup.alert-success hr { border-color: rgba(255, 255, 255, 0.5); } +.evo-popup.alert-info { border-color: rgba(0, 0, 0, 0.1); background-color: #1976d2; color: #fff; } +.evo-popup.alert-info hr { border-color: rgba(255, 255, 255, 0.5); } +.evo-popup.alert-warning { border-color: rgba(0, 0, 0, 0.1); background-color: #ffe082; color: #795548; } +.evo-popup.alert-warning hr { border-color: rgba(0, 0, 0, 0.1); } +.evo-popup.alert-danger { border-color: rgba(0, 0, 0, 0.1); background-color: #d9534f; color: #fff; } +.evo-popup.alert-danger hr { border-color: rgba(255, 255, 255, 0.5); } +.evo-popup.alert.evo-popup-iframe { padding: 0; border: none; background-color: #fafafa; overflow: hidden; } +.evo-popup .close { position: absolute; top: .3em; right: .3em; } +.evo-popup.alert.evo-popup-iframe .close { position: absolute; z-index: 9; opacity: 1; top: 0; right: 0; width: 1.5rem; height: 1.5rem; line-height: 1.4rem; color: #fff; background-color: #e5a2a0; text-align: center; font-weight: 100; } +.evo-popup.alert.evo-popup-iframe .close:hover { opacity: 1; background-color: #d9534f; } +.evo-popup.alert.evo-popup-iframe > div { position: relative; z-index: 1; } +.evo-popup.alert.evo-popup-iframe.changed { box-shadow: 0 0.2rem 2rem rgba(0, 0, 0, 0.1), 0 0 .2rem .2rem #ffc107 } +.evo-popup-overlay { position: absolute; z-index: 10499; left: 0; top: 0; right: 0; bottom: 0; background-color: rgba(255, 255, 255, 0.64); } +.dark .evo-popup.alert.evo-popup-iframe { background-color: #ecf0f1 } +/* [ EVO-TABS ] */ +.evo-tab-row { height: 1.875rem; padding: 0; background-color: #dfdfdf; } +.evo-tab-row:after { background-color: #cfd2d6 } +.evo-tab-row .tab-row #evo-tab-home.tab i { float: left; margin: 0; line-height: 2rem; } +.evo-tab-row .tab-row .tab { height: 1.875rem; line-height: 2rem; font-size: .8125rem; text-transform: none; border: none; border-right: 1px solid #cfd2d6; border-left: 1px solid #cfd2d6; margin-left: -1px; } +.evo-tab-row .tab-row .tab:hover { background-color: rgba(255, 255, 255, 0.5) } +.evo-tab-row .tab-row .tab.selected { font-weight: normal; background-color: #fafafa; } +.evo-tab-row .tab-row .tab small { margin-left: .25em } +.evo-tab-row .tab-row .tab:not(#evo-tab-home) i.help { display: none } +.evo-tab-row .tab-row .tab:not(#evo-tab-home) i { margin-right: .2em } +.evo-tab-row .tab-row .tab .tab-title { float: left; width: 5rem; line-height: 2rem; text-overflow: ellipsis; overflow: hidden; } +.evo-tab-row .tab-row .tab .tab-close { float: right; margin: 0 -.75rem 0 .5rem; padding: .25em; line-height: 1.3em; font-size: 1.3em; font-weight: 700; color: #9e9e9e } +.evo-tab-row .tab-row .tab .tab-close:hover { color: #d9534f } +.evo-tab-page { display: none; position: absolute; z-index: 1; left: 0; top: 2.3em; right: 0; bottom: 0; height: auto; box-shadow: none; background-color: #fafafa; overflow-y: auto } +.evo-tab-page iframe { position: absolute; width: 100%; height: 100%; background-color: #fafafa; overflow: hidden; } +/* dark */ +.dark .evo-popup-overlay { background-color: rgba(0, 0, 0, 0.3); } +.dark .evo-tab-row { background-color: #1a1c21; border-bottom: none; } +.dark .evo-tab-row:after { background-color: #1a1c21; } +.dark .evo-tab-row .tab-row .tab { color: #aaa; border-color: #2a2d33 } +.dark .evo-tab-row .tab-row .tab:hover { background-color: #2d3033 } +.dark .evo-tab-row .tab-row .tab.selected { background-color: #ecf0f1; color: #444 } +.dark .evo-tab-page, .dark .evo-tab-page iframe { background-color: #ecf0f1 } diff --git a/manager/media/style/default/css/tree.css b/manager/media/style/default/css/tree.css index 9b37143f40..511456d4fe 100644 --- a/manager/media/style/default/css/tree.css +++ b/manager/media/style/default/css/tree.css @@ -1,65 +1,65 @@ -/* tree */ -#treeloader { position: absolute; display: block; overflow: hidden; right: 0.3em; top: 0.3em; opacity: 0; visibility: hidden; -webkit-transition-duration: 0.5s; transition-duration: 0.5s } -#treeloader .fa { font-size: 1em; } -#treeloader.visible { opacity: 0.7; visibility: visible; -webkit-transition-duration: 0s; transition-duration: 0s } -.treeframebody { height: 100%; background-color: #fafafa; box-shadow: inset -0.15rem 0.15rem 0.45rem 0 rgba(0, 0, 0, 0.1); } -#treeMenu { overflow: hidden; padding: 0 0.1em; height: 2.3em; background-color: #dfdfdf; border-bottom: 1px solid #cfd2d6 } -#treeMenu .treeButton { display: inline-block; cursor: pointer; padding: 0 0.2em; height: 2.3em; line-height: 2.5em; white-space: nowrap; text-align: center; vertical-align: middle; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -#treeMenu .treeButton:hover:not(.disabled) { background-color: rgba(255, 255, 255, .5); cursor: pointer; -webkit-transition-duration: 0s; transition-duration: 0s } -#treeMenu .treeButton:not(.disabled):active { background-color: #d5d5d5 } -#treeMenu .treeButton .fa { width: 1.2em; height: 1.2em; line-height: 1.2em; font-size: 1.1em; } -#treeMenu .treeButton.disabled { color: #777; opacity: 0.5 } -#treeHolder { position: relative; z-index: 1; cursor: default; overflow: auto; height: 100%; max-height: calc(100% - 30px); white-space: nowrap } -#treeHolder .rootNode a { display: block; padding: 0.25em 0.5em; color: #333; cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -#treeHolder .rootNode a .fa { margin-right: 0.5em } -#treeRoot { float: left; width: 100%; color: #333; } -#treeRoot a { display: block; clear: both; text-decoration: none; padding: 0.1em 0 0.1em 2.2em; font-size: 1em; color: #333; cursor: default; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -#treeRoot a:hover:not(.empty), #treeRoot a.current { background-color: rgba(33, 150, 243, 0.1) } -#treeRoot a small { margin: 0 0.8em 0 0.2em } -#treeRoot a.selected, #treeRoot .dragenter > a { background-color: rgba(0, 0, 0, 0.1); } -#treeRoot .dragafter > a .indent::after, #treeRoot .dragbefore > a .indent::before { content: "\f0da"; display: block; position: absolute; right: 0.1em; bottom: -0.5em; height: 1em; font: normal normal normal 1em/1em FontAwesome; } -#treeRoot .dragbefore > a .indent::before { bottom: auto; top: -0.5em; } -#treeRoot a .title { padding: 0 0.2em; color: #0275d8; cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -#treeRoot a.deleted .title { color: #A52A2A; text-decoration: line-through; } -#treeRoot a.unpublished .title { color: #B68282; font-style: italic; } -#treeRoot a.hidemenu .title { color: #404040; } -#treeRoot a.protected { position: relative; opacity: .5; background-color: transparent !important; } -#treeRoot a .lockedResource { cursor: pointer; } -#treeRoot a .editResource { margin-left: 0.2em } -#treeRoot .indent { position: relative; z-index: -1; float: left; height: 1.5em; } -#treeRoot .indent i { float: left; height: 1.2em; width: 1.5em } -#treeRoot .empty { color: #aaa; cursor: default; } -#treeRoot .icon { cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -#treeRoot .icon:hover > .fa { color: #000 } -#treeRoot .toggle { float: left; margin: 1px 0.2em 1px -1.5em; width: 1.3em; height: 1.3em; line-height: 1.4em; text-align: center; vertical-align: top; cursor: pointer; border-radius: 50%; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -#treeRoot .toggle:hover { background-color: rgba(255, 255, 255, 0.5); } -#treeRoot .toggle .fa { margin: 0; width: auto; } -#treeRoot .fa, #treeHolder .rootNode .fa { margin-right: 1px; width: 1em; font-size: 1.1em; text-align: center; color: #565656; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -#treeRoot a[data-private="1"] .icon::after { position: relative; float: left; margin: .5em -1em 0 0; content: "\f023"; font-family: FontAwesome; font-size: 0.75em; color: #d9534f; } -#treeRoot .fa-file, #treeRoot .fa-file-o, #treeRoot .fa-file-code, #treeRoot .fa-file-code-o { } -#treeRoot .fa-folder, #treeRoot .fa-folder-open, #treeRoot .fa-folder-o, #treeRoot .fa-folder-open-o, #treeRoot .fa-exclamation-triangle { margin-top: 0.1em; text-align: left } -#treeRoot .fa-link { margin-right: 0; font-size: 0.8em } -#treeRoot #binFull { display: none } -/* treeRoot dark */ -.dark #treeMenu { background-color: rgba(0, 0, 0, 0.2); border-bottom: none; } -.dark #treeMenu .treeButton { color: #a9a9a9; } -.dark #treeMenu .treeButton:hover:not(.disabled) { background-color: #2d3033; color: #fff } -.dark #tree .treeframebody { background-color: #202329 } -.dark #treeHolder .rootNode a { color: #C5C5C5; } -.dark #treeHolder .rootNode a:hover { color: #eee } -.dark #treeRoot { color: #b3b3b3; } -.dark #treeRoot a { color: #b3b3b3; } -.dark #treeRoot a:hover:not(.empty), .dark #treeRoot a.current { background-color: rgba(255, 255, 255, 0.15); } -.dark #treeRoot a.selected, #treeRoot .dragenter > a { background-color: rgba(0, 142, 255, 0.19); } -.dark #treeRoot .dragafter > a::after, .dark #treeRoot .dragbefore > a::before { background-color: rgba(255, 255, 255, 0.25); } -.dark #treeRoot a .title { color: #7cb2dc; } -.dark #treeRoot a.hidemenu .title { color: #C5C5C5; } -.dark #treeRoot a.deleted .title { color: #A52A2A; } -.dark #treeRoot a.unpublished .title { color: #d0726b } -.dark #treeRoot .icon:hover > .fa { color: #fff } -.dark #treeRoot a .title:hover { color: #a2d4fb; } -.dark #treeRoot a.hidemenu .title:hover { color: #eee } -.dark #treeRoot a.unpublished .title:hover { color: #f38e86 } -.dark #treeRoot a.deleted .title:hover { color: #e23d3d } -.dark #treeRoot .toggle:hover { background-color: rgba(255, 255, 255, 0.19); } -.dark #treeRoot .fa, .dark #treeHolder .rootNode .fa { color: #bcbec0; } +/* tree */ +#treeloader { position: absolute; display: block; overflow: hidden; right: 0.3em; top: 0.3em; opacity: 0; visibility: hidden; -webkit-transition-duration: 0.5s; transition-duration: 0.5s } +#treeloader .fa { font-size: 1em; } +#treeloader.visible { opacity: 0.7; visibility: visible; -webkit-transition-duration: 0s; transition-duration: 0s } +.treeframebody { height: 100%; background-color: #fafafa; box-shadow: inset -0.15rem 0.15rem 0.45rem 0 rgba(0, 0, 0, 0.1); } +#treeMenu { overflow: hidden; padding: 0 0.1em; height: 1.875rem; background-color: #dfdfdf; border-bottom: 1px solid #cfd2d6 } +#treeMenu .treeButton { display: inline-block; cursor: pointer; padding: 0 0.2em; height: 1.875rem; line-height: 2rem; white-space: nowrap; text-align: center; vertical-align: middle; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeMenu .treeButton:hover:not(.disabled) { background-color: rgba(255, 255, 255, .5); cursor: pointer; -webkit-transition-duration: 0s; transition-duration: 0s } +#treeMenu .treeButton:not(.disabled):active { background-color: #d5d5d5 } +#treeMenu .treeButton .fa { width: 1.2em; height: 1.2em; line-height: 1.2em; font-size: 1.1em; } +#treeMenu .treeButton.disabled { color: #777; opacity: 0.5 } +#treeHolder { position: relative; z-index: 1; cursor: default; overflow: auto; height: 100%; max-height: calc(100% - 30px); white-space: nowrap } +#treeHolder .rootNode a { display: block; padding: 0.25em 0.5em; color: #333; cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeHolder .rootNode a .fa { margin-right: 0.5em } +#treeRoot { float: left; width: 100%; color: #333; } +#treeRoot a { display: block; clear: both; text-decoration: none; padding: 0.1em 0 0.1em 2.2em; font-size: 1em; color: #333; cursor: default; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeRoot a:hover:not(.empty), #treeRoot a.current { background-color: rgba(33, 150, 243, 0.1) } +#treeRoot a small { margin: 0 0.8em 0 0.2em } +#treeRoot a.selected, #treeRoot .dragenter > a { background-color: rgba(0, 0, 0, 0.1); } +#treeRoot .dragafter > a .indent::after, #treeRoot .dragbefore > a .indent::before { content: "\f0da"; display: block; position: absolute; right: 0.1em; bottom: -0.5em; height: 1em; font: normal normal normal 1em/1em FontAwesome; } +#treeRoot .dragbefore > a .indent::before { bottom: auto; top: -0.5em; } +#treeRoot a .title { padding: 0 0.2em; color: #0275d8; cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeRoot a.deleted .title { color: #A52A2A; text-decoration: line-through; } +#treeRoot a.unpublished .title { color: #B68282; font-style: italic; } +#treeRoot a.hidemenu .title { color: #404040; } +#treeRoot a.protected { position: relative; opacity: .5; background-color: transparent !important; } +#treeRoot a .lockedResource { cursor: pointer; } +#treeRoot a .editResource { margin-left: 0.2em } +#treeRoot .indent { position: relative; z-index: -1; float: left; height: 1.5em; } +#treeRoot .indent i { float: left; height: 1.2em; width: 1.5em } +#treeRoot .empty { color: #aaa; cursor: default; } +#treeRoot .icon { cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeRoot .icon:hover > .fa { color: #000 } +#treeRoot .toggle { float: left; margin: 1px 0.2em 1px -1.5em; width: 1.3em; height: 1.3em; line-height: 1.4em; text-align: center; vertical-align: top; cursor: pointer; border-radius: 50%; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeRoot .toggle:hover { background-color: rgba(255, 255, 255, 0.5); } +#treeRoot .toggle .fa { margin: 0; width: auto; } +#treeRoot .fa, #treeHolder .rootNode .fa { margin-right: 1px; width: 1em; font-size: 1.1em; text-align: center; color: #565656; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeRoot a[data-private="1"] .icon::after { position: relative; float: left; margin: .5em -1em 0 0; content: "\f023"; font-family: FontAwesome; font-size: 0.75em; color: #d9534f; } +#treeRoot .fa-file, #treeRoot .fa-file-o, #treeRoot .fa-file-code, #treeRoot .fa-file-code-o { } +#treeRoot .fa-folder, #treeRoot .fa-folder-open, #treeRoot .fa-folder-o, #treeRoot .fa-folder-open-o, #treeRoot .fa-exclamation-triangle { margin-top: 0.1em; text-align: left } +#treeRoot .fa-link { margin-right: 0; font-size: 0.8em } +#treeRoot #binFull { display: none } +/* treeRoot dark */ +.dark #treeMenu { background-color: rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.2); border-right-color: #2a2d33 } +.dark #treeMenu .treeButton { color: #a9a9a9; } +.dark #treeMenu .treeButton:hover:not(.disabled) { background-color: #2d3033; color: #fff } +.dark #tree .treeframebody { background-color: #202329 } +.dark #treeHolder .rootNode a { color: #C5C5C5; } +.dark #treeHolder .rootNode a:hover { color: #eee } +.dark #treeRoot { color: #b3b3b3; } +.dark #treeRoot a { color: #b3b3b3; } +.dark #treeRoot a:hover:not(.empty), .dark #treeRoot a.current { background-color: rgba(255, 255, 255, 0.15); } +.dark #treeRoot a.selected, #treeRoot .dragenter > a { background-color: rgba(0, 142, 255, 0.19); } +.dark #treeRoot .dragafter > a::after, .dark #treeRoot .dragbefore > a::before { background-color: rgba(255, 255, 255, 0.25); } +.dark #treeRoot a .title { color: #7cb2dc; } +.dark #treeRoot a.hidemenu .title { color: #C5C5C5; } +.dark #treeRoot a.deleted .title { color: #A52A2A; } +.dark #treeRoot a.unpublished .title { color: #d0726b } +.dark #treeRoot .icon:hover > .fa { color: #fff } +.dark #treeRoot a .title:hover { color: #a2d4fb; } +.dark #treeRoot a.hidemenu .title:hover { color: #eee } +.dark #treeRoot a.unpublished .title:hover { color: #f38e86 } +.dark #treeRoot a.deleted .title:hover { color: #e23d3d } +.dark #treeRoot .toggle:hover { background-color: rgba(255, 255, 255, 0.19); } +.dark #treeRoot .fa, .dark #treeHolder .rootNode .fa { color: #bcbec0; } diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index f38072d480..c487aa09a0 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -1,1583 +1,2173 @@ -(function($, w, d, u) { - 'use strict'; - modx.extended({ - frameset: 'frameset', - minWidth: 840, - isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), - init: function() { - if(!localStorage.getItem('MODX_widthSideBar')) { - localStorage.setItem('MODX_widthSideBar', this.config.tree_width) - } - this.tree.init(); - this.mainMenu.init(); - if(w.location.hash) { - w.main.frameElement.contentWindow.location = 'index.php' + w.location.hash.substring(1) - } - this.resizer.init(); - this.search.init(); - this.setLastClickedElement(0, 0); - if(this.config.session_timeout > 0) { - w.setInterval(this.keepMeAlive, 1000 * 60 * this.config.session_timeout); - } - if(modx.config.mail_check_timeperiod > 0 && modx.permission.messages) { - setTimeout('modx.updateMail(true)', 1000) - } - d.onclick = this.hideDropDown - }, - mainMenu: { - id: 'mainMenu', - init: function() { - //console.log('modx.mainMenu.init()'); - var $mm = $('#mainMenu'), timer; - $mm.on('click', 'a', function(e) { - if($(this).hasClass('dropdown-toggle')) { - if($mm.hasClass('show') && ($(this).hasClass('selected') || (!modx.isMobile && $(this).parent().hasClass('hover')))) { - $(this).removeClass('selected'); - $mm.removeClass('show') - } else { - $('.nav > li > a:not(:hover)').removeClass('selected'); - $(this).addClass('selected'); - $mm.addClass('show') - } - e.target.dataset.toggle = '#mainMenu' - } - if($(this).closest('ul').hasClass('dropdown-menu')) { - $('.nav > .active').removeClass('active'); - $('.nav li.selected').removeClass('selected'); - $(this).closest('.nav > li').addClass('active'); - $(this).parent().addClass('selected'); - if(this.offsetParent.id) { - $('#' + this.offsetParent.id.substr(7)).addClass('selected') - } - } - }).on('mouseenter', '.nav > li', function(e) { - $('.nav > li.hover:not(:hover)').removeClass('hover'); - $(this).addClass('hover') - }).on('mouseenter', '.nav > li li', function(e) { - var self = this, ul; - $('.nav > li li.hover:not(:hover)').removeClass('hover'); - $(this).addClass('hover'); - clearTimeout(timer); - if($(this).closest('.nav > li').find('.sub-menu').length) { - ul = $(this).closest('.nav > li').find('.sub-menu').get(0) - } else { - ul = $('').get(0); - $(this).closest('.nav > li').append(ul) - } - timer = setTimeout(function() { - $('.nav .sub-menu.show').removeClass('show'); - if($(self).hasClass('toggle-dropdown')) { - if(ul.id === 'parent_' + self.id) { - $(ul).addClass('show') - } else { - $(ul).removeClass('show'); - timer = setTimeout(function() { - var href = $('a', self).attr('href') && $('a', self).attr('target') === 'main' ? $('a', self).attr('href').split('?')[1] + '&elements=' + self.id : ''; - $.post(modx.MODX_SITE_URL + modx.MGR_DIR + '/media/style/' + modx.config.theme + '/ajax.php', href, function(data) { - if(data) { - $(ul).attr('id', 'parent_' + self.id).html(data); - var id = w.location.hash.substr(2).replace(/=/g, '_').replace(/&/g, '__'); - if(w.location.hash) { - var el = d.getElementById(id); - if(el) { - el.parentNode.classList.add('selected'); - d.getElementById(el.parentNode.parentNode.id.substr(7)).classList.add('selected') - } - $('li', ul).on('mouseenter', function(e) { - clearTimeout(timer); - $('.nav > li li.hover:not(:hover)').removeClass('hover'); - $(this).addClass('hover'); - $(self).addClass('hover'); - e.preventDefault(); - e.stopPropagation() - }); - $(ul).addClass('show'); - setTimeout(function() { - modx.mainMenu.search(href, ul) - }, 200) - } - } - }, 'html') - }, 85) - } - } else { - if($(ul).hasClass('open')) { - $(ul).removeClass('open'); - setTimeout(function() { - $(ul).remove() - }, 100) - } - } - }, 85); - e.preventDefault() - }) - }, - search: function(href, ul) { - var items, - input = ul.querySelector('input[name=filter]'), - index = -1; - if(input) { - input.focus(); - input.onkeyup = function(e) { - if(e.keyCode === 13 && ul.querySelector('.item.hover')) { - d.body.click(); - w.main.location.href = ul.querySelector('.item.hover').firstChild.href; - } else if(e.keyCode == 38 || e.keyCode == 40) { - input.selectionStart = input.value.length; - items = ul.querySelectorAll('.item'); - if(items.length) { - if(e.keyCode == 40) index++; - else index--; - if(index < 0) { - index = -1; - var el = ul.querySelector('.hover'); - if(el) el.classList.remove('hover'); - } else if(index > items.length - 1) { - index = items.length - 1 - } - if(index >= 0 && index < items.length) { - el = ul.querySelector('.hover'); - if(el) el.classList.remove('hover'); - items[index].classList.add('hover'); - } - } - } else { - $.post(modx.MODX_SITE_URL + modx.MGR_DIR + '/media/style/' + modx.config.theme + '/ajax.php', href + '&filter=' + input.value, function(data) { - index = -1; - $('.item', ul).remove(); - $(ul).append(data).on('mouseenter', '.item', function(e) { - $(this).addClass('hover').closest('ul').find('li:not(:hover)').removeClass('hover'); - e.stopPropagation() - }) - }, 'html') - } - } - } - } - }, - search: { - id: 'searchform', - idResult: 'searchresult', - idInput: 'searchid', - classResult: 'ajaxSearchResults', - classMask: 'mask', - timer: 0, - init: function() { - this.result = d.getElementById(this.idResult); - var t = this, - el = d.getElementById(this.idInput), - r = d.createElement('i'); - r.className = 'fa fa-refresh fa-spin fa-fw'; - el.parentNode.appendChild(r); - el.onkeyup = function(e) { - e.preventDefault(); - clearTimeout(t.timer); - if(el.value.length !== '' && el.value.length > 2) { - t.timer = setTimeout(function() { - var xhr = modx.XHR(); - xhr.open('GET', 'index.php?a=71&ajax=1&submitok=Search&searchid=' + el.value, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); - xhr.onload = function() { - if(this.status === 200) { - r.style.display = 'none'; - var div = d.createElement('div'); - div.innerHTML = this.responseText; - var o = div.getElementsByClassName(t.classResult)[0]; - if(o) { - if(o.innerHTML !== '') { - t.result.innerHTML = o.outerHTML; - t.open(); - t.result.onclick = function(e) { - if(e.target.tagName === 'I') { - modx.openWindow({ - title: e.target.parentNode.innerText, - id: e.target.parentNode.id, - url: e.target.parentNode.href - }); - return false - } - var p = (e.target.tagName === 'A' && e.target) || e.target.parentNode; - if(p.tagName === 'A') { - var el = t.result.querySelector('.selected'); - if(el) el.className = ''; - p.className = 'selected'; - if(modx.isMobile) t.close() - } - } - } else { - t.empty() - } - } else { - t.empty() - } - } - }; - xhr.onloadstart = function() { - r.style.display = 'block' - }; - xhr.onerror = function() { - console.warn(this.status) - }; - xhr.send() - }, 300) - } else { - t.empty() - } - }; - if(modx.isMobile) { - el.onblur = function() { - t.close() - } - } - el.onfocus = function() { - t.open() - }; - el.onclick = function() { - t.open() - }; - el.onmouseenter = function() { - t.open() - }; - this.result.onmouseover = function() { - t.open() - }; - this.result.onmouseout = function() { - t.close() - }; - d.getElementById(this.id).getElementsByClassName(this.classMask)[0].onmouseenter = function() { - t.open() - }; - d.getElementById(this.id).getElementsByClassName(this.classMask)[0].onmouseout = function() { - t.close() - } - }, - open: function() { - if(this.result.getElementsByClassName(this.classResult)[0]) { - this.result.classList.add('open') - } - }, - close: function() { - this.result.classList.remove('open') - }, - empty: function() { - this.result.classList.remove('open'); - this.result.innerHTML = '' - } - }, - main: { - id: 'main', - idFrame: 'mainframe', - as: null, - onbeforeonload: function() { - }, - onload: function() { - w.onerror = function() { - if(confirm(modx.lang.cm_unknown_error) === true) { - d.getElementById('mainloader').classList.remove('show') - } - }; - this.tabRow.init(); - this.stopWork(); - this.scrollWork(); - w.main.onclick = modx.hideDropDown; - w.main.oncontextmenu = this.oncontextmenu; - w.history.replaceState(null, null, '#' + w.main.frameElement.contentWindow.location.search) - //w.location.hash = w.main.frameElement.contentWindow.location.search; - }, - oncontextmenu: function(e) { - if(e.ctrlKey) return; - var el = e.target; - if(/modxtv|modxplaceholder|modxattributevalue|modxchunk|modxsnippet|modxsnippetnocache/i.test(el.className)) { - var id = Date.now(), - name = el.innerText.replace(/[\[|\]|{|}|\*||\#|\+|?|\!|&|=|`]/g, ''), - type = el.className.replace(/cm-modx/, ''), - n = !!name.replace(/^\d+$/, ''); - if(name && n) { - e.preventDefault(); - modx.post(modx.MODX_SITE_URL + modx.MGR_DIR + '/media/style/' + modx.config.theme + '/ajax.php', { - a: 'modxTagHelper', - name: name, - type: type - }, function(r) { - if(r) { - el.id = 'node' + id; - el.dataset.contextmenu = r; - modx.tree.showPopup(e, id, name) - } - }) - } - e.preventDefault() - } - }, - tabRow: { - init: function() { - var row = w.main.document.querySelector('.tab-pane > .tab-row'); - if(row) this.build(row); - }, - build: function(row) { - var rowContainer = d.createElement('div'), - sel = row.querySelector('.selected'); - rowContainer.className = 'tab-row-container'; - row.parentNode.insertBefore(rowContainer, row); - rowContainer.appendChild(row); - var p = d.createElement('i'); - p.className = 'fa fa-angle-left prev disable'; - p.onclick = function(e) { - e.stopPropagation(); - e.preventDefault(); - var sel = row.querySelector('.selected'); - if(sel.previousSibling) { - sel.previousSibling.click(); - modx.main.tabRow.scroll(row) - } - }; - rowContainer.appendChild(p); - var n = d.createElement('i'); - n.className = 'fa fa-angle-right next disable'; - n.onclick = function(e) { - e.stopPropagation(); - e.preventDefault(); - var sel = row.querySelector('.selected'); - if(sel.nextSibling) { - sel.nextSibling.click(); - modx.main.tabRow.scroll(row) - } - }; - rowContainer.appendChild(n); - setTimeout(function() { - sel = row.querySelector('.selected'); - modx.main.tabRow.scroll(row, sel); - w.main.onresize = function() { - modx.main.tabRow.scroll(row); - }; - if(sel) { - if(sel.previousSibling) p.classList.remove('disable'); - if(sel.nextSibling) n.classList.remove('disable'); - } - }, 100); - row.onclick = function(e) { - var sel = e.target.tagName === 'H2' ? e.target : (e.target.tagName === 'SPAN' ? e.target.parentNode : null); - if(sel) { - if(sel.previousSibling) this.parentNode.querySelector('i.prev').classList.remove('disable'); - else this.parentNode.querySelector('i.prev').classList.add('disable'); - if(sel.nextSibling) this.parentNode.querySelector('i.next').classList.remove('disable'); - else this.parentNode.querySelector('i.next').classList.add('disable'); - modx.main.tabRow.scroll(this, sel) - } - } - }, - scroll: function(row, sel) { - sel = sel || row.querySelector('.selected') || row.firstChild - var c = 0, - elms = row.childNodes, - p = row.offsetParent.querySelector('.prev'), - n = row.offsetParent.querySelector('.next'); - for(var i = 0; i < elms.length; i++) c += elms[i].offsetWidth; - if(row.scrollLeft > sel.offsetLeft) { - $(row).animate({ - scrollLeft: sel.offsetLeft - (sel.previousSibling ? 30 : 1) - }, 100) - } - if(sel.offsetLeft + sel.offsetWidth > row.offsetWidth + row.scrollLeft) { - $(row).animate({ - scrollLeft: (sel.offsetLeft - row.offsetWidth + sel.offsetWidth) + (sel.nextSibling ? 30 : 0) - }, 100) - } - if(c > row.offsetWidth) { - this.drag(row) - } - }, - drag: function(row) { - row.onmousedown = function(e) { - if(e.button === 0) { - e.preventDefault(); - var x = e.clientX, - f = row.scrollLeft; - w.main.document.body.focus(); - this.onmousemove = w.main.document.onmousemove = function(e) { - if(Math.abs(e.clientX - x) > 5) { - e.stopPropagation(); - row.scrollLeft = f - (e.clientX - x); - w.main.document.body.classList.add('drag') - } - }; - this.onmouseup = w.main.document.onmouseup = function(e) { - e.stopPropagation(); - row.onmousemove = null; - w.main.document.onmousemove = null; - w.main.document.body.classList.remove('drag') - } - } - } - } - }, - work: function() { - d.getElementById('mainloader').classList.add('show') - }, - stopWork: function() { - d.getElementById('mainloader').classList.remove('show') - }, - scrollWork: function() { - var a = w.main.frameElement.contentWindow, - b = localStorage.getItem('page_y'), - c = localStorage.getItem('page_url'); - if(b === u) { - localStorage.setItem('page_y', 0) - } - if(c === null) { - c = a.location.search.substring(1) - } - if((modx.main.getQueryVariable('a', c) === modx.main.getQueryVariable('a', a.location.search.substring(1))) && (modx.main.getQueryVariable('id', c) === modx.main.getQueryVariable('id', a.location.search.substring(1)))) { - a.scrollTo(0, b) - } - a.onscroll = function() { - if(a.pageYOffset > 0) { - localStorage.setItem('page_y', a.pageYOffset); - localStorage.setItem('page_url', a.location.search.substring(1)) - } - } - }, - getQueryVariable: function(v, q) { - var vars = q.split('&'); - for(var i = 0; i < vars.length; i++) { - var p = vars[i].split('='); - if(decodeURIComponent(p[0]) === v) { - return decodeURIComponent(p[1]) - } - } - } - }, - resizer: { - dragElement: null, - oldZIndex: 99, - newZIndex: 999, - left: modx.config.tree_width, - id: 'resizer', - switcher: 'hideMenu', - background: 'rgba(0, 0, 0, 0.1)', - mask: null, - init: function() { - modx.resizer.mask = d.createElement('div'); - modx.resizer.mask.id = 'mask_resizer'; - modx.resizer.mask.style.zIndex = modx.resizer.oldZIndex; - d.getElementById(modx.resizer.id).onmousedown = modx.resizer.onMouseDown; - d.getElementById(modx.resizer.id).onmouseup = modx.resizer.mask.onmouseup = modx.resizer.onMouseUp; - if(modx.isMobile) { - var x, y, tree = d.getElementById('tree'), h = tree.offsetWidth; - d.getElementById('frameset').appendChild(modx.resizer.mask); - w.addEventListener('touchstart', function(e) { - x = e.changedTouches[0].clientX; - y = e.changedTouches[0].clientY; - this.swipe = ''; - this.sidebar = !d.body.classList.contains('sidebar-closed'); - }, false); - w.addEventListener('touchmove', function(e) { - var touch = e.changedTouches[0]; - tree.style.transition = 'none'; - tree.style.WebkitTransition = 'none'; - modx.resizer.mask.style.transition = 'none'; - modx.resizer.mask.style.WebkitTransition = 'none'; - modx.resizer.mask.style.visibility = 'visible'; - var ax = touch.clientX - x; - var ay = touch.clientY - y; - if(Math.abs(ax) > Math.abs(ay)) { - if(ax < 0 && this.sidebar) { - if(Math.abs(ax) > h) ax = -h; - tree.style.transform = 'translate3d(' + ax + 'px, 0, 0)'; - tree.style.WebkitTransform = 'translate3d(' + ax + 'px, 0, 0)'; - modx.resizer.mask.style.opacity = (0.5 - (0.5 / -h) * ax).toFixed(2); - if(Math.abs(ax) > h / 3) this.swipe = 'left' - else this.swipe = 'right' - } else if(ax > 0 && !this.sidebar) { - if(Math.abs(ax) > h) ax = h; - tree.style.transform = 'translate3d(' + -(h - ax) + 'px, 0, 0)'; - tree.style.WebkitTransform = 'translate3d(' + -(h - ax) + 'px, 0, 0)'; - modx.resizer.mask.style.opacity = ((0.5 / h) * ax).toFixed(2); - if(Math.abs(ax) > h / 3) this.swipe = 'right' - else this.swipe = 'left' - } - } - }, false); - w.addEventListener('touchend', function(e) { - if(this.swipe === 'left') { - d.body.classList.add('sidebar-closed'); - modx.resizer.setWidth(0) - } - if(this.swipe === 'right') { - d.body.classList.remove('sidebar-closed'); - modx.resizer.setWidth(h) - } - tree.style.cssText = ''; - modx.resizer.mask.style.cssText = ''; - }, false) - } - }, - onMouseDown: function(e) { - e = e || w.event; - modx.resizer.dragElement = e.target !== null ? e.target : e.srcElement; - if((e.buttons === 1 || e.button === 0) && modx.resizer.dragElement.id === modx.resizer.id) { - modx.resizer.oldZIndex = modx.resizer.dragElement.style.zIndex; - modx.resizer.dragElement.style.zIndex = modx.resizer.newZIndex; - modx.resizer.dragElement.style.background = modx.resizer.background; - localStorage.setItem('MODX_widthSideBar', (modx.resizer.dragElement.offsetLeft > 0 ? modx.resizer.dragElement.offsetLeft : 0)); - d.body.appendChild(modx.resizer.mask); - d.onmousemove = modx.resizer.onMouseMove; - d.body.focus(); - d.body.classList.add('resizer_move'); - d.onselectstart = function() { - return false - }; - modx.resizer.dragElement.ondragstart = function() { - return false - }; - return false - } - }, - onMouseMove: function(e) { - e = e || w.event; - if(e.clientX > 0) { - modx.resizer.left = e.clientX - } else { - modx.resizer.left = 0 - } - modx.resizer.dragElement.style.left = modx.pxToRem(modx.resizer.left) + 'rem'; - d.getElementById('tree').style.width = modx.pxToRem(modx.resizer.left) + 'rem'; - d.getElementById('main').style.left = modx.pxToRem(modx.resizer.left) + 'rem'; - if(e.clientX < -2 || e.clientY < -2) { - modx.resizer.onMouseUp(e) - } - }, - onMouseUp: function(e) { - if(modx.resizer.dragElement !== null && e.button === 0 && modx.resizer.dragElement.id === modx.resizer.id) { - if(e.clientX > 0) { - d.body.classList.remove('sidebar-closed'); - modx.resizer.left = e.clientX - } else { - d.body.classList.add('sidebar-closed'); - modx.resizer.left = 0 - } - d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(modx.resizer.left); - modx.resizer.dragElement.style.zIndex = modx.resizer.oldZIndex; - modx.resizer.dragElement.style.background = ''; - modx.resizer.dragElement.ondragstart = null; - modx.resizer.dragElement = null; - d.body.classList.remove('resizer_move'); - d.body.removeChild(modx.resizer.mask); - d.onmousemove = null; - d.onselectstart = null - } - }, - toggle: function() { - if(modx.isMobile || w.innerWidth <= modx.minWidth) { - if(d.body.classList.contains('sidebar-closed')) { - d.body.classList.remove('sidebar-closed'); - localStorage.setItem('MODX_widthSideBar', 0); - d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(parseInt(d.getElementById('tree').offsetWidth)) - } else { - localStorage.setItem('MODX_widthSideBar', parseInt(d.getElementById('tree').offsetWidth)); - d.body.classList.add('sidebar-closed'); - d.cookie = 'MODX_widthSideBar=0' - } - } else { - var p = d.getElementById('tree').offsetWidth !== 0 ? 0 : (parseInt(localStorage.getItem('MODX_widthSideBar')) ? parseInt(localStorage.getItem('MODX_widthSideBar')) : modx.config.tree_width); - modx.resizer.setWidth(p) - } - }, - setWidth: function(a) { - if(a > 0) { - localStorage.setItem('MODX_widthSideBar', 0); - d.body.classList.remove('sidebar-closed') - } else { - localStorage.setItem('MODX_widthSideBar', parseInt(d.getElementById('tree').offsetWidth)); - d.body.classList.add('sidebar-closed') - } - d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(a); - d.getElementById('tree').style.width = modx.pxToRem(a) + 'rem'; - d.getElementById('resizer').style.left = modx.pxToRem(a) + 'rem'; - d.getElementById('main').style.left = modx.pxToRem(a) + 'rem' - }, - setDefaultWidth: function() { - modx.resizer.setWidth(modx.remToPx(modx.config.tree_width)) - } - }, - tree: { - ctx: null, - rpcNode: null, - itemToChange: null, - selectedObjectName: null, - selectedObject: 0, - selectedObjectDeleted: 0, - selectedObjectUrl: '', - drag: false, - init: function() { - this.restoreTree() - }, - draggable: function() { - if(modx.permission.dragndropdocintree) { - var els = d.querySelectorAll('#treeRoot a:not(.empty)'); - for(var i = 0; i < els.length; i++) { - els[i].onmousedown = this.onmousedown; - els[i].ondragstart = this.ondragstart; - els[i].ondragenter = this.ondragenter; - els[i].ondragover = this.ondragover; - els[i].ondragleave = this.ondragleave; - els[i].ondrop = this.ondrop; - } - } - }, - onmousedown: function(e) { - if(e.ctrlKey) { - this.parentNode.removeAttribute('draggable'); - return; - } else { - var roles = this.dataset.roles + (this.parentNode.parentNode.id !== 'treeRoot' ? this.parentNode.parentNode.previousSibling.dataset.roles : ''); - var draggable = (roles && modx.user.role !== 1 ? (roles.split(",").map(Number).indexOf(modx.user.role) > -1) : true); - if(draggable) { - this.parentNode.draggable = true; - modx.tree.itemToChange = this.parentNode.id; - this.parentNode.ondragstart = modx.tree.ondragstart - } else { - this.parentNode.draggable = false; - this.parentNode.ondragstart = function() { - return false - } - } - } - }, - ondragstart: function(e) { - e.dataTransfer.effectAllowed = "all"; - e.dataTransfer.dropEffect = "all"; - e.dataTransfer.setData("text", this.id.substr(4)); - }, - ondragenter: function(e) { - if(d.getElementById(modx.tree.itemToChange) === (this.parentNode.closest('#' + modx.tree.itemToChange) || this.parentNode)) { - this.parentNode.className = ''; - e.dataTransfer.effectAllowed = "none"; - e.dataTransfer.dropEffect = "none"; - modx.tree.drag = false; - } else { - this.parentNode.className = 'dragenter'; - e.dataTransfer.effectAllowed = "copy"; - e.dataTransfer.dropEffect = "copy"; - modx.tree.drag = true; - } - e.preventDefault(); - }, - ondragover: function(e) { - if(modx.tree.drag) { - var a = e.clientY; - var b = parseInt(this.getBoundingClientRect().top); - var c = (a - b); - if(c > this.offsetHeight / 1.51) { - //this.parentNode.className = 'dragafter'; - this.parentNode.classList.add('dragafter'); - this.parentNode.classList.remove('dragbefore'); - this.parentNode.classList.remove('dragenter'); - e.dataTransfer.effectAllowed = "link"; - e.dataTransfer.dropEffect = "link"; - } else if(c < this.offsetHeight / 3) { - //this.parentNode.className = 'dragbefore'; - this.parentNode.classList.add('dragbefore'); - this.parentNode.classList.remove('dragafter'); - this.parentNode.classList.remove('dragenter'); - e.dataTransfer.effectAllowed = "link"; - e.dataTransfer.dropEffect = "link"; - } else { - //this.parentNode.className = 'dragenter'; - this.parentNode.classList.add('dragenter'); - this.parentNode.classList.remove('dragafter'); - this.parentNode.classList.remove('dragbefore'); - e.dataTransfer.effectAllowed = "copy"; - e.dataTransfer.dropEffect = "copy"; - } - } else { - e.dataTransfer.effectAllowed = "none"; - e.dataTransfer.dropEffect = "none"; - modx.tree.drag = false; - } - e.preventDefault() - }, - ondragleave: function(e) { - this.parentNode.className = ''; - this.parentNode.removeAttribute('draggable'); - e.preventDefault() - }, - ondrop: function(e) { - var el = d.getElementById(modx.tree.itemToChange), - els = null, - id = modx.tree.itemToChange.substr(4), - parent = 0, - menuindex = [], - level = 0, - indent = el.firstChild.querySelector('.indent'), - i = 0; - indent.innerHTML = ''; - el.removeAttribute('draggable'); - if(this.parentNode.classList.contains('dragenter')) { - parent = parseInt(this.parentNode.id.substr(4)); - level = parseInt(this.dataset.level) + 1; - for(i = 0; i < level; i++) indent.innerHTML += ''; - if(this.nextSibling) { - if(this.nextSibling.innerHTML) { - this.nextSibling.appendChild(el) - } else { - el.parentNode.removeChild(el) - } - els = this.parentNode.lastChild.children; - for(i = 0; i < els.length; i++) menuindex[i] = els[i].id.substr(4); - } else { - el.parentNode.removeChild(el); - d.querySelector('#node' + parent + ' .icon').innerHTML = (parseInt(this.dataset.private) ? modx.style.tree_folder_secure : modx.style.tree_folder) - } - modx.tree.ondragupdate(this, id, parent, menuindex) - } - if(this.parentNode.classList.contains('dragafter')) { - parent = /node/.test(this.parentNode.parentNode.parentNode.id) ? parseInt(this.parentNode.parentNode.parentNode.id.substr(4)) : 0; - level = parseInt(this.dataset.level); - for(i = 0; i < level; i++) indent.innerHTML += ''; - this.parentNode.parentNode.insertBefore(el, this.parentNode.nextSibling); - els = this.parentNode.parentNode.children; - for(i = 0; i < els.length; i++) menuindex[i] = els[i].id.substr(4); - modx.tree.ondragupdate(this, id, parent, menuindex) - } - if(this.parentNode.classList.contains('dragbefore')) { - parent = /node/.test(this.parentNode.parentNode.parentNode.id) ? parseInt(this.parentNode.parentNode.parentNode.id.substr(4)) : 0; - level = parseInt(this.dataset.level); - for(i = 0; i < level; i++) indent.innerHTML += ''; - this.parentNode.parentNode.insertBefore(el, this.parentNode); - els = this.parentNode.parentNode.children; - for(i = 0; i < els.length; i++) menuindex[i] = els[i].id.substr(4); - modx.tree.ondragupdate(this, id, parent, menuindex) - } - this.parentNode.removeAttribute('class'); - this.parentNode.removeAttribute('draggable'); - e.preventDefault(); - }, - ondragupdate: function(a, id, parent, menuindex) { - var roles = a.dataset.roles + (a.parentNode.parentNode.id !== 'treeRoot' ? a.parentNode.parentNode.previousSibling.dataset.roles : ''); - if(!(roles && modx.user.role !== 1 ? (roles.split(",").map(Number).indexOf(modx.user.role) > -1) : true)) { - alert(modx.lang.error_no_privileges); - modx.tree.restoreTree(); - return; - } - modx.post(modx.MODX_SITE_URL + modx.MGR_DIR + '/media/style/' + modx.config.theme + '/ajax.php', { - a: 'movedocument', - id: id, - parent: parent, - menuindex: menuindex - }, function(r) { - if(r.errors) alert(r.errors); - modx.tree.restoreTree(); - }, 'json'); - var b = w.main.frameElement.contentWindow.location.search.substr(1); - if(parseInt(modx.main.getQueryVariable('a', b)) === 27 && parseInt(modx.main.getQueryVariable('id', b)) === parseInt(id)) { - var index = menuindex.indexOf(id), - elMenuIndex = w.main.document.querySelector('#documentPane input[name=menuindex]'), - elParent = w.main.document.querySelector('#documentPane input[name=parent]'), - elParentName = w.main.document.querySelector('#documentPane #parentName'); - if(elMenuIndex && index >= 0) elMenuIndex.value = index; - if(elParent && elParentName) { - elParent.value = parent; - elParentName.innerHTML = parent + ' (' + d.querySelector('#node' + parent + ' > a').dataset.titleEsc + ')' - } - } - }, - toggleTheme: function(e) { - var myCodeMirrors = w.main.myCodeMirrors, key; - if(d.body.classList.contains('dark')) { - d.body.classList.remove('dark'); - w.main.document.body.classList.remove('dark'); - d.cookie = 'MODX_themeColor='; - if(myCodeMirrors) { - for(key in myCodeMirrors) { - if(myCodeMirrors.hasOwnProperty(key)) { - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.darktheme) - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.defaulttheme) - } - } - } - } else { - d.body.classList.add('dark'); - w.main.document.body.classList.add('dark'); - d.cookie = 'MODX_themeColor=dark'; - if(myCodeMirrors) { - for(key in myCodeMirrors) { - if(myCodeMirrors.hasOwnProperty(key)) { - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.darktheme) - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.defaulttheme) - } - } - } - } - }, - toggleNode: function(e, id) { - e = e || w.event; - if(e.ctrlKey) return; - e.stopPropagation(); - var el = d.getElementById('node' + id).firstChild; - this.rpcNode = el.nextSibling; - var toggle = el.querySelector('.toggle'), - icon = el.querySelector('.icon'); - if(this.rpcNode.innerHTML === '') { - if(toggle) toggle.innerHTML = el.dataset.iconCollapsed; - icon.innerHTML = el.dataset.iconFolderOpen; - var rpcNodeText = this.rpcNode.innerHTML, - loadText = modx.lang.loading_doc_tree; - modx.openedArray[id] = 1; - if(rpcNodeText === "" || rpcNodeText.indexOf(loadText) > 0) { - var folderState = this.getFolderState(); - d.getElementById('treeloader').classList.add('visible'); - modx.get('index.php?a=1&f=nodes&indent=' + el.dataset.indent + '&parent=' + id + '&expandAll=' + el.dataset.expandall + folderState, function(r) { - modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) - } - this.saveFolderState() - } else { - if(toggle) toggle.innerHTML = el.dataset.iconExpanded; - icon.innerHTML = el.dataset.iconFolderClose; - delete modx.openedArray[id]; - this.rpcNode.style.overflow = 'hidden'; - $(this.rpcNode.firstChild).animate({ - marginTop: -this.rpcNode.offsetHeight + 'px' - }, 100, function() { - this.parentNode.innerHTML = ''; - }); - this.saveFolderState() - } - e.preventDefault() - }, - rpcLoadData: function(a) { - if(this.rpcNode !== null) { - this.rpcNode.innerHTML = typeof a === 'object' ? a.responseText : a; - this.rpcNode.loaded = true; - if(this.rpcNode.id !== 'treeRoot') { - this.rpcNode.style.overflow = 'hidden'; - this.rpcNode.firstChild.style.marginTop = -this.rpcNode.offsetHeight + 'px' - $(this.rpcNode.firstChild).animate({ - marginTop: 0 - }, 100); - } - var el; - d.getElementById('treeloader').classList.remove('visible'); - if(this.rpcNode.id === 'treeRoot') { - el = d.getElementById('binFull'); - if(el) this.showBin(true); - else this.showBin(false) - } - el = d.getElementById('mx_loginbox'); - if(el) { - this.rpcNode.style.overflow = 'hidden'; - $(this.rpcNode.firstChild).animate({ - marginTop: -this.rpcNode.offsetHeight + 'px' - }, 100, function() { - this.parentNode.innerHTML = ''; - }); - w.location = 'index.php' - } - } - }, - treeAction: function(e, id, title) { - if(e.ctrlKey) return; - var el = d.getElementById('node' + id).firstChild, - treepageclick = el.dataset.treepageclick, - showchildren = parseInt(el.dataset.showchildren), - openfolder = parseInt(el.dataset.openfolder); - title = title || (el.dataset && el.dataset.titleEsc); - if(tree.ca === "move") { - try { - this.setSelectedByContext(id); - w.main.setMoveValue(id, title) - } catch(oException) { - alert(modx.lang.unable_set_parent) - } - } - if(tree.ca === "open" || tree.ca === "") { - if(id === 0) { - w.main.location.href = "index.php?a=2" - } else { - var href = ''; - modx.setLastClickedElement(7, id); - if(!isNaN(treepageclick) && isFinite(treepageclick)) { - href = "index.php?a=" + treepageclick + "&r=1&id=" + id + (openfolder === 0 ? this.getFolderState() : '') - } else { - href = treepageclick; - } - if(openfolder === 2) { - if(showchildren !== 1) { - href = ''; - } - this.toggleNode(e, id) - } - if(href) { - if(e.shiftKey) { - w.getSelection().removeAllRanges(); - modx.openWindow(href); - this.restoreTree() - } else { - w.main.location.href = href; - if(modx.isMobile) modx.resizer.toggle() - } - } - } - var el = d.querySelector('#node' + id + '>.node'); - modx.tree.setSelected(el) - } - if(tree.ca === "parent") { - try { - this.setSelectedByContext(id); - w.main.setParent(id, title) - } catch(oException) { - alert(modx.lang.unable_set_parent) - } - } - if(tree.ca === "link") { - try { - this.setSelectedByContext(id); - w.main.setLink(id) - } catch(oException) { - alert(modx.lang.unable_set_link) - } - } - e.preventDefault(); - }, - showPopup: function(e, id, title) { - if(e.ctrlKey) return; - e.preventDefault(); - var tree = d.getElementById('tree'), - el = d.getElementById('node' + id) || e.target; - if(el.firstChild && el.firstChild.dataset && el.firstChild.dataset.contextmenu) { - el = el.firstChild; - } - if(el) { - if(el.dataset.contextmenu) { - e.target.dataset.toggle = '#contextmenu'; - modx.hideDropDown(e); - this.ctx = d.createElement('div'); - this.ctx.id = 'contextmenu'; - this.ctx.className = 'dropdown-menu'; - d.getElementById(modx.frameset).appendChild(this.ctx); - this.setSelectedByContext(id); - var dataJson = JSON.parse(el.dataset.contextmenu); - for(var key in dataJson) { - if(dataJson.hasOwnProperty(key)) { - var item = d.createElement('div'); - for(var k in dataJson[key]) { - if(dataJson[key].hasOwnProperty(k)) { - if(k.substring(0, 2) === 'on') { - var onEvent = dataJson[key][k]; - item[k] = function(onEvent) { - return function() { - eval(onEvent) - } - }(onEvent) - } else { - item[k] = dataJson[key][k] - } - } - } - if(key.indexOf('header') === 0) item.className += ' menuHeader'; - if(key.indexOf('item') === 0) item.className += ' menuLink'; - if(key.indexOf('seperator') === 0 || key.indexOf('separator') === 0) item.className += ' seperator separator'; - this.ctx.appendChild(item) - } - } - var bodyHeight = tree.offsetHeight - modx.config.menu_height; - var x = e.clientX > 0 ? e.clientX : e.pageX; - var y = e.clientY > 0 ? e.clientY : e.pageY; - if(e.view.name === "main") { - x += tree.offsetWidth - } else { - if(e.target.parentNode.parentNode.classList.contains('node')) { - x += 50; - } - } - if(x > e.view.innerWidth) { - x = e.view.innerWidth - this.ctx.offsetWidth; - } - if(y + this.ctx.offsetHeight / 2 > bodyHeight) { - y = bodyHeight - this.ctx.offsetHeight - 5 - } else if(y - this.ctx.offsetHeight / 2 < tree.offsetTop) { - y = tree.offsetTop + 5 - } else { - y = y - this.ctx.offsetHeight / 2 - } - this.itemToChange = id; - this.selectedObjectName = title; - this.dopopup(this.ctx, x + 10, y) - } else { - el = el.firstChild; - var ctx = d.getElementById('mx_contextmenu'); - e.target.dataset.toggle = '#mx_contextmenu'; - modx.hideDropDown(e); - this.setSelectedByContext(id); - var i4 = d.getElementById('item4'), - i5 = d.getElementById('item5'), - i8 = d.getElementById('item8'), - i9 = d.getElementById('item9'), - i10 = d.getElementById('item10'), - i11 = d.getElementById('item11'); - if(modx.permission.publish_document === 1) { - i9.style.display = 'block'; - i10.style.display = 'block'; - if(parseInt(el.dataset.published) === 1) i9.style.display = 'none'; - else i10.style.display = 'none' - } else { - i5.style.display = 'none' - } - if(modx.permission.delete_document === 1) { - i4.style.display = 'block'; - i8.style.display = 'block'; - if(parseInt(el.dataset.deleted) === 1) { - i4.style.display = 'none'; - i9.style.display = 'none'; - i10.style.display = 'none' - } else { - i8.style.display = 'none' - } - } - if(parseInt(el.dataset.isfolder) === 1) i11.style.display = 'block'; - else i11.style.display = 'none'; - var bodyHeight = tree.offsetHeight + tree.offsetTop; - var x = e.clientX > 0 ? e.clientX : e.pageX; - var y = e.clientY > 0 ? e.clientY : e.pageY; - if(y + ctx.offsetHeight / 2 > bodyHeight) { - y = bodyHeight - ctx.offsetHeight - 5 - } else if(y - ctx.offsetHeight / 2 < tree.offsetTop) { - y = tree.offsetTop + 5 - } else { - y = y - ctx.offsetHeight / 2 - } - if(e.target.parentNode.parentNode.classList.contains('node')) x += 50; - this.itemToChange = id; - this.selectedObjectName = title; - this.dopopup(ctx, x + 10, y) - } - e.stopPropagation() - } - }, - dopopup: function(el, a, b) { - if(this.selectedObjectName.length > 30) { - this.selectedObjectName = this.selectedObjectName.substr(0, 30) + "..." - } - var f = d.getElementById("nameHolder"); - f.innerHTML = this.selectedObjectName; - el.style.left = a + (modx.config.textdir ? '-190' : '') + "px"; - el.style.top = b + "px"; - setTimeout(function() { - el.classList.add('show') - }, 150) - }, - menuHandler: function(a) { - switch(a) { - case 1: - this.setActiveFromContextMenu(this.itemToChange); - w.main.location.href = "index.php?a=3&id=" + this.itemToChange; - break; - case 2: - this.setActiveFromContextMenu(this.itemToChange); - w.main.location.href = "index.php?a=27&r=1&id=" + this.itemToChange; - break; - case 3: - w.main.location.href = "index.php?a=4&pid=" + this.itemToChange; - break; - case 4: - if(this.selectedObjectDeleted) { - alert("'" + this.selectedObjectName + "' " + modx.lang.already_deleted) - } else if(confirm("'" + this.selectedObjectName + "'\n\n" + modx.lang.confirm_delete_resource) === true) { - w.main.location.href = "index.php?a=6&id=" + this.itemToChange - } - break; - case 5: - this.setActiveFromContextMenu(this.itemToChange); - w.main.location.href = "index.php?a=51&id=" + this.itemToChange; - break; - case 6: - w.main.location.href = "index.php?a=72&pid=" + this.itemToChange; - break; - case 7: - if(confirm(modx.lang.confirm_resource_duplicate) === true) { - w.main.location.href = "index.php?a=94&id=" + this.itemToChange - } - break; - case 8: - if(d.getElementById('node' + this.itemToChange).firstChild.dataset.deleted) { - if(confirm("'" + this.selectedObjectName + "' " + modx.lang.confirm_undelete) === true) { - w.main.location.href = "index.php?a=63&id=" + this.itemToChange - } - } else { - alert("'" + this.selectedObjectName + "'" + modx.lang.not_deleted) - } - break; - case 9: - if(confirm("'" + this.selectedObjectName + "' " + modx.lang.confirm_publish) === true) { - w.main.location.href = "index.php?a=61&id=" + this.itemToChange - } - break; - case 10: - if(this.itemToChange !== modx.config.site_start) { - if(confirm("'" + this.selectedObjectName + "' " + modx.lang.confirm_unpublish) === true) { - w.main.location.href = "index.php?a=62&id=" + this.itemToChange - } - } else { - alert('Document is linked to site_start variable and cannot be unpublished!') - } - break; - case 11: - w.main.location.href = "index.php?a=56&id=" + this.itemToChange; - break; - case 12: - w.open(d.getElementById('node' + this.itemToChange).firstChild.dataset.href, 'previeWin'); - break; - default: - alert('Unknown operation command.') - } - }, - setSelected: function(a) { - var el = d.querySelector('#treeRoot .current'); - if(el) el.classList.remove('current'); - if(a) a.classList.add('current') - }, - setActiveFromContextMenu: function(a) { - var el = d.querySelector('#node' + a + '>.node'); - if(el) this.setSelected(el) - }, - setSelectedByContext: function(a) { - var el = d.querySelector('#treeRoot .selected'); - if(el) el.classList.remove('selected'); - el = d.querySelector('#node' + a + '>.node'); - if(el) el.classList.add('selected'); - }, - setItemToChange: function() { - var a = w.main.frameElement.contentWindow, - b = a.location.search.substring(1); - if((parseInt(modx.main.getQueryVariable('a', b)) === 27 || parseInt(modx.main.getQueryVariable('a', b)) === 3) && modx.main.getQueryVariable('id', b)) { - this.itemToChange = parseInt(modx.main.getQueryVariable('id', b)) - } else { - this.itemToChange = null - } - }, - restoreTree: function() { - //console.log('modx.tree.restoreTree()'); - d.getElementById('treeloader').classList.add('visible'); - this.setItemToChange(); - this.rpcNode = d.getElementById('treeRoot'); - modx.get('index.php?a=1&f=nodes&indent=1&parent=0&expandAll=2&id=' + this.itemToChange, function(r) { - modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) - }, - expandTree: function() { - this.rpcNode = d.getElementById('treeRoot'); - d.getElementById('treeloader').classList.add('visible'); - modx.get('index.php?a=1&f=nodes&indent=1&parent=0&expandAll=1&id=' + this.itemToChange, function(r) { - modx.tree.rpcLoadData(r); - modx.tree.saveFolderState(); - modx.tree.draggable() - }) - }, - collapseTree: function() { - this.rpcNode = d.getElementById('treeRoot'); - d.getElementById('treeloader').classList.add('visible'); - modx.get('index.php?a=1&f=nodes&indent=1&parent=0&expandAll=0&id=' + this.itemToChange, function(r) { - modx.openedArray = []; - modx.tree.saveFolderState(); - modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) - }, - updateTree: function() { - this.rpcNode = d.getElementById('treeRoot'); - d.getElementById('treeloader').classList.add('visible'); - var a = d.sortFrm; - var b = 'a=1&f=nodes&indent=1&parent=0&expandAll=2&dt=' + a.dt.value + '&tree_sortby=' + a.sortby.value + '&tree_sortdir=' + a.sortdir.value + '&tree_nodename=' + a.nodename.value + '&id=' + this.itemToChange + '&showonlyfolders=' + a.showonlyfolders.value; - modx.get('index.php?' + b, function(r) { - modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) - }, - getFolderState: function() { - var a; - if(modx.openedArray !== [0]) { - a = "&opened="; - for(var key in modx.openedArray) { - if(modx.openedArray[key]) { - a += key + "|" - } - } - } else { - a = "&opened=" - } - return a - }, - saveFolderState: function() { - modx.get('index.php?a=1&f=nodes&savestateonly=1' + this.getFolderState()) - }, - showSorter: function(e) { - e = e || w.event; - var el = d.getElementById('floater'); - e.target.dataset.toggle = '#floater'; - el.classList.toggle('show'); - el.onclick = function(e) { - e.stopPropagation() - } - }, - emptyTrash: function() { - if(confirm(modx.lang.confirm_empty_trash) === true) { - w.main.location.href = "index.php?a=64" - } - }, - showBin: function(a) { - var el = d.getElementById('treeMenu_emptytrash'); - if(el) { - if(a) { - el.title = modx.lang.empty_recycle_bin; - el.classList.remove('disabled'); - el.innerHTML = modx.style.empty_recycle_bin; - el.onclick = function() { - modx.tree.emptyTrash() - } - } else { - el.title = modx.lang.empty_recycle_bin_empty; - el.classList.add('disabled'); - el.innerHTML = modx.style.empty_recycle_bin_empty; - el.onclick = null - } - } - }, - unlockElement: function(a, b, c) { - var m = modx.lockedElementsTranslation.msg.replace('[+id+]', b).replace('[+element_type+]', modx.lockedElementsTranslation['type' + a]); - if(confirm(m) === true) { - modx.get('index.php?a=67&type=' + a + '&id=' + b, function(r) { - if(parseInt(r) === 1) c.parentNode.removeChild(c); - else alert(r) - }) - } - }, - resizeTree: function() { - }, - reloadElementsInTree: function() { - modx.get('index.php?a=1&f=tree', function(r) { - savePositions(); - var div = d.createElement('div'); - div.innerHTML = r; - var tabs = div.getElementsByClassName('tab-page'); - var el, p; - for(var i = 0; i < tabs.length; i++) { - if(tabs[i].id !== 'tabDoc') { - el = tabs[i].getElementsByClassName('panel-group')[0]; - el.style.display = 'none'; - el.classList.add('clone'); - p = d.getElementById(tabs[i].id); - r = p.getElementsByClassName('panel-group')[0]; - p.insertBefore(el, r) - } - } - setRememberCollapsedCategories(); - for(var i = 0; i < tabs.length; i++) { - if(tabs[i].id !== 'tabDoc') { - el = d.getElementById(tabs[i].id).getElementsByClassName('panel-group')[1]; - el.remove(); - el = d.getElementById(tabs[i].id).getElementsByClassName('panel-group')[0]; - el.classList.remove('clone'); - el.style.display = 'block' - } - } - loadPositions(); - for(var i = 0; i < tabIds.length; i++) { - initQuicksearch(tabIds[i] + '_search', tabIds[i]); - } - var at = d.querySelectorAll('#tree .accordion-toggle'); - for(var i = 0; i < at.length; i++) { - at[i].onclick = function(e) { - e.preventDefault(); - var thisItemCollapsed = $(this).hasClass("collapsed"); - if(e.shiftKey) { - var toggleItems = $(this).closest(".panel-group").find("> .panel .accordion-toggle"); - var collapseItems = $(this).closest(".panel-group").find("> .panel > .panel-collapse"); - if(thisItemCollapsed) { - toggleItems.removeClass("collapsed"); - collapseItems.collapse("show") - } else { - toggleItems.addClass("collapsed"); - collapseItems.collapse("hide") - } - toggleItems.each(function() { - var state = $(this).hasClass("collapsed") ? 1 : 0; - setLastCollapsedCategory($(this).data("cattype"), $(this).data("catid"), state) - }); - writeElementsInTreeParamsToStorage() - } else { - $(this).toggleClass("collapsed"); - $($(this).attr("href")).collapse("toggle"); - var state = thisItemCollapsed ? 0 : 1; - setLastCollapsedCategory($(this).data("cattype"), $(this).data("catid"), state); - writeElementsInTreeParamsToStorage() - } - } - } - }) - } - }, - setLastClickedElement: function(a, b) { - localStorage.setItem('MODX_lastClickedElement', '[' + parseInt(a) + ',' + parseInt(b) + ']') - }, - removeLocks: function() { - if(confirm(modx.lang.confirm_remove_locks) === true) { - w.main.location.href = "index.php?a=67" - } - }, - openCredits: function() { - w.main.location.href = "index.php?a=18"; - setTimeout('modx.main.stopWork()', 2000) - }, - keepMeAlive: function() { - modx.get('includes/session_keepalive.php?tok=' + d.getElementById('sessTokenInput').value + '&o=' + Math.random(), function(r) { - r = JSON.parse(r); - if(r.status !== 'ok') w.location.href = 'index.php?a=8' - }) - }, - updateMail: function(a) { - try { - if(a) { - this.post('index.php', { - updateMsgCount: true - }, function(r) { - var c = r.split(','), - el = d.getElementById('msgCounter'); - if(c[0] > 0) { - if(el) { - el.innerHTML = c[0]; - el.style.display = 'block' - } - } else { - if(el) el.style.display = 'none' - } - if(c[1] > 0) { - el = d.getElementById('newMail'); - if(el) { - el.innerHTML = '' + modx.style.email + modx.lang.inbox + ' (' + c[0] + ' / ' + c[1] + ')'; - el.style.display = 'block' - } - } - if(modx.config.mail_check_timeperiod > 0) setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod) - }) - } - } catch(oException) { - setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod) - } - }, - openWindow: function(a) { - if(typeof a !== 'object') { - a = { - "url": a - } - } - if(!a.width) a.width = parseInt(w.innerWidth * 0.9) + 'px'; - if(!a.height) a.height = parseInt(w.innerHeight * 0.8) + 'px'; - if(!a.left) a.left = parseInt(w.innerWidth * 0.05) + 'px'; - if(!a.top) a.top = parseInt(w.innerHeight * 0.1) + 'px'; - if(!a.title) a.title = Math.floor((Math.random() * 999999) + 1); - if(a.url) { - if(this.plugins.EVOmodal === 1) { - top.EVO.modal.show(a) - } else { - w.open(a.url, a.title, 'width=' + a.width + ',height=' + a.height + ',top=' + a.top + ',left=' + a.left + ',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no') - } - } - }, - getWindowDimension: function() { - var a = 0, - b = 0, - c = d.documentElement, - e = d.body; - if(typeof(w.innerWidth) === 'number') { - a = w.innerWidth; - b = w.innerHeight - } else if(c && (c.clientWidth || c.clientHeight)) { - a = c.clientWidth; - b = c.clientHeight - } else if(e && (e.clientWidth || e.clientHeight)) { - a = e.clientWidth; - b = e.clientHeight - } - return { - 'width': a, - 'height': b - } - }, - hideDropDown: function(e) { - e = e || w.event || w.main.event; - if(tree.ca === "open" || tree.ca === "") { - modx.tree.setSelectedByContext(); - } - if(modx.tree.ctx !== null) { - d.getElementById(modx.frameset).removeChild(modx.tree.ctx); - modx.tree.ctx = null - } - if(!(/dropdown\-item/.test(e.target.className)) - //&& !(e && ("click" === e.type && /form|label|input|textarea|select/i.test(e.target.tagName))) - ) { - var els = d.querySelectorAll('.dropdown'), - n = null, - t = e.target || e.target.parentNode; - if(t.dataset.toggle) n = d.querySelector(t.dataset.toggle); - else if(t.classList.contains('dropdown-toggle')) n = t.offsetParent; - for(var i = 0; i < els.length; i++) { - if(n !== els[i]) - els[i].classList.remove('show') - } - els = w.main.document.querySelectorAll('.dropdown'); - for(var i = 0; i < els.length; i++) { - if(n !== els[i]) - els[i].classList.remove('show') - } - } - }, - XHR: function() { - return ('XMLHttpRequest' in w) ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHTTP'); - }, - get: function(a, b, c) { - var x = this.XHR(); - x.open('GET', a, true); - x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); - if(c) x.responseType = c; - x.onload = function() { - if(this.status === 200 && typeof b === 'function') { - return b(this.response) - } - }; - x.send() - }, - post: function(a, b, c, t) { - var x = this.XHR(), - f = ''; - if(typeof b === 'function') { - t = c; - c = b; - } else if(typeof b === 'object') { - var e = [], - i = 0, - k; - for(k in b) { - if(b.hasOwnProperty(k)) e[i++] = k + '=' + b[k]; - } - f = e.join('&') - } else if(typeof b === 'string') { - f = b; - } - x.open('POST', a, true); - x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); - x.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest'); - if(t) x.responseType = t; - x.onload = function() { - if(this.readyState === 4 && c !== u) { - return c(this.response) - } - }; - x.send(f) - }, - pxToRem: function(a) { - return a / parseInt(w.getComputedStyle(d.documentElement).fontSize) - }, - remToPx: function(a) { - return a * parseInt(w.getComputedStyle(d.documentElement).fontSize) - } - }); - w.mainMenu = {}; - w.mainMenu.stopWork = function() { - modx.main.stopWork() - }; - w.mainMenu.work = function() { - modx.main.work() - }; - w.mainMenu.reloadtree = function() { - //console.log('mainMenu.reloadtree()'); - setTimeout('modx.tree.restoreTree()', 50) - }; - w.mainMenu.startrefresh = function(a) { - //console.log('mainMenu.startrefresh(' + a + ')'); - if(a === 1) { - modx.tree.restoreTree() - } - if(a === 2) { - modx.tree.restoreTree() - } - if(a === 9) { - modx.tree.restoreTree() - } - if(a === 10) { - w.location.href = "../" + modx.MGR_DIR - } - }; - w.mainMenu.startmsgcount = function(a, b, c) { - modx.updateMail(c) - }; - w.mainMenu.hideTreeFrame = function() { - modx.resizer.setWidth(0) - }; - w.mainMenu.defaultTreeFrame = function() { - modx.resizer.setDefaultWidth() - }; - w.tree = {}; - w.tree.ca = 'open'; - w.tree.document = document; - w.tree.saveFolderState = function() { - }; - w.tree.updateTree = function() { - //console.log('tree.updateTree()'); - modx.tree.updateTree() - }; - w.tree.restoreTree = function() { - //console.log('tree.restoreTree()'); - modx.tree.restoreTree() - }; - w.tree.reloadElementsInTree = function() { - //console.log('tree.reloadElementsInTree()'); - modx.tree.reloadElementsInTree() - }; - w.tree.resizeTree = function() { - //console.log('tree.resizeTree() off') - }; - w.onbeforeunload = function() { - var a = w.main.frameElement.contentWindow; - if(parseInt(modx.main.getQueryVariable('a', a.location.search.substring(1))) === 27) { - modx.get('index.php?a=67&type=7&id=' + modx.main.getQueryVariable('id', a.location.search.substring(1))); - } - }; - d.addEventListener('DOMContentLoaded', function() { - modx.init() - }) -}) -(typeof jQuery !== 'undefined' ? jQuery : '', window, document, undefined); - -function setLastClickedElement(a, b) { - modx.setLastClickedElement(a, b) -} - -function reloadElementsInTree() { - modx.tree.reloadElementsInTree() -} - -(function() { - if(!Element.prototype.closest) { - Element.prototype.closest = function(a) { - var b = this, - c, d; - ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'].some(function(fn) { - if(typeof document.body[fn] === 'function') { - c = fn; - return true - } - return false - }); - if(b && b[c](a)) return b; - while(b) { - d = b.parentElement; - if(d && d[c](a)) return d; - b = d - } - return null; - } - } -})(); +(function($, w, d, u) { + 'use strict'; + modx.extended({ + frameset: 'frameset', + minWidth: 840, + isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), + tabsTimer: 0, + popupTimer: 0, + init: function() { + if (!localStorage.getItem('MODX_widthSideBar')) { + localStorage.setItem('MODX_widthSideBar', this.config.tree_width) + } + //this.tree.init(); + this.mainMenu.init(); + if (w.location.hash) { + if (w.location.hash === '#?a=2') { + w.history.replaceState(null, d.title, modx.MODX_MANAGER_URL) + } else if (modx.main.getQueryVariable('a', w.location.hash.substring(2)) || modx.main.getQueryVariable('filemanager', w.location.hash.substring(2))) { + var url = modx.main.getQueryVariable('filemanager', w.location.hash.substring(2)) ? modx.MODX_MANAGER_URL + modx.main.getQueryVariable('filemanager', w.location.hash.substring(2)) + w.location.hash.replace('#?', '?') : w.location.href.replace('#?', '?'); + if (modx.config.global_tabs) { + modx.tabs({url: url, title: 'blank'}) + } else { + w.main.frameElement.src = url + } + } + } + this.resizer.init(); + this.search.init(); + if (this.config.session_timeout > 0) { + w.setInterval(this.keepMeAlive, 1000 * 60 * this.config.session_timeout); + } + if (modx.config.mail_check_timeperiod > 0 && modx.permission.messages) { + setTimeout('modx.updateMail(true)', 1000) + } + d.addEventListener('click', function(e) { + modx.hideDropDown(e); + if (modx.config.global_tabs && e.target && ((e.target.tagName === 'A' && e.target.target === 'main') || (e.target.parentNode.tagName === 'A' && e.target.parentNode.target === 'main'))) { + var a = e.target.tagName === 'A' && e.target || e.target.parentNode.tagName === 'A' && e.target.parentNode; + e.preventDefault(); + if (e.shiftKey) { + modx.openWindow({url: a.href}) + } else { + modx.tabs({url: a.href, title: a.innerHTML}) + } + } + }, false); + }, + mainMenu: { + id: 'mainMenu', + init: function() { + //console.log('modx.mainMenu.init()'); + var $mm = $('#mainMenu'), mm = d.getElementById('mainMenu'), timer; + $mm.on('click', 'a', function(e) { + if ($(this).hasClass('dropdown-toggle')) { + if ($mm.hasClass('show') && ($(this).hasClass('selected') || (!modx.isMobile && $(this).parent().hasClass('hover')))) { + $(this).removeClass('selected'); + $mm.removeClass('show') + } else { + $('.nav > li > a:not(:hover)').removeClass('selected'); + $(this).addClass('selected'); + $mm.addClass('show') + } + e.target.dataset.toggle = '#mainMenu' + } + if ($(this).closest('ul').hasClass('dropdown-menu')) { + $('.nav > .active').removeClass('active'); + $('.nav li.selected').removeClass('selected'); + $(this).closest('.nav > li').addClass('active'); + this.parentNode.classList.add('selected'); + if (this.offsetParent.id) { + d.getElementById(this.offsetParent.id.substr(7)).classList.add('selected') + } + } + }).on('mouseenter', '.nav > li', function() { + var els = mm.querySelectorAll('.nav > li.hover:not(:hover)'); + for (var i = 0; i < els.length; i++) { + els[i].classList.remove('hover'); + } + this.classList.add('hover') + }).on('mouseenter', '.nav > li li', function(e) { + var self = this, ul; + var els = mm.querySelectorAll('.nav > li li.hover:not(:hover)'); + for (var i = 0; i < els.length; i++) { + els[i].classList.remove('hover'); + } + this.classList.add('hover'); + clearTimeout(timer); + if (this.offsetParent.offsetParent.querySelector('.sub-menu')) { + ul = this.offsetParent.offsetParent.querySelector('.sub-menu') + } else { + ul = d.createElement('ul'); + ul.className = 'sub-menu dropdown-menu'; + ul.style.left = this.offsetWidth + 'px'; + this.parentNode.parentNode.appendChild(ul) + } + timer = setTimeout(function() { + if (d.querySelector('.nav .sub-menu.show')) { + d.querySelector('.nav .sub-menu.show').classList.remove('show') + } + if (self.classList.contains('toggle-dropdown')) { + if (ul.id === 'parent_' + self.id) { + ul.classList.add('show'); + } else { + ul.classList.remove('show'); + timer = setTimeout(function() { + var href = self.firstElementChild.href && self.firstElementChild.target === 'main' ? self.firstElementChild.href.split('?')[1] + '&elements=' + self.id : ''; + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', href, function(data) { + if (data) { + ul.id = 'parent_' + self.id; + ul.innerHTML = data; + var id = w.location.hash.substr(2).replace(/=/g, '_').replace(/&/g, '__'); + var el = d.getElementById(id); + if (el) { + el.parentNode.classList.add('selected'); + d.getElementById(el.parentNode.parentNode.id.substr(7)).classList.add('selected') + } + for (var i = 0; i < ul.children.length; i++) { + ul.children[i].onmouseenter = function(e) { + clearTimeout(timer); + this.offsetParent.querySelector('li.hover').classList.remove('hover'); + this.classList.add('hover'); + self.classList.add('hover'); + e.preventDefault(); + e.stopPropagation() + } + } + ul.classList.add('show'); + setTimeout(function() { + modx.mainMenu.search(href, ul) + }, 200) + } + }) + }, 85) + } + } else { + if (ul.classList.contains('open')) { + ul.classList.remove('open'); + setTimeout(function() { + ul.parentNode.removeChild(ul) + }, 100) + } + } + }, 85); + e.preventDefault() + }) + }, + search: function(href, ul) { + var items, + input = ul.querySelector('input[name=filter]'), + index = -1, + el = null; + if (input) { + input.focus(); + input.onkeyup = function(e) { + if (e.keyCode === 13 && ul.querySelector('.item.hover')) { + d.body.click(); + //w.main.location.href = ul.querySelector('.item.hover').firstChild.href; + el = ul.querySelector('.item.hover').firstChild; + modx.tabs({url: el.href, title: el.innerHTML}); + } else if (e.keyCode === 38 || e.keyCode === 40) { + input.selectionStart = input.value.length; + items = ul.querySelectorAll('.item'); + if (items.length) { + if (e.keyCode === 40) { + index++; + } else { + index--; + } + if (index < 0) { + index = -1; + el = ul.querySelector('.hover'); + if (el) el.classList.remove('hover'); + } else if (index > items.length - 1) { + index = items.length - 1 + } + if (index >= 0 && index < items.length) { + el = ul.querySelector('.hover'); + if (el) el.classList.remove('hover'); + items[index].classList.add('hover'); + } + } + } else { + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', href + '&filter=' + input.value, function(data) { + index = -1; + $('.item', ul).remove(); + $(ul).append(data).on('mouseenter', '.item', function(e) { + $(this).addClass('hover').closest('ul').find('li:not(:hover)').removeClass('hover'); + e.stopPropagation() + }) + }, 'html') + } + } + } + } + }, + search: { + id: 'searchform', + idResult: 'searchresult', + idInput: 'searchid', + classResult: 'ajaxSearchResults', + classMask: 'mask', + timer: 0, + init: function() { + this.result = d.getElementById(this.idResult); + var t = this, + el = d.getElementById(this.idInput), + r = d.createElement('i'); + r.className = 'fa fa-refresh fa-spin fa-fw'; + el.parentNode.appendChild(r); + if (modx.config.global_tabs) { + el.parentNode.onsubmit = function(e) { + e.preventDefault(); + this.target = 'mainsearch'; + modx.tabs({url: this.action, title: 'Search', name: 'mainsearch'}); + this.submit(); + } + } + el.onkeyup = function(e) { + e.preventDefault(); + clearTimeout(t.timer); + if (el.value.length !== '' && el.value.length > 2) { + t.timer = setTimeout(function() { + var xhr = modx.XHR(); + xhr.open('GET', modx.MODX_MANAGER_URL + '?a=71&ajax=1&submitok=Search&searchid=' + el.value, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); + xhr.onload = function() { + if (this.status === 200) { + r.style.display = 'none'; + var div = d.createElement('div'); + div.innerHTML = this.responseText; + var o = div.getElementsByClassName(t.classResult)[0]; + if (o) { + if (o.innerHTML !== '') { + t.result.innerHTML = o.outerHTML; + t.open(); + t.result.onclick = function(e) { + if (e.target.tagName === 'I') { + modx.openWindow({ + title: e.target.parentNode.innerText, + id: e.target.parentNode.id, + url: e.target.parentNode.href + }); + return false + } + var p = (e.target.tagName === 'A' && e.target) || e.target.parentNode; + if (p.tagName === 'A') { + var el = t.result.querySelector('.selected'); + if (el) el.className = ''; + p.className = 'selected'; + if (modx.isMobile) t.close() + } + } + } else { + t.empty() + } + } else { + t.empty() + } + } + }; + xhr.onloadstart = function() { + r.style.display = 'block' + }; + xhr.onerror = function() { + console.warn(this.status) + }; + xhr.send() + }, 300) + } else { + t.empty() + } + }; + if (modx.isMobile) { + el.onblur = function() { + t.close() + } + } + el.onfocus = function() { + t.open() + }; + el.onclick = function() { + t.open() + }; + el.onmouseenter = function() { + t.open() + }; + this.result.onmouseover = function() { + t.open() + }; + this.result.onmouseout = function() { + t.close() + }; + d.getElementById(this.id).getElementsByClassName(this.classMask)[0].onmouseenter = function() { + t.open() + }; + d.getElementById(this.id).getElementsByClassName(this.classMask)[0].onmouseout = function() { + t.close() + } + }, + open: function() { + if (this.result.getElementsByClassName(this.classResult)[0]) { + this.result.classList.add('open') + } + }, + close: function() { + this.result.classList.remove('open') + }, + empty: function() { + this.result.classList.remove('open'); + this.result.innerHTML = '' + } + }, + main: { + id: 'main', + idFrame: 'mainframe', + as: null, + onload: function(e) { + w.main = e.target.contentWindow; + modx.main.tabRow.init(); + modx.main.stopWork(); + modx.main.scrollWork(); + modx.tree.restoreTree(); + w.main.document.onclick = modx.hideDropDown; + w.main.document.oncontextmenu = modx.main.oncontextmenu; + w.history.replaceState(null, d.title, (w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search)); + }, + oncontextmenu: function(e) { + if (e.ctrlKey) return; + var el = e.target; + if (/modxtv|modxplaceholder|modxattributevalue|modxchunk|modxsnippet|modxsnippetnocache/i.test(el.className)) { + var id = Date.now(), + name = el.innerText.replace(/[\[|\]|{|}|\*||\#|\+|?|\!|&|=|`]/g, ''), + type = el.className.replace(/cm-modx/, ''), + n = !!name.replace(/^\d+$/, ''); + if (name && n) { + e.preventDefault(); + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', { + a: 'modxTagHelper', + name: name, + type: type + }, function(r) { + if (r) { + r = JSON.parse(r); + if (r.item.url) { + if (modx.config.global_tabs) { + r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'evo-tab-page-' + modx.urlToUid(w.location.hash) + '\'})}'; + } else { + r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'main\'})}'; + } + } + r = JSON.stringify(r); + el.id = 'node' + id; + el.dataset.contextmenu = r; + modx.tree.showPopup(e, id, name) + } + }) + } + e.preventDefault() + } + }, + tabRow: { + init: function() { + var row = w.main.document.querySelector('.tab-pane > .tab-row'); + if (row) this.build(row); + }, + build: function(row) { + var rowContainer = d.createElement('div'), + sel = row.querySelector('.selected'); + rowContainer.className = 'tab-row-container'; + row.parentNode.insertBefore(rowContainer, row); + rowContainer.appendChild(row); + var p = d.createElement('i'); + p.className = 'fa fa-angle-left prev disable'; + p.onclick = function(e) { + e.stopPropagation(); + e.preventDefault(); + var sel = row.querySelector('.selected'); + if (sel.previousSibling) { + sel.previousSibling.click(); + modx.main.tabRow.scroll(row) + } + }; + rowContainer.appendChild(p); + var n = d.createElement('i'); + n.className = 'fa fa-angle-right next disable'; + n.onclick = function(e) { + e.stopPropagation(); + e.preventDefault(); + var sel = row.querySelector('.selected'); + if (sel.nextSibling) { + sel.nextSibling.click(); + modx.main.tabRow.scroll(row) + } + }; + rowContainer.appendChild(n); + setTimeout(function() { + sel = row.querySelector('.selected'); + modx.main.tabRow.scroll(row, sel); + w.main.onresize = function() { + modx.main.tabRow.scroll(row); + }; + if (sel) { + if (sel.previousSibling) p.classList.remove('disable'); + if (sel.nextSibling) n.classList.remove('disable'); + } + }, 100); + row.onclick = function(e) { + var sel = e.target.tagName === 'H2' ? e.target : (e.target.tagName === 'SPAN' ? e.target.parentNode : null); + if (sel) { + if (sel.previousSibling) { + this.parentNode.querySelector('i.prev').classList.remove('disable'); + } else { + this.parentNode.querySelector('i.prev').classList.add('disable'); + } + if (sel.nextSibling) { + this.parentNode.querySelector('i.next').classList.remove('disable'); + } else { + this.parentNode.querySelector('i.next').classList.add('disable'); + } + modx.main.tabRow.scroll(this, sel) + } + } + }, + scroll: function(row, sel) { + sel = sel || row.querySelector('.selected') || row.firstChild + var c = 0, + elms = row.childNodes, + p = row.offsetParent.querySelector('.prev'), + n = row.offsetParent.querySelector('.next'); + for (var i = 0; i < elms.length; i++) { + c += elms[i].offsetWidth; + } + if (row.scrollLeft > sel.offsetLeft) { + $(row).animate({ + scrollLeft: sel.offsetLeft - (sel.previousSibling ? 30 : 1) + }, 100) + } + if (sel.offsetLeft + sel.offsetWidth > row.offsetWidth + row.scrollLeft) { + $(row).animate({ + scrollLeft: (sel.offsetLeft - row.offsetWidth + sel.offsetWidth) + (sel.nextSibling ? 30 : 0) + }, 100) + } + if (c > row.offsetWidth) { + this.drag(row) + } + }, + drag: function(row) { + row.onmousedown = function(e) { + if (e.button === 0) { + e.preventDefault(); + var x = e.clientX, + f = row.scrollLeft; + row.ownerDocument.body.focus(); + row.onmousemove = row.ownerDocument.onmousemove = function(e) { + if (Math.abs(e.clientX - x) > 5) { + e.stopPropagation(); + row.scrollLeft = f - (e.clientX - x); + row.ownerDocument.body.classList.add('drag') + } + }; + row.onmouseup = row.ownerDocument.onmouseup = function(e) { + e.stopPropagation(); + row.onmousemove = null; + row.ownerDocument.onmousemove = null; + row.ownerDocument.body.classList.remove('drag') + } + } + } + } + }, + work: function() { + d.getElementById('mainloader').classList.add('show') + }, + stopWork: function() { + d.getElementById('mainloader').classList.remove('show') + }, + scrollWork: function() { + var a = w.main.frameElement.contentWindow, + b = localStorage.getItem('page_y'), + c = localStorage.getItem('page_url'); + if (b === u) { + localStorage.setItem('page_y', 0) + } + if (c === null) { + c = a.location.search.substring(1) + } + if ((modx.main.getQueryVariable('a', c) === modx.main.getQueryVariable('a', a.location.search.substring(1))) && (modx.main.getQueryVariable('id', c) === modx.main.getQueryVariable('id', a.location.search.substring(1)))) { + a.scrollTo(0, b) + } + a.onscroll = function() { + if (a.pageYOffset > 0) { + localStorage.setItem('page_y', a.pageYOffset); + localStorage.setItem('page_url', a.location.search.substring(1)) + } + } + }, + getQueryVariable: function(v, q) { + var vars = q.split('&'); + for (var i = 0; i < vars.length; i++) { + var p = vars[i].split('='); + if (decodeURIComponent(p[0]) === v) { + return decodeURIComponent(p[1]) + } + } + } + }, + resizer: { + dragElement: null, + oldZIndex: 99, + newZIndex: 999, + left: modx.config.tree_width, + id: 'resizer', + switcher: 'hideMenu', + background: 'rgba(0, 0, 0, 0.1)', + mask: null, + init: function() { + modx.resizer.mask = d.createElement('div'); + modx.resizer.mask.id = 'mask_resizer'; + modx.resizer.mask.style.zIndex = modx.resizer.oldZIndex; + d.getElementById(modx.resizer.id).onmousedown = modx.resizer.onMouseDown; + d.getElementById(modx.resizer.id).onmouseup = modx.resizer.mask.onmouseup = modx.resizer.onMouseUp; + if (modx.isMobile) { + var x, y, tree = d.getElementById('tree'), h = tree.offsetWidth; + d.getElementById('frameset').appendChild(modx.resizer.mask); + w.addEventListener('touchstart', function(e) { + if (!(/tab|tab\-row|tab\-row\-container/.test(e.target.className || e.target.offsetParent.className))) { + x = e.changedTouches[0].clientX; + y = e.changedTouches[0].clientY; + this.swipe = true; + this.sidebar = !d.body.classList.contains('sidebar-closed'); + } else { + this.swipe = false; + } + }, false); + w.addEventListener('touchmove', function(e) { + var touch = e.changedTouches[0]; + tree.style.transition = 'none'; + tree.style.WebkitTransition = 'none'; + modx.resizer.mask.style.transition = 'none'; + modx.resizer.mask.style.WebkitTransition = 'none'; + modx.resizer.mask.style.visibility = 'visible'; + var ax = touch.clientX - x; + var ay = touch.clientY - y; + if ((Math.abs(ax) > Math.abs(ay)) && this.swipe) { + if (ax < 0 && this.sidebar) { + if (Math.abs(ax) > h) ax = -h; + tree.style.transform = 'translate3d(' + ax + 'px, 0, 0)'; + tree.style.WebkitTransform = 'translate3d(' + ax + 'px, 0, 0)'; + modx.resizer.mask.style.opacity = (0.5 - (0.5 / -h) * ax).toFixed(2); + if (Math.abs(ax) > h / 3) { + this.swipe = 'left' + } else { + this.swipe = 'right' + } + } else if (ax > 0 && !this.sidebar) { + if (Math.abs(ax) > h) ax = h; + tree.style.transform = 'translate3d(' + -(h - ax) + 'px, 0, 0)'; + tree.style.WebkitTransform = 'translate3d(' + -(h - ax) + 'px, 0, 0)'; + modx.resizer.mask.style.opacity = ((0.5 / h) * ax).toFixed(2); + if (Math.abs(ax) > h / 3) { + this.swipe = 'right' + } else { + this.swipe = 'left' + } + } + } + }, false); + w.addEventListener('touchend', function(e) { + if (this.swipe === 'left') { + d.body.classList.add('sidebar-closed'); + modx.resizer.setWidth(0) + } + if (this.swipe === 'right') { + d.body.classList.remove('sidebar-closed'); + modx.resizer.setWidth(h) + } + tree.style.cssText = ''; + modx.resizer.mask.style.cssText = ''; + }, false) + } + }, + onMouseDown: function(e) { + e = e || w.event; + modx.resizer.dragElement = e.target !== null ? e.target : e.srcElement; + if ((e.buttons === 1 || e.button === 0) && modx.resizer.dragElement.id === modx.resizer.id) { + modx.resizer.oldZIndex = modx.resizer.dragElement.style.zIndex; + modx.resizer.dragElement.style.zIndex = modx.resizer.newZIndex; + modx.resizer.dragElement.style.background = modx.resizer.background; + localStorage.setItem('MODX_widthSideBar', (modx.resizer.dragElement.offsetLeft > 0 ? modx.resizer.dragElement.offsetLeft : 0)); + d.body.appendChild(modx.resizer.mask); + d.onmousemove = modx.resizer.onMouseMove; + d.body.focus(); + d.body.classList.add('resizer_move'); + d.onselectstart = function() { + return false + }; + modx.resizer.dragElement.ondragstart = function() { + return false + }; + return false + } + }, + onMouseMove: function(e) { + e = e || w.event; + if (e.clientX > 0) { + modx.resizer.left = e.clientX + } else { + modx.resizer.left = 0 + } + modx.resizer.dragElement.style.left = modx.pxToRem(modx.resizer.left) + 'rem'; + d.getElementById('tree').style.width = modx.pxToRem(modx.resizer.left) + 'rem'; + d.getElementById('main').style.left = modx.pxToRem(modx.resizer.left) + 'rem'; + if (e.clientX < -2 || e.clientY < -2) { + modx.resizer.onMouseUp(e) + } + }, + onMouseUp: function(e) { + if (modx.resizer.dragElement !== null && e.button === 0 && modx.resizer.dragElement.id === modx.resizer.id) { + if (e.clientX > 0) { + d.body.classList.remove('sidebar-closed'); + modx.resizer.left = e.clientX + } else { + d.body.classList.add('sidebar-closed'); + modx.resizer.left = 0 + } + d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(modx.resizer.left); + modx.resizer.dragElement.style.zIndex = modx.resizer.oldZIndex; + modx.resizer.dragElement.style.background = ''; + modx.resizer.dragElement.ondragstart = null; + modx.resizer.dragElement = null; + d.body.classList.remove('resizer_move'); + d.body.removeChild(modx.resizer.mask); + d.onmousemove = null; + d.onselectstart = null + } + }, + toggle: function() { + if (modx.isMobile || w.innerWidth <= modx.minWidth) { + if (d.body.classList.contains('sidebar-closed')) { + d.body.classList.remove('sidebar-closed'); + localStorage.setItem('MODX_widthSideBar', 0); + d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(parseInt(d.getElementById('tree').offsetWidth)) + } else { + localStorage.setItem('MODX_widthSideBar', parseInt(d.getElementById('tree').offsetWidth)); + d.body.classList.add('sidebar-closed'); + d.cookie = 'MODX_widthSideBar=0' + } + } else { + var p = d.getElementById('tree').offsetWidth !== 0 ? 0 : (parseInt(localStorage.getItem('MODX_widthSideBar')) ? parseInt(localStorage.getItem('MODX_widthSideBar')) : modx.config.tree_width); + modx.resizer.setWidth(p) + } + }, + setWidth: function(a) { + if (a > 0) { + localStorage.setItem('MODX_widthSideBar', 0); + d.body.classList.remove('sidebar-closed') + } else { + localStorage.setItem('MODX_widthSideBar', parseInt(d.getElementById('tree').offsetWidth)); + d.body.classList.add('sidebar-closed') + } + d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(a); + d.getElementById('tree').style.width = modx.pxToRem(a) + 'rem'; + d.getElementById('resizer').style.left = modx.pxToRem(a) + 'rem'; + d.getElementById('main').style.left = modx.pxToRem(a) + 'rem' + }, + setDefaultWidth: function() { + modx.resizer.setWidth(modx.remToPx(modx.config.tree_width)) + } + }, + tree: { + ctx: null, + rpcNode: null, + itemToChange: null, + selectedObjectName: null, + selectedObject: 0, + selectedObjectDeleted: 0, + selectedObjectUrl: '', + drag: false, + init: function() { + this.restoreTree() + }, + draggable: function() { + if (modx.permission.dragndropdocintree) { + var els = d.querySelectorAll('#treeRoot a:not(.empty)'); + for (var i = 0; i < els.length; i++) { + els[i].onmousedown = this.onmousedown; + els[i].ondragstart = this.ondragstart; + els[i].ondragenter = this.ondragenter; + els[i].ondragover = this.ondragover; + els[i].ondragleave = this.ondragleave; + els[i].ondrop = this.ondrop; + } + } + }, + onmousedown: function(e) { + if (e.ctrlKey) { + this.parentNode.removeAttribute('draggable'); + return; + } else { + var roles = this.dataset.roles + (this.parentNode.parentNode.id !== 'treeRoot' ? this.parentNode.parentNode.previousSibling.dataset.roles : ''); + var draggable = (roles && modx.user.role !== 1 ? (roles.split(',').map(Number).indexOf(modx.user.role) > -1) : true); + if (draggable) { + this.parentNode.draggable = true; + modx.tree.itemToChange = this.parentNode.id; + this.parentNode.ondragstart = modx.tree.ondragstart + } else { + this.parentNode.draggable = false; + this.parentNode.ondragstart = function() { + return false + } + } + } + }, + ondragstart: function(e) { + e.dataTransfer.effectAllowed = 'all'; + e.dataTransfer.dropEffect = 'all'; + e.dataTransfer.setData('text', this.id.substr(4)); + }, + ondragenter: function(e) { + if (d.getElementById(modx.tree.itemToChange) === (this.parentNode.closest('#' + modx.tree.itemToChange) || this.parentNode)) { + this.parentNode.className = ''; + e.dataTransfer.effectAllowed = 'none'; + e.dataTransfer.dropEffect = 'none'; + modx.tree.drag = false; + } else { + this.parentNode.className = 'dragenter'; + e.dataTransfer.effectAllowed = 'copy'; + e.dataTransfer.dropEffect = 'copy'; + modx.tree.drag = true; + } + e.preventDefault(); + }, + ondragover: function(e) { + if (modx.tree.drag) { + var a = e.clientY; + var b = parseInt(this.getBoundingClientRect().top); + var c = (a - b); + if (c > this.offsetHeight / 1.51) { + //this.parentNode.className = 'dragafter'; + this.parentNode.classList.add('dragafter'); + this.parentNode.classList.remove('dragbefore'); + this.parentNode.classList.remove('dragenter'); + e.dataTransfer.effectAllowed = 'link'; + e.dataTransfer.dropEffect = 'link'; + } else if (c < this.offsetHeight / 3) { + //this.parentNode.className = 'dragbefore'; + this.parentNode.classList.add('dragbefore'); + this.parentNode.classList.remove('dragafter'); + this.parentNode.classList.remove('dragenter'); + e.dataTransfer.effectAllowed = 'link'; + e.dataTransfer.dropEffect = 'link'; + } else { + //this.parentNode.className = 'dragenter'; + this.parentNode.classList.add('dragenter'); + this.parentNode.classList.remove('dragafter'); + this.parentNode.classList.remove('dragbefore'); + e.dataTransfer.effectAllowed = 'copy'; + e.dataTransfer.dropEffect = 'copy'; + } + } else { + e.dataTransfer.effectAllowed = 'none'; + e.dataTransfer.dropEffect = 'none'; + modx.tree.drag = false; + } + e.preventDefault() + }, + ondragleave: function(e) { + this.parentNode.className = ''; + this.parentNode.removeAttribute('draggable'); + e.preventDefault() + }, + ondrop: function(e) { + var el = d.getElementById(modx.tree.itemToChange), + els = null, + id = modx.tree.itemToChange.substr(4), + parent = 0, + menuindex = [], + level = 0, + indent = el.firstChild.querySelector('.indent'), + i = 0; + indent.innerHTML = ''; + el.removeAttribute('draggable'); + if (this.parentNode.classList.contains('dragenter')) { + parent = parseInt(this.parentNode.id.substr(4)); + level = parseInt(this.dataset.level) + 1; + for (i = 0; i < level; i++) { + indent.innerHTML += ''; + } + if (this.nextSibling) { + if (this.nextSibling.innerHTML) { + this.nextSibling.appendChild(el) + } else { + el.parentNode.removeChild(el) + } + els = this.parentNode.lastChild.children; + for (i = 0; i < els.length; i++) { + menuindex[i] = els[i].id.substr(4); + } + } else { + el.parentNode.removeChild(el); + d.querySelector('#node' + parent + ' .icon').innerHTML = (parseInt(this.dataset.private) ? modx.style.tree_folder_secure : modx.style.tree_folder) + } + modx.tree.ondragupdate(this, id, parent, menuindex) + } + if (this.parentNode.classList.contains('dragafter')) { + parent = /node/.test(this.parentNode.parentNode.parentNode.id) ? parseInt(this.parentNode.parentNode.parentNode.id.substr(4)) : 0; + level = parseInt(this.dataset.level); + for (i = 0; i < level; i++) { + indent.innerHTML += ''; + } + this.parentNode.parentNode.insertBefore(el, this.parentNode.nextSibling); + els = this.parentNode.parentNode.children; + for (i = 0; i < els.length; i++) { + menuindex[i] = els[i].id.substr(4); + } + modx.tree.ondragupdate(this, id, parent, menuindex) + } + if (this.parentNode.classList.contains('dragbefore')) { + parent = /node/.test(this.parentNode.parentNode.parentNode.id) ? parseInt(this.parentNode.parentNode.parentNode.id.substr(4)) : 0; + level = parseInt(this.dataset.level); + for (i = 0; i < level; i++) { + indent.innerHTML += ''; + } + this.parentNode.parentNode.insertBefore(el, this.parentNode); + els = this.parentNode.parentNode.children; + for (i = 0; i < els.length; i++) { + menuindex[i] = els[i].id.substr(4); + } + modx.tree.ondragupdate(this, id, parent, menuindex) + } + this.parentNode.removeAttribute('class'); + this.parentNode.removeAttribute('draggable'); + e.preventDefault(); + }, + ondragupdate: function(a, id, parent, menuindex) { + var roles = a.dataset.roles + (a.parentNode.parentNode.id !== 'treeRoot' ? a.parentNode.parentNode.previousSibling.dataset.roles : ''); + if (!(roles && modx.user.role !== 1 ? (roles.split(',').map(Number).indexOf(modx.user.role) > -1) : true)) { + alert(modx.lang.error_no_privileges); + modx.tree.restoreTree(); + return; + } + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', { + a: 'movedocument', + id: id, + parent: parent, + menuindex: menuindex + }, function(r) { + if (r.errors) alert(r.errors); + modx.tree.restoreTree(); + }, 'json'); + var b = w.main.frameElement.contentWindow.location.search.substr(1); + if (parseInt(modx.main.getQueryVariable('a', b)) === 27 && parseInt(modx.main.getQueryVariable('id', b)) === parseInt(id)) { + var index = menuindex.indexOf(id), + elMenuIndex = w.main.document.querySelector('#documentPane input[name=menuindex]'), + elParent = w.main.document.querySelector('#documentPane input[name=parent]'), + elParentName = w.main.document.querySelector('#documentPane #parentName'); + if (elMenuIndex && index >= 0) elMenuIndex.value = index; + if (elParent && elParentName) { + elParent.value = parent; + elParentName.innerHTML = parent + ' (' + d.querySelector('#node' + parent + ' > a').dataset.titleEsc + ')' + } + } + }, + toggleTheme: function(e) { + var myCodeMirrors = w.main.myCodeMirrors, key; + if (d.body.classList.contains('dark')) { + d.body.classList.remove('dark'); + w.main.document.body.classList.remove('dark'); + d.cookie = 'MODX_themeColor='; + if (myCodeMirrors) { + for (key in myCodeMirrors) { + if (myCodeMirrors.hasOwnProperty(key)) { + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.darktheme); + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.defaulttheme) + } + } + } + } else { + d.body.classList.add('dark'); + w.main.document.body.classList.add('dark'); + d.cookie = 'MODX_themeColor=dark'; + if (myCodeMirrors) { + for (key in myCodeMirrors) { + if (myCodeMirrors.hasOwnProperty(key)) { + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.darktheme); + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.defaulttheme) + } + } + } + } + }, + toggleNode: function(e, id) { + e = e || w.event; + if (e.ctrlKey) return; + e.stopPropagation(); + var el = d.getElementById('node' + id).firstChild; + this.rpcNode = el.nextSibling; + var toggle = el.querySelector('.toggle'), + icon = el.querySelector('.icon'); + if (this.rpcNode.innerHTML === '') { + if (toggle) toggle.innerHTML = el.dataset.iconCollapsed; + icon.innerHTML = el.dataset.iconFolderOpen; + var rpcNodeText = this.rpcNode.innerHTML, + loadText = modx.lang.loading_doc_tree; + modx.openedArray[id] = 1; + if (rpcNodeText === '' || rpcNodeText.indexOf(loadText) > 0) { + var folderState = this.getFolderState(); + d.getElementById('treeloader').classList.add('visible'); + modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=' + el.dataset.indent + '&parent=' + id + '&expandAll=' + el.dataset.expandall + folderState, function(r) { + modx.tree.rpcLoadData(r); + modx.tree.draggable() + }) + } + this.saveFolderState() + } else { + if (toggle) toggle.innerHTML = el.dataset.iconExpanded; + icon.innerHTML = el.dataset.iconFolderClose; + delete modx.openedArray[id]; + this.rpcNode.style.overflow = 'hidden'; + $(this.rpcNode.firstChild).animate({ + marginTop: -this.rpcNode.offsetHeight + 'px' + }, 100, function() { + this.parentNode.innerHTML = ''; + }); + this.saveFolderState() + } + e.preventDefault() + }, + rpcLoadData: function(a) { + if (this.rpcNode !== null) { + var el; + this.rpcNode.innerHTML = typeof a === 'object' ? a.responseText : a; + this.rpcNode.loaded = true; + if (this.rpcNode.firstChild.tagName === 'DIV') { + if (this.rpcNode.id === 'treeRoot') { + el = d.getElementById('binFull'); + if (el) { + this.showBin(true); + } else { + this.showBin(false) + } + } else { + this.rpcNode.style.overflow = 'hidden'; + this.rpcNode.firstElementChild.style.marginTop = -this.rpcNode.offsetHeight + 'px' + $(this.rpcNode.firstChild).animate({ + marginTop: 0 + }, 100); + } + d.getElementById('treeloader').classList.remove('visible'); + } else { + el = d.getElementById('loginfrm'); + if (el) { + this.rpcNode.parentNode.removeChild(this.rpcNode); + w.location.href = modx.MODX_MANAGER_URL + } + } + } + }, + treeAction: function(e, id, title) { + if (e.ctrlKey) return; + var el = d.getElementById('node' + id).firstChild, + treepageclick = el.dataset.treepageclick, + showchildren = parseInt(el.dataset.showchildren), + openfolder = parseInt(el.dataset.openfolder); + title = title || (el.dataset && el.dataset.titleEsc); + if (tree.ca === 'move') { + try { + this.setSelectedByContext(id); + w.main.setMoveValue(id, title) + } catch (oException) { + alert(modx.lang.unable_set_parent) + } + } + if (tree.ca === 'open' || tree.ca === '') { + if (id === 0) { + href = '?a=2' + } else { + var href = ''; + if (!isNaN(treepageclick) && isFinite(treepageclick)) { + href = '?a=' + treepageclick + '&r=1&id=' + id + (openfolder === 0 ? this.getFolderState() : '') + } else { + href = treepageclick; + } + if (openfolder === 2) { + if (showchildren !== 1) { + href = ''; + } + this.toggleNode(e, id) + } + } + if (href) { + if (e.shiftKey) { + w.getSelection().removeAllRanges(); + modx.openWindow(href); + this.restoreTree() + } else { + modx.tabs({url: modx.MODX_MANAGER_URL + href, title: title + '(' + id + ')'}); + if (modx.isMobile) modx.resizer.toggle() + } + } + this.itemToChange = id; + this.setSelected(id) + } + if (tree.ca === 'parent') { + try { + this.setSelectedByContext(id); + w.main.setParent(id, title) + } catch (oException) { + alert(modx.lang.unable_set_parent) + } + } + if (tree.ca === 'link') { + try { + this.setSelectedByContext(id); + w.main.setLink(id) + } catch (oException) { + alert(modx.lang.unable_set_link) + } + } + e.preventDefault(); + }, + showPopup: function(e, id, title) { + if (e.ctrlKey) return; + e.preventDefault(); + var tree = d.getElementById('tree'), + el = d.getElementById('node' + id) || e.target; + if (el.firstChild && el.firstChild.dataset && el.firstChild.dataset.contextmenu) { + el = el.firstChild; + } + if (el) { + if (el.dataset.contextmenu) { + e.target.dataset.toggle = '#contextmenu'; + modx.hideDropDown(e); + this.ctx = d.createElement('div'); + this.ctx.id = 'contextmenu'; + this.ctx.className = 'dropdown-menu'; + d.getElementById(modx.frameset).appendChild(this.ctx); + this.setSelectedByContext(id); + var dataJson = JSON.parse(el.dataset.contextmenu); + for (var key in dataJson) { + if (dataJson.hasOwnProperty(key)) { + var item = d.createElement('div'); + for (var k in dataJson[key]) { + if (dataJson[key].hasOwnProperty(k)) { + if (k.substring(0, 2) === 'on') { + var onEvent = dataJson[key][k]; + item[k] = function(onEvent) { + return function() { + eval(onEvent) + } + }(onEvent) + } else { + item[k] = dataJson[key][k] + } + } + } + if (key.indexOf('header') === 0) item.className += ' menuHeader'; + if (key.indexOf('item') === 0) item.className += ' menuLink'; + if (key.indexOf('seperator') === 0 || key.indexOf('separator') === 0) item.className += ' seperator separator'; + this.ctx.appendChild(item) + } + } + var x = e.clientX > 0 ? e.clientX : e.pageX; + var y = e.clientY > 0 ? e.clientY : e.pageY; + e.view.position = e.view.frameElement ? e.view.frameElement.getBoundingClientRect() : e.target.offsetParent.getBoundingClientRect(); + if (e.view.frameElement) { + x += e.view.position.left; + y += e.view.frameElement.offsetParent.offsetTop + } else { + if (e.target.parentNode.parentNode.classList.contains('node')) { + x += 50; + } + } + if (x > e.view.position.width) { + x = e.view.position.width - this.ctx.offsetWidth; + } + if (y + this.ctx.offsetHeight / 2 > e.view.position.height) { + y = e.view.position.height - this.ctx.offsetHeight - 5 + } else if (y - this.ctx.offsetHeight / 2 < e.view.position.top) { + y = e.view.position.top + 5 + } else { + y = y - (this.ctx.offsetHeight / 2) + } + this.itemToChange = id; + this.selectedObjectName = title; + this.dopopup(this.ctx, x + 10, y) + } else { + el = el.firstChild; + var ctx = d.getElementById('mx_contextmenu'); + e.target.dataset.toggle = '#mx_contextmenu'; + modx.hideDropDown(e); + this.setSelectedByContext(id); + var i4 = d.getElementById('item4'), + i5 = d.getElementById('item5'), + i8 = d.getElementById('item8'), + i9 = d.getElementById('item9'), + i10 = d.getElementById('item10'), + i11 = d.getElementById('item11'); + if (modx.permission.publish_document === 1) { + i9.style.display = 'block'; + i10.style.display = 'block'; + if (parseInt(el.dataset.published) === 1) { + i9.style.display = 'none'; + } else { + i10.style.display = 'none' + } + } else { + i5.style.display = 'none' + } + if (modx.permission.delete_document === 1) { + i4.style.display = 'block'; + i8.style.display = 'block'; + if (parseInt(el.dataset.deleted) === 1) { + i4.style.display = 'none'; + i9.style.display = 'none'; + i10.style.display = 'none' + } else { + i8.style.display = 'none' + } + } + if (parseInt(el.dataset.isfolder) === 1) { + i11.style.display = 'block'; + } else { + i11.style.display = 'none'; + } + var bodyHeight = tree.offsetHeight + tree.offsetTop; + var x = e.clientX > 0 ? e.clientX : e.pageX; + var y = e.clientY > 0 ? e.clientY : e.pageY; + if (y + ctx.offsetHeight / 2 > bodyHeight) { + y = bodyHeight - ctx.offsetHeight - 5 + } else if (y - ctx.offsetHeight / 2 < tree.offsetTop) { + y = tree.offsetTop + 5 + } else { + y = y - ctx.offsetHeight / 2 + } + if (e.target.parentNode.parentNode.classList.contains('node')) x += 50; + this.itemToChange = id; + this.selectedObjectName = title; + this.dopopup(ctx, x + 10, y) + } + e.stopPropagation() + } + }, + dopopup: function(el, a, b) { + if (this.selectedObjectName.length > 30) { + this.selectedObjectName = this.selectedObjectName.substr(0, 30) + '...' + } + var f = d.getElementById('nameHolder'); + f.innerHTML = this.selectedObjectName; + el.style.left = a + (modx.config.textdir ? '-190' : '') + 'px'; + el.style.top = b + 'px'; + setTimeout(function() { + el.classList.add('show') + }, 150) + }, + menuHandler: function(a) { + switch (a) { + case 1: + this.setActiveFromContextMenu(this.itemToChange); + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=3&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + break; + case 2: + this.setActiveFromContextMenu(this.itemToChange); + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=27&r=1&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + break; + case 3: + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=4&pid=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + break; + case 4: + if (this.selectedObjectDeleted) { + alert('\'' + this.selectedObjectName + '\' ' + modx.lang.already_deleted) + } else if (confirm('\'' + this.selectedObjectName + '\'\n\n' + modx.lang.confirm_delete_resource) === true) { + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=6&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + } + break; + case 5: + this.setActiveFromContextMenu(this.itemToChange); + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=51&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + break; + case 6: + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=72&pid=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + break; + case 7: + if (confirm(modx.lang.confirm_resource_duplicate) === true) { + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=94&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + } + break; + case 8: + if (d.getElementById('node' + this.itemToChange).firstChild.dataset.deleted) { + if (confirm('\'' + this.selectedObjectName + '\' ' + modx.lang.confirm_undelete) === true) { + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=63&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + } + } else { + alert('\'' + this.selectedObjectName + '\'' + modx.lang.not_deleted) + } + break; + case 9: + if (confirm('\'' + this.selectedObjectName + '\' ' + modx.lang.confirm_publish) === true) { + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=61&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + } + break; + case 10: + if (this.itemToChange !== modx.config.site_start) { + if (confirm('\'' + this.selectedObjectName + '\' ' + modx.lang.confirm_unpublish) === true) { + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=62&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + } + } else { + alert('Document is linked to site_start variable and cannot be unpublished!') + } + break; + case 11: + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=56&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); + break; + case 12: + w.open(d.getElementById('node' + this.itemToChange).firstChild.dataset.href, 'previeWin'); + break; + default: + alert('Unknown operation command.') + } + }, + setSelected: function(a) { + var el = d.querySelector('#treeRoot .current'); + if (el) el.classList.remove('current'); + if (a) { + if (typeof a === 'number') { + var el = d.querySelector('#node' + a + '>.node'); + if (el) el.classList.add('current') + } else { + a.classList.add('current') + } + } + }, + setActiveFromContextMenu: function(a) { + var el = d.querySelector('#node' + a + '>.node'); + if (el) this.setSelected(el) + }, + setSelectedByContext: function(a) { + var el = d.querySelector('#treeRoot .selected'); + if (el) el.classList.remove('selected'); + el = d.querySelector('#node' + a + '>.node'); + if (el) el.classList.add('selected'); + }, + setItemToChange: function() { + var a = w.main.document && w.main.document.location.search.substring(1); + if (a && (parseInt(modx.main.getQueryVariable('a', a)) === 3 || parseInt(modx.main.getQueryVariable('a', a)) === 27 || parseInt(modx.main.getQueryVariable('a', a)) === 51 || parseInt(modx.main.getQueryVariable('a', a)) === 56)) { + this.itemToChange = parseInt(modx.main.getQueryVariable('id', a)) + } else { + this.itemToChange = null + } + this.setSelected(this.itemToChange) + }, + restoreTree: function() { + //console.log('modx.tree.restoreTree()'); + d.getElementById('treeloader').classList.add('visible'); + this.setItemToChange(); + this.rpcNode = d.getElementById('treeRoot'); + modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=2&id=' + this.itemToChange, function(r) { + modx.tree.rpcLoadData(r); + modx.tree.draggable() + }) + }, + expandTree: function() { + this.rpcNode = d.getElementById('treeRoot'); + d.getElementById('treeloader').classList.add('visible'); + modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=1&id=' + this.itemToChange, function(r) { + modx.tree.rpcLoadData(r); + modx.tree.saveFolderState(); + modx.tree.draggable() + }) + }, + collapseTree: function() { + this.rpcNode = d.getElementById('treeRoot'); + d.getElementById('treeloader').classList.add('visible'); + modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=0&id=' + this.itemToChange, function(r) { + modx.openedArray = []; + modx.tree.saveFolderState(); + modx.tree.rpcLoadData(r); + modx.tree.draggable() + }) + }, + updateTree: function() { + this.rpcNode = d.getElementById('treeRoot'); + d.getElementById('treeloader').classList.add('visible'); + var a = d.sortFrm; + var b = '?a=1&f=nodes&indent=1&parent=0&expandAll=2&dt=' + a.dt.value + '&tree_sortby=' + a.sortby.value + '&tree_sortdir=' + a.sortdir.value + '&tree_nodename=' + a.nodename.value + '&id=' + this.itemToChange + '&showonlyfolders=' + a.showonlyfolders.value; + modx.get(modx.MODX_MANAGER_URL + b, function(r) { + modx.tree.rpcLoadData(r); + modx.tree.draggable() + }) + }, + getFolderState: function() { + var a; + if (modx.openedArray !== [0]) { + a = '&opened='; + for (var key in modx.openedArray) { + if (modx.openedArray[key]) { + a += key + '|' + } + } + } else { + a = '&opened=' + } + return a + }, + saveFolderState: function() { + modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&savestateonly=1' + this.getFolderState()) + }, + showSorter: function(e) { + e = e || w.event; + var el = d.getElementById('floater'); + e.target.dataset.toggle = '#floater'; + el.classList.toggle('show'); + el.onclick = function(e) { + e.stopPropagation() + } + }, + emptyTrash: function() { + if (confirm(modx.lang.confirm_empty_trash) === true) { + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=64', title: modx.lang.confirm_empty_trash}); + } + }, + showBin: function(a) { + var el = d.getElementById('treeMenu_emptytrash'); + if (el) { + if (a) { + el.title = modx.lang.empty_recycle_bin; + el.classList.remove('disabled'); + el.innerHTML = modx.style.empty_recycle_bin; + el.onclick = function() { + modx.tree.emptyTrash() + } + } else { + el.title = modx.lang.empty_recycle_bin_empty; + el.classList.add('disabled'); + el.innerHTML = modx.style.empty_recycle_bin_empty; + el.onclick = null + } + } + }, + unlockElement: function(a, b, c) { + var m = modx.lockedElementsTranslation.msg.replace('[+id+]', b).replace('[+element_type+]', modx.lockedElementsTranslation['type' + a]); + if (confirm(m) === true) { + modx.get(modx.MODX_MANAGER_URL + '?a=67&type=' + a + '&id=' + b, function(r) { + if (parseInt(r) === 1) { + c.parentNode.removeChild(c); + } else { + alert(r) + } + }) + } + }, + resizeTree: function() { + }, + reloadElementsInTree: function() { + modx.get(modx.MODX_MANAGER_URL + '?a=1&f=tree', function(r) { + savePositions(); + var div = d.createElement('div'); + div.innerHTML = r; + var tabs = div.getElementsByClassName('tab-page'); + var el, p; + for (var i = 0; i < tabs.length; i++) { + if (tabs[i].id !== 'tabDoc') { + el = tabs[i].getElementsByClassName('panel-group')[0]; + el.style.display = 'none'; + el.classList.add('clone'); + p = d.getElementById(tabs[i].id); + r = p.getElementsByClassName('panel-group')[0]; + p.insertBefore(el, r) + } + } + setRememberCollapsedCategories(); + for (var i = 0; i < tabs.length; i++) { + if (tabs[i].id !== 'tabDoc') { + el = d.getElementById(tabs[i].id).getElementsByClassName('panel-group')[1]; + el.parentNode.removeChild(el); + el = d.getElementById(tabs[i].id).getElementsByClassName('panel-group')[0]; + el.classList.remove('clone'); + el.style.display = 'block' + } + } + loadPositions(); + for (var i = 0; i < tabIds.length; i++) { + initQuicksearch(tabIds[i] + '_search', tabIds[i]); + } + var at = d.querySelectorAll('#tree .accordion-toggle'); + for (var i = 0; i < at.length; i++) { + at[i].onclick = function(e) { + e.preventDefault(); + var thisItemCollapsed = $(this).hasClass('collapsed'); + if (e.shiftKey) { + var toggleItems = $(this).closest('.panel-group').find('> .panel .accordion-toggle'); + var collapseItems = $(this).closest('.panel-group').find('> .panel > .panel-collapse'); + if (thisItemCollapsed) { + toggleItems.removeClass('collapsed'); + collapseItems.collapse('show') + } else { + toggleItems.addClass('collapsed'); + collapseItems.collapse('hide') + } + toggleItems.each(function() { + var state = $(this).hasClass('collapsed') ? 1 : 0; + setLastCollapsedCategory($(this).data('cattype'), $(this).data('catid'), state) + }); + writeElementsInTreeParamsToStorage() + } else { + $(this).toggleClass('collapsed'); + $($(this).attr('href')).collapse('toggle'); + var state = thisItemCollapsed ? 0 : 1; + setLastCollapsedCategory($(this).data('cattype'), $(this).data('catid'), state); + writeElementsInTreeParamsToStorage() + } + } + } + }) + } + }, + removeLocks: function() { + if (confirm(modx.lang.confirm_remove_locks) === true) { + //w.main.location.href = modx.MODX_MANAGER_URL + '?a=67' + modx.get(modx.MODX_MANAGER_URL + '?a=67', function() { + modx.tree.restoreTree() + }) + } + }, + keepMeAlive: function() { + modx.get('includes/session_keepalive.php?tok=' + d.getElementById('sessTokenInput').value + '&o=' + Math.random(), function(r) { + r = JSON.parse(r); + if (r.status !== 'ok') w.location.href = modx.MODX_MANAGER_URL + '?a=8' + }) + }, + updateMail: function(a) { + try { + if (a) { + this.post(modx.MODX_MANAGER_URL, { + updateMsgCount: true + }, function(r) { + var c = r.split(','), + el = d.getElementById('msgCounter'); + if (c[0] > 0) { + if (el) { + el.innerHTML = c[0]; + el.style.display = 'block' + } + } else { + if (el) el.style.display = 'none' + } + if (c[1] > 0) { + el = d.getElementById('newMail'); + if (el) { + el.innerHTML = '' + modx.style.email + modx.lang.inbox + ' (' + c[0] + ' / ' + c[1] + ')'; + el.style.display = 'block' + } + } + if (modx.config.mail_check_timeperiod > 0) setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod) + }) + } + } catch (oException) { + setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod) + } + }, + openWindow: function(a) { + if (typeof a !== 'object') { + a = { + 'url': a + } + } + if (!a.width) a.width = parseInt(w.innerWidth * 0.9) + 'px'; + if (!a.height) a.height = parseInt(w.innerHeight * 0.8) + 'px'; + if (!a.left) a.left = parseInt(w.innerWidth * 0.05) + 'px'; + if (!a.top) a.top = parseInt(w.innerHeight * 0.1) + 'px'; + if (!a.title) a.title = Math.floor((Math.random() * 999999) + 1); + if (a.url) { + if (this.plugins.EVOmodal === 1) { + top.EVO.modal.show(a) + } else { + w.open(a.url, a.title, 'width=' + a.width + ',height=' + a.height + ',top=' + a.top + ',left=' + a.left + ',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no') + } + } + }, + tabs: function(a) { + if (typeof a === 'object' && a.url) { + if (modx.config.global_tabs) { + var o = { + url: a.url, + name: '', + wrap: d.getElementById('main'), + tabs: d.querySelectorAll('.evo-tab-page'), + navbar: d.querySelector('.evo-tab-row .tab-row'), + tab: d.getElementById('evo-tab-home'), + show: function(f) { + o.navbar.querySelector('.selected').classList.remove('selected'); + for (var i = 0; i < o.tabs.length; i++) { + o.tabs[i].classList.remove('show') + } + if (f) { + o.tab = d.getElementById('evo-tab-' + o.uid); + o.tab.classList.add('selected'); + o.el = d.getElementById('evo-tab-page-' + o.uid); + o.el.classList.add('show'); + w.main = o.el.firstElementChild.contentWindow; + w.history.replaceState(null, d.title, w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); + if (modx.main.getQueryVariable('tab', o.url) || modx.main.getQueryVariable('tab', o.url) === '0') { + w.main.document.querySelectorAll('.tab-row-container .tab-row .tab')[modx.main.getQueryVariable('tab', o.url)].click() + } + modx.main.tabRow.scroll(o.navbar, o.tab); + o.checkDirt() + } else { + modx.main.tabRow.scroll(o.navbar) + } + }, + close: function(e) { + o.event = e || o.event || w.event; + var documentDirty = d.getElementById(o.tab.dataset.target).firstElementChild.contentWindow.documentDirty; + var checkDirt = !!d.getElementById(o.tab.dataset.target).firstElementChild.contentWindow.checkDirt; + if ((documentDirty && checkDirt && confirm(d.getElementById(o.tab.dataset.target).firstElementChild.contentWindow.checkDirt(o.event))) || !documentDirty) { + if (o.tab.classList.contains('selected')) { + for (var i = 0; i < o.tabs.length; i++) { + o.tabs[i].classList.remove('show') + } + o.tab.previousElementSibling.classList.add('selected'); + o.el = d.getElementById(o.tab.previousElementSibling.dataset.target); + o.el.classList.add('show'); + } else { + o.el = d.getElementById(o.navbar.querySelector('.selected').dataset.target); + } + w.main = o.el.firstElementChild.contentWindow; + w.history.replaceState(null, d.title, w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); + o.wrap.removeChild(d.getElementById(o.tab.dataset.target)); + o.navbar.removeChild(o.tab); + delete d.getElementById(o.tab.dataset.target); + delete o.tab; + o.tab = o.navbar.querySelector('.selected'); + o.checkDirt() + } + }, + select: function(e) { + o.tabs = d.querySelectorAll('.evo-tab-page.show'); + o.event = e; + o.tab = this; + if (e.target.className === 'tab-close') { + d.getElementById(this.dataset.target).close() + } else { + for (var i = 0; i < o.tabs.length; i++) { + o.tabs[i].classList.remove('show') + } + o.navbar.querySelector('.selected').classList.remove('selected'); + o.tab.classList.add('selected'); + o.el = d.getElementById(this.dataset.target); + o.el.classList.add('show'); + w.main = o.el.firstElementChild.contentWindow; + w.history.replaceState(null, d.title, w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); + modx.main.tabRow.scroll(o.navbar, o.tab); + o.checkDirt() + } + }, + checkDirt: function() { + clearTimeout(modx.tabsTimer); + if (!o.tab.classList.contains('changed') && typeof o.el.firstElementChild.contentWindow.documentDirty && o.el.firstElementChild.contentWindow.document.getElementById('Button1')) { + modx.tabsTimer = setInterval(function() { + //console.log('tab: ' + o.tab.dataset.target + ', timer: ' + modx.tabsTimer); + if (o.el && o.el.firstElementChild.contentWindow.documentDirty) { + clearInterval(modx.tabsTimer); + o.tab.classList.add('changed') + } + }, 1000) + } + modx.tree.setItemToChange() + } + }; + for (var k in a) { + if (a.hasOwnProperty(k) && typeof o[k] !== 'undefined') { + o[k] = a[k] + } + } + o.uid = modx.main.getQueryVariable('a', o.url.split('?')[1]) === '2' ? 'home' : modx.urlToUid(o.url); + o.tab.onclick = o.select; + o.el = d.getElementById('evo-tab-page-' + o.uid); + if (o.el) { + o.show(1) + } else { + o.el = d.createElement('div'); + o.el.id = 'evo-tab-page-' + o.uid; + o.el.close = o.close; + o.el.className = 'evo-tab-page show'; + o.tab = d.createElement('h2'); + o.tab.id = 'evo-tab-' + o.uid; + o.tab.className = 'tab selected'; + o.tab.dataset.target = 'evo-tab-page-' + o.uid; + o.tab.innerHTML = a.title ? '' + a.title + '×' : ''; + o.tab.onclick = o.select; + o.navbar.appendChild(o.tab); + o.wrap.appendChild(o.el); + o.el.id = 'evo-tab-page-' + o.uid; + d.getElementById('mainloader').className = 'show'; + o.frame = d.createElement('iframe'); + o.frame.name = o.name; + o.frame.width = '100%'; + o.frame.height = '100%'; + o.frame.frameBorder = '0'; + o.frame.src = o.url; + o.frame.onload = function(e) { + w.main = e.target.contentWindow; + a.url = w.main.location.href; + o.uid = modx.urlToUid(a.url); + o.event = e; + if (!!w.main.__alertQuit) { + modx.popup({ + type: 'warning', + title: 'MODX :: Alert', + position: 'top center alertQuit', + content: w.main.document.body.querySelector('p').innerHTML + }); + w.main.document.body.innerHTML = ''; + w.main.alert = function() { }; + //w.history.pushState(null, d.title, w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); + //w.main.alert = alert( w.main.document.body.querySelector('p').innerHTML); + //o.el.close(); + } else { + if (modx.main.getQueryVariable('a', a.url.split('?')[1]) === '2' || d.querySelectorAll('#evo-tab-page-' + o.uid).length > 1) { + o.el.close() + } else { + if (w.main.document.body.querySelectorAll('h1')[0]) { + a.title = w.main.document.body.querySelectorAll('h1')[0].innerHTML; + } else if (w.main.document.title) { + a.title = w.main.document.title; + } + o.tab = d.getElementById(e.target.parentNode.id.replace('page-', '')); + o.tab.id = 'evo-tab-' + o.uid; + o.tab.classList.remove('changed'); + o.tab.dataset.target = 'evo-tab-page-' + o.uid; + o.tab.querySelector('.tab-title').innerHTML = a.title; + o.tab.querySelector('.tab-title').title = a.title.replace(/<\/?[^>]+>|^\s+|\s+$/g, ''); + e.target.parentNode.id = 'evo-tab-page-' + o.uid; + o.checkDirt(); + modx.main.onload(e) + } + } + }; + o.el.appendChild(o.frame); + o.show(0) + } + } else { + w.main.frameElement.src = a.url; + } + } + }, + popup: function(a) { + if (typeof a === 'object' && (a.url || a.content || a.text)) { + var o = { + addclass: '', + animation: 'fade', // fade + content: a.content || a.text || '', + clickclose: 0, + closeall: 0, + data: '', // for ajax send data + dataType: 'document', // for ajax + delay: 5000, + event: null, + height: 'auto', // auto | 100 | 100rem | 100px | 100% + hide: 1, // close after delay + hover: 1, // close after hover + icon: '', + iframe: 'iframe', // iframe | ajax + margin: '.5rem', + maxheight: '', + method: 'GET', // POST | GET + overlay: 0, // add overlay + overlayclose: 0, // click overlay to close + position: 'center', // center | left top | left bottom | right top | right bottom + selector: '', // dataType: document, selector: 'body' + showclose: 1, // show close button + target: 'main', // ! not used + uid: '', + type: 'default', // default | info | danger | success | dark | warning + title: '', + url: '', + width: '20rem', + wrap: 'main', // parentNode + zIndex: 10500, + show: function() { + if (~o.position.indexOf('center')) { + if (o.event) { + o.el.style.left = o.event.clientX + o.mt + 'px'; + o.el.style.bottom = o.wrap.offsetHeight - o.el.offsetHeight - o.event.clientY + o.mt + 'px' + } else { + o.el.style.left = /(%)/.test(o.width) ? ((100 - parseInt(o.width)) / 2) - (o.mt / (o.wrap.offsetWidth / 100)) + '%' : ((o.wrap.offsetWidth - o.el.offsetWidth) / 2) - o.mt + 'px'; + o.el.style.bottom = /(%)/.test(o.width) ? ((100 - parseInt(o.height)) / 2) - (o.mt / (o.wrap.offsetHeight / 100)) + '%' : ((w.innerHeight - o.el.offsetHeight - o.wrap.offsetTop) / 2) - o.mt + 'px'; + } + } + if (~o.position.indexOf('left')) { + o.el.style.left = 0; + } + if (~o.position.indexOf('right')) { + o.el.style.right = 0; + } + if (~o.position.indexOf('top')) { + o.el.style.top = 0; + o.el.style.bottom = ''; + } + if (~o.position.indexOf('bottom')) { + o.el.style.bottom = 0; + } + o.calc(); + o.el.className += ' in'; + if (o.showclose) { + o.el.querySelector('.close').onclick = o.close + } + if (o.hide) { + o.el.timer = setTimeout(function() { + clearTimeout(o.el.timer); + o.close() + }, o.delay) + } + if (o.hover) { + o.el.onmouseenter = function() { + clearTimeout(o.el.timer) + }; + o.el.onmouseleave = o.close + } + if (o.overlayclose && o.o) { + o.o.onclick = o.close + } + if (o.clickclose) { + o.el.onclick = o.close; + } + }, + close: function(e) { + o.event = e || o.event || w.event; + if (o.url && o.iframe === 'iframe') { + var els = d.querySelectorAll('.' + o.className + '.in'); + if (els) { + var documentDirty = o.el.lastElementChild.firstElementChild.contentWindow.documentDirty; + if ((documentDirty && confirm(o.el.lastElementChild.firstElementChild.contentWindow.checkDirt(o.event))) || !documentDirty) { + o.el.classList.remove('in'); + if (!o.animation) { + o.el.classList.remove('show'); + } + o.calc(1); + if (o.o && els.length === 1) { + o.o.parentNode.removeChild(o.o) + } + o.el.timer = setTimeout(function(e) { + clearTimeout(o.el.timer); + if (o.el.parentNode) { + o.el.parentNode.removeChild(o.el) + } + }, 200); + } + } + clearInterval(modx.popupTimer); + } else { + o.el.classList.remove('in'); + if (!o.animation) { + o.el.classList.remove('show'); + } + o.calc(1); + o.el.timer = setTimeout(function(e) { + clearTimeout(o.el.timer); + if (o.el.parentNode) { + o.el.parentNode.removeChild(o.el) + } + }, 200); + } + }, + calc: function(f) { + var els = d.querySelectorAll('.' + o.className + '.in[data-position="' + o.el.dataset.position + '"]'); + if (els && els.length) { + o.els = []; + for (var i = 0; i < els.length; i++) { + o.els.push(els[i]); + } + o.els.sort(function(a, b) { + return a.index - b.index; + }); + o.t = 0; + if (~o.el.dataset.position.indexOf('center')) { + o.t = !f ? ((o.wrap.offsetHeight + o.el.offsetHeight) / 2) : ((o.wrap.offsetHeight - o.els[o.els.length - 1].offsetHeight) / 2) - o.mt; + } else { + o.t = !f ? o.el.offsetHeight + o.mt : 0; + } + i = o.els.length; + while (i--) { + d.getElementById(o.els[i].id).index = (i - o.els.length); + if (~o.el.dataset.position.indexOf('top')) { + d.getElementById(o.els[i].id).style.top = o.t + 'px'; + } else { + d.getElementById(o.els[i].id).style.bottom = o.t + 'px'; + } + o.t += o.els[i].offsetHeight + o.mt; + if (o.closeall && o.el !== els[i]) { + o.els[i].close() + } + } + } + }, + checkDirt: function() { +// if (!o.el.classList.contains('changed') && typeof o.el.lastElementChild.firstElementChild.contentWindow.documentDirty && o.el.lastElementChild.firstElementChild.contentWindow.document.getElementById('Button1')) { +// modx.popupTimer = setInterval(function() { +// console.log('timer: ' + modx.popupTimer); +// if (o.el.lastElementChild.firstElementChild.contentWindow && o.el.lastElementChild.firstElementChild.contentWindow.documentDirty) { +// clearInterval(modx.popupTimer); +// o.el.classList.add('changed'); +// o.tab = d.getElementById(o.wrap.id.replace('-page', '')); +// if (o.tab) { +// o.tab.classList.add('changed'); +// o.wrap.firstElementChild.contentWindow.documentDirty = true +// } +// } +// }, 1000); +// } +// modx.tree.setItemToChange() + } + }; + for (var k in a) { + if (a.hasOwnProperty(k) && typeof o[k] !== 'undefined') { + o[k] = a[k] + } + } + o.timer = 0; + o.position = o.position.split(' '); + if (modx.popupLastIndex) { + o.zIndex = modx.popupLastIndex++ + } else { + modx.popupLastIndex = o.zIndex; + } + o.uid = a.url ? modx.urlToUid(a.url) : modx.toHash(a); + o.className = 'evo-popup'; + o.wrap = typeof o.wrap === 'string' ? d.getElementById(o.wrap) : o.wrap + if (o.overlay && !o.wrap.querySelector('.evo-popup-overlay')) { + o.o = d.createElement('div'); + o.o.className = 'evo-popup-overlay'; + o.o.style.zIndex = o.zIndex - 1; + o.wrap.appendChild(o.o); + } else { + o.o = o.wrap.querySelector('.evo-popup-overlay') + } + o.el = o.wrap.ownerDocument.getElementById('evo-popup-' + o.uid); + if (o.el) { + clearTimeout(o.el.timer); + o.el.index = 0; + o.el.classList.remove('in'); + o.el.classList.add('show'); + o.el.style.zIndex = o.zIndex; + o.el.dataset.position = o.position.join(':'); + o.mt = parseFloat(getComputedStyle(o.el).marginTop); + o.el.close = o.close; + o.show() + } else { + o.el = d.createElement('div'); + o.el.id = 'evo-popup-' + o.uid; + o.el.close = o.close; + o.el.index = 0; + o.el.style.position = 'absolute'; + o.el.style.width = !/[^[0-9]/.test(o.width) ? o.width + 'px' : o.width; + o.el.style.height = !/[^[0-9]/.test(o.height) ? o.height + 'px' : o.height; + o.el.style.zIndex = o.zIndex; + o.el.style.margin = o.margin; + o.el.className = o.className + ' show alert alert-' + o.type + ' ' + o.addclass + (o.animation ? ' animation ' + o.animation : ''); + o.el.dataset.position = o.position.join(':'); + if (o.showclose) { + o.el.innerHTML += '×'; + } + if (o.title) { + o.el.innerHTML += '

      ' + o.title + '


      '; + } + o.el.innerHTML += '
      '; + o.wrap.appendChild(o.el); + o.mt = parseFloat(getComputedStyle(o.el).marginTop); + if (o.maxheight) { + o.maxheight = /(%)/.test(o.maxheight) ? (o.wrap.offsetHeight - o.el.offsetHeight - o.mt) / 100 * parseInt(o.maxheight) : o.maxheight; + o.el.lastChild.style.overflowY = 'auto'; + o.el.lastChild.style.maxHeight = o.maxheight + 'px'; + } + if (o.url.substr(0, 4) === 'http' || o.url.substr(0, 9) === 'index.php') { + if (o.iframe === 'iframe') { + o.uid = modx.urlToUid(a.url); + o.el.className += ' ' + o.addclass + ' ' + o.className + '-iframe'; + o.el.id = 'evo-popup-' + o.uid; + d.getElementById('mainloader').className = 'show'; + o.frame = d.createElement('iframe'); + o.frame.width = '100%'; + o.frame.height = '100%'; + o.frame.frameBorder = '0'; + o.frame.src = o.url; + o.frame.onload = function(e) { + a.url = e.target.contentWindow.location.href; + o.uid = modx.urlToUid(a.url); + o.event = e; + if (!!e.target.contentWindow.__alertQuit) { + modx.popup({ + type: 'warning', + title: 'MODX :: Alert', + position: 'top center alertQuit', + content: e.target.contentWindow.document.body.querySelector('p').innerHTML + }); + e.target.contentWindow.document.body.innerHTML = ''; + e.target.contentWindow.alert = function() { }; + } else { + if (modx.main.getQueryVariable('a', a.url.split('?')[1]) === '2' || o.wrap.querySelectorAll('#evo-popup-' + o.uid).length > 1) { + o.el.close() + } else { + if (e.target.contentDocument.querySelectorAll('h1')[0]) { + a.title = e.target.contentDocument.querySelectorAll('h1')[0].innerHTML; + } + //w.main = e.target.contentWindow; + e.target.offsetParent.offsetParent.id = 'evo-popup-' + o.uid; + e.target.offsetParent.offsetParent.classList.remove('changed'); + o.checkDirt(); + //modx.main.onload(e); + } + } + }; + o.el.lastChild.appendChild(o.frame); + o.show() + } else { + var xhr = new XMLHttpRequest(); + xhr.open(o.method, o.url, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;'); + xhr.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest'); + if (o.dataType) { + xhr.responseType = o.dataType + } + xhr.onload = function() { + if (this.readyState === 4) { + o.el.className += ' ' + o.className + '-ajax'; + if (o.dataType === 'document') { + if (o.selector) { + var r = this.response.documentElement.querySelector(o.selector); + if (r) { + o.el.lastChild.innerHTML += r.innerHTML + } + } else { + o.el.lastChild.innerHTML += this.response.body.innerHTML + } + } else { + o.el.lastChild.innerHTML += this.response; + } + o.show() + } + }; + xhr.send(o.data) + } + } else { + o.el.lastChild.innerHTML += o.content; + o.show() + } + } + } + }, + getWindowDimension: function() { + var a = 0, + b = 0, + c = d.documentElement, + e = d.body; + if (typeof(w.innerWidth) === 'number') { + a = w.innerWidth; + b = w.innerHeight + } else if (c && (c.clientWidth || c.clientHeight)) { + a = c.clientWidth; + b = c.clientHeight + } else if (e && (e.clientWidth || e.clientHeight)) { + a = e.clientWidth; + b = e.clientHeight + } + return { + 'width': a, + 'height': b + } + }, + hideDropDown: function(e) { + e = e || w.event || w.main.event; + if (tree.ca === 'open' || tree.ca === '') { + modx.tree.setSelectedByContext(); + } + if (modx.tree.ctx !== null) { + d.getElementById(modx.frameset).removeChild(modx.tree.ctx); + modx.tree.ctx = null + } + if (!(/dropdown\-item/.test(e.target.className)) + //&& !(e && ("click" === e.type && /form|label|input|textarea|select/i.test(e.target.tagName))) + ) { + var els = d.querySelectorAll('.dropdown'), + n = null, + t = e.target || e.target.parentNode; + if (t.dataset.toggle) { + n = d.querySelector(t.dataset.toggle); + } else if (t.classList.contains('dropdown-toggle')) n = t.offsetParent; + for (var i = 0; i < els.length; i++) { + if (n !== els[i]) { + els[i].classList.remove('show') + } + } + els = w.main.document.querySelectorAll('.dropdown'); + for (var i = 0; i < els.length; i++) { + if (n !== els[i]) { + els[i].classList.remove('show') + } + } + } + }, + XHR: function() { + return ('XMLHttpRequest' in w) ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHTTP'); + }, + get: function(a, b, c) { + var x = this.XHR(); + x.open('GET', a, true); + x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); + if (c) x.responseType = c; + x.onload = function() { + if (this.status === 200 && typeof b === 'function') { + return b(this.response) + } + }; + x.send() + }, + post: function(a, b, c, t) { + var x = this.XHR(), + f = ''; + if (typeof b === 'function') { + t = c; + c = b; + } else if (typeof b === 'object') { + var e = [], + i = 0, + k; + for (k in b) { + if (b.hasOwnProperty(k)) e[i++] = k + '=' + b[k]; + } + f = e.join('&') + } else if (typeof b === 'string') { + f = b; + } + x.open('POST', a, true); + x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); + x.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest'); + if (t) x.responseType = t; + x.onload = function() { + if (this.readyState === 4 && c !== u) { + return c(this.response) + } + }; + x.send(f) + }, + pxToRem: function(a) { + return a / parseInt(w.getComputedStyle(d.documentElement).fontSize) + }, + remToPx: function(a) { + return a * parseInt(w.getComputedStyle(d.documentElement).fontSize) + }, + toHash: function(a) { + a = String(JSON.stringify(a)); + var b = 0, c, i; + if (a.length === 0) return b; + for (i = 0; i < a.length; i++) { + c = a.charCodeAt(i); + b = ((b << 5) - b) + c; + b = b & b + } + return Math.abs(b).toString() + }, + urlToUid: function(a) { + var a = a.split('?'), b = ''; + if (a && a[1]) { + if (modx.main.getQueryVariable('a', a[1])) { + b += '&a=' + modx.main.getQueryVariable('a', a[1]) + } + if (modx.main.getQueryVariable('id', a[1])) { + b += '&id=' + modx.main.getQueryVariable('id', a[1]) + } + if (modx.main.getQueryVariable('type', a[1])) { + b += '&type=' + modx.main.getQueryVariable('type', a[1]) + } + b = modx.toHash(b); + } + return b + } + }); + w.mainMenu = {}; + w.mainMenu.stopWork = function() { + modx.main.stopWork() + }; + w.mainMenu.work = function() { + modx.main.work() + }; + w.mainMenu.reloadtree = function() { + //console.log('mainMenu.reloadtree()'); + if (modx.config.global_tabs) { + setTimeout('modx.tree.restoreTree()', 50) + } + }; + w.mainMenu.startrefresh = function(a) { + //console.log('mainMenu.startrefresh(' + a + ')'); + if (a === 1) { + //modx.tree.restoreTree() + } + if (a === 2) { + modx.tree.restoreTree() + } + if (a === 9) { + modx.tree.restoreTree() + } + if (a === 10) { + w.location.href = modx.MODX_MANAGER_URL + } + }; + w.mainMenu.startmsgcount = function(a, b, c) { + modx.updateMail(c) + }; + w.mainMenu.hideTreeFrame = function() { + modx.resizer.setWidth(0) + }; + w.mainMenu.defaultTreeFrame = function() { + modx.resizer.setDefaultWidth() + }; + w.tree = {}; + w.tree.ca = 'open'; + w.tree.document = document; + w.tree.saveFolderState = function() { + }; + w.tree.updateTree = function() { + //console.log('tree.updateTree()'); + modx.tree.updateTree() + }; + w.tree.restoreTree = function() { + //console.log('tree.restoreTree()'); + modx.tree.restoreTree() + }; + w.tree.reloadElementsInTree = function() { + //console.log('tree.reloadElementsInTree()'); + modx.tree.reloadElementsInTree() + }; + w.tree.resizeTree = function() { + //console.log('tree.resizeTree() off') + }; + w.onbeforeunload = function() { + var a = w.main.frameElement.contentWindow; + if (parseInt(modx.main.getQueryVariable('a', a.location.search.substring(1))) === 27) { + modx.get(modx.MODX_MANAGER_URL + '?a=67&type=7&id=' + modx.main.getQueryVariable('id', a.location.search.substring(1))); + } + }; + d.addEventListener('DOMContentLoaded', function() { + modx.init() + }) +}) +(typeof jQuery !== 'undefined' ? jQuery : '', window, document, undefined); + +function reloadElementsInTree() +{ + modx.tree.reloadElementsInTree() +} + +(function() { + if (!Element.prototype.closest) { + Element.prototype.closest = function(a) { + var b = this, + c, d; + ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'].some(function(fn) { + if (typeof document.body[fn] === 'function') { + c = fn; + return true + } + return false + }); + if (b && b[c](a)) return b; + while (b) { + d = b.parentElement; + if (d && d[c](a)) return d; + b = d + } + return null; + } + } +})(); From cf9f3df6534ec742c539264a92a9a12ac91e7fda Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Fri, 1 Sep 2017 18:46:32 +0200 Subject: [PATCH 013/577] ElementsInTree - tabs height Match tabs height with global tabs. --- assets/plugins/elementsintree/assets/txt_content.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index ae538aa72c..f88767db73 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -251,8 +251,8 @@ } .ElementsInTree #tree .tab-row .tab { - height: 2rem; - line-height: 2rem; + height: 1.8rem; + line-height: 1.75rem; background-color: transparent; border-color: #ddd; border-width: 0 1px 0 0; From c76c6bfc0028ac115b63e8d67ddda589fe8b8ce8 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Fri, 1 Sep 2017 19:12:18 +0200 Subject: [PATCH 014/577] ElementsInTree - remove unnecesary options --- .../elementsintree/assets/txt_content.tpl | 19 ++++++++++++- .../on_manager_tree_prerender.inc.php | 3 -- .../includes/on_manager_tree_render.inc.php | 28 ++++++------------- install/assets/plugins/ElementsInTree.tpl | 4 +-- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index f88767db73..e69a323e04 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -349,7 +349,24 @@ } - [+unifyFrames_css+] + /* Unify frames */ + + body, + div.treeframebody { + background-color: #f2f2f2 !important; + } + + div.treeframebody { + background-color: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + + #treeMenu { + background-color: transparent !important; + border-bottom-color: transparent !important; + } + [+treeButtonsInTab_css+] diff --git a/assets/plugins/elementsintree/includes/on_manager_tree_prerender.inc.php b/assets/plugins/elementsintree/includes/on_manager_tree_prerender.inc.php index b3b2e0d192..08f4e0ae73 100644 --- a/assets/plugins/elementsintree/includes/on_manager_tree_prerender.inc.php +++ b/assets/plugins/elementsintree/includes/on_manager_tree_prerender.inc.php @@ -5,9 +5,6 @@ // use icons $ph['tabPadding'] = ($useIcons == 'yes') ? '10px' : '9px'; -// unify frames -$ph['unifyFrames_css'] = ($unifyFrames == 'yes') ? file_get_contents($eit_base_path.'assets/css_unifyFrames.tpl') : ''; - // tree buttons in tab $ph['treeButtonsInTab_js'] = ($treeButtonsInTab == 'yes') ? file_get_contents($eit_base_path.'assets/js_treeButtonsInTab.tpl') : ''; $ph['treeButtonsInTab_css'] = ($treeButtonsInTab == 'yes') ? file_get_contents($eit_base_path.'assets/css_treeButtonsInTab.tpl') : ''; diff --git a/assets/plugins/elementsintree/includes/on_manager_tree_render.inc.php b/assets/plugins/elementsintree/includes/on_manager_tree_render.inc.php index f7ff57871b..e09b755580 100644 --- a/assets/plugins/elementsintree/includes/on_manager_tree_render.inc.php +++ b/assets/plugins/elementsintree/includes/on_manager_tree_render.inc.php @@ -2,26 +2,14 @@ if(!defined('MODX_BASE_PATH')) die('What are you doing? Get out of here!'); -if ($useIcons=='yes') { - $tabLabel_template = ''; - $tabLabel_tv = ''; - $tabLabel_chunk = ''; - $tabLabel_snippet = ''; - $tabLabel_plugin = ''; - $tabLabel_module = ''; - $tabLabel_create = ''; - $tabLabel_refresh = ''; -} -else { - $tabLabel_template = 'TPL'; - $tabLabel_tv = 'TV'; - $tabLabel_chunk = 'CH'; - $tabLabel_snippet = 'SN'; - $tabLabel_plugin = 'PL'; - $tabLabel_module = 'MD'; - $tabLabel_create = 'Create'; - $tabLabel_refresh = 'Refresh'; -} +$tabLabel_template = ''; +$tabLabel_tv = ''; +$tabLabel_chunk = ''; +$tabLabel_snippet = ''; +$tabLabel_plugin = ''; +$tabLabel_module = ''; +$tabLabel_create = ''; +$tabLabel_refresh = ''; $text_reload_title = 'Click here to reload elements list.'; diff --git a/install/assets/plugins/ElementsInTree.tpl b/install/assets/plugins/ElementsInTree.tpl index 0088ad8fe8..bb1e89cf3c 100644 --- a/install/assets/plugins/ElementsInTree.tpl +++ b/install/assets/plugins/ElementsInTree.tpl @@ -5,9 +5,9 @@ * Get access to all Elements and Modules inside Manager sidebar * * @category plugin - * @version 1.5.8 + * @version 1.5.9 * @license http://creativecommons.org/licenses/GPL/2.0/ GNU Public License (GPL v2) - * @internal @properties &adminRoleOnly=Administrators only;list;yes,no;yes;;Show tabs only for users with administrator role. &treeButtonsInTab=Tree buttons in tab;list;yes,no;yes;;Move Tree buttons into Site Tree tab. &useIcons=Tab icons;list;yes,no;yes;;Use icons in tabs. &unifyFrames=Unify frames;list;yes,no;yes;;Unify style of Tree and Main frame style. &tabTreeTitle=Tree tab title;text;Site;;Custom title of Site Tree tab. + * @internal @properties &adminRoleOnly=Administrators only;list;yes,no;yes;;Show tabs only for users with administrator role. &treeButtonsInTab=Tree buttons in tab;list;yes,no;yes;;Move Tree buttons into Site Tree tab. * @internal @events OnManagerTreePrerender,OnManagerTreeRender,OnManagerMainFrameHeaderHTMLBlock,OnTempFormSave,OnTVFormSave,OnChunkFormSave,OnSnipFormSave,OnPluginFormSave,OnModFormSave,OnTempFormDelete,OnTVFormDelete,OnChunkFormDelete,OnSnipFormDelete,OnPluginFormDelete,OnModFormDelete * @internal @modx_category Manager and Admin * @internal @installset base From 4c1223b477d6159bf9f6e77f9ab6739834e0b216 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Fri, 1 Sep 2017 19:13:25 +0200 Subject: [PATCH 015/577] ElementsInTree - style improvement --- assets/plugins/elementsintree/assets/txt_content.tpl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index e69a323e04..73eb39bf93 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -295,8 +295,15 @@ display: none } + .ElementsInTree #treeMenu { + height: 1.8rem; + background-color: #E7E7E7 !important; + } + .ElementsInTree #treeMenu.is-intab { margin-left: 0.1rem; + height: 1.875rem; + background-color: transparent !important; } .ElementsInTree.treeframebody { From e8a333db96a1ef72083448f910c87ddb83e32fa1 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Fri, 1 Sep 2017 19:16:46 +0200 Subject: [PATCH 016/577] ElementsInTree - style improvement TreeButtons original background color --- assets/plugins/elementsintree/assets/txt_content.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 73eb39bf93..fc2de21c2b 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -297,7 +297,7 @@ .ElementsInTree #treeMenu { height: 1.8rem; - background-color: #E7E7E7 !important; + background-color: #DFDFDF !important; } .ElementsInTree #treeMenu.is-intab { From a45dcfe7629f364a42c0a9f1f453e988a999dcca Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Fri, 1 Sep 2017 19:23:16 +0200 Subject: [PATCH 017/577] ElementsInTree - css fix --- assets/plugins/elementsintree/assets/txt_content.tpl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index fc2de21c2b..98d52b0f1e 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -247,7 +247,7 @@ display: table; width: 100%; table-layout: fixed; - border-top: 1px solid #ddd; + border-top: 1px solid #CFD2D6; } .ElementsInTree #tree .tab-row .tab { @@ -355,6 +355,14 @@ color: #b68282 } + .dark.ElementsInTree #treeMenu { + background-color: rgba(0, 0, 0, 0.2) !important; + } + + .dark.ElementsInTree #treeMenu.is-intab { + background-color: transparent !important; + } + /* Unify frames */ From c6c40dc3eeff2aaff76e0e517374b925e1b08e7d Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Fri, 1 Sep 2017 19:25:15 +0200 Subject: [PATCH 018/577] ElementsInTree - date change --- install/assets/plugins/ElementsInTree.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/assets/plugins/ElementsInTree.tpl b/install/assets/plugins/ElementsInTree.tpl index bb1e89cf3c..e151eab56c 100644 --- a/install/assets/plugins/ElementsInTree.tpl +++ b/install/assets/plugins/ElementsInTree.tpl @@ -20,7 +20,7 @@ * @author Nicola1971 https://github.com/Nicola1971 * @author Deesen https://github.com/Deesen * @author yama https://github.com/yama - * @lastupdate 31/08/2017 + * @lastupdate 01/09/2017 */ require MODX_BASE_PATH.'assets/plugins/elementsintree/plugin.elementsintree.php'; From a147eb1a241e75d2b3aeab9ac4a85a1feb27521c Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 20:57:34 +0300 Subject: [PATCH 019/577] correct EIT dark mode --- assets/plugins/elementsintree/assets/txt_content.tpl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 98d52b0f1e..c12ceef6cf 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -195,7 +195,7 @@ .ElementsInTree #tree .treeframebody { background-color: #fafafa !important; - border-right: 1px solid rgba(0, 0, 0, .1) + border-right: 1px solid #cfd2d6 } .ElementsInTree #tree #treeHolder { @@ -248,13 +248,14 @@ width: 100%; table-layout: fixed; border-top: 1px solid #CFD2D6; + background-color: #dfdfdf; } .ElementsInTree #tree .tab-row .tab { height: 1.8rem; line-height: 1.75rem; background-color: transparent; - border-color: #ddd; + border-color: #cfd2d6; border-width: 0 1px 0 0; display: table-cell; text-align: center; @@ -318,7 +319,8 @@ .dark.ElementsInTree #tree .treeframebody { background-color: #1d2023 !important; - color: #828282 + color: #828282; + border-color: #2a2d33 } .dark.ElementsInTree #tree .tab-row { @@ -327,7 +329,8 @@ .dark.ElementsInTree #tree .tab-row .tab { color: #7b7b7b; - border-color: #343739; + border-color: #2a2d33; + background-color: #1a1c21; } .dark.ElementsInTree #tree .tab-row .tab.selected { From eafcbef46508ad195a4ce1fa75ff2ad52baa1ace Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 21:01:35 +0300 Subject: [PATCH 020/577] added for EIT hover style tab --- assets/plugins/elementsintree/assets/txt_content.tpl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index c12ceef6cf..fc0cd248eb 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -333,6 +333,10 @@ background-color: #1a1c21; } + .dark.ElementsInTree #tree .tab-row .tab:hover { + background-color: #2d3033; + } + .dark.ElementsInTree #tree .tab-row .tab.selected { background-color: #24272A; border-color: #343739; From ca57953c7446c31b263534a27604e472da2e38f9 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 1 Sep 2017 21:04:10 +0300 Subject: [PATCH 021/577] added for EIT hover style tab --- assets/plugins/elementsintree/assets/txt_content.tpl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index fc0cd248eb..c9c5579b3e 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -267,6 +267,10 @@ border-width: 0; } + .ElementsInTree #tree .tab-row .tab:hover { + background-color: rgba(255, 255, 255, 0.5); + } + .ElementsInTree #tree .tab-row .tab.selected { padding-bottom: 0; background-color: #fff; From f2b8b580969a9b365658ab135aa699b1331c30d5 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Fri, 1 Sep 2017 20:50:32 +0200 Subject: [PATCH 022/577] EIT - fix width on mobile --- assets/plugins/elementsintree/assets/txt_content.tpl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index c9c5579b3e..2582a57c7f 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -192,6 +192,14 @@ .tab-page { margin-bottom:0; } /* ElementsInTree main styles */ + + @media (max-width: 840px) { + + .ElementsInTree #tree { + max-width: 345px; + } + + } .ElementsInTree #tree .treeframebody { background-color: #fafafa !important; From ae79aec739cf3f81669df4b2f3009b79d129a772 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Fri, 1 Sep 2017 22:23:05 +0300 Subject: [PATCH 023/577] rename DLcrumbs to DLCrumbs --- .../DocLister/{snippet.DLcrumbs.php => snippet.DLCrumbs.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/snippets/DocLister/{snippet.DLcrumbs.php => snippet.DLCrumbs.php} (100%) diff --git a/assets/snippets/DocLister/snippet.DLcrumbs.php b/assets/snippets/DocLister/snippet.DLCrumbs.php similarity index 100% rename from assets/snippets/DocLister/snippet.DLcrumbs.php rename to assets/snippets/DocLister/snippet.DLCrumbs.php From ca59f57a8d59e01d6ed4a247976251aef76ff7ce Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Fri, 1 Sep 2017 22:24:46 +0300 Subject: [PATCH 024/577] DLCrumbs rename --- .../DocLister/{snippet.DLcrumbs.php => snippet.DLCrumbs.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/snippets/DocLister/{snippet.DLcrumbs.php => snippet.DLCrumbs.php} (100%) diff --git a/assets/snippets/DocLister/snippet.DLcrumbs.php b/assets/snippets/DocLister/snippet.DLCrumbs.php similarity index 100% rename from assets/snippets/DocLister/snippet.DLcrumbs.php rename to assets/snippets/DocLister/snippet.DLCrumbs.php From 8e8b96b6821bae4d5089305f111fd664326d08ac Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 14:29:58 +0300 Subject: [PATCH 025/577] refactor modx.js check changes in pages --- manager/media/style/default/js/modx.js | 33 ++++++++++++++------------ 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index c487aa09a0..7bff85ef89 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -1503,7 +1503,7 @@ w.main.document.querySelectorAll('.tab-row-container .tab-row .tab')[modx.main.getQueryVariable('tab', o.url)].click() } modx.main.tabRow.scroll(o.navbar, o.tab); - o.checkDirt() + modx.tree.setItemToChange() } else { modx.main.tabRow.scroll(o.navbar) } @@ -1530,7 +1530,7 @@ delete d.getElementById(o.tab.dataset.target); delete o.tab; o.tab = o.navbar.querySelector('.selected'); - o.checkDirt() + modx.tree.setItemToChange() } }, select: function(e) { @@ -1550,21 +1550,22 @@ w.main = o.el.firstElementChild.contentWindow; w.history.replaceState(null, d.title, w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); modx.main.tabRow.scroll(o.navbar, o.tab); - o.checkDirt() + modx.tree.setItemToChange() } }, - checkDirt: function() { - clearTimeout(modx.tabsTimer); - if (!o.tab.classList.contains('changed') && typeof o.el.firstElementChild.contentWindow.documentDirty && o.el.firstElementChild.contentWindow.document.getElementById('Button1')) { - modx.tabsTimer = setInterval(function() { - //console.log('tab: ' + o.tab.dataset.target + ', timer: ' + modx.tabsTimer); - if (o.el && o.el.firstElementChild.contentWindow.documentDirty) { - clearInterval(modx.tabsTimer); - o.tab.classList.add('changed') - } - }, 1000) + events: { + click: function() { + if (typeof w.main.documentDirty && w.main.documentDirty && !o.tab.classList.contains('changed')) { + o.tab.classList.add('changed'); + w.main.removeEventListener('click', o.events.click) + } + }, + keyup: function() { + if (typeof w.main.documentDirty && w.main.documentDirty && !o.tab.classList.contains('changed')) { + o.tab.classList.add('changed'); + w.main.removeEventListener('keyup', o.events.click) + } } - modx.tree.setItemToChange() } }; for (var k in a) { @@ -1631,10 +1632,12 @@ o.tab.querySelector('.tab-title').innerHTML = a.title; o.tab.querySelector('.tab-title').title = a.title.replace(/<\/?[^>]+>|^\s+|\s+$/g, ''); e.target.parentNode.id = 'evo-tab-page-' + o.uid; - o.checkDirt(); + modx.tree.setItemToChange(); modx.main.onload(e) } } + w.main.addEventListener('click', o.events.click, false); + w.main.addEventListener('keyup', o.events.click, false); }; o.el.appendChild(o.frame); o.show(0) From a9de782f9442bce964bc00eb091590161c9ce622 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 14:32:20 +0300 Subject: [PATCH 026/577] fix #208 open link new tabs --- manager/media/style/default/js/modx.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 7bff85ef89..e4028c03fd 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -323,6 +323,19 @@ w.main.document.onclick = modx.hideDropDown; w.main.document.oncontextmenu = modx.main.oncontextmenu; w.history.replaceState(null, d.title, (w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search)); + if (w.main.frameElement.id === 'mainframe') { + w.main.addEventListener('click', function(e) { + if (modx.config.global_tabs && e.target && ((e.target.tagName === 'A' && e.target.target === '') || (e.target.parentNode.tagName === 'A' && e.target.parentNode.target === ''))) { + var a = e.target.tagName === 'A' && e.target || e.target.parentNode.tagName === 'A' && e.target.parentNode; + e.preventDefault(); + if (e.shiftKey) { + modx.openWindow({url: a.href}) + } else { + modx.tabs({url: a.href, title: a.innerHTML}) + } + } + }) + } }, oncontextmenu: function(e) { if (e.ctrlKey) return; From 992aeeb9bca66b6ec5f8dc90beff339f970740a4 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Sat, 2 Sep 2017 12:00:21 +0200 Subject: [PATCH 027/577] EIT - cleanup --- .../elementsintree/assets/css_unifyFrames.tpl | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 assets/plugins/elementsintree/assets/css_unifyFrames.tpl diff --git a/assets/plugins/elementsintree/assets/css_unifyFrames.tpl b/assets/plugins/elementsintree/assets/css_unifyFrames.tpl deleted file mode 100644 index adbef0d032..0000000000 --- a/assets/plugins/elementsintree/assets/css_unifyFrames.tpl +++ /dev/null @@ -1,17 +0,0 @@ -/* Unify frames */ - -body, -div.treeframebody { - background-color: #f2f2f2 !important; -} - -div.treeframebody { - background-color: transparent !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; -} - -#treeMenu { - background-color: transparent !important; - border-bottom-color: transparent !important; -} From 8f86965613b5cdc88541b84f745190d4b7e01d68 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Sat, 2 Sep 2017 12:24:17 +0200 Subject: [PATCH 028/577] EIT - links color change --- .../plugins/elementsintree/assets/txt_content.tpl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 2582a57c7f..951aba34a8 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -131,15 +131,21 @@ color: #657587; font-weight: bold; } + #treePane .panel-title a:hover { text-decoration: none; - color:#3697CD; + } + + #treePane .panel-title a:focus { + text-decoration: none; } #treePane .panel-title > a::before { content: "\f107"; /* fa-angle-down */ font-family: "FontAwesome"; margin-left:-17px; + width: 10px; + display: inline-block; } #treePane .panel-title > a.collapsed::before { content: "\f105"; /* fa-angle-right */ @@ -201,6 +207,10 @@ } + .ElementsInTree #tree a { + color: #404040; + } + .ElementsInTree #tree .treeframebody { background-color: #fafafa !important; border-right: 1px solid #cfd2d6 @@ -214,7 +224,7 @@ } .ElementsInTree #tree .actionButtons--eit { - top: 3.1rem; + top: 2.8rem; right: 1rem } From d5a12a483f83fb60254c2d25a94ba16880a7f389 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Sat, 2 Sep 2017 12:35:13 +0200 Subject: [PATCH 029/577] EIT - icons eye icon size. open in window icon color --- .../elementsintree/assets/txt_content.tpl | 685 +++++++++--------- 1 file changed, 344 insertions(+), 341 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 951aba34a8..bf06c276dc 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -1,191 +1,193 @@
      - - - - - + + + + - -
      -

      [+tabTreeTitle+]

      - + // Shift-Mouseclick opens/collapsed all categories + jQuery(".accordion-toggle").click(function(e) { + e.preventDefault(); + var thisItemCollapsed = jQuery(this).hasClass("collapsed"); + if (e.shiftKey) { + // Shift-key pressed + var toggleItems = jQuery(this).closest(".panel-group").find("> .panel .accordion-toggle"); + var collapseItems = jQuery(this).closest(".panel-group").find("> .panel > .panel-collapse"); + if(thisItemCollapsed) { + toggleItems.removeClass("collapsed"); + collapseItems.collapse("show"); + } else { + toggleItems.addClass("collapsed"); + collapseItems.collapse("hide"); + } + // Save states to localStorage + toggleItems.each(function() { + state = jQuery(this).hasClass("collapsed") ? 1 : 0; + setLastCollapsedCategory(jQuery(this).data("cattype"), jQuery(this).data("catid"), state); + }); + writeElementsInTreeParamsToStorage(); + } else { + jQuery(this).toggleClass("collapsed"); + jQuery(jQuery(this).attr("href")).collapse("toggle"); + // Save state to localStorage + state = thisItemCollapsed ? 0 : 1; + setLastCollapsedCategory(jQuery(this).data("cattype"), jQuery(this).data("catid"), state); + writeElementsInTreeParamsToStorage(); + } + }); + + setRememberCollapsedCategories(); + + }); + } catch(err) { + alert("document.ready error: " + err); + } + + +
      +

      [+tabTreeTitle+]

      + From 36a57589fd061548baa72617cd67d38f97e1f4ef Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Sat, 2 Sep 2017 13:45:21 +0200 Subject: [PATCH 030/577] EIT - elements list restyle To match site tree styles. https://image.prntscr.com/image/Grgc_Vc9SB21w6sQawC7qw.png --- .../elementsintree/assets/txt_content.tpl | 92 +++++++++++++------ 1 file changed, 63 insertions(+), 29 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index bf06c276dc..6e8ea2d885 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -16,14 +16,12 @@ } #treePane .tab-page ul { - margin: 0; - margin-bottom: 5px; + margin: 5px 0; padding: 0; } #treePane .tab-page ul li { list-style: none; - padding-left: 8px; } #treePane .tab-page ul li li { @@ -37,7 +35,7 @@ } #treePane .tab-page ul li a:hover { - text-decoration: underline; + text-decoration: none; } #treePane .tab { @@ -125,9 +123,27 @@ transition: none; } + #treePane .panel-heading { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + background-color: #FAFAFA; + margin-top: -1px; + } + + #treePane .panel { + padding-top: 1px; + } + + #treePane .panel-heading:hover { + background-color: #F2F2F2; + } + + #treePane .panel-collapse { + } + #treePane .panel-title a{ display: block; - padding: 4px 0 4px 17px; + padding: 4px 0 4px 1.9rem; color: #657587; font-weight: bold; } @@ -156,19 +172,6 @@ color: #657587; } - #treePane li.eltree { - margin-left: 5px; - line-height: 1.4em; - } - - #treePane li.eltree:before { - font-family: "FontAwesome"; - font-size: 14px; - padding:0 5px 0 0; - margin-right:2px; - color: #657587; - } - .filterElements-form--eit { width: 200px; width: calc(100% - 70px); @@ -226,8 +229,8 @@ } .ElementsInTree #tree .actionButtons--eit { - top: 2.8rem; - right: 1rem + top: 1.95rem; + right: 0.8rem; } .ElementsInTree #tree .actionButtons--eit li { @@ -237,10 +240,15 @@ .ElementsInTree #tree .actionButtons--eit li a { padding: 0.5rem; + color: #888; + } + + .ElementsInTree #tree .actionButtons--eit li a:hover { + color: #404040; } .ElementsInTree #tree .tab-page { - padding: 0.8rem 0 0.8rem 0.8rem !important; + padding: 0 !important; background-color: #fff; border: 1px solid #ddd; border-width: 1px 0; @@ -258,7 +266,7 @@ overflow: visible !important; max-height: none !important; box-sizing: border-box !important; - padding-top: 5px; + padding-top: 0; } .ElementsInTree #tree .tab-row { @@ -296,13 +304,26 @@ background-color: #fff; } - .ElementsInTree #tree .form-control { - padding: 0.25rem; - font-size: 0.8rem; + .ElementsInTree #tree .eltree { + line-height: 1.5; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 1.7rem; + background-color: rgba(33, 150, 243, 0); + -webkit-transition-duration: 0.15s; + transition-duration: 0.15s; } - .ElementsInTree #tree .eltree { - line-height: 1.5 + .ElementsInTree #tree .eltree:before { + font-family: "FontAwesome"; + font-size: 14px; + padding:0 5px 0 0; + margin-right:2px; + color: #657587; + } + + .ElementsInTree #tree .eltree:hover { + background-color: rgba(33, 150, 243, 0.1); } .ElementsInTree #tree .eltree img { @@ -312,15 +333,20 @@ } .ElementsInTree #tree #tabDoc { - padding-top: 7px !important; - padding-left: 0 !important; + padding-top: 0.5rem !important; + padding-bottom: 0.8rem !important; padding-left: 0 !important; + padding-right: 0 !important; } .ElementsInTree #tree #tabDoc::before { display: none } + .ElementsInTree #treeRoot a { + padding-left: 2em; + } + .ElementsInTree #treeMenu { height: 1.8rem; background-color: #DFDFDF !important; @@ -342,6 +368,14 @@ width: calc(100% - 85px) !important; } + .ElementsInTree .filterElements-form--eit .form-control { + padding: 0.25rem; + padding-left: 0.5rem; + height: 2rem; + font-size: 0.8rem; + border-width: 0; + } + .dark.ElementsInTree #tree .treeframebody { background-color: #1d2023 !important; color: #828282; From afba3c58f91ed7375dfc3de0644ceea4ec3b5762 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Sat, 2 Sep 2017 14:49:01 +0200 Subject: [PATCH 031/577] EIT - dark mode fix --- .../elementsintree/assets/txt_content.tpl | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 6e8ea2d885..9daf21251e 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -138,6 +138,16 @@ background-color: #F2F2F2; } + .dark #treePane .panel-heading { + border-top: 1px solid #3e4144; + border-bottom: 1px solid #3e4144; + background-color: #2f3236; + } + + .dark #treePane .panel-heading:hover { + background-color: #35383c; + } + #treePane .panel-collapse { } @@ -247,6 +257,10 @@ color: #404040; } + .dark.ElementsInTree #tree .actionButtons--eit li a:hover { + color: #bfbfbf; + } + .ElementsInTree #tree .tab-page { padding: 0 !important; background-color: #fff; @@ -326,6 +340,10 @@ background-color: rgba(33, 150, 243, 0.1); } + .dark.ElementsInTree #tree .eltree:hover { + background-color: rgba(255, 255, 255, 0.15); + } + .ElementsInTree #tree .eltree img { width: 1em; height: 1em; @@ -408,17 +426,20 @@ } .dark.ElementsInTree #tree .form-control { - background-color: rgba(0, 0, 0, 0.4); - border-color: rgba(255, 255, 255, 0.09); + background-color: transparent; color: #c7c7c7; } .dark.ElementsInTree #tree a { - color: #b7b7b7 + color: #b7b7b7; + } + + .dark.ElementsInTree #tree a:hover { + color: #dbdbdb; } .dark.ElementsInTree #tree .disabledPlugin a { - color: #b68282 + color: #b68282; } .dark.ElementsInTree #treeMenu { From 2fe9a830cb68a5cc2fd69aaa473a54fb1536c419 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Sat, 2 Sep 2017 15:23:38 +0200 Subject: [PATCH 032/577] EIT - fix disabled plugin color --- assets/plugins/elementsintree/assets/txt_content.tpl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 9daf21251e..6af9068c7d 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -225,6 +225,11 @@ .ElementsInTree #tree a { color: #404040; } + + .ElementsInTree #tree .disabledPlugin, + .ElementsInTree #tree .disabledPlugin a { + color: #B68282; + } .ElementsInTree #tree .treeframebody { background-color: #fafafa !important; @@ -434,6 +439,11 @@ color: #b7b7b7; } + .dark.ElementsInTree #tree .disabledPlugin, + .dark.ElementsInTree #tree .disabledPlugin a { + color: #B68282; + } + .dark.ElementsInTree #tree a:hover { color: #dbdbdb; } From d9d9f4dd275ce857392afa348398fbea1d11af3b Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 16:43:14 +0300 Subject: [PATCH 033/577] fix H1 create resource title --- manager/actions/mutate_content.dynamic.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/manager/actions/mutate_content.dynamic.php b/manager/actions/mutate_content.dynamic.php index 304f27148a..30e12c6725 100644 --- a/manager/actions/mutate_content.dynamic.php +++ b/manager/actions/mutate_content.dynamic.php @@ -578,7 +578,13 @@ function SetUrl(url, width, height, alt) { config['modx_charset']) . (iconv_strlen($content['pagetitle'], $modx->config['modx_charset']) > 50 ? '...' : '') . '(' . $_REQUEST['id'] . ')'; } else { - echo $_lang['create_resource_title']; + if ($modx->manager->action == '4') { + echo $_lang['add_resource']; + } else if ($modx->manager->action == '72') { + echo $_lang['add_weblink']; + } else { + echo $_lang['create_resource_title']; + } } ?> From 6240cdc5eb6d01f0d96e4c1743957ea1c75e60f9 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 16:46:30 +0300 Subject: [PATCH 034/577] fix #208 --- manager/frames/tree.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manager/frames/tree.php b/manager/frames/tree.php index 0434b1c36c..55b30bad7f 100644 --- a/manager/frames/tree.php +++ b/manager/frames/tree.php @@ -18,8 +18,8 @@ hasPermission('new_document')) { ?> - - + + @@ -27,7 +27,7 @@ hasPermission('edit_document')) { ?> - + hasPermission('assets_images')) { ?> From 1dbded621a288eb5218e64bf2a754e60df36a1c8 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 17:39:49 +0300 Subject: [PATCH 035/577] refactor modx.js for global tabs add function tabsInit --- manager/media/style/default/js/modx.js | 50 +++++++++++--------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index e4028c03fd..2546a14232 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -32,18 +32,8 @@ if (modx.config.mail_check_timeperiod > 0 && modx.permission.messages) { setTimeout('modx.updateMail(true)', 1000) } - d.addEventListener('click', function(e) { - modx.hideDropDown(e); - if (modx.config.global_tabs && e.target && ((e.target.tagName === 'A' && e.target.target === 'main') || (e.target.parentNode.tagName === 'A' && e.target.parentNode.target === 'main'))) { - var a = e.target.tagName === 'A' && e.target || e.target.parentNode.tagName === 'A' && e.target.parentNode; - e.preventDefault(); - if (e.shiftKey) { - modx.openWindow({url: a.href}) - } else { - modx.tabs({url: a.href, title: a.innerHTML}) - } - } - }, false); + d.addEventListener('click', modx.hideDropDown, false); + d.addEventListener('click', modx.tabsInit, false); }, mainMenu: { id: 'mainMenu', @@ -320,22 +310,10 @@ modx.main.stopWork(); modx.main.scrollWork(); modx.tree.restoreTree(); - w.main.document.onclick = modx.hideDropDown; - w.main.document.oncontextmenu = modx.main.oncontextmenu; + w.main.document.addEventListener('contextmenu', modx.main.oncontextmenu, false); + w.main.document.addEventListener('click', modx.hideDropDown, false); + w.main.document.addEventListener('click', modx.tabsInit, false); w.history.replaceState(null, d.title, (w.main.location.search === '?a=2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search)); - if (w.main.frameElement.id === 'mainframe') { - w.main.addEventListener('click', function(e) { - if (modx.config.global_tabs && e.target && ((e.target.tagName === 'A' && e.target.target === '') || (e.target.parentNode.tagName === 'A' && e.target.parentNode.target === ''))) { - var a = e.target.tagName === 'A' && e.target || e.target.parentNode.tagName === 'A' && e.target.parentNode; - e.preventDefault(); - if (e.shiftKey) { - modx.openWindow({url: a.href}) - } else { - modx.tabs({url: a.href, title: a.innerHTML}) - } - } - }) - } }, oncontextmenu: function(e) { if (e.ctrlKey) return; @@ -1490,8 +1468,19 @@ } } }, + tabsInit: function(e) { + if (modx.config.global_tabs && e.target && ((e.target.tagName === 'A' && e.target.target === 'main') || (e.target.parentNode.tagName === 'A' && e.target.parentNode.target === 'main'))) { + var a = e.target.tagName === 'A' && e.target || e.target.parentNode.tagName === 'A' && e.target.parentNode; + if (e.shiftKey) { + modx.openWindow({url: a.href}) + } else { + modx.tabs({url: a.href, title: a.innerHTML}) + } + e.preventDefault(); + } + }, tabs: function(a) { - if (typeof a === 'object' && a.url) { + if (typeof a === 'object' && a.url && /(index.php|http)/.test(a.url)) { if (modx.config.global_tabs) { var o = { url: a.url, @@ -1770,6 +1759,9 @@ o.el.classList.remove('show'); } o.calc(1); + if (o.o && o.o.parentNode) { + o.o.parentNode.removeChild(o.o) + } o.el.timer = setTimeout(function(e) { clearTimeout(o.el.timer); if (o.el.parentNode) { @@ -1887,7 +1879,7 @@ o.el.lastChild.style.overflowY = 'auto'; o.el.lastChild.style.maxHeight = o.maxheight + 'px'; } - if (o.url.substr(0, 4) === 'http' || o.url.substr(0, 9) === 'index.php') { + if (/(index.php|http)/.test(o.url)) { if (o.iframe === 'iframe') { o.uid = modx.urlToUid(a.url); o.el.className += ' ' + o.addclass + ' ' + o.className + '-iframe'; From 582ad3e7434804e6f2ac2e5ef73c3a17caed5191 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 17:41:20 +0300 Subject: [PATCH 036/577] refactor dashBoard added target="main" for open new tabs --- manager/actions/welcome.static.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/manager/actions/welcome.static.php b/manager/actions/welcome.static.php index 24e0178616..7b2756b026 100644 --- a/manager/actions/welcome.static.php +++ b/manager/actions/welcome.static.php @@ -20,9 +20,9 @@ $_SESSION['nrnewmessages'] = $nrnewmessages; $msg = array(); - $msg[] = sprintf('', $_style['icons_mail_large']); + $msg[] = sprintf('', $_style['icons_mail_large']); $nrnewmessages = $_SESSION['nrnewmessages'] > 0 ? ' (' . $_SESSION['nrnewmessages'] . ')' : ''; - $msg[] = sprintf(' [%%inbox%%]%s
      ', $nrnewmessages); + $msg[] = sprintf(' [%%inbox%%]%s
      ', $nrnewmessages); $nrnewmessages = $_SESSION['nrnewmessages'] > 0 ? '' . $_SESSION['nrnewmessages'] . '' : '0'; $welcome_messages = sprintf($_lang['welcome_messages'], $_SESSION['nrtotalmessages'], $nrnewmessages); $msg[] = sprintf('%s', $welcome_messages); @@ -117,7 +117,7 @@ [%inbox%] - [+msginfo+] + [+msginfo+] '; @@ -310,7 +310,7 @@ [%inbox%] - [[#getMessageCount]] + [[#getMessageCount]] @@ -486,7 +486,7 @@ function getRecentInfoList() { $tpl = getRecentInfoRowTpl(); - $btntpl['edit'] = ' '; + $btntpl['edit'] = ' '; $btntpl['preview_btn'] = ' '; $output = array(); @@ -520,9 +520,9 @@ function getRecentInfoList() { if($modx->hasPermission('delete_document')) { if($ph['deleted'] == 0) { - $delete_btn = ' '; + $delete_btn = ' '; } else { - $delete_btn = ' '; + $delete_btn = ' '; } $ph['delete_btn'] = str_replace('[+id+]', $docid, $delete_btn); } else { @@ -530,13 +530,13 @@ function getRecentInfoList() { } if($ph['deleted'] == 1 && $ph['published'] == 0) { - $publish_btn = ' '; + $publish_btn = ' '; } elseif($ph['deleted'] == 1 && $ph['published'] == 1) { - $publish_btn = ' '; + $publish_btn = ' '; } elseif($ph['deleted'] == 0 && $ph['published'] == 0) { - $publish_btn = ' '; + $publish_btn = ' '; } else { - $publish_btn = ' '; + $publish_btn = ' '; } $ph['publish_btn'] = str_replace('[+id+]', $docid, $publish_btn); @@ -564,7 +564,7 @@ function getRecentInfoRowTpl() { $tpl = ' [+id+] - [+pagetitle+] + [+pagetitle+] [+editedon:math("%s+[(server_offset_time)]"):dateFormat+] [+username+] [+edit_btn+][+preview_btn+][+delete_btn+][+publish_btn+][+info_btn+] @@ -590,7 +590,7 @@ function getRecentInfoRowTpl() { // setup icons function wrapIcon($i, $action) { - return sprintf('%s', $action, $i); + return sprintf('%s', $action, $i); } function getStartUpScript() { From a077ef7b472cdbefc2447c3d96390dc036d9e64f Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 18:46:14 +0300 Subject: [PATCH 037/577] EIT - fix height fix lock icons --- assets/plugins/elementsintree/assets/txt_content.tpl | 2 +- assets/plugins/elementsintree/includes/functions.inc.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 6af9068c7d..61132942c6 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -277,7 +277,7 @@ .ElementsInTree #tree .tab-page .panel-group .panel, .ElementsInTree #tree #tabDoc.tab-page>div { - max-height: calc(100vh - 10rem) !important; + max-height: calc(100vh - 8rem) !important; overflow: auto; } diff --git a/assets/plugins/elementsintree/includes/functions.inc.php b/assets/plugins/elementsintree/includes/functions.inc.php index 91fc0452ef..d0ab1297df 100644 --- a/assets/plugins/elementsintree/includes/functions.inc.php +++ b/assets/plugins/elementsintree/includes/functions.inc.php @@ -34,18 +34,18 @@ function getLockedByUser($lockType,$rowLock,$id) { if($rowLock['sid'] == $modx->sid) { $title = $modx->parseText($_lang['lock_element_editing'], $ph); - $tpl = ' '; - $params = array($title, $_style['icons_preview_resource']); + $tpl = ' '; + $params = array($title, $_style['actions_preview']); return vsprintf($tpl, $params); } else { $ph['username'] = $rowLock['username']; $title = $modx->parseText($_lang['lock_element_locked_by'], $ph); if($modx->hasPermission('remove_locks')) { - $tpl = ''; + $tpl = '%s'; $params = array($lockType, $id, $title, $_style['icons_secured']); return vsprintf($tpl, $params); } else { - $tpl = ''; + $tpl = '%s'; $params = array($title, $_style['icons_secured']); return vsprintf($tpl, $params); } From c8771c44bd50708e010efeb613c461f9bd1d7626 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 18:49:35 +0300 Subject: [PATCH 038/577] EIT - fix space locks icons --- assets/plugins/elementsintree/includes/functions.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/plugins/elementsintree/includes/functions.inc.php b/assets/plugins/elementsintree/includes/functions.inc.php index d0ab1297df..eaef1378ed 100644 --- a/assets/plugins/elementsintree/includes/functions.inc.php +++ b/assets/plugins/elementsintree/includes/functions.inc.php @@ -41,11 +41,11 @@ function getLockedByUser($lockType,$rowLock,$id) { $ph['username'] = $rowLock['username']; $title = $modx->parseText($_lang['lock_element_locked_by'], $ph); if($modx->hasPermission('remove_locks')) { - $tpl = '%s'; + $tpl = '%s '; $params = array($lockType, $id, $title, $_style['icons_secured']); return vsprintf($tpl, $params); } else { - $tpl = '%s'; + $tpl = '%s '; $params = array($title, $_style['icons_secured']); return vsprintf($tpl, $params); } From e8fc0bc09b8959c4b051cd2177a735599679e618 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 20:30:16 +0300 Subject: [PATCH 039/577] rafactor modx.js changed getQueryVariable --- manager/media/style/default/js/modx.js | 106 +++++++++++++------------ 1 file changed, 57 insertions(+), 49 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 2546a14232..bcd1fcb996 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -107,8 +107,8 @@ for (var i = 0; i < ul.children.length; i++) { ul.children[i].onmouseenter = function(e) { clearTimeout(timer); - this.offsetParent.querySelector('li.hover').classList.remove('hover'); - this.classList.add('hover'); + e.target.offsetParent.querySelector('li.hover').classList.remove('hover'); + e.target.classList.add('hover'); self.classList.add('hover'); e.preventDefault(); e.stopPropagation() @@ -413,11 +413,9 @@ } }, scroll: function(row, sel) { - sel = sel || row.querySelector('.selected') || row.firstChild + sel = sel || row.querySelector('.selected') || row.firstChild; var c = 0, - elms = row.childNodes, - p = row.offsetParent.querySelector('.prev'), - n = row.offsetParent.querySelector('.next'); + elms = row.childNodes; for (var i = 0; i < elms.length; i++) { c += elms[i].offsetWidth; } @@ -485,14 +483,20 @@ } } }, - getQueryVariable: function(v, q) { - var vars = q.split('&'); - for (var i = 0; i < vars.length; i++) { - var p = vars[i].split('='); - if (decodeURIComponent(p[0]) === v) { - return decodeURIComponent(p[1]) + getQueryVariable: function(a, b) { + var f = ''; + if (b || typeof b === 'string') { + b = b.split('?'); + b = b[1] || b[0]; + b = b.split('&'); + for (var i = 0; i < b.length; i++) { + var c = b[i].split('='); + if (c[0] === a) { + f = decodeURIComponent(c[1]) + } } } + return f; } }, resizer: { @@ -556,7 +560,7 @@ } } }, false); - w.addEventListener('touchend', function(e) { + w.addEventListener('touchend', function() { if (this.swipe === 'left') { d.body.classList.add('sidebar-closed'); modx.resizer.setWidth(0) @@ -686,7 +690,7 @@ onmousedown: function(e) { if (e.ctrlKey) { this.parentNode.removeAttribute('draggable'); - return; + return true; } else { var roles = this.dataset.roles + (this.parentNode.parentNode.id !== 'treeRoot' ? this.parentNode.parentNode.previousSibling.dataset.roles : ''); var draggable = (roles && modx.user.role !== 1 ? (roles.split(',').map(Number).indexOf(modx.user.role) > -1) : true); @@ -852,7 +856,7 @@ } } }, - toggleTheme: function(e) { + toggleTheme: function() { var myCodeMirrors = w.main.myCodeMirrors, key; if (d.body.classList.contains('dark')) { d.body.classList.remove('dark'); @@ -932,7 +936,7 @@ } } else { this.rpcNode.style.overflow = 'hidden'; - this.rpcNode.firstElementChild.style.marginTop = -this.rpcNode.offsetHeight + 'px' + this.rpcNode.firstElementChild.style.marginTop = -this.rpcNode.offsetHeight + 'px'; $(this.rpcNode.firstChild).animate({ marginTop: 0 }, 100); @@ -1014,7 +1018,9 @@ if (e.ctrlKey) return; e.preventDefault(); var tree = d.getElementById('tree'), - el = d.getElementById('node' + id) || e.target; + el = d.getElementById('node' + id) || e.target, + x = 0, + y = 0; if (el.firstChild && el.firstChild.dataset && el.firstChild.dataset.contextmenu) { el = el.firstChild; } @@ -1051,8 +1057,8 @@ this.ctx.appendChild(item) } } - var x = e.clientX > 0 ? e.clientX : e.pageX; - var y = e.clientY > 0 ? e.clientY : e.pageY; + x = e.clientX > 0 ? e.clientX : e.pageX; + y = e.clientY > 0 ? e.clientY : e.pageY; e.view.position = e.view.frameElement ? e.view.frameElement.getBoundingClientRect() : e.target.offsetParent.getBoundingClientRect(); if (e.view.frameElement) { x += e.view.position.left; @@ -1115,8 +1121,8 @@ i11.style.display = 'none'; } var bodyHeight = tree.offsetHeight + tree.offsetTop; - var x = e.clientX > 0 ? e.clientX : e.pageX; - var y = e.clientY > 0 ? e.clientY : e.pageY; + x = e.clientX > 0 ? e.clientX : e.pageX; + y = e.clientY > 0 ? e.clientY : e.pageY; if (y + ctx.offsetHeight / 2 > bodyHeight) { y = bodyHeight - ctx.offsetHeight - 5 } else if (y - ctx.offsetHeight / 2 < tree.offsetTop) { @@ -1214,7 +1220,7 @@ if (el) el.classList.remove('current'); if (a) { if (typeof a === 'number') { - var el = d.querySelector('#node' + a + '>.node'); + el = d.querySelector('#node' + a + '>.node'); if (el) el.classList.add('current') } else { a.classList.add('current') @@ -1348,8 +1354,8 @@ var div = d.createElement('div'); div.innerHTML = r; var tabs = div.getElementsByClassName('tab-page'); - var el, p; - for (var i = 0; i < tabs.length; i++) { + var el, p, i; + for (i = 0; i < tabs.length; i++) { if (tabs[i].id !== 'tabDoc') { el = tabs[i].getElementsByClassName('panel-group')[0]; el.style.display = 'none'; @@ -1360,7 +1366,7 @@ } } setRememberCollapsedCategories(); - for (var i = 0; i < tabs.length; i++) { + for (i = 0; i < tabs.length; i++) { if (tabs[i].id !== 'tabDoc') { el = d.getElementById(tabs[i].id).getElementsByClassName('panel-group')[1]; el.parentNode.removeChild(el); @@ -1370,11 +1376,11 @@ } } loadPositions(); - for (var i = 0; i < tabIds.length; i++) { + for (i = 0; i < tabIds.length; i++) { initQuicksearch(tabIds[i] + '_search', tabIds[i]); } var at = d.querySelectorAll('#tree .accordion-toggle'); - for (var i = 0; i < at.length; i++) { + for (i = 0; i < at.length; i++) { at[i].onclick = function(e) { e.preventDefault(); var thisItemCollapsed = $(this).hasClass('collapsed'); @@ -1744,7 +1750,7 @@ if (o.o && els.length === 1) { o.o.parentNode.removeChild(o.o) } - o.el.timer = setTimeout(function(e) { + o.el.timer = setTimeout(function() { clearTimeout(o.el.timer); if (o.el.parentNode) { o.el.parentNode.removeChild(o.el) @@ -1762,7 +1768,7 @@ if (o.o && o.o.parentNode) { o.o.parentNode.removeChild(o.o) } - o.el.timer = setTimeout(function(e) { + o.el.timer = setTimeout(function() { clearTimeout(o.el.timer); if (o.el.parentNode) { o.el.parentNode.removeChild(o.el) @@ -1802,21 +1808,21 @@ } }, checkDirt: function() { -// if (!o.el.classList.contains('changed') && typeof o.el.lastElementChild.firstElementChild.contentWindow.documentDirty && o.el.lastElementChild.firstElementChild.contentWindow.document.getElementById('Button1')) { -// modx.popupTimer = setInterval(function() { -// console.log('timer: ' + modx.popupTimer); -// if (o.el.lastElementChild.firstElementChild.contentWindow && o.el.lastElementChild.firstElementChild.contentWindow.documentDirty) { -// clearInterval(modx.popupTimer); -// o.el.classList.add('changed'); -// o.tab = d.getElementById(o.wrap.id.replace('-page', '')); -// if (o.tab) { -// o.tab.classList.add('changed'); -// o.wrap.firstElementChild.contentWindow.documentDirty = true -// } -// } -// }, 1000); -// } -// modx.tree.setItemToChange() + // if (!o.el.classList.contains('changed') && typeof o.el.lastElementChild.firstElementChild.contentWindow.documentDirty && o.el.lastElementChild.firstElementChild.contentWindow.document.getElementById('Button1')) { + // modx.popupTimer = setInterval(function() { + // console.log('timer: ' + modx.popupTimer); + // if (o.el.lastElementChild.firstElementChild.contentWindow && o.el.lastElementChild.firstElementChild.contentWindow.documentDirty) { + // clearInterval(modx.popupTimer); + // o.el.classList.add('changed'); + // o.tab = d.getElementById(o.wrap.id.replace('-page', '')); + // if (o.tab) { + // o.tab.classList.add('changed'); + // o.wrap.firstElementChild.contentWindow.documentDirty = true + // } + // } + // }, 1000); + // } + // modx.tree.setItemToChange() } }; for (var k in a) { @@ -1833,7 +1839,7 @@ } o.uid = a.url ? modx.urlToUid(a.url) : modx.toHash(a); o.className = 'evo-popup'; - o.wrap = typeof o.wrap === 'string' ? d.getElementById(o.wrap) : o.wrap + o.wrap = typeof o.wrap === 'string' ? d.getElementById(o.wrap) : o.wrap; if (o.overlay && !o.wrap.querySelector('.evo-popup-overlay')) { o.o = d.createElement('div'); o.o.className = 'evo-popup-overlay'; @@ -1989,17 +1995,18 @@ ) { var els = d.querySelectorAll('.dropdown'), n = null, - t = e.target || e.target.parentNode; + t = e.target || e.target.parentNode, + i; if (t.dataset.toggle) { n = d.querySelector(t.dataset.toggle); } else if (t.classList.contains('dropdown-toggle')) n = t.offsetParent; - for (var i = 0; i < els.length; i++) { + for (i = 0; i < els.length; i++) { if (n !== els[i]) { els[i].classList.remove('show') } } els = w.main.document.querySelectorAll('.dropdown'); - for (var i = 0; i < els.length; i++) { + for (i = 0; i < els.length; i++) { if (n !== els[i]) { els[i].classList.remove('show') } @@ -2067,7 +2074,8 @@ return Math.abs(b).toString() }, urlToUid: function(a) { - var a = a.split('?'), b = ''; + var b = ''; + a = a.split('?'); if (a && a[1]) { if (modx.main.getQueryVariable('a', a[1])) { b += '&a=' + modx.main.getQueryVariable('a', a[1]) From 35e1e0a0aa22872633bb0cfe5e7af0b0f5ddc99e Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 21:04:04 +0300 Subject: [PATCH 040/577] fix modx.tabs --- manager/media/style/default/js/modx.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index bcd1fcb996..7777c6f821 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -1563,15 +1563,15 @@ }, events: { click: function() { - if (typeof w.main.documentDirty && w.main.documentDirty && !o.tab.classList.contains('changed')) { + if (typeof w.main.documentDirty !== 'undefined' && w.main.documentDirty && !o.tab.classList.contains('changed')) { o.tab.classList.add('changed'); - w.main.removeEventListener('click', o.events.click) + w.main.document.removeEventListener('click', o.events.click) } }, keyup: function() { - if (typeof w.main.documentDirty && w.main.documentDirty && !o.tab.classList.contains('changed')) { + if (typeof w.main.documentDirty !== 'undefined' && !o.tab.classList.contains('changed')) { o.tab.classList.add('changed'); - w.main.removeEventListener('keyup', o.events.click) + w.main.document.removeEventListener('keyup', o.events.keyup) } } } @@ -1643,9 +1643,9 @@ modx.tree.setItemToChange(); modx.main.onload(e) } + w.main.document.addEventListener('click', o.events.click, false); + w.main.document.addEventListener('keyup', o.events.keyup, false); } - w.main.addEventListener('click', o.events.click, false); - w.main.addEventListener('keyup', o.events.click, false); }; o.el.appendChild(o.frame); o.show(0) From e89d59b973375bcda1074d5112296b201d510f1f Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 2 Sep 2017 21:12:43 +0300 Subject: [PATCH 041/577] remove index.php in string url --- manager/includes/active_user_locks.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/active_user_locks.inc.php b/manager/includes/active_user_locks.inc.php index a6fda0071b..13db38f5d9 100644 --- a/manager/includes/active_user_locks.inc.php +++ b/manager/includes/active_user_locks.inc.php @@ -18,7 +18,7 @@ function unlockThisElement() var stay = document.getElementById('stay'); // Trigger unlock if ((stay && stay.value !== '2') || !form_save) { - var url = 'index.php?a=67&type=&id=&o=' + Math.random(); + var url = '?a=67&type=&id=&o=' + Math.random(); if (navigator.sendBeacon) { navigator.sendBeacon(url) } else { From 45243d01cea2d8237e93b88eebdb0fcec2354680 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 3 Sep 2017 01:30:26 +0300 Subject: [PATCH 042/577] EIT fix open new tab from contextmenu --- .../elementsintree/assets/on_manager_tree_render.tpl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/plugins/elementsintree/assets/on_manager_tree_render.tpl b/assets/plugins/elementsintree/assets/on_manager_tree_render.tpl index 0fe6c2f585..015a9c5315 100644 --- a/assets/plugins/elementsintree/assets/on_manager_tree_render.tpl +++ b/assets/plugins/elementsintree/assets/on_manager_tree_render.tpl @@ -142,8 +142,12 @@ var r = confirm(confirmMsg); if (r != true) return; } - - top.main.document.location.href="index.php?a="+actionsIds[action]+ (id ? "&id="+id : ""); + + if (typeof modx !== 'undefined' && modx.config.global_tabs) { + modx.tabs({url: modx.MODX_MANAGER_URL + '?a=' + actionsIds[action] + (id ? '&id=' + id : ''), title: name}) + } else { + top.main.document.location.href="index.php?a="+actionsIds[action]+ (id ? "&id="+id : ""); + } } <@ENDIF> From d95d5c543fd5348735f112334c650999b6843e44 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 3 Sep 2017 19:37:47 +0300 Subject: [PATCH 043/577] EIT fix style --- .../elementsintree/assets/txt_content.tpl | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 61132942c6..4bf52cdc2b 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -130,6 +130,10 @@ margin-top: -1px; } + #treePane .panel-heading:first-child { + border-top: none + } + #treePane .panel { padding-top: 1px; } @@ -141,11 +145,11 @@ .dark #treePane .panel-heading { border-top: 1px solid #3e4144; border-bottom: 1px solid #3e4144; - background-color: #2f3236; + background-color: #2f323a; } .dark #treePane .panel-heading:hover { - background-color: #35383c; + background-color: #363942; } #treePane .panel-collapse { @@ -232,7 +236,7 @@ } .ElementsInTree #tree .treeframebody { - background-color: #fafafa !important; + background-color: #fff !important; border-right: 1px solid #cfd2d6 } @@ -269,7 +273,6 @@ .ElementsInTree #tree .tab-page { padding: 0 !important; background-color: #fff; - border: 1px solid #ddd; border-width: 1px 0; box-shadow: none; min-height: 55px; @@ -286,11 +289,11 @@ max-height: none !important; box-sizing: border-box !important; padding-top: 0; + border-top: 1px solid #ddd; } .ElementsInTree #tree .tab-row { padding: 0; - margin-bottom: -1px; display: table; width: 100%; table-layout: fixed; @@ -341,11 +344,11 @@ color: #657587; } - .ElementsInTree #tree .eltree:hover { + .ElementsInTree #tree .eltree:hover, .ElementsInTree #tree .eltree.current { background-color: rgba(33, 150, 243, 0.1); } - .dark.ElementsInTree #tree .eltree:hover { + .dark.ElementsInTree #tree .eltree:hover, .dark.ElementsInTree #tree .eltree.current { background-color: rgba(255, 255, 255, 0.15); } @@ -400,13 +403,13 @@ } .dark.ElementsInTree #tree .treeframebody { - background-color: #1d2023 !important; + background-color: #202329 !important; color: #828282; border-color: #2a2d33 } .dark.ElementsInTree #tree .tab-row { - border-top-color: #343739; + border-top-color: #2a2d33; } .dark.ElementsInTree #tree .tab-row .tab { @@ -420,14 +423,16 @@ } .dark.ElementsInTree #tree .tab-row .tab.selected { - background-color: #24272A; - border-color: #343739; + background-color: #202329; color: #bfbfbf; } .dark.ElementsInTree #tree .tab-page { - background-color: #24272A; - border-color: rgba(255, 255, 255, .1) + background-color: #202329; + } + + .dark.ElementsInTree #tree .tab-page .panel-group { + border-color: #2a2d33; } .dark.ElementsInTree #tree .form-control { From 0243270e22bf304bc97bed6b8122350f8602a577 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 3 Sep 2017 19:45:17 +0300 Subject: [PATCH 044/577] EIT fix border-color --- assets/plugins/elementsintree/assets/txt_content.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 4bf52cdc2b..2d71e03fb0 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -131,7 +131,7 @@ } #treePane .panel-heading:first-child { - border-top: none + border-top-color: transparent !important; } #treePane .panel { @@ -432,7 +432,7 @@ } .dark.ElementsInTree #tree .tab-page .panel-group { - border-color: #2a2d33; + border-color: #3e4144; } .dark.ElementsInTree #tree .form-control { From 3c17ad8e31c74a4239ef19468bc7c1c20b9d1f58 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 3 Sep 2017 19:55:13 +0300 Subject: [PATCH 045/577] fix tree style border-color --- manager/media/style/default/css/tree.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/media/style/default/css/tree.css b/manager/media/style/default/css/tree.css index 511456d4fe..cb8cc757c1 100644 --- a/manager/media/style/default/css/tree.css +++ b/manager/media/style/default/css/tree.css @@ -2,7 +2,7 @@ #treeloader { position: absolute; display: block; overflow: hidden; right: 0.3em; top: 0.3em; opacity: 0; visibility: hidden; -webkit-transition-duration: 0.5s; transition-duration: 0.5s } #treeloader .fa { font-size: 1em; } #treeloader.visible { opacity: 0.7; visibility: visible; -webkit-transition-duration: 0s; transition-duration: 0s } -.treeframebody { height: 100%; background-color: #fafafa; box-shadow: inset -0.15rem 0.15rem 0.45rem 0 rgba(0, 0, 0, 0.1); } +.treeframebody { height: 100%; background-color: #fafafa; border-right: 1px solid #cfd2d6; } #treeMenu { overflow: hidden; padding: 0 0.1em; height: 1.875rem; background-color: #dfdfdf; border-bottom: 1px solid #cfd2d6 } #treeMenu .treeButton { display: inline-block; cursor: pointer; padding: 0 0.2em; height: 1.875rem; line-height: 2rem; white-space: nowrap; text-align: center; vertical-align: middle; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } #treeMenu .treeButton:hover:not(.disabled) { background-color: rgba(255, 255, 255, .5); cursor: pointer; -webkit-transition-duration: 0s; transition-duration: 0s } @@ -44,7 +44,7 @@ .dark #treeMenu { background-color: rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.2); border-right-color: #2a2d33 } .dark #treeMenu .treeButton { color: #a9a9a9; } .dark #treeMenu .treeButton:hover:not(.disabled) { background-color: #2d3033; color: #fff } -.dark #tree .treeframebody { background-color: #202329 } +.dark #tree .treeframebody { background-color: #202329; border-color: #2a2d33 } .dark #treeHolder .rootNode a { color: #C5C5C5; } .dark #treeHolder .rootNode a:hover { color: #eee } .dark #treeRoot { color: #b3b3b3; } From 5a2de3f17c6895bd0812faed7a69e32939ab2737 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 3 Sep 2017 20:17:33 +0300 Subject: [PATCH 046/577] refactor ajax.php --- manager/media/style/default/ajax.php | 37 +++++++++++++++------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/manager/media/style/default/ajax.php b/manager/media/style/default/ajax.php index b943f91005..304c2c1699 100644 --- a/manager/media/style/default/ajax.php +++ b/manager/media/style/default/ajax.php @@ -11,8 +11,8 @@ $modx->getSettings(); } -if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') || ($_SERVER['REQUEST_METHOD'] != 'POST')) { - $modx->sendRedirect($modx->config['site_url']); +if (!isset($_SESSION['mgrValidated']) || !isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') || ($_SERVER['REQUEST_METHOD'] != 'POST')) { + $modx->sendErrorPage(); } include_once MODX_BASE_PATH . MGR_DIR . '/includes/lang/' . $modx->config['manager_language'] . '.inc.php'; @@ -197,7 +197,7 @@ $a = 88; $output = ''; $items = ''; - $filter = !empty($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '\%*_') : ''; + $filter = !empty($_REQUEST['filter']) && is_scalar($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '\%*_') : ''; $sqlLike = $filter ? 'WHERE t1.username LIKE "' . $modx->db->escape($filter) . '%"' : ''; $sqlLimit = $sqlLike ? '' : 'LIMIT ' . $limit; @@ -233,10 +233,11 @@ } case 'modxTagHelper': { - $name = isset($_REQUEST['name']) ? $_REQUEST['name'] : false; - $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : false; + $name = isset($_REQUEST['name']) && is_scalar($_REQUEST['name']) ? $modx->db->escape($_REQUEST['name']) : false; + $type = isset($_REQUEST['type']) && is_scalar($_REQUEST['type']) ? $modx->db->escape($_REQUEST['type']) : false; + $contextmenu = ''; - if ($name && $type) { + if ($role && $name && $type) { switch ($type) { case 'Snippet': case 'SnippetNoCache': { @@ -254,7 +255,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=22&id=" . $row['id'] + 'url' => "index.php?a=22&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -270,7 +271,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_snippet'], - 'url' => "index.php?a=23&itemname=" . $name + 'url' => "index.php?a=23&itemname=" . $name ) ); } @@ -292,7 +293,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=78&id=" . $row['id'] + 'url' => "index.php?a=78&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -308,7 +309,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], - 'url' => "index.php?a=77&itemname=" . $name + 'url' => "index.php?a=77&itemname=" . $name ) ); } @@ -329,7 +330,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=78&id=" . $row['id'] + 'url' => "index.php?a=78&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -353,7 +354,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=22&id=" . $row['id'] + 'url' => "index.php?a=22&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -369,11 +370,11 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], - 'url' => "index.php?a=77&itemname=" . $name + 'url' => "index.php?a=77&itemname=" . $name ), 'item2' => array( 'innerHTML' => ' ' . $_lang['new_snippet'], - 'url' => "index.php?a=23&itemname=" . $name + 'url' => "index.php?a=23&itemname=" . $name ) ); } @@ -441,7 +442,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=301&id=" . $row['id'] + 'url' => "index.php?a=301&id=" . $row['id'] ) ); if (!empty($row['description'])) { @@ -457,7 +458,7 @@ ), 'item' => array( 'innerHTML' => ' ' . $_lang['new_tmplvars'], - 'url' => "index.php?a=300&itemname=" . $name + 'url' => "index.php?a=300&itemname=" . $name ) ); } @@ -468,6 +469,8 @@ echo json_encode($contextmenu, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE); break; } + + break; } case 'movedocument' : { @@ -476,7 +479,7 @@ if ($modx->hasPermission('new_document') && $modx->hasPermission('edit_document') && $modx->hasPermission('save_document')) { $id = !empty($_REQUEST['id']) ? (int)$_REQUEST['id'] : ''; $parent = isset($_REQUEST['parent']) ? (int)$_REQUEST['parent'] : 0; - $menuindex = isset($_REQUEST['menuindex']) ? $_REQUEST['menuindex'] : 0; + $menuindex = isset($_REQUEST['menuindex']) && is_scalar($_REQUEST['menuindex']) ? $_REQUEST['menuindex'] : 0; // set parent if ($id && $parent >= 0) { From b1df2d81471fe18cae189b322bfa555fd80447c8 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Mon, 4 Sep 2017 02:30:47 +0300 Subject: [PATCH 047/577] EIT update style --- .../elementsintree/assets/txt_content.tpl | 105 ++++++++---------- 1 file changed, 44 insertions(+), 61 deletions(-) diff --git a/assets/plugins/elementsintree/assets/txt_content.tpl b/assets/plugins/elementsintree/assets/txt_content.tpl index 2d71e03fb0..bea77b019b 100644 --- a/assets/plugins/elementsintree/assets/txt_content.tpl +++ b/assets/plugins/elementsintree/assets/txt_content.tpl @@ -44,8 +44,7 @@ } #treePane .tab > span > .fa { - margin-right: 2px; - margin-left: 2px; + margin: 0; } #treePane .tab.selected { @@ -61,8 +60,7 @@ content: "."; clear: both; display: block; - visibility: hidden; - height: 0px; + background-color: #cfd2d6; } #treePane .ext-ico { @@ -297,12 +295,11 @@ display: table; width: 100%; table-layout: fixed; - border-top: 1px solid #CFD2D6; background-color: #dfdfdf; } .ElementsInTree #tree .tab-row .tab { - height: 1.8rem; + height: 1.875rem; line-height: 1.75rem; background-color: transparent; border-color: #cfd2d6; @@ -311,6 +308,7 @@ text-align: center; vertical-align: middle; width: 100%; + z-index: 2; } .ElementsInTree #tree .tab-row .tab:last-child { @@ -373,13 +371,7 @@ padding-left: 2em; } - .ElementsInTree #treeMenu { - height: 1.8rem; - background-color: #DFDFDF !important; - } - .ElementsInTree #treeMenu.is-intab { - margin-left: 0.1rem; height: 1.875rem; background-color: transparent !important; } @@ -408,10 +400,6 @@ border-color: #2a2d33 } - .dark.ElementsInTree #tree .tab-row { - border-top-color: #2a2d33; - } - .dark.ElementsInTree #tree .tab-row .tab { color: #7b7b7b; border-color: #2a2d33; @@ -479,11 +467,6 @@ box-shadow: none !important; } - #treeMenu { - background-color: transparent !important; - border-bottom-color: transparent !important; - } - [+treeButtonsInTab_css+] @@ -683,7 +666,7 @@ }); // Get size of invisible elements - http://stackoverflow.com/a/8839261/2354531 - jQuery.fn.getSize = function() { + jQuery.fn.getSize = function() { var $wrap = jQuery("
      ").appendTo(jQuery("body")); $wrap.css({ "position": "absolute !important", @@ -706,49 +689,49 @@ jQuery(document).ready(function() { - jQuery(".filterElements-form").keydown(function (e) { - if(e.keyCode == 13) e.preventDefault(); + jQuery('.filterElements-form').keydown(function(e) { + if (e.keyCode === 13) e.preventDefault(); }); [+treeButtonsInTab_js+] - // Shift-Mouseclick opens/collapsed all categories - jQuery(".accordion-toggle").click(function(e) { - e.preventDefault(); - var thisItemCollapsed = jQuery(this).hasClass("collapsed"); - if (e.shiftKey) { - // Shift-key pressed - var toggleItems = jQuery(this).closest(".panel-group").find("> .panel .accordion-toggle"); - var collapseItems = jQuery(this).closest(".panel-group").find("> .panel > .panel-collapse"); - if(thisItemCollapsed) { - toggleItems.removeClass("collapsed"); - collapseItems.collapse("show"); - } else { - toggleItems.addClass("collapsed"); - collapseItems.collapse("hide"); - } - // Save states to localStorage - toggleItems.each(function() { - state = jQuery(this).hasClass("collapsed") ? 1 : 0; - setLastCollapsedCategory(jQuery(this).data("cattype"), jQuery(this).data("catid"), state); - }); - writeElementsInTreeParamsToStorage(); - } else { - jQuery(this).toggleClass("collapsed"); - jQuery(jQuery(this).attr("href")).collapse("toggle"); - // Save state to localStorage - state = thisItemCollapsed ? 0 : 1; - setLastCollapsedCategory(jQuery(this).data("cattype"), jQuery(this).data("catid"), state); - writeElementsInTreeParamsToStorage(); - } - }); - - setRememberCollapsedCategories(); - - }); - } catch(err) { - alert("document.ready error: " + err); - } + // Shift-Mouseclick opens/collapsed all categories + jQuery('.accordion-toggle').click(function(e) { + e.preventDefault(); + var thisItemCollapsed = jQuery(this).hasClass('collapsed'); + if (e.shiftKey) { + // Shift-key pressed + var toggleItems = jQuery(this).closest('.panel-group').find('> .panel .accordion-toggle'); + var collapseItems = jQuery(this).closest('.panel-group').find('> .panel > .panel-collapse'); + if (thisItemCollapsed) { + toggleItems.removeClass('collapsed'); + collapseItems.collapse('show'); + } else { + toggleItems.addClass('collapsed'); + collapseItems.collapse('hide'); + } + // Save states to localStorage + toggleItems.each(function() { + state = jQuery(this).hasClass('collapsed') ? 1 : 0; + setLastCollapsedCategory(jQuery(this).data('cattype'), jQuery(this).data('catid'), state); + }); + writeElementsInTreeParamsToStorage(); + } else { + jQuery(this).toggleClass('collapsed'); + jQuery(jQuery(this).attr('href')).collapse('toggle'); + // Save state to localStorage + state = thisItemCollapsed ? 0 : 1; + setLastCollapsedCategory(jQuery(this).data('cattype'), jQuery(this).data('catid'), state); + writeElementsInTreeParamsToStorage(); + } + }); + + setRememberCollapsedCategories(); + + }); + } catch (err) { + alert('document.ready error: ' + err); + } \n"; $html .= "\n"; From 2de5879097581ddaa90eb103f9a65bba3b08cc68 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Thu, 7 Sep 2017 00:48:00 +0300 Subject: [PATCH 074/577] update modx.js refactor modx.search --- manager/media/style/default/js/modx.js | 160 ++++++++++--------------- 1 file changed, 66 insertions(+), 94 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index c39a36209f..7467c54cad 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -12,7 +12,7 @@ localStorage.setItem('MODX_widthSideBar', this.config.tree_width) } this.tree.init(); - this.mainMenu.init(); + this.mainmenu.init(); if (w.location.hash) { if (modx.getActionFromUrl(w.location.hash, 2)) { w.history.replaceState(null, d.title, modx.MODX_MANAGER_URL) @@ -38,7 +38,7 @@ d.addEventListener('click', modx.hideDropDown, false); d.addEventListener('click', modx.tabsInit, false); }, - mainMenu: { + mainmenu: { id: 'mainMenu', init: function() { //console.log('modx.mainMenu.init()'); @@ -119,7 +119,7 @@ } ul.classList.add('show'); setTimeout(function() { - modx.mainMenu.search(href, ul) + modx.mainmenu.search(href, ul) }, 200) } }) @@ -187,125 +187,97 @@ } }, search: { - id: 'searchform', - idResult: 'searchresult', - idInput: 'searchid', - classResult: 'ajaxSearchResults', - classMask: 'mask', + result: null, + results: null, + input: null, + mask: null, + loader: null, timer: 0, init: function() { - this.result = d.getElementById(this.idResult); + this.result = d.getElementById('searchresult'); + this.input = d.getElementById('searchid'); + this.mask = d.querySelector('#searchform .mask'); if (!this.result) { this.result = d.createElement('div'); - this.result.id = this.idResult; + this.result.id = 'searchresult'; d.body.appendChild(this.result); } - var t = this, - el = d.getElementById(this.idInput), - r = d.createElement('i'); - r.className = 'fa fa-refresh fa-spin fa-fw'; - el.parentNode.appendChild(r); + this.loader = d.createElement('i'); + this.loader.className = 'fa fa-refresh fa-spin fa-fw'; + this.input.parentNode.appendChild(this.loader); if (modx.config.global_tabs) { - el.parentNode.onsubmit = function(e) { + this.input.parentNode.onsubmit = function(e) { e.preventDefault(); this.target = 'mainsearch'; modx.tabs({url: this.action, title: 'Search', name: 'mainsearch'}); this.submit(); } } - el.onkeyup = function(e) { + var s = this; + this.input.onkeyup = function(e) { e.preventDefault(); - clearTimeout(t.timer); - if (el.value.length !== '' && el.value.length > 2) { - t.timer = setTimeout(function() { - var xhr = modx.XHR(); - xhr.open('GET', modx.MODX_MANAGER_URL + '?a=71&ajax=1&submitok=Search&searchid=' + el.value, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); - xhr.onload = function() { - if (this.status === 200) { - r.style.display = 'none'; - var div = d.createElement('div'); - div.innerHTML = this.responseText; - var o = div.getElementsByClassName(t.classResult)[0]; - if (o) { - if (o.innerHTML !== '') { - t.result.innerHTML = o.outerHTML; - t.open(); - t.result.onclick = function(e) { - if (e.target.tagName === 'I') { - modx.openWindow({ - title: e.target.parentNode.innerText, - id: e.target.parentNode.id, - url: e.target.parentNode.href - }); - return false - } - var p = (e.target.tagName === 'A' && e.target) || e.target.parentNode; - if (p.tagName === 'A') { - var el = t.result.querySelector('.selected'); - if (el) el.className = ''; - p.className = 'selected'; - if (modx.isMobile) t.close() - } - } + clearTimeout(s.timer); + if (s.input.value.length !== '' && s.input.value.length > 2) { + s.timer = setTimeout(function() { + s.loader.style.display = 'block'; + modx.get(modx.MODX_MANAGER_URL + '?a=71&ajax=1&submitok=Search&searchid=' + s.input.value, function(data) { + s.loader.style.display = 'none'; + s.results = data.querySelector('.ajaxSearchResults'); + if (s.results && s.results.innerHTML !== '') { + s.result.innerHTML = s.results.outerHTML; + s.open(); + s.result.onclick = function(e) { + var t = e.target, + p = t.parentNode; + if (t.tagName === 'I') { + modx.openWindow({ + title: p.innerText, + id: p.id, + url: p.href + }); + e.preventDefault(); + e.stopPropagation() } else { - t.empty() + var a = (t.tagName === 'A' && t) || (p.tagName === 'A' && p); + if (a) { + var el = s.result.querySelector('.selected'); + if (el) el.className = ''; + a.className = 'selected'; + if (modx.isMobile) s.close() + } } - } else { - t.empty() } + } else { + s.empty() } - }; - xhr.onloadstart = function() { - r.style.display = 'block' - }; - xhr.onerror = function() { - console.warn(this.status) - }; - xhr.send() + }, 'document'); }, 300) } else { - t.empty() + s.empty() } }; if (modx.isMobile) { - el.onblur = function() { - t.close() - } - } - el.onfocus = function() { - t.open() - }; - el.onclick = function() { - t.open() - }; - el.onmouseenter = function() { - t.open() - }; - this.result.onmouseover = function() { - t.open() - }; - this.result.onmouseout = function() { - t.close() - }; - d.getElementById(this.id).getElementsByClassName(this.classMask)[0].onmouseenter = function() { - t.open() - }; - d.getElementById(this.id).getElementsByClassName(this.classMask)[0].onmouseout = function() { - t.close() - } + this.input.onblur = this.close + } + this.input.onfocus = this.open; + this.input.onclick = this.open; + this.input.onmouseenter = this.open; + this.result.onmouseenter = this.open; + this.result.onmouseleave = this.close; + this.mask.onmouseenter = this.open; + this.mask.onmouseleave = this.close }, open: function() { - if (this.result.getElementsByClassName(this.classResult)[0]) { - this.result.classList.add('open') + if (modx.search.results) { + modx.search.result.classList.add('open') } }, close: function() { - this.result.classList.remove('open') + modx.search.result.classList.remove('open') }, empty: function() { - this.result.classList.remove('open'); - this.result.innerHTML = '' + modx.search.result.classList.remove('open'); + modx.search.result.innerHTML = '' } }, main: { @@ -2188,10 +2160,10 @@ } return false }); - if (b && b[c](a)) return b; + if (b && c && b[c](a)) return b; while (b) { d = b.parentElement; - if (d && d[c](a)) return d; + if (d && c && d[c](a)) return d; b = d } return null; From d094e7278cdea2ea936a0a1968d836b1bc2c86ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=91=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D1=81=D0=BE=D0=B2?= Date: Thu, 7 Sep 2017 03:16:10 +0500 Subject: [PATCH 075/577] Update ajax.php --- manager/media/style/default/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/media/style/default/ajax.php b/manager/media/style/default/ajax.php index ceb0a349b7..9a0290d9aa 100644 --- a/manager/media/style/default/ajax.php +++ b/manager/media/style/default/ajax.php @@ -43,7 +43,7 @@ case '76': { - $elements = isset($_REQUEST['elements']) && is_scalar($_REQUEST['elements']) ? $_REQUEST['elements'] : ''; + $elements = isset($_REQUEST['elements']) && is_scalar($_REQUEST['elements']) ? htmlentities($_REQUEST['elements']) : ''; if ($elements) { $output = ''; From f849366eef7affe6e56be0a86a6991c0bd705933 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 11:15:15 +0200 Subject: [PATCH 076/577] Progress Bar with Steps --- install/actions/action_install.php | 10 +++++ install/actions/action_summary.php | 13 +++++- install/actions/tpl_language.html | 10 +++++ install/actions/tpl_mode.html | 10 +++++ install/actions/tpl_options.html | 10 +++++ install/style.css | 69 +++++++++++++++++++++++++++++- 6 files changed, 120 insertions(+), 2 deletions(-) diff --git a/install/actions/action_install.php b/install/actions/action_install.php index ec39d08fc3..2bbba853e4 100644 --- a/install/actions/action_install.php +++ b/install/actions/action_install.php @@ -1,3 +1,13 @@ +
      +
        +
      • :  
      • +
      • +
      • +
      • +
      • +
      +
      +

      " . $_lang['preinstall_validation'] . ""; +echo "
      +
        +
      • " . $_lang['choose_language'] . ":  
      • +
      • " . $_lang['installation_mode'] . "
      • +
      • " . $_lang['optional_items'] . "
      • +
      • " . $_lang['preinstall_validation'] . "
      • +
      • " . $_lang['install_results'] . "
      • +
      +
      +
      +

      " . $_lang['preinstall_validation'] . "

      "; + echo "

      " . $_lang['summary_setup_check'] . "

      "; $errors = 0; diff --git a/install/actions/tpl_language.html b/install/actions/tpl_language.html index bc7d99aa9d..2741530086 100644 --- a/install/actions/tpl_language.html +++ b/install/actions/tpl_language.html @@ -1,3 +1,13 @@ +
      +
        +
      • [%choose_language%]:  
      • +
      • [%installation_mode%]
      • +
      • [%optional_items%]
      • +
      • [%preinstall_validation%]
      • +
      • [%install_results%]
      • +
      +
      +

      [%choose_language%]:  

      diff --git a/install/style.css b/install/style.css index 50df79312f..f058418a00 100755 --- a/install/style.css +++ b/install/style.css @@ -643,4 +643,71 @@ select { input#adminemail { width: 350px; -} \ No newline at end of file +} + +/*steps*/ +.clearleft { + clear: left; + display:block; + padding-bottom:20px; + margin-bottom:20px; + border-bottom:1px solid #d0cccc; +} +div.stepcontainer { + display:block; + width: 100%!important; + margin: 0 0 20px 0; + + + } +.progressbar { + counter-reset: step; + } + .progressbar li { + list-style-type: none; + width: 15%; + float: left; + font-size: 12px; + position: relative; + text-align: center; + text-transform: uppercase; + color: #d0cccc; + background:#FFF; + position:relative; + z-index: 2; + } +.progressbar li:before { + width: 30px; + height: 30px; + content: counter(step); + counter-increment: step; + line-height: 30px; + border: 2px solid #d0cccc; + display: block; + text-align: center; + margin: 0 auto 10px auto; + border-radius: 50%; + background-color: white; + } +.progressbar li:after { + width: 99%; + height: 2px; + content: ''; + position: absolute; + background-color: #d0cccc; + top: 15px; + left: -60%; + z-index: 0; + } +.progressbar li:first-child:after { + content: none; + } +.progressbar li.active { + color: green; + } +.progressbar li.active:before { + border-color: #55b776; + } +.progressbar li.active + li:after { + background-color: #55b776; + } \ No newline at end of file From 766185087792a34f6fa487391265662ef5980087 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Thu, 7 Sep 2017 12:17:57 +0200 Subject: [PATCH 077/577] Installer - Polish language update --- install/lang/polish-utf8.inc.php | 62 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/install/lang/polish-utf8.inc.php b/install/lang/polish-utf8.inc.php index 18f71538fa..7f026304b6 100644 --- a/install/lang/polish-utf8.inc.php +++ b/install/lang/polish-utf8.inc.php @@ -1,13 +1,13 @@ /assets/cache oraz /assets/cache/rss: '; +$_lang["checking_iconv"] = 'Sprawdzanie czy rozszerzenie iconv jest dostępne: '; +$_lang["checking_iconv_note"] = 'Ważne jest zainstalowanie/włączenie rozszerzenia iconv. Skontaktuj się się z hostingiem jeśli nie wiesz jak włączyć iconv.'; $_lang["checking_if_cache_file_writable"] = 'Sprawdzanie, czy plik /assets/cache/siteCache.idx.php jest zapisywalny: '; $_lang["checking_if_cache_file2_writable"] = 'Sprawdzanie, czy plik /assets/cache/sitePublishing.idx.php jest zapisywalny: '; $_lang["checking_if_cache_writable"] = 'Sprawdzanie, czy foldery /assets/cache oraz /assets/cache/rss są zapisywalne: '; @@ -47,7 +49,7 @@ $_lang["checking_mysql_version"] = 'Sprawdzanie wersji MySQL: '; $_lang["checking_php_version"] = 'Sprawdzanie wersji PHP: '; $_lang["checking_registerglobals"] = 'Sprawdzanie, czy zmienne globalne (Register_Globals) są wyłączone: '; -$_lang["checking_registerglobals_note"] = 'Taka konfiguracja powoduje, że Twoja strona jest znacznie bardziej podatna na ataki typu Cross Site Scripting (XSS). Powinieneś wyłączyć tę opcję na serwerze. Są trzy podstawowe sposoby, aby to zrobić: można zmodyfikować główny plik php.ini, dodać regułę w pliku .htaccess znajdującym się w głównym folderze, w którym zainstalowany został MODX lub dodać własny plik php.ini w każdym z folderów MODXa (a jest ich sporo) z ustawieniami nadpisującymi ustawienia globalne. Jeśli nie zmienisz tych ustawień, będziesz mógł w dalszym ciągu zainstalować MODXa - pamiętaj jednak, że zostałeś ostrzeżony!'; +$_lang["checking_registerglobals_note"] = 'Taka konfiguracja powoduje, że Twoja strona jest znacznie bardziej podatna na ataki typu Cross Site Scripting (XSS). Powinieneś wyłączyć tę opcję na serwerze. Są trzy podstawowe sposoby, aby to zrobić: można zmodyfikować główny plik php.ini, dodać regułę w pliku .htaccess znajdującym się w głównym folderze, w którym zainstalowane zostało EVO lub dodać własny plik php.ini w każdym z folderów EVO (a jest ich sporo) z ustawieniami nadpisującymi ustawienia globalne. Jeśli nie zmienisz tych ustawień, będziesz mógł w dalszym ciągu zainstalować EVO - pamiętaj jednak, że zostałeś ostrzeżony!'; $_lang["checking_sessions"] = 'Sprawdzanie, czy obsługa sesji jest skonfigurowana poprawnie: '; $_lang["checking_table_prefix"] = 'Sprawdzanie prefiksu tabeli `'; $_lang["choose_language"] = 'Wybierz język'; @@ -56,7 +58,7 @@ $_lang["connection_screen_collation"] = 'System porównań (collation): '; $_lang["connection_screen_connection_method"] = 'Metoda połączenia: '; $_lang["connection_screen_database_connection_information"] = 'Informacje o bazie danych'; -$_lang["connection_screen_database_connection_note"] = 'Wybierz nazwę bazy danych, którą chcesz użyć dla tej instalacji MODXa. Jeśli baza danych nie istnieje, instalator podejmie próbę utworzenia jej. Utworzenie nowej bazy danych może się nie powieść, jeśli użytkownik MySQL nie ma wystarczających uprawnień.'; +$_lang["connection_screen_database_connection_note"] = 'Wybierz nazwę bazy danych, którą chcesz użyć dla tej instalacji EVO. Jeśli baza danych nie istnieje, instalator podejmie próbę utworzenia jej. Utworzenie nowej bazy danych może się nie powieść, jeśli użytkownik MySQL nie ma wystarczających uprawnień.'; $_lang["connection_screen_database_host"] = 'Host bazy danych:'; $_lang["connection_screen_database_info"] = 'Informacje o bazie danych'; $_lang["connection_screen_database_login"] = 'Nazwa użytkownika bazy: '; @@ -65,7 +67,7 @@ $_lang["connection_screen_database_test_connection"] = 'Tworzenie lub testowanie wybranej bazy danych.'; $_lang["connection_screen_default_admin_email"] = 'Adres e-mail administratora: '; $_lang["connection_screen_default_admin_login"] = 'Nazwa dla konta administratora: '; -$_lang["connection_screen_default_admin_note"] = 'Teraz musisz skonfigurować konto administratora. Podaj nazwę oraz hasło, które na pewno zapamiętasz. Będziesz potrzebował tych danych aby zalogować się do Menedżera MODXa po zakończeniu procesu instalacji.'; +$_lang["connection_screen_default_admin_note"] = 'Teraz musisz skonfigurować konto administratora. Podaj nazwę oraz hasło, które na pewno zapamiętasz. Będziesz potrzebował tych danych aby zalogować się do Menedżera EVO po zakończeniu procesu instalacji.'; $_lang["connection_screen_default_admin_password"] = 'Hasło administratora: '; $_lang["connection_screen_default_admin_password_confirm"] = 'Potwierdź hasło: '; $_lang["connection_screen_default_admin_user"] = 'Domyślna nazwa użytkownika'; @@ -81,7 +83,7 @@ $_lang["database_use_failed"] = 'Baza danych nie może być użyta!'; $_lang["database_use_failed_note"] = 'Sprawdź prawa dostępu do bazy danych dla wybranego użytkownika i spróbuj ponownie.'; $_lang["default_language"] = 'Domyślny język Menedżera'; -$_lang["default_language_description"] = 'Domyślny język dla Menedżera MODXa.'; +$_lang["default_language_description"] = 'Domyślny język dla Menedżera EVO.'; $_lang["depedency_create"] = 'Zależność utworzona'; $_lang["depedency_update"] = 'Zależność uaktualniona'; $_lang["during_execution_of_sql"] = ' podczas wykonywania zapytania SQL '; @@ -91,9 +93,9 @@ $_lang["failed"] = 'NIE POWIODŁO SIĘ!'; $_lang["guid_set"] = 'GUID ustawiony'; $_lang["help"] = 'Pomoc!'; -$_lang["help_link"] = 'http://forums.modx.com/'; -$_lang["help_title"] = 'Pomoc dotyczącą instalacji można uzyskać na forum MODXa'; -$_lang["iagree_box"] = 'Akceptuję warunki licencji MODXa. Tłumaczenia licencji GPL w wersji 2 znajdziesz na stronie GNU Operating System.'; +$_lang["help_link"] = 'https://evo.im/'; +$_lang["help_title"] = 'Pomoc dotyczącą instalacji EVO'; +$_lang["iagree_box"] = 'Akceptuję warunki licencji EVO. Tłumaczenia licencji GPL w wersji 2 znajdziesz na stronie GNU Operating System.'; $_lang["install"] = 'Instaluj'; $_lang["install_overwrite"] = 'Instaluj/Nadpisz: '; $_lang["install_results"] = 'Wyniki instalacji'; @@ -103,7 +105,7 @@ $_lang["installation_install_new_note"] = 'Wybór tej opcji może spowodować nadpisanie danych w wybranej bazie danych.'; $_lang["installation_mode"] = 'Typ instalacji'; $_lang["installation_new_installation"] = 'Nowa instalacja'; -$_lang["installation_note"] = 'Uwaga: Zanim zaczniesz przeglądać zasoby swojej strony zaloguj się do Menedżera i zapisz konfigurację. Do modułu konfiguracji systemu w Menedżerze MODXa dostaniesz się wybierając zakładkę: Narzędzia -> Konfiguracja systemu.'; +$_lang["installation_note"] = 'Uwaga: Zanim zaczniesz przeglądać zasoby swojej strony zaloguj się do Menedżera i zapisz konfigurację. Do konfiguracji systemu w Menedżerze EVO dostaniesz się wybierając zakładkę: Ustawienia -> Konfiguracja systemu.'; $_lang["installation_successful"] = 'Instalacja zakończona pomyślnie!'; $_lang["installation_upgrade_advanced"] = 'Zaawansowany tryb aktualizacji'; $_lang["installation_upgrade_advanced_note"] = 'Tryb dla użytkowników zaawansowanych. Wybierz go, jeśli przenosisz instalację do bazy danych z innym kodowaniem znaków.
      Będziesz potrzebował pełnej nazwy bazy danych, nazwy użytkownika oraz jego hasła, jak również szczegółów dotyczących połączenia i systemu porównań.'; @@ -114,12 +116,12 @@ $_lang["language_code"] = 'pl'; $_lang["loading"] = 'Ładowanie...'; $_lang["modules"] = 'Moduły'; -$_lang["modx_footer1"] = '© 2005-[+current_year+] the MODX Content Management Framework (CMF) project. Wszystkie prawa zastrzeżone. MODX działa pod licencją GNU GPL.'; -$_lang["modx_footer2"] = 'MODX jest wolnym oprogramowaniem. Zachęcamy Cię, abyś kreatywnie wykorzystywał MODXa w jakikolwiek sposób, który uznasz za przydatny. Prosimy jedynie, abyś pozostawił kod źródłowy otwartym i darmowym w przypadku gdy zdecydujesz się na redystrybucję MODXa w zmodyfikowanej przez siebie wersji!'; -$_lang["modx_install"] = 'MODX » Instalacja'; -$_lang["modx_requires_php"] = ', MODx wymaga PHP w wersji [+min_version+] lub nowszej'; +$_lang["modx_footer1"] = '© 2005-[+current_year+] the EVO Content Management Framework (CMF) project. Wszystkie prawa zastrzeżone. EVO działa na licencji GNU GPL.'; +$_lang["modx_footer2"] = 'EVO jest wolnym oprogramowaniem. Zachęcamy Cię, abyś kreatywnie wykorzystywał EVO w jakikolwiek sposób, który uznasz za przydatny. Prosimy jedynie, abyś pozostawił kod źródłowy otwartym i darmowym w przypadku gdy zdecydujesz się na redystrybucję EVO w zmodyfikowanej przez siebie wersji!'; +$_lang["modx_install"] = 'EVO » Instalacja'; +$_lang["modx_requires_php"] = ', EVO wymaga PHP w wersji [+min_version+] lub nowszej'; $_lang["mysql_5051"] = ' MySQL w wersji 5.0.51!'; -$_lang["mysql_5051_warning"] = 'Wersja 5.0.51 MySQL posiada wiele dobrze znanych błędów, które mogą przyczynić się do nieprawidłowego działania MODXa. Zalecamy uaktualnienie MySQL przed kontynuowaniem instalacji.'; +$_lang["mysql_5051_warning"] = 'Wersja 5.0.51 MySQL posiada wiele dobrze znanych błędów, które mogą przyczynić się do nieprawidłowego działania EVO. Zalecamy uaktualnienie MySQL przed kontynuowaniem instalacji.'; $_lang["mysql_version_is"] = 'Wersja MySQL: '; $_lang["no"] = 'Nie'; $_lang["none"] = 'Żadne'; @@ -127,7 +129,7 @@ $_lang["ok"] = 'OK!'; $_lang["optional_items"] = 'Komponenty opcjonalne'; $_lang["optional_items_note"] = 'Wybierz opcje instalacji, a następnie kliknij przycisk `Instaluj`: '; -$_lang["php_security_notice"] = 'Informacja dotycząca bezpieczeństwa

      Co prawda MODX będzie działał na Twojej wersji PHP, jednak używanie MODXa z tą akurat wersją nie jest zalecane. Używana przez Ciebie wersja PHP posiada wiele błędów związanych z bezpieczeństwem. Zaktualizuj PHP do wersji 4.3.8 lub nowszej, w której wyżej wymienione błędy nie występują. Zalecamy aktualizację ze względu na bezpieczeństwo Twojej strony internetowej.

      '; +$_lang["php_security_notice"] = 'Informacja dotycząca bezpieczeństwa

      Co prawda EVO będzie działać na Twojej wersji PHP, jednak używanie EVO na tej wersji nie jest zalecane. Używana przez Ciebie wersja PHP posiada wiele błędów związanych z bezpieczeństwem. Zaktualizuj PHP do wersji 5.4 lub nowszej, w której wyżej wymienione błędy nie występują. Zalecamy aktualizację ze względu na bezpieczeństwo Twojej strony internetowej.

      '; $_lang["please_correct_error"] = '. Proszę popraw błąd'; $_lang["please_correct_errors"] = '. Proszę popraw błędy'; $_lang["plugins"] = 'Pluginy'; @@ -138,7 +140,7 @@ $_lang["recommend_setting_change_validate_referer_confirmation"] = 'Zmiana ustawienia: Weryfikuj nagłówki HTTP_REFERER?'; $_lang["recommend_setting_change_validate_referer_description"] = 'Strona nie została skonfigurowana aby weryfikować nagłówki HTTP_REFERER. Zalecamy włączenie tej opcji aby zmniejszyć ryzyko ataków CSRF (Cross Site Request Forgery).'; $_lang["remove_install_folder_auto"] = 'Usuń folder instalatora z zasobów mojej strony
       (Ta operacja wymaga uprawnień do usuwania plików dla folderu instalatora).'; -$_lang["remove_install_folder_manual"] = 'Pamiętaj aby usunąć folder "install" przed zalogowaniem się do Menedżera MODXa.'; +$_lang["remove_install_folder_manual"] = 'Pamiętaj aby usunąć folder "install" przed zalogowaniem się do Menedżera EVO.'; $_lang["resetting_database"] = 'Resetuj bazę danych do wersji demo:'; $_lang["retry"] = 'Spróbuj ponownie'; $_lang["running_database_updates"] = 'Wykonywanie aktualizacji bazy danych: '; @@ -147,7 +149,7 @@ $_lang["session_problem"] = 'Wystąpił problem z obsługą sesji przez serwer. Proszę skonsultuj się z administratorem aby usunąć ten problem.'; $_lang["session_problem_try_again"] = 'Ponowić próbę?'; $_lang["setup_cannot_continue"] = 'Z powodów wymienionych powyżej instalacja nie może być kontynuowana'; -$_lang["setup_couldnt_install"] = 'Instalator MODXa nie mógł zainstalować/zmodyfikować niektórych tabel w wybranej bazie danych.'; +$_lang["setup_couldnt_install"] = 'Instalator EVO nie mógł zainstalować/zmodyfikować niektórych tabel w wybranej bazie danych.'; $_lang["setup_database"] = 'Instalator spróbuje teraz skonfigurować bazę danych:
      '; $_lang["setup_database_create_connection"] = 'Łączenie z bazą danych: '; $_lang["setup_database_create_connection_failed"] = 'Połączenie z bazą danych nie powiodło się!'; @@ -172,16 +174,16 @@ $_lang["status_passed_database_created"] = 'OK - baza danych utworzona'; $_lang["status_passed_server"] = 'OK - system porównań dostępny'; $_lang["strict_mode"] = 'Tryb `strict sql_mode` dla MySQL jest włączony!'; -$_lang["strict_mode_error"] = 'Niektóre z funkcji MODXa mogą działać niepoprawnie gdy tryb STRICT_TRANS_TABLES sql_mode jest włączony. Możesz zmienić tryb MySQL edytując plik my.cnf lub kontaktując się z administratorem.'; +$_lang["strict_mode_error"] = 'Niektóre z funkcji EVO mogą działać niepoprawnie gdy tryb STRICT_TRANS_TABLES sql_mode jest włączony. Możesz zmienić tryb MySQL edytując plik my.cnf lub kontaktując się z administratorem.'; $_lang["summary_setup_check"] = 'Instalator wykonał serię testów aby sprawdzić, czy wszystko jest gotowe do rozpoczęcia procesu instalacji.'; $_lang["system_configuration"] = 'Konfiguracja systemu'; -$_lang["system_configuration_validate_referer_description"] = 'Włączenie weryfikacji nagłówków HTTP_REFERER jest rekomendowane aby zmniejszyć prawdopodobieństwo ataków CSRF, jednak przy niektórych konfiguracjach serwera może spowodować, że Menedżer MODXa będzie niedostępny.'; +$_lang["system_configuration_validate_referer_description"] = 'Włączenie weryfikacji nagłówków HTTP_REFERER jest rekomendowane aby zmniejszyć prawdopodobieństwo ataków CSRF, jednak przy niektórych konfiguracjach serwera może spowodować, że Menedżer EVO będzie niedostępny.'; $_lang["table_prefix_already_inuse"] = '- Tabele o tym prefiksie już istnieją w wybranej bazie danych!'; -$_lang["table_prefix_already_inuse_note"] = 'Nie można zainstalować MODXa w wybranej bazie danych, ponieważ zawiera ona już tabele z określonym prefiksem. Wybierz inny prefiks dla tabeli i uruchom instalatora ponownie.'; +$_lang["table_prefix_already_inuse_note"] = 'Nie można zainstalować EVO w wybranej bazie danych, ponieważ zawiera ona już tabele z określonym prefiksem. Wybierz inny prefiks dla tabeli i uruchom instalatora ponownie.'; $_lang["table_prefix_not_exist"] = '- Tabele o tym prefiksie nie istnieją w wybranej bazie danych!'; -$_lang["table_prefix_not_exist_note"] = 'Nie można zaktualizować MODXa w wybranej bazie danych, ponieważ nie zawiera ona tabel z określonym prefiksem. Wybierz prefiks, który został zastosowany dla istniejących już tabel i uruchom instalatora ponownie.'; +$_lang["table_prefix_not_exist_note"] = 'Nie można zaktualizować EVO w wybranej bazie danych, ponieważ nie zawiera ona tabel z określonym prefiksem. Wybierz prefiks, który został zastosowany dla istniejących już tabel i uruchom instalatora ponownie.'; $_lang["templates"] = 'Szablony'; -$_lang["to_log_into_content_manager"] = 'Po kliknięciu w przycisk `Zamknij` będziesz mógł zalogować się do Menedżera MODXa ([+MGR_DIR+]/index.php).'; +$_lang["to_log_into_content_manager"] = 'Po kliknięciu w przycisk `Zamknij` będziesz mógł zalogować się do Menedżera EVO ([+MGR_DIR+]/index.php).'; $_lang["toggle"] = 'Odwróć zaznaczenie'; $_lang['tvs'] = 'Zmienne Szablonów'; $_lang["unable_install_chunk"] = 'Nie można zainstalować chunków. Plik'; @@ -189,14 +191,14 @@ $_lang["unable_install_plugin"] = 'Nie można zainstalować pluginów. Plik'; $_lang["unable_install_snippet"] = 'Nie można zainstalować snippetów. Plik'; $_lang["unable_install_template"] = 'Nie można zainstalować szablonów. Plik'; -$_lang["upgrade_note"] = 'Uwaga: Przed rozpoczęciem przeglądania swojej strony zaloguj się jako administrator do Menedżera MODXa, a następnie sprawdź i zapisz konfigurację systemu.'; +$_lang["upgrade_note"] = 'Uwaga: Przed rozpoczęciem przeglądania swojej strony zaloguj się jako administrator do Menedżera EVO, a następnie sprawdź i zapisz konfigurację systemu.'; $_lang["upgraded"] = 'Zaktualizowano'; $_lang["validate_referer_title"] = 'Weryfikuj nagłówki HTTP_REFERER?'; -$_lang["visit_forum"] = ', odwiedź Forum MODXa.'; +$_lang["visit_forum"] = ', odwiedź Forum EVO.'; $_lang["warning"] = 'UWAGA!'; $_lang["welcome_message_start"] = 'Najpierw wybierz typ instalacji: '; $_lang["welcome_message_text"] = 'Ten kreator przeprowadzi Cię przez proces instalacji.'; -$_lang["welcome_message_welcome"] = 'Witamy w instalatorze MODXa.'; +$_lang["welcome_message_welcome"] = 'Witamy w instalatorze EVO'; $_lang["writing_config_file"] = 'Zapisywanie pliku konfiguracyjnego: '; $_lang["yes"] = 'Tak'; $_lang["you_running_php"] = '- włączone PHP'; From 9d03543832c4a2eca636f273b693108742117ecb Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Thu, 7 Sep 2017 12:31:53 +0200 Subject: [PATCH 078/577] Installer - Polish lang fix --- install/lang/polish-utf8.inc.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/install/lang/polish-utf8.inc.php b/install/lang/polish-utf8.inc.php index 7f026304b6..04e2947afb 100644 --- a/install/lang/polish-utf8.inc.php +++ b/install/lang/polish-utf8.inc.php @@ -34,17 +34,17 @@ $_lang["cant_write_config_file"] = 'Nie można zapisać pliku konfiguracyjnego. Skopiuj do pliku następującą treść: '; $_lang["cant_write_config_file_note"] = 'Po zakończeniu instalacji będziesz mógł zalogować się do Menedżera EVO znajdującego się pod adresem: twojadomena.com/[+MGR_DIR+]/'; $_lang["checkbox_select_options"] = 'Zaznacz wybrane opcje: '; -$_lang["checking_if_cache_exist"] = 'Sprawdzanie, czy istnieją foldery /assets/cache oraz /assets/cache/rss: '; +$_lang["checking_if_cache_exist"] = 'Sprawdzanie, czy istnieją foldery /assets/cache oraz /assets/cache/rss: '; $_lang["checking_iconv"] = 'Sprawdzanie czy rozszerzenie iconv jest dostępne: '; $_lang["checking_iconv_note"] = 'Ważne jest zainstalowanie/włączenie rozszerzenia iconv. Skontaktuj się się z hostingiem jeśli nie wiesz jak włączyć iconv.'; -$_lang["checking_if_cache_file_writable"] = 'Sprawdzanie, czy plik /assets/cache/siteCache.idx.php jest zapisywalny: '; -$_lang["checking_if_cache_file2_writable"] = 'Sprawdzanie, czy plik /assets/cache/sitePublishing.idx.php jest zapisywalny: '; -$_lang["checking_if_cache_writable"] = 'Sprawdzanie, czy foldery /assets/cache oraz /assets/cache/rss są zapisywalne: '; -$_lang["checking_if_config_exist_and_writable"] = 'Sprawdzanie, czy plik /[+MGR_DIR+]/includes/config.inc.php istnieje i jest zapisywalny: '; -$_lang["checking_if_export_exists"] = 'Sprawdzanie, czy istnieje folder /assets/export: '; -$_lang["checking_if_export_writable"] = 'Sprawdzanie, czy folder /assets/export jest zapisywalny: '; -$_lang["checking_if_images_exist"] = 'Sprawdzanie, czy istnieją foldery /assets/images, /assets/files, /assets/flash oraz /assets/media: '; -$_lang["checking_if_images_writable"] = 'Sprawdzanie, czy foldery /assets/images, /assets/files, /assets/flash oraz /assets/media są zapisywalne: '; +$_lang["checking_if_cache_file_writable"] = 'Sprawdzanie, czy plik /assets/cache/siteCache.idx.php jest zapisywalny: '; +$_lang["checking_if_cache_file2_writable"] = 'Sprawdzanie, czy plik /assets/cache/sitePublishing.idx.php jest zapisywalny: '; +$_lang["checking_if_cache_writable"] = 'Sprawdzanie, czy foldery /assets/cache oraz /assets/cache/rss są zapisywalne: '; +$_lang["checking_if_config_exist_and_writable"] = 'Sprawdzanie, czy plik /[+MGR_DIR+]/includes/config.inc.php istnieje i jest zapisywalny: '; +$_lang["checking_if_export_exists"] = 'Sprawdzanie, czy istnieje folder /assets/export: '; +$_lang["checking_if_export_writable"] = 'Sprawdzanie, czy folder /assets/export jest zapisywalny: '; +$_lang["checking_if_images_exist"] = 'Sprawdzanie, czy istnieją foldery /assets/images, /assets/files, /assets/flash oraz /assets/media: '; +$_lang["checking_if_images_writable"] = 'Sprawdzanie, czy foldery /assets/images, /assets/files, /assets/flash oraz /assets/media są zapisywalne: '; $_lang["checking_mysql_strict_mode"] = 'Sprawdzanie trybu "strict sql_mode" dla MySQL: '; $_lang["checking_mysql_version"] = 'Sprawdzanie wersji MySQL: '; $_lang["checking_php_version"] = 'Sprawdzanie wersji PHP: '; @@ -95,7 +95,7 @@ $_lang["help"] = 'Pomoc!'; $_lang["help_link"] = 'https://evo.im/'; $_lang["help_title"] = 'Pomoc dotyczącą instalacji EVO'; -$_lang["iagree_box"] = 'Akceptuję warunki licencji EVO. Tłumaczenia licencji GPL w wersji 2 znajdziesz na stronie GNU Operating System.'; +$_lang["iagree_box"] = 'Akceptuję warunki licencji EVO. Tłumaczenia licencji GPL w wersji 2 znajdziesz na stronie GNU Operating System.'; $_lang["install"] = 'Instaluj'; $_lang["install_overwrite"] = 'Instaluj/Nadpisz: '; $_lang["install_results"] = 'Wyniki instalacji'; From d8944480ff96385a7d787dc95406737fe1652eda Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 14:52:51 +0200 Subject: [PATCH 079/577] added class "visited" to progressbar --- install/actions/action_install.php | 8 ++++---- install/actions/action_summary.php | 6 +++--- install/actions/tpl_mode.html | 2 +- install/actions/tpl_options.html | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/install/actions/action_install.php b/install/actions/action_install.php index 2bbba853e4..dac86bc8b3 100644 --- a/install/actions/action_install.php +++ b/install/actions/action_install.php @@ -1,9 +1,9 @@
        -
      • :  
      • -
      • -
      • -
      • +
      • :  
      • +
      • +
      • +
      diff --git a/install/actions/action_summary.php b/install/actions/action_summary.php index 5a39180460..8c5b19020a 100644 --- a/install/actions/action_summary.php +++ b/install/actions/action_summary.php @@ -2,9 +2,9 @@ $installMode = intval($_POST['installmode']); echo "
        -
      • " . $_lang['choose_language'] . ":  
      • -
      • " . $_lang['installation_mode'] . "
      • -
      • " . $_lang['optional_items'] . "
      • +
      • " . $_lang['choose_language'] . ":  
      • +
      • " . $_lang['installation_mode'] . "
      • +
      • " . $_lang['optional_items'] . "
      • " . $_lang['preinstall_validation'] . "
      • " . $_lang['install_results'] . "
      diff --git a/install/actions/tpl_mode.html b/install/actions/tpl_mode.html index 33ae56f27c..9940e39c9c 100644 --- a/install/actions/tpl_mode.html +++ b/install/actions/tpl_mode.html @@ -1,6 +1,6 @@
        -
      • [%choose_language%]:  
      • +
      • [%choose_language%]:  
      • [%installation_mode%]
      • [%optional_items%]
      • [%preinstall_validation%]
      • diff --git a/install/actions/tpl_options.html b/install/actions/tpl_options.html index 204da13a18..c5b1f0c96a 100644 --- a/install/actions/tpl_options.html +++ b/install/actions/tpl_options.html @@ -1,7 +1,7 @@
          -
        • [%choose_language%]:  
        • -
        • [%installation_mode%]
        • +
        • [%choose_language%]:  
        • +
        • [%installation_mode%]
        • [%optional_items%]
        • [%preinstall_validation%]
        • [%install_results%]
        • From 839957bbd320bcb51eff5768e600cc59d6055a32 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 14:56:30 +0200 Subject: [PATCH 080/577] updated install css to match new default theme updated install css to match new default theme + minor updated on step progreess bar --- install/style.css | 90 +++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/install/style.css b/install/style.css index f058418a00..c8f0088245 100755 --- a/install/style.css +++ b/install/style.css @@ -1,5 +1,5 @@ html { - background-color: #f2f2f2; + background-color: #ecf0f1; } html, @@ -270,7 +270,7 @@ img.right { } a { - color: #3697CD; + color: #3189ba; } a img { @@ -309,17 +309,17 @@ hr { .help a { display: inline-block; padding: 2px 7px; - color: #fff; + color: #bbbbbb; text-decoration: none !important; - border: 1px solid rgba(255, 255, 255, 0.2); - background-color: rgba(255, 255, 255, 0.15); - border-radius: 2px !important; + border: 1px solid #bbbbbb; font-size: 12px; font-weight: normal !important; } .help a:hover { - background-color: rgba(255, 255, 255, .3); + background-color: transparent; + border-color: #FFF; + color: #fff; } .help a:active { @@ -329,7 +329,7 @@ hr { } .version { - color: #fff; + color: #bbbbbb; } span.mono { @@ -360,12 +360,11 @@ span.mono { font-size: 13px; text-decoration: none; margin: 0 0 0 15px; - padding: 5px 15px; + padding: 3px 12px; max-width: 250px; color: #fff; - background: #32AB9A; - border-color: #32AB9A; - border-radius: 3px !important; + background: #5cb85c; + border-color: #5cb85c; cursor: pointer; } @@ -376,13 +375,13 @@ span.mono { .buttonlinks a span {} .buttonlinks a:hover { - background: #35baa8; - border-color: #35baa8; + background: #449d44; + border-color: #449d44; } .buttonlinks a:active { - background: #32AB9A; - border-color: #32AB9A; + background: #449d44; + border-color: #449d44; } #header .buttonlinks a:hover { @@ -396,15 +395,12 @@ span.mono { } #header { - background-color: #39515D !important; - background-image: -webkit-linear-gradient(left, #3f4850 0%, #365462 46%, #3e5554 60%, #42554d 68%, #573d4e 100%) !important; - background-image: -o-linear-gradient(left, #3f4850 0%, #365462 46%, #3e5554 60%, #42554d 68%, #573d4e 100%) !important; - background-image: linear-gradient(to right, #3f4850 0%, #365462 46%, #3e5554 60%, #42554d 68%, #573d4e 100%) !important; + background-color: #1d2023 !important; } #header { padding: 5px 0; - background-color: #39515D !important; + background-color: #1d2023 !important; } #header a:hover { @@ -420,7 +416,7 @@ span.mono { } #contentarea h2 { - color: #0F7096; + color: #1377c5; font-size: 1.6em; line-height: 1.2em; margin-bottom: 0.5em; @@ -486,7 +482,7 @@ span.mono { #installChoices h3 { margin-top: 20px; margin-bottom: 10px; - color: #3697CD; + color: #3189ba; } #rtl #installChoices h3 { @@ -508,7 +504,7 @@ span.mono { } #installChoices label:hover { - color: #3697CD; + color: #3189ba; } #installChoices input { @@ -578,13 +574,12 @@ tbody td { } .actions a { - margin: 0; - padding: 0.8em 1em; + margin: 0 0 0.2em 0; + padding: 0.6em 1em; border: 1px solid #CBCBCC; display: inline-block; - color: #3697CD; + color: #3189ba; text-decoration: none; - border-radius: 3px; background-color: #fff; } @@ -600,15 +595,15 @@ h3 .actions { h3 .actions a:hover, p.actions a:hover { - background-color: #3697cd; - border-color: #3697cd; + background-color: #1377c5; + border-color: #1377c5; color: #fff; } h3 .actions a:active, p.actions a:active { - background-color: #3189ba; - border-color: #3189ba; + background-color: #1377c5; + border-color: #1377c5; } img.options { @@ -623,7 +618,7 @@ img.options { span.ok { font-weight: bold; - color: green; + color: #5cb85c; } span.notok { @@ -690,24 +685,33 @@ div.stepcontainer { background-color: white; } .progressbar li:after { - width: 99%; - height: 2px; + width: 98%; + height: 4px; content: ''; position: absolute; - background-color: #d0cccc; - top: 15px; - left: -60%; + background-color: #EcEcEc; + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent); + top: 14px; + left: -59%; z-index: 0; } .progressbar li:first-child:after { content: none; } -.progressbar li.active { - color: green; +.progressbar li.visisted { + color: #5cb85c; } -.progressbar li.active:before { +.progressbar li.visisted:before { border-color: #55b776; } -.progressbar li.active + li:after { +.progressbar li.visisted + li:after { background-color: #55b776; - } \ No newline at end of file + } +.progressbar li.active { + color: #3189ba; + } +.progressbar li.active:before { + border-color: #3189ba; + } + From 40b30bf6b671d7d7c583fd68d86c1ee3b62565f9 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 15:12:14 +0200 Subject: [PATCH 081/577] back to solid color progressbar --- install/style.css | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/install/style.css b/install/style.css index c8f0088245..b80838db54 100755 --- a/install/style.css +++ b/install/style.css @@ -685,15 +685,13 @@ div.stepcontainer { background-color: white; } .progressbar li:after { - width: 98%; - height: 4px; + width: 99%; + height: 2px; content: ''; position: absolute; - background-color: #EcEcEc; - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent); - top: 14px; - left: -59%; + background-color: #d0cccc; + top: 15px; + left: -60%; z-index: 0; } .progressbar li:first-child:after { From b50e206cb00769001828d9bbbabde1eeea86fcbf Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 15:19:15 +0200 Subject: [PATCH 082/577] minor fix to the bar --- install/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/style.css b/install/style.css index b80838db54..a242d38b6c 100755 --- a/install/style.css +++ b/install/style.css @@ -691,7 +691,7 @@ div.stepcontainer { position: absolute; background-color: #d0cccc; top: 15px; - left: -60%; + left: -59%; z-index: 0; } .progressbar li:first-child:after { From 1c07f7c9a52170f912c12fc609ca11d81750c601 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 15:24:54 +0200 Subject: [PATCH 083/577] updated screenshots --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fe19bb5334..32dc606f8f 100644 --- a/README.md +++ b/README.md @@ -34,11 +34,11 @@ Just use [Evo Installer](https://github.com/evolution-cms/installer) ### Screenshots -![screenshot_1](https://cloud.githubusercontent.com/assets/523389/20504423/97db8bf8-b047-11e6-9eef-550c1c7d34f2.jpg) +![screenshot_1](https://user-images.githubusercontent.com/7342798/30128617-a74d689c-9343-11e7-9ef5-5a37c3b94cf1.jpg) -![screenshot_2](https://cloud.githubusercontent.com/assets/523389/20504414/926ceec8-b047-11e6-8760-3d11d6610977.jpg) +![screenshot_2](https://user-images.githubusercontent.com/7342798/30128635-b34fa2a4-9343-11e7-9d87-13d0e17fb69e.jpg) -![screenshot_3](https://cloud.githubusercontent.com/assets/523389/20504420/956ef5d0-b047-11e6-9460-7c7a471bada6.jpg) +![screenshot_3](https://user-images.githubusercontent.com/7342798/30128638-b5b2cdc8-9343-11e7-8c75-0864d00fe28a.jpg) ### References From c8507344b39a469b722d75579445c96fe3de7a3f Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Thu, 7 Sep 2017 15:27:30 +0200 Subject: [PATCH 084/577] Installer - move "clearleft" div up --- install/actions/action_install.php | 14 +++++++------- install/actions/action_summary.php | 2 +- install/actions/tpl_language.html | 2 +- install/actions/tpl_mode.html | 2 +- install/actions/tpl_options.html | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/install/actions/action_install.php b/install/actions/action_install.php index dac86bc8b3..523308d1aa 100644 --- a/install/actions/action_install.php +++ b/install/actions/action_install.php @@ -1,13 +1,13 @@
          -
            -
          • :  
          • -
          • -
          • -
          • -
          • +
              +
            • :  
            • +
            • +
            • +
            • +
            +
          -

          " . $_lang['preinstall_validation'] . "
        • " . $_lang['install_results'] . "
        +
        -

        " . $_lang['preinstall_validation'] . "

        "; echo "

        " . $_lang['summary_setup_check'] . "

        "; diff --git a/install/actions/tpl_language.html b/install/actions/tpl_language.html index 2741530086..7602a5decf 100644 --- a/install/actions/tpl_language.html +++ b/install/actions/tpl_language.html @@ -6,8 +6,8 @@
      • [%preinstall_validation%]
      • [%install_results%]
      +
      -

      [%choose_language%]:  

      From 281f5e695fb56909599f58585308d6df29c0d80e Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Thu, 7 Sep 2017 15:45:00 +0200 Subject: [PATCH 085/577] Installer - steps small css update --- install/style.css | 121 +++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 61 deletions(-) diff --git a/install/style.css b/install/style.css index a242d38b6c..4a11b50605 100755 --- a/install/style.css +++ b/install/style.css @@ -441,7 +441,7 @@ span.mono { #content { overflow: hidden; zoom: 1; - padding: 20px; + padding: 40px; background: #fff; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -642,74 +642,73 @@ input#adminemail { /*steps*/ .clearleft { - clear: left; - display:block; - padding-bottom:20px; - margin-bottom:20px; - border-bottom:1px solid #d0cccc; + clear: both; + display:block; } div.stepcontainer { - display:block; - width: 100%!important; - margin: 0 0 20px 0; - - - } + display:block; + box-sizing: border-box; + width: 100%!important; + margin-bottom: 40px; + padding-top: 30px; + padding-bottom: 20px; + border-bottom: 1px solid #E6E6E6; +} .progressbar { - counter-reset: step; - } - .progressbar li { - list-style-type: none; - width: 15%; - float: left; - font-size: 12px; - position: relative; - text-align: center; - text-transform: uppercase; - color: #d0cccc; - background:#FFF; - position:relative; - z-index: 2; - } + counter-reset: step; +} +.progressbar li { + list-style-type: none; + width: 15%; + float: left; + font-size: 12px; + position: relative; + text-align: center; + text-transform: uppercase; + color: #d0cccc; + background:#FFF; + position:relative; + z-index: 2; +} .progressbar li:before { - width: 30px; - height: 30px; - content: counter(step); - counter-increment: step; - line-height: 30px; - border: 2px solid #d0cccc; - display: block; - text-align: center; - margin: 0 auto 10px auto; - border-radius: 50%; - background-color: white; - } + width: 30px; + height: 30px; + content: counter(step); + counter-increment: step; + line-height: 30px; + border: 2px solid #d0cccc; + display: block; + text-align: center; + margin: 0 auto 10px auto; + border-radius: 50%; + background-color: #fff; + z-index: 1; +} .progressbar li:after { - width: 99%; - height: 2px; - content: ''; - position: absolute; - background-color: #d0cccc; - top: 15px; - left: -59%; - z-index: 0; - } + width: 99%; + height: 2px; + content: ''; + position: absolute; + background-color: #d0cccc; + top: 15px; + left: -59%; + z-index: -1; +} .progressbar li:first-child:after { - content: none; - } + content: none; +} .progressbar li.visisted { - color: #5cb85c; - } + color: #5cb85c; +} .progressbar li.visisted:before { - border-color: #55b776; - } + border-color: #55b776; +} .progressbar li.visisted + li:after { - background-color: #55b776; - } + background-color: #55b776; +} .progressbar li.active { - color: #3189ba; - } + color: #3189ba; +} .progressbar li.active:before { - border-color: #3189ba; - } - + border-color: #3189ba; +} From cb56d68362af2657275a66425a166f38dabb9f77 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Thu, 7 Sep 2017 15:47:38 +0200 Subject: [PATCH 086/577] Installer - steps bottom padding --- install/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/style.css b/install/style.css index 4a11b50605..2ed7b528af 100755 --- a/install/style.css +++ b/install/style.css @@ -651,7 +651,7 @@ div.stepcontainer { width: 100%!important; margin-bottom: 40px; padding-top: 30px; - padding-bottom: 20px; + padding-bottom: 30px; border-bottom: 1px solid #E6E6E6; } .progressbar { From 7456109ce730ef786014cc24e0ac8a40fd6d6cbb Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 18:01:01 +0200 Subject: [PATCH 087/577] fix visited class name --- install/actions/action_install.php | 8 ++++---- install/actions/action_summary.php | 6 +++--- install/actions/tpl_mode.html | 2 +- install/actions/tpl_options.html | 4 ++-- install/style.css | 6 +++--- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/install/actions/action_install.php b/install/actions/action_install.php index 523308d1aa..3600f7eeac 100644 --- a/install/actions/action_install.php +++ b/install/actions/action_install.php @@ -1,9 +1,9 @@
        -
      • :  
      • -
      • -
      • -
      • +
      • :  
      • +
      • +
      • +
      diff --git a/install/actions/action_summary.php b/install/actions/action_summary.php index 1aabe6f91c..7700de79c7 100644 --- a/install/actions/action_summary.php +++ b/install/actions/action_summary.php @@ -2,9 +2,9 @@ $installMode = intval($_POST['installmode']); echo "
        -
      • " . $_lang['choose_language'] . ":  
      • -
      • " . $_lang['installation_mode'] . "
      • -
      • " . $_lang['optional_items'] . "
      • +
      • " . $_lang['choose_language'] . ":  
      • +
      • " . $_lang['installation_mode'] . "
      • +
      • " . $_lang['optional_items'] . "
      • " . $_lang['preinstall_validation'] . "
      • " . $_lang['install_results'] . "
      diff --git a/install/actions/tpl_mode.html b/install/actions/tpl_mode.html index 745c78cdeb..c2ed5d4875 100644 --- a/install/actions/tpl_mode.html +++ b/install/actions/tpl_mode.html @@ -1,6 +1,6 @@
        -
      • [%choose_language%]:  
      • +
      • [%choose_language%]:  
      • [%installation_mode%]
      • [%optional_items%]
      • [%preinstall_validation%]
      • diff --git a/install/actions/tpl_options.html b/install/actions/tpl_options.html index e8754f69ca..f8ab31f099 100644 --- a/install/actions/tpl_options.html +++ b/install/actions/tpl_options.html @@ -1,7 +1,7 @@
          -
        • [%choose_language%]:  
        • -
        • [%installation_mode%]
        • +
        • [%choose_language%]:  
        • +
        • [%installation_mode%]
        • [%optional_items%]
        • [%preinstall_validation%]
        • [%install_results%]
        • diff --git a/install/style.css b/install/style.css index 2ed7b528af..3def481bf4 100755 --- a/install/style.css +++ b/install/style.css @@ -697,13 +697,13 @@ div.stepcontainer { .progressbar li:first-child:after { content: none; } -.progressbar li.visisted { +.progressbar li.visited { color: #5cb85c; } -.progressbar li.visisted:before { +.progressbar li.visited:before { border-color: #55b776; } -.progressbar li.visisted + li:after { +.progressbar li.visited + li:after { background-color: #55b776; } .progressbar li.active { From 3bddc35d4a131e150d5785f82fd180544dc2dc4e Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 7 Sep 2017 18:11:18 +0200 Subject: [PATCH 088/577] changed login screenshot with centered login form --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 32dc606f8f..ec555c9759 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Just use [Evo Installer](https://github.com/evolution-cms/installer) ### Screenshots -![screenshot_1](https://user-images.githubusercontent.com/7342798/30128617-a74d689c-9343-11e7-9ef5-5a37c3b94cf1.jpg) +![screenshot_1](https://user-images.githubusercontent.com/7342798/30167975-5ec146c0-93e8-11e7-8cf8-b324c2b09477.jpg) ![screenshot_2](https://user-images.githubusercontent.com/7342798/30128635-b34fa2a4-9343-11e7-9d87-13d0e17fb69e.jpg) From 4c8796055997d1b6207302b1b0063f7f673402ce Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 8 Sep 2017 18:20:42 +0300 Subject: [PATCH 089/577] update modx.js fix select home tab refactor deleted tab --- manager/media/style/default/js/modx.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 7467c54cad..a6e772fcec 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -1303,7 +1303,7 @@ emptyTrash: function() { if (confirm(modx.lang.confirm_empty_trash) === true) { modx.tabs({url: modx.MODX_MANAGER_URL + '?a=64', title: modx.lang.confirm_empty_trash}); - modx.tabsClose(); + modx.tabsClose(this.deleted); this.deleted = []; modx.tree.restoreTree() } @@ -1320,7 +1320,7 @@ }; var els = d.getElementById('tree').querySelectorAll('.deleted'); for (var i = 0; i < els.length; i++) { - this.deleted['tab' + els[i].dataset.id] = 'evo-tab-page-' + modx.urlToUid('a=27&id=' + els[i].dataset.id) + this.deleted[els[i].dataset.id] = 'evo-tab-page-' + modx.urlToUid('a=27&id=' + els[i].dataset.id) } } else { el.title = modx.lang.empty_recycle_bin_empty; @@ -1419,11 +1419,11 @@ e.preventDefault(); } }, - tabsClose: function() { - if (modx.config.global_tabs) { - for (var k in modx.tree.deleted) { - if (modx.tree.deleted.hasOwnProperty(k)) { - var el = d.getElementById(modx.tree.deleted[k]); + tabsClose: function(a) { + if (modx.config.global_tabs && a) { + for (var k in a) { + if (a.hasOwnProperty(k)) { + var el = d.getElementById(a[k]); if (el) { el.firstElementChild.contentWindow.documentDirty = false; el.close() @@ -1548,8 +1548,8 @@ } o.uid = modx.getActionFromUrl(o.url, 2) ? 'home' : modx.urlToUid(o.url); o.el = d.getElementById('evo-tab-page-' + o.uid); + o.tab.onclick = o.select; if (o.el) { - o.tab.onclick = o.select; if (~o.closeactions.indexOf(o.action)) { o.reload = 1 } From 9a2296512111aed2357a4577834464ab27c467b9 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 8 Sep 2017 19:10:41 +0300 Subject: [PATCH 090/577] update evo.tooltips fixed tooltip position --- manager/includes/header.inc.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/manager/includes/header.inc.php b/manager/includes/header.inc.php index 0a7e508f8e..8c923588b7 100644 --- a/manager/includes/header.inc.php +++ b/manager/includes/header.inc.php @@ -71,20 +71,21 @@ if (e.buttons) { return; } + var x = e.clientX, y = e.clientY; b.innerHTML = (this.dataset && this.dataset.tooltip ? (this.dataset.tooltip[0] === '#' ? document.querySelector(this.dataset.tooltip).innerHTML : this.dataset.tooltip) : this.innerHTML); - if (e.pageX + b.offsetWidth + (c * 2) > window.innerWidth) { - b.style.left = Math.round(e.pageX - b.offsetWidth - (c * 2)) + 'px'; + if (x + b.offsetWidth + (c * 2) > window.innerWidth) { + b.style.left = Math.round(x - b.offsetWidth - (c * 2)) + 'px'; b.classList.add('evo-tooltip-right'); } else { - b.style.left = Math.round(e.pageX) + 'px'; + b.style.left = Math.round(x) + 'px'; b.classList.add('evo-tooltip-left'); } - if (e.pageY - (b.offsetHeight / 2) - c < 0) { + if (y - (b.offsetHeight / 2) - c < 0) { b.style.top = 0; - } else if (e.pageY + (b.offsetHeight / 2) > window.innerHeight) { + } else if (y + (b.offsetHeight / 2) > window.innerHeight) { b.style.top = Math.round(window.innerHeight - b.offsetHeight) - (c * 2) + 'px'; } else { - b.style.top = Math.round(e.pageY - (b.offsetHeight / 2)) - c + 'px'; + b.style.top = Math.round(y - (b.offsetHeight / 2)) - c + 'px'; } b.classList.add('show'); }); From c5eba683345dc6033162b4a9d69152123c9e251f Mon Sep 17 00:00:00 2001 From: Deesen Date: Sat, 9 Sep 2017 08:58:47 +0200 Subject: [PATCH 091/577] [F] #198 reportAbuse: $modx->mail->IsHTML(1) by default --- assets/snippets/eform/eform.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/snippets/eform/eform.inc.php b/assets/snippets/eform/eform.inc.php index ff983cc130..944b827c9c 100644 --- a/assets/snippets/eform/eform.inc.php +++ b/assets/snippets/eform/eform.inc.php @@ -379,7 +379,7 @@ function eForm($modx,$params) { $body .=""; $modx->loadExtension('MODxMailer'); // send abuse alert - $modx->mail->IsHTML($isHtml); + $modx->mail->IsHTML(1); $modx->mail->From = $modx->config['emailsender']; $modx->mail->FromName = $modx->config['site_name']; $modx->mail->Subject = $_lang['ef_mail_abuse_subject']; From e701b0dc1fbaed4f9405f595de63220b3d960c65 Mon Sep 17 00:00:00 2001 From: Deesen Date: Sat, 9 Sep 2017 09:15:10 +0200 Subject: [PATCH 092/577] [F] #212 Replace setting "default" by filebrowser-ID --- manager/actions/mutate_user.dynamic.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/manager/actions/mutate_user.dynamic.php b/manager/actions/mutate_user.dynamic.php index 839105e376..c8395e91ed 100644 --- a/manager/actions/mutate_user.dynamic.php +++ b/manager/actions/mutate_user.dynamic.php @@ -89,6 +89,9 @@ } $displayStyle = ($_SESSION['browser'] === 'modern') ? 'table-row' : 'block'; +if($which_browser == 'default') { + $which_browser = $modx->configGlobal['which_browser'] ? $modx->configGlobal['which_browser'] : $modx->config['which_browser']; +} ?> @@ -150,16 +159,16 @@ function resetSortOrder() () -

          -

          - - -

          - - - - +

          +

          + + +

          + + + + - evo.sortable('.sortableList > li', { - complete: function() { - renderList(); - } - }) + evo.sortable('.sortableList > li', { + complete: function() { + renderList(); + } + }); From da69e97fe4f644748e9b706ea2cd02b2b8bf4465 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 10 Sep 2017 03:41:44 +0300 Subject: [PATCH 096/577] update modx.js refactor modx.tabs --- manager/media/style/default/css/fonts.css | 1 + manager/media/style/default/css/tabpane.css | 3 +- manager/media/style/default/js/modx.js | 931 ++++++++++---------- 3 files changed, 453 insertions(+), 482 deletions(-) diff --git a/manager/media/style/default/css/fonts.css b/manager/media/style/default/css/fonts.css index f355c4b8da..16a53d0df8 100644 --- a/manager/media/style/default/css/fonts.css +++ b/manager/media/style/default/css/fonts.css @@ -85,6 +85,7 @@ a.text-gray-dark:focus, a.text-gray-dark:hover { color: #101112 !important } .invisible { visibility: hidden !important; } .clear { clear: both; } /* custom */ +#loadingmask { display: none !important; } .fa > .fa-lock { position: relative; float: left; width: auto !important; margin-top: -1em; font-size: 0.7em !important; color: #FFC107 !important; -webkit-text-stroke: 1px rgba(0, 0, 0, 0.39); text-stroke: 1px rgba(0, 0, 0, 0.39); } .rotate180 { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); } .disabledPlugin, .disabledPlugin a { color: #B68282; font-style: italic; } diff --git a/manager/media/style/default/css/tabpane.css b/manager/media/style/default/css/tabpane.css index fd79013936..94188e963c 100644 --- a/manager/media/style/default/css/tabpane.css +++ b/manager/media/style/default/css/tabpane.css @@ -95,7 +95,8 @@ .evo-tab-row .tab-row .tab .tab-title { float: left; width: 5rem; line-height: 2rem; text-overflow: ellipsis; overflow: hidden; } .evo-tab-row .tab-row .tab .tab-close { float: right; margin: 0 -.75rem 0 .5rem; padding: .25em; line-height: 1.3em; font-size: 1.3em; font-weight: 700; color: #9e9e9e } .evo-tab-row .tab-row .tab .tab-close:hover { color: #d9534f } -.evo-tab-page { display: none; position: absolute; z-index: 1; left: 0; top: 2.3em; right: 0; bottom: 0; height: auto; box-shadow: none; background-color: #fafafa; overflow-y: auto } +.evo-tab-page { display: block; opacity: 0; visibility: hidden; position: absolute; z-index: 1; left: 0; top: 2.3em; right: 0; bottom: 0; height: auto; box-shadow: none; background-color: #fafafa; overflow-y: auto; } +.evo-tab-page.show { opacity: 1; visibility: visible; } .evo-tab-page iframe { position: absolute; width: 100%; height: 100%; background-color: #fafafa; overflow: hidden; } /* dark */ .dark .evo-popup-overlay { background-color: rgba(0, 0, 0, 0.3); } diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index a6e772fcec..3dd155fcd6 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -9,21 +9,21 @@ popupTimer: 0, init: function() { if (!localStorage.getItem('MODX_widthSideBar')) { - localStorage.setItem('MODX_widthSideBar', this.config.tree_width) + localStorage.setItem('MODX_widthSideBar', this.config.tree_width); } - this.tree.init(); + //this.tree.init(); this.mainmenu.init(); if (w.location.hash) { if (modx.getActionFromUrl(w.location.hash, 2)) { - w.history.replaceState(null, d.title, modx.MODX_MANAGER_URL) + w.history.replaceState(null, d.title, modx.MODX_MANAGER_URL); } else if (modx.main.getQueryVariable('a', w.location.hash) || modx.main.getQueryVariable('filemanager', w.location.hash)) { var url = modx.main.getQueryVariable('filemanager', w.location.hash) ? modx.MODX_MANAGER_URL + modx.main.getQueryVariable('filemanager', w.location.hash) + w.location.hash.replace('#?', '?') : w.location.href.replace('#?', '?'); if (modx.config.global_tabs) { - modx.tabs({url: url, title: 'blank'}) + modx.tabs({url: url, title: 'blank'}); } else if (w.main) { - w.main.frameElement.src = url + w.main.frameElement.src = url; } else { - modx.openWindow(url) + modx.openWindow(url); } } } @@ -33,7 +33,7 @@ w.setInterval(this.keepMeAlive, 1000 * 60 * this.config.session_timeout); } if (modx.config.mail_check_timeperiod > 0 && modx.permission.messages) { - setTimeout('modx.updateMail(true)', 1000) + setTimeout('modx.updateMail(true)', 1000); } d.addEventListener('click', modx.hideDropDown, false); d.addEventListener('click', modx.tabsInit, false); @@ -45,15 +45,15 @@ var $mm = $('#mainMenu'), mm = d.getElementById('mainMenu'), timer; $mm.on('click', 'a', function(e) { if ($(this).hasClass('dropdown-toggle')) { - if ($mm.hasClass('show') && ($(this).hasClass('selected') || (!modx.isMobile && $(this).parent().hasClass('hover')))) { + if ($mm.hasClass('show') && ($(this).hasClass('selected') || !modx.isMobile && $(this).parent().hasClass('hover'))) { $(this).removeClass('selected'); - $mm.removeClass('show') + $mm.removeClass('show'); } else { $('.nav > li > a:not(:hover)').removeClass('selected'); $(this).addClass('selected'); - $mm.addClass('show') + $mm.addClass('show'); } - e.target.dataset.toggle = '#mainMenu' + e.target.dataset.toggle = '#mainMenu'; } if ($(this).closest('ul').hasClass('dropdown-menu')) { $('.nav > .active').removeClass('active'); @@ -61,7 +61,7 @@ $(this).closest('.nav > li').addClass('active'); this.parentNode.classList.add('selected'); if (this.offsetParent.id) { - d.getElementById(this.offsetParent.id.substr(7)).classList.add('selected') + d.getElementById(this.offsetParent.id.substr(7)).classList.add('selected'); } } }).on('mouseenter', '.nav > li', function() { @@ -69,7 +69,7 @@ for (var i = 0; i < els.length; i++) { els[i].classList.remove('hover'); } - this.classList.add('hover') + this.classList.add('hover'); }).on('mouseenter', '.nav > li li', function(e) { var self = this, ul; var els = mm.querySelectorAll('.nav > li li.hover:not(:hover)'); @@ -79,16 +79,16 @@ this.classList.add('hover'); clearTimeout(timer); if (this.offsetParent.offsetParent.querySelector('.sub-menu')) { - ul = this.offsetParent.offsetParent.querySelector('.sub-menu') + ul = this.offsetParent.offsetParent.querySelector('.sub-menu'); } else { ul = d.createElement('ul'); ul.className = 'sub-menu dropdown-menu'; ul.style.left = this.offsetWidth + 'px'; - this.parentNode.parentNode.appendChild(ul) + this.parentNode.parentNode.appendChild(ul); } timer = setTimeout(function() { if (d.querySelector('.nav .sub-menu.show')) { - d.querySelector('.nav .sub-menu.show').classList.remove('show') + d.querySelector('.nav .sub-menu.show').classList.remove('show'); } if (self.classList.contains('toggle-dropdown')) { if (ul.id === 'parent_' + self.id) { @@ -105,7 +105,7 @@ var el = d.getElementById(id); if (el) { el.parentNode.classList.add('selected'); - d.getElementById(el.parentNode.parentNode.id.substr(7)).classList.add('selected') + d.getElementById(el.parentNode.parentNode.id.substr(7)).classList.add('selected'); } for (var i = 0; i < ul.children.length; i++) { ul.children[i].onmouseenter = function(e) { @@ -114,28 +114,28 @@ e.target.classList.add('hover'); self.classList.add('hover'); e.preventDefault(); - e.stopPropagation() - } + e.stopPropagation(); + }; } ul.classList.add('show'); setTimeout(function() { - modx.mainmenu.search(href, ul) - }, 200) + modx.mainmenu.search(href, ul); + }, 200); } - }) - }, 85) + }); + }, 85); } } else { if (ul.classList.contains('open')) { ul.classList.remove('open'); setTimeout(function() { - ul.parentNode.removeChild(ul) - }, 100) + ul.parentNode.removeChild(ul); + }, 100); } } }, 85); - e.preventDefault() - }) + e.preventDefault(); + }); }, search: function(href, ul) { var items, @@ -164,7 +164,7 @@ el = ul.querySelector('.hover'); if (el) el.classList.remove('hover'); } else if (index > items.length - 1) { - index = items.length - 1 + index = items.length - 1; } if (index >= 0 && index < items.length) { el = ul.querySelector('.hover'); @@ -178,11 +178,11 @@ $('.item', ul).remove(); $(ul).append(data).on('mouseenter', '.item', function(e) { $(this).addClass('hover').closest('ul').find('li:not(:hover)').removeClass('hover'); - e.stopPropagation() - }) - }, 'html') + e.stopPropagation(); + }); + }, 'html'); } - } + }; } } }, @@ -211,7 +211,7 @@ this.target = 'mainsearch'; modx.tabs({url: this.action, title: 'Search', name: 'mainsearch'}); this.submit(); - } + }; } var s = this; this.input.onkeyup = function(e) { @@ -236,28 +236,28 @@ url: p.href }); e.preventDefault(); - e.stopPropagation() + e.stopPropagation(); } else { - var a = (t.tagName === 'A' && t) || (p.tagName === 'A' && p); + var a = t.tagName === 'A' && t || p.tagName === 'A' && p; if (a) { var el = s.result.querySelector('.selected'); if (el) el.className = ''; a.className = 'selected'; - if (modx.isMobile) s.close() + if (modx.isMobile) s.close(); } } - } + }; } else { - s.empty() + s.empty(); } }, 'document'); - }, 300) + }, 300); } else { - s.empty() + s.empty(); } }; if (modx.isMobile) { - this.input.onblur = this.close + this.input.onblur = this.close; } this.input.onfocus = this.open; this.input.onclick = this.open; @@ -265,19 +265,19 @@ this.result.onmouseenter = this.open; this.result.onmouseleave = this.close; this.mask.onmouseenter = this.open; - this.mask.onmouseleave = this.close + this.mask.onmouseleave = this.close; }, open: function() { if (modx.search.results) { - modx.search.result.classList.add('open') + modx.search.result.classList.add('open'); } }, close: function() { - modx.search.result.classList.remove('open') + modx.search.result.classList.remove('open'); }, empty: function() { modx.search.result.classList.remove('open'); - modx.search.result.innerHTML = '' + modx.search.result.innerHTML = ''; } }, main: { @@ -289,11 +289,11 @@ modx.main.tabRow.init(); modx.main.stopWork(); modx.main.scrollWork(); - // modx.tree.restoreTree(); + modx.tree.restoreTree(); w.main.document.addEventListener('click', modx.hideDropDown, false); w.main.document.addEventListener('click', modx.tabsInit, false); w.main.document.addEventListener('contextmenu', modx.main.oncontextmenu, false); - w.history.replaceState(null, d.title, (modx.main.getQueryVariable('a', w.main.location.search) === '2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search)); + w.history.replaceState(null, d.title, modx.main.getQueryVariable('a', w.main.location.search) === '2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); }, oncontextmenu: function(e) { if (e.ctrlKey) return; @@ -314,19 +314,19 @@ r = JSON.parse(r); if (r.item.url) { if (modx.config.global_tabs) { - r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'evo-tab-page-' + modx.urlToUid(w.location.hash) + '\'})}'; + r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:"' + r.item.url + '"})}else{modx.popup({url:"' + r.item.url + '",width:"95%",height:"95%",margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:"center elements",wrap:"evo-tab-page-' + modx.urlToUid(w.location.hash) + '"})}'; } else { - r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'main\'})}'; + r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:"' + r.item.url + '"})}else{modx.popup({url:"' + r.item.url + '",width:"95%",height:"95%",margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:"center elements",wrap:"main"})}'; } } r = JSON.stringify(r); el.id = 'node' + id; el.dataset.contextmenu = r; - modx.tree.showPopup(e, id, name) + modx.tree.showPopup(e, id, name); } - }) + }); } - e.preventDefault() + e.preventDefault(); } }, tabRow: { @@ -348,7 +348,7 @@ var sel = row.querySelector('.selected'); if (sel.previousSibling) { sel.previousSibling.click(); - modx.main.tabRow.scroll(row) + modx.main.tabRow.scroll(row); } }; rowContainer.appendChild(p); @@ -360,23 +360,23 @@ var sel = row.querySelector('.selected'); if (sel.nextSibling) { sel.nextSibling.click(); - modx.main.tabRow.scroll(row) + modx.main.tabRow.scroll(row); } }; rowContainer.appendChild(n); setTimeout(function() { sel = row.querySelector('.selected'); modx.main.tabRow.scroll(row, sel); - w.main.onresize = function() { + w.main.addEventListener('resize', function() { modx.main.tabRow.scroll(row); - }; + }, false); if (sel) { if (sel.previousSibling) p.classList.remove('disable'); if (sel.nextSibling) n.classList.remove('disable'); } }, 100); row.onclick = function(e) { - var sel = e.target.tagName === 'H2' ? e.target : (e.target.tagName === 'SPAN' ? e.target.parentNode : null); + var sel = e.target.tagName === 'H2' ? e.target : e.target.tagName === 'SPAN' ? e.target.parentNode : null; if (sel) { if (sel.previousSibling) { this.parentNode.querySelector('i.prev').classList.remove('disable'); @@ -388,12 +388,13 @@ } else { this.parentNode.querySelector('i.next').classList.add('disable'); } - modx.main.tabRow.scroll(this, sel) + modx.main.tabRow.scroll(this, sel); } - } + }; }, - scroll: function(row, sel) { + scroll: function(row, sel, a) { sel = sel || row.querySelector('.selected') || row.firstChild; + a = a || 100; var c = 0, elms = row.childNodes; for (var i = 0; i < elms.length; i++) { @@ -402,15 +403,15 @@ if (row.scrollLeft > sel.offsetLeft) { $(row).animate({ scrollLeft: sel.offsetLeft - (sel.previousSibling ? 30 : 1) - }, 100) + }, a); } if (sel.offsetLeft + sel.offsetWidth > row.offsetWidth + row.scrollLeft) { $(row).animate({ - scrollLeft: (sel.offsetLeft - row.offsetWidth + sel.offsetWidth) + (sel.nextSibling ? 30 : 0) - }, 100) + scrollLeft: sel.offsetLeft - row.offsetWidth + sel.offsetWidth + (sel.nextSibling ? 30 : 0) + }, a); } if (c > row.offsetWidth) { - this.drag(row) + this.drag(row); } }, drag: function(row) { @@ -424,43 +425,47 @@ if (Math.abs(e.clientX - x) > 5) { e.stopPropagation(); row.scrollLeft = f - (e.clientX - x); - row.ownerDocument.body.classList.add('drag') + row.ownerDocument.body.classList.add('drag'); } }; row.onmouseup = row.ownerDocument.onmouseup = function(e) { e.stopPropagation(); row.onmousemove = null; row.ownerDocument.onmousemove = null; - row.ownerDocument.body.classList.remove('drag') - } + row.ownerDocument.body.classList.remove('drag'); + }; } - } + }; } }, work: function() { - d.getElementById('mainloader').classList.add('show') + d.getElementById('mainloader').classList.add('show'); }, stopWork: function() { - d.getElementById('mainloader').classList.remove('show') + d.getElementById('mainloader').classList.remove('show'); }, scrollWork: function() { - var a = w.main.frameElement.contentWindow, - b = localStorage.getItem('page_y'), - c = localStorage.getItem('page_url'); - if (b === u) { - localStorage.setItem('page_y', 0) - } - if (c === null) { - c = a.location.search.substring(1) - } - if ((modx.main.getQueryVariable('a', c) === modx.main.getQueryVariable('a', a.location.search)) && (modx.main.getQueryVariable('id', c) === modx.main.getQueryVariable('id', a.location.search))) { - a.scrollTo(0, b) - } - a.onscroll = function() { - if (a.pageYOffset > 0) { - localStorage.setItem('page_y', a.pageYOffset); - localStorage.setItem('page_url', a.location.search.substring(1)) + if (modx.config.global_tabs) { + // :TODO save scroll position + } else { + var a = w.main.frameElement.contentWindow, + b = localStorage.getItem('page_y'), + c = localStorage.getItem('page_url'); + if (b === u) { + localStorage.setItem('page_y', 0); + } + if (c === null) { + c = a.location.search.substring(1); } + if ((modx.main.getQueryVariable('a', c) === modx.main.getQueryVariable('a', a.location.search)) && (modx.main.getQueryVariable('id', c) === modx.main.getQueryVariable('id', a.location.search))) { + a.scrollTo(0, b); + } + a.addEventListener('scroll', function() { + if (a.pageYOffset > 0) { + localStorage.setItem('page_y', a.pageYOffset); + localStorage.setItem('page_url', a.location.search.substring(1)); + } + }, false); } }, getQueryVariable: function(a, b) { @@ -472,7 +477,7 @@ for (var i = 0; i < b.length; i++) { var c = b[i].split('='); if (c[0] === a) { - f = decodeURIComponent(c[1]) + f = decodeURIComponent(c[1]); } } } @@ -490,7 +495,7 @@ mask: null, init: function() { if (!d.getElementById(modx.resizer.id)) { - return + return; } modx.resizer.mask = d.createElement('div'); modx.resizer.mask.id = 'mask_resizer'; @@ -501,7 +506,7 @@ var x, y, tree = d.getElementById('tree'), h = tree.offsetWidth; d.getElementById('frameset').appendChild(modx.resizer.mask); w.addEventListener('touchstart', function(e) { - if (!(/tab|tab\-row|tab\-row\-container/.test(e.target.className || e.target.offsetParent.className))) { + if (!/tab|tab\-row|tab\-row\-container/.test(e.target.className || e.target.offsetParent.className)) { x = e.changedTouches[0].clientX; y = e.changedTouches[0].clientY; this.swipe = true; @@ -519,26 +524,26 @@ modx.resizer.mask.style.visibility = 'visible'; var ax = touch.clientX - x; var ay = touch.clientY - y; - if ((Math.abs(ax) > Math.abs(ay)) && this.swipe) { + if (Math.abs(ax) > Math.abs(ay) && this.swipe) { if (ax < 0 && this.sidebar) { if (Math.abs(ax) > h) ax = -h; tree.style.transform = 'translate3d(' + ax + 'px, 0, 0)'; tree.style.WebkitTransform = 'translate3d(' + ax + 'px, 0, 0)'; - modx.resizer.mask.style.opacity = (0.5 - (0.5 / -h) * ax).toFixed(2); + modx.resizer.mask.style.opacity = (0.5 - 0.5 / -h * ax).toFixed(2); if (Math.abs(ax) > h / 3) { - this.swipe = 'left' + this.swipe = 'left'; } else { - this.swipe = 'right' + this.swipe = 'right'; } } else if (ax > 0 && !this.sidebar) { if (Math.abs(ax) > h) ax = h; tree.style.transform = 'translate3d(' + -(h - ax) + 'px, 0, 0)'; tree.style.WebkitTransform = 'translate3d(' + -(h - ax) + 'px, 0, 0)'; - modx.resizer.mask.style.opacity = ((0.5 / h) * ax).toFixed(2); + modx.resizer.mask.style.opacity = (0.5 / h * ax).toFixed(2); if (Math.abs(ax) > h / 3) { - this.swipe = 'right' + this.swipe = 'right'; } else { - this.swipe = 'left' + this.swipe = 'left'; } } } @@ -546,15 +551,15 @@ w.addEventListener('touchend', function() { if (this.swipe === 'left') { d.body.classList.add('sidebar-closed'); - modx.resizer.setWidth(0) + modx.resizer.setWidth(0); } if (this.swipe === 'right') { d.body.classList.remove('sidebar-closed'); - modx.resizer.setWidth(h) + modx.resizer.setWidth(h); } tree.style.cssText = ''; modx.resizer.mask.style.cssText = ''; - }, false) + }, false); } }, onMouseDown: function(e) { @@ -564,42 +569,42 @@ modx.resizer.oldZIndex = modx.resizer.dragElement.style.zIndex; modx.resizer.dragElement.style.zIndex = modx.resizer.newZIndex; modx.resizer.dragElement.style.background = modx.resizer.background; - localStorage.setItem('MODX_widthSideBar', (modx.resizer.dragElement.offsetLeft > 0 ? modx.resizer.dragElement.offsetLeft : 0)); + localStorage.setItem('MODX_widthSideBar', modx.resizer.dragElement.offsetLeft > 0 ? modx.resizer.dragElement.offsetLeft : 0); d.body.appendChild(modx.resizer.mask); d.onmousemove = modx.resizer.onMouseMove; d.body.focus(); d.body.classList.add('resizer_move'); d.onselectstart = function() { - return false + return false; }; modx.resizer.dragElement.ondragstart = function() { - return false + return false; }; - return false + return false; } }, onMouseMove: function(e) { e = e || w.event; if (e.clientX > 0) { - modx.resizer.left = e.clientX + modx.resizer.left = e.clientX; } else { - modx.resizer.left = 0 + modx.resizer.left = 0; } modx.resizer.dragElement.style.left = modx.pxToRem(modx.resizer.left) + 'rem'; d.getElementById('tree').style.width = modx.pxToRem(modx.resizer.left) + 'rem'; d.getElementById('main').style.left = modx.pxToRem(modx.resizer.left) + 'rem'; if (e.clientX < -2 || e.clientY < -2) { - modx.resizer.onMouseUp(e) + modx.resizer.onMouseUp(e); } }, onMouseUp: function(e) { if (modx.resizer.dragElement !== null && e.button === 0 && modx.resizer.dragElement.id === modx.resizer.id) { if (e.clientX > 0) { d.body.classList.remove('sidebar-closed'); - modx.resizer.left = e.clientX + modx.resizer.left = e.clientX; } else { d.body.classList.add('sidebar-closed'); - modx.resizer.left = 0 + modx.resizer.left = 0; } d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(modx.resizer.left); modx.resizer.dragElement.style.zIndex = modx.resizer.oldZIndex; @@ -609,7 +614,7 @@ d.body.classList.remove('resizer_move'); d.body.removeChild(modx.resizer.mask); d.onmousemove = null; - d.onselectstart = null + d.onselectstart = null; } }, toggle: function() { @@ -617,38 +622,38 @@ if (d.body.classList.contains('sidebar-closed')) { d.body.classList.remove('sidebar-closed'); localStorage.setItem('MODX_widthSideBar', 0); - d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(parseInt(d.getElementById('tree').offsetWidth)) + d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(parseInt(d.getElementById('tree').offsetWidth)); } else { localStorage.setItem('MODX_widthSideBar', parseInt(d.getElementById('tree').offsetWidth)); d.body.classList.add('sidebar-closed'); - d.cookie = 'MODX_widthSideBar=0' + d.cookie = 'MODX_widthSideBar=0'; } } else { - var p = d.getElementById('tree').offsetWidth !== 0 ? 0 : (parseInt(localStorage.getItem('MODX_widthSideBar')) ? parseInt(localStorage.getItem('MODX_widthSideBar')) : modx.config.tree_width); - modx.resizer.setWidth(p) + var p = d.getElementById('tree').offsetWidth !== 0 ? 0 : parseInt(localStorage.getItem('MODX_widthSideBar')) ? parseInt(localStorage.getItem('MODX_widthSideBar')) : modx.config.tree_width; + modx.resizer.setWidth(p); } }, setWidth: function(a) { if (a > 0) { localStorage.setItem('MODX_widthSideBar', 0); - d.body.classList.remove('sidebar-closed') + d.body.classList.remove('sidebar-closed'); } else { localStorage.setItem('MODX_widthSideBar', parseInt(d.getElementById('tree').offsetWidth)); - d.body.classList.add('sidebar-closed') + d.body.classList.add('sidebar-closed'); } d.cookie = 'MODX_widthSideBar=' + modx.pxToRem(a); d.getElementById('tree').style.width = modx.pxToRem(a) + 'rem'; d.getElementById('resizer').style.left = modx.pxToRem(a) + 'rem'; - d.getElementById('main').style.left = modx.pxToRem(a) + 'rem' + d.getElementById('main').style.left = modx.pxToRem(a) + 'rem'; }, setDefaultWidth: function() { - modx.resizer.setWidth(modx.remToPx(modx.config.tree_width)) + modx.resizer.setWidth(modx.remToPx(modx.config.tree_width)); } }, tree: { ctx: null, rpcNode: null, - itemToChange: null, + itemToChange: '', selectedObjectName: null, selectedObject: 0, selectedObjectDeleted: 0, @@ -656,7 +661,7 @@ drag: false, deleted: [], init: function() { - this.restoreTree() + this.restoreTree(); }, draggable: function() { if (modx.permission.dragndropdocintree) { @@ -677,16 +682,16 @@ return true; } else { var roles = this.dataset.roles + (this.parentNode.parentNode.id !== 'treeRoot' ? this.parentNode.parentNode.previousSibling.dataset.roles : ''); - var draggable = (roles && modx.user.role !== 1 ? (roles.split(',').map(Number).indexOf(modx.user.role) > -1) : true); + var draggable = roles && modx.user.role !== 1 ? roles.split(',').map(Number).indexOf(modx.user.role) > -1 : true; if (draggable) { this.parentNode.draggable = true; modx.tree.itemToChange = this.parentNode.id; - this.parentNode.ondragstart = modx.tree.ondragstart + this.parentNode.ondragstart = modx.tree.ondragstart; } else { this.parentNode.draggable = false; this.parentNode.ondragstart = function() { - return false - } + return false; + }; } } }, @@ -713,7 +718,7 @@ if (modx.tree.drag) { var a = e.clientY; var b = parseInt(this.getBoundingClientRect().top); - var c = (a - b); + var c = a - b; if (c > this.offsetHeight / 1.51) { //this.parentNode.className = 'dragafter'; this.parentNode.classList.add('dragafter'); @@ -741,12 +746,12 @@ e.dataTransfer.dropEffect = 'none'; modx.tree.drag = false; } - e.preventDefault() + e.preventDefault(); }, ondragleave: function(e) { this.parentNode.className = ''; this.parentNode.removeAttribute('draggable'); - e.preventDefault() + e.preventDefault(); }, ondrop: function(e) { var el = d.getElementById(modx.tree.itemToChange), @@ -767,9 +772,9 @@ } if (this.nextSibling) { if (this.nextSibling.innerHTML) { - this.nextSibling.appendChild(el) + this.nextSibling.appendChild(el); } else { - el.parentNode.removeChild(el) + el.parentNode.removeChild(el); } els = this.parentNode.lastChild.children; for (i = 0; i < els.length; i++) { @@ -777,9 +782,9 @@ } } else { el.parentNode.removeChild(el); - d.querySelector('#node' + parent + ' .icon').innerHTML = (parseInt(this.dataset.private) ? modx.style.tree_folder_secure : modx.style.tree_folder) + d.querySelector('#node' + parent + ' .icon').innerHTML = parseInt(this.dataset.private) ? modx.style.tree_folder_secure : modx.style.tree_folder; } - modx.tree.ondragupdate(this, id, parent, menuindex) + modx.tree.ondragupdate(this, id, parent, menuindex); } if (this.parentNode.classList.contains('dragafter')) { parent = /node/.test(this.parentNode.parentNode.parentNode.id) ? parseInt(this.parentNode.parentNode.parentNode.id.substr(4)) : 0; @@ -792,7 +797,7 @@ for (i = 0; i < els.length; i++) { menuindex[i] = els[i].id.substr(4); } - modx.tree.ondragupdate(this, id, parent, menuindex) + modx.tree.ondragupdate(this, id, parent, menuindex); } if (this.parentNode.classList.contains('dragbefore')) { parent = /node/.test(this.parentNode.parentNode.parentNode.id) ? parseInt(this.parentNode.parentNode.parentNode.id.substr(4)) : 0; @@ -805,7 +810,7 @@ for (i = 0; i < els.length; i++) { menuindex[i] = els[i].id.substr(4); } - modx.tree.ondragupdate(this, id, parent, menuindex) + modx.tree.ondragupdate(this, id, parent, menuindex); } this.parentNode.removeAttribute('class'); this.parentNode.removeAttribute('draggable'); @@ -813,7 +818,7 @@ }, ondragupdate: function(a, id, parent, menuindex) { var roles = a.dataset.roles + (a.parentNode.parentNode.id !== 'treeRoot' ? a.parentNode.parentNode.previousSibling.dataset.roles : ''); - if (!(roles && modx.user.role !== 1 ? (roles.split(',').map(Number).indexOf(modx.user.role) > -1) : true)) { + if (!(roles && modx.user.role !== 1 ? roles.split(',').map(Number).indexOf(modx.user.role) > -1 : true)) { alert(modx.lang.error_no_privileges); modx.tree.restoreTree(); return; @@ -836,7 +841,7 @@ if (elMenuIndex && index >= 0) elMenuIndex.value = index; if (elParent && elParentName) { elParent.value = parent; - elParentName.innerHTML = parent + ' (' + d.querySelector('#node' + parent + ' > a').dataset.titleEsc + ')' + elParentName.innerHTML = parent + ' (' + d.querySelector('#node' + parent + ' > a').dataset.titleEsc + ')'; } } }, @@ -850,7 +855,7 @@ for (key in myCodeMirrors) { if (myCodeMirrors.hasOwnProperty(key)) { w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.darktheme); - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.defaulttheme) + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.defaulttheme); } } } @@ -862,7 +867,7 @@ for (key in myCodeMirrors) { if (myCodeMirrors.hasOwnProperty(key)) { w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.darktheme); - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.defaulttheme) + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.defaulttheme); } } } @@ -887,10 +892,10 @@ d.getElementById('treeloader').classList.add('visible'); modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=' + el.dataset.indent + '&parent=' + id + '&expandAll=' + el.dataset.expandall + folderState, function(r) { modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) + modx.tree.draggable(); + }); } - this.saveFolderState() + this.saveFolderState(); } else { if (toggle) toggle.innerHTML = el.dataset.iconExpanded; icon.innerHTML = el.dataset.iconFolderClose; @@ -901,9 +906,9 @@ }, 100, function() { this.parentNode.innerHTML = ''; }); - this.saveFolderState() + this.saveFolderState(); } - e.preventDefault() + e.preventDefault(); }, rpcLoadData: function(a) { if (this.rpcNode !== null) { @@ -914,9 +919,9 @@ if (this.rpcNode.id === 'treeRoot') { el = d.getElementById('binFull'); if (el) { - this.showBin(true) + this.showBin(true); } else { - this.showBin(false) + this.showBin(false); } } else { this.rpcNode.style.overflow = 'hidden'; @@ -930,7 +935,7 @@ el = d.getElementById('loginfrm'); if (el) { this.rpcNode.parentNode.removeChild(this.rpcNode); - w.location.href = modx.MODX_MANAGER_URL + w.location.href = modx.MODX_MANAGER_URL; } } } @@ -941,22 +946,22 @@ treepageclick = el.dataset.treepageclick, showchildren = parseInt(el.dataset.showchildren), openfolder = parseInt(el.dataset.openfolder); - title = title || (el.dataset && el.dataset.titleEsc); + title = title || el.dataset && el.dataset.titleEsc; if (tree.ca === 'move') { try { this.setSelectedByContext(id); - w.main.setMoveValue(id, title) + w.main.setMoveValue(id, title); } catch (oException) { - alert(modx.lang.unable_set_parent) + alert(modx.lang.unable_set_parent); } } if (tree.ca === 'open' || tree.ca === '') { if (id === 0) { - href = '?a=2' + href = '?a=2'; } else { var href = ''; if (!isNaN(treepageclick) && isFinite(treepageclick)) { - href = '?a=' + treepageclick + '&r=1&id=' + id + (openfolder === 0 ? this.getFolderState() : '') + href = '?a=' + treepageclick + '&r=1&id=' + id + (openfolder === 0 ? this.getFolderState() : ''); } else { href = treepageclick; } @@ -964,36 +969,36 @@ if (showchildren !== 1) { href = ''; } - this.toggleNode(e, id) + this.toggleNode(e, id); } } if (href) { if (e.shiftKey) { w.getSelection().removeAllRanges(); modx.openWindow(href); - this.restoreTree() + this.restoreTree(); } else { modx.tabs({url: modx.MODX_MANAGER_URL + href, title: title + '(' + id + ')'}); - if (modx.isMobile) modx.resizer.toggle() + if (modx.isMobile) modx.resizer.toggle(); } } this.itemToChange = id; - this.setSelected(id) + this.setSelected(id); } if (tree.ca === 'parent') { try { this.setSelectedByContext(id); - w.main.setParent(id, title) + w.main.setParent(id, title); } catch (oException) { - alert(modx.lang.unable_set_parent) + alert(modx.lang.unable_set_parent); } } if (tree.ca === 'link') { try { this.setSelectedByContext(id); - w.main.setLink(id) + w.main.setLink(id); } catch (oException) { - alert(modx.lang.unable_set_link) + alert(modx.lang.unable_set_link); } } e.preventDefault(); @@ -1027,18 +1032,18 @@ var onEvent = dataJson[key][k]; item[k] = function(onEvent) { return function() { - eval(onEvent) - } - }(onEvent) + eval(onEvent); + }; + }(onEvent); } else { - item[k] = dataJson[key][k] + item[k] = dataJson[key][k]; } } } if (key.indexOf('header') === 0) item.className += ' menuHeader'; if (key.indexOf('item') === 0) item.className += ' menuLink'; if (key.indexOf('seperator') === 0 || key.indexOf('separator') === 0) item.className += ' seperator separator'; - this.ctx.appendChild(item) + this.ctx.appendChild(item); } } x = e.clientX > 0 ? e.clientX : e.pageX; @@ -1046,7 +1051,7 @@ e.view.position = e.view.frameElement ? e.view.frameElement.getBoundingClientRect() : e.target.offsetParent.getBoundingClientRect(); if (e.view.frameElement) { x += e.view.position.left; - y += e.view.frameElement.offsetParent.offsetTop + y += e.view.frameElement.offsetParent.offsetTop; } else { if (e.target.parentNode.parentNode.classList.contains('node')) { x += 50; @@ -1056,15 +1061,15 @@ x = e.view.position.width - this.ctx.offsetWidth; } if (y + this.ctx.offsetHeight / 2 > e.view.position.height) { - y = e.view.position.height - this.ctx.offsetHeight - 5 + y = e.view.position.height - this.ctx.offsetHeight - 5; } else if (y - this.ctx.offsetHeight / 2 < e.view.position.top) { - y = e.view.position.top + 5 + y = e.view.position.top + 5; } else { - y = y - (this.ctx.offsetHeight / 2) + y = y - this.ctx.offsetHeight / 2; } this.itemToChange = id; this.selectedObjectName = title; - this.dopopup(this.ctx, x + 10, y) + this.dopopup(this.ctx, x + 10, y); } else { el = el.firstChild; var ctx = d.getElementById('mx_contextmenu'); @@ -1083,10 +1088,10 @@ if (parseInt(el.dataset.published) === 1) { i9.style.display = 'none'; } else { - i10.style.display = 'none' + i10.style.display = 'none'; } } else if (i5) { - i5.style.display = 'none' + i5.style.display = 'none'; } if (modx.permission.delete_document === 1) { i4.style.display = 'block'; @@ -1094,9 +1099,9 @@ if (parseInt(el.dataset.deleted) === 1) { i4.style.display = 'none'; i9.style.display = 'none'; - i10.style.display = 'none' + i10.style.display = 'none'; } else { - i8.style.display = 'none' + i8.style.display = 'none'; } } if (i11) { @@ -1110,31 +1115,31 @@ x = e.clientX > 0 ? e.clientX : e.pageX; y = e.clientY > 0 ? e.clientY : e.pageY; if (y + ctx.offsetHeight / 2 > bodyHeight) { - y = bodyHeight - ctx.offsetHeight - 5 + y = bodyHeight - ctx.offsetHeight - 5; } else if (y - ctx.offsetHeight / 2 < tree.offsetTop) { - y = tree.offsetTop + 5 + y = tree.offsetTop + 5; } else { - y = y - ctx.offsetHeight / 2 + y = y - ctx.offsetHeight / 2; } if (e.target.parentNode.parentNode.classList.contains('node')) x += 50; this.itemToChange = id; this.selectedObjectName = title; - this.dopopup(ctx, x + 10, y) + this.dopopup(ctx, x + 10, y); } - e.stopPropagation() + e.stopPropagation(); } }, dopopup: function(el, a, b) { if (this.selectedObjectName.length > 30) { - this.selectedObjectName = this.selectedObjectName.substr(0, 30) + '...' + this.selectedObjectName = this.selectedObjectName.substr(0, 30) + '...'; } var f = d.getElementById('nameHolder'); f.innerHTML = this.selectedObjectName; el.style.left = a + (modx.config.textdir ? '-190' : '') + 'px'; el.style.top = b + 'px'; setTimeout(function() { - el.classList.add('show') - }, 150) + el.classList.add('show'); + }, 150); }, menuHandler: function(a) { switch (a) { @@ -1151,8 +1156,8 @@ break; case 4: if (this.selectedObjectDeleted) { - alert('\'' + this.selectedObjectName + '\' ' + modx.lang.already_deleted) - } else if (confirm('\'' + this.selectedObjectName + '\'\n\n' + modx.lang.confirm_delete_resource) === true) { + alert('"' + this.selectedObjectName + '" ' + modx.lang.already_deleted); + } else if (confirm('"' + this.selectedObjectName + '"\n\n' + modx.lang.confirm_delete_resource) === true) { modx.tabs({url: modx.MODX_MANAGER_URL + '?a=6&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); } break; @@ -1170,25 +1175,25 @@ break; case 8: if (d.getElementById('node' + this.itemToChange).firstChild.dataset.deleted) { - if (confirm('\'' + this.selectedObjectName + '\' ' + modx.lang.confirm_undelete) === true) { + if (confirm('"' + this.selectedObjectName + '" ' + modx.lang.confirm_undelete) === true) { modx.tabs({url: modx.MODX_MANAGER_URL + '?a=63&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); } } else { - alert('\'' + this.selectedObjectName + '\'' + modx.lang.not_deleted) + alert('"' + this.selectedObjectName + '"' + modx.lang.not_deleted); } break; case 9: - if (confirm('\'' + this.selectedObjectName + '\' ' + modx.lang.confirm_publish) === true) { + if (confirm('"' + this.selectedObjectName + '" ' + modx.lang.confirm_publish) === true) { modx.tabs({url: modx.MODX_MANAGER_URL + '?a=61&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); } break; case 10: if (this.itemToChange !== modx.config.site_start) { - if (confirm('\'' + this.selectedObjectName + '\' ' + modx.lang.confirm_unpublish) === true) { + if (confirm('"' + this.selectedObjectName + '" ' + modx.lang.confirm_unpublish) === true) { modx.tabs({url: modx.MODX_MANAGER_URL + '?a=62&id=' + this.itemToChange, title: this.selectedObjectName + '(' + this.itemToChange + ')'}); } } else { - alert('Document is linked to site_start variable and cannot be unpublished!') + alert('Document is linked to site_start variable and cannot be unpublished!'); } break; case 11: @@ -1198,7 +1203,7 @@ w.open(d.getElementById('node' + this.itemToChange).firstChild.dataset.href, 'previeWin'); break; default: - alert('Unknown operation command.') + alert('Unknown operation command.'); } }, setSelected: function(a) { @@ -1206,16 +1211,16 @@ if (el) el.classList.remove('current'); if (a) { if (typeof a === 'object') { - a.classList.add('current') + a.classList.add('current'); } else { el = d.querySelector('#node' + a + '>.node') || d.getElementById('node' + a); - if (el) el.classList.add('current') + if (el) el.classList.add('current'); } } }, setActiveFromContextMenu: function(a) { var el = d.querySelector('#node' + a + '>.node'); - if (el) this.setSelected(el) + if (el) this.setSelected(el); }, setSelectedByContext: function(a) { var el = d.querySelector('#treeRoot .selected'); @@ -1227,11 +1232,11 @@ var a = w.main.document && (w.main.document.URL || w.main.document.location.search), b = modx.main.getQueryVariable('a', a); if (a && modx.typesactions[b]) { - this.itemToChange = (modx.typesactions[b] === 7 ? '' : modx.typesactions[b] + '_') + parseInt(modx.main.getQueryVariable('id', a)) + this.itemToChange = (modx.typesactions[b] === 7 ? '' : modx.typesactions[b] + '_') + parseInt(modx.main.getQueryVariable('id', a)); } else { - this.itemToChange = null + this.itemToChange = ''; } - this.setSelected(this.itemToChange) + this.setSelected(this.itemToChange); }, restoreTree: function() { //console.log('modx.tree.restoreTree()'); @@ -1241,8 +1246,8 @@ this.rpcNode = d.getElementById('treeRoot'); modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=2&id=' + this.itemToChange, function(r) { modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) + modx.tree.draggable(); + }); } }, expandTree: function() { @@ -1251,8 +1256,8 @@ modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=1&id=' + this.itemToChange, function(r) { modx.tree.rpcLoadData(r); modx.tree.saveFolderState(); - modx.tree.draggable() - }) + modx.tree.draggable(); + }); }, collapseTree: function() { this.rpcNode = d.getElementById('treeRoot'); @@ -1261,8 +1266,8 @@ modx.openedArray = []; modx.tree.saveFolderState(); modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) + modx.tree.draggable(); + }); }, updateTree: function() { this.rpcNode = d.getElementById('treeRoot'); @@ -1271,8 +1276,8 @@ var b = '?a=1&f=nodes&indent=1&parent=0&expandAll=2&dt=' + a.dt.value + '&tree_sortby=' + a.sortby.value + '&tree_sortdir=' + a.sortdir.value + '&tree_nodename=' + a.nodename.value + '&id=' + this.itemToChange + '&showonlyfolders=' + a.showonlyfolders.value; modx.get(modx.MODX_MANAGER_URL + b, function(r) { modx.tree.rpcLoadData(r); - modx.tree.draggable() - }) + modx.tree.draggable(); + }); }, getFolderState: function() { var a; @@ -1280,16 +1285,16 @@ a = '&opened='; for (var key in modx.openedArray) { if (modx.openedArray[key]) { - a += key + '|' + a += key + '|'; } } } else { - a = '&opened=' + a = '&opened='; } - return a + return a; }, saveFolderState: function() { - modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&savestateonly=1' + this.getFolderState()) + modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&savestateonly=1' + this.getFolderState()); }, showSorter: function(e) { e = e || w.event; @@ -1297,15 +1302,15 @@ e.target.dataset.toggle = '#floater'; el.classList.toggle('show'); el.onclick = function(e) { - e.stopPropagation() - } + e.stopPropagation(); + }; }, emptyTrash: function() { if (confirm(modx.lang.confirm_empty_trash) === true) { modx.tabs({url: modx.MODX_MANAGER_URL + '?a=64', title: modx.lang.confirm_empty_trash}); modx.tabsClose(this.deleted); this.deleted = []; - modx.tree.restoreTree() + modx.tree.restoreTree(); } }, showBin: function(a) { @@ -1316,17 +1321,17 @@ el.classList.remove('disabled'); el.innerHTML = modx.style.empty_recycle_bin; el.onclick = function() { - modx.tree.emptyTrash() + modx.tree.emptyTrash(); }; var els = d.getElementById('tree').querySelectorAll('.deleted'); for (var i = 0; i < els.length; i++) { - this.deleted[els[i].dataset.id] = 'evo-tab-page-' + modx.urlToUid('a=27&id=' + els[i].dataset.id) + this.deleted[els[i].dataset.id] = 'evo-tab-page-' + modx.urlToUid('a=27&id=' + els[i].dataset.id); } } else { el.title = modx.lang.empty_recycle_bin_empty; el.classList.add('disabled'); el.innerHTML = modx.style.empty_recycle_bin_empty; - el.onclick = null + el.onclick = null; } } }, @@ -1337,27 +1342,26 @@ if (parseInt(r) === 1) { c.parentNode.removeChild(c); } else { - alert(r) + alert(r); } - }) + }); } }, - resizeTree: function() { - } + resizeTree: function() {} }, removeLocks: function() { if (confirm(modx.lang.confirm_remove_locks) === true) { //w.main.location.href = modx.MODX_MANAGER_URL + '?a=67' modx.get(modx.MODX_MANAGER_URL + '?a=67', function() { - modx.tree.restoreTree() - }) + modx.tree.restoreTree(); + }); } }, keepMeAlive: function() { modx.get('includes/session_keepalive.php?tok=' + d.getElementById('sessTokenInput').value + '&o=' + Math.random(), function(r) { r = JSON.parse(r); - if (r.status !== 'ok') w.location.href = modx.MODX_MANAGER_URL + '?a=8' - }) + if (r.status !== 'ok') w.location.href = modx.MODX_MANAGER_URL + '?a=8'; + }); }, updateMail: function(a) { try { @@ -1370,30 +1374,30 @@ if (c[0] > 0) { if (el) { el.innerHTML = c[0]; - el.style.display = 'block' + el.style.display = 'block'; } } else { - if (el) el.style.display = 'none' + if (el) el.style.display = 'none'; } if (c[1] > 0) { el = d.getElementById('newMail'); if (el) { - el.innerHTML = '' + modx.style.email + modx.lang.inbox + ' (' + c[0] + ' / ' + c[1] + ')'; - el.style.display = 'block' + el.innerHTML = '' + modx.style.email + modx.lang.inbox + ' (' + c[0] + ' / ' + c[1] + ')'; + el.style.display = 'block'; } } - if (modx.config.mail_check_timeperiod > 0) setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod) - }) + if (modx.config.mail_check_timeperiod > 0) setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod); + }); } } catch (oException) { - setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod) + setTimeout('modx.updateMail(true)', 1000 * modx.config.mail_check_timeperiod); } }, openWindow: function(a) { if (typeof a !== 'object') { a = { 'url': a - } + }; } if (!a.width) a.width = parseInt(w.innerWidth * 0.9) + 'px'; if (!a.height) a.height = parseInt(w.innerHeight * 0.8) + 'px'; @@ -1402,19 +1406,19 @@ if (!a.title) a.title = Math.floor((Math.random() * 999999) + 1); if (a.url) { if (this.plugins.EVOmodal === 1) { - top.EVO.modal.show(a) + top.EVO.modal.show(a); } else { - w.open(a.url, a.title, 'width=' + a.width + ',height=' + a.height + ',top=' + a.top + ',left=' + a.left + ',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no') + w.open(a.url, a.title, 'width=' + a.width + ',height=' + a.height + ',top=' + a.top + ',left=' + a.left + ',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no'); } } }, tabsInit: function(e) { - if (modx.config.global_tabs && e.button === 0 && e.target && ((e.target.tagName === 'A' && e.target.target === 'main') || (e.target.parentNode.tagName === 'A' && e.target.parentNode.target === 'main'))) { + if (modx.config.global_tabs && e.button === 0 && e.target && (e.target.tagName === 'A' && e.target.target === 'main' || e.target.parentNode.tagName === 'A' && e.target.parentNode.target === 'main')) { var a = e.target.tagName === 'A' && e.target || e.target.parentNode.tagName === 'A' && e.target.parentNode; if (e.shiftKey) { - modx.openWindow({url: a.href}) + modx.openWindow({url: a.href}); } else { - modx.tabs({url: a.href, title: a.innerHTML}) + modx.tabs({url: a.href, title: a.innerHTML}); } e.preventDefault(); } @@ -1426,7 +1430,7 @@ var el = d.getElementById(a[k]); if (el) { el.firstElementChild.contentWindow.documentDirty = false; - el.close() + el.close(); } } } @@ -1436,154 +1440,129 @@ if (typeof a === 'object' && a.url && /(index.php|http)/.test(a.url)) { if (modx.config.global_tabs && w.main) { var o = { - url: a.url, - name: '', - wrap: d.getElementById('main'), - tabs: d.querySelectorAll('.evo-tab-page'), - navbar: d.querySelector('.evo-tab-row .tab-row'), - tab: d.getElementById('evo-tab-home'), - action: modx.main.getQueryVariable('a', a.url), - closeactions: ['6', '61', '62', '63'], - reload: 0, - show: function(f) { - o.navbar.querySelector('.selected').classList.remove('selected'); - for (var i = 0; i < o.tabs.length; i++) { - o.tabs[i].classList.remove('show') - } - if (f) { - o.tab = d.getElementById('evo-tab-' + o.uid); - o.tab.classList.add('selected'); - o.el = d.getElementById('evo-tab-page-' + o.uid); - o.el.classList.add('show'); - w.main = o.el.firstElementChild.contentWindow; - if (modx.getActionFromUrl(w.main.location.search, 2)) { - w.main.location.reload() - } - if (o.reload) { - w.main.location.href = o.url - } - w.history.replaceState(null, d.title, modx.getActionFromUrl(w.main.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); - if (modx.main.getQueryVariable('tab', o.url) || modx.main.getQueryVariable('tab', o.url) === '0') { - w.main.document.querySelectorAll('.tab-row-container .tab-row .tab')[modx.main.getQueryVariable('tab', o.url)].click() - } - modx.main.tabRow.scroll(o.navbar, o.tab); - modx.tree.setItemToChange() - } else { - modx.main.tabRow.scroll(o.navbar) - } - }, - close: function(e) { - o.event = e || o.event || w.event; - var documentDirty = d.getElementById(o.tab.dataset.target).firstElementChild.contentWindow.documentDirty; - var checkDirt = !!d.getElementById(o.tab.dataset.target).firstElementChild.contentWindow.checkDirt; - if ((documentDirty && checkDirt && confirm(d.getElementById(o.tab.dataset.target).firstElementChild.contentWindow.checkDirt(o.event))) || !documentDirty) { - if (o.tab.classList.contains('selected')) { - for (var i = 0; i < o.tabs.length; i++) { - o.tabs[i].classList.remove('show') + url: a.url, + title: a.title, + name: a.name || '', + uid: modx.getActionFromUrl(a.url, 2) ? 'home' : modx.urlToUid(a.url), + action: modx.main.getQueryVariable('a', a.url), + closeactions: ['6', '61', '62', '63'], + reload: 0, + show: function(uid, title) { + uid = uid || o.uid; + var el = tabs.querySelector('.selected'); + if (el) { + el.classList.remove('selected'); + d.getElementById(el.dataset.target).classList.remove('show'); + } + w.main = tabpage.firstElementChild.contentWindow; + if (!d.getElementById('evo-tab-' + uid)) { + tab = d.createElement('h2'); + tab.id = 'evo-tab-' + uid; + tab.className = 'tab selected'; + tab.dataset.target = 'evo-tab-page-' + uid; + tab.onclick = o.select; + tabs.appendChild(tab); + } else { + tab = d.getElementById('evo-tab-' + uid); + tab.id = 'evo-tab-' + o.uid; + tab.dataset.target = 'evo-tab-page-' + o.uid; + tab.classList.add('selected'); + w.history.replaceState(null, d.title, modx.getActionFromUrl(w.main.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); + } + if (title && o.uid !== 'home') { + tab.innerHTML = '' + title + '×'; + } + tabpage.classList.add('show'); + modx.tree.setItemToChange(); + modx.main.tabRow.scroll(tabs, tab, 350); + }, + close: function(e) { + o.event = e || o.event || w.event; + var el; + if (tab) { + var documentDirty = d.getElementById(tab.dataset.target).firstElementChild.contentWindow.documentDirty; + var checkDirt = !!d.getElementById(tab.dataset.target).firstElementChild.contentWindow.checkDirt; + if (documentDirty && checkDirt && confirm(d.getElementById(tab.dataset.target).firstElementChild.contentWindow.checkDirt(o.event)) || !documentDirty) { + el = tab.classList.contains('selected') ? tab.previousElementSibling : tabs.querySelector('.selected'); + d.getElementById(tab.dataset.target).parentNode.removeChild(d.getElementById(tab.dataset.target)); + tabs.removeChild(tab); + el.click(); + } + } else { + el = tabs.querySelector('.selected'); + tabpage.parentNode.removeChild(tabpage); + el.click(); + } + }, + select: function(e) { + tab = this; + if (e.target.className === 'tab-close') { + d.getElementById(this.dataset.target).close(); + } else { + tabpage = d.getElementById(this.dataset.target); + w.main = tabpage.firstElementChild.contentWindow; + var el = tabs.querySelector('.selected:not(:hover)'); + if (el) { + el.classList.remove('selected'); + d.getElementById(el.dataset.target).classList.remove('show'); + } else { + if (tab.timer) { + clearTimeout(tab.timer); + tab.timer = null; + w.main.location.reload(); + } else { + tab.timer = setTimeout(function() { + tab.timer = null; + }, 250); + } + } + tabpage.classList.add('show'); + tab.classList.add('selected'); + w.history.replaceState(null, d.title, modx.getActionFromUrl(w.main.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); + modx.tree.setItemToChange(); + modx.main.tabRow.scroll(tabs, tab, 350); + } + }, + events: { + click: function() { + if (typeof w.main.documentDirty !== 'undefined' && w.main.documentDirty && !tab.classList.contains('changed')) { + tab.classList.add('changed'); + w.main.document.removeEventListener('click', o.events.click); + } + }, + keyup: function() { + if (typeof w.main.documentDirty !== 'undefined' && w.main.documentDirty && !tab.classList.contains('changed')) { + tab.classList.add('changed'); + w.main.document.removeEventListener('keyup', o.events.keyup); + } } - o.tab.previousElementSibling.classList.add('selected'); - o.el = d.getElementById(o.tab.previousElementSibling.dataset.target); - o.el.classList.add('show'); - } else { - o.el = d.getElementById(o.navbar.querySelector('.selected').dataset.target); - } - w.main = o.el.firstElementChild.contentWindow; - w.history.replaceState(null, d.title, modx.getActionFromUrl(w.main.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); - o.wrap.removeChild(d.getElementById(o.tab.dataset.target)); - o.navbar.removeChild(o.tab); - delete d.getElementById(o.tab.dataset.target); - delete o.tab; - o.tab = o.navbar.querySelector('.selected'); - modx.tree.setItemToChange(); - } - }, - select: function(e) { - o.tabs = d.querySelectorAll('.evo-tab-page.show'); - o.event = e; - o.tab = this; - if (e.target.className === 'tab-close') { - d.getElementById(this.dataset.target).close() - } else { - for (var i = 0; i < o.tabs.length; i++) { - o.tabs[i].classList.remove('show') - } - o.navbar.querySelector('.selected').classList.remove('selected'); - o.tab.classList.add('selected'); - o.el = d.getElementById(this.dataset.target); - o.el.classList.add('show'); - w.main = o.el.firstElementChild.contentWindow; - w.history.replaceState(null, d.title, modx.getActionFromUrl(w.main.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); - modx.main.tabRow.scroll(o.navbar, o.tab); - modx.tree.setItemToChange(); - if (o.tab.timer) { - clearTimeout(o.tab.timer); - o.tab.timer = null; - w.main.location.reload(); - } else { - o.tab.timer = setTimeout(function() { - o.tab.timer = null - }, 250); - } - } - }, - events: { - click: function() { - if (typeof w.main.documentDirty !== 'undefined' && w.main.documentDirty && !o.tab.classList.contains('changed')) { - o.tab.classList.add('changed'); - w.main.document.removeEventListener('click', o.events.click) } }, - keyup: function() { - if (typeof w.main.documentDirty !== 'undefined' && !o.tab.classList.contains('changed')) { - o.tab.classList.add('changed'); - w.main.document.removeEventListener('keyup', o.events.keyup) - } - } - } - }; - for (var k in a) { - if (a.hasOwnProperty(k) && typeof o[k] !== 'undefined') { - o[k] = a[k] - } - } - o.uid = modx.getActionFromUrl(o.url, 2) ? 'home' : modx.urlToUid(o.url); - o.el = d.getElementById('evo-tab-page-' + o.uid); - o.tab.onclick = o.select; - if (o.el) { + tabpage = d.getElementById('evo-tab-page-' + o.uid), + tabs = d.querySelector('.evo-tab-row .tab-row'), + tab = d.getElementById('evo-tab-home'); + tab.onclick = o.select; + if (tabpage) { if (~o.closeactions.indexOf(o.action)) { - o.reload = 1 + tabpage.firstElementChild.src = o.url; } - o.show(1) + o.show(); } else { - o.el = d.createElement('div'); - o.el.id = 'evo-tab-page-' + o.uid; - o.el.close = o.close; - o.el.className = 'evo-tab-page show'; - o.tab = d.createElement('h2'); - o.tab.id = 'evo-tab-' + o.uid; - o.tab.className = 'tab selected'; - o.tab.dataset.target = 'evo-tab-page-' + o.uid; - o.tab.innerHTML = a.title ? '' + a.title + '×' : ''; - o.tab.onclick = o.select; - o.navbar.appendChild(o.tab); - o.wrap.appendChild(o.el); - o.el.id = 'evo-tab-page-' + o.uid; d.getElementById('mainloader').className = 'show'; - o.frame = d.createElement('iframe'); - o.frame.name = o.name; - o.frame.width = '100%'; - o.frame.height = '100%'; - o.frame.frameBorder = '0'; - o.frame.src = o.url; - o.frame.onload = function(e) { + tabpage = d.createElement('div'); + tabpage.id = 'evo-tab-page-' + o.uid; + tabpage.className = 'evo-tab-page'; + tabpage.innerHTML = ''; + tabpage.close = o.close; + tabpage.firstElementChild.addEventListener('load', function(e) { w.main = e.target.contentWindow; - a.url = w.main.location.search || w.location.hash; - o.uid = modx.urlToUid(a.url); - o.event = e; + o.url = w.main.location.search || w.location.hash; + o.uid = modx.urlToUid(o.url); if (!!w.main.__alertQuit) { var message = w.main.document.body.querySelector('p').innerHTML; - w.main.document.body.innerHTML = ''; - w.main.alert = function() { }; + tabpage = e.target.parentNode; + tab = null; + w.main.alert = function() {}; history.pushState(null, d.title, modx.getActionFromUrl(w.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.location.search); window.onpopstate = function() { history.go(1); @@ -1596,45 +1575,37 @@ }); modx.getLockedElements(modx.main.getQueryVariable('a', a.url), modx.main.getQueryVariable('id', a.url), function(data) { if (!!data) { - o.el.close(); - modx.tree.restoreTree() + tabpage.close(); + modx.tree.restoreTree(); } else { w.main.location.href = modx.MODX_MANAGER_URL + a.url; - w.history.replaceState(null, d.title, modx.getActionFromUrl(a.url, 2) ? modx.MODX_MANAGER_URL : '#' + a.url) + w.history.replaceState(null, d.title, modx.getActionFromUrl(a.url, 2) ? modx.MODX_MANAGER_URL : '#' + a.url); } - }) - //w.main.alert = alert( w.main.document.body.querySelector('p').innerHTML); + }); } else { - if (modx.main.getQueryVariable('a', a.url) === '2' || d.querySelectorAll('#evo-tab-page-' + o.uid).length > 1) { - o.el.close(); + var old_uid = tabpage.id.replace('evo-tab-page-', ''); + if (modx.main.getQueryVariable('a', o.url) === '2') { + tabpage.close(); + } else if (old_uid !== o.uid && d.getElementById('evo-tab-' + o.uid)) { + tabpage.close(); + d.getElementById('evo-tab-' + o.uid).click(); } else { - if (w.main.document.body.querySelectorAll('h1')[0]) { - a.title = w.main.document.body.querySelectorAll('h1')[0].innerHTML; - } else if (w.main.document.title) { - a.title = w.main.document.title; - } - o.tab = d.getElementById(e.target.parentNode.id.replace('page-', '')); - o.tab.id = 'evo-tab-' + o.uid; - o.tab.classList.remove('changed'); - o.tab.dataset.target = 'evo-tab-page-' + o.uid; - o.tab.querySelector('.tab-title').innerHTML = a.title; - o.tab.querySelector('.tab-title').title = a.title.replace(/<\/?[^>]+>|^\s+|\s+$/g, ''); - e.target.parentNode.id = 'evo-tab-page-' + o.uid; - modx.tree.restoreTree(); - //modx.tree.setItemToChange(); - modx.main.onload(e) + o.title = w.main.document.body.querySelectorAll('h1')[0] && w.main.document.body.querySelectorAll('h1')[0].innerHTML || o.title; + o.show(tabpage.id.replace('evo-tab-page-', ''), o.title); + tab.classList.remove('changed'); + tabpage.id = 'evo-tab-page-' + o.uid; + modx.main.onload(e); + w.main.document.addEventListener('click', o.events.click, false); + w.main.document.addEventListener('keyup', o.events.keyup, false); } - w.main.document.addEventListener('click', o.events.click, false); - w.main.document.addEventListener('keyup', o.events.keyup, false); } - }; - o.el.appendChild(o.frame); - o.show(0) + }, false); + d.getElementById('main').appendChild(tabpage); } } else if (w.main) { - w.main.frameElement.src = a.url + w.main.frameElement.src = a.url; } else { - modx.openWindow(a.url) + modx.openWindow(a.url); } } }, @@ -1675,10 +1646,10 @@ if (~o.position.indexOf('center')) { if (o.event) { o.el.style.left = o.event.clientX + o.mt + 'px'; - o.el.style.bottom = o.wrap.offsetHeight - o.el.offsetHeight - o.event.clientY + o.mt + 'px' + o.el.style.bottom = o.wrap.offsetHeight - o.el.offsetHeight - o.event.clientY + o.mt + 'px'; } else { - o.el.style.left = /(%)/.test(o.width) ? ((100 - parseInt(o.width)) / 2) - (o.mt / (o.wrap.offsetWidth / 100)) + '%' : ((o.wrap.offsetWidth - o.el.offsetWidth) / 2) - o.mt + 'px'; - o.el.style.bottom = /(%)/.test(o.width) ? ((100 - parseInt(o.height)) / 2) - (o.mt / (o.wrap.offsetHeight / 100)) + '%' : ((w.innerHeight - o.el.offsetHeight - o.wrap.offsetTop) / 2) - o.mt + 'px'; + o.el.style.left = /(%)/.test(o.width) ? (100 - parseInt(o.width)) / 2 - o.mt / (o.wrap.offsetWidth / 100) + '%' : (o.wrap.offsetWidth - o.el.offsetWidth) / 2 - o.mt + 'px'; + o.el.style.bottom = /(%)/.test(o.width) ? (100 - parseInt(o.height)) / 2 - o.mt / (o.wrap.offsetHeight / 100) + '%' : (w.innerHeight - o.el.offsetHeight - o.wrap.offsetTop) / 2 - o.mt + 'px'; } } if (~o.position.indexOf('left')) { @@ -1697,22 +1668,22 @@ o.calc(); o.el.className += ' in'; if (o.showclose) { - o.el.querySelector('.close').onclick = o.close + o.el.querySelector('.close').onclick = o.close; } if (o.hide) { o.el.timer = setTimeout(function() { clearTimeout(o.el.timer); - o.close() - }, o.delay) + o.close(); + }, o.delay); } if (o.hover) { o.el.onmouseenter = function() { - clearTimeout(o.el.timer) + clearTimeout(o.el.timer); }; - o.el.onmouseleave = o.close + o.el.onmouseleave = o.close; } if (o.overlayclose && o.o) { - o.o.onclick = o.close + o.o.onclick = o.close; } if (o.clickclose) { o.el.onclick = o.close; @@ -1724,19 +1695,19 @@ var els = d.querySelectorAll('.' + o.className + '.in'); if (els) { var documentDirty = o.el.lastElementChild.firstElementChild.contentWindow.documentDirty; - if ((documentDirty && confirm(o.el.lastElementChild.firstElementChild.contentWindow.checkDirt(o.event))) || !documentDirty) { + if (documentDirty && confirm(o.el.lastElementChild.firstElementChild.contentWindow.checkDirt(o.event)) || !documentDirty) { o.el.classList.remove('in'); if (!o.animation) { o.el.classList.remove('show'); } o.calc(1); if (o.o && els.length === 1) { - o.o.parentNode.removeChild(o.o) + o.o.parentNode.removeChild(o.o); } o.el.timer = setTimeout(function() { clearTimeout(o.el.timer); if (o.el.parentNode) { - o.el.parentNode.removeChild(o.el) + o.el.parentNode.removeChild(o.el); } }, 200); } @@ -1748,12 +1719,12 @@ } o.calc(1); if (o.o && o.o.parentNode) { - o.o.parentNode.removeChild(o.o) + o.o.parentNode.removeChild(o.o); } o.el.timer = setTimeout(function() { clearTimeout(o.el.timer); if (o.el.parentNode) { - o.el.parentNode.removeChild(o.el) + o.el.parentNode.removeChild(o.el); } }, 200); } @@ -1770,13 +1741,13 @@ }); o.t = 0; if (o.position.indexOf('center') === 0) { - o.t = !f ? ((o.wrap.offsetHeight + o.el.offsetHeight) / 2) : ((o.wrap.offsetHeight - o.els[o.els.length - 1].offsetHeight) / 2) - o.mt; + o.t = !f ? (o.wrap.offsetHeight + o.el.offsetHeight) / 2 : (o.wrap.offsetHeight - o.els[o.els.length - 1].offsetHeight) / 2 - o.mt; } else { o.t = !f ? o.el.offsetHeight + o.mt : 0; } i = o.els.length; while (i--) { - d.getElementById(o.els[i].id).index = (i - o.els.length); + d.getElementById(o.els[i].id).index = i - o.els.length; if (~o.position.indexOf('top')) { d.getElementById(o.els[i].id).style.top = o.t + 'px'; } else { @@ -1784,7 +1755,7 @@ } o.t += o.els[i].offsetHeight + o.mt; if (o.closeall && o.el !== els[i]) { - o.els[i].close() + o.els[i].close(); } } } @@ -1792,13 +1763,13 @@ }; for (var k in a) { if (a.hasOwnProperty(k) && typeof o[k] !== 'undefined') { - o[k] = a[k] + o[k] = a[k]; } } o.timer = 0; o.position = o.position.split(' '); if (modx.popupLastIndex) { - o.zIndex = modx.popupLastIndex++ + o.zIndex = modx.popupLastIndex++; } else { modx.popupLastIndex = o.zIndex; } @@ -1811,7 +1782,7 @@ o.o.style.zIndex = o.zIndex - 1; o.wrap.appendChild(o.o); } else { - o.o = o.wrap.querySelector('.evo-popup-overlay') + o.o = o.wrap.querySelector('.evo-popup-overlay'); } o.el = o.wrap.ownerDocument.getElementById('evo-popup-' + o.uid); if (o.el) { @@ -1823,7 +1794,7 @@ o.el.dataset.position = o.position.join(':'); o.mt = parseFloat(getComputedStyle(o.el).marginTop); o.el.close = o.close; - o.show() + o.show(); } else { o.el = d.createElement('div'); o.el.id = 'evo-popup-' + o.uid; @@ -1873,10 +1844,10 @@ content: e.target.contentWindow.document.body.querySelector('p').innerHTML }); e.target.contentWindow.document.body.innerHTML = ''; - e.target.contentWindow.alert = function() { }; + e.target.contentWindow.alert = function() {}; } else { if (modx.main.getQueryVariable('a', a.url.split('?')[1]) === '2' || o.wrap.querySelectorAll('#evo-popup-' + o.uid).length > 1) { - o.el.close() + o.el.close(); } else { if (e.target.contentDocument.querySelectorAll('h1')[0]) { a.title = e.target.contentDocument.querySelectorAll('h1')[0].innerHTML; @@ -1889,14 +1860,14 @@ } }; o.el.lastChild.appendChild(o.frame); - o.show() + o.show(); } else { var xhr = new XMLHttpRequest(); xhr.open(o.method, o.url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;'); xhr.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest'); if (o.dataType) { - xhr.responseType = o.dataType + xhr.responseType = o.dataType; } xhr.onload = function() { if (this.readyState === 4) { @@ -1905,22 +1876,22 @@ if (o.selector) { var r = this.response.documentElement.querySelector(o.selector); if (r) { - o.el.lastChild.innerHTML += r.innerHTML + o.el.lastChild.innerHTML += r.innerHTML; } } else { - o.el.lastChild.innerHTML += this.response.body.innerHTML + o.el.lastChild.innerHTML += this.response.body.innerHTML; } } else { o.el.lastChild.innerHTML += this.response; } - o.show() + o.show(); } }; - xhr.send(o.data) + xhr.send(o.data); } } else { o.el.lastChild.innerHTML += o.content; - o.show() + o.show(); } } } @@ -1932,18 +1903,18 @@ e = d.body; if (typeof(w.innerWidth) === 'number') { a = w.innerWidth; - b = w.innerHeight + b = w.innerHeight; } else if (c && (c.clientWidth || c.clientHeight)) { a = c.clientWidth; - b = c.clientHeight + b = c.clientHeight; } else if (e && (e.clientWidth || e.clientHeight)) { a = e.clientWidth; - b = e.clientHeight + b = e.clientHeight; } return { 'width': a, 'height': b - } + }; }, hideDropDown: function(e) { e = e || w.event || w.main.event; @@ -1952,9 +1923,9 @@ } if (modx.tree.ctx !== null) { d.getElementById(modx.frameset).removeChild(modx.tree.ctx); - modx.tree.ctx = null + modx.tree.ctx = null; } - if (!(/dropdown\-item/.test(e.target.className)) + if (!/dropdown\-item/.test(e.target.className) //&& !(e && ("click" === e.type && /form|label|input|textarea|select/i.test(e.target.tagName))) ) { var els = d.querySelectorAll('.dropdown.show'), @@ -1968,19 +1939,19 @@ } for (i = 0; i < els.length; i++) { if (n !== els[i]) { - els[i].classList.remove('show') + els[i].classList.remove('show'); } } els = w.main && w.main.document.querySelectorAll('.dropdown.show') || []; for (i = 0; i < els.length; i++) { if (n !== els[i]) { - els[i].classList.remove('show') + els[i].classList.remove('show'); } } } }, XHR: function() { - return ('XMLHttpRequest' in w) ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHTTP'); + return 'XMLHttpRequest' in w ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); }, get: function(a, b, c) { var x = this.XHR(); @@ -1989,10 +1960,10 @@ if (c) x.responseType = c; x.onload = function() { if (this.status === 200 && typeof b === 'function') { - return b(this.response) + return b(this.response); } }; - x.send() + x.send(); }, post: function(a, b, c, t) { var x = this.XHR(), @@ -2007,7 +1978,7 @@ for (k in b) { if (b.hasOwnProperty(k)) e[i++] = k + '=' + b[k]; } - f = e.join('&') + f = e.join('&'); } else if (typeof b === 'string') { f = b; } @@ -2017,16 +1988,16 @@ if (t) x.responseType = t; x.onload = function() { if (this.readyState === 4 && c !== u) { - return c(this.response) + return c(this.response); } }; - x.send(f) + x.send(f); }, pxToRem: function(a) { - return a / parseInt(w.getComputedStyle(d.documentElement).fontSize) + return a / parseInt(w.getComputedStyle(d.documentElement).fontSize); }, remToPx: function(a) { - return a * parseInt(w.getComputedStyle(d.documentElement).fontSize) + return a * parseInt(w.getComputedStyle(d.documentElement).fontSize); }, toHash: function(a) { a = String(JSON.stringify(a)); @@ -2034,10 +2005,10 @@ if (a.length === 0) return b; for (i = 0; i < a.length; i++) { c = a.charCodeAt(i); - b = ((b << 5) - b) + c; - b = b & b + b = (b << 5) - b + c; + b = b & b; } - return Math.abs(b).toString() + return Math.abs(b).toString(); }, urlToUid: function(a) { var b = '', @@ -2048,26 +2019,26 @@ c = modx.main.getQueryVariable('a', a); if (c) { if (modx.typesactions[c]) { - b += '&type=' + modx.typesactions[c] + b += '&type=' + modx.typesactions[c]; } else { - b += '&a=' + c + b += '&a=' + c; } } if (modx.main.getQueryVariable('id', a)) { - b += '&id=' + modx.main.getQueryVariable('id', a) + b += '&id=' + modx.main.getQueryVariable('id', a); } if (modx.main.getQueryVariable('type', a)) { - b += '&type=' + modx.main.getQueryVariable('type', a) + b += '&type=' + modx.main.getQueryVariable('type', a); } b = modx.toHash(b); } - return b + return b; }, getActionFromUrl: function(a, b) { if (typeof b !== 'undefined') { - return parseInt(modx.main.getQueryVariable('a', a)) === parseInt(b) + return parseInt(modx.main.getQueryVariable('a', a)) === parseInt(b); } else { - return parseInt(modx.main.getQueryVariable('a', a)) + return parseInt(modx.main.getQueryVariable('a', a)); } }, getLockedElements: function(a, b, c) { @@ -2076,62 +2047,61 @@ a: 'getLockedElements', id: modx.main.getQueryVariable('id', w.main.location.search), type: modx.typesactions[modx.main.getQueryVariable('a', w.main.location.search)] - }, c) + }, c); } } }); w.mainMenu = {}; w.mainMenu.stopWork = function() { - modx.main.stopWork() + modx.main.stopWork(); }; w.mainMenu.work = function() { - modx.main.work() + modx.main.work(); }; w.mainMenu.reloadtree = function() { //console.log('mainMenu.reloadtree()'); if (modx.plugins.ElementsInTree) { - setTimeout('reloadElementsInTree()', 40) + setTimeout('reloadElementsInTree()', 40); } if (modx.config.global_tabs) { - setTimeout('modx.tree.restoreTree()', 50) + setTimeout('modx.tree.restoreTree()', 50); } }; w.mainMenu.startrefresh = function(a) { - ////console.log('mainMenu.startrefresh(' + a + ')'); + console.log('mainMenu.startrefresh(' + a + ')');//// if (a === 1) { - setTimeout('modx.tree.restoreTree()', 50) + //setTimeout('modx.tree.restoreTree()', 50) } if (a === 2) { - modx.tree.restoreTree() + //modx.tree.restoreTree(); } if (a === 9) { - modx.tree.restoreTree() + modx.tree.restoreTree(); } if (a === 10) { - w.location.href = modx.MODX_MANAGER_URL + w.location.href = modx.MODX_MANAGER_URL; } }; w.mainMenu.startmsgcount = function(a, b, c) { - modx.updateMail(c) + modx.updateMail(c); }; w.mainMenu.hideTreeFrame = function() { - modx.resizer.setWidth(0) + modx.resizer.setWidth(0); }; w.mainMenu.defaultTreeFrame = function() { - modx.resizer.setDefaultWidth() + modx.resizer.setDefaultWidth(); }; w.tree = {}; w.tree.ca = 'open'; w.tree.document = document; - w.tree.saveFolderState = function() { - }; + w.tree.saveFolderState = function() {}; w.tree.updateTree = function() { //console.log('tree.updateTree()'); - modx.tree.updateTree() + modx.tree.updateTree(); }; w.tree.restoreTree = function() { //console.log('tree.restoreTree()'); - modx.tree.restoreTree() + modx.tree.restoreTree(); }; w.tree.resizeTree = function() { //console.log('tree.resizeTree() off') @@ -2143,10 +2113,9 @@ } }; d.addEventListener('DOMContentLoaded', function() { - modx.init() - }) -}) -(typeof jQuery !== 'undefined' ? jQuery : '', window, document, undefined); + modx.init(); + }); +})(typeof jQuery !== 'undefined' ? jQuery : '', window, document, undefined); (function() { if (!Element.prototype.closest) { @@ -2156,17 +2125,17 @@ ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'].some(function(fn) { if (typeof document.body[fn] === 'function') { c = fn; - return true + return true; } - return false + return false; }); if (b && c && b[c](a)) return b; while (b) { d = b.parentElement; if (d && c && d[c](a)) return d; - b = d + b = d; } return null; - } + }; } })(); From a06ffd0053e40b0b0799c3ccc3c45fe39a9f5568 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 10 Sep 2017 17:03:45 +0300 Subject: [PATCH 097/577] update modx.js added reload home page --- manager/media/style/default/js/modx.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 3dd155fcd6..6bc6cefe17 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -1543,7 +1543,7 @@ tab = d.getElementById('evo-tab-home'); tab.onclick = o.select; if (tabpage) { - if (~o.closeactions.indexOf(o.action)) { + if (~o.closeactions.indexOf(o.action) || o.uid === 'home') { tabpage.firstElementChild.src = o.url; } o.show(); From cce66fce11d201d900ee17126662954b0081ddd6 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 10 Sep 2017 22:30:59 +0300 Subject: [PATCH 098/577] update modx.js setTimeout tree.restoreTree --- manager/media/style/default/js/modx.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 6bc6cefe17..8eb0550371 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -289,11 +289,11 @@ modx.main.tabRow.init(); modx.main.stopWork(); modx.main.scrollWork(); - modx.tree.restoreTree(); w.main.document.addEventListener('click', modx.hideDropDown, false); w.main.document.addEventListener('click', modx.tabsInit, false); w.main.document.addEventListener('contextmenu', modx.main.oncontextmenu, false); w.history.replaceState(null, d.title, modx.main.getQueryVariable('a', w.main.location.search) === '2' ? modx.MODX_MANAGER_URL : '#' + w.main.location.search); + setTimeout('modx.tree.restoreTree()', 100); }, oncontextmenu: function(e) { if (e.ctrlKey) return; From 101371db3d4ace30b4d0990cfd7a900e3503756c Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 11 Sep 2017 10:10:08 +0900 Subject: [PATCH 099/577] Fix - hasPermission issue https://github.com/evolution-cms/evolution/commit/4b6c3946746af6aa42b4cefc1b9d60420c71e264#commitcomment-24180068 --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 8f00f0a074..758377bfa2 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -2475,7 +2475,7 @@ function hasPermission($pm) { $pms= $_SESSION['mgrPermissions']; if ($pms) $state= ($pms[$pm] == 1); - return $state; + return (int) $state; } /** From a2023bcb5f3c2cc91a2a570df43c393fd5d05f0d Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 12 Sep 2017 08:05:56 +0900 Subject: [PATCH 100/577] Code cleanup --- assets/snippets/if/snippet.if.php | 175 ++++++++++++++---------------- 1 file changed, 81 insertions(+), 94 deletions(-) diff --git a/assets/snippets/if/snippet.if.php b/assets/snippets/if/snippet.if.php index 1942789286..d1def4fd64 100644 --- a/assets/snippets/if/snippet.if.php +++ b/assets/snippets/if/snippet.if.php @@ -18,14 +18,15 @@ if(!defined('MODX_BASE_PATH')){die('What are you doing? Get out of here!');} $s = isset($separator) ? $separator: ':'; -$math = isset($math) ? $math : 'off'; +if(!isset($math)) $math = 'off'; $lp = 0; $opers=explode($s,$is); -$subject=$opers[0]; -$eq=true; -$and=false; -$or = false; -$else = isset($else) ? $else : ''; +$subject = $opers[0]; +$eq = true; +$and = false; +$or = false; +if(!isset($else)) $else = ''; + // Prepare custom conditions $customConditions = array(); if(!empty($custom)) { @@ -33,14 +34,15 @@ $cc = explode(',', $custom); foreach($cc as $cCond) { $ccFile = $snippetPath.'/custom/if.'.$cCond.'.php'; - if(!function_exists($cCond) && file_exists($ccFile)) { + if(!function_exists($cCond) && is_file($ccFile)) { include($ccFile); $customConditions[$cCond] = true; } } } -for ($i=1;$isafeEval('return ' . $subject.';'); - } - $operator = strtolower($operator); - - switch ($operator) { - case '%': - $output = ($subject %$operand==0) ? true: false;$i++; - break; - case '!=': - case 'not':$output = ($subject != $operand) ? true: false;$i++; - break; - case '<': - case 'lt':$output = ($subject < $operand) ? true : false;$i++; - break; - case '>': - case 'gt':$output = ($subject > $operand) ? true : false;$i++; - break; - case '<=': - case 'lte':$output = ($subject <= $operand) ? true : false;$i++; - break; - case '>=': - case 'gte':$output = ($subject >= $operand) ? true : false;$i++; - break; - case 'isempty': - case 'empty':$output = empty($subject) ? true : false; - break; - case '!empty': - case 'notempty': - case 'not_empty': - case 'isnotempty':$output = empty($subject) || $subject == '' ? false : true; - break; - case 'isnull': - case 'null':$output = $subject == null || strtolower($subject) == 'null' ? true : false; - break; - case 'inarray': - case 'in_array': - case 'in': - $operand = explode(',',$operand); - $output = in_array($subject,$operand) ? true : false; - $i++; - break; - case 'not_in': - case '!in': - case '!inarray': - $operand = explode(',',$operand); - $output = in_array($subject,$operand) ? false : true; - $i++; - break; - case 'contains': - $output = (strpos($subject,$operand) !== false) ? true : false; - $i++; - break; - case '!contains': - case 'not_contains': - $output = (strpos($subject,$operand) !== false) ? false : true; - $i++; - break; - case 'custom': - break; - case '==': - case '=': - case 'eq': - case 'is': - default: - $output = ((string)$subject == (string)$operand) ? true : false; - $i++; - break; - } - - $eq=$output?$eq:false; - + if (!isset($subject)) continue; + if (empty($operator)) continue; + + if(isset($customConditions[$operator])) { + $output = call_user_func($operator, $subject, $operand); + if(is_array($output)) { + if(isset($output[1]) && $output[1]) $i++; // $operand was used + $output = $output[0]; } + $output = (bool)$output; + $operator = 'custom'; + } + + if ($math=='on' && !empty($subject)) { + $subject = preg_replace('@([a-zA-Z\n\r\t\s])@','',$subject); + $subject = $modx->safeEval('return ' . $subject.';'); + } + + switch (strtolower($operator)) { + case '%' :$output = ($subject %$operand==0) ? true : false; break; + case '!=': + case 'not':$output = ($subject != $operand) ? true : false; break; + case '<': + case 'lt' :$output = ($subject < $operand) ? true : false; break; + case '>': + case 'gt' :$output = ($subject > $operand) ? true : false; break; + case '<=': + case 'lte':$output = ($subject <= $operand) ? true : false; break; + case '>=': + case 'gte':$output = ($subject >= $operand) ? true : false; break; + case 'isempty': + case 'empty':$output = empty($subject) ? true : false; break; + + case '!empty': + case 'notempty': + case 'not_empty': + case 'isnotempty':$output = empty($subject) || $subject == '' ? false : true; + break; + case 'isnull': + case 'null':$output = $subject == null || strtolower($subject) == 'null' ? true : false; + break; + case 'inarray': + case 'in_array': + case 'in': + $operand = explode(',',$operand); + $output = in_array($subject,$operand) ? true : false; + break; + case 'not_in': + case '!in': + case '!inarray': + $operand = explode(',',$operand); + $output = in_array($subject,$operand) ? false : true; + break; + case 'contains': + $output = (strpos($subject,$operand) !== false) ? true : false; + break; + case '!contains': + case 'not_contains': + $output = (strpos($subject,$operand) !== false) ? false : true; + break; + case 'custom': + break; + case '==': + case '=': + case 'eq': + case 'is': + default: + $output = ((string)$subject == (string)$operand) ? true : false; + break; } + $eq=$output?$eq:false; + $_ = explode(',','isempty,empty,!empty,notempty,not_empty,isnotempty,isnull,null,custom,==,=,eq,is'); + if(!in_array(strtolower($operator), $_)) $i++; } if ($lp==1){ if ($left_part) { From 1a2b956cfe34b3428ba50bf327c3c21029395c55 Mon Sep 17 00:00:00 2001 From: Deesen Date: Tue, 12 Sep 2017 09:32:14 +0200 Subject: [PATCH 101/577] [F] If-snippet: Multiple usage of same custom condition --- assets/snippets/if/snippet.if.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/assets/snippets/if/snippet.if.php b/assets/snippets/if/snippet.if.php index d1def4fd64..90422c0a70 100644 --- a/assets/snippets/if/snippet.if.php +++ b/assets/snippets/if/snippet.if.php @@ -33,10 +33,14 @@ $snippetPath = realpath(dirname(__FILE__)); $cc = explode(',', $custom); foreach($cc as $cCond) { - $ccFile = $snippetPath.'/custom/if.'.$cCond.'.php'; - if(!function_exists($cCond) && is_file($ccFile)) { - include($ccFile); + if(function_exists($cCond)) { $customConditions[$cCond] = true; + } else { + $ccFile = $snippetPath.'/custom/if.'.$cCond.'.php'; + if(is_file($ccFile)) { + include($ccFile); + $customConditions[$cCond] = true; + } } } } From 3827f51b055a26a21c1fdbc1d56f42b2c2c3d66d Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 12 Sep 2017 21:15:01 +0900 Subject: [PATCH 102/577] Revert - snippet.if.php --- assets/snippets/if/snippet.if.php | 173 ++++++++++++++++-------------- 1 file changed, 93 insertions(+), 80 deletions(-) diff --git a/assets/snippets/if/snippet.if.php b/assets/snippets/if/snippet.if.php index 90422c0a70..4db0f7804f 100644 --- a/assets/snippets/if/snippet.if.php +++ b/assets/snippets/if/snippet.if.php @@ -18,15 +18,14 @@ if(!defined('MODX_BASE_PATH')){die('What are you doing? Get out of here!');} $s = isset($separator) ? $separator: ':'; -if(!isset($math)) $math = 'off'; +$math = isset($math) ? $math : 'off'; $lp = 0; $opers=explode($s,$is); -$subject = $opers[0]; -$eq = true; -$and = false; -$or = false; -if(!isset($else)) $else = ''; - +$subject=$opers[0]; +$eq=true; +$and=false; +$or = false; +$else = isset($else) ? $else : ''; // Prepare custom conditions $customConditions = array(); if(!empty($custom)) { @@ -45,8 +44,7 @@ } } -$total = count($opers); -for ($i=1;$i<$total;$i++){ +for ($i=1;$isafeEval('return ' . $subject.';'); - } - - switch (strtolower($operator)) { - case '%' :$output = ($subject %$operand==0) ? true : false; break; - case '!=': - case 'not':$output = ($subject != $operand) ? true : false; break; - case '<': - case 'lt' :$output = ($subject < $operand) ? true : false; break; - case '>': - case 'gt' :$output = ($subject > $operand) ? true : false; break; - case '<=': - case 'lte':$output = ($subject <= $operand) ? true : false; break; - case '>=': - case 'gte':$output = ($subject >= $operand) ? true : false; break; - case 'isempty': - case 'empty':$output = empty($subject) ? true : false; break; + if (isset($subject)) { + if (!empty($operator)) { + + if(isset($customConditions[$operator])) { + $output = call_user_func($operator, $subject, $operand); + if(is_array($output)) { + if(isset($output[1]) && $output[1]) $i++; // $operand was used + $output = $output[0]; + } + $output = (bool)$output; + $operator = 'custom'; + } - case '!empty': - case 'notempty': - case 'not_empty': - case 'isnotempty':$output = empty($subject) || $subject == '' ? false : true; - break; - case 'isnull': - case 'null':$output = $subject == null || strtolower($subject) == 'null' ? true : false; - break; - case 'inarray': - case 'in_array': - case 'in': - $operand = explode(',',$operand); - $output = in_array($subject,$operand) ? true : false; - break; - case 'not_in': - case '!in': - case '!inarray': - $operand = explode(',',$operand); - $output = in_array($subject,$operand) ? false : true; - break; - case 'contains': - $output = (strpos($subject,$operand) !== false) ? true : false; - break; - case '!contains': - case 'not_contains': - $output = (strpos($subject,$operand) !== false) ? false : true; - break; - case 'custom': - break; - case '==': - case '=': - case 'eq': - case 'is': - default: - $output = ((string)$subject == (string)$operand) ? true : false; - break; + if ($math=='on' && !empty($subject)) { + $subject = preg_replace('@([a-zA-Z\n\r\t\s])@','',$subject); + $subject = $modx->safeEval('return ' . $subject.';'); + } + $operator = strtolower($operator); + + switch ($operator) { + case '%': + $output = ($subject %$operand==0) ? true: false;$i++; + break; + case '!=': + case 'not':$output = ($subject != $operand) ? true: false;$i++; + break; + case '<': + case 'lt':$output = ($subject < $operand) ? true : false;$i++; + break; + case '>': + case 'gt':$output = ($subject > $operand) ? true : false;$i++; + break; + case '<=': + case 'lte':$output = ($subject <= $operand) ? true : false;$i++; + break; + case '>=': + case 'gte':$output = ($subject >= $operand) ? true : false;$i++; + break; + case 'isempty': + case 'empty':$output = empty($subject) ? true : false; + break; + case '!empty': + case 'notempty': + case 'not_empty': + case 'isnotempty':$output = empty($subject) || $subject == '' ? false : true; + break; + case 'isnull': + case 'null':$output = $subject == null || strtolower($subject) == 'null' ? true : false; + break; + case 'inarray': + case 'in_array': + case 'in': + $operand = explode(',',$operand); + $output = in_array($subject,$operand) ? true : false; + $i++; + break; + case 'not_in': + case '!in': + case '!inarray': + $operand = explode(',',$operand); + $output = in_array($subject,$operand) ? false : true; + $i++; + break; + case 'contains': + $output = (strpos($subject,$operand) !== false) ? true : false; + $i++; + break; + case '!contains': + case 'not_contains': + $output = (strpos($subject,$operand) !== false) ? false : true; + $i++; + break; + case 'custom': + break; + case '==': + case '=': + case 'eq': + case 'is': + default: + $output = ((string)$subject == (string)$operand) ? true : false; + $i++; + break; + } + + $eq=$output?$eq:false; + + } } - $eq=$output?$eq:false; - $_ = explode(',','isempty,empty,!empty,notempty,not_empty,isnotempty,isnull,null,custom,==,=,eq,is'); - if(!in_array(strtolower($operator), $_)) $i++; } if ($lp==1){ if ($left_part) { From fa2f1ce707313d8c37d28c69e08732ca355d4690 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 12 Sep 2017 21:17:03 +0900 Subject: [PATCH 103/577] Code cleanup - snippet.if.php --- assets/snippets/if/snippet.if.php | 165 +++++++++++++++--------------- 1 file changed, 81 insertions(+), 84 deletions(-) diff --git a/assets/snippets/if/snippet.if.php b/assets/snippets/if/snippet.if.php index 4db0f7804f..65e2b4de68 100644 --- a/assets/snippets/if/snippet.if.php +++ b/assets/snippets/if/snippet.if.php @@ -60,94 +60,91 @@ $operator = $opers[$i]; $operand = isset($opers[$i+1]) ? $opers[$i+1] : ''; - if (isset($subject)) { - if (!empty($operator)) { - - if(isset($customConditions[$operator])) { - $output = call_user_func($operator, $subject, $operand); - if(is_array($output)) { - if(isset($output[1]) && $output[1]) $i++; // $operand was used - $output = $output[0]; - } - $output = (bool)$output; - $operator = 'custom'; - } - - if ($math=='on' && !empty($subject)) { - $subject = preg_replace('@([a-zA-Z\n\r\t\s])@','',$subject); - $subject = $modx->safeEval('return ' . $subject.';'); - } - $operator = strtolower($operator); + if (!isset($subject)) continue; + if (empty($operator)) continue; - switch ($operator) { - case '%': - $output = ($subject %$operand==0) ? true: false;$i++; - break; - case '!=': - case 'not':$output = ($subject != $operand) ? true: false;$i++; - break; - case '<': - case 'lt':$output = ($subject < $operand) ? true : false;$i++; - break; - case '>': - case 'gt':$output = ($subject > $operand) ? true : false;$i++; - break; - case '<=': - case 'lte':$output = ($subject <= $operand) ? true : false;$i++; - break; - case '>=': - case 'gte':$output = ($subject >= $operand) ? true : false;$i++; - break; - case 'isempty': - case 'empty':$output = empty($subject) ? true : false; - break; - case '!empty': - case 'notempty': - case 'not_empty': - case 'isnotempty':$output = empty($subject) || $subject == '' ? false : true; - break; - case 'isnull': - case 'null':$output = $subject == null || strtolower($subject) == 'null' ? true : false; - break; - case 'inarray': - case 'in_array': - case 'in': - $operand = explode(',',$operand); - $output = in_array($subject,$operand) ? true : false; - $i++; - break; - case 'not_in': - case '!in': - case '!inarray': - $operand = explode(',',$operand); - $output = in_array($subject,$operand) ? false : true; - $i++; - break; - case 'contains': - $output = (strpos($subject,$operand) !== false) ? true : false; - $i++; - break; - case '!contains': - case 'not_contains': - $output = (strpos($subject,$operand) !== false) ? false : true; - $i++; - break; - case 'custom': - break; - case '==': - case '=': - case 'eq': - case 'is': - default: - $output = ((string)$subject == (string)$operand) ? true : false; - $i++; - break; - } + if(isset($customConditions[$operator])) { + $output = call_user_func($operator, $subject, $operand); + if(is_array($output)) { + if(isset($output[1]) && $output[1]) $i++; // $operand was used + $output = $output[0]; + } + $output = (bool)$output; + $operator = 'custom'; + } - $eq=$output?$eq:false; + if ($math=='on' && !empty($subject)) { + $subject = preg_replace('@([a-zA-Z\n\r\t\s])@','',$subject); + $subject = $modx->safeEval('return ' . $subject.';'); + } + $operator = strtolower($operator); - } + switch ($operator) { + case '%': + $output = ($subject %$operand==0) ? true: false;$i++; + break; + case '!=': + case 'not':$output = ($subject != $operand) ? true: false;$i++; + break; + case '<': + case 'lt':$output = ($subject < $operand) ? true : false;$i++; + break; + case '>': + case 'gt':$output = ($subject > $operand) ? true : false;$i++; + break; + case '<=': + case 'lte':$output = ($subject <= $operand) ? true : false;$i++; + break; + case '>=': + case 'gte':$output = ($subject >= $operand) ? true : false;$i++; + break; + case 'isempty': + case 'empty':$output = empty($subject) ? true : false; + break; + case '!empty': + case 'notempty': + case 'not_empty': + case 'isnotempty':$output = empty($subject) || $subject == '' ? false : true; + break; + case 'isnull': + case 'null':$output = $subject == null || strtolower($subject) == 'null' ? true : false; + break; + case 'inarray': + case 'in_array': + case 'in': + $operand = explode(',',$operand); + $output = in_array($subject,$operand) ? true : false; + $i++; + break; + case 'not_in': + case '!in': + case '!inarray': + $operand = explode(',',$operand); + $output = in_array($subject,$operand) ? false : true; + $i++; + break; + case 'contains': + $output = (strpos($subject,$operand) !== false) ? true : false; + $i++; + break; + case '!contains': + case 'not_contains': + $output = (strpos($subject,$operand) !== false) ? false : true; + $i++; + break; + case 'custom': + break; + case '==': + case '=': + case 'eq': + case 'is': + default: + $output = ((string)$subject == (string)$operand) ? true : false; + $i++; + break; } + + $eq=$output?$eq:false; } if ($lp==1){ if ($left_part) { From 6231a73f93e788d67906f7b3df5f9ae12362284d Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 12 Sep 2017 21:47:07 +0900 Subject: [PATCH 104/577] #187 Fix - Merge placeholders in Ditto --- .../ditto/classes/ditto.class.inc.php | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php index 346b81e056..2a07088a3f 100644 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ b/assets/snippets/ditto/classes/ditto.class.inc.php @@ -321,15 +321,7 @@ function render($doc, $template, $removeChunk,$dateSource,$dateFormat,$customPla function parseModifiers($tpl,$ph,$contentVars){ global $modx; if ($modx->config['enable_filter']) { - $content = $tpl; - $i = 0; - while($i<10) { - $bt = $content; - if(strpos($content,'[+')!==false) $content = $modx->parseText($content,$ph); - else $content = $modx->parseDocumentSource($content); - if($bt===$content) break; - $i++; - } + $content = $this->parseDocumentSource($tpl,$ph); } else { foreach($ph as $key=>$content) { @@ -342,6 +334,38 @@ function parseModifiers($tpl,$ph,$contentVars){ return $content; } + function parseDocumentSource($content='',$ph) + { + global $modx; + + if(strpos($content,'[')===false && strpos($content,'{')===false) return $content; + + $loopLimit = @ $modx->maxParserPasses ?: 10; + $bt=''; + $i=0; + while($bt!==$content) + { + $bt = $content; + if(strpos($content,'[+')!==false) $content = $modx->parseText($content,$ph); + if(strpos($content,'[+')!==false) continue; + + if(strpos($content,'[*')!==false && $modx->documentIdentifier) + $content = $modx->mergeDocumentContent($content); + if(strpos($content,'[+')!==false && $content!==$bt) continue; + if(strpos($content,'[(')!==false) $content = $modx->mergeSettingsContent($content); + if(strpos($content,'[+')!==false && $content!==$bt) continue; + if(strpos($content,'{{')!==false) $content = $modx->mergeChunkContent($content); + if(strpos($content,'[+')!==false && $content!==$bt) continue; + if(strpos($content,'[!')!==false) $content = str_replace(array('[!','!]'),array('[[',']]'),$content); + if(strpos($content,'[[')!==false) $content = $modx->evalSnippets($content); + + if($content===$bt) break; + if($loopLimit < $i) break; + $i++; + } + return $content; + } + // --------------------------------------------------- // Function: parseFields // Find the fields that are contained in the custom placeholders or those that are needed in other functions From 13138769113ab44e30dba86587b158ec8dfb763d Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 15 Sep 2017 02:00:44 +0300 Subject: [PATCH 105/577] update nodes.php replace _GET to _REQUEST --- manager/frames/nodes.php | 68 +++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 40 deletions(-) diff --git a/manager/frames/nodes.php b/manager/frames/nodes.php index 45ad492527..bc001d0ecd 100644 --- a/manager/frames/nodes.php +++ b/manager/frames/nodes.php @@ -4,52 +4,52 @@ * Build and return document tree view nodes * */ -if(IN_MANAGER_MODE != 'true') { - die('INCLUDE_ORDERING_ERROR

          Please use the MODX Content Manager instead of accessing this file directly.'); +if (IN_MANAGER_MODE != 'true') { + die('INCLUDE_ORDERING_ERROR

          Please use the MODX Content Manager instead of accessing this file directly.'); } include_once('nodes.functions.inc.php'); // save folderstate -if(isset($_GET['opened'])) { - $_SESSION['openedArray'] = $_GET['opened']; +if (isset($_REQUEST['opened'])) { + $_SESSION['openedArray'] = $_REQUEST['opened']; } -if(isset($_GET['savestateonly'])) { - exit('send some data'); +if (isset($_REQUEST['savestateonly'])) { + exit('send some data'); } //?? -$indent = intval($_GET['indent']); -$parent = intval($_GET['parent']); -$expandAll = intval($_GET['expandAll']); +$indent = intval($_REQUEST['indent']); +$parent = intval($_REQUEST['parent']); +$expandAll = intval($_REQUEST['expandAll']); $output = ''; $theme = $manager_theme . "/"; -$hereid = isset($_GET['id']) ? $_GET['id'] : ''; +$hereid = isset($_REQUEST['id']) ? (int)$_REQUEST['id'] : ''; -if(isset($_GET['showonlyfolders'])) { - $_SESSION['tree_show_only_folders'] = $_GET['showonlyfolders']; +if (isset($_REQUEST['showonlyfolders'])) { + $_SESSION['tree_show_only_folders'] = $_REQUEST['showonlyfolders']; } // setup sorting $sortParams = array( - 'tree_sortby', - 'tree_sortdir', - 'tree_nodename' + 'tree_sortby', + 'tree_sortdir', + 'tree_nodename' ); -foreach($sortParams as $param) { - if(isset($_REQUEST[$param])) { - $_SESSION[$param] = $_REQUEST[$param]; - $modx->manager->saveLastUserSetting($param, $_REQUEST[$param]); - } +foreach ($sortParams as $param) { + if (isset($_REQUEST[$param])) { + $_SESSION[$param] = $_REQUEST[$param]; + $modx->manager->saveLastUserSetting($param, $_REQUEST[$param]); + } } // icons by content type $icons = getIconInfo($_style); $iconsPrivate = getPrivateIconInfo($_style); -if(isset($_SESSION['openedArray'])) { - $opened = array_filter(array_map('intval', explode('|', $_SESSION['openedArray']))); +if (isset($_SESSION['openedArray'])) { + $opened = array_filter(array_map('intval', explode('|', $_SESSION['openedArray']))); } else { - $opened = array(); + $opened = array(); } $opened2 = array(); @@ -58,22 +58,10 @@ //makeHTML($indent, $parent, $expandAll, $theme, $hereid); echo makeHTML($indent, $parent, $expandAll, $theme, $hereid); -// store vars in Javascript -//$scr = ''; -//if($expandAll == 1) { -// $scr .= ' '; -//} -//echo $scr; - // check for deleted documents on reload -if($expandAll == 2) { - $rs = $modx->db->select('COUNT(*)', $modx->getFullTableName('site_content'), 'deleted=1'); - $count = $modx->db->getValue($rs); - if($count > 0) { - echo ''; - } // add a special element to let system now that the bin is full +if ($expandAll == 2) { + $rs = $modx->db->select('id', $modx->getFullTableName('site_content'), 'deleted=1 LIMIT 1'); + if ($modx->db->getRecordCount($rs)) { + echo ''; // add a special element to let system now that the bin is full + } } From 40c3eca67a7ce3f705054b77f05e121310d1c848 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 15 Sep 2017 02:05:53 +0300 Subject: [PATCH 106/577] update ajax.php include english.inc.php --- manager/media/style/default/ajax.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/manager/media/style/default/ajax.php b/manager/media/style/default/ajax.php index 9a0290d9aa..236556e70e 100644 --- a/manager/media/style/default/ajax.php +++ b/manager/media/style/default/ajax.php @@ -3,7 +3,7 @@ define('MODX_API_MODE', true); define('IN_MANAGER_MODE', true); -include_once("../../../../index.php"); +include_once("./../../../../index.php"); $modx->db->connect(); @@ -15,8 +15,12 @@ $modx->sendErrorPage(); } -include_once MODX_BASE_PATH . MGR_DIR . '/includes/lang/' . $modx->config['manager_language'] . '.inc.php'; -include_once MODX_BASE_PATH . MGR_DIR . '/media/style/' . $modx->config['manager_theme'] . '/style.php'; +$_lang = array(); +include_once MODX_MANAGER_PATH . '/includes/lang/english.inc.php'; +if ($modx->config['manager_language'] != 'english') { + include_once MODX_MANAGER_PATH . '/includes/lang/' . $modx->config['manager_language'] . '.inc.php'; +} +include_once MODX_MANAGER_PATH . '/media/style/' . $modx->config['manager_theme'] . '/style.php'; $action = isset($_REQUEST['a']) ? $_REQUEST['a'] : ''; $frame = isset($_REQUEST['f']) ? $_REQUEST['f'] : ''; @@ -33,7 +37,7 @@ switch ($frame) { case 'nodes': - include_once MODX_BASE_PATH . MGR_DIR . '/media/style/' . $modx->config['manager_theme'] . '/frames/nodes.php'; + include_once MODX_MANAGER_PATH . '/frames/nodes.php'; break; } From 7d52f6d9da819eb340b064c55faf4c4a6050911d Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 15 Sep 2017 02:10:25 +0300 Subject: [PATCH 107/577] update modx.js replace ajax get to post - ajax.php refactor modx.tabs --- manager/media/style/default/css/tabpane.css | 1 + manager/media/style/default/js/modx.js | 22 ++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/manager/media/style/default/css/tabpane.css b/manager/media/style/default/css/tabpane.css index 94188e963c..bea2d93c19 100644 --- a/manager/media/style/default/css/tabpane.css +++ b/manager/media/style/default/css/tabpane.css @@ -92,6 +92,7 @@ .evo-tab-row .tab-row .tab small { margin-left: .25em } .evo-tab-row .tab-row .tab:not(#evo-tab-home) i.help { display: none } .evo-tab-row .tab-row .tab:not(#evo-tab-home) i { margin-right: .2em } +.evo-tab-row .tab-row .tab span { background: none !important } .evo-tab-row .tab-row .tab .tab-title { float: left; width: 5rem; line-height: 2rem; text-overflow: ellipsis; overflow: hidden; } .evo-tab-row .tab-row .tab .tab-close { float: right; margin: 0 -.75rem 0 .5rem; padding: .25em; line-height: 1.3em; font-size: 1.3em; font-weight: 700; color: #9e9e9e } .evo-tab-row .tab-row .tab .tab-close:hover { color: #d9534f } diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 8eb0550371..9b02974f5c 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -890,7 +890,7 @@ if (rpcNodeText === '' || rpcNodeText.indexOf(loadText) > 0) { var folderState = this.getFolderState(); d.getElementById('treeloader').classList.add('visible'); - modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=' + el.dataset.indent + '&parent=' + id + '&expandAll=' + el.dataset.expandall + folderState, function(r) { + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=' + el.dataset.indent + '&parent=' + id + '&expandAll=' + el.dataset.expandall + folderState, function(r) { modx.tree.rpcLoadData(r); modx.tree.draggable(); }); @@ -1244,7 +1244,7 @@ d.getElementById('treeloader').classList.add('visible'); this.setItemToChange(); this.rpcNode = d.getElementById('treeRoot'); - modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=2&id=' + this.itemToChange, function(r) { + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=1&parent=0&expandAll=2&id=' + this.itemToChange, function(r) { modx.tree.rpcLoadData(r); modx.tree.draggable(); }); @@ -1253,7 +1253,7 @@ expandTree: function() { this.rpcNode = d.getElementById('treeRoot'); d.getElementById('treeloader').classList.add('visible'); - modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=1&id=' + this.itemToChange, function(r) { + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=1&parent=0&expandAll=1&id=' + this.itemToChange, function(r) { modx.tree.rpcLoadData(r); modx.tree.saveFolderState(); modx.tree.draggable(); @@ -1262,7 +1262,7 @@ collapseTree: function() { this.rpcNode = d.getElementById('treeRoot'); d.getElementById('treeloader').classList.add('visible'); - modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&indent=1&parent=0&expandAll=0&id=' + this.itemToChange, function(r) { + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=1&parent=0&expandAll=0&id=' + this.itemToChange, function(r) { modx.openedArray = []; modx.tree.saveFolderState(); modx.tree.rpcLoadData(r); @@ -1273,8 +1273,8 @@ this.rpcNode = d.getElementById('treeRoot'); d.getElementById('treeloader').classList.add('visible'); var a = d.sortFrm; - var b = '?a=1&f=nodes&indent=1&parent=0&expandAll=2&dt=' + a.dt.value + '&tree_sortby=' + a.sortby.value + '&tree_sortdir=' + a.sortdir.value + '&tree_nodename=' + a.nodename.value + '&id=' + this.itemToChange + '&showonlyfolders=' + a.showonlyfolders.value; - modx.get(modx.MODX_MANAGER_URL + b, function(r) { + var b = 'a=1&f=nodes&indent=1&parent=0&expandAll=2&dt=' + a.dt.value + '&tree_sortby=' + a.sortby.value + '&tree_sortdir=' + a.sortdir.value + '&tree_nodename=' + a.nodename.value + '&id=' + this.itemToChange + '&showonlyfolders=' + a.showonlyfolders.value; + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', b, function(r) { modx.tree.rpcLoadData(r); modx.tree.draggable(); }); @@ -1294,7 +1294,7 @@ return a; }, saveFolderState: function() { - modx.get(modx.MODX_MANAGER_URL + '?a=1&f=nodes&savestateonly=1' + this.getFolderState()); + modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&savestateonly=1' + this.getFolderState()); }, showSorter: function(e) { e = e || w.event; @@ -1561,7 +1561,7 @@ if (!!w.main.__alertQuit) { var message = w.main.document.body.querySelector('p').innerHTML; tabpage = e.target.parentNode; - tab = null; + tab = d.getElementById('evo-tab-' + o.uid) || null; w.main.alert = function() {}; history.pushState(null, d.title, modx.getActionFromUrl(w.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.location.search); window.onpopstate = function() { @@ -1573,13 +1573,13 @@ position: 'top center alertQuit', content: message }); - modx.getLockedElements(modx.main.getQueryVariable('a', a.url), modx.main.getQueryVariable('id', a.url), function(data) { + modx.getLockedElements(modx.main.getQueryVariable('a', o.url), modx.main.getQueryVariable('id', o.url), function(data) { if (!!data) { tabpage.close(); modx.tree.restoreTree(); } else { - w.main.location.href = modx.MODX_MANAGER_URL + a.url; - w.history.replaceState(null, d.title, modx.getActionFromUrl(a.url, 2) ? modx.MODX_MANAGER_URL : '#' + a.url); + w.main.location.href = modx.MODX_MANAGER_URL + o.url; + w.history.replaceState(null, d.title, modx.getActionFromUrl(o.url, 2) ? modx.MODX_MANAGER_URL : '#' + o.url); } }); } else { From 3e85379d471884177c1ba266ee43dd262f030583 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 15 Sep 2017 02:39:11 +0300 Subject: [PATCH 108/577] fix ajax.php added modx->sid --- manager/media/style/default/ajax.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manager/media/style/default/ajax.php b/manager/media/style/default/ajax.php index 236556e70e..1d244e6953 100644 --- a/manager/media/style/default/ajax.php +++ b/manager/media/style/default/ajax.php @@ -3,7 +3,7 @@ define('MODX_API_MODE', true); define('IN_MANAGER_MODE', true); -include_once("./../../../../index.php"); +include_once("../../../../index.php"); $modx->db->connect(); @@ -15,6 +15,8 @@ $modx->sendErrorPage(); } +$modx->sid = session_id(); + $_lang = array(); include_once MODX_MANAGER_PATH . '/includes/lang/english.inc.php'; if ($modx->config['manager_language'] != 'english') { From 5c95982dad39c4c920a635836eee667e6e86bf70 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 15 Sep 2017 02:42:57 +0300 Subject: [PATCH 109/577] fix include index.php --- manager/media/style/default/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/media/style/default/ajax.php b/manager/media/style/default/ajax.php index 1d244e6953..1050df8464 100644 --- a/manager/media/style/default/ajax.php +++ b/manager/media/style/default/ajax.php @@ -3,7 +3,7 @@ define('MODX_API_MODE', true); define('IN_MANAGER_MODE', true); -include_once("../../../../index.php"); +include_once("./../../../../index.php"); $modx->db->connect(); From 256f44bca1293eb858ade18d46ed8fe22e4b71bb Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:03:04 +0900 Subject: [PATCH 110/577] Fix Ditto debug info Depending on the combination with other snippets the information may be empty --- assets/snippets/ditto/snippet.ditto.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/snippets/ditto/snippet.ditto.php b/assets/snippets/ditto/snippet.ditto.php index 47ad3f8be5..ba20d97451 100644 --- a/assets/snippets/ditto/snippet.ditto.php +++ b/assets/snippets/ditto/snippet.ditto.php @@ -27,6 +27,9 @@ if(isset($ditto_base)) $ditto_base = $modx->config['base_path'].ltrim($ditto_base,'/'); else $ditto_base = str_replace('\\','/',__DIR__) . '/'; + +$ditto_params =& $modx->event->params; + /* Param: ditto_base @@ -1062,7 +1065,6 @@ // --------------------------------------------------- if ($debug == 1) { - $ditto_params =& $modx->event->params; if (!isset($_GET['ditto_'.$dittoID.'debug'])) { $_SESSION['ditto_debug_$dittoID'] = $ditto->debug->render_popup($ditto, $ditto_base, $ditto_version, $ditto_params, $documentIDs, array('db'=>$dbFields,'tv'=>$TVs), $display, $templates, $orderBy, $start, $stop, $total,$filter,$resource); } From ae6c8412b3b09ff30ead86f90359e521a1165f95 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:03:37 +0900 Subject: [PATCH 111/577] Refactor - config.inc.php --- install/config.inc.tpl | 51 +--------------------- manager/includes/preload.functions.inc.php | 49 +++++++++++++++++++++ 2 files changed, 50 insertions(+), 50 deletions(-) create mode 100644 manager/includes/preload.functions.inc.php diff --git a/install/config.inc.tpl b/install/config.inc.tpl index c867092bca..71422ece0a 100644 --- a/install/config.inc.tpl +++ b/install/config.inc.tpl @@ -78,53 +78,4 @@ if (!defined('MODX_SITE_URL')) define('MODX_SITE_URL', $site_url); if (!defined('MODX_MANAGER_PATH')) define('MODX_MANAGER_PATH', $base_path.MGR_DIR.'/'); if (!defined('MODX_MANAGER_URL')) define('MODX_MANAGER_URL', $site_url.MGR_DIR.'/'); -// start cms session -if(!function_exists('startCMSSession')) { - - global $site_sessionname; - $_ = crc32(__FILE__); - $_ = sprintf('%u', $_); - $_ = base_convert($_,10,36); - $site_sessionname = 'evo' . $_; - - function removeInvalidCmsSessionFromStorage(&$storage, $session_name) { - if (isset($storage[$session_name]) && ($storage[$session_name] === '' || $storage[$session_name] === 'deleted')) - { - unset($storage[$session_name]); - } - } - function removeInvalidCmsSessionIds($session_name) { - // session ids is invalid iff it is empty string - // storage priorioty can see in PHP source ext/session/session.c - removeInvalidCmsSessionFromStorage($_COOKIE, $session_name); - removeInvalidCmsSessionFromStorage($_GET, $session_name); - removeInvalidCmsSessionFromStorage($_POST, $session_name); - } - function startCMSSession(){ - - global $site_sessionname, $https_port; - - session_name($site_sessionname); - removeInvalidCmsSessionIds($site_sessionname); - session_start(); - $cookieExpiration= 0; - $secure = ((isset ($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') || $_SERVER['SERVER_PORT'] == $https_port); - - if (isset($_SESSION['mgrValidated'])) $context = 'mgr'; - elseif(isset($_SESSION['webValidated'])) $context = 'web'; - else { - setcookie($site_sessionname, session_id(), $cookieExpiration, MODX_BASE_URL, null, $secure, true); - return; - } - - $key = "modx.{$context}.session.cookie.lifetime"; - if (isset($_SESSION[$key]) && is_numeric($_SESSION[$key])) { - $cookieLifetime= intval($_SESSION[$key]); - if($cookieLifetime) $cookieExpiration = $_SERVER['REQUEST_TIME']+$cookieLifetime; - } - if (!isset($_SESSION['modx.session.created.time'])) { - $_SESSION['modx.session.created.time'] = $_SERVER['REQUEST_TIME']; - } - setcookie($site_sessionname, session_id(), $cookieExpiration, MODX_BASE_URL, null, $secure, true); - } -} +include_once(MODX_MANAGER_PATH.'includes/preload.functions.inc.php'); diff --git a/manager/includes/preload.functions.inc.php b/manager/includes/preload.functions.inc.php new file mode 100644 index 0000000000..7a3baf8920 --- /dev/null +++ b/manager/includes/preload.functions.inc.php @@ -0,0 +1,49 @@ + Date: Fri, 15 Sep 2017 10:29:49 +0900 Subject: [PATCH 112/577] Code cleanup --- manager/includes/document.parser.class.inc.php | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 758377bfa2..3fc29509d9 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -482,18 +482,9 @@ function checkPreview() { * @return boolean */ function checkSiteStatus() { - $siteStatus= $this->config['site_status']; - if ($siteStatus == 1) { - // site online - return true; - } - elseif ($siteStatus == 0 && $this->isLoggedIn()) { - // site offline but launched via the manager - return true; - } else { - // site is offline - return false; - } + if($this->config['site_status']) return true; // site online + elseif($this->isLoggedin()) return true; // site offline but launched via the manager + else return false; // site is offline } /** From eff7c09452e92cca9a85f6e659b799805ac1fb52 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:30:07 +0900 Subject: [PATCH 113/577] Code cleanup --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 3fc29509d9..ce7096d9af 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -494,7 +494,7 @@ function checkSiteStatus() { * @return string */ function cleanDocumentIdentifier($qOrig) { - (!empty($qOrig)) or $qOrig = $this->config['site_start']; + if(!$qOrig) $qOrig = $this->config['site_start']; $q= $qOrig; /* First remove any / before or after */ $q = trim($q,'/'); From eb241a4f360c5536e93a227510065b6dab64372e Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:31:01 +0900 Subject: [PATCH 114/577] Refactor - $modx->cleanDocumentIdentifier() --- manager/includes/document.parser.class.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index ce7096d9af..88a237452c 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -501,9 +501,9 @@ function cleanDocumentIdentifier($qOrig) { /* Save path if any */ /* FS#476 and FS#308: only return virtualDir if friendly paths are enabled */ if ($this->config['use_alias_path'] == 1) { - $this->virtualDir= dirname($q); - $this->virtualDir= ($this->virtualDir == '.' ? '' : $this->virtualDir); - $q = preg_replace('/.*[\/\\\]/', '', $q); + $_ = strrpos($q,'/'); + $this->virtualDir = $_!==false ? substr($q,0,$_) : $q; + if(strpos($q,'/')) $q = preg_replace('@.*/@', '', $q); } else { $this->virtualDir= ''; } From 3e5792f72280c347eeb69d07cae9e99a8d020e2e Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:32:09 +0900 Subject: [PATCH 115/577] Fix - url_prefix and suffix problem --- manager/includes/document.parser.class.inc.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 88a237452c..b64de68cb5 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -507,8 +507,10 @@ function cleanDocumentIdentifier($qOrig) { } else { $this->virtualDir= ''; } - $q= str_replace($this->config['friendly_url_prefix'], "", $q); - $q= str_replace($this->config['friendly_url_suffix'], "", $q); + $pre = $this->config['friendly_url_prefix']; + $suf = $this->config['friendly_url_suffix']; + if($pre && preg_match('@^'.$pre.'(.*)$@',$q,$_)) $q= $_[1]; + if($suf && preg_match('@(.*)'.$suf.'$@',$q,$_)) $q= $_[1]; if (is_numeric($q) && !isset($this->documentListing[$q])) { /* we got an ID returned, check to make sure it's not an alias */ /* FS#476 and FS#308: check that id is valid in terms of virtualDir structure */ if ($this->config['use_alias_path'] == 1) { From d53953c84d15ce84a9a027068b6b9b7c32e4eced Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:32:48 +0900 Subject: [PATCH 116/577] Fix - is_numeric() --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index b64de68cb5..cf8bdb064b 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -511,7 +511,7 @@ function cleanDocumentIdentifier($qOrig) { $suf = $this->config['friendly_url_suffix']; if($pre && preg_match('@^'.$pre.'(.*)$@',$q,$_)) $q= $_[1]; if($suf && preg_match('@(.*)'.$suf.'$@',$q,$_)) $q= $_[1]; - if (is_numeric($q) && !isset($this->documentListing[$q])) { /* we got an ID returned, check to make sure it's not an alias */ + if (preg_match('@^[1-9][0-9]*$@',$q) && !isset($this->documentListing[$q])) { /* we got an ID returned, check to make sure it's not an alias */ /* FS#476 and FS#308: check that id is valid in terms of virtualDir structure */ if ($this->config['use_alias_path'] == 1) { if ((($this->virtualDir != '' && !isset($this->documentListing[$this->virtualDir . '/' . $q])) || ($this->virtualDir == '' && !isset($this->documentListing[$q]))) && (($this->virtualDir != '' && isset($this->documentListing[$this->virtualDir]) && in_array($q, $this->getChildIds($this->documentListing[$this->virtualDir], 1))) || ($this->virtualDir == '' && in_array($q, $this->getChildIds(0, 1))))) { From a6245c311969a59658b73f9047bd8593bb43ce15 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:33:19 +0900 Subject: [PATCH 117/577] Code cleanup - $modx->cleanDocumentIdentifier() --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index cf8bdb064b..3cf092dc52 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -514,7 +514,7 @@ function cleanDocumentIdentifier($qOrig) { if (preg_match('@^[1-9][0-9]*$@',$q) && !isset($this->documentListing[$q])) { /* we got an ID returned, check to make sure it's not an alias */ /* FS#476 and FS#308: check that id is valid in terms of virtualDir structure */ if ($this->config['use_alias_path'] == 1) { - if ((($this->virtualDir != '' && !isset($this->documentListing[$this->virtualDir . '/' . $q])) || ($this->virtualDir == '' && !isset($this->documentListing[$q]))) && (($this->virtualDir != '' && isset($this->documentListing[$this->virtualDir]) && in_array($q, $this->getChildIds($this->documentListing[$this->virtualDir], 1))) || ($this->virtualDir == '' && in_array($q, $this->getChildIds(0, 1))))) { + if (($this->virtualDir != '' && !isset($this->documentListing[$this->virtualDir . '/' . $q]) || ($this->virtualDir == '' && !isset($this->documentListing[$q]))) && (($this->virtualDir != '' && isset($this->documentListing[$this->virtualDir]) && in_array($q, $this->getChildIds($this->documentListing[$this->virtualDir], 1))) || ($this->virtualDir == '' && in_array($q, $this->getChildIds(0, 1))))) { $this->documentMethod= 'id'; return $q; } else { /* not a valid id in terms of virtualDir, treat as alias */ From c9f3c7ad329ea5ce60981af90f9a034a09216292 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:37:04 +0900 Subject: [PATCH 118/577] Rename - function name new $modx->updatePubStatus() past $modx->checkPublishStatus() --- manager/includes/document.parser.class.inc.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 3cf092dc52..5620896966 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -815,7 +815,7 @@ public function setConditional(){ /** * Checks the publish state of page */ - function checkPublishStatus() { + function updatePubStatus() { $cacheRefreshTime= 0; $recent_update = 0; @include(MODX_BASE_PATH . $this->getCacheFolder() . 'sitePublishing.idx.php'); @@ -840,6 +840,10 @@ function checkPublishStatus() { $this->clearCache('full'); } + function checkPublishStatus() { + $this->updatePubStatus(); + } + /** * Final jobs. * From 8cb47407fc1e292e0d7eb7a485c5fe058e669f8f Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 10:38:13 +0900 Subject: [PATCH 119/577] Code cleanup --- manager/includes/document.parser.class.inc.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 5620896966..1b3b0b2e24 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -2085,7 +2085,14 @@ function executeParser() { $this->_IIS_furl_fix(); // IIS friendly url fix // check site settings - if (!$this->checkSiteStatus()) { + if ($this->checkSiteStatus()) { + // make sure the cache doesn't need updating + $this->updatePubStatus(); + + // find out which document we need to display + $this->documentMethod= filter_input(INPUT_GET,'q') ? 'alias' : 'id'; + $this->documentIdentifier= $this->getDocumentIdentifier($this->documentMethod); + } else { header('HTTP/1.0 503 Service Unavailable'); $this->systemCacheKey = 'unavailable'; if (!$this->config['site_unavailable_page']) { @@ -2095,16 +2102,9 @@ function executeParser() { exit; // stop processing here, as the site's offline } else { // setup offline page document settings - $this->documentMethod= "id"; + $this->documentMethod= 'id'; $this->documentIdentifier= $this->config['site_unavailable_page']; } - } else { - // make sure the cache doesn't need updating - $this->checkPublishStatus(); - - // find out which document we need to display - $this->documentMethod= filter_input(INPUT_GET,'q') ? 'alias' : 'id'; - $this->documentIdentifier= $this->getDocumentIdentifier($this->documentMethod); } if ($this->documentMethod == "alias") { From cddb0cea2b473da495f43901396904162be1c0b7 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 11:58:07 +0900 Subject: [PATCH 120/577] Refactor - charsets.php --- manager/includes/charsets.php | 173 ++++++++++++++++++---------------- 1 file changed, 91 insertions(+), 82 deletions(-) diff --git a/manager/includes/charsets.php b/manager/includes/charsets.php index 434f1b6dfc..51648edc6d 100755 --- a/manager/includes/charsets.php +++ b/manager/includes/charsets.php @@ -1,82 +1,91 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +%s'; +$options = array(); +foreach($_ as $value=>$label) { + $selected = $value===$modx_charset ? 'selected' : ''; + $options[] = sprintf($tpl, $value, $selected, $label); +} +echo join("\n", $options); \ No newline at end of file From 899d91181b5e128a84b6ee0ba372c2fda88fdcd4 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 12:13:00 +0900 Subject: [PATCH 121/577] Remove - Not recommended charsets --- manager/includes/charsets.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/manager/includes/charsets.php b/manager/includes/charsets.php index 51648edc6d..c3e0288ab3 100755 --- a/manager/includes/charsets.php +++ b/manager/includes/charsets.php @@ -49,12 +49,6 @@ $_['x-iscii-pa'] = 'ISCII Panjabi - x-iscii-pa'; $_['x-iscii-ta'] = 'ISCII Tamil - x-iscii-ta'; $_['x-iscii-te'] = 'ISCII Telugu - x-iscii-te'; -$_['euc-jp'] = 'Japanese (EUC) - euc-jp'; -$_['iso-2022-jp'] = 'Japanese (JIS) - iso-2022-jp'; -$_['iso-2022-jp'] = 'Japanese (JIS-Allow 1 byte Kana - SO/SI) - iso-2022-jp'; -$_['csISO2022JP'] = 'Japanese (JIS-Allow 1 byte Kana) - csISO2022JP'; -$_['x-mac-japanese'] = 'Japanese (Mac) - x-mac-japanese'; -$_['shift_jis'] = 'Japanese (Shift-JIS) - shift_jis'; $_['ks_c_5601-1987'] = 'Korean - ks_c_5601-1987'; $_['euc-kr'] = 'Korean (EUC) - euc-kr'; $_['iso-2022-kr'] = 'Korean (ISO) - iso-2022-kr'; @@ -82,10 +76,15 @@ $_['macintosh'] = 'Western European (Mac) - macintosh'; $_['Windows-1252'] = 'Western European (Windows) - Windows-1252'; +if($modx_charset == 'euc-jp') $_['euc-jp'] = 'Japanese (EUC) - euc-jp'; +elseif($modx_charset == 'shift_jis') $_['shift_jis'] = 'Japanese (Shift-JIS) - shift_jis'; +elseif($modx_charset == 'iso-2022-jp') $_['iso-2022-jp'] = 'Japanese (JIS-Allow 1 byte Kana - SO/SI) - iso-2022-jp'; +elseif($modx_charset == 'csISO2022JP') $_['csISO2022JP'] = 'Japanese (JIS-Allow 1 byte Kana) - csISO2022JP'; + $tpl = ''; $options = array(); foreach($_ as $value=>$label) { $selected = $value===$modx_charset ? 'selected' : ''; $options[] = sprintf($tpl, $value, $selected, $label); } -echo join("\n", $options); \ No newline at end of file +echo join("\n", $options); From fdc11875e6718c7eb4fcc6cdc896ade90e17ff4f Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 12:24:59 +0900 Subject: [PATCH 122/577] Remove - cjk charsets --- manager/includes/charsets.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/manager/includes/charsets.php b/manager/includes/charsets.php index c3e0288ab3..095e15e40e 100755 --- a/manager/includes/charsets.php +++ b/manager/includes/charsets.php @@ -11,14 +11,8 @@ $_['iso-8859-2'] = 'Central European (ISO) - iso-8859-2'; $_['x-mac-ce'] = 'Central European (Mac) - x-mac-ce'; $_['windows-1250'] = 'Central European (Windows) - windows-1250'; -$_['EUC-CN'] = 'Chinese Simplified (EUC) - EUC-CN'; $_['gb2312'] = 'Chinese Simplified (GB2312) - gb2312'; -$_['hz-gb-2312'] = 'Chinese Simplified (HZ) - hz-gb-2312'; -$_['x-mac-chinesesimp'] = 'Chinese Simplified (Mac) - x-mac-chinesesimp'; $_['big5'] = 'Chinese Traditional (Big5) - big5'; -$_['x-Chinese-CNS'] = 'Chinese Traditional (CNS) - x-Chinese-CNS'; -$_['x-Chinese-Eten'] = 'Chinese Traditional (Eten) - x-Chinese-Eten'; -$_['x-mac-chinesetrad'] = 'Chinese Traditional (Mac) - x-mac-chinesetrad'; $_['cp866'] = 'Cyrillic (DOS) - cp866'; $_['iso-8859-5'] = 'Cyrillic (ISO) - iso-8859-5'; $_['koi8-r'] = 'Cyrillic (KOI8-R) - koi8-r'; @@ -49,11 +43,6 @@ $_['x-iscii-pa'] = 'ISCII Panjabi - x-iscii-pa'; $_['x-iscii-ta'] = 'ISCII Tamil - x-iscii-ta'; $_['x-iscii-te'] = 'ISCII Telugu - x-iscii-te'; -$_['ks_c_5601-1987'] = 'Korean - ks_c_5601-1987'; -$_['euc-kr'] = 'Korean (EUC) - euc-kr'; -$_['iso-2022-kr'] = 'Korean (ISO) - iso-2022-kr'; -$_['Johab'] = 'Korean (Johab) - Johab'; -$_['x-mac-korean'] = 'Korean (Mac) - x-mac-korean'; $_['iso-8859-3'] = 'Latin 3 (ISO) - iso-8859-3'; $_['iso-8859-15'] = 'Latin 9 (ISO) - iso-8859-15'; $_['x-IA5-Norwegian'] = 'Norwegian (IA5) - x-IA5-Norwegian'; @@ -80,6 +69,17 @@ elseif($modx_charset == 'shift_jis') $_['shift_jis'] = 'Japanese (Shift-JIS) - shift_jis'; elseif($modx_charset == 'iso-2022-jp') $_['iso-2022-jp'] = 'Japanese (JIS-Allow 1 byte Kana - SO/SI) - iso-2022-jp'; elseif($modx_charset == 'csISO2022JP') $_['csISO2022JP'] = 'Japanese (JIS-Allow 1 byte Kana) - csISO2022JP'; +elseif($modx_charset == 'EUC-CN') $_['EUC-CN'] = 'Chinese Simplified (EUC) - EUC-CN'; +elseif($modx_charset == 'hz-gb-2312') $_['hz-gb-2312'] = 'Chinese Simplified (HZ) - hz-gb-2312'; +elseif($modx_charset == 'x-mac-chinesesimp') $_['x-mac-chinesesimp'] = 'Chinese Simplified (Mac) - x-mac-chinesesimp'; +elseif($modx_charset == 'x-Chinese-CNS') $_['x-Chinese-CNS'] = 'Chinese Traditional (CNS) - x-Chinese-CNS'; +elseif($modx_charset == 'x-Chinese-Eten') $_['x-Chinese-Eten'] = 'Chinese Traditional (Eten) - x-Chinese-Eten'; +elseif($modx_charset == 'x-mac-chinesetrad') $_['x-mac-chinesetrad'] = 'Chinese Traditional (Mac) - x-mac-chinesetrad'; +elseif($modx_charset == 'ks_c_5601-1987') $_['ks_c_5601-1987'] = 'Korean - ks_c_5601-1987'; +elseif($modx_charset == 'euc-kr') $_['euc-kr'] = 'Korean (EUC) - euc-kr'; +elseif($modx_charset == 'iso-2022-kr') $_['iso-2022-kr'] = 'Korean (ISO) - iso-2022-kr'; +elseif($modx_charset == 'Johab') $_['Johab'] = 'Korean (Johab) - Johab'; +elseif($modx_charset == 'x-mac-korean') $_['x-mac-korean'] = 'Korean (Mac) - x-mac-korean'; $tpl = ''; $options = array(); From 863788539e4b7a43f6a8e46cd43d9c1e0728b097 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 12:27:08 +0900 Subject: [PATCH 123/577] Improved - utf8 on top --- manager/includes/charsets.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/charsets.php b/manager/includes/charsets.php index 095e15e40e..9dd77bc935 100755 --- a/manager/includes/charsets.php +++ b/manager/includes/charsets.php @@ -1,4 +1,5 @@ Date: Fri, 15 Sep 2017 14:08:09 +0900 Subject: [PATCH 124/577] Code cleanup --- manager/includes/document.parser.class.inc.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 1b3b0b2e24..ad0b109ba0 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -297,11 +297,12 @@ function sendUnauthorizedPage($noEvent = false) { * Get MODX settings including, but not limited to, the system_settings table */ function getSettings() { - $tbl_system_settings = $this->getFullTableName('system_settings'); if (!isset($this->config['site_name'])) { - if ($included= is_file(MODX_BASE_PATH . $this->getCacheFolder() . 'siteCache.idx.php')) { - $included= include_once (MODX_BASE_PATH . $this->getCacheFolder() . 'siteCache.idx.php'); - } + + $site_cache_path = MODX_BASE_PATH . $this->getCacheFolder() . 'siteCache.idx.php'; + + if ($included= is_file($site_cache_path)) $included= include_once ($site_cache_path); + if (!$included || !isset($this->config['site_name'])) { include_once(MODX_MANAGER_PATH . 'processors/cache_sync.class.processor.php'); $cache = new synccache(); @@ -309,11 +310,11 @@ function getSettings() { $cache->setReport(false); $rebuilt = $cache->buildCache($this); $included = false; - if($rebuilt && is_file(MODX_BASE_PATH . $this->getCacheFolder() . 'siteCache.idx.php')) { - $included= include(MODX_BASE_PATH . $this->getCacheFolder() . 'siteCache.idx.php'); - } + + if($rebuilt && is_file($site_cache_path)) $included= include($site_cache_path); + if(!$included) { - $result= $this->db->select('setting_name, setting_value', $tbl_system_settings); + $result= $this->db->select('setting_name, setting_value', '[+prefix+]system_settings'); while ($row= $this->db->getRow($result)) { $this->config[$row['setting_name']]= $row['setting_value']; } From e50b82f940ea06481625c125329f8941d10e4d81 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 14:26:16 +0900 Subject: [PATCH 125/577] Code cleanup --- manager/processors/cache_sync.class.processor.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 0097ecd39e..c6473870e2 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -171,11 +171,11 @@ public function buildCache($modx) { // SETTINGS & DOCUMENT LISTINGS CACHE // get settings - $rs = $modx->db->select('*', $modx->getFullTableName('system_settings')); + $rs = $modx->db->select('*', '[+prefix+]system_settings'); $config = array(); - $tmpPHP .= '$c=&$this->config;'; + $tmpPHP .= '$c=&$this->config;'; while(list($key,$value) = $modx->db->getRow($rs,'num')) { - $tmpPHP .= '$c[\'' . $this->escapeSingleQuotes($key) . '\']' . '="' . $this->escapeDoubleQuotes($value) . "\";"; + $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($key), $this->escapeDoubleQuotes($value)); $config[$key] = $value; } @@ -195,7 +195,7 @@ public function buildCache($modx) { WHERE c.deleted = '0' AND ( c.isfolder = '1' OR p.alias_visible = '0' ) ORDER BY c.parent, c.menuindex" ); }else{ - $rs = $modx->db->select('IF(alias=\'\', id, alias) AS alias, id, parent, isfolder, alias_visible', $tableName, 'deleted=0', 'parent, menuindex'); + $rs = $modx->db->select("IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible", $tableName, 'deleted=0', 'parent, menuindex'); } while ($tmp1 = $modx->db->getRow($rs)) { if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { From a21e47ce97dda975982dfddc035adfbce93991c8 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 14:34:28 +0900 Subject: [PATCH 126/577] fix - $config['enable_filter'] in cache_processor --- manager/processors/cache_sync.class.processor.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index c6473870e2..c02e64541f 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -175,9 +175,16 @@ public function buildCache($modx) { $config = array(); $tmpPHP .= '$c=&$this->config;'; while(list($key,$value) = $modx->db->getRow($rs,'num')) { - $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($key), $this->escapeDoubleQuotes($value)); $config[$key] = $value; - } + } + if ($config['enable_filter']) { + $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; + $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); + if ($count) $config['enable_filter'] = '0'; + } + foreach($config as $key=>$value) { + $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($key), $this->escapeDoubleQuotes($value)); + } // get aliases modx: support for alias path $tmpPath = ''; From 0f37dcaf85c0d0e04af44be0b4d7f5b895b3d4c2 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 15 Sep 2017 18:03:40 +0900 Subject: [PATCH 127/577] Fix --- manager/includes/document.parser.class.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index ad0b109ba0..f00dbceb1e 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -503,8 +503,8 @@ function cleanDocumentIdentifier($qOrig) { /* FS#476 and FS#308: only return virtualDir if friendly paths are enabled */ if ($this->config['use_alias_path'] == 1) { $_ = strrpos($q,'/'); - $this->virtualDir = $_!==false ? substr($q,0,$_) : $q; - if(strpos($q,'/')) $q = preg_replace('@.*/@', '', $q); + $this->virtualDir = $_!==false ? substr($q,0,$_) : ''; + if($_!==false) $q = preg_replace('@.*/@', '', $q); } else { $this->virtualDir= ''; } From 13e70483f1006faae3787da2c7d398aaf383edc5 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 16 Sep 2017 09:53:21 +0900 Subject: [PATCH 128/577] #231 Fix - <@IF:[!$_GET['...'];!]> doesn't work https://github.com/evolution-cms/evolution/issues/231 --- manager/includes/document.parser.class.inc.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index f00dbceb1e..2d0ebebc42 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1262,7 +1262,7 @@ private function _parseCTagCMD($cmd) { $cmd = str_ireplace(array(' and ',' or '),array('&&','||'),$cmd); if(!preg_match('@^[0-9]*$@', $cmd) && preg_match('@^[0-9<= \-\+\*/\(\)%!&|]*$@', $cmd)) - $cmd = (int) eval("return {$cmd};"); + $cmd = eval("return {$cmd};"); else { $_ = explode(',', '[*,[(,{{,[[,[!,[+'); foreach($_ as $left) { @@ -1271,10 +1271,12 @@ private function _parseCTagCMD($cmd) { break; } } - $cmd = (int) $cmd; } - if($cmd < 0) $cmd = 0; + if(!preg_match('@^[0-9]+$@',$cmd)) $cmd = empty(trim($cmd)) ? 0 : 1; + elseif($cmd <= 0) $cmd = 0; + if($reverse) $cmd = !$cmd; + return $cmd; } @@ -1457,6 +1459,7 @@ function _getSGVar($value) { // Get super globals list($key,$modifiers) = $this->splitKeyAndFilter($key); $this->config['enable_filter'] = $_; $key = str_replace(array('(',')'),array("['","']"),$key); + $key = rtrim($key,';'); if(strpos($key,'$_SESSION')!==false) { $_ = $_SESSION; From af0311cb1989d849c0f17bb4a0a80cb21190383b Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 16 Sep 2017 09:53:54 +0900 Subject: [PATCH 129/577] Code cleanup --- manager/includes/document.parser.class.inc.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 2d0ebebc42..cb9d49c75a 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1301,12 +1301,12 @@ function ignoreCommentedTagsContent($content, $left='') { function escapeLiteralTagsContent($content, $left='<@LITERAL>', $right='<@ENDLITERAL>') { if(stripos($content,$left)===false) return $content; $matches = $this->getTagsFromContent($content,$left,$right); + if(empty($matches)) return $content; + list($sTags,$rTags) = $this->getTagsForEscape(); - if(!empty($matches)) { - foreach($matches[1] as $i=>$v) { - $v = str_ireplace($sTags,$rTags,$v); - $content = str_replace($matches[0][$i],$v,$content); - } + foreach($matches[1] as $i=>$v) { + $v = str_ireplace($sTags,$rTags,$v); + $content = str_replace($matches[0][$i],$v,$content); } return $content; } From d8d0e0ee5a53ab1c67e144e87abd7fe7f6a4185b Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 16 Sep 2017 09:56:57 +0900 Subject: [PATCH 130/577] #232 Modifier usage throws syntax error https://github.com/evolution-cms/evolution/issues/232 --- manager/includes/extenders/modifiers.class.inc.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index d4947a67a6..236b2ee218 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -340,19 +340,17 @@ function getValueFromPreset($key, $value, $cmd, $opt) $this->condition[] = '&&';break; case 'show': case 'this': - $conditional = join('*',$this->condition); + $conditional = join(' ',$this->condition); $isvalid = intval(eval("return ({$conditional});")); if ($isvalid) return $this->srcValue; - else return NULL; break; case 'then': - $conditional = join('*',$this->condition); + $conditional = join(' ',$this->condition); $isvalid = intval(eval("return ({$conditional});")); if ($isvalid) return $opt; - else return NULL; break; case 'else': - $conditional = join('*',$this->condition); + $conditional = join(' ',$this->condition); $isvalid = intval(eval("return ({$conditional});")); if (!$isvalid) return $opt; break; From bfda8aeeba8aed1d27980c4716b12f5f38a53c05 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 16 Sep 2017 09:57:54 +0900 Subject: [PATCH 131/577] Minor fix --- manager/includes/extenders/modifiers.class.inc.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index 236b2ee218..ce73e3ede7 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -360,10 +360,11 @@ function getValueFromPreset($key, $value, $cmd, $opt) $map = array(); $c = count($raw); for($m=0; $m<$c; $m++) { - $mi = explode('=',$raw[$m]); + $mi = explode('=',$raw[$m],2); $map[$mi[0]] = $mi[1]; } - return $map[$value]; + if(isset($map[$value])) return $map[$value]; + else return ''; ##### End of Conditional Modifiers ##### Encode / Decode / Hash / Escape @@ -540,7 +541,7 @@ function getValueFromPreset($key, $value, $cmd, $opt) break; case 'replace_to': case 'tpl': - if($value!=='') return str_replace(array('[+value+]','[+output+]','{value}'),$value,$opt); + if($value!=='') return str_replace(array('[+value+]','[+output+]','{value}','%s'),$value,$opt); break; case 'eachtpl': $value = explode('||',$value); @@ -641,7 +642,7 @@ function getValueFromPreset($key, $value, $cmd, $opt) case 'calc': $value = (int)$value; if(empty($value)) $value = '0'; - $filter = str_replace(array('[+value+]','%s'),'?',$opt); + $filter = str_replace(array('[+value+]','[+output+]','{value}','%s'),'?',$opt); $filter = preg_replace('@([a-zA-Z\n\r\t\s])@','',$filter); if(strpos($filter,'?')===false) $filter = "?{$filter}"; $filter = str_replace('?',$value,$filter); From 987ddea3c22c19c34a6fb797bf38486ec83e2456 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sat, 16 Sep 2017 17:35:11 +0300 Subject: [PATCH 132/577] fix modx.tabs close tab after clear trash --- manager/media/style/default/js/modx.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 9b02974f5c..18a62726a0 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -1558,10 +1558,10 @@ w.main = e.target.contentWindow; o.url = w.main.location.search || w.location.hash; o.uid = modx.urlToUid(o.url); + tab = d.getElementById('evo-tab-' + o.uid) || null; + tabpage = e.target.parentNode; if (!!w.main.__alertQuit) { var message = w.main.document.body.querySelector('p').innerHTML; - tabpage = e.target.parentNode; - tab = d.getElementById('evo-tab-' + o.uid) || null; w.main.alert = function() {}; history.pushState(null, d.title, modx.getActionFromUrl(w.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.location.search); window.onpopstate = function() { @@ -1584,7 +1584,7 @@ }); } else { var old_uid = tabpage.id.replace('evo-tab-page-', ''); - if (modx.main.getQueryVariable('a', o.url) === '2') { + if (modx.getActionFromUrl(o.url, 2)) { tabpage.close(); } else if (old_uid !== o.uid && d.getElementById('evo-tab-' + o.uid)) { tabpage.close(); @@ -2061,10 +2061,10 @@ w.mainMenu.reloadtree = function() { //console.log('mainMenu.reloadtree()'); if (modx.plugins.ElementsInTree) { - setTimeout('reloadElementsInTree()', 40); + setTimeout('reloadElementsInTree()', 50); } if (modx.config.global_tabs) { - setTimeout('modx.tree.restoreTree()', 50); + setTimeout('modx.tree.restoreTree()', 100); } }; w.mainMenu.startrefresh = function(a) { From 4ae0e05e331798c62241467b6af4ce78dbdea6a7 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 00:41:14 +0900 Subject: [PATCH 133/577] Code cleanup --- manager/processors/cache_sync.class.processor.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index c02e64541f..e49c048052 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -120,14 +120,12 @@ public function publishTimeConfig($cacheRefreshTime='') $filename = $this->cachePath.'/sitePublishing.idx.php'; if (!$handle = fopen($filename, 'w')) { - echo 'Cannot open file ('.$filename.')'; - exit; + exit("Cannot open file ({$filename}"); } // Write $somecontent to our opened file. if (fwrite($handle, implode("\n",$content)) === FALSE) { - echo 'Cannot write publishing info file! Make sure the assets/cache directory is writable!'; - exit; + exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); } } @@ -307,8 +305,7 @@ public function buildCache($modx) { if ($modx) $modx->invokeEvent('OnBeforeCacheUpdate'); if (!$handle = fopen($filename, 'w')) { - echo 'Cannot open file (', $filename, ')'; - exit; + exit("Cannot open file ({$filename}"); } if (!is_file($this->cachePath . '/.htaccess')) { @@ -317,8 +314,7 @@ public function buildCache($modx) { // Write $somecontent to our opened file. if (fwrite($handle, $somecontent) === FALSE) { - echo 'Cannot write main MODX cache file! Make sure the assets/cache directory is writable!'; - exit; + exit("Cannot write main MODX cache file! Make sure the assets/cache directory is writable!"); } fclose($handle); From 29b00f379baa34e17a11d19bf606df92d109da37 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 00:42:03 +0900 Subject: [PATCH 134/577] Code cleanup --- .../processors/cache_sync.class.processor.php | 76 ++++++++++--------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index e49c048052..9e2a9bbd06 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -30,8 +30,8 @@ function setReport($bool) function escapeDoubleQuotes($s) { - $q1 = array("\\", "\"", "\r", "\n", "\$"); - $q2 = array("\\\\", "\\\"", "\\r", "\\n", "\\$"); + $q1 = array("\\", '"', "\r", "\n", "\$"); + $q2 = array("\\\\", '\\"', "\\r", "\\n", "\\$"); return str_replace($q1, $q2, $s); } @@ -191,42 +191,51 @@ public function buildCache($modx) { $tmpPHP .= '$d=&$this->documentListing;'; $tmpPHP .= '$m=&$this->documentMap;'; - $tableName = $modx->getFullTableName( 'site_content' ); - if ($config['aliaslistingfolder'] == 1) { - $rs = $modx->db->query( "SELECT IF( c.alias = '', c.id, c.alias) AS alias, c.id, c.parent, c.isfolder, c.alias_visible - FROM $tableName c - LEFT JOIN $tableName p ON p.id = c.parent - WHERE c.deleted = '0' AND ( c.isfolder = '1' OR p.alias_visible = '0' ) - ORDER BY c.parent, c.menuindex" ); + $f['alias'] = "IF( c.alias='', c.id, c.alias)"; + $f['id'] = 'c.id'; + $f['parent'] = 'c.parent'; + $f['isfolder'] = 'c.isfolder'; + $f['alias_visible'] = 'c.alias_visible'; + $from = array(); + $from[] = '[+prefix+]site_content'; + $from[] = 'LEFT JOIN [+prefix+]site_content p ON p.id=c.parent'; + $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; + $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); }else{ - $rs = $modx->db->select("IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible", $tableName, 'deleted=0', 'parent, menuindex'); + $f = "IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible"; + $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); } - while ($tmp1 = $modx->db->getRow($rs)) { + while ($doc = $modx->db->getRow($rs)) { if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { - $tmpPath = $this->getParents($tmp1['parent']); - $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$tmp1['alias']; - $tmpPHP .= '$d[\'' . $this->escapeSingleQuotes($alias) . '\']' . " = " . $tmp1['id'] . ";"; + $tmpPath = $this->getParents($doc['parent']); + $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; + $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($alias), $doc['id'] ); } else { - $tmpPHP .= '$d[\'' . $this->escapeSingleQuotes($tmp1['alias']) . '\']' . " = " . $tmp1['id'] . ";"; + $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($doc['alias']), $doc['id'] ); } - $tmpPHP .= '$a[' . $tmp1['id'] . ']' . " = array('id' => " . $tmp1['id'] . ", 'alias' => '" . $this->escapeSingleQuotes($tmp1['alias']) . "', 'path' => '" . $this->escapeSingleQuotes($tmpPath) . "', 'parent' => " . $tmp1['parent'] . ", 'alias_visible' => " . $tmp1['alias_visible'] . ", 'isfolder' => " . $tmp1['isfolder'] . ");"; - $tmpPHP .= '$m[]'." = array('".$tmp1['parent']."' => '".$tmp1['id']."');"; + $doc['alias'] = $this->escapeDoubleQuotes($doc['alias']); + if($tmpPath) $tmpPath = $this->escapeDoubleQuotes($tmpPath); + $param = array($doc['id'],$doc['alias'],$tmpPath,$doc['parent'],$doc['alias_visible'],$doc['isfolder']); + $tpl = '$a[%1$s]=array("id"=>%1$s,"alias"=>"%2$s","path"=>"%3$s","parent"=>%4$s,"alias_visible"=>%5$s,"isfolder"=>%6$s);'; + $tmpPHP .= vsprintf($tpl, $param); + $tmpPHP .= sprintf('$m[]=array("%s"=>"%s");', $doc['parent'], $doc['id']); } // get content types - $rs = $modx->db->select('id, contentType', $tableName, "contentType != 'text/html'"); + $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType != 'text/html'"); $tmpPHP .= '$c = &$this->contentTypes;'; - while ($tmp1 = $modx->db->getRow($rs)) { - $tmpPHP .= '$c[' . $tmp1['id'] . ']' . " = '" . $this->escapeSingleQuotes($tmp1['contentType']) . "';"; + while ($doc = $modx->db->getRow($rs)) { + $tmpPHP .= sprintf('$c[%s]="%s";', $doc['id'], $this->escapeDoubleQuotes($doc['contentType'])); } // WRITE Chunks to cache file - $rs = $modx->db->select('*', $modx->getFullTableName('site_htmlsnippets')); + $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); $tmpPHP .= '$c = &$this->chunkCache;'; - while ($tmp1 = $modx->db->getRow($rs)) { - /** without trim */ - $tmpPHP .= '$c[\'' . $this->escapeSingleQuotes($tmp1['name']) . '\']' . " = '" . $this->escapeSingleQuotes($tmp1['disabled'] ? '' : $tmp1['snippet']) . "';"; + while ($doc = $modx->db->getRow($rs)) { + /** without trim */ + $code = (!$doc['disabled']) ? $this->escapeDoubleQuotes($doc['snippet']) : ''; + $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($doc['name']), $code); } // WRITE snippets to cache file @@ -277,15 +286,13 @@ public function buildCache($modx) { } // WRITE system event triggers - $events = array(); - $rs = $modx->db->select( - 'sysevt.name as evtname, event.pluginid, plugin.name', - '[+prefix+]system_eventnames sysevt - INNER JOIN [+prefix+]site_plugin_events event ON event.evtid=sysevt.id - INNER JOIN [+prefix+]site_plugins plugin ON plugin.id=event.pluginid', - 'plugin.disabled=0', - 'sysevt.name, event.priority' - ); + $events = array(); + $f = 'sysevt.name as evtname, event.pluginid, plugin.name'; + $from = array(); + $from[] = '[+prefix+]system_eventnames sysevt'; + $from[] = 'INNER JOIN [+prefix+]site_plugin_events event ON event.evtid=sysevt.id'; + $from[] = 'INNER JOIN [+prefix+]site_plugins plugin ON plugin.id=event.pluginid'; + $rs = $modx->db->select($f,$from, 'plugin.disabled=0', 'sysevt.name, event.priority'); $tmpPHP .= '$e = &$this->pluginEvent;'; while ($evt = $modx->db->getRow($rs)) { if (!isset($events[$evt['evtname']])) { @@ -294,7 +301,8 @@ public function buildCache($modx) { $events[$evt['evtname']][] = $evt['name']; } foreach ($events as $evtname => $pluginnames) { - $tmpPHP .= '$e[\'' . $this->escapeSingleQuotes($evtname) . '\']=array(\'' . implode("','", $this->escapeSingleQuotes($pluginnames)) . "');"; + $param = array($this->escapeDoubleQuotes($evtname), join('","', $this->escapeDoubleQuotes($pluginnames))); + $tmpPHP .= vsprintf('$e["%s"]=array("%s");', $param); } // close and write the file From 45a42bfa78ebb6cbc24fb572c1e7ff158798c2c5 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 12:49:45 +0900 Subject: [PATCH 135/577] Fx - source code indent missing --- .../processors/cache_sync.class.processor.php | 268 +++++++++--------- 1 file changed, 134 insertions(+), 134 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 9e2a9bbd06..fb24a0d3ce 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -86,162 +86,162 @@ function emptyCache($modx = null) } } - $this->buildCache($modx); - - $this->publishTimeConfig(); - - // finished cache stuff. - if($this->showReport==true) { - global $_lang; - printf($_lang['refresh_cache'], $filesincache, $deletedfilesincache); - $limit = count($deletedfiles); - if($limit > 0) { - echo '

          '.$_lang['cache_files_deleted'].'

            '; - for($i=0;$i<$limit; $i++) { - echo '
          • ',$deletedfiles[$i],'
          • '; + $this->buildCache($modx); + + $this->publishTimeConfig(); + + // finished cache stuff. + if($this->showReport==true) { + global $_lang; + printf($_lang['refresh_cache'], $filesincache, $deletedfilesincache); + $limit = count($deletedfiles); + if($limit > 0) { + echo '

            '.$_lang['cache_files_deleted'].'

              '; + for($i=0;$i<$limit; $i++) { + echo '
            • ',$deletedfiles[$i],'
            • '; + } + echo '
            '; } - echo '
          '; } } - } - public function publishTimeConfig($cacheRefreshTime='') - { - $cacheRefreshTimeFromDB = $this->getCacheRefreshTime(); - if(!preg_match('@^[0-9]+$]@',$cacheRefreshTime) || $cacheRefreshTimeFromDB < $cacheRefreshTime) - $cacheRefreshTime = $cacheRefreshTimeFromDB; + public function publishTimeConfig($cacheRefreshTime='') + { + $cacheRefreshTimeFromDB = $this->getCacheRefreshTime(); + if(!preg_match('@^[0-9]+$]@',$cacheRefreshTime) || $cacheRefreshTimeFromDB < $cacheRefreshTime) + $cacheRefreshTime = $cacheRefreshTimeFromDB; - // write the file - $content = array(); - $content[] = 'request_time); - $content[] = sprintf('$cacheRefreshTime = %s;', $cacheRefreshTime); + // write the file + $content = array(); + $content[] = 'request_time); + $content[] = sprintf('$cacheRefreshTime = %s;', $cacheRefreshTime); - $filename = $this->cachePath.'/sitePublishing.idx.php'; - if (!$handle = fopen($filename, 'w')) { - exit("Cannot open file ({$filename}"); - } + $filename = $this->cachePath.'/sitePublishing.idx.php'; + if (!$handle = fopen($filename, 'w')) { + exit("Cannot open file ({$filename}"); + } - // Write $somecontent to our opened file. - if (fwrite($handle, implode("\n",$content)) === FALSE) { - exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); - } - } + // Write $somecontent to our opened file. + if (fwrite($handle, implode("\n",$content)) === FALSE) { + exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); + } + } - public function getCacheRefreshTime() - { - global $modx; + public function getCacheRefreshTime() + { + global $modx; - // update publish time file - $timesArr = array(); + // update publish time file + $timesArr = array(); - $result = $modx->db->select('MIN(pub_date) AS minpub', '[+prefix+]site_content', 'pub_date>'.$this->request_time); - if(!$result) echo "Couldn't determine next publish event!"; + $result = $modx->db->select('MIN(pub_date) AS minpub', '[+prefix+]site_content', 'pub_date>'.$this->request_time); + if(!$result) echo "Couldn't determine next publish event!"; - $minpub = $modx->db->getValue($result); - if($minpub!=NULL) - $timesArr[] = $minpub; + $minpub = $modx->db->getValue($result); + if($minpub!=NULL) + $timesArr[] = $minpub; - $result = $modx->db->select('MIN(unpub_date) AS minunpub', '[+prefix+]site_content', 'unpub_date>'.$this->request_time); - if(!$result) echo "Couldn't determine next unpublish event!"; + $result = $modx->db->select('MIN(unpub_date) AS minunpub', '[+prefix+]site_content', 'unpub_date>'.$this->request_time); + if(!$result) echo "Couldn't determine next unpublish event!"; - $minunpub = $modx->db->getValue($result); - if($minunpub!=NULL) - $timesArr[] = $minunpub; + $minunpub = $modx->db->getValue($result); + if($minunpub!=NULL) + $timesArr[] = $minunpub; - if(isset($this->cacheRefreshTime) && !empty($this->cacheRefreshTime)) - $timesArr[] = $this->cacheRefreshTime; + if(isset($this->cacheRefreshTime) && !empty($this->cacheRefreshTime)) + $timesArr[] = $this->cacheRefreshTime; - if(count($timesArr)>0) $cacheRefreshTime = min($timesArr); - else $cacheRefreshTime = 0; - return $cacheRefreshTime; - } + if(count($timesArr)>0) $cacheRefreshTime = min($timesArr); + else $cacheRefreshTime = 0; + return $cacheRefreshTime; + } - /** - * build siteCache file - * @param DocumentParser $modx - * @return boolean success - */ - public function buildCache($modx) { - $tmpPHP = "db->select('*', '[+prefix+]system_settings'); - $config = array(); - $tmpPHP .= '$c=&$this->config;'; - while(list($key,$value) = $modx->db->getRow($rs,'num')) { - $config[$key] = $value; - } - if ($config['enable_filter']) { - $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; - $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); - if ($count) $config['enable_filter'] = '0'; - } - foreach($config as $key=>$value) { - $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($key), $this->escapeDoubleQuotes($value)); - } + /** + * build siteCache file + * @param DocumentParser $modx + * @return boolean success + */ + public function buildCache($modx) { + $tmpPHP = "db->select('*', '[+prefix+]system_settings'); + $config = array(); + $tmpPHP .= '$c=&$this->config;'; + while(list($key,$value) = $modx->db->getRow($rs,'num')) { + $config[$key] = $value; + } + if ($config['enable_filter']) { + $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; + $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); + if ($count) $config['enable_filter'] = '0'; + } + foreach($config as $key=>$value) { + $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($key), $this->escapeDoubleQuotes($value)); + } - // get aliases modx: support for alias path - $tmpPath = ''; - $tmpPHP .= '$this->aliasListing=array();'; - $tmpPHP .= '$a=&$this->aliasListing;'; - $tmpPHP .= '$d=&$this->documentListing;'; - $tmpPHP .= '$m=&$this->documentMap;'; - - if ($config['aliaslistingfolder'] == 1) { - $f['alias'] = "IF( c.alias='', c.id, c.alias)"; - $f['id'] = 'c.id'; - $f['parent'] = 'c.parent'; - $f['isfolder'] = 'c.isfolder'; - $f['alias_visible'] = 'c.alias_visible'; - $from = array(); - $from[] = '[+prefix+]site_content'; - $from[] = 'LEFT JOIN [+prefix+]site_content p ON p.id=c.parent'; - $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; - $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); - }else{ - $f = "IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible"; - $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); - } - while ($doc = $modx->db->getRow($rs)) { - if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { - $tmpPath = $this->getParents($doc['parent']); - $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; - $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($alias), $doc['id'] ); - } else { - $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($doc['alias']), $doc['id'] ); + // get aliases modx: support for alias path + $tmpPath = ''; + $tmpPHP .= '$this->aliasListing=array();'; + $tmpPHP .= '$a=&$this->aliasListing;'; + $tmpPHP .= '$d=&$this->documentListing;'; + $tmpPHP .= '$m=&$this->documentMap;'; + + if ($config['aliaslistingfolder'] == 1) { + $f['alias'] = "IF( c.alias='', c.id, c.alias)"; + $f['id'] = 'c.id'; + $f['parent'] = 'c.parent'; + $f['isfolder'] = 'c.isfolder'; + $f['alias_visible'] = 'c.alias_visible'; + $from = array(); + $from[] = '[+prefix+]site_content'; + $from[] = 'LEFT JOIN [+prefix+]site_content p ON p.id=c.parent'; + $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; + $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); + }else{ + $f = "IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible"; + $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); + } + while ($doc = $modx->db->getRow($rs)) { + if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { + $tmpPath = $this->getParents($doc['parent']); + $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; + $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($alias), $doc['id'] ); + } else { + $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($doc['alias']), $doc['id'] ); + } + $doc['alias'] = $this->escapeDoubleQuotes($doc['alias']); + if($tmpPath) $tmpPath = $this->escapeDoubleQuotes($tmpPath); + $param = array($doc['id'],$doc['alias'],$tmpPath,$doc['parent'],$doc['alias_visible'],$doc['isfolder']); + $tpl = '$a[%1$s]=array("id"=>%1$s,"alias"=>"%2$s","path"=>"%3$s","parent"=>%4$s,"alias_visible"=>%5$s,"isfolder"=>%6$s);'; + $tmpPHP .= vsprintf($tpl, $param); + $tmpPHP .= sprintf('$m[]=array("%s"=>"%s");', $doc['parent'], $doc['id']); } - $doc['alias'] = $this->escapeDoubleQuotes($doc['alias']); - if($tmpPath) $tmpPath = $this->escapeDoubleQuotes($tmpPath); - $param = array($doc['id'],$doc['alias'],$tmpPath,$doc['parent'],$doc['alias_visible'],$doc['isfolder']); - $tpl = '$a[%1$s]=array("id"=>%1$s,"alias"=>"%2$s","path"=>"%3$s","parent"=>%4$s,"alias_visible"=>%5$s,"isfolder"=>%6$s);'; - $tmpPHP .= vsprintf($tpl, $param); - $tmpPHP .= sprintf('$m[]=array("%s"=>"%s");', $doc['parent'], $doc['id']); - } - // get content types - $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType != 'text/html'"); - $tmpPHP .= '$c = &$this->contentTypes;'; - while ($doc = $modx->db->getRow($rs)) { - $tmpPHP .= sprintf('$c[%s]="%s";', $doc['id'], $this->escapeDoubleQuotes($doc['contentType'])); - } + // get content types + $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType != 'text/html'"); + $tmpPHP .= '$c = &$this->contentTypes;'; + while ($doc = $modx->db->getRow($rs)) { + $tmpPHP .= sprintf('$c[%s]="%s";', $doc['id'], $this->escapeDoubleQuotes($doc['contentType'])); + } - // WRITE Chunks to cache file - $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); - $tmpPHP .= '$c = &$this->chunkCache;'; - while ($doc = $modx->db->getRow($rs)) { - /** without trim */ - $code = (!$doc['disabled']) ? $this->escapeDoubleQuotes($doc['snippet']) : ''; - $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($doc['name']), $code); - } + // WRITE Chunks to cache file + $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); + $tmpPHP .= '$c = &$this->chunkCache;'; + while ($doc = $modx->db->getRow($rs)) { + /** without trim */ + $code = (!$doc['disabled']) ? $this->escapeDoubleQuotes($doc['snippet']) : ''; + $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($doc['name']), $code); + } - // WRITE snippets to cache file - $rs = $modx->db->select( - 'ss.*, sm.properties as sharedproperties', - '[+prefix+]site_snippets ss LEFT JOIN [+prefix+]site_modules sm on sm.guid=ss.moduleguid' + // WRITE snippets to cache file + $rs = $modx->db->select( + 'ss.*, sm.properties as sharedproperties', + '[+prefix+]site_snippets ss LEFT JOIN [+prefix+]site_modules sm on sm.guid=ss.moduleguid' ); $tmpPHP .= '$s=&$this->snippetCache;'; while ($row = $modx->db->getRow($rs)) { From 5620ef0bd6dbc97f4f984d840e849e78206d2db1 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 15:46:03 +0900 Subject: [PATCH 136/577] Code cleanup (indent) --- manager/includes/document.parser.class.inc.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index cb9d49c75a..ff133ab258 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -3282,11 +3282,11 @@ function getSnippetName() { */ function clearCache($type='', $report=false) { if ($type=='full') { - include_once(MODX_MANAGER_PATH . 'processors/cache_sync.class.processor.php'); - $sync = new synccache(); - $sync->setCachepath(MODX_BASE_PATH . $this->getCacheFolder()); - $sync->setReport($report); - $sync->emptyCache(); + include_once(MODX_MANAGER_PATH . 'processors/cache_sync.class.processor.php'); + $sync = new synccache(); + $sync->setCachepath(MODX_BASE_PATH . $this->getCacheFolder()); + $sync->setReport($report); + $sync->emptyCache(); } else { $files = glob(MODX_BASE_PATH . $this->getCacheFolder().'*'); $deletedfiles = array(); From 84f36fa0eb11bf0e485c391efe7a3bbfb43cc720 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 15:52:19 +0900 Subject: [PATCH 137/577] Refactor - $modx->clearCache() --- manager/includes/document.parser.class.inc.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index ff133ab258..d1b54bd84d 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -3289,14 +3289,9 @@ function clearCache($type='', $report=false) { $sync->emptyCache(); } else { $files = glob(MODX_BASE_PATH . $this->getCacheFolder().'*'); - $deletedfiles = array(); - while ($file = array_shift($files)) { - $name = preg_replace('/.*[\/\\\]/', '', $file); - if (preg_match('/\.pageCache/',$name) && !in_array($name, $deletedfiles)) { - $deletedfiles[] = $name; - unlink($file); - clearstatcache(); - } + foreach ($files as $file) { + if (strpos($name,'.pageCache.php')===false) continue; + if (is_file($file)) unlink($file); } } } From 1dbe85124baf4d6d4d9fd3491ee527896975e61a Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 15:54:20 +0900 Subject: [PATCH 138/577] New - $modx->clearCache($docid) Delete only one doc cache This specification is necessary for large scale site --- manager/includes/document.parser.class.inc.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index d1b54bd84d..d4d6f85a5f 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -3287,6 +3287,14 @@ function clearCache($type='', $report=false) { $sync->setCachepath(MODX_BASE_PATH . $this->getCacheFolder()); $sync->setReport($report); $sync->emptyCache(); + } elseif(preg_match('@^[1-9][0-9]*$@',$type)) { + $key = ($this->config['cache_type'] == 2) ? $this->makePageCacheKey($type) : $type; + $file_name = "docid_" . $key . "_*.pageCache.php"; + $cache_path = MODX_BASE_PATH . $this->getCacheFolder() . $file_name; + $files = glob($cache_path); + foreach($files as $file) { + if(is_file($file)) unlink($file); + } } else { $files = glob(MODX_BASE_PATH . $this->getCacheFolder().'*'); foreach ($files as $file) { From 510d72f4727eb6535f29f9a4e5693d1aec4776b4 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 16:27:44 +0900 Subject: [PATCH 139/577] [I] save_content.processor.php Initialize full cache only when alias, parent, and published are changed --- manager/processors/save_content.processor.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index 5a8bfd48ea..dd9feae6f1 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -653,8 +653,17 @@ $_SESSION['itemname'] = $no_esc_pagetitle; if ($syncsite == 1) { - // empty cache - $modx->clearCache('full'); + // empty cache + $keys = array('alias','parent','published'); + $flag = ''; + foreach($keys as $key) { + if ($existingDocument[$key]!==$_POST[$key]) { + $flag = 'full'; + break; + } + } + if($flag==='full') $modx->clearCache('full'); + else $modx->clearCache($id); } if ($_POST['refresh_preview'] == '1') From 2c5b49f07de6de7f090d56f7155653d5746cfb74 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 16:28:40 +0900 Subject: [PATCH 140/577] Code cleannup --- manager/actions/refresh_site.dynamic.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/manager/actions/refresh_site.dynamic.php b/manager/actions/refresh_site.dynamic.php index 008de9590f..dc3944330b 100644 --- a/manager/actions/refresh_site.dynamic.php +++ b/manager/actions/refresh_site.dynamic.php @@ -5,13 +5,14 @@ // (un)publishing of documents, version 2! // first, publish document waiting to be published -$ctime = time(); -$sctable = $modx->getFullTableName('site_content'); +$ctime = $_SERVER['REQUEST_TIME']; -$modx->db->update(array('published' => 1), $sctable, "pub_date < {$ctime} AND pub_date!=0 AND unpub_date > {$ctime}"); +$where = "pub_date < {$ctime} AND pub_date!=0 AND unpub_date > {$ctime}"; +$modx->db->update('published=1', '[+prefix+]site_content', $where); $num_rows_pub = $modx->db->getAffectedRows(); -$modx->db->update(array('published' => 0), $sctable, "unpub_date < {$ctime} AND unpub_date!=0 AND published=1"); +$where = "unpub_date < {$ctime} AND unpub_date!=0 AND published=1"; +$modx->db->update('published=0', '[+prefix+]site_content', $where); $num_rows_unpub = $modx->db->getAffectedRows(); ?> @@ -28,8 +29,8 @@
          - " . $_lang["refresh_published"] . "

          ", $num_rows_pub) ?> - " . $_lang["refresh_unpublished"] . "

          ", $num_rows_unpub) ?> + ' . $_lang["refresh_published"] . '

          ', $num_rows_pub) ?> + ' . $_lang["refresh_unpublished"] . '

          ', $num_rows_unpub) ?> clearCache('full', true); // invoke OnSiteRefresh event From fe3540b69ebc38ba453ce7c60274c2b7e7e3f2dc Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 16:30:06 +0900 Subject: [PATCH 141/577] Use file_put_contents() --- manager/includes/document.parser.class.inc.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index d4d6f85a5f..d936b41282 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -857,17 +857,19 @@ function postProcess() { // invoke OnBeforeSaveWebPageCache event $this->invokeEvent("OnBeforeSaveWebPageCache"); - if (!empty($this->cacheKey) && is_scalar($this->cacheKey) && $fp= @fopen(MODX_BASE_PATH.$this->getHashFile($this->cacheKey), "w")) { + if (!empty($this->cacheKey) && is_scalar($this->cacheKey)) { // get and store document groups inside document object. Document groups will be used to check security on cache pages - $rs = $this->db->select('document_group', $this->getFullTableName("document_groups"), "document='{$this->documentIdentifier}'"); - $docGroups= $this->db->getColumn("document_group", $rs); + $where = "document='{$this->documentIdentifier}'"; + $rs = $this->db->select('document_group', '[+prefix+]document_groups', $where); + $docGroups= $this->db->getColumn('document_group', $rs); // Attach Document Groups and Scripts if (is_array($docGroups)) $this->documentObject['__MODxDocGroups__'] = implode(",", $docGroups); $docObjSerial= serialize($this->documentObject); $cacheContent= $docObjSerial . "" . $this->documentContent; - fputs($fp, "$cacheContent"); + $page_cache_path = MODX_BASE_PATH.$this->getHashFile($this->cacheKey); + file_put_contents($page_cache_path, "$cacheContent"); fclose($fp); } } From 1b3f3dd2ccc4a3056f5420191dcead4c2dce90fb Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 16:32:00 +0900 Subject: [PATCH 142/577] Code cleanup and refactor - cache_sync.class.processor.php --- .../processors/cache_sync.class.processor.php | 685 +++++++++--------- 1 file changed, 332 insertions(+), 353 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index fb24a0d3ce..7369486e74 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -1,389 +1,368 @@ request_time = $_SERVER['REQUEST_TIME']+$modx->config['server_offset_time']; - } - - function setCachepath($path) - { - $this->cachePath = $path; - } - - function setReport($bool) - { - $this->showReport = $bool; - } - - function escapeDoubleQuotes($s) - { - $q1 = array("\\", '"', "\r", "\n", "\$"); - $q2 = array("\\\\", '\\"', "\\r", "\\n", "\\$"); - return str_replace($q1, $q2, $s); - } - - function escapeSingleQuotes($s) - { - if($s=='') return $s; - $q1 = array("\\", "'"); - $q2 = array("\\\\", "\\'"); - return str_replace($q1, $q2, $s); - } - - function getParents($id, $path = '') - { // modx:returns child's parent - global $modx; - if (empty($this->aliases)) { - $qh = $modx->db->select('id, IF(alias=\'\', id, alias) AS alias, parent, alias_visible', '[+prefix+]site_content'); - while ($row = $modx->db->getRow($qh)) { - $this->aliases[$row['id']] = $row['alias']; - $this->parents[$row['id']] = $row['parent']; - $this->aliasVisible[$row['id']] = $row['alias_visible']; - } - } - if (isset($this->aliases[$id])) { - $path = ($this->aliasVisible[$id] == 1 ? $this->aliases[$id] . ($path != '' ? '/' : '') . $path : $path); - return $this->getParents($this->parents[$id], $path); - } - return $path; - } - - function emptyCache($modx = null) - { - if (is_a($modx, 'DocumentParser') === false || get_class($modx) !== 'DocumentParser') { - $modx = $GLOBALS['modx']; - } - if (!isset($this->cachePath)) { - $modx->messageQuit("Cache path not set."); - } - $filesincache = 0; - $deletedfilesincache = 0; - - // New and improved! - $files = glob(realpath($this->cachePath) . '/*'); - $filesincache = count($files); - $deletedfiles = array(); - while ($file = array_shift($files)) { - $name = basename($file); - if (preg_match('/\.pageCache/', $name) && !in_array($name, $deletedfiles)) { - $deletedfilesincache++; - $deletedfiles[] = $name; - @unlink($file); - clearstatcache(); - } +class synccache +{ + var $cachePath; + var $showReport; + var $deletedfiles = array(); + var $aliases = array(); + var $parents = array(); + var $aliasVisible = array(); + var $request_time; + + + function __construct() { + global $modx; + + $this->request_time = $_SERVER['REQUEST_TIME']+$modx->config['server_offset_time']; + } + + function setCachepath($path) + { + $this->cachePath = $path; + } + + function setReport($bool) + { + $this->showReport = $bool; + } + + function getParents($id, $path = '') + { // modx:returns child's parent + global $modx; + if (empty($this->aliases)) { + $rs = $modx->db->select("d, IF(alias='', id, alias) AS alias, parent, alias_visible", '[+prefix+]site_content'); + while ($row = $modx->db->getRow($rs)) { + $docid = $row['id']; + $this->aliases[$docid] = $row['alias']; + $this->parents[$docid] = $row['parent']; + $this->aliasVisible[$docid] = $row['alias_visible']; + } + } + if (isset($this->aliases[$id])) { + if($this->aliasVisible[$id]==1) { + if($path!='') $path = $this->aliases[$id] . '/' . $path; + else $path = $this->aliases[$id]; + } + return $this->getParents($this->parents[$id], $path); + } + return $path; + } + + function emptyCache($modx = null) + { + if (is_a($modx, 'DocumentParser') === false || get_class($modx) !== 'DocumentParser') { + $modx = $GLOBALS['modx']; + } + if (!isset($this->cachePath)) { + $modx->messageQuit("Cache path not set."); + } + $filesincache = 0; + $deletedfilesincache = 0; + + // New and improved! + $files = glob(realpath($this->cachePath) . '/*.php'); + $filesincache = count($files); + $deletedfiles = array(); + while ($file = array_shift($files)) { + $name = basename($file); + if (strpos($name,'.pageCache/')!==false && !in_array($name, $deletedfiles)) { + $deletedfilesincache++; + $deletedfiles[] = $name; + @unlink($file); + clearstatcache(); } + } - $this->buildCache($modx); + $this->buildCache($modx); - $this->publishTimeConfig(); + $this->publishTimeConfig(); - // finished cache stuff. - if($this->showReport==true) { + // finished cache stuff. + if($this->showReport==true) { global $_lang; - printf($_lang['refresh_cache'], $filesincache, $deletedfilesincache); - $limit = count($deletedfiles); - if($limit > 0) { - echo '

          '.$_lang['cache_files_deleted'].'

            '; - for($i=0;$i<$limit; $i++) { - echo '
          • ',$deletedfiles[$i],'
          • '; - } - echo '
          '; + echo sprintf($_lang['refresh_cache'], $filesincache, $deletedfilesincache); + $limit = count($deletedfiles); + if($limit > 0) { + echo '

          '.$_lang['cache_files_deleted'].'

            '; + foreach($deletedfiles as $deletedfile) { + echo '
          • '.$deletedfile.'
          • '; } + echo '
          '; } } + } - public function publishTimeConfig($cacheRefreshTime='') - { - $cacheRefreshTimeFromDB = $this->getCacheRefreshTime(); - if(!preg_match('@^[0-9]+$]@',$cacheRefreshTime) || $cacheRefreshTimeFromDB < $cacheRefreshTime) - $cacheRefreshTime = $cacheRefreshTimeFromDB; + public function publishTimeConfig($cacheRefreshTime='') + { + $cacheRefreshTimeFromDB = $this->getCacheRefreshTime(); + if(!preg_match('@^[0-9]+$]@',$cacheRefreshTime) || $cacheRefreshTimeFromDB < $cacheRefreshTime) + $cacheRefreshTime = $cacheRefreshTimeFromDB; - // write the file - $content = array(); - $content[] = 'request_time); - $content[] = sprintf('$cacheRefreshTime = %s;', $cacheRefreshTime); + // write the file + $content = array(); + $content[] = 'request_time); + $content[] = sprintf('$cacheRefreshTime = %s;', $cacheRefreshTime); - $filename = $this->cachePath.'/sitePublishing.idx.php'; - if (!$handle = fopen($filename, 'w')) { - exit("Cannot open file ({$filename}"); - } + $filename = $this->cachePath.'/sitePublishing.idx.php'; + if (!$handle = fopen($filename, 'w')) { + exit("Cannot open file ({$filename}"); + } - // Write $somecontent to our opened file. - if (fwrite($handle, implode("\n",$content)) === FALSE) { - exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); - } + // Write $somecontent to our opened file. + if (fwrite($handle, implode("\n",$content)) === FALSE) { + exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); } + } - public function getCacheRefreshTime() - { - global $modx; + public function getCacheRefreshTime() + { + global $modx; - // update publish time file - $timesArr = array(); + // update publish time file + $timesArr = array(); - $result = $modx->db->select('MIN(pub_date) AS minpub', '[+prefix+]site_content', 'pub_date>'.$this->request_time); - if(!$result) echo "Couldn't determine next publish event!"; + $result = $modx->db->select('MIN(pub_date) AS minpub', '[+prefix+]site_content', 'pub_date>'.$this->request_time); + if(!$result) echo "Couldn't determine next publish event!"; - $minpub = $modx->db->getValue($result); - if($minpub!=NULL) - $timesArr[] = $minpub; + $minpub = $modx->db->getValue($result); + if($minpub!=NULL) + $timesArr[] = $minpub; - $result = $modx->db->select('MIN(unpub_date) AS minunpub', '[+prefix+]site_content', 'unpub_date>'.$this->request_time); - if(!$result) echo "Couldn't determine next unpublish event!"; + $result = $modx->db->select('MIN(unpub_date) AS minunpub', '[+prefix+]site_content', 'unpub_date>'.$this->request_time); + if(!$result) echo "Couldn't determine next unpublish event!"; - $minunpub = $modx->db->getValue($result); - if($minunpub!=NULL) - $timesArr[] = $minunpub; + $minunpub = $modx->db->getValue($result); + if($minunpub!=NULL) + $timesArr[] = $minunpub; - if(isset($this->cacheRefreshTime) && !empty($this->cacheRefreshTime)) - $timesArr[] = $this->cacheRefreshTime; + if(isset($this->cacheRefreshTime) && !empty($this->cacheRefreshTime)) + $timesArr[] = $this->cacheRefreshTime; - if(count($timesArr)>0) $cacheRefreshTime = min($timesArr); - else $cacheRefreshTime = 0; - return $cacheRefreshTime; - } + if(count($timesArr)>0) $cacheRefreshTime = min($timesArr); + else $cacheRefreshTime = 0; + return $cacheRefreshTime; + } - /** - * build siteCache file - * @param DocumentParser $modx - * @return boolean success - */ - public function buildCache($modx) { - $tmpPHP = "db->select('*', '[+prefix+]system_settings'); - $config = array(); - $tmpPHP .= '$c=&$this->config;'; - while(list($key,$value) = $modx->db->getRow($rs,'num')) { - $config[$key] = $value; - } - if ($config['enable_filter']) { - $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; - $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); - if ($count) $config['enable_filter'] = '0'; - } - foreach($config as $key=>$value) { - $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($key), $this->escapeDoubleQuotes($value)); - } + /** + * build siteCache file + * @param DocumentParser $modx + * @return boolean success + */ + public function buildCache($modx) { + $content = "aliasListing=array();'; - $tmpPHP .= '$a=&$this->aliasListing;'; - $tmpPHP .= '$d=&$this->documentListing;'; - $tmpPHP .= '$m=&$this->documentMap;'; - - if ($config['aliaslistingfolder'] == 1) { - $f['alias'] = "IF( c.alias='', c.id, c.alias)"; - $f['id'] = 'c.id'; - $f['parent'] = 'c.parent'; - $f['isfolder'] = 'c.isfolder'; - $f['alias_visible'] = 'c.alias_visible'; - $from = array(); - $from[] = '[+prefix+]site_content'; - $from[] = 'LEFT JOIN [+prefix+]site_content p ON p.id=c.parent'; - $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; - $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); - }else{ - $f = "IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible"; - $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); + // get settings + $rs = $modx->db->select('*', '[+prefix+]system_settings'); + $config = array(); + while(list($key,$value) = $modx->db->getRow($rs,'num')) { + $config[$key] = $value; + } + if ($config['enable_filter']) { + $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; + $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); + if ($count) $config['enable_filter'] = '0'; + } + $content .= sprintf('$this->config=%s;', var_export($config,true)); + + // get aliases modx: support for alias path + $tmpPath = ''; + + if ($config['aliaslistingfolder'] == 1) { + $f['alias'] = "IF( c.alias='', c.id, c.alias)"; + $f['id'] = 'c.id'; + $f['parent'] = 'c.parent'; + $f['isfolder'] = 'c.isfolder'; + $f['alias_visible'] = 'c.alias_visible'; + $from = array(); + $from[] = '[+prefix+]site_content'; + $from[] = 'LEFT JOIN [+prefix+]site_content p ON p.id=c.parent'; + $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; + $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); + }else{ + $f = "IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible"; + $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); + } + $documentListing = array(); + $aliasListing = array(); + $documentMap = array(); + while ($doc = $modx->db->getRow($rs)) { + $docid = $doc['id']; + if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { + $tmpPath = $this->getParents($doc['parent']); + $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; + $key = $alias; } - while ($doc = $modx->db->getRow($rs)) { - if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { - $tmpPath = $this->getParents($doc['parent']); - $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; - $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($alias), $doc['id'] ); - } else { - $tmpPHP .= sprintf('$d["%s"]=%s;', $this->escapeDoubleQuotes($doc['alias']), $doc['id'] ); + else $key = $doc['alias']; + $documentListing[$key] = $docid; + + $param = array(); + $param['id'] = $docid; + $param['alias'] = $doc['alias']; + $param['path'] = $tmpPath; + $param['parent'] = $doc['parent']; + $param['alias_visible'] = $doc['alias_visible']; + $param['isfolder'] = $doc['isfolder']; + $aliasListing[$docid] = $param; + $documentMap[] = array($doc['parent'], $docid); + } + + $content .= sprintf('$this->documentListing=%s;', var_export($documentListing,true)); + $content .= sprintf('$this->aliasListing=%s;', var_export($aliasListing,true)); + $content .= sprintf('$this->documentMap=%s;', var_export($documentMap,true)); + + // get content types + $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType!='text/html'"); + $contentType = array(); + while ($doc = $modx->db->getRow($rs)) { + $docid = $doc['id']; + $contentType[$docid] = $doc['contentType']; + } + $content .= sprintf('$this->contentType=%s;', var_export($contentType,true)); + + // WRITE Chunks to cache file + $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); + $chunkCache = array(); + while ($doc = $modx->db->getRow($rs)) { + $code = (!$doc['disabled']) ? $doc['snippet'] : ''; + $key = $doc['name']; + $chunkCache[$key] = $code; + } + $content .= sprintf('$this->chunkCache=%s;', var_export($chunkCache,true)); + + // WRITE snippets to cache file + $f = 'ss.*, sm.properties as sharedproperties'; + $from = '[+prefix+]site_snippets ss LEFT JOIN [+prefix+]site_modules sm on sm.guid=ss.moduleguid'; + $rs = $modx->db->select($f,$from); + $snippetCache = array(); + while ($row = $modx->db->getRow($rs)) { + $key = $row['name']; + if($row['disabled']) $snippetCache[$key] = 'return false;'; + else { + $value = trim($row['snippet']); + if($modx->config['minifyphp_incache']) $value = $this->php_strip_whitespace($value); + $snippetCache[$key] = $value; + $properties = $modx->parseProperties($row['properties']); + $sharedproperties = $modx->parseProperties($row['sharedproperties']); + $properties = array_merge($sharedproperties,$properties); + if (0escapeDoubleQuotes($doc['alias']); - if($tmpPath) $tmpPath = $this->escapeDoubleQuotes($tmpPath); - $param = array($doc['id'],$doc['alias'],$tmpPath,$doc['parent'],$doc['alias_visible'],$doc['isfolder']); - $tpl = '$a[%1$s]=array("id"=>%1$s,"alias"=>"%2$s","path"=>"%3$s","parent"=>%4$s,"alias_visible"=>%5$s,"isfolder"=>%6$s);'; - $tmpPHP .= vsprintf($tpl, $param); - $tmpPHP .= sprintf('$m[]=array("%s"=>"%s");', $doc['parent'], $doc['id']); } - - // get content types - $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType != 'text/html'"); - $tmpPHP .= '$c = &$this->contentTypes;'; - while ($doc = $modx->db->getRow($rs)) { - $tmpPHP .= sprintf('$c[%s]="%s";', $doc['id'], $this->escapeDoubleQuotes($doc['contentType'])); + } + $content .= sprintf('$this->snippetCache=%s;', var_export($snippetCache,true)); + + // WRITE plugins to cache file + $f = 'sp.*, sm.properties as sharedproperties'; + $from = array(); + $from[] = '[+prefix+]site_plugins sp'; + $from[] = 'LEFT JOIN [+prefix+]site_modules sm on sm.guid=sp.moduleguid'; + $rs = $modx->db->select($f,$from,'sp.disabled=0'); + $pluginCache = array(); + while ($row = $modx->db->getRow($rs)) { + $key = $row['name']; + $value = trim($row['plugincode']); + if($modx->config['minifyphp_incache']) $value = $this->php_strip_whitespace($value); + $pluginCache[$key] = $value; + if ($row['properties'] != '' || $row['sharedproperties'] != '') { + $pluginCache[$key.'Props'] = trim($row['properties'] . ' ' . $row['sharedproperties']); } + } + $content .= sprintf('$this->pluginCache=%s;', var_export($pluginCache,true)); + + // WRITE system event triggers + $f = 'sysevt.name as evtname, event.pluginid, plugin.name as pname'; + $from = array(); + $from[] = '[+prefix+]system_eventnames sysevt'; + $from[] = 'INNER JOIN [+prefix+]site_plugin_events event ON event.evtid=sysevt.id'; + $from[] = 'INNER JOIN [+prefix+]site_plugins plugin ON plugin.id=event.pluginid'; + $rs = $modx->db->select($f,$from, 'plugin.disabled=0', 'sysevt.name, event.priority'); + $pluginEvent = array(); + $events = array(); + while ($row = $modx->db->getRow($rs)) { + $evtname = $row['evtname']; + if (!isset($events[$evtname])) $events[$evtname] = array(); + $events[$evtname][] = $row['pname']; + } + foreach ($events as $evtname => $pluginnames) { + $events[$evtname] = $pluginnames; + } + $content .= sprintf('$this->pluginEvent=%s;', var_export($events,true)); - // WRITE Chunks to cache file - $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); - $tmpPHP .= '$c = &$this->chunkCache;'; - while ($doc = $modx->db->getRow($rs)) { - /** without trim */ - $code = (!$doc['disabled']) ? $this->escapeDoubleQuotes($doc['snippet']) : ''; - $tmpPHP .= sprintf('$c["%s"]="%s";', $this->escapeDoubleQuotes($doc['name']), $code); - } + // close and write the file + $filename = $this->cachePath . 'siteCache.idx.php'; - // WRITE snippets to cache file - $rs = $modx->db->select( - 'ss.*, sm.properties as sharedproperties', - '[+prefix+]site_snippets ss LEFT JOIN [+prefix+]site_modules sm on sm.guid=ss.moduleguid' - ); - $tmpPHP .= '$s=&$this->snippetCache;'; - while ($row = $modx->db->getRow($rs)) { - $name = $this->escapeSingleQuotes($row['name']); - if($row['disabled']) { - $tmpPHP .= sprintf("\$s['%s']='%s';", $name, "return false;"); - $tmpPHP .= sprintf("\$s['%sProps']='%s';", $name, ''); - } else { - $code = trim($row['snippet']); - if($modx->config['minifyphp_incache']) - $code = $this->php_strip_whitespace($code); - $code = $this->escapeSingleQuotes($code); - $properties = $modx->parseProperties($row['properties']); - $sharedproperties = $modx->parseProperties($row['sharedproperties']); - $properties = array_merge($sharedproperties,$properties); - $tmpPHP .= sprintf("\$s['%s']='%s';", $name, $code); - if (0escapeSingleQuotes($properties); - $tmpPHP .= sprintf("\$s['%sProps']='%s';", $name, $properties); - } - } - } - - // WRITE plugins to cache file - $rs = $modx->db->select( - 'sp.*, sm.properties as sharedproperties', - '[+prefix+]site_plugins sp LEFT JOIN [+prefix+]site_modules sm on sm.guid=sp.moduleguid', - 'sp.disabled=0'); - $tmpPHP .= '$p=&$this->pluginCache;'; - while ($row = $modx->db->getRow($rs)) { - $name = $this->escapeSingleQuotes($row['name']); - $code = trim($row['plugincode']); - if($modx->config['minifyphp_incache']) - $code = $this->php_strip_whitespace($code); - $tmpPHP .= sprintf("\$p['%s']='%s';", $name, $this->escapeSingleQuotes($code)); - if ($row['properties'] != '' || $row['sharedproperties'] != '') { - $k = $name; - $v = $this->escapeSingleQuotes($row['properties'] . ' ' . $row['sharedproperties']); - $tmpPHP .= sprintf("\$p['%sProps']='%s';", $k, $v); - } - } - - // WRITE system event triggers - $events = array(); - $f = 'sysevt.name as evtname, event.pluginid, plugin.name'; - $from = array(); - $from[] = '[+prefix+]system_eventnames sysevt'; - $from[] = 'INNER JOIN [+prefix+]site_plugin_events event ON event.evtid=sysevt.id'; - $from[] = 'INNER JOIN [+prefix+]site_plugins plugin ON plugin.id=event.pluginid'; - $rs = $modx->db->select($f,$from, 'plugin.disabled=0', 'sysevt.name, event.priority'); - $tmpPHP .= '$e = &$this->pluginEvent;'; - while ($evt = $modx->db->getRow($rs)) { - if (!isset($events[$evt['evtname']])) { - $events[$evt['evtname']] = array(); - } - $events[$evt['evtname']][] = $evt['name']; - } - foreach ($events as $evtname => $pluginnames) { - $param = array($this->escapeDoubleQuotes($evtname), join('","', $this->escapeDoubleQuotes($pluginnames))); - $tmpPHP .= vsprintf('$e["%s"]=array("%s");', $param); - } - - // close and write the file - $filename = $this->cachePath . 'siteCache.idx.php'; - $somecontent = $tmpPHP; - - // invoke OnBeforeCacheUpdate event - if ($modx) $modx->invokeEvent('OnBeforeCacheUpdate'); - - if (!$handle = fopen($filename, 'w')) { - exit("Cannot open file ({$filename}"); - } - - if (!is_file($this->cachePath . '/.htaccess')) { - file_put_contents($this->cachePath . '/.htaccess', "order deny,allow\ndeny from all\n"); - } - - // Write $somecontent to our opened file. - if (fwrite($handle, $somecontent) === FALSE) { - exit("Cannot write main MODX cache file! Make sure the assets/cache directory is writable!"); - } - fclose($handle); - - // invoke OnCacheUpdate event - if ($modx) $modx->invokeEvent('OnCacheUpdate'); - - return true; - } - - // ref : http://php.net/manual/en/tokenizer.examples.php - function php_strip_whitespace($source) { + // invoke OnBeforeCacheUpdate event + if ($modx) $modx->invokeEvent('OnBeforeCacheUpdate'); + + if (@file_put_contents($filename, $content)===false) { + exit("Cannot write main MODX cache file! Make sure the assets/cache directory is writable!"); + } + + if (!is_file($this->cachePath . '/.htaccess')) { + file_put_contents($this->cachePath . '/.htaccess', "order deny,allow\ndeny from all\n"); + } + + // invoke OnCacheUpdate event + if ($modx) $modx->invokeEvent('OnCacheUpdate'); + + return true; + } + + // ref : http://php.net/manual/en/tokenizer.examples.php + function php_strip_whitespace($source) { + + $source = trim($source); + if(substr($source,0,5)!=='$token) { + if (is_string($token)) { + if(in_array($token,array('=',':'))) + $_ = trim($_); + elseif(in_array($token,array('(','{')) && in_array($prev_token,array(T_IF,T_ELSE,T_ELSEIF))) + $_ = trim($_); + $_ .= $token; + continue; + } - $source = trim($source); - if(substr($source,0,5)!=='$token) { - if (is_string($token)) { - if(in_array($token,array('=',':'))) - $_ = trim($_); - elseif(in_array($token,array('(','{')) && in_array($prev_token,array(T_IF,T_ELSE,T_ELSEIF))) - $_ = trim($_); - $_ .= $token; - continue; - } - - list($type, $text) = $token; - - switch ($type) { - case T_COMMENT : - case T_DOC_COMMENT: - break; - case T_WHITESPACE : - $_ = trim($_); - $lastChar = substr($_,-1); - if( !in_array($lastChar,$chars ) ) {// ,320,327,288,284,289 - if(!in_array($prev_token,array(T_FOREACH,T_WHILE,T_FOR,T_BOOLEAN_AND,T_BOOLEAN_OR,T_DOUBLE_ARROW))) - $_ .= ' '; - } - break; - case T_IS_EQUAL : - case T_IS_IDENTICAL : - case T_IS_NOT_EQUAL : - case T_DOUBLE_ARROW : - case T_BOOLEAN_AND : - case T_BOOLEAN_OR : - $prev_token=$type; - $_ = trim($_); - $_ .= $text; - break; - default: - $prev_token=$type; - $_ .= $text; - } + switch ($type) { + case T_COMMENT : + case T_DOC_COMMENT: + break; + case T_WHITESPACE : + $_ = trim($_); + $lastChar = substr($_,-1); + if( !in_array($lastChar,$chars ) ) {// ,320,327,288,284,289 + if(!in_array($prev_token,array(T_FOREACH,T_WHILE,T_FOR,T_BOOLEAN_AND,T_BOOLEAN_OR,T_DOUBLE_ARROW))) + $_ .= ' '; + } + break; + case T_IS_EQUAL : + case T_IS_IDENTICAL : + case T_IS_NOT_EQUAL : + case T_DOUBLE_ARROW : + case T_BOOLEAN_AND : + case T_BOOLEAN_OR : + $prev_token=$type; + $_ = trim($_); + $_ .= $text; + break; + default: + $prev_token=$type; + $_ .= $text; } - $source = preg_replace('@^<\?php@', '', $_); - $source = trim($source); - return $source; } - } + $source = preg_replace('@^<\?php@i', '', $_); + $source = trim($source); + return $source; + } } From 30c87fe2316bc821f22e412dbe5abde44846c6c8 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 17:42:39 +0900 Subject: [PATCH 143/577] Code cleanup - indent --- manager/processors/save_content.processor.php | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index dd9feae6f1..a0b5d8d078 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -83,16 +83,16 @@ $alias = $tempAlias; } }else{ - if ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND parent=$parent AND alias='$alias'")) != 0) { - $cnt = 1; - $tempAlias = $alias; - while ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND parent=$parent AND alias='$tempAlias'")) != 0) { - $tempAlias = $alias; - $tempAlias .= $cnt; - $cnt++; - } - $alias = $tempAlias; - } + if ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND parent=$parent AND alias='$alias'")) != 0) { + $cnt = 1; + $tempAlias = $alias; + while ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND parent=$parent AND alias='$tempAlias'")) != 0) { + $tempAlias = $alias; + $tempAlias .= $cnt; + $cnt++; + } + $alias = $tempAlias; + } } } @@ -121,15 +121,15 @@ $alias = $modx->stripAlias($alias); //webber $docid = $modx->db->getValue($modx->db->select('id', $tbl_site_content, "id<>'$id' AND alias='$alias' AND parent=$parent", '', 1)); - if ($docid > 0) { - if ($actionToTake == 'edit') { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=27&id={$id}"); - } else { - $modx->manager->saveFormValues(4); - $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=4"); - } - } + if ($docid > 0) { + if ($actionToTake == 'edit') { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=27&id={$id}"); + } else { + $modx->manager->saveFormValues(4); + $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=4"); + } + } //end webber } } From de463193d90c344f295bc1ca95632b0ba4aa25f7 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 17:58:14 +0900 Subject: [PATCH 144/577] Code cleanup - Remove file ending "?>" --- manager/actions/resources.static.php | 2 +- manager/processors/access_groups.processor.php | 1 - manager/processors/delete_category.processor.php | 1 - manager/processors/delete_content.processor.php | 1 - manager/processors/delete_eventlog.processor.php | 1 - manager/processors/delete_htmlsnippet.processor.php | 1 - manager/processors/delete_message.processor.php | 1 - manager/processors/delete_module.processor.php | 1 - manager/processors/delete_plugin.processor.php | 1 - manager/processors/delete_role.processor.php | 1 - manager/processors/delete_snippet.processor.php | 1 - manager/processors/delete_template.processor.php | 1 - manager/processors/delete_user.processor.php | 1 - manager/processors/delete_web_user.processor.php | 1 - manager/processors/duplicate_content.processor.php | 2 -- manager/processors/duplicate_htmlsnippet.processor.php | 1 - manager/processors/duplicate_module.processor.php | 1 - manager/processors/duplicate_plugin.processor.php | 1 - manager/processors/duplicate_snippet.processor.php | 1 - manager/processors/duplicate_template.processor.php | 1 - manager/processors/duplicate_tmplvars.processor.php | 1 - manager/processors/empty_table.processor.php | 1 - manager/processors/logout.processor.php | 1 - manager/processors/optimize_table.processor.php | 1 - manager/processors/publish_content.processor.php | 1 - manager/processors/remove_content.processor.php | 1 - manager/processors/remove_installer.processor.php | 1 - manager/processors/remove_locks.processor.php | 1 - manager/processors/save_content.processor.php | 2 -- manager/processors/save_password.processor.php | 1 - manager/processors/send_message.processor.php | 1 - manager/processors/undelete_content.processor.php | 1 - manager/processors/unpublish_content.processor.php | 1 - manager/processors/user_documents_permissions.class.php | 2 -- manager/processors/web_access_groups.processor.php | 1 - 35 files changed, 1 insertion(+), 38 deletions(-) diff --git a/manager/actions/resources.static.php b/manager/actions/resources.static.php index ee692a4708..a61fa155c7 100644 --- a/manager/actions/resources.static.php +++ b/manager/actions/resources.static.php @@ -107,4 +107,4 @@ } ?>
          -
          \ No newline at end of file +
        diff --git a/manager/processors/access_groups.processor.php b/manager/processors/access_groups.processor.php index 14a5c14dbc..469941ab38 100755 --- a/manager/processors/access_groups.processor.php +++ b/manager/processors/access_groups.processor.php @@ -129,4 +129,3 @@ $header = "Location: index.php?a=40"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_category.processor.php b/manager/processors/delete_category.processor.php index d3c66a540c..733f9d0229 100644 --- a/manager/processors/delete_category.processor.php +++ b/manager/processors/delete_category.processor.php @@ -19,4 +19,3 @@ // finished emptying cache - redirect $header="Location: index.php?a=76"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_content.processor.php b/manager/processors/delete_content.processor.php index e0b9dc91c3..9d7ced9ada 100644 --- a/manager/processors/delete_content.processor.php +++ b/manager/processors/delete_content.processor.php @@ -123,4 +123,3 @@ function getChildren($parent) { // finished emptying cache - redirect $header="Location: index.php?a=3&id=$pid&r=1".$add_path; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_eventlog.processor.php b/manager/processors/delete_eventlog.processor.php index d19f7a75fc..722936af8a 100644 --- a/manager/processors/delete_eventlog.processor.php +++ b/manager/processors/delete_eventlog.processor.php @@ -19,4 +19,3 @@ $header="Location: index.php?a=114"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_htmlsnippet.processor.php b/manager/processors/delete_htmlsnippet.processor.php index 9842eaf3e8..2ab2bee33a 100755 --- a/manager/processors/delete_htmlsnippet.processor.php +++ b/manager/processors/delete_htmlsnippet.processor.php @@ -34,4 +34,3 @@ // finished emptying cache - redirect $header="Location: index.php?a=76&r=2"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_message.processor.php b/manager/processors/delete_message.processor.php index f675effa65..4522b83b16 100755 --- a/manager/processors/delete_message.processor.php +++ b/manager/processors/delete_message.processor.php @@ -25,4 +25,3 @@ $header="Location: index.php?a=10"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_module.processor.php b/manager/processors/delete_module.processor.php index bde0bdbe04..8dc8b6e4bb 100644 --- a/manager/processors/delete_module.processor.php +++ b/manager/processors/delete_module.processor.php @@ -40,4 +40,3 @@ // finished emptying cache - redirect $header="Location: index.php?a=106&r=2"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_plugin.processor.php b/manager/processors/delete_plugin.processor.php index e84703ec96..8428e7a933 100755 --- a/manager/processors/delete_plugin.processor.php +++ b/manager/processors/delete_plugin.processor.php @@ -37,4 +37,3 @@ // finished emptying cache - redirect $header="Location: index.php?a=76&r=2"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_role.processor.php b/manager/processors/delete_role.processor.php index 79e6a5ff43..539a32cabf 100755 --- a/manager/processors/delete_role.processor.php +++ b/manager/processors/delete_role.processor.php @@ -28,4 +28,3 @@ $header="Location: index.php?a=86"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_snippet.processor.php b/manager/processors/delete_snippet.processor.php index 6325c6d8b5..5473a9107a 100755 --- a/manager/processors/delete_snippet.processor.php +++ b/manager/processors/delete_snippet.processor.php @@ -34,4 +34,3 @@ // finished emptying cache - redirect $header="Location: index.php?a=76&r=2"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_template.processor.php b/manager/processors/delete_template.processor.php index df888fc216..6f39f7e2d0 100644 --- a/manager/processors/delete_template.processor.php +++ b/manager/processors/delete_template.processor.php @@ -69,4 +69,3 @@ // finished emptying cache - redirect $header = "Location: index.php?a=76&r=2"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_user.processor.php b/manager/processors/delete_user.processor.php index 7c93c97700..adf013242f 100755 --- a/manager/processors/delete_user.processor.php +++ b/manager/processors/delete_user.processor.php @@ -50,4 +50,3 @@ $header="Location: index.php?a=75"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/delete_web_user.processor.php b/manager/processors/delete_web_user.processor.php index ad660a9682..e0b0b592bf 100755 --- a/manager/processors/delete_web_user.processor.php +++ b/manager/processors/delete_web_user.processor.php @@ -43,4 +43,3 @@ $header="Location: index.php?a=99"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/duplicate_content.processor.php b/manager/processors/duplicate_content.processor.php index 718e06527c..1b609ee37f 100755 --- a/manager/processors/duplicate_content.processor.php +++ b/manager/processors/duplicate_content.processor.php @@ -157,5 +157,3 @@ function duplicateAccess($oldid,$newid){ "{$newid}, document_group", $tbldg, "document='{$oldid}'" // Copy from ); } - -?> diff --git a/manager/processors/duplicate_htmlsnippet.processor.php b/manager/processors/duplicate_htmlsnippet.processor.php index c5b6fe0cdd..e144788476 100755 --- a/manager/processors/duplicate_htmlsnippet.processor.php +++ b/manager/processors/duplicate_htmlsnippet.processor.php @@ -32,4 +32,3 @@ // finish duplicating - redirect to new chunk $header="Location: index.php?r=2&a=78&id=$newid"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/duplicate_module.processor.php b/manager/processors/duplicate_module.processor.php index 91e38cdc1a..dd998e0316 100644 --- a/manager/processors/duplicate_module.processor.php +++ b/manager/processors/duplicate_module.processor.php @@ -68,4 +68,3 @@ function createGUID(){ // finish duplicating - redirect to new module $header="Location: index.php?r=2&a=108&id=$newid"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/duplicate_plugin.processor.php b/manager/processors/duplicate_plugin.processor.php index 737e2f7d52..593309de04 100755 --- a/manager/processors/duplicate_plugin.processor.php +++ b/manager/processors/duplicate_plugin.processor.php @@ -44,4 +44,3 @@ // finish duplicating - redirect to new plugin $header="Location: index.php?r=2&a=102&id=$newid"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/duplicate_snippet.processor.php b/manager/processors/duplicate_snippet.processor.php index fb11df7238..cf819dc944 100755 --- a/manager/processors/duplicate_snippet.processor.php +++ b/manager/processors/duplicate_snippet.processor.php @@ -33,4 +33,3 @@ // finish duplicating - redirect to new snippet $header="Location: index.php?r=2&a=22&id=$newid"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/duplicate_template.processor.php b/manager/processors/duplicate_template.processor.php index e6ffeb36c6..78cd8daacb 100755 --- a/manager/processors/duplicate_template.processor.php +++ b/manager/processors/duplicate_template.processor.php @@ -41,4 +41,3 @@ // finish duplicating - redirect to new template $header="Location: index.php?r=2&a=16&id=$newid"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/duplicate_tmplvars.processor.php b/manager/processors/duplicate_tmplvars.processor.php index f652accdfb..7006dc4e58 100755 --- a/manager/processors/duplicate_tmplvars.processor.php +++ b/manager/processors/duplicate_tmplvars.processor.php @@ -56,4 +56,3 @@ // finish duplicating - redirect to new variable $header="Location: index.php?r=2&a=301&id=$newid"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/empty_table.processor.php b/manager/processors/empty_table.processor.php index cac0910180..4332251370 100755 --- a/manager/processors/empty_table.processor.php +++ b/manager/processors/empty_table.processor.php @@ -8,4 +8,3 @@ $header="Location: index.php?a=13"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/logout.processor.php b/manager/processors/logout.processor.php index 5bcd712152..467596d88f 100755 --- a/manager/processors/logout.processor.php +++ b/manager/processors/logout.processor.php @@ -40,4 +40,3 @@ // show login screen header('Location: ' . MODX_MANAGER_URL); -?> \ No newline at end of file diff --git a/manager/processors/optimize_table.processor.php b/manager/processors/optimize_table.processor.php index d921dde678..17f42f787c 100755 --- a/manager/processors/optimize_table.processor.php +++ b/manager/processors/optimize_table.processor.php @@ -33,4 +33,3 @@ $mode = intval($_REQUEST['mode']); $header="Location: index.php?a={$mode}&s=4"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/publish_content.processor.php b/manager/processors/publish_content.processor.php index fb5864abc1..88188d843c 100644 --- a/manager/processors/publish_content.processor.php +++ b/manager/processors/publish_content.processor.php @@ -58,4 +58,3 @@ $header="Location: index.php?a=3&id=$pid&r=1".$add_path; header($header); -?> \ No newline at end of file diff --git a/manager/processors/remove_content.processor.php b/manager/processors/remove_content.processor.php index fa06b5d643..ad9d1865e2 100644 --- a/manager/processors/remove_content.processor.php +++ b/manager/processors/remove_content.processor.php @@ -42,4 +42,3 @@ // finished emptying cache - redirect $header="Location: index.php?a=2&r=1"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/remove_installer.processor.php b/manager/processors/remove_installer.processor.php index 70748f860f..68d2da9b91 100644 --- a/manager/processors/remove_installer.processor.php +++ b/manager/processors/remove_installer.processor.php @@ -37,4 +37,3 @@ function rmdirRecursive($path,$followLinks=false) { closedir($dir); return @rmdir($path); } -?> \ No newline at end of file diff --git a/manager/processors/remove_locks.processor.php b/manager/processors/remove_locks.processor.php index f42715fd48..f562c262fb 100644 --- a/manager/processors/remove_locks.processor.php +++ b/manager/processors/remove_locks.processor.php @@ -22,4 +22,3 @@ echo 'No type or id sent with request.'; } } -?> \ No newline at end of file diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index a0b5d8d078..22e2f9cb73 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -696,5 +696,3 @@ default : $modx->webAlertAndQuit("No operation set in request."); } - -?> diff --git a/manager/processors/save_password.processor.php b/manager/processors/save_password.processor.php index 3bf6bd12b0..166bfcda70 100644 --- a/manager/processors/save_password.processor.php +++ b/manager/processors/save_password.processor.php @@ -32,4 +32,3 @@ $header="Location: index.php?a=2"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/send_message.processor.php b/manager/processors/send_message.processor.php index 8a9f9217b7..4e0650269c 100755 --- a/manager/processors/send_message.processor.php +++ b/manager/processors/send_message.processor.php @@ -67,4 +67,3 @@ $header = "Location: index.php?a=10"; header($header); -?> \ No newline at end of file diff --git a/manager/processors/undelete_content.processor.php b/manager/processors/undelete_content.processor.php index c9d4adc725..60230c88a0 100644 --- a/manager/processors/undelete_content.processor.php +++ b/manager/processors/undelete_content.processor.php @@ -90,4 +90,3 @@ function getChildren($parent) { // finished emptying cache - redirect $header="Location: index.php?a=3&id=$pid&r=1".$add_path; header($header); -?> \ No newline at end of file diff --git a/manager/processors/unpublish_content.processor.php b/manager/processors/unpublish_content.processor.php index 980941fda4..c79d4594f5 100644 --- a/manager/processors/unpublish_content.processor.php +++ b/manager/processors/unpublish_content.processor.php @@ -58,4 +58,3 @@ $header="Location: index.php?a=3&id=$pid&r=1".$add_path; header($header); -?> \ No newline at end of file diff --git a/manager/processors/user_documents_permissions.class.php b/manager/processors/user_documents_permissions.class.php index ff74c679af..249146851e 100755 --- a/manager/processors/user_documents_permissions.class.php +++ b/manager/processors/user_documents_permissions.class.php @@ -61,5 +61,3 @@ function checkPermissions() { return $permissionsok; } } - -?> diff --git a/manager/processors/web_access_groups.processor.php b/manager/processors/web_access_groups.processor.php index a7143988a2..1dd2df9cd6 100755 --- a/manager/processors/web_access_groups.processor.php +++ b/manager/processors/web_access_groups.processor.php @@ -127,4 +127,3 @@ $header = "Location: index.php?a=91"; header($header); -?> \ No newline at end of file From bac72aca0551a2a15d8f9fc48995abc27ee99113 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 18:38:44 +0900 Subject: [PATCH 145/577] Use $_SERVER['REQUEST_TIME'] --- manager/processors/save_content.processor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index 22e2f9cb73..7981f7a23a 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -138,7 +138,7 @@ } // determine published status -$currentdate = time() + $modx->config['server_offset_time']; +$currentdate = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; if (empty ($pub_date)) { $pub_date = 0; @@ -452,7 +452,7 @@ $modx->manager->saveFormValues(27); $modx->webAlertAndQuit("Document is linked to site_start variable and cannot be unpublished!"); } - $today = time(); + $today = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; if ($id == $site_start && ($pub_date > $today || $unpub_date != "0")) { $modx->manager->saveFormValues(27); $modx->webAlertAndQuit("Document is linked to site_start variable and cannot have publish or unpublish dates set!"); From 7c481bd604d82781a45bb1bb7b1958525b899deb Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 17 Sep 2017 18:39:22 +0900 Subject: [PATCH 146/577] Code cleanup --- manager/processors/save_content.processor.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index 7981f7a23a..0a3729d024 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -657,10 +657,9 @@ $keys = array('alias','parent','published'); $flag = ''; foreach($keys as $key) { - if ($existingDocument[$key]!==$_POST[$key]) { - $flag = 'full'; - break; - } + if ($existingDocument[$key]===$_POST[$key]) continue; + $flag = 'full'; + break; } if($flag==='full') $modx->clearCache('full'); else $modx->clearCache($id); From be728411270e02cf7fb6811c99551dfd6f287b13 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 17 Sep 2017 18:56:54 +0300 Subject: [PATCH 147/577] stabilize tabpane tabs if not found tabpane.js --- manager/media/style/default/css/tabpane.css | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/manager/media/style/default/css/tabpane.css b/manager/media/style/default/css/tabpane.css index bea2d93c19..a0d5a8da1f 100644 --- a/manager/media/style/default/css/tabpane.css +++ b/manager/media/style/default/css/tabpane.css @@ -1,8 +1,8 @@ /* [ Tabs ] */ .tab-row { position: relative; z-index: 1; white-space: nowrap; padding: 0 1.5rem } .tab-row::after, .tab-row-container::after { content: ""; position: absolute; z-index: 1; left: 0; right: 0; bottom: 0; height: 1px; background-color: #ddd } -.tab-row .tab { position: relative; display: inline-block; margin: 0; padding: 0 0.875rem; line-height: 2.7rem; height: 2.5rem; text-transform: uppercase; border: 1px solid rgba(0, 0, 0, 0); border-bottom: none; cursor: pointer; -webkit-user-select: none; user-select: none; } -.tab-row .tab, .tab-row .tab a { color: rgba(0, 0, 0, 0.6); font-size: 0.75rem } +.tab-row .tab, .tab-pane > .tab-page > .tab { position: relative; display: inline-block; margin: 0; padding: 0 0.875rem; line-height: 2.7rem; height: 2.5rem; text-transform: uppercase; border: 1px solid rgba(0, 0, 0, 0); border-bottom: none; cursor: pointer; -webkit-user-select: none; user-select: none; } +.tab-row .tab, .tab-row .tab a, .tab-pane > .tab-page > .tab { color: rgba(0, 0, 0, 0.6); font-size: 0.75rem } .tab-row .tab.selected { z-index: 2; border-color: #ddd; background-color: #fff; color: #444; font-weight: 700 } .tab-row .tab .fa { margin-right: 0.1em; font-size: 0.875rem } /* tabs-container */ @@ -14,6 +14,12 @@ .tab-row-container > i.next { right: 0; } .tab-row-container > i.disable { font-size: 0.8rem; color: rgba(0, 0, 0, 0.2); pointer-events: none } /* tab-page */ +.tab-pane > .tab-page { display: none } +.tab-pane > .tab-page:first-of-type { display: block; margin-top: 2.5rem; } +.tab-pane > .tab-page > .tab { top: -2.5rem; left: 1.5rem; background-color: #f9f9f9; border-color: #ddd; } +.sectionBody > .tab-pane > .tab-page > .tab { top: -3.7rem; left: 0.3rem; } +.tab-pane > .tab-page > div:first-of-type, .tab-pane > .tab-page > table { margin-top: -2.5rem } +.dynamic-tab-pane-control.tab-pane > .tab-page > div:first-of-type, .dynamic-tab-pane-control.tab-pane > .tab-page > table { margin-top: 0 } .tab-page { clear: both; width: 100%; background-color: #fff; padding: 0; border: 0; border-radius: 0; box-shadow: 0 0 0.3rem 0 rgba(0, 0, 0, .1) } .tab-page .tab-header, .sectionHeader { margin-top: 1em; padding: .5rem 1.25rem; letter-spacing: .03rem } .tab-page .tab-header + .tab-header, .tab-page .sectionHeader + .sectionHeader { margin-top: 0; border-top: 1px solid #ccc; } From ad40f8edd0754f57536929825f691343e8b8ab5f Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 17 Sep 2017 19:12:18 +0300 Subject: [PATCH 148/577] update modx.js fix close tabs --- manager/media/style/default/js/modx.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 18a62726a0..ba8e7557c1 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -1558,9 +1558,9 @@ w.main = e.target.contentWindow; o.url = w.main.location.search || w.location.hash; o.uid = modx.urlToUid(o.url); - tab = d.getElementById('evo-tab-' + o.uid) || null; tabpage = e.target.parentNode; if (!!w.main.__alertQuit) { + tab = d.getElementById('evo-tab-' + o.uid) || null; var message = w.main.document.body.querySelector('p').innerHTML; w.main.alert = function() {}; history.pushState(null, d.title, modx.getActionFromUrl(w.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.location.search); @@ -1584,6 +1584,7 @@ }); } else { var old_uid = tabpage.id.replace('evo-tab-page-', ''); + tab = d.getElementById('evo-tab-' + old_uid); if (modx.getActionFromUrl(o.url, 2)) { tabpage.close(); } else if (old_uid !== o.uid && d.getElementById('evo-tab-' + o.uid)) { From d36e93fb09f4e1caac10ef98ca93f7aca85baf3d Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 09:21:07 +0900 Subject: [PATCH 149/577] Fix bug --- manager/processors/cache_sync.class.processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 7369486e74..6bb4ca8365 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -65,7 +65,7 @@ function emptyCache($modx = null) $deletedfiles = array(); while ($file = array_shift($files)) { $name = basename($file); - if (strpos($name,'.pageCache/')!==false && !in_array($name, $deletedfiles)) { + if (strpos($name,'.pageCache.php')!==false && !in_array($name, $deletedfiles)) { $deletedfilesincache++; $deletedfiles[] = $name; @unlink($file); From 36951572d357a91fe0acf1aec238841b7e0f2f7a Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 10:19:45 +0900 Subject: [PATCH 150/577] [I] $modx->clearCache() $modx->clearCache(array(1,2,3,4,5)) --- .../includes/document.parser.class.inc.php | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index d936b41282..017f528330 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -3283,25 +3283,33 @@ function getSnippetName() { * @return boolean */ function clearCache($type='', $report=false) { - if ($type=='full') { + $cache_dir = MODX_BASE_PATH . $this->getCacheFolder(); + if(is_array($type)) { + foreach($type as $_) { + $this->clearCache($_,$report); + } + } elseif ($type=='full') { include_once(MODX_MANAGER_PATH . 'processors/cache_sync.class.processor.php'); $sync = new synccache(); - $sync->setCachepath(MODX_BASE_PATH . $this->getCacheFolder()); + $sync->setCachepath($cache_dir); $sync->setReport($report); $sync->emptyCache(); } elseif(preg_match('@^[1-9][0-9]*$@',$type)) { $key = ($this->config['cache_type'] == 2) ? $this->makePageCacheKey($type) : $type; $file_name = "docid_" . $key . "_*.pageCache.php"; - $cache_path = MODX_BASE_PATH . $this->getCacheFolder() . $file_name; + $cache_path = $cache_dir . $file_name; $files = glob($cache_path); + $files[] = $cache_dir . "docid_" . $key . ".pageCache.php"; foreach($files as $file) { - if(is_file($file)) unlink($file); + if (!is_file($file)) continue; + unlink($file); } } else { - $files = glob(MODX_BASE_PATH . $this->getCacheFolder().'*'); + $files = glob($cache_dir.'*'); foreach ($files as $file) { if (strpos($name,'.pageCache.php')===false) continue; - if (is_file($file)) unlink($file); + if (!is_file($file)) continue; + unlink($file); } } } From 9b2935db3f34daf70534c40a4e7dddefc154de26 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 10:20:26 +0900 Subject: [PATCH 151/577] set php display_errors when loggedin --- manager/includes/document.parser.class.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 017f528330..9eb1d52a47 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -83,6 +83,7 @@ class DocumentParser { */ function __construct() { $this->apiVersion = '1.0.0'; // This is New evolution + if($this->isLoggedIn()) ini_set('display_errors', 1); global $database_server; if(substr(PHP_OS,0,3) === 'WIN' && $database_server==='localhost') $database_server = '127.0.0.1'; $this->loadExtension('DBAPI') or die('Could not load DBAPI class.'); // load DBAPI class From 57b67d3fc461c40056c5d9612c168037f55ae947 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 11:55:32 +0900 Subject: [PATCH 152/577] Fix recent commit --- manager/processors/cache_sync.class.processor.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 6bb4ca8365..9c4d6b4f4f 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -189,7 +189,7 @@ public function buildCache($modx) { $documentListing = array(); $aliasListing = array(); $documentMap = array(); - while ($doc = $modx->db->getRow($rs)) { + while ($doc = $modx->db->getRow($rs)) { $docid = $doc['id']; if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { $tmpPath = $this->getParents($doc['parent']); @@ -197,8 +197,11 @@ public function buildCache($modx) { $key = $alias; } else $key = $doc['alias']; + $documentListing[$key] = $docid; + $documentMap[] = array($doc['parent']=>$docid); + $param = array(); $param['id'] = $docid; $param['alias'] = $doc['alias']; @@ -207,7 +210,6 @@ public function buildCache($modx) { $param['alias_visible'] = $doc['alias_visible']; $param['isfolder'] = $doc['isfolder']; $aliasListing[$docid] = $param; - $documentMap[] = array($doc['parent'], $docid); } $content .= sprintf('$this->documentListing=%s;', var_export($documentListing,true)); From 28be774e0b61cd1d059ec3cd1093485798b11334 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 11:57:59 +0900 Subject: [PATCH 153/577] Refactor $modx->getSettings() around cache --- .../includes/document.parser.class.inc.php | 85 ++++++++++--------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 9eb1d52a47..970030cef9 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -298,56 +298,57 @@ function sendUnauthorizedPage($noEvent = false) { * Get MODX settings including, but not limited to, the system_settings table */ function getSettings() { - if (!isset($this->config['site_name'])) { - - $site_cache_path = MODX_BASE_PATH . $this->getCacheFolder() . 'siteCache.idx.php'; - - if ($included= is_file($site_cache_path)) $included= include_once ($site_cache_path); - - if (!$included || !isset($this->config['site_name'])) { - include_once(MODX_MANAGER_PATH . 'processors/cache_sync.class.processor.php'); - $cache = new synccache(); - $cache->setCachepath(MODX_BASE_PATH . $this->getCacheFolder()); - $cache->setReport(false); - $rebuilt = $cache->buildCache($this); - $included = false; - - if($rebuilt && is_file($site_cache_path)) $included= include($site_cache_path); - - if(!$included) { - $result= $this->db->select('setting_name, setting_value', '[+prefix+]system_settings'); - while ($row= $this->db->getRow($result)) { - $this->config[$row['setting_name']]= $row['setting_value']; - } - if ($this->config['enable_filter']) { - $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; - $count = $this->db->getRecordCount($this->db->select('id', '[+prefix+]site_plugins', $where)); - if ($count) { - $this->config['enable_filter'] = '0'; - } - } - } - } - } + if (!isset($this->config['site_name'])) $this->recoverySiteCache(); // setup default site id - new installation should generate a unique id for the site. if(!isset($this->config['site_id'])) $this->config['site_id'] = "MzGeQ2faT4Dw06+U49x3"; // store base_url and base_path inside config array - $this->config['base_url'] = MODX_BASE_URL; - $this->config['base_path'] = MODX_BASE_PATH; - $this->config['site_url'] = MODX_SITE_URL; - $this->config['valid_hostnames'] = MODX_SITE_HOSTNAMES; - $this->config['site_manager_url'] = MODX_MANAGER_URL; - $this->config['site_manager_path'] = MODX_MANAGER_PATH; - $this->error_reporting = $this->config['error_reporting']; - $this->config['filemanager_path'] = str_replace('[(base_path)]',MODX_BASE_PATH,$this->config['filemanager_path']); - $this->config['rb_base_dir'] = str_replace('[(base_path)]',MODX_BASE_PATH,$this->config['rb_base_dir']); - - // now merge user settings into MODX-configuration + $this->config['base_url'] = MODX_BASE_URL; + $this->config['base_path'] = MODX_BASE_PATH; + $this->config['site_url'] = MODX_SITE_URL; + $this->config['valid_hostnames'] = MODX_SITE_HOSTNAMES; + $this->config['site_manager_url'] = MODX_MANAGER_URL; + $this->config['site_manager_path'] = MODX_MANAGER_PATH; + $this->error_reporting = $this->config['error_reporting']; + $this->config['filemanager_path'] = str_replace('[(base_path)]',MODX_BASE_PATH,$this->config['filemanager_path']); + $this->config['rb_base_dir'] = str_replace('[(base_path)]',MODX_BASE_PATH,$this->config['rb_base_dir']); + + // now merge user settings into evo-configuration $this->getUserSettings(); } + private function recoverySiteCache() { + $site_cache_dir = MODX_BASE_PATH . $this->getCacheFolder(); + $site_cache_path = $site_cache_dir. 'siteCache.idx.php'; + + if (is_file($site_cache_path)) include($site_cache_path); + if (isset($this->config['site_name'])) return; + + include_once(MODX_MANAGER_PATH . 'processors/cache_sync.class.processor.php'); + $cache = new synccache(); + $cache->setCachepath($site_cache_dir); + $cache->setReport(false); + $cache->buildCache($this); + + clearstatcache(); + if (is_file($site_cache_path)) include($site_cache_path); + if (isset($this->config['site_name'])) return; + + $rs= $this->db->select('setting_name, setting_value', '[+prefix+]system_settings'); + while ($row= $this->db->getRow($rs)) { + $this->config[$row['setting_name']]= $row['setting_value']; + } + + if (!$this->config['enable_filter']) return; + + $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; + $rs = $this->db->select('id', '[+prefix+]site_plugins', $where); + if ($this->db->getRecordCount($rs)) { + $this->config['enable_filter'] = '0'; + } + } + /** * Get user settings and merge into MODX configuration */ From 4fe0dfd3ef2fcf59bf7337b3bcd23c619ad66f71 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 11:58:37 +0900 Subject: [PATCH 154/577] Fix recent commit --- manager/includes/document.parser.class.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 970030cef9..135987d355 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -872,7 +872,6 @@ function postProcess() { $cacheContent= $docObjSerial . "" . $this->documentContent; $page_cache_path = MODX_BASE_PATH.$this->getHashFile($this->cacheKey); file_put_contents($page_cache_path, "$cacheContent"); - fclose($fp); } } From d80528d7f25dd3f928297d5947e7eafba91b3af3 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 16:31:43 +0900 Subject: [PATCH 155/577] [I] $modx->makePageCacheKey() $_GET['q'] --- .../includes/document.parser.class.inc.php | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 135987d355..73ef09534c 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -544,20 +544,21 @@ public function getHashFile($key){ return $this->getCacheFolder()."docid_" . $key . ".pageCache.php"; } public function makePageCacheKey($id){ - $hash = $id; - $tmp = null; - $params = array(); + $params = $_GET; + if(isset($params['q'])) unset($params['q']); + if(!empty($this->systemCacheKey)){ $hash = $this->systemCacheKey; - }else { - if (!empty($_GET)) { - // Sort GET parameters so that the order of parameters on the HTTP request don't affect the generated cache ID. - $params = $_GET; - ksort($params); - $hash .= '_'.md5(http_build_query($params)); - } + } elseif (!empty($params)) { + // Sort GET parameters so that the order of parameters on the HTTP request don't affect the generated cache ID. + ksort($params); + $hash .= '_'.md5(http_build_query($params)); } - $evtOut = $this->invokeEvent("OnMakePageCacheKey", array ("hash" => $hash, "id" => $id, 'params' => $params)); + else $hash = $id; + + if(isset($_GET['q'])) $params['q'] = $_GET['q']; + $evtOut = $this->invokeEvent("OnMakePageCacheKey", array ('hash' => $hash, 'id' => $id, 'params' => $params)); + $tmp = array(); if (is_array($evtOut) && count($evtOut) > 0){ $tmp = array_pop($evtOut); } From 4d99708fda4b99c3849e3278dfeec4e9ad38eaea Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 16:31:59 +0900 Subject: [PATCH 156/577] Fix - recent commit --- manager/processors/cache_sync.class.processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 9c4d6b4f4f..3540d0a671 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -30,7 +30,7 @@ function getParents($id, $path = '') { // modx:returns child's parent global $modx; if (empty($this->aliases)) { - $rs = $modx->db->select("d, IF(alias='', id, alias) AS alias, parent, alias_visible", '[+prefix+]site_content'); + $rs = $modx->db->select("id, IF(alias='', id, alias) AS alias, parent, alias_visible", '[+prefix+]site_content'); while ($row = $modx->db->getRow($rs)) { $docid = $row['id']; $this->aliases[$docid] = $row['alias']; From 677d05f47c6e832b8121721ab51833a18e43b67f Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 16:32:27 +0900 Subject: [PATCH 157/577] Refactor --- .../processors/cache_sync.class.processor.php | 45 +++++++------------ 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 3540d0a671..54c6996776 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -30,7 +30,8 @@ function getParents($id, $path = '') { // modx:returns child's parent global $modx; if (empty($this->aliases)) { - $rs = $modx->db->select("id, IF(alias='', id, alias) AS alias, parent, alias_visible", '[+prefix+]site_content'); + $f = "id, IF(alias='', id, alias) AS alias, parent, alias_visible"; + $rs = $modx->db->select($f, '[+prefix+]site_content','deleted=0'); while ($row = $modx->db->getRow($rs)) { $docid = $row['id']; $this->aliases[$docid] = $row['alias']; @@ -57,19 +58,16 @@ function emptyCache($modx = null) $modx->messageQuit("Cache path not set."); } $filesincache = 0; - $deletedfilesincache = 0; // New and improved! - $files = glob(realpath($this->cachePath) . '/*.php'); + $files = glob(realpath($this->cachePath) . '/*.pageCache.php'); $filesincache = count($files); $deletedfiles = array(); while ($file = array_shift($files)) { $name = basename($file); - if (strpos($name,'.pageCache.php')!==false && !in_array($name, $deletedfiles)) { - $deletedfilesincache++; - $deletedfiles[] = $name; - @unlink($file); - clearstatcache(); + if (strpos($name,'.pageCache.php')===false) continue; + if(is_file($file)) { + if(unlink($file)) $deletedfiles[] = $name;; } } @@ -80,9 +78,9 @@ function emptyCache($modx = null) // finished cache stuff. if($this->showReport==true) { global $_lang; - echo sprintf($_lang['refresh_cache'], $filesincache, $deletedfilesincache); - $limit = count($deletedfiles); - if($limit > 0) { + $total = count($deletedfiles); + echo sprintf($_lang['refresh_cache'], $filesincache, $total); + if($total > 0) { echo '

        '.$_lang['cache_files_deleted'].'

          '; foreach($deletedfiles as $deletedfile) { echo '
        • '.$deletedfile.'
        • '; @@ -168,12 +166,9 @@ public function buildCache($modx) { } $content .= sprintf('$this->config=%s;', var_export($config,true)); - // get aliases modx: support for alias path - $tmpPath = ''; - if ($config['aliaslistingfolder'] == 1) { - $f['alias'] = "IF( c.alias='', c.id, c.alias)"; $f['id'] = 'c.id'; + $f['alias'] = "IF( c.alias='', c.id, c.alias)"; $f['parent'] = 'c.parent'; $f['isfolder'] = 'c.isfolder'; $f['alias_visible'] = 'c.alias_visible'; @@ -183,33 +178,27 @@ public function buildCache($modx) { $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); }else{ - $f = "IF(alias='', id, alias) AS alias, id, parent, isfolder, alias_visible"; + $f = "id, IF(alias='', id, alias) AS alias, parent, isfolder, alias_visible"; $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); } $documentListing = array(); $aliasListing = array(); $documentMap = array(); + $use_alias_path = ($config['friendly_urls'] && $config['use_alias_path']) ? 1 : 0; + $tmpPath = ''; while ($doc = $modx->db->getRow($rs)) { $docid = $doc['id']; - if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) { + if ($use_alias_path) { $tmpPath = $this->getParents($doc['parent']); $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; $key = $alias; } else $key = $doc['alias']; + $doc['path'] = $tmpPath; + $aliasListing[$docid] = $doc; $documentListing[$key] = $docid; - - $documentMap[] = array($doc['parent']=>$docid); - - $param = array(); - $param['id'] = $docid; - $param['alias'] = $doc['alias']; - $param['path'] = $tmpPath; - $param['parent'] = $doc['parent']; - $param['alias_visible'] = $doc['alias_visible']; - $param['isfolder'] = $doc['isfolder']; - $aliasListing[$docid] = $param; + $documentMap[] = array($doc['parent'] => $docid); } $content .= sprintf('$this->documentListing=%s;', var_export($documentListing,true)); From 58a99fb50aee885625299641849fad85f724dd7a Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 18:26:15 +0900 Subject: [PATCH 158/577] Minor fix for recent commits --- manager/processors/cache_sync.class.processor.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 54c6996776..69849c52c4 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -57,17 +57,15 @@ function emptyCache($modx = null) if (!isset($this->cachePath)) { $modx->messageQuit("Cache path not set."); } - $filesincache = 0; - // New and improved! $files = glob(realpath($this->cachePath) . '/*.pageCache.php'); $filesincache = count($files); $deletedfiles = array(); while ($file = array_shift($files)) { $name = basename($file); - if (strpos($name,'.pageCache.php')===false) continue; + clearstatcache(); if(is_file($file)) { - if(unlink($file)) $deletedfiles[] = $name;; + if(unlink($file)) $deletedfiles[] = $name; } } From 4552908e1ad1874bbfca471e38bc24d00cddd776 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 18:28:00 +0900 Subject: [PATCH 159/577] Fix for recent commit (minified sitecache) --- manager/processors/cache_sync.class.processor.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 69849c52c4..8654035310 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -162,7 +162,7 @@ public function buildCache($modx) { $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); if ($count) $config['enable_filter'] = '0'; } - $content .= sprintf('$this->config=%s;', var_export($config,true)); + $content .= sprintf('$this->config=%s;', $this->php_strip_whitespace(var_export($config,true))); if ($config['aliaslistingfolder'] == 1) { $f['id'] = 'c.id'; @@ -199,9 +199,9 @@ public function buildCache($modx) { $documentMap[] = array($doc['parent'] => $docid); } - $content .= sprintf('$this->documentListing=%s;', var_export($documentListing,true)); - $content .= sprintf('$this->aliasListing=%s;', var_export($aliasListing,true)); - $content .= sprintf('$this->documentMap=%s;', var_export($documentMap,true)); + $content .= sprintf('$this->documentListing=%s;', $this->php_strip_whitespace(var_export($documentListing,true))); + $content .= sprintf('$this->aliasListing=%s;', $this->php_strip_whitespace(var_export($aliasListing,true))); + $content .= sprintf('$this->documentMap=%s;', $this->php_strip_whitespace(var_export($documentMap,true))); // get content types $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType!='text/html'"); @@ -279,7 +279,7 @@ public function buildCache($modx) { foreach ($events as $evtname => $pluginnames) { $events[$evtname] = $pluginnames; } - $content .= sprintf('$this->pluginEvent=%s;', var_export($events,true)); + $content .= sprintf('$this->pluginEvent=%s;', $this->php_strip_whitespace(var_export($events,true))); // close and write the file $filename = $this->cachePath . 'siteCache.idx.php'; From 0481fd7bf89f7b1b05276d5e489aadca5e6c78fb Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 18:30:41 +0900 Subject: [PATCH 160/577] Minor fix - php notice --- manager/includes/document.parser.class.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 73ef09534c..855653d8aa 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -5286,7 +5286,8 @@ function get_backtrace($backtrace) { $functionName = $val['function']; } $tmp = 1; - $args = array_pad(array(), count($val['args']), '$var'); + $_ = (!empty($val['args'])) ? count($val['args']) : 0; + $args = array_pad(array(), $_, '$var'); $args = implode(", ", $args); $modx = & $this; $args = preg_replace_callback('/\$var/', function() use($modx, &$tmp, $val){ From 9ffa5bd2687254f4d0b731b9a64fa9e01e6189a5 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 18:32:16 +0900 Subject: [PATCH 161/577] Minor fix - php notice --- assets/snippets/ditto/classes/ditto.class.inc.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php index 2a07088a3f..1aa86920c6 100644 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ b/assets/snippets/ditto/classes/ditto.class.inc.php @@ -200,7 +200,7 @@ function checkAdvSort($sortBy,$sortDir='asc') { function parseFilters($filter=false,$cFilters=false,$pFilters = false,$globalDelimiter,$localDelimiter) { $parsedFilters = array('basic'=>array(),'custom'=>array()); $filters = explode($globalDelimiter, $filter); - if ($filter && count($filters) > 0) { + if (!empty($filters)) { foreach ($filters AS $filter) { if (!empty($filter)) { $filterArray = explode($localDelimiter, $filter); @@ -540,7 +540,7 @@ function multiSort($resource,$orderBy) { function determineIDs($IDs, $IDType, $TVs, $orderBy, $depth, $showPublishedOnly, $seeThruUnpub, $hideFolders, $hidePrivate, $showInMenuOnly, $myWhere, $dateSource, $limit, $summarize, $filter, $paginate, $randomize) { global $modx; - if (($summarize == 0 && $summarize != 'all') || count($IDs) == 0 || ($IDs == false && $IDs != '0')) { + if (($summarize == 0 && $summarize != 'all') || empty($IDs)) { return array(); } @@ -857,7 +857,7 @@ function getDocuments($ids= array (), $fields, $TVs, $orderBy, $published= 1, $d if ($this->prefetch && $this->sortOrder!==false) $doc['ditto_sort'] = $this->sortOrder[$doc['id']]; $k = '#'.$doc['id']; - if (count($this->prefetch['resource']) > 0) { + if (!empty($this->prefetch['resource'])) { $docs[$k] = array_merge($doc,$this->prefetch['resource'][$k]); // merge the prefetch array and the normal array } @@ -867,7 +867,7 @@ function getDocuments($ids= array (), $fields, $TVs, $orderBy, $published= 1, $d } $TVs = array_unique($TVs); - if (count($TVs) > 0) { + if (!empty($TVs)) { foreach($TVs as $tv){ $TVData = array_merge_recursive($this->appendTV($tv,$TVIDs),$TVData); } @@ -887,7 +887,7 @@ function getDocuments($ids= array (), $fields, $TVs, $orderBy, $published= 1, $d function getDocumentsIDs($ids= array (), $published= 1) { global $modx; - if (count($ids) == 0) { + if (empty($ids)) { return false; } else { $ids = join(',',$ids); From c05a0ec8d9df0a9aa5eb20f38c300e04619b0666 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 21:14:51 +0900 Subject: [PATCH 162/577] Minor fix As we plan to make other modifications, as preparation for it. --- manager/includes/document.parser.class.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 855653d8aa..c2990bdd7e 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -3579,7 +3579,9 @@ function parseText($tpl='', $ph=array(), $left= '[+', $right= '+]', $execModifie $value = $ph[$key]; if($modifiers!==false) { - if(strpos($modifiers,$left)!==false) $modifiers=$this->parseText($modifiers,$ph,$left,$right); + if(strpos($modifiers,$left)!==false) { + $modifiers = $this->parseText($modifiers,$ph,$left,$right); + } $value = $this->applyFilter($value,$modifiers,$key); } $tpl = str_replace($matches[0][$i], $value, $tpl); From a7701766da794f970d6d4a24774085903ea94866 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 18 Sep 2017 21:44:29 +0900 Subject: [PATCH 163/577] [R] class property change "var" to "public" --- .../includes/document.parser.class.inc.php | 130 +++++++++--------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index c2990bdd7e..975bc3b384 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -8,73 +8,73 @@ if (!defined('E_USER_DEPRECATED')) define('E_USER_DEPRECATED', 16384); class DocumentParser { - var $apiVersion; - var $db; // db object - var $event, $Event; // event object - var $pluginEvent; - var $config= null; - var $configGlobal= null; // contains backup of settings overwritten by user-settings - var $rs; - var $result; - var $sql; - var $table_prefix; - var $debug; - var $documentIdentifier; - var $documentMethod; - var $documentGenerated; - var $documentContent; - var $documentOutput; - var $tstart; - var $mstart; - var $minParserPasses; - var $maxParserPasses; - var $documentObject; - var $templateObject; - var $snippetObjects; - var $stopOnNotice; - var $executedQueries; - var $queryTime; - var $currentSnippet; - var $documentName; - var $aliases; - var $visitor; - var $entrypage; - var $documentListing; - var $dumpSnippets; - var $snippetsCode; - var $snippetsTime=array(); - var $chunkCache; - var $snippetCache; - var $contentTypes; - var $dumpSQL; - var $queryCode; - var $virtualDir; - var $placeholders; - var $sjscripts; - var $jscripts; - var $loadedjscripts; - var $documentMap; - var $forwards= 3; - var $error_reporting; - var $dumpPlugins; - var $pluginsCode; - var $pluginsTime=array(); - var $pluginCache=array(); - var $aliasListing; - var $lockedElements=null; - var $tmpCache = array(); + public $apiVersion; + public $db; // db object + public $event, $Event; // event object + public $pluginEvent; + public $config= null; + public $configGlobal= null; // contains backup of settings overwritten by user-settings + public $rs; + public $result; + public $sql; + public $table_prefix; + public $debug; + public $documentIdentifier; + public $documentMethod; + public $documentGenerated; + public $documentContent; + public $documentOutput; + public $tstart; + public $mstart; + public $minParserPasses; + public $maxParserPasses; + public $documentObject; + public $templateObject; + public $snippetObjects; + public $stopOnNotice; + public $executedQueries; + public $queryTime; + public $currentSnippet; + public $documentName; + public $aliases; + public $visitor; + public $entrypage; + public $documentListing; + public $dumpSnippets; + public $snippetsCode; + public $snippetsTime=array(); + public $chunkCache; + public $snippetCache; + public $contentTypes; + public $dumpSQL; + public $queryCode; + public $virtualDir; + public $placeholders; + public $sjscripts; + public $jscripts; + public $loadedjscripts; + public $documentMap; + public $forwards= 3; + public $error_reporting; + public $dumpPlugins; + public $pluginsCode; + public $pluginsTime=array(); + public $pluginCache=array(); + public $aliasListing; + public $lockedElements=null; + public $tmpCache = array(); private $version=array(); public $extensions = array(); public $cacheKey = null; public $recentUpdate = 0; public $useConditional = false; protected $systemCacheKey = null; - var $snipLapCount; - var $messageQuitCount; - var $time; - var $sid; + public $snipLapCount; + public $messageQuitCount; + public $time; + public $sid; private $q; - var $decoded_request_uri; + public $decoded_request_uri; /** * Document constructor @@ -5530,11 +5530,11 @@ private static function _getCleanQueryString() { * System Event Class */ class SystemEvent { - var $name; - var $_propagate; - var $_output; - var $activated; - var $activePlugin; + public $name; + public $_propagate; + public $_output; + public $activated; + public $activePlugin; /** * @param string $name Name of the event From 397e5a526dcc805829f1f2fae3d98a7b2699c95a Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Mon, 18 Sep 2017 22:46:36 +0300 Subject: [PATCH 164/577] fixed issue #181 --- manager/media/style/default/style.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/manager/media/style/default/style.php b/manager/media/style/default/style.php index 63dfd2ef13..fbf241e513 100644 --- a/manager/media/style/default/style.php +++ b/manager/media/style/default/style.php @@ -240,6 +240,14 @@ // actions buttons templates $action = isset($_REQUEST['a']) ? $_REQUEST['a'] : ''; +if (!empty($modx->config['global_tabs']) && !isset($_SESSION['stay'])) { + $_REQUEST['stay'] = 2; +} +if (isset($_REQUEST['stay'])) { + $_SESSION['stay'] = $_REQUEST['stay']; +} else if (isset($_SESSION['stay'])) { + $_REQUEST['stay'] = $_SESSION['stay']; +} $stay = isset($_REQUEST['stay']) ? $_REQUEST['stay'] : ''; $addnew = 0; $run = 0; From 050994182cf1c6fbcf511e44f90b24bb44084412 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 19 Sep 2017 07:52:45 +0900 Subject: [PATCH 165/577] Replace tabs to spaces --- manager/processors/save_content.processor.php | 1036 ++++++++--------- 1 file changed, 518 insertions(+), 518 deletions(-) diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index 0a3729d024..24c86bc83c 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -1,7 +1,7 @@ INCLUDE_ORDERING_ERROR

          Please use the MODX Content Manager instead of accessing this file directly."); if (!$modx->hasPermission('save_document')) { - $modx->webAlertAndQuit($_lang["error_no_privileges"]); + $modx->webAlertAndQuit($_lang["error_no_privileges"]); } // preprocess POST values @@ -43,11 +43,11 @@ $no_esc_pagetitle = $_POST['pagetitle']; if (trim($no_esc_pagetitle) == "") { - if ($type == "reference") { - $no_esc_pagetitle = $pagetitle = $_lang['untitled_weblink']; - } else { - $no_esc_pagetitle = $pagetitle = $_lang['untitled_resource']; - } + if ($type == "reference") { + $no_esc_pagetitle = $pagetitle = $_lang['untitled_weblink']; + } else { + $no_esc_pagetitle = $pagetitle = $_lang['untitled_resource']; + } } // get table names @@ -63,26 +63,26 @@ $actionToTake = "new"; if ($_POST['mode'] == '73' || $_POST['mode'] == '27') { - $actionToTake = "edit"; + $actionToTake = "edit"; } // friendly url alias checks if ($friendly_urls) { - // auto assign alias - if (!$alias && $automatic_alias) { - $alias = strtolower($modx->stripAlias(trim($pagetitle))); - if(!$allow_duplicate_alias) { - if ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND alias='$alias'")) != 0) { - $cnt = 1; - $tempAlias = $alias; - while ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND alias='$tempAlias'")) != 0) { - $tempAlias = $alias; - $tempAlias .= $cnt; - $cnt++; - } - $alias = $tempAlias; - } - }else{ + // auto assign alias + if (!$alias && $automatic_alias) { + $alias = strtolower($modx->stripAlias(trim($pagetitle))); + if(!$allow_duplicate_alias) { + if ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND alias='$alias'")) != 0) { + $cnt = 1; + $tempAlias = $alias; + while ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND alias='$tempAlias'")) != 0) { + $tempAlias = $alias; + $tempAlias .= $cnt; + $cnt++; + } + $alias = $tempAlias; + } + }else{ if ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND parent=$parent AND alias='$alias'")) != 0) { $cnt = 1; $tempAlias = $alias; @@ -93,34 +93,34 @@ } $alias = $tempAlias; } - } - } - - // check for duplicate alias name if not allowed - elseif ($alias && !$allow_duplicate_alias) { - $alias = $modx->stripAlias($alias); - if ($use_alias_path) { - // only check for duplicates on the same level if alias_path is on - $docid = $modx->db->getValue($modx->db->select('id', $tbl_site_content, "id<>'$id' AND alias='$alias' AND parent=$parent", '', 1)); - } else { - $docid = $modx->db->getValue($modx->db->select('id', $tbl_site_content, "id<>'$id' AND alias='$alias'", '', 1)); - } - if ($docid > 0) { - if ($actionToTake == 'edit') { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=27&id={$id}"); - } else { - $modx->manager->saveFormValues(4); - $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=4"); - } - } - } - - // strip alias of special characters - elseif ($alias) { - $alias = $modx->stripAlias($alias); - //webber - $docid = $modx->db->getValue($modx->db->select('id', $tbl_site_content, "id<>'$id' AND alias='$alias' AND parent=$parent", '', 1)); + } + } + + // check for duplicate alias name if not allowed + elseif ($alias && !$allow_duplicate_alias) { + $alias = $modx->stripAlias($alias); + if ($use_alias_path) { + // only check for duplicates on the same level if alias_path is on + $docid = $modx->db->getValue($modx->db->select('id', $tbl_site_content, "id<>'$id' AND alias='$alias' AND parent=$parent", '', 1)); + } else { + $docid = $modx->db->getValue($modx->db->select('id', $tbl_site_content, "id<>'$id' AND alias='$alias'", '', 1)); + } + if ($docid > 0) { + if ($actionToTake == 'edit') { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=27&id={$id}"); + } else { + $modx->manager->saveFormValues(4); + $modx->webAlertAndQuit(sprintf($_lang["duplicate_alias_found"], $docid, $alias), "index.php?a=4"); + } + } + } + + // strip alias of special characters + elseif ($alias) { + $alias = $modx->stripAlias($alias); + //webber + $docid = $modx->db->getValue($modx->db->select('id', $tbl_site_content, "id<>'$id' AND alias='$alias' AND parent=$parent", '', 1)); if ($docid > 0) { if ($actionToTake == 'edit') { $modx->manager->saveFormValues(27); @@ -131,188 +131,188 @@ } } //end webber - } + } } elseif ($alias) { - $alias = $modx->stripAlias($alias); + $alias = $modx->stripAlias($alias); } // determine published status $currentdate = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; if (empty ($pub_date)) { - $pub_date = 0; + $pub_date = 0; } else { - $pub_date = $modx->toTimeStamp($pub_date); - - if ($pub_date < $currentdate) { - $published = 1; - } - elseif ($pub_date > $currentdate) { - $published = 0; - } + $pub_date = $modx->toTimeStamp($pub_date); + + if ($pub_date < $currentdate) { + $published = 1; + } + elseif ($pub_date > $currentdate) { + $published = 0; + } } if (empty ($unpub_date)) { - $unpub_date = 0; + $unpub_date = 0; } else { - $unpub_date = $modx->toTimeStamp($unpub_date); - if ($unpub_date < $currentdate) { - $published = 0; - } + $unpub_date = $modx->toTimeStamp($unpub_date); + if ($unpub_date < $currentdate) { + $published = 0; + } } // get document groups for current user $tmplvars = array (); if ($_SESSION['mgrDocgroups']) { - $docgrp = implode(",", $_SESSION['mgrDocgroups']); + $docgrp = implode(",", $_SESSION['mgrDocgroups']); } // ensure that user has not made this document inaccessible to themselves if($_SESSION['mgrRole'] != 1 && is_array($document_groups)) { - $document_group_list = implode(',', $document_groups); - $document_group_list = implode(',', array_filter(explode(',',$document_group_list), 'is_numeric')); - if(!empty($document_group_list)) { - $rs = $modx->db->select('COUNT(mg.id)', "{$tbl_membergroup_access} AS mga, {$tbl_member_groups} AS mg", "mga.membergroup = mg.user_group AND mga.documentgroup IN({$document_group_list}) AND mg.member = {$_SESSION['mgrInternalKey']}"); - $count = $modx->db->getValue($rs); - if($count == 0) { - if ($actionToTake == 'edit') { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit(sprintf($_lang["resource_permissions_error"]), "index.php?a=27&id={$id}"); - } else { - $modx->manager->saveFormValues(4); - $modx->webAlertAndQuit(sprintf($_lang["resource_permissions_error"]), "index.php?a=4"); - } - } - } + $document_group_list = implode(',', $document_groups); + $document_group_list = implode(',', array_filter(explode(',',$document_group_list), 'is_numeric')); + if(!empty($document_group_list)) { + $rs = $modx->db->select('COUNT(mg.id)', "{$tbl_membergroup_access} AS mga, {$tbl_member_groups} AS mg", "mga.membergroup = mg.user_group AND mga.documentgroup IN({$document_group_list}) AND mg.member = {$_SESSION['mgrInternalKey']}"); + $count = $modx->db->getValue($rs); + if($count == 0) { + if ($actionToTake == 'edit') { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit(sprintf($_lang["resource_permissions_error"]), "index.php?a=27&id={$id}"); + } else { + $modx->manager->saveFormValues(4); + $modx->webAlertAndQuit(sprintf($_lang["resource_permissions_error"]), "index.php?a=4"); + } + } + } } $rs = $modx->db->select( - "DISTINCT tv.*, IF(tvc.value!='',tvc.value,tv.default_text) as value", - "{$tbl_site_tmplvars} AS tv - INNER JOIN {$tbl_site_tmplvar_templates} AS tvtpl ON tvtpl.tmplvarid = tv.id - LEFT JOIN {$tbl_site_tmplvar_contentvalues} AS tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$id}' - LEFT JOIN {$tbl_site_tmplvar_access} AS tva ON tva.tmplvarid=tv.id", - "tvtpl.templateid = '{$template}' AND (1='{$_SESSION['mgrRole']}' OR ISNULL(tva.documentgroup)" . ((!$docgrp) ? "" : " OR tva.documentgroup IN ($docgrp)") . ")", - "tv.rank" - ); + "DISTINCT tv.*, IF(tvc.value!='',tvc.value,tv.default_text) as value", + "{$tbl_site_tmplvars} AS tv + INNER JOIN {$tbl_site_tmplvar_templates} AS tvtpl ON tvtpl.tmplvarid = tv.id + LEFT JOIN {$tbl_site_tmplvar_contentvalues} AS tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$id}' + LEFT JOIN {$tbl_site_tmplvar_access} AS tva ON tva.tmplvarid=tv.id", + "tvtpl.templateid = '{$template}' AND (1='{$_SESSION['mgrRole']}' OR ISNULL(tva.documentgroup)" . ((!$docgrp) ? "" : " OR tva.documentgroup IN ($docgrp)") . ")", + "tv.rank" + ); while ($row = $modx->db->getRow($rs)) { - $tmplvar = ''; - switch ($row['type']) { - case 'url': - $tmplvar = $_POST["tv" . $row['id']]; - if ($_POST["tv" . $row['id'] . '_prefix'] != '--') { - $tmplvar = str_replace(array ( - "feed://", - "ftp://", - "http://", - "https://", - "mailto:" - ), "", $tmplvar); - $tmplvar = $_POST["tv" . $row['id'] . '_prefix'] . $tmplvar; - } - break; - case 'file': - $tmplvar = $_POST["tv" . $row['id']]; - break; - default: - if (is_array($_POST["tv" . $row['id']])) { - // handles checkboxes & multiple selects elements - $feature_insert = array (); - $lst = $_POST["tv" . $row['id']]; - while (list ($featureValue, $feature_item) = each($lst)) { - $feature_insert[count($feature_insert)] = $feature_item; - } - $tmplvar = implode("||", $feature_insert); - } else { - $tmplvar = $_POST["tv" . $row['id']]; - } - break; - } - // save value if it was modified - if (strlen($tmplvar) > 0 && $tmplvar != $row['default_text']) { - $tmplvars[$row['id']] = array ( - $row['id'], - $tmplvar - ); - } else { - // Mark the variable for deletion - $tmplvars[$row['name']] = $row['id']; - } + $tmplvar = ''; + switch ($row['type']) { + case 'url': + $tmplvar = $_POST["tv" . $row['id']]; + if ($_POST["tv" . $row['id'] . '_prefix'] != '--') { + $tmplvar = str_replace(array ( + "feed://", + "ftp://", + "http://", + "https://", + "mailto:" + ), "", $tmplvar); + $tmplvar = $_POST["tv" . $row['id'] . '_prefix'] . $tmplvar; + } + break; + case 'file': + $tmplvar = $_POST["tv" . $row['id']]; + break; + default: + if (is_array($_POST["tv" . $row['id']])) { + // handles checkboxes & multiple selects elements + $feature_insert = array (); + $lst = $_POST["tv" . $row['id']]; + while (list ($featureValue, $feature_item) = each($lst)) { + $feature_insert[count($feature_insert)] = $feature_item; + } + $tmplvar = implode("||", $feature_insert); + } else { + $tmplvar = $_POST["tv" . $row['id']]; + } + break; + } + // save value if it was modified + if (strlen($tmplvar) > 0 && $tmplvar != $row['default_text']) { + $tmplvars[$row['id']] = array ( + $row['id'], + $tmplvar + ); + } else { + // Mark the variable for deletion + $tmplvars[$row['name']] = $row['id']; + } } // get the document, but only if it already exists if ($actionToTake != "new") { - $rs = $modx->db->select('*', $tbl_site_content, "id='{$id}'"); - $existingDocument = $modx->db->getRow($rs); - if (!$existingDocument) { - $modx->webAlertAndQuit($_lang["error_no_results"]); - } - + $rs = $modx->db->select('*', $tbl_site_content, "id='{$id}'"); + $existingDocument = $modx->db->getRow($rs); + if (!$existingDocument) { + $modx->webAlertAndQuit($_lang["error_no_results"]); + } + } // check to see if the user is allowed to save the document in the place he wants to save it in if ($use_udperms == 1) { - if ($existingDocument['parent'] != $parent) { - include_once MODX_MANAGER_PATH ."processors/user_documents_permissions.class.php"; - $udperms = new udperms(); - $udperms->user = $modx->getLoginUserID(); - $udperms->document = $parent; - $udperms->role = $_SESSION['mgrRole']; - - if (!$udperms->checkPermissions()) { - if ($actionToTake == 'edit') { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit(sprintf($_lang['access_permission_parent_denied'], $docid, $alias), "index.php?a=27&id={$id}"); - } else { - $modx->manager->saveFormValues(4); - $modx->webAlertAndQuit(sprintf($_lang['access_permission_parent_denied'], $docid, $alias), "index.php?a=4"); - } - } - } + if ($existingDocument['parent'] != $parent) { + include_once MODX_MANAGER_PATH ."processors/user_documents_permissions.class.php"; + $udperms = new udperms(); + $udperms->user = $modx->getLoginUserID(); + $udperms->document = $parent; + $udperms->role = $_SESSION['mgrRole']; + + if (!$udperms->checkPermissions()) { + if ($actionToTake == 'edit') { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit(sprintf($_lang['access_permission_parent_denied'], $docid, $alias), "index.php?a=27&id={$id}"); + } else { + $modx->manager->saveFormValues(4); + $modx->webAlertAndQuit(sprintf($_lang['access_permission_parent_denied'], $docid, $alias), "index.php?a=4"); + } + } + } } switch ($actionToTake) { - case 'new' : - - // invoke OnBeforeDocFormSave event - switch($modx->config['docid_incrmnt_method']) - { - case '1': - $from = "{$tbl_site_content} AS T0 LEFT JOIN {$tbl_site_content} AS T1 ON T0.id + 1 = T1.id"; - $where = "T1.id IS NULL"; - $rs = $modx->db->select('MIN(T0.id)+1', $from, "T1.id IS NULL"); - $id = $modx->db->getValue($rs); - break; - case '2': - $rs = $modx->db->select('MAX(id)+1',$tbl_site_content); - $id = $modx->db->getValue($rs); - break; - - default: - $id = ''; - } - - $modx->invokeEvent("OnBeforeDocFormSave", array ( - "mode" => "new", - "id" => $id - )); - - // deny publishing if not permitted - if (!$modx->hasPermission('publish_document')) { - $pub_date = 0; - $unpub_date = 0; - $published = 0; - } - - $publishedon = ($published ? $currentdate : 0); - $publishedby = ($published ? $modx->getLoginUserID() : 0); + case 'new' : + + // invoke OnBeforeDocFormSave event + switch($modx->config['docid_incrmnt_method']) + { + case '1': + $from = "{$tbl_site_content} AS T0 LEFT JOIN {$tbl_site_content} AS T1 ON T0.id + 1 = T1.id"; + $where = "T1.id IS NULL"; + $rs = $modx->db->select('MIN(T0.id)+1', $from, "T1.id IS NULL"); + $id = $modx->db->getValue($rs); + break; + case '2': + $rs = $modx->db->select('MAX(id)+1',$tbl_site_content); + $id = $modx->db->getValue($rs); + break; + + default: + $id = ''; + } + + $modx->invokeEvent("OnBeforeDocFormSave", array ( + "mode" => "new", + "id" => $id + )); + + // deny publishing if not permitted + if (!$modx->hasPermission('publish_document')) { + $pub_date = 0; + $unpub_date = 0; + $published = 0; + } + + $publishedon = ($published ? $currentdate : 0); + $publishedby = ($published ? $modx->getLoginUserID() : 0); if ((!empty($pub_date))&&($published)){ $publishedon=$pub_date; } - $dbInsert = array + $dbInsert = array ( "introtext" => $introtext , "content" => $content , @@ -351,308 +351,308 @@ $key = $modx->db->insert( $dbInsert, $tbl_site_content); - $tvChanges = array(); - foreach ($tmplvars as $field => $value) { - if (is_array($value)) { - $tvId = $value[0]; - $tvVal = $value[1]; - $tvChanges[] = array('tmplvarid' => $tvId, 'contentid' => $key, 'value' => $modx->db->escape($tvVal)); - } - } - if (!empty($tvChanges)) { - foreach ($tvChanges as $tv) { - $modx->db->insert($tv, $tbl_site_tmplvar_contentvalues); - } - } - - // document access permissions - if ($use_udperms == 1 && is_array($document_groups)) { - $new_groups = array(); - foreach ($document_groups as $value_pair) { - // first, split the pair (this is a new document, so ignore the second value - list($group) = explode(',', $value_pair); // @see actions/mutate_content.dynamic.php @ line 1138 (permissions list) - $new_groups[] = '('.(int)$group.','.$key.')'; - } - $saved = true; - if (!empty($new_groups)) { - $modx->db->query("INSERT INTO {$tbl_document_groups} (document_group, document) VALUES ".implode(',', $new_groups)); - } - } else { - $isManager = $modx->hasPermission('access_permissions'); - $isWeb = $modx->hasPermission('web_access_permissions'); - if($use_udperms && !($isManager || $isWeb) && $parent != 0) { - // inherit document access permissions - $modx->db->insert( - array( - 'document_group' =>'', - 'document' =>'' - ), $tbl_document_groups, // Insert into - "document_group, {$key}", $tbl_document_groups, "document = '{$parent}'"); // Copy from - } - } - - - // update parent folder status - if ($parent != 0) { - $fields = array('isfolder' => 1); - $modx->db->update($fields, $tbl_site_content, "id='{$_REQUEST['parent']}'"); - } - - // invoke OnDocFormSave event - $modx->invokeEvent("OnDocFormSave", array ( - "mode" => "new", - "id" => $key - )); - - // secure web documents - flag as private - include MODX_MANAGER_PATH . "includes/secure_web_documents.inc.php"; - secureWebDocument($key); - - // secure manager documents - flag as private - include MODX_MANAGER_PATH . "includes/secure_mgr_documents.inc.php"; - secureMgrDocument($key); - - // Set the item name for logger - $_SESSION['itemname'] = $no_esc_pagetitle; - - if ($syncsite == 1) { - // empty cache - $modx->clearCache('full'); - } - - // redirect/stay options - if ($_POST['stay'] != '') { - // weblink - if ($_POST['mode'] == "72") - $a = ($_POST['stay'] == '2') ? "27&id=$key" : "72&pid=$parent"; - // document - if ($_POST['mode'] == "4") - $a = ($_POST['stay'] == '2') ? "27&id=$key" : "4&pid=$parent"; - $header = "Location: index.php?a=" . $a . "&r=1&stay=" . $_POST['stay']; - } else { - $header = "Location: index.php?a=3&id=$key&r=1"; - } - + $tvChanges = array(); + foreach ($tmplvars as $field => $value) { + if (is_array($value)) { + $tvId = $value[0]; + $tvVal = $value[1]; + $tvChanges[] = array('tmplvarid' => $tvId, 'contentid' => $key, 'value' => $modx->db->escape($tvVal)); + } + } + if (!empty($tvChanges)) { + foreach ($tvChanges as $tv) { + $modx->db->insert($tv, $tbl_site_tmplvar_contentvalues); + } + } + + // document access permissions + if ($use_udperms == 1 && is_array($document_groups)) { + $new_groups = array(); + foreach ($document_groups as $value_pair) { + // first, split the pair (this is a new document, so ignore the second value + list($group) = explode(',', $value_pair); // @see actions/mutate_content.dynamic.php @ line 1138 (permissions list) + $new_groups[] = '('.(int)$group.','.$key.')'; + } + $saved = true; + if (!empty($new_groups)) { + $modx->db->query("INSERT INTO {$tbl_document_groups} (document_group, document) VALUES ".implode(',', $new_groups)); + } + } else { + $isManager = $modx->hasPermission('access_permissions'); + $isWeb = $modx->hasPermission('web_access_permissions'); + if($use_udperms && !($isManager || $isWeb) && $parent != 0) { + // inherit document access permissions + $modx->db->insert( + array( + 'document_group' =>'', + 'document' =>'' + ), $tbl_document_groups, // Insert into + "document_group, {$key}", $tbl_document_groups, "document = '{$parent}'"); // Copy from + } + } + + + // update parent folder status + if ($parent != 0) { + $fields = array('isfolder' => 1); + $modx->db->update($fields, $tbl_site_content, "id='{$_REQUEST['parent']}'"); + } + + // invoke OnDocFormSave event + $modx->invokeEvent("OnDocFormSave", array ( + "mode" => "new", + "id" => $key + )); + + // secure web documents - flag as private + include MODX_MANAGER_PATH . "includes/secure_web_documents.inc.php"; + secureWebDocument($key); + + // secure manager documents - flag as private + include MODX_MANAGER_PATH . "includes/secure_mgr_documents.inc.php"; + secureMgrDocument($key); + + // Set the item name for logger + $_SESSION['itemname'] = $no_esc_pagetitle; + + if ($syncsite == 1) { + // empty cache + $modx->clearCache('full'); + } + + // redirect/stay options + if ($_POST['stay'] != '') { + // weblink + if ($_POST['mode'] == "72") + $a = ($_POST['stay'] == '2') ? "27&id=$key" : "72&pid=$parent"; + // document + if ($_POST['mode'] == "4") + $a = ($_POST['stay'] == '2') ? "27&id=$key" : "4&pid=$parent"; + $header = "Location: index.php?a=" . $a . "&r=1&stay=" . $_POST['stay']; + } else { + $header = "Location: index.php?a=3&id=$key&r=1"; + } + if (headers_sent()) { - $header = str_replace('Location: ','',$header); - echo "\n"; - } else { - header($header); - } - - - break; - case 'edit' : - - // get the document's current parent - $oldparent = $existingDocument['parent']; - $doctype = $existingDocument['type']; - - if ($id == $site_start && $published == 0) { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit("Document is linked to site_start variable and cannot be unpublished!"); - } - $today = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; - if ($id == $site_start && ($pub_date > $today || $unpub_date != "0")) { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit("Document is linked to site_start variable and cannot have publish or unpublish dates set!"); - } - if ($parent == $id) { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit("Document can not be it's own parent!"); - } - - $parents = $modx->getParentIds($parent); + $header = str_replace('Location: ','',$header); + echo "\n"; + } else { + header($header); + } + + + break; + case 'edit' : + + // get the document's current parent + $oldparent = $existingDocument['parent']; + $doctype = $existingDocument['type']; + + if ($id == $site_start && $published == 0) { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit("Document is linked to site_start variable and cannot be unpublished!"); + } + $today = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; + if ($id == $site_start && ($pub_date > $today || $unpub_date != "0")) { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit("Document is linked to site_start variable and cannot have publish or unpublish dates set!"); + } + if ($parent == $id) { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit("Document can not be it's own parent!"); + } + + $parents = $modx->getParentIds($parent); if (in_array($oldparent, $parents)) { $modx->webAlertAndQuit("Document descendant can not be it's parent!"); } - // check to see document is a folder - $rs = $modx->db->select('count(id)', $tbl_site_content, "parent='{$id}'"); - $count = $modx->db->getValue($rs); - if ($count > 0) { - $isfolder = 1; - } - - // set publishedon and publishedby - $was_published = $existingDocument['published']; - - // keep original publish state, if change is not permitted - if (!$modx->hasPermission('publish_document')) { - $published = $was_published; - $pub_date = 'pub_date'; - $unpub_date = 'unpub_date'; - } - - // if it was changed from unpublished to published - if (!$was_published && $published) { - $publishedon = $currentdate; - $publishedby = $modx->getLoginUserID(); - }elseif ((!empty($pub_date)&& $pub_date<=$currentdate && $published)) { - $publishedon = $pub_date; - $publishedby = $modx->getLoginUserID(); - }elseif ($was_published && !$published) { - $publishedon = 0; - $publishedby = 0; - } else { - $publishedon = 'publishedon'; - $publishedby = 'publishedby'; - } - - // invoke OnBeforeDocFormSave event - $modx->invokeEvent("OnBeforeDocFormSave", array ( - "mode" => "upd", - "id" => $id - )); - - // update the document - $modx->db->update( - "introtext='{$introtext}', " - . "content='{$content}', " - . "pagetitle='{$pagetitle}', " - . "longtitle='{$longtitle}', " - . "type='{$type}', " - . "description='{$description}', " - . "alias='{$alias}', " - . "link_attributes='{$link_attributes}', " - . "isfolder={$isfolder}, " - . "richtext={$richtext}, " - . "published={$published}, " - . "pub_date={$pub_date}, " - . "unpub_date={$unpub_date}, " - . "parent={$parent}, " - . "template={$template}, " - . "menuindex={$menuindex}, " - . "searchable={$searchable}, " - . "cacheable={$cacheable}, " - . "editedby=" . $modx->getLoginUserID() . ", " - . "editedon={$currentdate}, " - . "publishedon={$publishedon}, " - . "publishedby={$publishedby}, " - . "contentType='{$contentType}', " - . "content_dispo={$contentdispo}, " - . "donthit={$donthit}, " - . "menutitle='{$menutitle}', " - . "hidemenu={$hidemenu}, " - . "alias_visible={$aliasvisible}" - , $tbl_site_content, "id='{$id}'"); - - // update template variables - $rs = $modx->db->select('id, tmplvarid', $tbl_site_tmplvar_contentvalues, "contentid='{$id}'"); - $tvIds = array (); - while ($row = $modx->db->getRow($rs)) { - $tvIds[$row['tmplvarid']] = $row['id']; - } - $tvDeletions = array(); - $tvChanges = array(); - foreach ($tmplvars as $field => $value) { - if (!is_array($value)) { - if (isset($tvIds[$value])) $tvDeletions[] = $tvIds[$value]; - } else { - $tvId = $value[0]; - $tvVal = $value[1]; - - if (isset($tvIds[$tvId])) { - $tvChanges[] = array(array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)), array('id' => $tvIds[$tvId])); - } else { - $tvAdded[] = array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)); - } - } - } - - if (!empty($tvDeletions)) { - $modx->db->delete($tbl_site_tmplvar_contentvalues, 'id IN('.implode(',', $tvDeletions).')'); - } - - if (!empty($tvAdded)) { - foreach ($tvAdded as $tv) { - $modx->db->insert($tv, $tbl_site_tmplvar_contentvalues); - } - } - - if (!empty($tvChanges)) { - foreach ($tvChanges as $tv) { - $modx->db->update($tv[0], $tbl_site_tmplvar_contentvalues, "id='{$tv[1]['id']}'"); - } - } - - // set document permissions - if ($use_udperms == 1 && is_array($document_groups)) { - $new_groups = array(); - // process the new input - foreach ($document_groups as $value_pair) { - list($group, $link_id) = explode(',', $value_pair); // @see actions/mutate_content.dynamic.php @ line 1138 (permissions list) - $new_groups[$group] = $link_id; - } - - // grab the current set of permissions on this document the user can access - $isManager = $modx->hasPermission('access_permissions'); - $isWeb = $modx->hasPermission('web_access_permissions'); - $rs = $modx->db->select( - 'groups.id, groups.document_group', - "{$tbl_document_groups} AS groups - LEFT JOIN {$tbl_documentgroup_names} AS dgn ON dgn.id = groups.document_group", - "((1=".(int)$isManager." AND dgn.private_memgroup) OR (1=".(int)$isWeb." AND dgn.private_webgroup)) AND groups.document = '{$id}'" - ); - $old_groups = array(); - while ($row = $modx->db->getRow($rs)) $old_groups[$row['document_group']] = $row['id']; - - // update the permissions in the database - $insertions = $deletions = array(); - foreach ($new_groups as $group => $link_id) { - if (array_key_exists($group, $old_groups)) { - unset($old_groups[$group]); - continue; - } elseif ($link_id == 'new') { - $insertions[] = '('.(int)$group.','.$id.')'; - } - } - if (!empty($insertions)) { - $modx->db->query("INSERT INTO {$tbl_document_groups} (document_group, document) VALUES ".implode(',', $insertions)); - } - if (!empty($old_groups)) { - $modx->db->delete($tbl_document_groups, "id IN (".implode(',', $old_groups).")"); - } - // necessary to remove all permissions as document is public - if ((isset($_POST['chkalldocs']) && $_POST['chkalldocs'] == 'on')) { - $modx->db->delete($tbl_document_groups, "document='{$id}'"); - } - } - - // do the parent stuff - if ($parent != 0) { - $fields = array('isfolder' => 1); - $modx->db->update($fields, $tbl_site_content, "id='{$_REQUEST['parent']}'"); - } - - // finished moving the document, now check to see if the old_parent should no longer be a folder - $rs = $modx->db->select('COUNT(id)', $tbl_site_content, "parent='{$oldparent}'"); - $limit = $modx->db->getValue($rs); - - if ($limit == 0) { - $fields = array('isfolder' => 0); - $modx->db->update($fields, $tbl_site_content, "id='{$oldparent}'"); - } - - - // invoke OnDocFormSave event - $modx->invokeEvent("OnDocFormSave", array ( - "mode" => "upd", - "id" => $id - )); - - // secure web documents - flag as private - include MODX_MANAGER_PATH . "includes/secure_web_documents.inc.php"; - secureWebDocument($id); - - // secure manager documents - flag as private - include MODX_MANAGER_PATH . "includes/secure_mgr_documents.inc.php"; - secureMgrDocument($id); - - // Set the item name for logger - $_SESSION['itemname'] = $no_esc_pagetitle; - - if ($syncsite == 1) { + // check to see document is a folder + $rs = $modx->db->select('count(id)', $tbl_site_content, "parent='{$id}'"); + $count = $modx->db->getValue($rs); + if ($count > 0) { + $isfolder = 1; + } + + // set publishedon and publishedby + $was_published = $existingDocument['published']; + + // keep original publish state, if change is not permitted + if (!$modx->hasPermission('publish_document')) { + $published = $was_published; + $pub_date = 'pub_date'; + $unpub_date = 'unpub_date'; + } + + // if it was changed from unpublished to published + if (!$was_published && $published) { + $publishedon = $currentdate; + $publishedby = $modx->getLoginUserID(); + }elseif ((!empty($pub_date)&& $pub_date<=$currentdate && $published)) { + $publishedon = $pub_date; + $publishedby = $modx->getLoginUserID(); + }elseif ($was_published && !$published) { + $publishedon = 0; + $publishedby = 0; + } else { + $publishedon = 'publishedon'; + $publishedby = 'publishedby'; + } + + // invoke OnBeforeDocFormSave event + $modx->invokeEvent("OnBeforeDocFormSave", array ( + "mode" => "upd", + "id" => $id + )); + + // update the document + $modx->db->update( + "introtext='{$introtext}', " + . "content='{$content}', " + . "pagetitle='{$pagetitle}', " + . "longtitle='{$longtitle}', " + . "type='{$type}', " + . "description='{$description}', " + . "alias='{$alias}', " + . "link_attributes='{$link_attributes}', " + . "isfolder={$isfolder}, " + . "richtext={$richtext}, " + . "published={$published}, " + . "pub_date={$pub_date}, " + . "unpub_date={$unpub_date}, " + . "parent={$parent}, " + . "template={$template}, " + . "menuindex={$menuindex}, " + . "searchable={$searchable}, " + . "cacheable={$cacheable}, " + . "editedby=" . $modx->getLoginUserID() . ", " + . "editedon={$currentdate}, " + . "publishedon={$publishedon}, " + . "publishedby={$publishedby}, " + . "contentType='{$contentType}', " + . "content_dispo={$contentdispo}, " + . "donthit={$donthit}, " + . "menutitle='{$menutitle}', " + . "hidemenu={$hidemenu}, " + . "alias_visible={$aliasvisible}" + , $tbl_site_content, "id='{$id}'"); + + // update template variables + $rs = $modx->db->select('id, tmplvarid', $tbl_site_tmplvar_contentvalues, "contentid='{$id}'"); + $tvIds = array (); + while ($row = $modx->db->getRow($rs)) { + $tvIds[$row['tmplvarid']] = $row['id']; + } + $tvDeletions = array(); + $tvChanges = array(); + foreach ($tmplvars as $field => $value) { + if (!is_array($value)) { + if (isset($tvIds[$value])) $tvDeletions[] = $tvIds[$value]; + } else { + $tvId = $value[0]; + $tvVal = $value[1]; + + if (isset($tvIds[$tvId])) { + $tvChanges[] = array(array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)), array('id' => $tvIds[$tvId])); + } else { + $tvAdded[] = array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)); + } + } + } + + if (!empty($tvDeletions)) { + $modx->db->delete($tbl_site_tmplvar_contentvalues, 'id IN('.implode(',', $tvDeletions).')'); + } + + if (!empty($tvAdded)) { + foreach ($tvAdded as $tv) { + $modx->db->insert($tv, $tbl_site_tmplvar_contentvalues); + } + } + + if (!empty($tvChanges)) { + foreach ($tvChanges as $tv) { + $modx->db->update($tv[0], $tbl_site_tmplvar_contentvalues, "id='{$tv[1]['id']}'"); + } + } + + // set document permissions + if ($use_udperms == 1 && is_array($document_groups)) { + $new_groups = array(); + // process the new input + foreach ($document_groups as $value_pair) { + list($group, $link_id) = explode(',', $value_pair); // @see actions/mutate_content.dynamic.php @ line 1138 (permissions list) + $new_groups[$group] = $link_id; + } + + // grab the current set of permissions on this document the user can access + $isManager = $modx->hasPermission('access_permissions'); + $isWeb = $modx->hasPermission('web_access_permissions'); + $rs = $modx->db->select( + 'groups.id, groups.document_group', + "{$tbl_document_groups} AS groups + LEFT JOIN {$tbl_documentgroup_names} AS dgn ON dgn.id = groups.document_group", + "((1=".(int)$isManager." AND dgn.private_memgroup) OR (1=".(int)$isWeb." AND dgn.private_webgroup)) AND groups.document = '{$id}'" + ); + $old_groups = array(); + while ($row = $modx->db->getRow($rs)) $old_groups[$row['document_group']] = $row['id']; + + // update the permissions in the database + $insertions = $deletions = array(); + foreach ($new_groups as $group => $link_id) { + if (array_key_exists($group, $old_groups)) { + unset($old_groups[$group]); + continue; + } elseif ($link_id == 'new') { + $insertions[] = '('.(int)$group.','.$id.')'; + } + } + if (!empty($insertions)) { + $modx->db->query("INSERT INTO {$tbl_document_groups} (document_group, document) VALUES ".implode(',', $insertions)); + } + if (!empty($old_groups)) { + $modx->db->delete($tbl_document_groups, "id IN (".implode(',', $old_groups).")"); + } + // necessary to remove all permissions as document is public + if ((isset($_POST['chkalldocs']) && $_POST['chkalldocs'] == 'on')) { + $modx->db->delete($tbl_document_groups, "document='{$id}'"); + } + } + + // do the parent stuff + if ($parent != 0) { + $fields = array('isfolder' => 1); + $modx->db->update($fields, $tbl_site_content, "id='{$_REQUEST['parent']}'"); + } + + // finished moving the document, now check to see if the old_parent should no longer be a folder + $rs = $modx->db->select('COUNT(id)', $tbl_site_content, "parent='{$oldparent}'"); + $limit = $modx->db->getValue($rs); + + if ($limit == 0) { + $fields = array('isfolder' => 0); + $modx->db->update($fields, $tbl_site_content, "id='{$oldparent}'"); + } + + + // invoke OnDocFormSave event + $modx->invokeEvent("OnDocFormSave", array ( + "mode" => "upd", + "id" => $id + )); + + // secure web documents - flag as private + include MODX_MANAGER_PATH . "includes/secure_web_documents.inc.php"; + secureWebDocument($id); + + // secure manager documents - flag as private + include MODX_MANAGER_PATH . "includes/secure_mgr_documents.inc.php"; + secureMgrDocument($id); + + // Set the item name for logger + $_SESSION['itemname'] = $no_esc_pagetitle; + + if ($syncsite == 1) { // empty cache $keys = array('alias','parent','published'); $flag = ''; @@ -663,35 +663,35 @@ } if($flag==='full') $modx->clearCache('full'); else $modx->clearCache($id); - } - - if ($_POST['refresh_preview'] == '1') - $header = "Location: ".MODX_SITE_URL."index.php?id=$id&z=manprev"; - else { - if ($_POST['stay'] != '2' && $id > 0) { - $modx->unlockElement(7, $id); - } - if ($_POST['stay'] != '') { - $id = $_REQUEST['id']; - if ($type == "reference") { - // weblink - $a = ($_POST['stay'] == '2') ? "27&id=$id" : "72&pid=$parent"; - } else { - // document - $a = ($_POST['stay'] == '2') ? "27&id=$id" : "4&pid=$parent"; - } - $header = "Location: index.php?a=" . $a . "&r=1&stay=" . $_POST['stay'].$add_path; - } else { - $header = "Location: index.php?a=3&id=$id&r=1".$add_path; - } - } - if (headers_sent()) { - $header = str_replace('Location: ','',$header); - echo "\n"; - } else { - header($header); - } - break; - default : - $modx->webAlertAndQuit("No operation set in request."); + } + + if ($_POST['refresh_preview'] == '1') + $header = "Location: ".MODX_SITE_URL."index.php?id=$id&z=manprev"; + else { + if ($_POST['stay'] != '2' && $id > 0) { + $modx->unlockElement(7, $id); + } + if ($_POST['stay'] != '') { + $id = $_REQUEST['id']; + if ($type == "reference") { + // weblink + $a = ($_POST['stay'] == '2') ? "27&id=$id" : "72&pid=$parent"; + } else { + // document + $a = ($_POST['stay'] == '2') ? "27&id=$id" : "4&pid=$parent"; + } + $header = "Location: index.php?a=" . $a . "&r=1&stay=" . $_POST['stay'].$add_path; + } else { + $header = "Location: index.php?a=3&id=$id&r=1".$add_path; + } + } + if (headers_sent()) { + $header = str_replace('Location: ','',$header); + echo "\n"; + } else { + header($header); + } + break; + default : + $modx->webAlertAndQuit("No operation set in request."); } From d6be64dfe5ccc48a087ad60c4d7fea8843f21d24 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 19 Sep 2017 07:54:12 +0900 Subject: [PATCH 166/577] Fix for recent commit https://github.com/evolution-cms/evolution/commit/510d72f4727eb6535f29f9a4e5693d1aec4776b4#diff-907893dd0ebb6dd1e088480712266ff2 --- manager/processors/save_content.processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index 24c86bc83c..e6a75ed350 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -654,7 +654,7 @@ if ($syncsite == 1) { // empty cache - $keys = array('alias','parent','published'); + $keys = array('alias','parent','published','isfolder','menuindex','alias_visible'); $flag = ''; foreach($keys as $key) { if ($existingDocument[$key]===$_POST[$key]) continue; From d416b754ef03767db186480c25c3bbeb10b7a50b Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 19 Sep 2017 08:04:16 +0900 Subject: [PATCH 167/577] New - $modx->addLog() Easily use $ modx->logEvent () --- manager/includes/document.parser.class.inc.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 975bc3b384..14d6794775 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -5524,6 +5524,14 @@ private static function _getCleanQueryString() { return $q[0]; } } + + public function addLog($title='no title',$msg='',$type=1) { + if($title==='') $title = 'no title'; + if(is_array($msg)) $msg = '
          '.print_r($msg,true).'
          '; + elseif($msg==='') $msg = $_SERVER['REQUEST_URI']; + $this->logEvent(0, $type, $msg, $title); + } + } /** From 21cfd88872b0eb4acae78de8ecb4e84b63a812fd Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 19 Sep 2017 08:21:38 +0900 Subject: [PATCH 168/577] [I] - Log failure of parse tags --- .../includes/document.parser.class.inc.php | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 14d6794775..fe55ca0a7a 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -993,9 +993,13 @@ function mergeDocumentContent($content,$ph=false) { $value = getTVDisplayFormat($value[0], $value[1], $value[2], $value[3], $value[4]); } - if($modifiers!==false) $value = $this->applyFilter($value,$modifiers,$key); + $s = &$matches[0][$i]; + if($modifiers!==false) { + $value = $this->applyFilter($value,$modifiers,$key); + } - $content= str_replace($matches[0][$i], $value, $content); + if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); + else $this->addLog('mergeDocumentContent parse error',$_SERVER['REQUEST_URI'].$s,2); } return $content; @@ -1108,7 +1112,9 @@ function mergeSettingsContent($content,$ph=false) { else continue; if($modifiers!==false) $value = $this->applyFilter($value,$modifiers,$key); - $content= str_replace($matches[0][$i], $value, $content); + $s = &$matches[0][$i]; + if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); + else $this->addLog('mergeSettingsContent parse error',$_SERVER['REQUEST_URI'].$s,2); } return $content; } @@ -1149,7 +1155,9 @@ function mergeChunkContent($content,$ph=false) { if($modifiers!==false) $value = $this->applyFilter($value,$modifiers,$key); - $content= str_replace($matches[0][$i], $value, $content); + $s = &$matches[0][$i]; + if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); + else $this->addLog('mergeChunkContent parse error',$_SERVER['REQUEST_URI'].$s,2); } return $content; } @@ -1185,7 +1193,9 @@ function mergePlaceholderContent($content,$ph=false) { $modifiers = $this->mergePlaceholderContent($modifiers); $value = $this->applyFilter($value,$modifiers,$key); } - $content= str_replace($matches[0][$i], $value, $content); + $s = &$matches[0][$i]; + if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); + else $this->addLog('mergePlaceholderContent parse error',$_SERVER['REQUEST_URI'].$s,2); } return $content; } @@ -1310,7 +1320,9 @@ function escapeLiteralTagsContent($content, $left='<@LITERAL>', $right='<@ENDLIT list($sTags,$rTags) = $this->getTagsForEscape(); foreach($matches[1] as $i=>$v) { $v = str_ireplace($sTags,$rTags,$v); - $content = str_replace($matches[0][$i],$v,$content); + $s = &$matches[0][$i]; + if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); + else $this->addLog('ignoreCommentedTagsContent parse error',$_SERVER['REQUEST_URI'].$s,2); } return $content; } @@ -1439,16 +1451,19 @@ function evalSnippets($content) $this->snippetsCode .= sprintf('
          PARSE PASS %s

          The following snippets (if any) were parsed during this pass.

          ', $this->snipLapCount); foreach($matches[1] as $i=>$call) { + $s = &$matches[0][$i]; if(substr($call,0,2)==='$_') { if(strpos($content,'_PHX_INTERNAL_')===false) $value = $this->_getSGVar($call); - else $value = $matches[0][$i]; - $content = str_replace($matches[0][$i], $value, $content); + else $value = $s; + if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); + else $this->addLog('evalSnippetsSGVar parse error',$_SERVER['REQUEST_URI'].$s,2); continue; } $value = $this->_get_snip_result($call); if(is_null($value)) continue; - $content = str_replace($matches[0][$i], $value, $content); + if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); + else $this->addLog('evalSnippets parse error',$_SERVER['REQUEST_URI'].$s,2); } if ($this->dumpSnippets) $this->snippetsCode .= '

          '; @@ -3578,13 +3593,15 @@ function parseText($tpl='', $ph=array(), $left= '[+', $right= '+]', $execModifie $value = $ph[$key]; + $s = &$matches[0][$i]; if($modifiers!==false) { if(strpos($modifiers,$left)!==false) { $modifiers = $this->parseText($modifiers,$ph,$left,$right); } $value = $this->applyFilter($value,$modifiers,$key); } - $tpl = str_replace($matches[0][$i], $value, $tpl); + if(strpos($tpl,$s)!==false) $tpl= str_replace($s, $value, $tpl); + else $this->addLog('parseText parse error',$_SERVER['REQUEST_URI'].$s,2); } return $tpl; From 29d48aff187fa26a3b37d0ee21b1d8bfebf23e2f Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 19 Sep 2017 11:29:27 +0900 Subject: [PATCH 169/577] #109 Fix - minifyphp_incache breaks heredoc syntax --- manager/processors/cache_sync.class.processor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 8654035310..7f0288d30b 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -341,8 +341,9 @@ function php_strip_whitespace($source) { case T_DOUBLE_ARROW : case T_BOOLEAN_AND : case T_BOOLEAN_OR : + case T_START_HEREDOC : + if($prev_token!=T_START_HEREDOC) $_ = trim($_); $prev_token=$type; - $_ = trim($_); $_ .= $text; break; default: From 54047c6408b211407dc33981e5d056377cce5c03 Mon Sep 17 00:00:00 2001 From: ProjectSoft Date: Tue, 19 Sep 2017 14:10:02 +0400 Subject: [PATCH 170/577] =?UTF-8?q?=D0=9D=D0=B5=20=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Не верное отображение символов ![Не верное отображение символов](https://monosnap.com/file/0iEt2ZcPPE3RgmG2mBqKDqRKigeZk8.png) --- manager/actions/mutate_templates.dynamic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/actions/mutate_templates.dynamic.php b/manager/actions/mutate_templates.dynamic.php index 3db63f5441..b715c30802 100644 --- a/manager/actions/mutate_templates.dynamic.php +++ b/manager/actions/mutate_templates.dynamic.php @@ -133,7 +133,7 @@
          From 78016d66a9e5e4bc036c3ba812949a50dc1bcfa0 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Tue, 19 Sep 2017 13:29:50 +0200 Subject: [PATCH 171/577] Login box animation Added small animation to Manager login box --- manager/media/style/default/css/custom.css | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/manager/media/style/default/css/custom.css b/manager/media/style/default/css/custom.css index 57e821aab3..3e0fb64f22 100644 --- a/manager/media/style/default/css/custom.css +++ b/manager/media/style/default/css/custom.css @@ -308,3 +308,43 @@ form#docfinder div.tab-page { height: auto !important } /* multiTV */ .multitv .list li.element a.copy, .multitv .list li.element a.remove { width: 25px !important; text-align: center; background: #fff !important; top: -10px !important; } .multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background: #fefefe !important; margin-bottom: 10px !important; } + +/* loginbox animation */ +@keyframes anim-loginbox { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} +@-webkit-keyframes anim-loginbox { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} +.loginbox { + -webkit-animation-name: anim-loginbox; + -webkit-animation-duration: .5s; + -webkit-animation-iteration-count: 1; + -webkit-animation-timing-function: ease; + -webkit-animation-fill-mode: forwards; + -moz-animation-name: anim-loginbox; + -moz-animation-duration: .5s; + -moz-animation-iteration-count: 1; + -moz-animation-timing-function: ease; + -moz-animation-fill-mode: forwards; + animation-name: anim-loginbox; + animation-duration: .5s; + animation-iteration-count: 1; + animation-timing-function: ease; + animation-fill-mode: forwards; +} +/* end loginbox animation */ \ No newline at end of file From d8ef97a2ceaebee14dfe5dd206ed06eaf80eaf5f Mon Sep 17 00:00:00 2001 From: yamamoto Date: Tue, 19 Sep 2017 19:58:49 +0900 Subject: [PATCH 172/577] [I] strip_tags modifier https://www.google.com/search?q=strip_tags+style+script --- manager/includes/extenders/modifiers.class.inc.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index ce73e3ede7..dde46b3fd9 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -410,7 +410,7 @@ function getValueFromPreset($key, $value, $cmd, $opt) $value = preg_replace('@()\n@','$1',$value); $value = preg_replace('@@',"\n",$value); } - return strip_tags($value,$params); + return $this->strip_tags($value,$params); case 'urlencode': case 'encode_url': return urlencode($value); @@ -1132,4 +1132,16 @@ function str_shuffle($str) { function str_word_count($str) { return count(preg_split('~[^\p{L}\p{N}\']+~u',$str)); } + function strip_tags($value,$params='') { + global $modx; + + if(stripos($params,'style')===false && stripos($value,'')!==false) { + $value = preg_replace('@.*?@is', '', $value); + } + if(stripos($params,'script')===false && stripos($value,'')!==false) { + $value = preg_replace('@.*?@is', '', $value); + } + + return trim(strip_tags($value,$params)); + } } From 5efed9f787271b33c600a088142079c5dfe49308 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 05:09:01 +0900 Subject: [PATCH 173/577] Fix for recent commit https://github.com/evolution-cms/evolution/commit/1b3f3dd2ccc4a3056f5420191dcead4c2dce90fb#commitcomment-24411843 --- manager/processors/cache_sync.class.processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 7f0288d30b..a6f50de74d 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -171,7 +171,7 @@ public function buildCache($modx) { $f['isfolder'] = 'c.isfolder'; $f['alias_visible'] = 'c.alias_visible'; $from = array(); - $from[] = '[+prefix+]site_content'; + $from[] = '[+prefix+]site_content c'; $from[] = 'LEFT JOIN [+prefix+]site_content p ON p.id=c.parent'; $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); From 7bd9df4959bc69655537a0b51eee80ebfe62838d Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 09:59:45 +0900 Subject: [PATCH 174/577] #225 Ditto pagination issue --- assets/snippets/ditto/classes/ditto.class.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php index 1aa86920c6..1fe251a504 100644 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ b/assets/snippets/ditto/classes/ditto.class.inc.php @@ -160,6 +160,7 @@ function parseOrderBy($orderBy,$randomize) { $orderBy['parsed'][] = array($sortBy,strtoupper($sortDir)); } } + if(!isset($orderBy['parsed'][0])) $orderBy['parsed'][0] = array('id','ASC'); $orderBy['sql'] = join(', ',$this->sqlOrderBy); unset($orderBy['unparsed']); return $orderBy; From f1c6276d99275776bcfefdf034c66ca2567d6469 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 10:07:34 +0900 Subject: [PATCH 175/577] Change tabs to spaces --- .../ditto/classes/ditto.class.inc.php | 2030 ++++++++--------- 1 file changed, 1015 insertions(+), 1015 deletions(-) diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php index 1fe251a504..63d2e74f0a 100644 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ b/assets/snippets/ditto/classes/ditto.class.inc.php @@ -3,338 +3,338 @@ /* * Title: Main Class * Purpose: - * The Ditto class contains all functions relating to Ditto's - * functionality and any supporting functions they need + * The Ditto class contains all functions relating to Ditto's + * functionality and any supporting functions they need */ class ditto { - var $template,$resource,$format,$debug,$advSort,$sqlOrderBy,$customReset,$fields,$constantFields,$prefetch,$sortOrder,$customPlaceholdersMap; + var $template,$resource,$format,$debug,$advSort,$sqlOrderBy,$customReset,$fields,$constantFields,$prefetch,$sortOrder,$customPlaceholdersMap; - function __construct($dittoID,$format,$language,$debug) { - $this->format = $format; - $GLOBALS['ditto_lang'] = $language; - $this->prefetch = false; - $this->advSort = false; - $this->sqlOrderBy = array(); - $this->customReset = array(); - $this->constantFields[] = array('db','tv'); - $this->constantFields['db'] = explode(',', 'id,type,contentType,pagetitle,longtitle,description,alias,link_attributes,published,pub_date,unpub_date,parent,isfolder,introtext,content,richtext,template,menuindex,searchable,cacheable,createdby,createdon,editedby,editedon,deleted,deletedon,deletedby,publishedon,publishedby,menutitle,donthit,privateweb,privatemgr,content_dispo,hidemenu'); - $this->constantFields['tv'] = $this->getTVList(); - $GLOBALS['ditto_constantFields'] = $this->constantFields; - $this->fields = array('display'=>array(),'backend'=>array('tv'=>array(),'db'=>array('id', 'published'))); - $this->sortOrder = false; - $this->customPlaceholdersMap = array(); - $this->template = new template(); - - if (!is_null($debug)) $this->debug = new debug($debug); - } + function __construct($dittoID,$format,$language,$debug) { + $this->format = $format; + $GLOBALS['ditto_lang'] = $language; + $this->prefetch = false; + $this->advSort = false; + $this->sqlOrderBy = array(); + $this->customReset = array(); + $this->constantFields[] = array('db','tv'); + $this->constantFields['db'] = explode(',', 'id,type,contentType,pagetitle,longtitle,description,alias,link_attributes,published,pub_date,unpub_date,parent,isfolder,introtext,content,richtext,template,menuindex,searchable,cacheable,createdby,createdon,editedby,editedon,deleted,deletedon,deletedby,publishedon,publishedby,menutitle,donthit,privateweb,privatemgr,content_dispo,hidemenu'); + $this->constantFields['tv'] = $this->getTVList(); + $GLOBALS['ditto_constantFields'] = $this->constantFields; + $this->fields = array('display'=>array(),'backend'=>array('tv'=>array(),'db'=>array('id', 'published'))); + $this->sortOrder = false; + $this->customPlaceholdersMap = array(); + $this->template = new template(); + + if (!is_null($debug)) $this->debug = new debug($debug); + } - // --------------------------------------------------- - // Function: getTVList - // Get a list of all available TVs - // --------------------------------------------------- - - function getTVList() { - global $modx; - // TODO: make it so that it only pulls those that apply to the current template - $tvs = $modx->db->select('name', '[+prefix+]site_tmplvars'); - $dbfields = $modx->db->getColumn('name', $tvs); - return $dbfields; - } - - // --------------------------------------------------- - // Function: addField - // Add a field to the internal field detection system - // --------------------------------------------------- - - function addField($name,$location,$type=false) { - if ($type === false) { - $type = $this->getDocVarType($name); - } - if ($type == 'tv:prefix') { - $type = 'tv'; - $name = substr($name, 2); - } - if ($location == "*") { + // --------------------------------------------------- + // Function: getTVList + // Get a list of all available TVs + // --------------------------------------------------- + + function getTVList() { + global $modx; + // TODO: make it so that it only pulls those that apply to the current template + $tvs = $modx->db->select('name', '[+prefix+]site_tmplvars'); + $dbfields = $modx->db->getColumn('name', $tvs); + return $dbfields; + } + + // --------------------------------------------------- + // Function: addField + // Add a field to the internal field detection system + // --------------------------------------------------- + + function addField($name,$location,$type=false) { + if ($type === false) { + $type = $this->getDocVarType($name); + } + if ($type == 'tv:prefix') { + $type = 'tv'; + $name = substr($name, 2); + } + if ($location == "*") { $this->fields["backend"][$type][] = $name; $this->fields["display"][$type][] = $name; } else { $this->fields[$location][$type][] = $name; } - } - - // --------------------------------------------------- - // Function: addFields - // Add a field to the internal field detection system - // from an array or delimited string - // --------------------------------------------------- - - function addFields($fields,$location='*',$delimiter=',',$callback=false) { - if (empty($fields)) return false; - if (!is_array($fields)) { - if (strpos($fields,$delimiter)!==false) $fields = explode($delimiter,$fields); - else $fields = array($fields); - } - foreach ($fields as $field) { - if (is_array($field)) { - $type = isset($field[2]) ? $field[2] : false; - $name = $field[0]; - } else { - $name = $field; - $type = false; - } - - $this->addField($name,$location,$type); - if ($callback !== false) call_user_func_array($callback, array($name)); - } - return true; - } - - // --------------------------------------------------- - // Function: removeField - // Remove a field to the internal field detection system - // --------------------------------------------------- - - function removeField($name,$location,$type) { - $key = array_search ($name, $this->fields[$location][$type]); - if ($key !== false) unset($this->fields[$location][$type][$key]); - } - - // --------------------------------------------------- - // Function: setDisplayFields - // Move the detected fields into the Ditto fields array - // --------------------------------------------------- - - function setDisplayFields($fields,$hiddenFields) { - $this->fields['display'] = $fields; - if ($hiddenFields) $this->addFields($hiddenFields,'display'); - } + } + + // --------------------------------------------------- + // Function: addFields + // Add a field to the internal field detection system + // from an array or delimited string + // --------------------------------------------------- + + function addFields($fields,$location='*',$delimiter=',',$callback=false) { + if (empty($fields)) return false; + if (!is_array($fields)) { + if (strpos($fields,$delimiter)!==false) $fields = explode($delimiter,$fields); + else $fields = array($fields); + } + foreach ($fields as $field) { + if (is_array($field)) { + $type = isset($field[2]) ? $field[2] : false; + $name = $field[0]; + } else { + $name = $field; + $type = false; + } + + $this->addField($name,$location,$type); + if ($callback !== false) call_user_func_array($callback, array($name)); + } + return true; + } + + // --------------------------------------------------- + // Function: removeField + // Remove a field to the internal field detection system + // --------------------------------------------------- + + function removeField($name,$location,$type) { + $key = array_search ($name, $this->fields[$location][$type]); + if ($key !== false) unset($this->fields[$location][$type][$key]); + } + + // --------------------------------------------------- + // Function: setDisplayFields + // Move the detected fields into the Ditto fields array + // --------------------------------------------------- + + function setDisplayFields($fields,$hiddenFields) { + $this->fields['display'] = $fields; + if ($hiddenFields) $this->addFields($hiddenFields,'display'); + } - // --------------------------------------------------- - // Function: getDocVarType - // Determine if the provided field is a tv, a database field, or something else - // --------------------------------------------------- - - function getDocVarType($field) { - global $ditto_constantFields; - - $tvFields = $ditto_constantFields['tv']; - $dbFields = $ditto_constantFields['db']; - - if(in_array($field, $tvFields)) return 'tv'; - elseif(in_array(substr($field,2), $tvFields)) return 'tv:prefix'; // TODO: Remove TV Prefix support - elseif(in_array($field, $dbFields)) return 'db'; - else return 'unknown'; - } + // --------------------------------------------------- + // Function: getDocVarType + // Determine if the provided field is a tv, a database field, or something else + // --------------------------------------------------- + + function getDocVarType($field) { + global $ditto_constantFields; + + $tvFields = $ditto_constantFields['tv']; + $dbFields = $ditto_constantFields['db']; + + if(in_array($field, $tvFields)) return 'tv'; + elseif(in_array(substr($field,2), $tvFields)) return 'tv:prefix'; // TODO: Remove TV Prefix support + elseif(in_array($field, $dbFields)) return 'db'; + else return 'unknown'; + } - // --------------------------------------------------- - // Function: parseOrderBy - // Parse out orderBy parameter string - // --------------------------------------------------- + // --------------------------------------------------- + // Function: parseOrderBy + // Parse out orderBy parameter string + // --------------------------------------------------- - function parseOrderBy($orderBy,$randomize) { - if ($randomize != 0) {return false;} - $orderBy['sql'] = array(); + function parseOrderBy($orderBy,$randomize) { + if ($randomize != 0) {return false;} + $orderBy['sql'] = array(); - foreach ($orderBy['parsed'] as $item) { - $this->addFields($item[0],'backend'); - $this->checkAdvSort($item[0],$item[1]); - } - - foreach ($orderBy['custom'] as $item) { - $this->addFields($item[0],'backend'); - $this->checkAdvSort($item[0]); - } + foreach ($orderBy['parsed'] as $item) { + $this->addFields($item[0],'backend'); + $this->checkAdvSort($item[0],$item[1]); + } + + foreach ($orderBy['custom'] as $item) { + $this->addFields($item[0],'backend'); + $this->checkAdvSort($item[0]); + } - if (!is_null($orderBy['unparsed'])) { - $inputs = array_filter(array_map('trim', explode(',', $orderBy['unparsed']))); - foreach ($inputs as $input) { - $position = strrpos($input,' '); - // find last space - $sortBy = substr($input,0,$position); - $sortBy = !empty($sortBy) ? $sortBy : 'id'; - $sortDir = substr($input,$position); - $sortDir = !empty($sortDir) ? trim($sortDir) : 'asc'; - $sortBy = $this->checkAdvSort($sortBy,$sortDir); - $this->addField($sortBy,'backend'); - $orderBy['parsed'][] = array($sortBy,strtoupper($sortDir)); - } - } + if (!is_null($orderBy['unparsed'])) { + $inputs = array_filter(array_map('trim', explode(',', $orderBy['unparsed']))); + foreach ($inputs as $input) { + $position = strrpos($input,' '); + // find last space + $sortBy = substr($input,0,$position); + $sortBy = !empty($sortBy) ? $sortBy : 'id'; + $sortDir = substr($input,$position); + $sortDir = !empty($sortDir) ? trim($sortDir) : 'asc'; + $sortBy = $this->checkAdvSort($sortBy,$sortDir); + $this->addField($sortBy,'backend'); + $orderBy['parsed'][] = array($sortBy,strtoupper($sortDir)); + } + } if(!isset($orderBy['parsed'][0])) $orderBy['parsed'][0] = array('id','ASC'); - $orderBy['sql'] = join(', ',$this->sqlOrderBy); - unset($orderBy['unparsed']); - return $orderBy; - } - - // --------------------------------------------------- - // Function: checkAdvSort - // Check the advSortString - // --------------------------------------------------- - function checkAdvSort($sortBy,$sortDir='asc') { - $advSort = array ('pub_date','unpub_date','editedon','deletedon','publishedon'); - $type = $this->getDocVarType($sortBy); - switch($type) { - case 'tv:prefix': - $sortBy = substr($sortBy, 2); - $this->advSort = true; - break; - case 'tv': - $this->advSort = true; - break; - case 'db': - if (in_array($sortBy, $advSort)) { - $this->advSort = true; - $this->customReset[] = $sortBy; - } else { - $this->sqlOrderBy[] = 'sc.'.$sortBy.' '.$sortDir; - } - break; - } - return $sortBy; - } - - // --------------------------------------------------- - // Function: parseFilters - // Split up the filters into an array and add the required fields to the fields array - // --------------------------------------------------- + $orderBy['sql'] = join(', ',$this->sqlOrderBy); + unset($orderBy['unparsed']); + return $orderBy; + } + + // --------------------------------------------------- + // Function: checkAdvSort + // Check the advSortString + // --------------------------------------------------- + function checkAdvSort($sortBy,$sortDir='asc') { + $advSort = array ('pub_date','unpub_date','editedon','deletedon','publishedon'); + $type = $this->getDocVarType($sortBy); + switch($type) { + case 'tv:prefix': + $sortBy = substr($sortBy, 2); + $this->advSort = true; + break; + case 'tv': + $this->advSort = true; + break; + case 'db': + if (in_array($sortBy, $advSort)) { + $this->advSort = true; + $this->customReset[] = $sortBy; + } else { + $this->sqlOrderBy[] = 'sc.'.$sortBy.' '.$sortDir; + } + break; + } + return $sortBy; + } + + // --------------------------------------------------- + // Function: parseFilters + // Split up the filters into an array and add the required fields to the fields array + // --------------------------------------------------- - function parseFilters($filter=false,$cFilters=false,$pFilters = false,$globalDelimiter,$localDelimiter) { - $parsedFilters = array('basic'=>array(),'custom'=>array()); - $filters = explode($globalDelimiter, $filter); - if (!empty($filters)) { - foreach ($filters AS $filter) { - if (!empty($filter)) { - $filterArray = explode($localDelimiter, $filter); - $source = $filterArray[0]; - $this->addField($source,'backend'); - $value = $filterArray[1]; - $mode = (isset ($filterArray[2])) ? $filterArray[2] : 1; - $parsedFilters['basic'][] = array('source'=>$source,'value'=>$value,'mode'=>$mode); - } - } - } - if ($cFilters) { - foreach ($cFilters as $name=>$value) { - if (!empty($name) && !empty($value)) { - $parsedFilters['custom'][$name] = $value[1]; - $this->addFields($value[0],'backend'); - } - } // TODO: Replace addField with addFields with callback - } - if($pFilters) { - foreach ($pFilters as $filter) { - foreach ($filter as $name=>$value) { - $parsedFilters['basic'][] = $value; - $this->addFields($value['source'],'backend'); - } - } // TODO: Replace addField with addFields with callback - } - return $parsedFilters; - } + function parseFilters($filter=false,$cFilters=false,$pFilters = false,$globalDelimiter,$localDelimiter) { + $parsedFilters = array('basic'=>array(),'custom'=>array()); + $filters = explode($globalDelimiter, $filter); + if (!empty($filters)) { + foreach ($filters AS $filter) { + if (!empty($filter)) { + $filterArray = explode($localDelimiter, $filter); + $source = $filterArray[0]; + $this->addField($source,'backend'); + $value = $filterArray[1]; + $mode = (isset ($filterArray[2])) ? $filterArray[2] : 1; + $parsedFilters['basic'][] = array('source'=>$source,'value'=>$value,'mode'=>$mode); + } + } + } + if ($cFilters) { + foreach ($cFilters as $name=>$value) { + if (!empty($name) && !empty($value)) { + $parsedFilters['custom'][$name] = $value[1]; + $this->addFields($value[0],'backend'); + } + } // TODO: Replace addField with addFields with callback + } + if($pFilters) { + foreach ($pFilters as $filter) { + foreach ($filter as $name=>$value) { + $parsedFilters['basic'][] = $value; + $this->addFields($value['source'],'backend'); + } + } // TODO: Replace addField with addFields with callback + } + return $parsedFilters; + } - // --------------------------------------------------- - // Function: render - // Render the document output - // --------------------------------------------------- - - function render($doc, $template, $removeChunk,$dateSource,$dateFormat,$customPlaceholders=array(),$phx=1,$x=0,$stop=1) { - global $modx,$ditto_lang; + // --------------------------------------------------- + // Function: render + // Render the document output + // --------------------------------------------------- + + function render($doc, $template, $removeChunk,$dateSource,$dateFormat,$customPlaceholders=array(),$phx=1,$x=0,$stop=1) { + global $modx,$ditto_lang; - if (!is_array($doc)) return $ditto_lang['resource_array_error']; - - $ph = $doc; - $contentVars = array(); - $exFields =& $this->fields['display']['custom']; - - foreach ($doc as $name=>$value) { - $contentVars["[*{$name}*]"] = $value; - } + if (!is_array($doc)) return $ditto_lang['resource_array_error']; + + $ph = $doc; + $contentVars = array(); + $exFields =& $this->fields['display']['custom']; + + foreach ($doc as $name=>$value) { + $contentVars["[*{$name}*]"] = $value; + } - if (in_array('author',$exFields)) $ph['author'] = $this->getAuthor($doc['createdby']); - if (in_array('title',$exFields)) $ph['title'] = $doc['pagetitle']; - if (in_array('ditto_iteration',$exFields)) $ph['ditto_iteration'] = $x; - - //Added by Andchir - $r_start = isset($_GET['start']) ? $_GET['start'] : 0; - $ph['ditto_index'] = $r_start+$x+1; - + if (in_array('author',$exFields)) $ph['author'] = $this->getAuthor($doc['createdby']); + if (in_array('title',$exFields)) $ph['title'] = $doc['pagetitle']; + if (in_array('ditto_iteration',$exFields)) $ph['ditto_iteration'] = $x; + + //Added by Andchir + $r_start = isset($_GET['start']) ? $_GET['start'] : 0; + $ph['ditto_index'] = $r_start+$x+1; + //Added by Dmi3yy placeholder ditto_class - $class = array(); - if($x % 2 == 0) $class[] = 'even'; - else $class[] = 'odd'; - - if ($x==0) $class[] = 'first'; - if ($x==($stop -1)) $class[] = 'last'; - if ($doc['id'] == $modx->documentIdentifier) $class[] = 'current'; - $ph['ditto_class'] = join(' ', $class); + $class = array(); + if($x % 2 == 0) $class[] = 'even'; + else $class[] = 'odd'; + + if ($x==0) $class[] = 'first'; + if ($x==($stop -1)) $class[] = 'last'; + if ($doc['id'] == $modx->documentIdentifier) $class[] = 'current'; + $ph['ditto_class'] = join(' ', $class); - // set url placeholder - if (in_array('url',$exFields)) { - if($doc['id']==$modx->config['site_start']) $ph['url'] = $modx->config['site_url']; - else $ph['url'] = $modx->makeURL($doc['id'],'','','full'); - } + // set url placeholder + if (in_array('url',$exFields)) { + if($doc['id']==$modx->config['site_start']) $ph['url'] = $modx->config['site_url']; + else $ph['url'] = $modx->makeURL($doc['id'],'','','full'); + } - if (in_array('date',$exFields)) { - $timestamp = ($doc[$dateSource] != '0') ? $doc[$dateSource] : $doc['createdon']; - if (is_array($timestamp)) { - if(!$this->isNum($timestamp[1])) $timestamp[1] = strtotime($timestamp[1]); + if (in_array('date',$exFields)) { + $timestamp = ($doc[$dateSource] != '0') ? $doc[$dateSource] : $doc['createdon']; + if (is_array($timestamp)) { + if(!$this->isNum($timestamp[1])) $timestamp[1] = strtotime($timestamp[1]); $timestamp = $timestamp[1] + $timestamp[0]; } - $ph['date'] = strftime($dateFormat,$timestamp); - } - - if (in_array('content',$this->fields['display']['db']) && $this->format != 'html') { + $ph['date'] = strftime($dateFormat,$timestamp); + } + + if (in_array('content',$this->fields['display']['db']) && $this->format != 'html') { $ph['content'] = $this->relToAbs($doc['content'], $modx->config['site_url']); } if (in_array('introtext',$this->fields['display']['db']) && $this->format != 'html') { $ph['introtext'] = $this->relToAbs($doc['introtext'], $modx->config['site_url']); } - - // set custom placeholder - foreach ($customPlaceholders as $name=>$value) { - if ($name != '*') { - $ph[$name] = call_user_func($value[1],$doc); - unset($customPlaceholders[$name]); - } - } - - foreach ($customPlaceholders as $name=>$value) { - $ph = call_user_func($value,$ph); - } - - if ($phx) $output = $this->parseModifiers($template,$ph,$contentVars); - else { - $output = $this->template->replace($ph,$template); - $output = $this->template->replace($contentVars,$output); - } - - if ($removeChunk) { - foreach ($removeChunk as $chunk) { - $output = str_replace('{{'.$chunk.'}}','',$output); - $output = str_replace($modx->getChunk($chunk),'',$output); - // remove chunk that is not wanted - } - } - return $output; - } - - function parseModifiers($tpl,$ph,$contentVars){ - global $modx; - if ($modx->config['enable_filter']) { - $content = $this->parseDocumentSource($tpl,$ph); - } - else { - foreach($ph as $key=>$content) { - $ph[$key] = str_replace( array_keys($contentVars), array_values($contentVars), $content ); - } - $phx = new prePHx($tpl); - $phx->setPlaceholders($ph); - $content = $phx->output(); - } - return $content; - } - + + // set custom placeholder + foreach ($customPlaceholders as $name=>$value) { + if ($name != '*') { + $ph[$name] = call_user_func($value[1],$doc); + unset($customPlaceholders[$name]); + } + } + + foreach ($customPlaceholders as $name=>$value) { + $ph = call_user_func($value,$ph); + } + + if ($phx) $output = $this->parseModifiers($template,$ph,$contentVars); + else { + $output = $this->template->replace($ph,$template); + $output = $this->template->replace($contentVars,$output); + } + + if ($removeChunk) { + foreach ($removeChunk as $chunk) { + $output = str_replace('{{'.$chunk.'}}','',$output); + $output = str_replace($modx->getChunk($chunk),'',$output); + // remove chunk that is not wanted + } + } + return $output; + } + + function parseModifiers($tpl,$ph,$contentVars){ + global $modx; + if ($modx->config['enable_filter']) { + $content = $this->parseDocumentSource($tpl,$ph); + } + else { + foreach($ph as $key=>$content) { + $ph[$key] = str_replace( array_keys($contentVars), array_values($contentVars), $content ); + } + $phx = new prePHx($tpl); + $phx->setPlaceholders($ph); + $content = $phx->output(); + } + return $content; + } + function parseDocumentSource($content='',$ph) { global $modx; @@ -367,759 +367,759 @@ function parseDocumentSource($content='',$ph) return $content; } - // --------------------------------------------------- - // Function: parseFields - // Find the fields that are contained in the custom placeholders or those that are needed in other functions - // --------------------------------------------------- - - function parseFields($placeholders,$seeThruUnpub,$dateSource,$randomize) { - $this->parseCustomPlaceholders($placeholders); - $this->parseDBFields($seeThruUnpub); - if ($randomize != 0) { - $this->addField($randomize,'backend'); - } - $this->addField('id','display','db'); - $this->addField('pagetitle','display','db'); - $this->addField('parent','display','db'); - $checkOptions = array('pub_date','unpub_date','editedon','deletedon','publishedon'); - if (in_array($dateSource,$checkOptions)) { - $this->addField('createdon','display'); - } - if (in_array('date',$this->fields['display']['custom'])) { - $this->addField($dateSource,'display'); - } - $this->fields = $this->arrayUnique($this->fields); - } + // --------------------------------------------------- + // Function: parseFields + // Find the fields that are contained in the custom placeholders or those that are needed in other functions + // --------------------------------------------------- + + function parseFields($placeholders,$seeThruUnpub,$dateSource,$randomize) { + $this->parseCustomPlaceholders($placeholders); + $this->parseDBFields($seeThruUnpub); + if ($randomize != 0) { + $this->addField($randomize,'backend'); + } + $this->addField('id','display','db'); + $this->addField('pagetitle','display','db'); + $this->addField('parent','display','db'); + $checkOptions = array('pub_date','unpub_date','editedon','deletedon','publishedon'); + if (in_array($dateSource,$checkOptions)) { + $this->addField('createdon','display'); + } + if (in_array('date',$this->fields['display']['custom'])) { + $this->addField($dateSource,'display'); + } + $this->fields = $this->arrayUnique($this->fields); + } - // --------------------------------------------------- - // Function: arrayUnique - // Make fields array unique - // --------------------------------------------------- - - function arrayUnique($array) { - foreach($array as $u => $a) { - foreach ($a as $n => $b) { - $array[$u][$n] = array_unique($b); - } - } - return $array; - } - - // --------------------------------------------------- - // Function: parseCustomPlaceholders - // Parse the required fields out of the custom placeholders - // --------------------------------------------------- - - function parseCustomPlaceholders($placeholders) { - foreach ($placeholders as $name=>$value) { - $this->addField($name,'display','custom'); - $this->removeField($name,'display','unknown'); - $source = $value[0]; - - if(is_array($source)) { - if(strpos($source[0],',')!==false){ - $fields = array_filter(array_map('trim', explode(',', $source[0]))); - foreach ($fields as $field) { - $this->addField($field,$source[1]); - $this->customPlaceholdersMap[$name] = $field; - } - } else { - $this->addField($source[0],$source[1]); - $this->customPlaceholdersMap[$name] = $source[0]; - } // TODO: Replace addField with addFields with callback - } elseif(is_array($value)) { - $fields = array_filter(array_map('trim', explode(',', $source))); - foreach ($fields as $field) { - $this->addField($field,'display'); - $this->customPlaceholdersMap[$name] = $field; - } - } - } - } - - // --------------------------------------------------- - // Function: parseDBFields - // Parse out the fields required for each state - // --------------------------------------------------- - - function parseDBFields($seeThruUnpub) { - if (!$seeThruUnpub) { - $this->addField('parent','backend','db'); - } - - if (in_array('author',$this->fields['display']['custom'])) { - $this->fields['display']['db'][] = 'createdby'; - } - - if (count($this->fields['display']['tv']) >= 0) { - $this->addField('published','display','db'); - } - } - - // --------------------------------------------------- - // Function: getAuthor - // Get the author name, or if not available the username - // --------------------------------------------------- - - public static function getAuthor($createdby) { - global $modx; - - $user = false; - if ($createdby > 0) { - $user = $modx->getUserInfo($createdby); - } else { - $user = $modx->getWebUserInfo(abs($createdby)); - } - if ($user === false) { - // get admin user name - $user = $modx->getUserInfo(1); - } - return ($user['fullname'] != '') ? $user['fullname'] : $user['username']; - } - - // --------------------------------------------------- - // Function: customSort - // Sort resource array if advanced sorting is needed - // --------------------------------------------------- + // --------------------------------------------------- + // Function: arrayUnique + // Make fields array unique + // --------------------------------------------------- + + function arrayUnique($array) { + foreach($array as $u => $a) { + foreach ($a as $n => $b) { + $array[$u][$n] = array_unique($b); + } + } + return $array; + } + + // --------------------------------------------------- + // Function: parseCustomPlaceholders + // Parse the required fields out of the custom placeholders + // --------------------------------------------------- + + function parseCustomPlaceholders($placeholders) { + foreach ($placeholders as $name=>$value) { + $this->addField($name,'display','custom'); + $this->removeField($name,'display','unknown'); + $source = $value[0]; + + if(is_array($source)) { + if(strpos($source[0],',')!==false){ + $fields = array_filter(array_map('trim', explode(',', $source[0]))); + foreach ($fields as $field) { + $this->addField($field,$source[1]); + $this->customPlaceholdersMap[$name] = $field; + } + } else { + $this->addField($source[0],$source[1]); + $this->customPlaceholdersMap[$name] = $source[0]; + } // TODO: Replace addField with addFields with callback + } elseif(is_array($value)) { + $fields = array_filter(array_map('trim', explode(',', $source))); + foreach ($fields as $field) { + $this->addField($field,'display'); + $this->customPlaceholdersMap[$name] = $field; + } + } + } + } + + // --------------------------------------------------- + // Function: parseDBFields + // Parse out the fields required for each state + // --------------------------------------------------- + + function parseDBFields($seeThruUnpub) { + if (!$seeThruUnpub) { + $this->addField('parent','backend','db'); + } + + if (in_array('author',$this->fields['display']['custom'])) { + $this->fields['display']['db'][] = 'createdby'; + } + + if (count($this->fields['display']['tv']) >= 0) { + $this->addField('published','display','db'); + } + } + + // --------------------------------------------------- + // Function: getAuthor + // Get the author name, or if not available the username + // --------------------------------------------------- + + public static function getAuthor($createdby) { + global $modx; + + $user = false; + if ($createdby > 0) { + $user = $modx->getUserInfo($createdby); + } else { + $user = $modx->getWebUserInfo(abs($createdby)); + } + if ($user === false) { + // get admin user name + $user = $modx->getUserInfo(1); + } + return ($user['fullname'] != '') ? $user['fullname'] : $user['username']; + } + + // --------------------------------------------------- + // Function: customSort + // Sort resource array if advanced sorting is needed + // --------------------------------------------------- - function customSort($data, $fields, $order) { - // Covert $fields string to array - // user contributed - $sortfields = array_filter(array_map('trim', explode(',', $fields))); + function customSort($data, $fields, $order) { + // Covert $fields string to array + // user contributed + $sortfields = array_filter(array_map('trim', explode(',', $fields))); - $code = ''; - foreach($sortfields as $field) { - $code .= sprintf('$retval = strnatcmp($a["%s"], $b["%s"]); if($retval) return $retval; ',$field,$field); - } - $code .= 'return $retval;'; + $code = ''; + foreach($sortfields as $field) { + $code .= sprintf('$retval = strnatcmp($a["%s"], $b["%s"]); if($retval) return $retval; ',$field,$field); + } + $code .= 'return $retval;'; - $params = ($order == 'ASC') ? '$a,$b' : '$b,$a'; - uasort($data, create_function($params, $code)); - return $data; - } + $params = ($order == 'ASC') ? '$a,$b' : '$b,$a'; + uasort($data, create_function($params, $code)); + return $data; + } - // --------------------------------------------------- - // Function: userSort - // Sort the resource array by a user defined function - // --------------------------------------------------- - function userSort($resource,$sort) { - foreach ($sort['custom'] as $item) { - usort($resource,$item[1]); - } - return $resource; - } - - // --------------------------------------------------- - // Function: multiSort - // Sort the resource array by multiple fields - // Rows->Columns portion by Jon L. -- intel352@gmail.com - // Link: http://de3.php.net/manual/en/function.array-multisort.php#73498 - // --------------------------------------------------- - - function multiSort($resource,$orderBy) { - $sort_arr = array(); - foreach($resource as $uniqid => $row){ - foreach($row as $key=>$value){ - $sort_arr[$key][$uniqid] = $value; - } - } - - $_ =''; - foreach ($orderBy['parsed'] as $sort) { - $_ .= sprintf('$sort_arr["%s"], SORT_%s, ', $sort[0], $sort[1]); - } - $array_multisort = sprintf('return array_multisort( %s $resource);', $_); - eval($array_multisort); - return $resource; - } + // --------------------------------------------------- + // Function: userSort + // Sort the resource array by a user defined function + // --------------------------------------------------- + function userSort($resource,$sort) { + foreach ($sort['custom'] as $item) { + usort($resource,$item[1]); + } + return $resource; + } + + // --------------------------------------------------- + // Function: multiSort + // Sort the resource array by multiple fields + // Rows->Columns portion by Jon L. -- intel352@gmail.com + // Link: http://de3.php.net/manual/en/function.array-multisort.php#73498 + // --------------------------------------------------- + + function multiSort($resource,$orderBy) { + $sort_arr = array(); + foreach($resource as $uniqid => $row){ + foreach($row as $key=>$value){ + $sort_arr[$key][$uniqid] = $value; + } + } + + $_ =''; + foreach ($orderBy['parsed'] as $sort) { + $_ .= sprintf('$sort_arr["%s"], SORT_%s, ', $sort[0], $sort[1]); + } + $array_multisort = sprintf('return array_multisort( %s $resource);', $_); + eval($array_multisort); + return $resource; + } - // --------------------------------------------------- - // Function: determineIDs - // Get Document IDs for future use - // --------------------------------------------------- - - function determineIDs($IDs, $IDType, $TVs, $orderBy, $depth, $showPublishedOnly, $seeThruUnpub, $hideFolders, $hidePrivate, $showInMenuOnly, $myWhere, $dateSource, $limit, $summarize, $filter, $paginate, $randomize) { - global $modx; - if (($summarize == 0 && $summarize != 'all') || empty($IDs)) { - return array(); - } - - // Get starting IDs; - switch($IDType) { - case 'parents': - $IDs = explode(',',$IDs); - $documentIDs = $this->getChildIDs($IDs, $depth); - break; - case 'documents': - if(!preg_match('@^[0-9, ]*$@',$IDs)) exit(sprintf('Illegal value of &documents: %s', $IDs)); - $documentIDs = explode(',',$IDs); - break; - } - - if ($this->advSort == false && $hideFolders==0 && $showInMenuOnly==0 && $myWhere == '' && $filter == false && $hidePrivate == 1) { - $this->prefetch = false; - $documents = $this->getDocumentsIDs($documentIDs, $showPublishedOnly); - $documentIDs = array(); - if ($documents) { - foreach ($documents as $null=>$doc) { - $documentIDs[] = $doc['id']; - } - } - return $documentIDs; - } else { - $this->prefetch = true; - } + // --------------------------------------------------- + // Function: determineIDs + // Get Document IDs for future use + // --------------------------------------------------- + + function determineIDs($IDs, $IDType, $TVs, $orderBy, $depth, $showPublishedOnly, $seeThruUnpub, $hideFolders, $hidePrivate, $showInMenuOnly, $myWhere, $dateSource, $limit, $summarize, $filter, $paginate, $randomize) { + global $modx; + if (($summarize == 0 && $summarize != 'all') || empty($IDs)) { + return array(); + } + + // Get starting IDs; + switch($IDType) { + case 'parents': + $IDs = explode(',',$IDs); + $documentIDs = $this->getChildIDs($IDs, $depth); + break; + case 'documents': + if(!preg_match('@^[0-9, ]*$@',$IDs)) exit(sprintf('Illegal value of &documents: %s', $IDs)); + $documentIDs = explode(',',$IDs); + break; + } + + if ($this->advSort == false && $hideFolders==0 && $showInMenuOnly==0 && $myWhere == '' && $filter == false && $hidePrivate == 1) { + $this->prefetch = false; + $documents = $this->getDocumentsIDs($documentIDs, $showPublishedOnly); + $documentIDs = array(); + if ($documents) { + foreach ($documents as $null=>$doc) { + $documentIDs[] = $doc['id']; + } + } + return $documentIDs; + } else { + $this->prefetch = true; + } - // Create where clause - $where = array (); - if ($myWhere != '') { - $where[] = $myWhere; - } - if ($hideFolders) { - $where[] = 'isfolder = 0'; - } - if ($showInMenuOnly) { - $where[] = 'hidemenu = 0'; - } - $where = join(' AND ', $where); - $limit = ($limit == 0) ? '' : $limit; - // set limit + // Create where clause + $where = array (); + if ($myWhere != '') { + $where[] = $myWhere; + } + if ($hideFolders) { + $where[] = 'isfolder = 0'; + } + if ($showInMenuOnly) { + $where[] = 'hidemenu = 0'; + } + $where = join(' AND ', $where); + $limit = ($limit == 0) ? '' : $limit; + // set limit - $customReset = $this->customReset; - if ($this->debug) {$this->addField('pagetitle','backend','db');} + $customReset = $this->customReset; + if ($this->debug) {$this->addField('pagetitle','backend','db');} if (count($customReset) > 0) {$this->addField('createdon','backend','db');} $resource = $this->getDocuments($documentIDs,$this->fields['backend']['db'],$TVs,$orderBy,$showPublishedOnly,0,$hidePrivate,$where,$limit,$randomize,$dateSource); // EPO - End of change (then see line 692 - if ($limit) array_slice($resource, 0, $limit); ) - if ($resource !== false) { - $resource = array_values($resource); - // remove #'s from keys - $recordCount = count($resource); - // count number of records + if ($resource !== false) { + $resource = array_values($resource); + // remove #'s from keys + $recordCount = count($resource); + // count number of records - if (!$seeThruUnpub) { - $parentList = $this->getParentList(); - // get parent list - } - for ($i = 0; $i < $recordCount; $i++) { - if (!$seeThruUnpub) { - $published = $parentList[$resource[$i]['parent']]; - if ($published == '0') - unset ($resource[$i]); - } - if (count($customReset) > 0) { - foreach ($customReset as $field) { - if ($resource[$i][$field] === '0') { - $resource[$i][$field] = $resource[$i]['createdon']; - } - } - } + if (!$seeThruUnpub) { + $parentList = $this->getParentList(); + // get parent list + } + for ($i = 0; $i < $recordCount; $i++) { + if (!$seeThruUnpub) { + $published = $parentList[$resource[$i]['parent']]; + if ($published == '0') + unset ($resource[$i]); + } + if (count($customReset) > 0) { + foreach ($customReset as $field) { + if ($resource[$i][$field] === '0') { + $resource[$i][$field] = $resource[$i]['createdon']; + } + } + } - } - if ($this->debug) { - $dbg_resource = $resource; - } - if ($filter != false) { - $filterObj = new filter(); - $resource = $filterObj->execute($resource, $filter); - } - if (count($resource) < 1) return array(); - if ($this->advSort == true && $randomize==0) { - $resource = $this->multiSort($resource,$orderBy); - } - if (count($orderBy['custom']) > 0) { - $resource = $this->userSort($resource,$orderBy); - } - - //intersel - see above in order to limit the array to $limit. - if ($limit) $resource=array_slice($resource, 0, $limit); + } + if ($this->debug) { + $dbg_resource = $resource; + } + if ($filter != false) { + $filterObj = new filter(); + $resource = $filterObj->execute($resource, $filter); + } + if (count($resource) < 1) return array(); + if ($this->advSort == true && $randomize==0) { + $resource = $this->multiSort($resource,$orderBy); + } + if (count($orderBy['custom']) > 0) { + $resource = $this->userSort($resource,$orderBy); + } + + //intersel - see above in order to limit the array to $limit. + if ($limit) $resource=array_slice($resource, 0, $limit); - $fields = (array_intersect($this->fields['backend'],$this->fields['display'])); - $readyFields = array(); - foreach ($fields as $field) { - $readyFields = array_merge($readyFields,$field); - } - $processedIDs = array (); - $keep = array(); - foreach ($resource as $key => $value) { - $processedIDs[] = $value['id']; - $iKey = '#'.$value['id']; - foreach ($value as $key=>$v) { - if (in_array($key,$readyFields)) { - $keep[$iKey][$key] = $v; - } - if ($this->getDocVarType($key) == 'tv:prefix') { - if (in_array(substr($key,2),$readyFields)) { - $keep[$iKey][$key] = $v; - } - } - } - } - - $this->prefetch = array('resource'=>$keep,'fields'=>$fields); - if ($this->debug) { - $this->prefetch['dbg_resource'] = $dbg_resource; - $this->prefetch['dbg_IDs_pre'] = $documentIDs; - $this->prefetch['dbg_IDs_post'] = $processedIDs; - } - if (count($processedIDs) > 0) { - if ($randomize != 0) {shuffle($processedIDs);} - $this->sortOrder = array_flip($processedIDs); - // saves the order of the documents for use later - } - - return $processedIDs; - } else { - return array(); - } - } + $fields = (array_intersect($this->fields['backend'],$this->fields['display'])); + $readyFields = array(); + foreach ($fields as $field) { + $readyFields = array_merge($readyFields,$field); + } + $processedIDs = array (); + $keep = array(); + foreach ($resource as $key => $value) { + $processedIDs[] = $value['id']; + $iKey = '#'.$value['id']; + foreach ($value as $key=>$v) { + if (in_array($key,$readyFields)) { + $keep[$iKey][$key] = $v; + } + if ($this->getDocVarType($key) == 'tv:prefix') { + if (in_array(substr($key,2),$readyFields)) { + $keep[$iKey][$key] = $v; + } + } + } + } + + $this->prefetch = array('resource'=>$keep,'fields'=>$fields); + if ($this->debug) { + $this->prefetch['dbg_resource'] = $dbg_resource; + $this->prefetch['dbg_IDs_pre'] = $documentIDs; + $this->prefetch['dbg_IDs_post'] = $processedIDs; + } + if (count($processedIDs) > 0) { + if ($randomize != 0) {shuffle($processedIDs);} + $this->sortOrder = array_flip($processedIDs); + // saves the order of the documents for use later + } + + return $processedIDs; + } else { + return array(); + } + } - // --------------------------------------------------- - // Function: weightedRandom - // Execute a random order sort - // --------------------------------------------------- + // --------------------------------------------------- + // Function: weightedRandom + // Execute a random order sort + // --------------------------------------------------- - function weightedRandom($resource,$field,$show) { - $type = $this->getDocVarType($field); - if ($type == 'unknown') { - return $resource; - // handle vad field passed - } - $random = new random(); - foreach ($resource as $document) { - $doc = $document; - $random->add($doc,abs(intval($document[$field]))); - } - $resource = $random->select_weighted_unique($show); - shuffle($resource); - return $resource; - } - - - // --------------------------------------------------- - // Function: getParentList - // Get a list of all available parents - // --------------------------------------------------- - - function getParentList() { - global $modx; - $kids = array(); - foreach ($modx->documentMap as $null => $document) { - foreach ($document as $parent => $id) { - $kids[$parent][] = $id; - } - } - $parents = array(); - foreach ($kids as $item => $value) { - if ($item != 0) { - $pInfo = $modx->getPageInfo($item,0,'published'); - } else { - $pInfo['published'] = '1'; - } - $parents[$item] = $pInfo['published']; - } - return $parents; - } + function weightedRandom($resource,$field,$show) { + $type = $this->getDocVarType($field); + if ($type == 'unknown') { + return $resource; + // handle vad field passed + } + $random = new random(); + foreach ($resource as $document) { + $doc = $document; + $random->add($doc,abs(intval($document[$field]))); + } + $resource = $random->select_weighted_unique($show); + shuffle($resource); + return $resource; + } + + + // --------------------------------------------------- + // Function: getParentList + // Get a list of all available parents + // --------------------------------------------------- + + function getParentList() { + global $modx; + $kids = array(); + foreach ($modx->documentMap as $null => $document) { + foreach ($document as $parent => $id) { + $kids[$parent][] = $id; + } + } + $parents = array(); + foreach ($kids as $item => $value) { + if ($item != 0) { + $pInfo = $modx->getPageInfo($item,0,'published'); + } else { + $pInfo['published'] = '1'; + } + $parents[$item] = $pInfo['published']; + } + return $parents; + } - // --------------------------------------------------- - // Function: appendTV - // Apeend a TV to the documents array - // --------------------------------------------------- - - function appendTV($tvname='',$docIDs){ - global $modx; - - $baspath= MODX_MANAGER_PATH.'/includes'; - include_once $baspath . '/tmplvars.format.inc.php'; - include_once $baspath . '/tmplvars.commands.inc.php'; + // --------------------------------------------------- + // Function: appendTV + // Apeend a TV to the documents array + // --------------------------------------------------- + + function appendTV($tvname='',$docIDs){ + global $modx; + + $baspath= MODX_MANAGER_PATH.'/includes'; + include_once $baspath . '/tmplvars.format.inc.php'; + include_once $baspath . '/tmplvars.commands.inc.php'; - $fields = 'stv.name,stc.tmplvarid,stc.contentid,stv.type,stv.display,stv.display_params,stc.value'; - $from[] = '[+prefix+]site_tmplvar_contentvalues AS stc'; - $from[] = 'LEFT JOIN [+prefix+]site_tmplvars AS stv ON stv.id=stc.tmplvarid'; - $where = sprintf("stv.name='%s' AND stc.contentid IN (%s)", $modx->db->escape($tvname), join($docIDs,',')); - $rs= $modx->db->select($fields, $from, $where, 'stc.contentid ASC'); + $fields = 'stv.name,stc.tmplvarid,stc.contentid,stv.type,stv.display,stv.display_params,stc.value'; + $from[] = '[+prefix+]site_tmplvar_contentvalues AS stc'; + $from[] = 'LEFT JOIN [+prefix+]site_tmplvars AS stv ON stv.id=stc.tmplvarid'; + $where = sprintf("stv.name='%s' AND stc.contentid IN (%s)", $modx->db->escape($tvname), join($docIDs,',')); + $rs= $modx->db->select($fields, $from, $where, 'stc.contentid ASC'); - $docs = array(); - while ($row = $modx->db->getRow($rs)) { - $docs["#".$row['contentid']][$row['name']] = getTVDisplayFormat($row['name'], $row['value'], $row['display'], $row['display_params'], $row['type'],$row['contentid']); - $docs["#".$row['contentid']]["tv".$row['name']] = $docs["#".$row['contentid']][$row['name']]; - } - if (count($docs) != count($docIDs)) { - $rs = $modx->db->select("name,type,display,display_params,default_text", '[+prefix+]site_tmplvars', "name='{$tvname}'", '', 1); - $row = $modx->db->getRow($rs); - if (strtoupper($row['default_text']) == '@INHERIT') { - foreach ($docIDs as $id) { - $defaultOutput = getTVDisplayFormat($row['name'], $row['default_text'], $row['display'], $row['display_params'], $row['type'], $id); - if (!isset($resourceArray["#".$id])) { - $docs["#$id"][$tvname] = $defaultOutput; - $docs["#$id"]["tv".$tvname] = $docs["#$id"][$tvname]; - } - } - } else { - $row['contentid'] = isset($row['contentid']) ? $row['contentid'] : ''; - $defaultOutput = getTVDisplayFormat($row['name'], $row['default_text'], $row['display'], $row['display_params'], $row['type'],$row['contentid']); - foreach ($docIDs as $id) { - if (!isset($docs["#".$id])) { - $docs["#$id"][$tvname] = $defaultOutput; - $docs["#$id"]["tv".$tvname] = $docs["#$id"][$tvname]; - } - } - } - } - return $docs; - } - - // --------------------------------------------------- - // Function: getChildIDs - // Get the IDs ready to be processed + $docs = array(); + while ($row = $modx->db->getRow($rs)) { + $docs["#".$row['contentid']][$row['name']] = getTVDisplayFormat($row['name'], $row['value'], $row['display'], $row['display_params'], $row['type'],$row['contentid']); + $docs["#".$row['contentid']]["tv".$row['name']] = $docs["#".$row['contentid']][$row['name']]; + } + if (count($docs) != count($docIDs)) { + $rs = $modx->db->select("name,type,display,display_params,default_text", '[+prefix+]site_tmplvars', "name='{$tvname}'", '', 1); + $row = $modx->db->getRow($rs); + if (strtoupper($row['default_text']) == '@INHERIT') { + foreach ($docIDs as $id) { + $defaultOutput = getTVDisplayFormat($row['name'], $row['default_text'], $row['display'], $row['display_params'], $row['type'], $id); + if (!isset($resourceArray["#".$id])) { + $docs["#$id"][$tvname] = $defaultOutput; + $docs["#$id"]["tv".$tvname] = $docs["#$id"][$tvname]; + } + } + } else { + $row['contentid'] = isset($row['contentid']) ? $row['contentid'] : ''; + $defaultOutput = getTVDisplayFormat($row['name'], $row['default_text'], $row['display'], $row['display_params'], $row['type'],$row['contentid']); + foreach ($docIDs as $id) { + if (!isset($docs["#".$id])) { + $docs["#$id"][$tvname] = $defaultOutput; + $docs["#$id"]["tv".$tvname] = $docs["#$id"][$tvname]; + } + } + } + } + return $docs; + } + + // --------------------------------------------------- + // Function: getChildIDs + // Get the IDs ready to be processed - // --------------------------------------------------- + // --------------------------------------------------- - function getChildIDs($IDs, $depth) { - global $modx; - $depth = intval($depth); - $kids = array(); - $docIDs = array(); - // RedCat - foreach($IDs as $id) { - $kids = $modx->getChildIds($id,$depth); - $docIDs = array_merge($docIDs,$kids); - } - return array_unique($docIDs); - } + function getChildIDs($IDs, $depth) { + global $modx; + $depth = intval($depth); + $kids = array(); + $docIDs = array(); + // RedCat + foreach($IDs as $id) { + $kids = $modx->getChildIds($id,$depth); + $docIDs = array_merge($docIDs,$kids); + } + return array_unique($docIDs); + } - // --------------------------------------------------- - // Function: getDocuments - // Get documents and append TVs + Prefetch Data, and sort - // --------------------------------------------------- - - function getDocuments($ids= array (), $fields, $TVs, $orderBy, $published= 1, $deleted= 0, $pubOnly= 1, $where= '', $limit='',$randomize=0,$dateSource=false) { - global $modx; - - if (count($ids) == 0) return false; - sort($ids); - // modify field names to use sc. table reference - $fields= 'sc.'.join(',sc.',$fields); - - if ($randomize != 0) $sort = 'RAND()'; - else $sort= $orderBy['sql']; - - //Added by Andchir (http://modx-shopkeeper.ru/) - if(substr($where, 0, 5)=='@SQL:'){ - if($where) $where = substr(str_replace('@eq','=',$where), 5); - $left_join_tvc = 'LEFT JOIN [+prefx+]site_tmplvar_contentvalues AS tvc ON sc.id = tvc.contentid'; - } else { - if($where) $where = 'AND sc.' . join(' AND sc.', array_filter(array_map('trim', explode('AND', $where)))); - $left_join_tvc = ''; - } - - if ($pubOnly) { - if($modx->isFrontend()) $access = 'sc.privateweb=0'; - elseif($_SESSION['mgrRole']!=1) $access = 'sc.privatemgr=0'; - else $access = ''; - - if($access) { - $docgrp=$modx->getUserDocGroups(); - if($docgrp) { - $access .= sprintf(' OR dg.document_group IN (%s)', join(',', $docgrp)); - $access = "({$access})"; - } - } - } - - $published = ($published) ? 'AND sc.published=1' : ''; - - $from = array(); - $from[] = "[+prefix+]site_content AS sc {$left_join_tvc}"; - $from[] = 'LEFT JOIN [+prefix+]document_groups dg on dg.document = sc.id'; - $sqlWhere = array(); - $sqlWhere[] = sprintf('sc.id IN (%s)', join(',', $ids)); - $sqlWhere[] = $published; - $sqlWhere[] = "AND sc.deleted='{$deleted}'"; - $sqlWhere[] = $where; - if($pubOnly && $access) $sqlWhere[] = "AND {$access}"; - $sqlWhere[] = 'GROUP BY sc.id'; - $rs= $modx->db->select("DISTINCT {$fields}",$from,$sqlWhere,$sort,$limit); - if(!$modx->db->getRecordCount($rs)) return false; - - $docs = array(); - $TVData = array(); - $TVIDs = array(); - while ($doc = $modx->db->getRow($rs)) { - if ($dateSource !== false) { - if(!$this->isNum($doc[$dateSource])) $doc[$dateSource] = strtotime($doc[$dateSource]); - if($modx->config['server_offset_time'] != 0) - $doc[$dateSource] += $modx->config['server_offset_time']; - } - - if ($this->prefetch && $this->sortOrder!==false) $doc['ditto_sort'] = $this->sortOrder[$doc['id']]; - - $k = '#'.$doc['id']; - if (!empty($this->prefetch['resource'])) { - $docs[$k] = array_merge($doc,$this->prefetch['resource'][$k]); - // merge the prefetch array and the normal array - } - else $docs[$k] = $doc; - - $TVIDs[] = $doc['id']; - } + // --------------------------------------------------- + // Function: getDocuments + // Get documents and append TVs + Prefetch Data, and sort + // --------------------------------------------------- + + function getDocuments($ids= array (), $fields, $TVs, $orderBy, $published= 1, $deleted= 0, $pubOnly= 1, $where= '', $limit='',$randomize=0,$dateSource=false) { + global $modx; + + if (count($ids) == 0) return false; + sort($ids); + // modify field names to use sc. table reference + $fields= 'sc.'.join(',sc.',$fields); + + if ($randomize != 0) $sort = 'RAND()'; + else $sort= $orderBy['sql']; + + //Added by Andchir (http://modx-shopkeeper.ru/) + if(substr($where, 0, 5)=='@SQL:'){ + if($where) $where = substr(str_replace('@eq','=',$where), 5); + $left_join_tvc = 'LEFT JOIN [+prefx+]site_tmplvar_contentvalues AS tvc ON sc.id = tvc.contentid'; + } else { + if($where) $where = 'AND sc.' . join(' AND sc.', array_filter(array_map('trim', explode('AND', $where)))); + $left_join_tvc = ''; + } + + if ($pubOnly) { + if($modx->isFrontend()) $access = 'sc.privateweb=0'; + elseif($_SESSION['mgrRole']!=1) $access = 'sc.privatemgr=0'; + else $access = ''; + + if($access) { + $docgrp=$modx->getUserDocGroups(); + if($docgrp) { + $access .= sprintf(' OR dg.document_group IN (%s)', join(',', $docgrp)); + $access = "({$access})"; + } + } + } + + $published = ($published) ? 'AND sc.published=1' : ''; + + $from = array(); + $from[] = "[+prefix+]site_content sc {$left_join_tvc}"; + $from[] = 'LEFT JOIN [+prefix+]document_groups dg on dg.document=sc.id'; + $sqlWhere = array(); + $sqlWhere[] = sprintf('sc.id IN (%s)', join(',', $ids)); + $sqlWhere[] = $published; + $sqlWhere[] = "AND sc.deleted={$deleted}"; + $sqlWhere[] = $where; + if($pubOnly && $access) $sqlWhere[] = "AND {$access}"; + $sqlWhere[] = 'GROUP BY sc.id'; + $rs= $modx->db->select("DISTINCT {$fields}",$from,$sqlWhere,$sort,$limit); + if(!$modx->db->getRecordCount($rs)) return false; + + $docs = array(); + $TVData = array(); + $TVIDs = array(); + while ($doc = $modx->db->getRow($rs)) { + if ($dateSource !== false) { + if(!$this->isNum($doc[$dateSource])) $doc[$dateSource] = strtotime($doc[$dateSource]); + if($modx->config['server_offset_time'] != 0) + $doc[$dateSource] += $modx->config['server_offset_time']; + } + + if ($this->prefetch && $this->sortOrder!==false) $doc['ditto_sort'] = $this->sortOrder[$doc['id']]; + + $k = '#'.$doc['id']; + if (!empty($this->prefetch['resource'])) { + $docs[$k] = array_merge($doc,$this->prefetch['resource'][$k]); + // merge the prefetch array and the normal array + } + else $docs[$k] = $doc; + + $TVIDs[] = $doc['id']; + } - $TVs = array_unique($TVs); - if (!empty($TVs)) { - foreach($TVs as $tv){ - $TVData = array_merge_recursive($this->appendTV($tv,$TVIDs),$TVData); - } - } + $TVs = array_unique($TVs); + if (!empty($TVs)) { + foreach($TVs as $tv){ + $TVData = array_merge_recursive($this->appendTV($tv,$TVIDs),$TVData); + } + } - $docs = array_merge_recursive($docs,$TVData); - if ($this->prefetch == true && $this->sortOrder !== false) - $docs = $this->customSort($docs,'ditto_sort','ASC'); + $docs = array_merge_recursive($docs,$TVData); + if ($this->prefetch == true && $this->sortOrder !== false) + $docs = $this->customSort($docs,'ditto_sort','ASC'); - return $docs; - } - - // --------------------------------------------------- - // Function: getDocumentsLite - // Get an array of documents - // --------------------------------------------------- - - function getDocumentsIDs($ids= array (), $published= 1) { - global $modx; - if (empty($ids)) { - return false; - } else { - $ids = join(',',$ids); - $from[] = '[+prefix+]site_content sc'; - $from[] = 'LEFT JOIN [+prefix+]document_groups dg on dg.document=sc.id'; - $published = $published ? 'AND sc.published=1' : ''; - if($modx->isFrontend()) $access = 'sc.privateweb=0'; - elseif($_SESSION['mgrRole']!=1) $access = 'sc.privatemgr=0'; - else $access = ''; - - if($access) { - $docgrp=$modx->getUserDocGroups(); - if($docgrp) { - $access .= sprintf(' OR dg.document_group IN (%s)', join(',', $docgrp)); - $access = "({$access})"; - } - $access = "AND {$access}"; - } - - if($published) $where = sprintf('(sc.id IN (%s) AND sc.published=1 AND sc.deleted=0) %s GROUP BY sc.id', $ids, $access); - else $where = sprintf('(sc.id IN (%s) AND sc.deleted=0) %s GROUP BY sc.id', $ids, $access); - - $rs= $modx->db->select('DISTINCT sc.id', $from, $where); - $docs = $modx->db->makeArray($rs); - return $docs; - } - } - - // --------------------------------------------------- - // Function: cleanIDs - // Clean the IDs of any dangerous characters - // --------------------------------------------------- - - function cleanIDs($IDs) { - //Clean startID (all chars except commas and numbers are removed) - $IDs = trim($IDs,','); - $IDs = preg_replace('/,+/', ',', $IDs); - $IDs = str_replace(' ','',$IDs); + return $docs; + } + + // --------------------------------------------------- + // Function: getDocumentsLite + // Get an array of documents + // --------------------------------------------------- + + function getDocumentsIDs($ids= array (), $published= 1) { + global $modx; + if (empty($ids)) { + return false; + } else { + $ids = join(',',$ids); + $from[] = '[+prefix+]site_content sc'; + $from[] = 'LEFT JOIN [+prefix+]document_groups dg on dg.document=sc.id'; + $published = $published ? 'AND sc.published=1' : ''; + if($modx->isFrontend()) $access = 'sc.privateweb=0'; + elseif($_SESSION['mgrRole']!=1) $access = 'sc.privatemgr=0'; + else $access = ''; + + if($access) { + $docgrp=$modx->getUserDocGroups(); + if($docgrp) { + $access .= sprintf(' OR dg.document_group IN (%s)', join(',', $docgrp)); + $access = "({$access})"; + } + $access = "AND {$access}"; + } + + if($published) $where = sprintf('(sc.id IN (%s) AND sc.published=1 AND sc.deleted=0) %s GROUP BY sc.id', $ids, $access); + else $where = sprintf('(sc.id IN (%s) AND sc.deleted=0) %s GROUP BY sc.id', $ids, $access); + + $rs= $modx->db->select('DISTINCT sc.id', $from, $where); + $docs = $modx->db->makeArray($rs); + return $docs; + } + } + + // --------------------------------------------------- + // Function: cleanIDs + // Clean the IDs of any dangerous characters + // --------------------------------------------------- + + function cleanIDs($IDs) { + //Clean startID (all chars except commas and numbers are removed) + $IDs = trim($IDs,','); + $IDs = preg_replace('/,+/', ',', $IDs); + $IDs = str_replace(' ','',$IDs); - return $IDs; - } - - // --------------------------------------------------- - // Function: buildURL - // Build a URL with regard to Ditto ID - // --------------------------------------------------- - - public static function buildURL($args,$id=false,$dittoIdentifier=false) { - global $modx, $dittoID; - $dittoID = ($dittoIdentifier !== false) ? $dittoIdentifier : $dittoID; - $query = array(); - foreach ($_GET as $param=>$value) { - if ($param != 'id' && $param != 'q') { - $clean_param = htmlspecialchars($param, ENT_QUOTES, $modx->config['modx_charset']); - if(is_array($value)) { - //$query[$param] = $value; - foreach($value as $key => $val) { + return $IDs; + } + + // --------------------------------------------------- + // Function: buildURL + // Build a URL with regard to Ditto ID + // --------------------------------------------------- + + public static function buildURL($args,$id=false,$dittoIdentifier=false) { + global $modx, $dittoID; + $dittoID = ($dittoIdentifier !== false) ? $dittoIdentifier : $dittoID; + $query = array(); + foreach ($_GET as $param=>$value) { + if ($param != 'id' && $param != 'q') { + $clean_param = htmlspecialchars($param, ENT_QUOTES, $modx->config['modx_charset']); + if(is_array($value)) { + //$query[$param] = $value; + foreach($value as $key => $val) { $query[$clean_param][htmlspecialchars($key, ENT_QUOTES)] = htmlspecialchars($val, ENT_QUOTES, $modx->config['modx_charset']); } - }else{ - $query[$clean_param] = htmlspecialchars($value, ENT_QUOTES, $modx->config['modx_charset']); - } - } - } - if (!is_array($args)) { - $args = explode('&',$args); - foreach ($args as $arg) { - $arg = explode('=',$arg); - $query[$dittoID.$arg[0]] = rawurlencode(trim($arg[1])); - } - } else { - foreach ($args as $name=>$value) { - $query[$dittoID.$name] = rawurlencode(trim($value)); - } - } - $queryString = ''; - foreach ($query as $param=>$value) { + }else{ + $query[$clean_param] = htmlspecialchars($value, ENT_QUOTES, $modx->config['modx_charset']); + } + } + } + if (!is_array($args)) { + $args = explode('&',$args); + foreach ($args as $arg) { + $arg = explode('=',$arg); + $query[$dittoID.$arg[0]] = rawurlencode(trim($arg[1])); + } + } else { + foreach ($args as $name=>$value) { + $query[$dittoID.$name] = rawurlencode(trim($value)); + } + } + $queryString = ''; + foreach ($query as $param=>$value) { - //$queryString .= '&'.$param.'='.(is_array($value) ? join(',',$value) : $value); - if (!is_array($value)) { - if (!($modx->config['seostrict']=='1' && $param == $dittoID.'start' && !$value)) $queryString .= '&'.$param.'='.$value; - } - else { - foreach ($value as $key=>$val) { - $queryString .= '&'.$param.'['.$key.']='.$val; - } - } - } - $cID = ($id !== false) ? $id : $modx->documentObject['id']; - $url = $modx->makeURL(trim($cID), '', $queryString); - return ($modx->config['xhtml_urls']) ? $url : str_replace('&','&',$url); - } - - // --------------------------------------------------- - // Function: getParam - // Get a parameter or use the default language value - // --------------------------------------------------- - - function getParam($param,$langString){ - // get a parameter value and if it is not set get the default language string value - global $modx,$ditto_lang; - $output = ''; - if (substr($param,0,1)==='@') { - $output = $this->template->fetch($param); - } elseif(!empty($param)) { - $output = $modx->getChunk($param); - } else { - $output = $ditto_lang[$langString]; - } - if(trim($output)==='') $output = $param; - return $output; - } + //$queryString .= '&'.$param.'='.(is_array($value) ? join(',',$value) : $value); + if (!is_array($value)) { + if (!($modx->config['seostrict']=='1' && $param == $dittoID.'start' && !$value)) $queryString .= '&'.$param.'='.$value; + } + else { + foreach ($value as $key=>$val) { + $queryString .= '&'.$param.'['.$key.']='.$val; + } + } + } + $cID = ($id !== false) ? $id : $modx->documentObject['id']; + $url = $modx->makeURL(trim($cID), '', $queryString); + return ($modx->config['xhtml_urls']) ? $url : str_replace('&','&',$url); + } + + // --------------------------------------------------- + // Function: getParam + // Get a parameter or use the default language value + // --------------------------------------------------- + + function getParam($param,$langString){ + // get a parameter value and if it is not set get the default language string value + global $modx,$ditto_lang; + $output = ''; + if (substr($param,0,1)==='@') { + $output = $this->template->fetch($param); + } elseif(!empty($param)) { + $output = $modx->getChunk($param); + } else { + $output = $ditto_lang[$langString]; + } + if(trim($output)==='') $output = $param; + return $output; + } - // --------------------------------------------------- - // Function: paginate - // Paginate the documents - // --------------------------------------------------- - - function paginate($start, $stop, $total, $summarize, $tplPaginateNext, $tplPaginatePrevious, $tplPaginateNextOff, $tplPaginatePreviousOff, $tplPaginatePage, $tplPaginateCurrentPage, $paginateAlwaysShowLinks, $paginateSplitterCharacter, $max_paginate, $max_previous) { - global $modx, $dittoID,$ditto_lang; + // --------------------------------------------------- + // Function: paginate + // Paginate the documents + // --------------------------------------------------- + + function paginate($start, $stop, $total, $summarize, $tplPaginateNext, $tplPaginatePrevious, $tplPaginateNextOff, $tplPaginatePreviousOff, $tplPaginatePage, $tplPaginateCurrentPage, $paginateAlwaysShowLinks, $paginateSplitterCharacter, $max_paginate, $max_previous) { + global $modx, $dittoID,$ditto_lang; - if ($stop == 0 || $total == 0 || $summarize==0) { - return false; - } - $next = $start + $summarize; - $rNext = $this->template->replace(array('url'=>$this->buildURL("start=$next"),'lang:next'=>$ditto_lang['next']),$tplPaginateNext); - $previous = $start - $summarize; - $rPrevious = $this->template->replace(array('url'=>$this->buildURL("start=$previous"),'lang:previous'=>$ditto_lang['prev']),$tplPaginatePrevious); - $limten = $summarize + $start; - if ($paginateAlwaysShowLinks == 1) { - $previousplaceholder = $this->template->replace(array('lang:previous'=>$ditto_lang['prev']),$tplPaginatePreviousOff); - $nextplaceholder = $this->template->replace(array('lang:next'=>$ditto_lang['next']),$tplPaginateNextOff); - } else { - $previousplaceholder = ''; - $nextplaceholder = ''; - } - $split = ''; - if ($previous > -1 && $next < $total) - $split = $paginateSplitterCharacter; - if ($previous > -1) - $previousplaceholder = $rPrevious; - if ($next < $total) - $nextplaceholder = $rNext; - if ($start < $total) - $stop = $limten; - if ($limten > $total) { - $limiter = $total; - } else { - $limiter = $limten; - } - $totalpages = ceil($total / $summarize); + if ($stop == 0 || $total == 0 || $summarize==0) { + return false; + } + $next = $start + $summarize; + $rNext = $this->template->replace(array('url'=>$this->buildURL("start=$next"),'lang:next'=>$ditto_lang['next']),$tplPaginateNext); + $previous = $start - $summarize; + $rPrevious = $this->template->replace(array('url'=>$this->buildURL("start=$previous"),'lang:previous'=>$ditto_lang['prev']),$tplPaginatePrevious); + $limten = $summarize + $start; + if ($paginateAlwaysShowLinks == 1) { + $previousplaceholder = $this->template->replace(array('lang:previous'=>$ditto_lang['prev']),$tplPaginatePreviousOff); + $nextplaceholder = $this->template->replace(array('lang:next'=>$ditto_lang['next']),$tplPaginateNextOff); + } else { + $previousplaceholder = ''; + $nextplaceholder = ''; + } + $split = ''; + if ($previous > -1 && $next < $total) + $split = $paginateSplitterCharacter; + if ($previous > -1) + $previousplaceholder = $rPrevious; + if ($next < $total) + $nextplaceholder = $rNext; + if ($start < $total) + $stop = $limten; + if ($limten > $total) { + $limiter = $total; + } else { + $limiter = $limten; + } + $totalpages = ceil($total / $summarize); - $cur_x = floor($start / $summarize); - $min_x = $cur_x - $max_previous; + $cur_x = floor($start / $summarize); + $min_x = $cur_x - $max_previous; - if ($min_x < 0) $min_x = 0; + if ($min_x < 0) $min_x = 0; - $max_x = $min_x + $max_paginate - 1; - if ($max_x > $totalpages - 1) { - $max_x = $totalpages - 1; - $min_x = $max_x - $max_paginate + 1; - } + $max_x = $min_x + $max_paginate - 1; + if ($max_x > $totalpages - 1) { + $max_x = $totalpages - 1; + $min_x = $max_x - $max_paginate + 1; + } - $modx->setPlaceholder('dittoID', $dittoID); - $pages = ''; - for ($x = 0; $x <= $totalpages -1; $x++) { - $inc = $x * $summarize; - $display = $x +1; + $modx->setPlaceholder('dittoID', $dittoID); + $pages = ''; + for ($x = 0; $x <= $totalpages -1; $x++) { + $inc = $x * $summarize; + $display = $x +1; - if (($x < $min_x) || ($x > $max_x)) continue; + if (($x < $min_x) || ($x > $max_x)) continue; - if ($inc != $start) { - $pages .= $this->template->replace(array('url'=>$this->buildURL("start=$inc"),'page'=>$display),$tplPaginatePage); - } else { - $modx->setPlaceholder($dittoID.'currentPage', $display); - $pages .= $this->template->replace(array('page'=>$display),$tplPaginateCurrentPage); - } - } - if ($totalpages>1){ - $modx->setPlaceholder($dittoID.'next', $nextplaceholder); - $modx->setPlaceholder($dittoID.'previous', $previousplaceholder); - $modx->setPlaceholder($dittoID.'pages', $pages); - }elseif($paginateAlwaysShowLinks == 1){ - $modx->setPlaceholder($dittoID.'next', $nextplaceholder); - $modx->setPlaceholder($dittoID.'previous', $previousplaceholder); - $modx->setPlaceholder($dittoID.'pages', $pages); - } - $modx->setPlaceholder($dittoID.'splitter', $split); - $modx->setPlaceholder($dittoID.'start', $start +1); - $modx->setPlaceholder($dittoID.'urlStart', $start); - $modx->setPlaceholder($dittoID.'stop', $limiter); - $modx->setPlaceholder($dittoID.'total', $total); - $modx->setPlaceholder($dittoID.'perPage', $summarize); - $modx->setPlaceholder($dittoID.'totalPages', $totalpages); - $modx->setPlaceholder($dittoID.'ditto_pagination_set', true); - } - - // --------------------------------------------------- - // Function: noResults - // Render the noResults output - // --------------------------------------------------- - function noResults($text,$paginate) { - global $modx, $dittoID; - $set = $modx->getPlaceholder($dittoID.'ditto_pagination_set'); - if ($paginate && $set !== true) { - $modx->setPlaceholder('dittoID', $dittoID); - $modx->setPlaceholder($dittoID.'next', ''); - $modx->setPlaceholder($dittoID.'previous', ''); - $modx->setPlaceholder($dittoID.'splitter', ''); - $modx->setPlaceholder($dittoID.'start', 0); - $modx->setPlaceholder($dittoID.'urlStart', '#start'); - $modx->setPlaceholder($dittoID.'stop', 0); - $modx->setPlaceholder($dittoID.'total', 0); - $modx->setPlaceholder($dittoID.'pages', ''); - $modx->setPlaceholder($dittoID.'perPage', 0); - $modx->setPlaceholder($dittoID.'totalPages', 0); - $modx->setPlaceholder($dittoID.'currentPage', 0); - } - return $text; - } - - // --------------------------------------------------- - // Function: relToAbs - // Convert relative urls to absolute URLs - // Based on script from http://wintermute.com.au/bits/2005-09/php-relative-absolute-links/ - // --------------------------------------------------- - function relToAbs($text, $base) { - return preg_replace('#(href|src)="([^:"]*)(?:")#','$1="'.$base.'$2"',$text); - } - - function isNum($str='') { - return preg_match('@^[1-9][0-9]*$@',$str); - } + if ($inc != $start) { + $pages .= $this->template->replace(array('url'=>$this->buildURL("start=$inc"),'page'=>$display),$tplPaginatePage); + } else { + $modx->setPlaceholder($dittoID.'currentPage', $display); + $pages .= $this->template->replace(array('page'=>$display),$tplPaginateCurrentPage); + } + } + if ($totalpages>1){ + $modx->setPlaceholder($dittoID.'next', $nextplaceholder); + $modx->setPlaceholder($dittoID.'previous', $previousplaceholder); + $modx->setPlaceholder($dittoID.'pages', $pages); + }elseif($paginateAlwaysShowLinks == 1){ + $modx->setPlaceholder($dittoID.'next', $nextplaceholder); + $modx->setPlaceholder($dittoID.'previous', $previousplaceholder); + $modx->setPlaceholder($dittoID.'pages', $pages); + } + $modx->setPlaceholder($dittoID.'splitter', $split); + $modx->setPlaceholder($dittoID.'start', $start +1); + $modx->setPlaceholder($dittoID.'urlStart', $start); + $modx->setPlaceholder($dittoID.'stop', $limiter); + $modx->setPlaceholder($dittoID.'total', $total); + $modx->setPlaceholder($dittoID.'perPage', $summarize); + $modx->setPlaceholder($dittoID.'totalPages', $totalpages); + $modx->setPlaceholder($dittoID.'ditto_pagination_set', true); + } + + // --------------------------------------------------- + // Function: noResults + // Render the noResults output + // --------------------------------------------------- + function noResults($text,$paginate) { + global $modx, $dittoID; + $set = $modx->getPlaceholder($dittoID.'ditto_pagination_set'); + if ($paginate && $set !== true) { + $modx->setPlaceholder('dittoID', $dittoID); + $modx->setPlaceholder($dittoID.'next', ''); + $modx->setPlaceholder($dittoID.'previous', ''); + $modx->setPlaceholder($dittoID.'splitter', ''); + $modx->setPlaceholder($dittoID.'start', 0); + $modx->setPlaceholder($dittoID.'urlStart', '#start'); + $modx->setPlaceholder($dittoID.'stop', 0); + $modx->setPlaceholder($dittoID.'total', 0); + $modx->setPlaceholder($dittoID.'pages', ''); + $modx->setPlaceholder($dittoID.'perPage', 0); + $modx->setPlaceholder($dittoID.'totalPages', 0); + $modx->setPlaceholder($dittoID.'currentPage', 0); + } + return $text; + } + + // --------------------------------------------------- + // Function: relToAbs + // Convert relative urls to absolute URLs + // Based on script from http://wintermute.com.au/bits/2005-09/php-relative-absolute-links/ + // --------------------------------------------------- + function relToAbs($text, $base) { + return preg_replace('#(href|src)="([^:"]*)(?:")#','$1="'.$base.'$2"',$text); + } + + function isNum($str='') { + return preg_match('@^[1-9][0-9]*$@',$str); + } } From fe8db0495c956808883d049783a66dfde32a6b4e Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 11:39:55 +0900 Subject: [PATCH 176/577] Fix - recent commit #109 --- manager/processors/cache_sync.class.processor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index a6f50de74d..684ff4db76 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -318,6 +318,7 @@ function php_strip_whitespace($source) { elseif(in_array($token,array('(','{')) && in_array($prev_token,array(T_IF,T_ELSE,T_ELSEIF))) $_ = trim($_); $_ .= $token; + if($prev_token==T_END_HEREDOC) $_.="\n"; continue; } @@ -328,7 +329,7 @@ function php_strip_whitespace($source) { case T_DOC_COMMENT: break; case T_WHITESPACE : - $_ = trim($_); + if($prev_token!=T_END_HEREDOC) $_ = trim($_); $lastChar = substr($_,-1); if( !in_array($lastChar,$chars ) ) {// ,320,327,288,284,289 if(!in_array($prev_token,array(T_FOREACH,T_WHILE,T_FOR,T_BOOLEAN_AND,T_BOOLEAN_OR,T_DOUBLE_ARROW))) From 5fe53fd596a97908b0cba16a72c63e823e3277d8 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 19:29:15 +0900 Subject: [PATCH 177/577] Fix - "then" modifier --- manager/includes/extenders/modifiers.class.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index dde46b3fd9..e7e11e0cbe 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -343,12 +343,12 @@ function getValueFromPreset($key, $value, $cmd, $opt) $conditional = join(' ',$this->condition); $isvalid = intval(eval("return ({$conditional});")); if ($isvalid) return $this->srcValue; - break; + return NULL; case 'then': $conditional = join(' ',$this->condition); $isvalid = intval(eval("return ({$conditional});")); if ($isvalid) return $opt; - break; + return null; case 'else': $conditional = join(' ',$this->condition); $isvalid = intval(eval("return ({$conditional});")); From 5f734a46585795030c083aa0a22e1e433ddc0166 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 19:31:23 +0900 Subject: [PATCH 178/577] Fix - $modx->rewriteUrls() --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index fe55ca0a7a..cafb5e22fd 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1826,7 +1826,7 @@ function rewriteUrls($documentSource) { if ($ids) { $res = $this->db->select("id,alias,isfolder,parent,alias_visible", $this->getFullTableName('site_content'), "id IN (".$ids.") AND isfolder = '0'"); while( $row = $this->db->getRow( $res ) ) { - if ($this->config['use_alias_path'] == '1') { + if ($this->config['use_alias_path'] == '1' && $row['parent']!=0) { $parent = $row['parent']; $path = $aliases[$parent]; From 611436aac9a8e045f45c02887baa61a68ce37a7a Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 20:01:00 +0900 Subject: [PATCH 179/577] Add alias name for some modifiers --- manager/includes/extenders/modifiers.class.inc.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index e7e11e0cbe..53bf4e799b 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -373,6 +373,7 @@ function getValueFromPreset($key, $value, $cmd, $opt) return htmlentities($value,ENT_QUOTES,$modx->config['modx_charset']); case 'html_entity_decode': case 'decode_html': + case 'html_decode': return html_entity_decode($value,ENT_QUOTES,$modx->config['modx_charset']); case 'esc': case 'escape': @@ -384,6 +385,7 @@ function getValueFromPreset($key, $value, $cmd, $opt) case 'htmlspecialchars': case 'hsc': case 'encode_html': + case 'html_encode': return preg_replace('/&(#[0-9]+|[a-z]+);/i', '&$1;', htmlspecialchars($value, ENT_QUOTES, $modx->config['modx_charset'])); case 'spam_protect': return str_replace(array('@','.'),array('@','.'),$value); @@ -412,6 +414,7 @@ function getValueFromPreset($key, $value, $cmd, $opt) } return $this->strip_tags($value,$params); case 'urlencode': + case 'url_encode': case 'encode_url': return urlencode($value); case 'base64_decode': @@ -421,6 +424,7 @@ function getValueFromPreset($key, $value, $cmd, $opt) case 'encode_sha1': $cmd = 'sha1'; case 'addslashes': case 'urldecode': + case 'url_decode': case 'rawurlencode': case 'rawurldecode': case 'base64_encode': From ea80fba37fd4fe9f7c4c4d85632da41819de215d Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 20:03:24 +0900 Subject: [PATCH 180/577] New modifiers "array_pop" and "array_shift" --- manager/includes/extenders/modifiers.class.inc.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index 53bf4e799b..54979e9914 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -555,6 +555,11 @@ function getValueFromPreset($key, $value, $cmd, $opt) } return join("\n", $_); break; + case 'array_pop': + case 'array_shift': + if(strpos($value,'||')!==false) $delim = '||'; + else $delim = ','; + return $cmd(explode($delim,$value)); case 'preg_replace': case 'regex_replace': if(empty($opt) || strpos($opt,',')===false) break; From 85d5f04e8a6f4d1c9796002bb4ed31c0e18eef7c Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 21:15:33 +0900 Subject: [PATCH 181/577] Minor fix --- manager/includes/extenders/modifiers.class.inc.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index 54979e9914..f23b74a600 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -554,7 +554,6 @@ function getValueFromPreset($key, $value, $cmd, $opt) $_[] = str_replace(array('[+value+]','[+output+]','{value}','%s'),$v,$opt); } return join("\n", $_); - break; case 'array_pop': case 'array_shift': if(strpos($value,'||')!==false) $delim = '||'; @@ -813,7 +812,6 @@ function getValueFromPreset($key, $value, $cmd, $opt) return $size; } else return ''; - break; ##### User info case 'username': case 'fullname': @@ -920,7 +918,6 @@ function getValueFromPreset($key, $value, $cmd, $opt) // If we haven't yet found the modifier, let's look elsewhere default: $value = $this->getValueFromElement($key, $value, $cmd, $opt); - break; } return $value; } From c47b6f61d359f37cab1c2f1c63bc004f6c22ed70 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 20 Sep 2017 21:42:55 +0900 Subject: [PATCH 182/577] Fix - filesize modifier --- manager/includes/extenders/modifiers.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index f23b74a600..8fbdd765f8 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -807,8 +807,8 @@ function getValueFromPreset($key, $value, $cmd, $opt) $filename = MODX_BASE_PATH.$opt.$filename; if(is_file($filename)){ - $size = filesize($filename); clearstatcache(); + $size = filesize($filename); return $size; } else return ''; From c1ec4b15c5e34a0900a1e461edf778b25040331a Mon Sep 17 00:00:00 2001 From: yamamoto Date: Thu, 21 Sep 2017 07:27:07 +0900 Subject: [PATCH 183/577] Minor fix --- assets/snippets/ditto/snippet.ditto.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/snippets/ditto/snippet.ditto.php b/assets/snippets/ditto/snippet.ditto.php index ba20d97451..b08e1a3a8d 100644 --- a/assets/snippets/ditto/snippet.ditto.php +++ b/assets/snippets/ditto/snippet.ditto.php @@ -252,7 +252,7 @@ } //---Parameters------------------------------------------------------- /* -if (isset($startID)) {$parents = $startID;} +if (isset($startID) && !isset($parents)) {$parents = $startID;} if (isset($summarize)) {$display = $summarize;} if (isset($limit)) {$queryLimit = $limit;} if (isset($sortBy) || isset($sortDir) || is_null($orderBy['unparsed'])) { From b958136bb5d8787561df4d42965615989ccb3e01 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Thu, 21 Sep 2017 07:28:05 +0900 Subject: [PATCH 184/577] Minor fix --- assets/snippets/ditto/snippet.ditto.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/snippets/ditto/snippet.ditto.php b/assets/snippets/ditto/snippet.ditto.php index b08e1a3a8d..6d92979636 100644 --- a/assets/snippets/ditto/snippet.ditto.php +++ b/assets/snippets/ditto/snippet.ditto.php @@ -255,7 +255,7 @@ if (isset($startID) && !isset($parents)) {$parents = $startID;} if (isset($summarize)) {$display = $summarize;} if (isset($limit)) {$queryLimit = $limit;} -if (isset($sortBy) || isset($sortDir) || is_null($orderBy['unparsed'])) { +if (isset($sortBy) || isset($sortDir) || !$orderBy['unparsed']) { $sortDir = isset($sortDir) ? strtoupper($sortDir) : 'DESC'; $sortBy = isset($sortBy) ? $sortBy : 'createdon'; $orderBy['parsed'][]=array($sortBy,$sortDir); From 43372dc43325ec55a316215b43ee5a6bd99c739e Mon Sep 17 00:00:00 2001 From: yamamoto Date: Thu, 21 Sep 2017 07:28:53 +0900 Subject: [PATCH 185/577] Refactor --- assets/snippets/ditto/classes/ditto.class.inc.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php index 63d2e74f0a..84feaedb62 100644 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ b/assets/snippets/ditto/classes/ditto.class.inc.php @@ -149,12 +149,8 @@ function parseOrderBy($orderBy,$randomize) { if (!is_null($orderBy['unparsed'])) { $inputs = array_filter(array_map('trim', explode(',', $orderBy['unparsed']))); foreach ($inputs as $input) { - $position = strrpos($input,' '); - // find last space - $sortBy = substr($input,0,$position); - $sortBy = !empty($sortBy) ? $sortBy : 'id'; - $sortDir = substr($input,$position); - $sortDir = !empty($sortDir) ? trim($sortDir) : 'asc'; + if(strpos($input,' ')===false) $input .= ' ASC'; + list($sortBy,$sortDir) = explode(' ',$input); $sortBy = $this->checkAdvSort($sortBy,$sortDir); $this->addField($sortBy,'backend'); $orderBy['parsed'][] = array($sortBy,strtoupper($sortDir)); From ee10e6ca3d2650e59ba28dbb168f296c33e19e2a Mon Sep 17 00:00:00 2001 From: yamamoto Date: Thu, 21 Sep 2017 07:30:13 +0900 Subject: [PATCH 186/577] Ditto Fix - dateSource problem --- assets/snippets/ditto/classes/ditto.class.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php index 84feaedb62..32305f77d1 100644 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ b/assets/snippets/ditto/classes/ditto.class.inc.php @@ -377,9 +377,9 @@ function parseFields($placeholders,$seeThruUnpub,$dateSource,$randomize) { $this->addField('id','display','db'); $this->addField('pagetitle','display','db'); $this->addField('parent','display','db'); - $checkOptions = array('pub_date','unpub_date','editedon','deletedon','publishedon'); + $checkOptions = array('createdon','pub_date','unpub_date','editedon','deletedon','publishedon'); if (in_array($dateSource,$checkOptions)) { - $this->addField('createdon','display'); + $this->addField($dateSource,'display'); } if (in_array('date',$this->fields['display']['custom'])) { $this->addField($dateSource,'display'); From 1a2c62780a206eff96fc3d87a6ac94a3cc7130a6 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Thu, 21 Sep 2017 07:30:44 +0900 Subject: [PATCH 187/577] #243 Ditto - Can not show items when parameter is "parents=0" --- assets/snippets/ditto/classes/ditto.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php index 32305f77d1..46ab7b1fab 100644 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ b/assets/snippets/ditto/classes/ditto.class.inc.php @@ -537,7 +537,7 @@ function multiSort($resource,$orderBy) { function determineIDs($IDs, $IDType, $TVs, $orderBy, $depth, $showPublishedOnly, $seeThruUnpub, $hideFolders, $hidePrivate, $showInMenuOnly, $myWhere, $dateSource, $limit, $summarize, $filter, $paginate, $randomize) { global $modx; - if (($summarize == 0 && $summarize != 'all') || empty($IDs)) { + if (($summarize == 0 && $summarize != 'all') || $IDs=='') { return array(); } From f4997517a3e28963ce65d9d6aab500f760efe2ef Mon Sep 17 00:00:00 2001 From: yamamoto Date: Thu, 21 Sep 2017 07:49:07 +0900 Subject: [PATCH 188/577] Code cleanup --- manager/includes/document.parser.class.inc.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index cafb5e22fd..92d370c71e 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1809,15 +1809,11 @@ function rewriteUrls($documentSource) { // rewrite the urls if ($this->config['friendly_urls'] == 1) { $aliases= array (); - /* foreach ($this->aliasListing as $item) { - $aliases[$item['id']]= (strlen($item['path']) > 0 ? $item['path'] . '/' : '') . $item['alias']; - $isfolder[$item['id']]= $item['isfolder']; - } */ if (is_array($this->documentListing)){ - foreach($this->documentListing as $key=>$val){ - $aliases[$val] = $key; - $isfolder[$val] = $this->aliasListing[$val]['isfolder']; - } + foreach($this->documentListing as $path=>$docid) { // This is big Loop on large site! + $aliases[$docid] = $path; + $isfolder[$docid] = $this->aliasListing[$docid]['isfolder']; + } } if ($this->config['aliaslistingfolder'] == 1) { From 7a4755d41dd1ee49927679aea5f7d9805ad47da1 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Fri, 22 Sep 2017 06:33:47 +0900 Subject: [PATCH 189/577] Fix recent commit ( @ae6c841 ) https://github.com/evolution-cms/evolution/commit/ae6c8412b3b09ff30ead86f90359e521a1165f95#commitcomment-24460032 --- manager/includes/preload.functions.inc.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/manager/includes/preload.functions.inc.php b/manager/includes/preload.functions.inc.php index 7a3baf8920..ab5834fdb6 100644 --- a/manager/includes/preload.functions.inc.php +++ b/manager/includes/preload.functions.inc.php @@ -1,14 +1,18 @@ Date: Fri, 22 Sep 2017 14:38:41 +0300 Subject: [PATCH 190/577] fixed cache build speed up cache file creation reducing server load --- .../processors/cache_sync.class.processor.php | 84 +++++++++---------- 1 file changed, 39 insertions(+), 45 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 684ff4db76..ebb05038b9 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -26,6 +26,12 @@ function setReport($bool) $this->showReport = $bool; } + function escapeSingleQuotes($s) { + $q1 = array("\\","'"); + $q2 = array("\\\\","\\'"); + return str_replace($q1,$q2,$s); + } + function getParents($id, $path = '') { // modx:returns child's parent global $modx; @@ -96,10 +102,9 @@ public function publishTimeConfig($cacheRefreshTime='') // write the file - $content = array(); - $content[] = 'request_time); - $content[] = sprintf('$cacheRefreshTime = %s;', $cacheRefreshTime); + $content = 'request_time . '\';' . "\n"; + $content .= '$cacheRefreshTime=\''. $cacheRefreshTime . '\';' . "\n"; $filename = $this->cachePath.'/sitePublishing.idx.php'; if (!$handle = fopen($filename, 'w')) { @@ -107,7 +112,7 @@ public function publishTimeConfig($cacheRefreshTime='') } // Write $somecontent to our opened file. - if (fwrite($handle, implode("\n",$content)) === FALSE) { + if (fwrite($handle, $content) === FALSE) { exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); } } @@ -156,13 +161,16 @@ public function buildCache($modx) { $config = array(); while(list($key,$value) = $modx->db->getRow($rs,'num')) { $config[$key] = $value; + if ($config['enable_filter']) { + $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; + $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); + if ($count) { + $content .= '$this->config[\'enable_filter\']=\'0\';'; + } + } else { + $content .= '$this->config[\'' . $key . '\']=\'' . $value . '\';'; + } } - if ($config['enable_filter']) { - $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; - $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); - if ($count) $config['enable_filter'] = '0'; - } - $content .= sprintf('$this->config=%s;', $this->php_strip_whitespace(var_export($config,true))); if ($config['aliaslistingfolder'] == 1) { $f['id'] = 'c.id'; @@ -179,9 +187,7 @@ public function buildCache($modx) { $f = "id, IF(alias='', id, alias) AS alias, parent, isfolder, alias_visible"; $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); } - $documentListing = array(); - $aliasListing = array(); - $documentMap = array(); + $use_alias_path = ($config['friendly_urls'] && $config['use_alias_path']) ? 1 : 0; $tmpPath = ''; while ($doc = $modx->db->getRow($rs)) { @@ -194,55 +200,44 @@ public function buildCache($modx) { else $key = $doc['alias']; $doc['path'] = $tmpPath; - $aliasListing[$docid] = $doc; - $documentListing[$key] = $docid; - $documentMap[] = array($doc['parent'] => $docid); + $content .= '$this->aliasListing[' . $docid . ']=array(\'id\'=>' . $docid . ',\'alias\'=>\'' . $doc['alias'] . '\',\'parent\'=>' . $doc['parent'] . ',\'isfolder\'=>' . $doc['isfolder'] . ',\'alias_visible\'=>' . $doc['alias_visible'] . ');'; + $content .= '$this->documentListing[\'' . $key . '\']=' . $docid . ';'; + $content .= '$this->documentMap[]=array(' . $doc['parent'] . '=>' . $docid . ');'; } - $content .= sprintf('$this->documentListing=%s;', $this->php_strip_whitespace(var_export($documentListing,true))); - $content .= sprintf('$this->aliasListing=%s;', $this->php_strip_whitespace(var_export($aliasListing,true))); - $content .= sprintf('$this->documentMap=%s;', $this->php_strip_whitespace(var_export($documentMap,true))); - // get content types $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType!='text/html'"); - $contentType = array(); while ($doc = $modx->db->getRow($rs)) { - $docid = $doc['id']; - $contentType[$docid] = $doc['contentType']; + $content .= '$this->contentType[\'' . $doc['id'] . '\']=\'' . $doc['contentType'] . '\';'; } - $content .= sprintf('$this->contentType=%s;', var_export($contentType,true)); // WRITE Chunks to cache file $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); - $chunkCache = array(); while ($doc = $modx->db->getRow($rs)) { - $code = (!$doc['disabled']) ? $doc['snippet'] : ''; - $key = $doc['name']; - $chunkCache[$key] = $code; + $content .= '$this->chunkCache[\'' . $doc['name'] . '\']=\'' . ($doc['disabled'] ? '' : $this->escapeSingleQuotes($doc['snippet'])) . '\';'; } - $content .= sprintf('$this->chunkCache=%s;', var_export($chunkCache,true)); // WRITE snippets to cache file $f = 'ss.*, sm.properties as sharedproperties'; $from = '[+prefix+]site_snippets ss LEFT JOIN [+prefix+]site_modules sm on sm.guid=ss.moduleguid'; $rs = $modx->db->select($f,$from); - $snippetCache = array(); while ($row = $modx->db->getRow($rs)) { $key = $row['name']; - if($row['disabled']) $snippetCache[$key] = 'return false;'; + if($row['disabled']) { + $content .= '$this->snippetCache[\'' . $key . '\']=\'return false;\';'; + } else { $value = trim($row['snippet']); if($modx->config['minifyphp_incache']) $value = $this->php_strip_whitespace($value); - $snippetCache[$key] = $value; + $content .= '$this->snippetCache[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; $properties = $modx->parseProperties($row['properties']); $sharedproperties = $modx->parseProperties($row['sharedproperties']); $properties = array_merge($sharedproperties,$properties); if (0escapeSingleQuotes(json_encode($properties)) . '\';'; } } } - $content .= sprintf('$this->snippetCache=%s;', var_export($snippetCache,true)); // WRITE plugins to cache file $f = 'sp.*, sm.properties as sharedproperties'; @@ -250,17 +245,17 @@ public function buildCache($modx) { $from[] = '[+prefix+]site_plugins sp'; $from[] = 'LEFT JOIN [+prefix+]site_modules sm on sm.guid=sp.moduleguid'; $rs = $modx->db->select($f,$from,'sp.disabled=0'); - $pluginCache = array(); while ($row = $modx->db->getRow($rs)) { $key = $row['name']; $value = trim($row['plugincode']); if($modx->config['minifyphp_incache']) $value = $this->php_strip_whitespace($value); - $pluginCache[$key] = $value; + $content .= '$this->pluginCache[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; if ($row['properties'] != '' || $row['sharedproperties'] != '') { - $pluginCache[$key.'Props'] = trim($row['properties'] . ' ' . $row['sharedproperties']); + $properties = $this->escapeSingleQuotes(trim($row['properties'] . ' ' . $row['sharedproperties'])); + if($modx->config['minifyphp_incache']) $properties = $this->php_strip_whitespace($properties); + $content .= '$this->pluginCache[\'' . $key . 'Props\']=\'' . $properties . '\';'; } } - $content .= sprintf('$this->pluginCache=%s;', var_export($pluginCache,true)); // WRITE system event triggers $f = 'sysevt.name as evtname, event.pluginid, plugin.name as pname'; @@ -269,7 +264,6 @@ public function buildCache($modx) { $from[] = 'INNER JOIN [+prefix+]site_plugin_events event ON event.evtid=sysevt.id'; $from[] = 'INNER JOIN [+prefix+]site_plugins plugin ON plugin.id=event.pluginid'; $rs = $modx->db->select($f,$from, 'plugin.disabled=0', 'sysevt.name, event.priority'); - $pluginEvent = array(); $events = array(); while ($row = $modx->db->getRow($rs)) { $evtname = $row['evtname']; @@ -278,8 +272,8 @@ public function buildCache($modx) { } foreach ($events as $evtname => $pluginnames) { $events[$evtname] = $pluginnames; + $content .= '$this->pluginEvent[\'' . $evtname . '\']=array(\'' . implode('\',\'', $this->escapeSingleQuotes($pluginnames)) . '\');'; } - $content .= sprintf('$this->pluginEvent=%s;', $this->php_strip_whitespace(var_export($events,true))); // close and write the file $filename = $this->cachePath . 'siteCache.idx.php'; @@ -303,10 +297,10 @@ public function buildCache($modx) { // ref : http://php.net/manual/en/tokenizer.examples.php function php_strip_whitespace($source) { - + $source = trim($source); if(substr($source,0,5)!==' Date: Fri, 22 Sep 2017 21:40:02 +0900 Subject: [PATCH 191/577] Fix recent commit ( @d8be6a4) Not php code --- manager/processors/cache_sync.class.processor.php | 1 - 1 file changed, 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index ebb05038b9..42a8b1b306 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -252,7 +252,6 @@ public function buildCache($modx) { $content .= '$this->pluginCache[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; if ($row['properties'] != '' || $row['sharedproperties'] != '') { $properties = $this->escapeSingleQuotes(trim($row['properties'] . ' ' . $row['sharedproperties'])); - if($modx->config['minifyphp_incache']) $properties = $this->php_strip_whitespace($properties); $content .= '$this->pluginCache[\'' . $key . 'Props\']=\'' . $properties . '\';'; } } From e96961aed026e0c7f3cd3d2095dc54771307c05c Mon Sep 17 00:00:00 2001 From: Serg <64j@mail.ru> Date: Fri, 22 Sep 2017 15:50:08 +0300 Subject: [PATCH 192/577] fix build cache fixed added system_settings in cache file --- .../processors/cache_sync.class.processor.php | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 42a8b1b306..6f86618b58 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -32,6 +32,12 @@ function escapeSingleQuotes($s) { return str_replace($q1,$q2,$s); } + function escapeDoubleQuotes($s) { + $q1 = array("\\","\"","\r","\n","\$"); + $q2 = array("\\\\","\\\"","\\r","\\n","\\$"); + return str_replace($q1,$q2,$s); + } + function getParents($id, $path = '') { // modx:returns child's parent global $modx; @@ -160,15 +166,15 @@ public function buildCache($modx) { $rs = $modx->db->select('*', '[+prefix+]system_settings'); $config = array(); while(list($key,$value) = $modx->db->getRow($rs,'num')) { + $content .= '$this->config[\'' . $key . '\']=\'' . $this->escapeDoubleQuotes($value) . '\';'; $config[$key] = $value; - if ($config['enable_filter']) { - $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; - $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); - if ($count) { - $content .= '$this->config[\'enable_filter\']=\'0\';'; - } - } else { - $content .= '$this->config[\'' . $key . '\']=\'' . $value . '\';'; + } + + if ($config['enable_filter']) { + $where = "plugincode LIKE '%phx.parser.class.inc.php%OnParseDocument();%' AND disabled != 1"; + $count = $modx->db->getRecordCount($modx->db->select('id', '[+prefix+]site_plugins', $where)); + if ($count) { + $content .= '$this->config[\'enable_filter\']=\'0\';'; } } @@ -252,6 +258,7 @@ public function buildCache($modx) { $content .= '$this->pluginCache[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; if ($row['properties'] != '' || $row['sharedproperties'] != '') { $properties = $this->escapeSingleQuotes(trim($row['properties'] . ' ' . $row['sharedproperties'])); + if($modx->config['minifyphp_incache']) $properties = $this->php_strip_whitespace($properties); $content .= '$this->pluginCache[\'' . $key . 'Props\']=\'' . $properties . '\';'; } } From d93ec66bba05aad0be6d2b99060c986b1d07bd88 Mon Sep 17 00:00:00 2001 From: Serg <64j@mail.ru> Date: Fri, 22 Sep 2017 15:55:03 +0300 Subject: [PATCH 193/577] fix publishTimeConfig in cache processor added new line --- manager/processors/cache_sync.class.processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 6f86618b58..28cd2eeebe 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -108,7 +108,7 @@ public function publishTimeConfig($cacheRefreshTime='') // write the file - $content = 'request_time . '\';' . "\n"; $content .= '$cacheRefreshTime=\''. $cacheRefreshTime . '\';' . "\n"; From 3487f958304246e26f8e442755825cb7030e436d Mon Sep 17 00:00:00 2001 From: Serg <64j@mail.ru> Date: Fri, 22 Sep 2017 16:03:21 +0300 Subject: [PATCH 194/577] fixed build cache added aliasListing->path --- manager/processors/cache_sync.class.processor.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 28cd2eeebe..163bf8c766 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -202,11 +202,12 @@ public function buildCache($modx) { $tmpPath = $this->getParents($doc['parent']); $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; $key = $alias; + } else { + $key = $doc['alias']; } - else $key = $doc['alias']; - + $doc['path'] = $tmpPath; - $content .= '$this->aliasListing[' . $docid . ']=array(\'id\'=>' . $docid . ',\'alias\'=>\'' . $doc['alias'] . '\',\'parent\'=>' . $doc['parent'] . ',\'isfolder\'=>' . $doc['isfolder'] . ',\'alias_visible\'=>' . $doc['alias_visible'] . ');'; + $content .= '$this->aliasListing[' . $docid . ']=array(\'id\'=>' . $docid . ',\'alias\'=>\'' . $doc['alias'] . '\',\'path\'=>\'' . $doc['path'] . '\',\'parent\'=>' . $doc['parent'] . ',\'isfolder\'=>' . $doc['isfolder'] . ',\'alias_visible\'=>' . $doc['alias_visible'] . ');'; $content .= '$this->documentListing[\'' . $key . '\']=' . $docid . ';'; $content .= '$this->documentMap[]=array(' . $doc['parent'] . '=>' . $docid . ');'; } From fd4d147243c34e1ba2445c85211229c0b089a836 Mon Sep 17 00:00:00 2001 From: Serg <64j@mail.ru> Date: Fri, 22 Sep 2017 17:29:47 +0300 Subject: [PATCH 195/577] optimizing the cache file --- .../processors/cache_sync.class.processor.php | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 163bf8c766..40a709c9e3 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -117,6 +117,8 @@ public function publishTimeConfig($cacheRefreshTime='') exit("Cannot open file ({$filename}"); } + $content .= "\n"; + // Write $somecontent to our opened file. if (fwrite($handle, $content) === FALSE) { exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); @@ -165,8 +167,9 @@ public function buildCache($modx) { // get settings $rs = $modx->db->select('*', '[+prefix+]system_settings'); $config = array(); + $content .= '$c=&$this->config;'; while(list($key,$value) = $modx->db->getRow($rs,'num')) { - $content .= '$this->config[\'' . $key . '\']=\'' . $this->escapeDoubleQuotes($value) . '\';'; + $content .= '$c[\'' . $key . '\']=\'' . $this->escapeDoubleQuotes($value) . '\';'; $config[$key] = $value; } @@ -196,6 +199,10 @@ public function buildCache($modx) { $use_alias_path = ($config['friendly_urls'] && $config['use_alias_path']) ? 1 : 0; $tmpPath = ''; + $content .= '$this->aliasListing=array();'; + $content .= '$a=&$this->aliasListing;'; + $content .= '$d=&$this->documentListing;'; + $content .= '$m=&$this->documentMap;'; while ($doc = $modx->db->getRow($rs)) { $docid = $doc['id']; if ($use_alias_path) { @@ -207,41 +214,44 @@ public function buildCache($modx) { } $doc['path'] = $tmpPath; - $content .= '$this->aliasListing[' . $docid . ']=array(\'id\'=>' . $docid . ',\'alias\'=>\'' . $doc['alias'] . '\',\'path\'=>\'' . $doc['path'] . '\',\'parent\'=>' . $doc['parent'] . ',\'isfolder\'=>' . $doc['isfolder'] . ',\'alias_visible\'=>' . $doc['alias_visible'] . ');'; - $content .= '$this->documentListing[\'' . $key . '\']=' . $docid . ';'; - $content .= '$this->documentMap[]=array(' . $doc['parent'] . '=>' . $docid . ');'; + $content .= '$a[' . $docid . ']=array(\'id\'=>' . $docid . ',\'alias\'=>\'' . $doc['alias'] . '\',\'path\'=>\'' . $doc['path'] . '\',\'parent\'=>' . $doc['parent'] . ',\'isfolder\'=>' . $doc['isfolder'] . ',\'alias_visible\'=>' . $doc['alias_visible'] . ');'; + $content .= '$d[\'' . $key . '\']=' . $docid . ';'; + $content .= '$m[]=array(' . $doc['parent'] . '=>' . $docid . ');'; } // get content types $rs = $modx->db->select('id, contentType', '[+prefix+]site_content', "contentType!='text/html'"); + $content .= '$c=&$this->contentTypes;'; while ($doc = $modx->db->getRow($rs)) { - $content .= '$this->contentType[\'' . $doc['id'] . '\']=\'' . $doc['contentType'] . '\';'; + $content .= '$c[\'' . $doc['id'] . '\']=\'' . $doc['contentType'] . '\';'; } // WRITE Chunks to cache file $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); + $content .= '$c=&$this->chunkCache;'; while ($doc = $modx->db->getRow($rs)) { - $content .= '$this->chunkCache[\'' . $doc['name'] . '\']=\'' . ($doc['disabled'] ? '' : $this->escapeSingleQuotes($doc['snippet'])) . '\';'; + $content .= '$c[\'' . $doc['name'] . '\']=\'' . ($doc['disabled'] ? '' : $this->escapeSingleQuotes($doc['snippet'])) . '\';'; } // WRITE snippets to cache file $f = 'ss.*, sm.properties as sharedproperties'; $from = '[+prefix+]site_snippets ss LEFT JOIN [+prefix+]site_modules sm on sm.guid=ss.moduleguid'; $rs = $modx->db->select($f,$from); + $content .= '$s=&$this->snippetCache;'; while ($row = $modx->db->getRow($rs)) { $key = $row['name']; if($row['disabled']) { - $content .= '$this->snippetCache[\'' . $key . '\']=\'return false;\';'; + $content .= '$s[\'' . $key . '\']=\'return false;\';'; } else { $value = trim($row['snippet']); if($modx->config['minifyphp_incache']) $value = $this->php_strip_whitespace($value); - $content .= '$this->snippetCache[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; + $content .= '$s[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; $properties = $modx->parseProperties($row['properties']); $sharedproperties = $modx->parseProperties($row['sharedproperties']); $properties = array_merge($sharedproperties,$properties); if (0escapeSingleQuotes(json_encode($properties)) . '\';'; + $content .= '$s[\'' . $key . 'Props\']=\'' . $this->escapeSingleQuotes(json_encode($properties)) . '\';'; } } } @@ -252,15 +262,16 @@ public function buildCache($modx) { $from[] = '[+prefix+]site_plugins sp'; $from[] = 'LEFT JOIN [+prefix+]site_modules sm on sm.guid=sp.moduleguid'; $rs = $modx->db->select($f,$from,'sp.disabled=0'); + $content .= '$p=&$this->pluginCache;'; while ($row = $modx->db->getRow($rs)) { $key = $row['name']; $value = trim($row['plugincode']); if($modx->config['minifyphp_incache']) $value = $this->php_strip_whitespace($value); - $content .= '$this->pluginCache[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; + $content .= '$p[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; if ($row['properties'] != '' || $row['sharedproperties'] != '') { $properties = $this->escapeSingleQuotes(trim($row['properties'] . ' ' . $row['sharedproperties'])); if($modx->config['minifyphp_incache']) $properties = $this->php_strip_whitespace($properties); - $content .= '$this->pluginCache[\'' . $key . 'Props\']=\'' . $properties . '\';'; + $content .= '$p[\'' . $key . 'Props\']=\'' . $properties . '\';'; } } @@ -271,6 +282,7 @@ public function buildCache($modx) { $from[] = 'INNER JOIN [+prefix+]site_plugin_events event ON event.evtid=sysevt.id'; $from[] = 'INNER JOIN [+prefix+]site_plugins plugin ON plugin.id=event.pluginid'; $rs = $modx->db->select($f,$from, 'plugin.disabled=0', 'sysevt.name, event.priority'); + $content .= '$e=&$this->pluginEvent;'; $events = array(); while ($row = $modx->db->getRow($rs)) { $evtname = $row['evtname']; @@ -279,10 +291,12 @@ public function buildCache($modx) { } foreach ($events as $evtname => $pluginnames) { $events[$evtname] = $pluginnames; - $content .= '$this->pluginEvent[\'' . $evtname . '\']=array(\'' . implode('\',\'', $this->escapeSingleQuotes($pluginnames)) . '\');'; + $content .= '$e[\'' . $evtname . '\']=array(\'' . implode('\',\'', $this->escapeSingleQuotes($pluginnames)) . '\');'; } - // close and write the file + $content .= "\n"; + + // close and write the file $filename = $this->cachePath . 'siteCache.idx.php'; // invoke OnBeforeCacheUpdate event From 14c04bce9bf274ae10224733dd9d4be9a71c2f8c Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 23 Sep 2017 01:02:55 +0900 Subject: [PATCH 196/577] Fix - Do not minify not php strings --- manager/processors/cache_sync.class.processor.php | 1 - 1 file changed, 1 deletion(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 40a709c9e3..bc16f6a411 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -270,7 +270,6 @@ public function buildCache($modx) { $content .= '$p[\'' . $key . '\']=\'' . $this->escapeSingleQuotes($value) . '\';'; if ($row['properties'] != '' || $row['sharedproperties'] != '') { $properties = $this->escapeSingleQuotes(trim($row['properties'] . ' ' . $row['sharedproperties'])); - if($modx->config['minifyphp_incache']) $properties = $this->php_strip_whitespace($properties); $content .= '$p[\'' . $key . 'Props\']=\'' . $properties . '\';'; } } From f31ba421bd5d90919324b8c29a044358d6c2a187 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Fri, 22 Sep 2017 22:13:03 +0300 Subject: [PATCH 197/577] fix cache file config minifyphp_incache for chunks and line wrapping for html comments format code psr2 --- .../processors/cache_sync.class.processor.php | 221 +++++++++++------- 1 file changed, 134 insertions(+), 87 deletions(-) diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index bc16f6a411..f7a6f5ab34 100644 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -1,4 +1,5 @@ request_time = $_SERVER['REQUEST_TIME']+$modx->config['server_offset_time']; + + $this->request_time = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; } - + function setCachepath($path) { $this->cachePath = $path; @@ -26,16 +28,21 @@ function setReport($bool) $this->showReport = $bool; } - function escapeSingleQuotes($s) { - $q1 = array("\\","'"); - $q2 = array("\\\\","\\'"); - return str_replace($q1,$q2,$s); + function escapeSingleQuotes($s) + { + if ($s == '') { + return $s; + } + $q1 = array("\\", "'"); + $q2 = array("\\\\", "\\'"); + return str_replace($q1, $q2, $s); } - function escapeDoubleQuotes($s) { - $q1 = array("\\","\"","\r","\n","\$"); - $q2 = array("\\\\","\\\"","\\r","\\n","\\$"); - return str_replace($q1,$q2,$s); + function escapeDoubleQuotes($s) + { + $q1 = array("\\", "\"", "\r", "\n", "\$"); + $q2 = array("\\\\", "\\\"", "\\r", "\\n", "\\$"); + return str_replace($q1, $q2, $s); } function getParents($id, $path = '') @@ -43,18 +50,21 @@ function getParents($id, $path = '') global $modx; if (empty($this->aliases)) { $f = "id, IF(alias='', id, alias) AS alias, parent, alias_visible"; - $rs = $modx->db->select($f, '[+prefix+]site_content','deleted=0'); + $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0'); while ($row = $modx->db->getRow($rs)) { $docid = $row['id']; - $this->aliases[$docid] = $row['alias']; - $this->parents[$docid] = $row['parent']; + $this->aliases[$docid] = $row['alias']; + $this->parents[$docid] = $row['parent']; $this->aliasVisible[$docid] = $row['alias_visible']; } } if (isset($this->aliases[$id])) { - if($this->aliasVisible[$id]==1) { - if($path!='') $path = $this->aliases[$id] . '/' . $path; - else $path = $this->aliases[$id]; + if ($this->aliasVisible[$id] == 1) { + if ($path != '') { + $path = $this->aliases[$id] . '/' . $path; + } else { + $path = $this->aliases[$id]; + } } return $this->getParents($this->parents[$id], $path); } @@ -76,8 +86,10 @@ function emptyCache($modx = null) while ($file = array_shift($files)) { $name = basename($file); clearstatcache(); - if(is_file($file)) { - if(unlink($file)) $deletedfiles[] = $name; + if (is_file($file)) { + if (unlink($file)) { + $deletedfiles[] = $name; + } } } @@ -86,33 +98,34 @@ function emptyCache($modx = null) $this->publishTimeConfig(); // finished cache stuff. - if($this->showReport==true) { + if ($this->showReport == true) { global $_lang; $total = count($deletedfiles); echo sprintf($_lang['refresh_cache'], $filesincache, $total); - if($total > 0) { - echo '

          '.$_lang['cache_files_deleted'].'

            '; - foreach($deletedfiles as $deletedfile) { - echo '
          • '.$deletedfile.'
          • '; + if ($total > 0) { + echo '

            ' . $_lang['cache_files_deleted'] . '

              '; + foreach ($deletedfiles as $deletedfile) { + echo '
            • ' . $deletedfile . '
            • '; } echo '
            '; } } } - public function publishTimeConfig($cacheRefreshTime='') + public function publishTimeConfig($cacheRefreshTime = '') { $cacheRefreshTimeFromDB = $this->getCacheRefreshTime(); - if(!preg_match('@^[0-9]+$]@',$cacheRefreshTime) || $cacheRefreshTimeFromDB < $cacheRefreshTime) + if (!preg_match('@^[0-9]+$]@', $cacheRefreshTime) || $cacheRefreshTimeFromDB < $cacheRefreshTime) { $cacheRefreshTime = $cacheRefreshTimeFromDB; + } // write the file $content = 'request_time . '\';' . "\n"; - $content .= '$cacheRefreshTime=\''. $cacheRefreshTime . '\';' . "\n"; + $content .= '$cacheRefreshTime=\'' . $cacheRefreshTime . '\';' . "\n"; - $filename = $this->cachePath.'/sitePublishing.idx.php'; + $filename = $this->cachePath . '/sitePublishing.idx.php'; if (!$handle = fopen($filename, 'w')) { exit("Cannot open file ({$filename}"); } @@ -120,7 +133,7 @@ public function publishTimeConfig($cacheRefreshTime='') $content .= "\n"; // Write $somecontent to our opened file. - if (fwrite($handle, $content) === FALSE) { + if (fwrite($handle, $content) === false) { exit("Cannot write publishing info file! Make sure the assets/cache directory is writable!"); } } @@ -132,34 +145,45 @@ public function getCacheRefreshTime() // update publish time file $timesArr = array(); - $result = $modx->db->select('MIN(pub_date) AS minpub', '[+prefix+]site_content', 'pub_date>'.$this->request_time); - if(!$result) echo "Couldn't determine next publish event!"; + $result = $modx->db->select('MIN(pub_date) AS minpub', '[+prefix+]site_content', 'pub_date>' . $this->request_time); + if (!$result) { + echo "Couldn't determine next publish event!"; + } $minpub = $modx->db->getValue($result); - if($minpub!=NULL) + if ($minpub != null) { $timesArr[] = $minpub; + } - $result = $modx->db->select('MIN(unpub_date) AS minunpub', '[+prefix+]site_content', 'unpub_date>'.$this->request_time); - if(!$result) echo "Couldn't determine next unpublish event!"; + $result = $modx->db->select('MIN(unpub_date) AS minunpub', '[+prefix+]site_content', 'unpub_date>' . $this->request_time); + if (!$result) { + echo "Couldn't determine next unpublish event!"; + } $minunpub = $modx->db->getValue($result); - if($minunpub!=NULL) + if ($minunpub != null) { $timesArr[] = $minunpub; + } - if(isset($this->cacheRefreshTime) && !empty($this->cacheRefreshTime)) + if (isset($this->cacheRefreshTime) && !empty($this->cacheRefreshTime)) { $timesArr[] = $this->cacheRefreshTime; + } - if(count($timesArr)>0) $cacheRefreshTime = min($timesArr); - else $cacheRefreshTime = 0; + if (count($timesArr) > 0) { + $cacheRefreshTime = min($timesArr); + } else { + $cacheRefreshTime = 0; + } return $cacheRefreshTime; } /** - * build siteCache file - * @param DocumentParser $modx - * @return boolean success - */ - public function buildCache($modx) { + * build siteCache file + * @param DocumentParser $modx + * @return boolean success + */ + public function buildCache($modx) + { $content = "db->select('*', '[+prefix+]system_settings'); $config = array(); $content .= '$c=&$this->config;'; - while(list($key,$value) = $modx->db->getRow($rs,'num')) { - $content .= '$c[\'' . $key . '\']=\'' . $this->escapeDoubleQuotes($value) . '\';'; + while (list($key, $value) = $modx->db->getRow($rs, 'num')) { + $content .= '$c[\'' . $key . '\']="' . $this->escapeDoubleQuotes($value) . '";'; $config[$key] = $value; } @@ -180,19 +204,19 @@ public function buildCache($modx) { $content .= '$this->config[\'enable_filter\']=\'0\';'; } } - + if ($config['aliaslistingfolder'] == 1) { - $f['id'] = 'c.id'; - $f['alias'] = "IF( c.alias='', c.id, c.alias)"; - $f['parent'] = 'c.parent'; - $f['isfolder'] = 'c.isfolder'; - $f['alias_visible'] = 'c.alias_visible'; + $f['id'] = 'c.id'; + $f['alias'] = "IF( c.alias='', c.id, c.alias)"; + $f['parent'] = 'c.parent'; + $f['isfolder'] = 'c.isfolder'; + $f['alias_visible'] = 'c.alias_visible'; $from = array(); $from[] = '[+prefix+]site_content c'; $from[] = 'LEFT JOIN [+prefix+]site_content p ON p.id=c.parent'; $where = 'c.deleted=0 AND (c.isfolder=1 OR p.alias_visible=0)'; - $rs = $modx->db->select( $f, $from, $where, 'c.parent, c.menuindex'); - }else{ + $rs = $modx->db->select($f, $from, $where, 'c.parent, c.menuindex'); + } else { $f = "id, IF(alias='', id, alias) AS alias, parent, isfolder, alias_visible"; $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0', 'parent, menuindex'); } @@ -207,7 +231,7 @@ public function buildCache($modx) { $docid = $doc['id']; if ($use_alias_path) { $tmpPath = $this->getParents($doc['parent']); - $alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$doc['alias']; + $alias = (strlen($tmpPath) > 0 ? "$tmpPath/" : '') . $doc['alias']; $key = $alias; } else { $key = $doc['alias']; @@ -230,27 +254,31 @@ public function buildCache($modx) { $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); $content .= '$c=&$this->chunkCache;'; while ($doc = $modx->db->getRow($rs)) { + if ($modx->config['minifyphp_incache']) { + $doc['snippet'] = preg_replace(array('|\s+|', '||', '|-->\s+' . "\n", '-->' . "\n" . '|', '|-->\s+' . "\n", '-->' . "\n" . '', $content, 2); - if (count($a) == 1) - $result = $a[0]; // return only document content + if (substr($content, 0, 5) === '') + 2); + } // remove php header + $a = explode('', $content, 2); + if (count($a) == 1) { + $result = $a[0]; + } // return only document content else { - $docObj= unserialize($a[0]); // rebuild document object + $docObj = unserialize($a[0]); // rebuild document object // check page security if ($docObj['privateweb'] && isset ($docObj['__MODxDocGroups__'])) { - $pass= false; - $usrGrps= $this->getUserDocGroups(); - $docGrps= explode(',', $docObj['__MODxDocGroups__']); + $pass = false; + $usrGrps = $this->getUserDocGroups(); + $docGrps = explode(',', $docObj['__MODxDocGroups__']); // check is user has access to doc groups if (is_array($usrGrps)) { foreach ($usrGrps as $k => $v) { - if (!in_array($v, $docGrps)) continue; - $pass= true; + if (!in_array($v, $docGrps)) { + continue; + } + $pass = true; break; } } @@ -611,30 +737,38 @@ function getDocumentObjectFromCache($id, $loading = false) { if (!$pass) { if ($this->config['unauthorized_page']) { // check if file is not public - $rs= $this->db->select('count(id)', '[+prefix+]document_groups', "document='{$id}'", '', '1'); - $total= $this->db->getValue($rs); + $rs = $this->db->select('count(id)', '[+prefix+]document_groups', "document='{$id}'", '', '1'); + $total = $this->db->getValue($rs); + } else { + $total = 0; + } + + if ($total > 0) { + $this->sendUnauthorizedPage(); + } else { + $this->sendErrorPage(); } - else $total = 0; - - if ($total > 0) $this->sendUnauthorizedPage(); - else $this->sendErrorPage(); - + exit; // stop here } } // Grab the Scripts - if (isset($docObj['__MODxSJScripts__'])) $this->sjscripts = $docObj['__MODxSJScripts__']; - if (isset($docObj['__MODxJScripts__'])) $this->jscripts = $docObj['__MODxJScripts__']; + if (isset($docObj['__MODxSJScripts__'])) { + $this->sjscripts = $docObj['__MODxSJScripts__']; + } + if (isset($docObj['__MODxJScripts__'])) { + $this->jscripts = $docObj['__MODxJScripts__']; + } // Remove intermediate variables unset($docObj['__MODxDocGroups__'], $docObj['__MODxSJScripts__'], $docObj['__MODxJScripts__']); - $this->documentObject= $docObj; - + $this->documentObject = $docObj; + $result = $a[1]; // return document content } - - $this->documentGenerated= 0; + + $this->documentGenerated = 0; // invoke OnLoadWebPageCache event $this->documentContent = $result; $this->invokeEvent('OnLoadWebPageCache'); @@ -643,7 +777,7 @@ function getDocumentObjectFromCache($id, $loading = false) { /** * Final processing and output of the document/resource. - * + * * - runs uncached snippets * - add javascript to * - removes unused placeholders @@ -651,138 +785,163 @@ function getDocumentObjectFromCache($id, $loading = false) { * * @param boolean $noEvent Default: false */ - function outputContent($noEvent= false) { - $this->documentOutput= $this->documentContent; + function outputContent($noEvent = false) + { + $this->documentOutput = $this->documentContent; if ($this->documentGenerated == 1 && $this->documentObject['cacheable'] == 1 && $this->documentObject['type'] == 'document' && $this->documentObject['published'] == 1) { - if (!empty($this->sjscripts)) $this->documentObject['__MODxSJScripts__'] = $this->sjscripts; - if (!empty($this->jscripts)) $this->documentObject['__MODxJScripts__'] = $this->jscripts; + if (!empty($this->sjscripts)) { + $this->documentObject['__MODxSJScripts__'] = $this->sjscripts; + } + if (!empty($this->jscripts)) { + $this->documentObject['__MODxJScripts__'] = $this->jscripts; + } } // check for non-cached snippet output if (strpos($this->documentOutput, '[!') > -1) { $this->recentUpdate = $_SERVER['REQUEST_TIME'] + $this->config['server_offset_time']; - - $this->documentOutput= str_replace('[!', '[[', $this->documentOutput); - $this->documentOutput= str_replace('!]', ']]', $this->documentOutput); + + $this->documentOutput = str_replace('[!', '[[', $this->documentOutput); + $this->documentOutput = str_replace('!]', ']]', $this->documentOutput); // Parse document source - $this->documentOutput= $this->parseDocumentSource($this->documentOutput); + $this->documentOutput = $this->parseDocumentSource($this->documentOutput); } // Moved from prepareResponse() by sirlancelot // Insert Startup jscripts & CSS scripts into template - template must have a tag - if ($js= $this->getRegisteredClientStartupScripts()) { + if ($js = $this->getRegisteredClientStartupScripts()) { // change to just before closing // $this->documentContent = preg_replace("/(]*>)/i", "\\1\n".$js, $this->documentContent); - $this->documentOutput= preg_replace("/(<\/head>)/i", $js . "\n\\1", $this->documentOutput); + $this->documentOutput = preg_replace("/(<\/head>)/i", $js . "\n\\1", $this->documentOutput); } // Insert jscripts & html block into template - template must have a tag - if ($js= $this->getRegisteredClientScripts()) { - $this->documentOutput= preg_replace("/(<\/body>)/i", $js . "\n\\1", $this->documentOutput); + if ($js = $this->getRegisteredClientScripts()) { + $this->documentOutput = preg_replace("/(<\/body>)/i", $js . "\n\\1", $this->documentOutput); } // End fix by sirlancelot $this->documentOutput = $this->cleanUpMODXTags($this->documentOutput); - - $this->documentOutput= $this->rewriteUrls($this->documentOutput); + + $this->documentOutput = $this->rewriteUrls($this->documentOutput); // send out content-type and content-disposition headers if (IN_PARSER_MODE == "true") { - $type= !empty ($this->contentTypes[$this->documentIdentifier]) ? $this->contentTypes[$this->documentIdentifier] : "text/html"; + $type = !empty ($this->contentTypes[$this->documentIdentifier]) ? $this->contentTypes[$this->documentIdentifier] : "text/html"; header('Content-Type: ' . $type . '; charset=' . $this->config['modx_charset']); -// if (($this->documentIdentifier == $this->config['error_page']) || $redirect_error) -// header('HTTP/1.0 404 Not Found'); + // if (($this->documentIdentifier == $this->config['error_page']) || $redirect_error) + // header('HTTP/1.0 404 Not Found'); if (!$this->checkPreview() && $this->documentObject['content_dispo'] == 1) { - if ($this->documentObject['alias']) - $name= $this->documentObject['alias']; - else { + if ($this->documentObject['alias']) { + $name = $this->documentObject['alias']; + } else { // strip title of special characters - $name= $this->documentObject['pagetitle']; - $name= strip_tags($name); - $name= $this->cleanUpMODXTags($name); - $name= strtolower($name); - $name= preg_replace('/&.+?;/', '', $name); // kill entities - $name= preg_replace('/[^\.%a-z0-9 _-]/', '', $name); - $name= preg_replace('/\s+/', '-', $name); - $name= preg_replace('|-+|', '-', $name); - $name= trim($name, '-'); + $name = $this->documentObject['pagetitle']; + $name = strip_tags($name); + $name = $this->cleanUpMODXTags($name); + $name = strtolower($name); + $name = preg_replace('/&.+?;/', '', $name); // kill entities + $name = preg_replace('/[^\.%a-z0-9 _-]/', '', $name); + $name = preg_replace('/\s+/', '-', $name); + $name = preg_replace('|-+|', '-', $name); + $name = trim($name, '-'); } - $header= 'Content-Disposition: attachment; filename=' . $name; + $header = 'Content-Disposition: attachment; filename=' . $name; header($header); } } $this->setConditional(); $stats = $this->getTimerStats($this->tstart); - + $out =& $this->documentOutput; - $out= str_replace("[^q^]", $stats['queries'] , $out); - $out= str_replace("[^qt^]", $stats['queryTime'] , $out); - $out= str_replace("[^p^]", $stats['phpTime'] , $out); - $out= str_replace("[^t^]", $stats['totalTime'] , $out); - $out= str_replace("[^s^]", $stats['source'] , $out); - $out= str_replace("[^m^]", $stats['phpMemory'], $out); + $out = str_replace("[^q^]", $stats['queries'], $out); + $out = str_replace("[^qt^]", $stats['queryTime'], $out); + $out = str_replace("[^p^]", $stats['phpTime'], $out); + $out = str_replace("[^t^]", $stats['totalTime'], $out); + $out = str_replace("[^s^]", $stats['source'], $out); + $out = str_replace("[^m^]", $stats['phpMemory'], $out); //$this->documentOutput= $out; // invoke OnWebPagePrerender event if (!$noEvent) { - $evtOut = $this->invokeEvent('OnWebPagePrerender', array('documentOutput'=>$this->documentOutput)); - if (is_array($evtOut) && count($evtOut) > 0){ + $evtOut = $this->invokeEvent('OnWebPagePrerender', array('documentOutput' => $this->documentOutput)); + if (is_array($evtOut) && count($evtOut) > 0) { $this->documentOutput = $evtOut['0']; - } + } } - + $this->documentOutput = $this->removeSanitizeSeed($this->documentOutput); - if (strpos($this->documentOutput,'\{')!==false) $this->documentOutput = $this->RecoveryEscapedTags($this->documentOutput); - elseif(strpos($this->documentOutput,'\[')!==false) $this->documentOutput = $this->RecoveryEscapedTags($this->documentOutput); - + if (strpos($this->documentOutput, '\{') !== false) { + $this->documentOutput = $this->RecoveryEscapedTags($this->documentOutput); + } elseif (strpos($this->documentOutput, '\[') !== false) { + $this->documentOutput = $this->RecoveryEscapedTags($this->documentOutput); + } + echo $this->documentOutput; - if ($this->dumpSQL) echo $this->queryCode; + if ($this->dumpSQL) { + echo $this->queryCode; + } if ($this->dumpSnippets) { $sc = ""; $tt = 0; - foreach ($this->snippetsTime as $s=>$v) { - $t=$v['time']; - $sname=$v['sname']; + foreach ($this->snippetsTime as $s => $v) { + $t = $v['time']; + $sname = $v['sname']; $sc .= sprintf("%s. %s (%s)
            ", $s, $sname, sprintf("%2.2f ms", $t)); // currentSnippet $tt += $t; } - echo "
            Snippets (".count($this->snippetsTime)." / ".sprintf("%2.2f ms", $tt)."){$sc}

            "; + echo "
            Snippets (" . count($this->snippetsTime) . " / " . sprintf("%2.2f ms", $tt) . "){$sc}

            "; echo $this->snippetsCode; } if ($this->dumpPlugins) { $ps = ""; $tc = 0; - foreach ($this->pluginsTime as $s=>$t) { - $ps .= "$s (".sprintf("%2.2f ms", $t*1000).")
            "; + foreach ($this->pluginsTime as $s => $t) { + $ps .= "$s (" . sprintf("%2.2f ms", $t * 1000) . ")
            "; $tt += $t; } - echo "
            Plugins (".count($this->pluginsTime)." / ".sprintf("%2.2f ms", $tt*1000)."){$ps}

            "; + echo "
            Plugins (" . count($this->pluginsTime) . " / " . sprintf("%2.2f ms", $tt * 1000) . "){$ps}

            "; echo $this->pluginsCode; } ob_end_flush(); } - function RecoveryEscapedTags($contents) { - list($sTags,$rTags) = $this->getTagsForEscape(); - return str_replace($rTags,$sTags,$contents); + /** + * @param $contents + * @return mixed + */ + function RecoveryEscapedTags($contents) + { + list($sTags, $rTags) = $this->getTagsForEscape(); + return str_replace($rTags, $sTags, $contents); } - - function getTagsForEscape($tags = '{{,}},[[,]],[!,!],[*,*],[(,)],[+,+],[~,~],[^,^]') { - $srcTags = explode(',',$tags); + + /** + * @param string $tags + * @return array + */ + function getTagsForEscape($tags = '{{,}},[[,]],[!,!],[*,*],[(,)],[+,+],[~,~],[^,^]') + { + $srcTags = explode(',', $tags); $repTags = array(); - foreach($srcTags as $tag) { - $repTags[] = '\\'.$tag[0].'\\'.$tag[1]; + foreach ($srcTags as $tag) { + $repTags[] = '\\' . $tag[0] . '\\' . $tag[1]; } - return array($srcTags,$repTags); + return array($srcTags, $repTags); } - - function getTimerStats($tstart) { + + /** + * @param $tstart + * @return array + */ + function getTimerStats($tstart) + { $stats = array(); $stats['totalTime'] = ($this->getMicroTime() - $tstart); @@ -799,19 +958,22 @@ function getTimerStats($tstart) { return $stats; } - public function setConditional(){ - if(!empty($_POST) || (defined('MODX_API_MODE') && MODX_API_MODE) || $this->getLoginUserID('mgr') || !$this->useConditional || empty($this->recentUpdate)) return; + public function setConditional() + { + if (!empty($_POST) || (defined('MODX_API_MODE') && MODX_API_MODE) || $this->getLoginUserID('mgr') || !$this->useConditional || empty($this->recentUpdate)) { + return; + } $last_modified = gmdate('D, d M Y H:i:s T', $this->recentUpdate); - $etag = md5($last_modified); + $etag = md5($last_modified); $HTTP_IF_MODIFIED_SINCE = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false; - $HTTP_IF_NONE_MATCH = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false; + $HTTP_IF_NONE_MATCH = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false; header('Pragma: no-cache'); - if ($HTTP_IF_MODIFIED_SINCE == $last_modified || strpos($HTTP_IF_NONE_MATCH, $etag)!==false) { + if ($HTTP_IF_MODIFIED_SINCE == $last_modified || strpos($HTTP_IF_NONE_MATCH, $etag) !== false) { header('HTTP/1.1 304 Not Modified'); header('Content-Length: 0'); exit; - } else { + } else { header("Last-Modified: {$last_modified}"); header("ETag: '{$etag}'"); } @@ -820,32 +982,36 @@ public function setConditional(){ /** * Checks the publish state of page */ - function updatePubStatus() { - $cacheRefreshTime= 0; + function updatePubStatus() + { + $cacheRefreshTime = 0; $recent_update = 0; @include(MODX_BASE_PATH . $this->getCacheFolder() . 'sitePublishing.idx.php'); $this->recentUpdate = $recent_update; - + $timeNow = $_SERVER['REQUEST_TIME'] + $this->config['server_offset_time']; - if ($timeNow<$cacheRefreshTime || $cacheRefreshTime == 0) return; - + if ($timeNow < $cacheRefreshTime || $cacheRefreshTime == 0) { + return; + } + // now, check for documents that need publishing - $field = array('published'=>1, 'publishedon'=> $timeNow); + $field = array('published' => 1, 'publishedon' => $timeNow); $where = "pub_date <= {$timeNow} AND pub_date!=0 AND published=0"; $this->db->update($field, '[+prefix+]site_content', $where); // now, check for documents that need un-publishing - $field = array('published'=>0, 'publishedon'=>0); + $field = array('published' => 0, 'publishedon' => 0); $where = "unpub_date <= {$timeNow} AND unpub_date!=0 AND published=1"; $this->db->update($field, '[+prefix+]site_content', $where); - + $this->recentUpdate = $timeNow; // clear the cache $this->clearCache('full'); } - function checkPublishStatus() { + function checkPublishStatus() + { $this->updatePubStatus(); } @@ -854,7 +1020,8 @@ function checkPublishStatus() { * * - cache page */ - function postProcess() { + function postProcess() + { // if the current document was generated, cache it! $cacheable = ($this->config['enable_cache'] && $this->documentObject['cacheable']) ? 1 : 0; if ($cacheable && $this->documentGenerated && $this->documentObject['type'] == 'document' && $this->documentObject['published']) { @@ -865,14 +1032,16 @@ function postProcess() { // get and store document groups inside document object. Document groups will be used to check security on cache pages $where = "document='{$this->documentIdentifier}'"; $rs = $this->db->select('document_group', '[+prefix+]document_groups', $where); - $docGroups= $this->db->getColumn('document_group', $rs); + $docGroups = $this->db->getColumn('document_group', $rs); // Attach Document Groups and Scripts - if (is_array($docGroups)) $this->documentObject['__MODxDocGroups__'] = implode(",", $docGroups); + if (is_array($docGroups)) { + $this->documentObject['__MODxDocGroups__'] = implode(",", $docGroups); + } - $docObjSerial= serialize($this->documentObject); - $cacheContent= $docObjSerial . "" . $this->documentContent; - $page_cache_path = MODX_BASE_PATH.$this->getHashFile($this->cacheKey); + $docObjSerial = serialize($this->documentObject); + $cacheContent = $docObjSerial . "" . $this->documentContent; + $page_cache_path = MODX_BASE_PATH . $this->getHashFile($this->cacheKey); file_put_contents($page_cache_path, "$cacheContent"); } } @@ -883,239 +1052,353 @@ function postProcess() { // end post processing } - function getTagsFromContent($content,$left='[+',$right='+]') { - $_ = $this->_getTagsFromContent($content,$left,$right); - if(empty($_)) return array(); - foreach($_ as $v) - { + /** + * @param $content + * @param string $left + * @param string $right + * @return array + */ + function getTagsFromContent($content, $left = '[+', $right = '+]') + { + $_ = $this->_getTagsFromContent($content, $left, $right); + if (empty($_)) { + return array(); + } + foreach ($_ as $v) { $tags[0][] = "{$left}{$v}{$right}"; $tags[1][] = $v; } return $tags; } - - function _getTagsFromContent($content, $left='[+',$right='+]') { - if(strpos($content,$left)===false) return array(); - if(strpos($content,';}}')!==false) $content = str_replace(';}}', '',$content); - if(strpos($content,'{{}}')!==false) $content = str_replace('{{}}','',$content); - if(strpos($content,']]]]')!==false) $content = str_replace(']] ]]','',$content); - if(strpos($content,']]]')!==false) $content = str_replace('] ]]', '',$content); - - $pos[''] = strpos($content,']]>'); - - if($pos['']!==false) { - $content = substr($content,0,$pos['']+3); - } - - $lp = explode($left,$content); + + /** + * @param $content + * @param string $left + * @param string $right + * @return array + */ + function _getTagsFromContent($content, $left = '[+', $right = '+]') + { + if (strpos($content, $left) === false) { + return array(); + } + if (strpos($content, ';}}') !== false) { + $content = str_replace(';}}', '', $content); + } + if (strpos($content, '{{}}') !== false) { + $content = str_replace('{{}}', '', $content); + } + if (strpos($content, ']]]]') !== false) { + $content = str_replace(']] ]]', '', $content); + } + if (strpos($content, ']]]') !== false) { + $content = str_replace('] ]]', '', $content); + } + + $pos[''] = strpos($content, ']]>'); + + if ($pos[''] !== false) { + $content = substr($content, 0, $pos[''] + 3); + } + + $lp = explode($left, $content); $piece = array(); - foreach($lp as $lc=>$lv) { - if($lc!==0) $piece[] = $left; - if(strpos($lv,$right)===false) $piece[] = $lv; - else { - $rp = explode($right,$lv); - foreach($rp as $rc=>$rv) { - if($rc!==0) $piece[] = $right; + foreach ($lp as $lc => $lv) { + if ($lc !== 0) { + $piece[] = $left; + } + if (strpos($lv, $right) === false) { + $piece[] = $lv; + } else { + $rp = explode($right, $lv); + foreach ($rp as $rc => $rv) { + if ($rc !== 0) { + $piece[] = $right; + } $piece[] = $rv; } } } - $lc=0; - $rc=0; + $lc = 0; + $rc = 0; $fetch = ''; $tags = array(); - foreach($piece as $v) { - if($v===$left) { - if(0<$lc) $fetch .= $left; + foreach ($piece as $v) { + if ($v === $left) { + if (0 < $lc) { + $fetch .= $left; + } $lc++; - } - elseif($v===$right) { - if($lc===0) continue; + } elseif ($v === $right) { + if ($lc === 0) { + continue; + } $rc++; - if($lc===$rc) { + if ($lc === $rc) { // #1200 Enable modifiers in Wayfinder - add nested placeholders to $tags like for $fetch = "phx:input=`[+wf.linktext+]`:test" - if(strpos($fetch,$left)!==false) { - $nested = $this->_getTagsFromContent($fetch,$left,$right); - foreach($nested as $tag) { - if(!in_array($tag, $tags)) + if (strpos($fetch, $left) !== false) { + $nested = $this->_getTagsFromContent($fetch, $left, $right); + foreach ($nested as $tag) { + if (!in_array($tag, $tags)) { $tags[] = $tag; + } } } - if(!in_array($fetch, $tags)) { // Avoid double Matches + if (!in_array($fetch, $tags)) { // Avoid double Matches $tags[] = $fetch; // Fetch }; $fetch = ''; // and reset - $lc=0; - $rc=0; + $lc = 0; + $rc = 0; + } else { + $fetch .= $right; } - else $fetch .= $right; } else { - if(0<$lc) $fetch .= $v; - else continue; + if (0 < $lc) { + $fetch .= $v; + } else { + continue; + } } } return $tags; } - + /** * Merge content fields and TVs * - * @param string $template + * @param $content + * @param bool $ph * @return string + * @internal param string $template */ - function mergeDocumentContent($content,$ph=false) { - if(stripos($content,'<@LITERAL>')!==false) $content= $this->escapeLiteralTagsContent($content); - if (strpos($content, '[*') === false) + function mergeDocumentContent($content, $ph = false) + { + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } + if (strpos($content, '[*') === false) { + return $content; + } + if (!isset($this->documentIdentifier)) { + return $content; + } + if (!isset($this->documentObject) || empty($this->documentObject)) { return $content; - if(!isset($this->documentIdentifier)) return $content; - if(!isset($this->documentObject) || empty($this->documentObject)) return $content; - - if(!$ph) $ph = $this->documentObject; - - $matches = $this->getTagsFromContent($content,'[*','*]'); - if(!$matches) return $content; - - foreach($matches[1] as $i=>$key) { - if(substr($key, 0, 1) == '#') $key = substr($key, 1); // remove # for QuickEdit format - - list($key,$modifiers) = $this->splitKeyAndFilter($key); - if(strpos($key,'@')!==false) list($key,$context) = explode('@',$key,2); - else $context = false; - + } + + if (!$ph) { + $ph = $this->documentObject; + } + + $matches = $this->getTagsFromContent($content, '[*', '*]'); + if (!$matches) { + return $content; + } + + foreach ($matches[1] as $i => $key) { + if (substr($key, 0, 1) == '#') { + $key = substr($key, 1); + } // remove # for QuickEdit format + + list($key, $modifiers) = $this->splitKeyAndFilter($key); + if (strpos($key, '@') !== false) { + list($key, $context) = explode('@', $key, 2); + } else { + $context = false; + } + // if(!isset($ph[$key]) && !$context) continue; // #1218 TVs/PHs will not be rendered if custom_meta_title is not assigned to template like [*custom_meta_title:ne:then=`[*custom_meta_title*]`:else=`[*pagetitle*]`*] - if($context) $value = $this->_contextValue("{$key}@{$context}",$this->documentObject['parent']); - else $value = isset($ph[$key]) ? $ph[$key] : ''; + if ($context) { + $value = $this->_contextValue("{$key}@{$context}", $this->documentObject['parent']); + } else { + $value = isset($ph[$key]) ? $ph[$key] : ''; + } if (is_array($value)) { include_once(MODX_MANAGER_PATH . 'includes/tmplvars.format.inc.php'); include_once(MODX_MANAGER_PATH . 'includes/tmplvars.commands.inc.php'); $value = getTVDisplayFormat($value[0], $value[1], $value[2], $value[3], $value[4]); } - + $s = &$matches[0][$i]; - if($modifiers!==false) { - $value = $this->applyFilter($value,$modifiers,$key); + if ($modifiers !== false) { + $value = $this->applyFilter($value, $modifiers, $key); + } + + if (strpos($content, $s) !== false) { + $content = str_replace($s, $value, $content); + } else { + $this->addLog('mergeDocumentContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); } - - if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); - else $this->addLog('mergeDocumentContent parse error',$_SERVER['REQUEST_URI'].$s,2); } - + return $content; } - function _contextValue($key,$parent=false) { - if(preg_match('/@\d+\/u/',$key)) - $key = str_replace(array('@','/u'),array('@u(',')'),$key); - list($key,$str) = explode('@',$key,2); - - if(strpos($str,'(')) list($context,$option) = explode('(', $str, 2); - else list($context,$option) = array($str, false); - - if($option) $option = trim($option, ')(\'"`'); - - switch(strtolower($context)) { + /** + * @param $key + * @param bool $parent + * @return bool|mixed|string + */ + function _contextValue($key, $parent = false) + { + if (preg_match('/@\d+\/u/', $key)) { + $key = str_replace(array('@', '/u'), array('@u(', ')'), $key); + } + list($key, $str) = explode('@', $key, 2); + + if (strpos($str, '(')) { + list($context, $option) = explode('(', $str, 2); + } else { + list($context, $option) = array($str, false); + } + + if ($option) { + $option = trim($option, ')(\'"`'); + } + + switch (strtolower($context)) { case 'site_start': $docid = $this->config['site_start']; break; case 'parent': case 'p': $docid = $parent; - if($docid==0) $docid = $this->config['site_start']; + if ($docid == 0) { + $docid = $this->config['site_start']; + } break; case 'ultimateparent': case 'uparent': case 'up': case 'u': - if(strpos($str,'(')!==false) { - $top = substr($str,strpos($str,'(')); - $top = trim($top,'()"\''); + if (strpos($str, '(') !== false) { + $top = substr($str, strpos($str, '(')); + $top = trim($top, '()"\''); + } else { + $top = 0; } - else $top = 0; - $docid = $this->getUltimateParentId($this->documentIdentifier,$top); + $docid = $this->getUltimateParentId($this->documentIdentifier, $top); break; case 'alias': - $str = substr($str,strpos($str,'(')); - $str = trim($str,'()"\''); + $str = substr($str, strpos($str, '(')); + $str = trim($str, '()"\''); $docid = $this->getIdFromAlias($str); break; case 'prev': - if(!$option) $option = 'menuindex,ASC'; - elseif(strpos($option, ',')===false) $option .= ',ASC'; - list($by,$dir) = explode(',', $option, 2); + if (!$option) { + $option = 'menuindex,ASC'; + } elseif (strpos($option, ',') === false) { + $option .= ',ASC'; + } + list($by, $dir) = explode(',', $option, 2); $children = $this->getActiveChildren($parent, $by, $dir); $find = false; $prev = false; - foreach($children as $row) { - if($row['id'] == $this->documentIdentifier) { + foreach ($children as $row) { + if ($row['id'] == $this->documentIdentifier) { $find = true; break; } $prev = $row; } - if($find) { - if(isset($prev[$key])) return $prev[$key]; - else $docid = $prev['id']; + if ($find) { + if (isset($prev[$key])) { + return $prev[$key]; + } else { + $docid = $prev['id']; + } + } else { + $docid = ''; } - else $docid = ''; break; case 'next': - if(!$option) $option = 'menuindex,ASC'; - elseif(strpos($option, ',')===false) $option .= ',ASC'; - list($by,$dir) = explode(',', $option, 2); + if (!$option) { + $option = 'menuindex,ASC'; + } elseif (strpos($option, ',') === false) { + $option .= ',ASC'; + } + list($by, $dir) = explode(',', $option, 2); $children = $this->getActiveChildren($parent, $by, $dir); $find = false; $next = false; - foreach($children as $row) { - if($find) { + foreach ($children as $row) { + if ($find) { $next = $row; break; } - if($row['id'] == $this->documentIdentifier) $find = true; + if ($row['id'] == $this->documentIdentifier) { + $find = true; + } } - if($find) { - if(isset($next[$key])) return $next[$key]; - else $docid = $next['id']; + if ($find) { + if (isset($next[$key])) { + return $next[$key]; + } else { + $docid = $next['id']; + } + } else { + $docid = ''; } - else $docid = ''; break; default: $docid = $str; } - if(preg_match('@^[1-9][0-9]*$@',$docid)) - $value = $this->getField($key,$docid); - else $value = ''; + if (preg_match('@^[1-9][0-9]*$@', $docid)) { + $value = $this->getField($key, $docid); + } else { + $value = ''; + } return $value; } - + /** * Merge system settings * - * @param string $template + * @param $content + * @param bool $ph * @return string + * @internal param string $template */ - function mergeSettingsContent($content,$ph=false) { - if(stripos($content,'<@LITERAL>')!==false) $content= $this->escapeLiteralTagsContent($content); - if (strpos($content, '[(') === false) + function mergeSettingsContent($content, $ph = false) + { + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } + if (strpos($content, '[(') === false) { + return $content; + } + + if (!$ph) { + $ph = $this->config; + } + + $matches = $this->getTagsFromContent($content, '[(', ')]'); + if (!$matches) { return $content; - - if(!$ph) $ph = $this->config; - - $matches = $this->getTagsFromContent($content,'[(',')]'); - if(!$matches) return $content; - - foreach($matches[1] as $i=>$key) { - list($key,$modifiers) = $this->splitKeyAndFilter($key); - - if(isset($ph[$key])) $value = $ph[$key]; - else continue; - - if($modifiers!==false) $value = $this->applyFilter($value,$modifiers,$key); + } + + foreach ($matches[1] as $i => $key) { + list($key, $modifiers) = $this->splitKeyAndFilter($key); + + if (isset($ph[$key])) { + $value = $ph[$key]; + } else { + continue; + } + + if ($modifiers !== false) { + $value = $this->applyFilter($value, $modifiers, $key); + } $s = &$matches[0][$i]; - if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); - else $this->addLog('mergeSettingsContent parse error',$_SERVER['REQUEST_URI'].$s,2); + if (strpos($content, $s) !== false) { + $content = str_replace($s, $value, $content); + } else { + $this->addLog('mergeSettingsContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); + } } return $content; } @@ -1124,41 +1407,62 @@ function mergeSettingsContent($content,$ph=false) { * Merge chunks * * @param string $content + * @param bool $ph * @return string */ - function mergeChunkContent($content,$ph=false) { - if(strpos($content,'{{ ')!==false) $content = str_replace(array('{{ ',' }}'),array('\{\{ ',' \}\}'),$content); - if(stripos($content,'<@LITERAL>')!==false) $content= $this->escapeLiteralTagsContent($content); - if(strpos($content,'{{')===false) return $content; - - if(!$ph) $ph = $this->chunkCache; - - $matches = $this->getTagsFromContent($content,'{{','}}'); - if(!$matches) return $content; - - foreach($matches[1] as $i=>$key) { + function mergeChunkContent($content, $ph = false) + { + if (strpos($content, '{{ ') !== false) { + $content = str_replace(array('{{ ', ' }}'), array('\{\{ ', ' \}\}'), $content); + } + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } + if (strpos($content, '{{') === false) { + return $content; + } + + if (!$ph) { + $ph = $this->chunkCache; + } + + $matches = $this->getTagsFromContent($content, '{{', '}}'); + if (!$matches) { + return $content; + } + + foreach ($matches[1] as $i => $key) { $snip_call = $this->_split_snip_call($key); $key = $snip_call['name']; $params = $this->getParamsFromString($snip_call['params']); - list($key,$modifiers) = $this->splitKeyAndFilter($key); - - if(!isset($ph[$key])) $ph[$key] = $this->getChunk($key); + list($key, $modifiers) = $this->splitKeyAndFilter($key); + + if (!isset($ph[$key])) { + $ph[$key] = $this->getChunk($key); + } $value = $ph[$key]; - - if(is_null($value)) continue; - - $value = $this->mergePlaceholderContent($value,$params); + + if (is_null($value)) { + continue; + } + + $value = $this->mergePlaceholderContent($value, $params); $value = $this->mergeConditionalTagsContent($value); $value = $this->mergeDocumentContent($value); $value = $this->mergeSettingsContent($value); $value = $this->mergeChunkContent($value); - - if($modifiers!==false) $value = $this->applyFilter($value,$modifiers,$key); - + + if ($modifiers !== false) { + $value = $this->applyFilter($value, $modifiers, $key); + } + $s = &$matches[0][$i]; - if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); - else $this->addLog('mergeChunkContent parse error',$_SERVER['REQUEST_URI'].$s,2); + if (strpos($content, $s) !== false) { + $content = str_replace($s, $value, $content); + } else { + $this->addLog('mergeChunkContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); + } } return $content; } @@ -1167,167 +1471,263 @@ function mergeChunkContent($content,$ph=false) { * Merge placeholder values * * @param string $content + * @param bool $ph * @return string */ - function mergePlaceholderContent($content,$ph=false) { - - if(stripos($content,'<@LITERAL>')!==false) $content= $this->escapeLiteralTagsContent($content); - if (strpos($content, '[+') === false) return $content; - - if(!$ph) $ph = $this->placeholders; - - $content= $this->mergeConditionalTagsContent($content); - $content= $this->mergeDocumentContent($content); - $content= $this->mergeSettingsContent($content); - $matches = $this->getTagsFromContent($content,'[+','+]'); - if(!$matches) return $content; - foreach($matches[1] as $i=>$key) { - - list($key,$modifiers) = $this->splitKeyAndFilter($key); - - if (isset($ph[$key])) $value = $ph[$key]; - elseif($key==='phx') $value = ''; - else continue; - - if($modifiers!==false) - { + function mergePlaceholderContent($content, $ph = false) + { + + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } + if (strpos($content, '[+') === false) { + return $content; + } + + if (!$ph) { + $ph = $this->placeholders; + } + + $content = $this->mergeConditionalTagsContent($content); + $content = $this->mergeDocumentContent($content); + $content = $this->mergeSettingsContent($content); + $matches = $this->getTagsFromContent($content, '[+', '+]'); + if (!$matches) { + return $content; + } + foreach ($matches[1] as $i => $key) { + + list($key, $modifiers) = $this->splitKeyAndFilter($key); + + if (isset($ph[$key])) { + $value = $ph[$key]; + } elseif ($key === 'phx') { + $value = ''; + } else { + continue; + } + + if ($modifiers !== false) { $modifiers = $this->mergePlaceholderContent($modifiers); - $value = $this->applyFilter($value,$modifiers,$key); + $value = $this->applyFilter($value, $modifiers, $key); } $s = &$matches[0][$i]; - if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); - else $this->addLog('mergePlaceholderContent parse error',$_SERVER['REQUEST_URI'].$s,2); + if (strpos($content, $s) !== false) { + $content = str_replace($s, $value, $content); + } else { + $this->addLog('mergePlaceholderContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); + } } return $content; } - function mergeConditionalTagsContent($content, $iftag='<@IF:', $elseiftag='<@ELSEIF:', $elsetag='<@ELSE>', $endiftag='<@ENDIF>') + /** + * @param $content + * @param string $iftag + * @param string $elseiftag + * @param string $elsetag + * @param string $endiftag + * @return mixed|string + */ + function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '<@ELSEIF:', $elsetag = '<@ELSE>', $endiftag = '<@ENDIF>') { $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); - if(strpos($content,$iftag)===false) return $content; - - $sp = '#'.md5('ConditionalTags'.$_SERVER['REQUEST_TIME']).'#'; - $content = str_replace(array(''),array("{$sp}b","{$sp}e"),$content); - + if (strpos($content, $iftag) === false) { + return $content; + } + + $sp = '#' . md5('ConditionalTags' . $_SERVER['REQUEST_TIME']) . '#'; + $content = str_replace(array(''), array("{$sp}b", "{$sp}e"), $content); + $pieces = explode('<@IF:', $content); - foreach($pieces as $i=>$split) { - if($i===0) { + foreach ($pieces as $i => $split) { + if ($i === 0) { $content = $split; continue; } list($cmd, $text) = explode('>', $split, 2); - $cmd = str_replace("'","\'",$cmd); + $cmd = str_replace("'", "\'", $cmd); $content .= "_parseCTagCMD('" . $cmd . "')): ?>"; $content .= $text; - } + } $pieces = explode('<@ELSEIF:', $content); - foreach($pieces as $i=>$split) { - if($i===0) { + foreach ($pieces as $i => $split) { + if ($i === 0) { $content = $split; continue; } list($cmd, $text) = explode('>', $split, 2); - $cmd = str_replace("'","\'",$cmd); + $cmd = str_replace("'", "\'", $cmd); $content .= "_parseCTagCMD('" . $cmd . "')): ?>"; $content .= $text; - } - - $content = str_replace(array('<@ELSE>','<@ENDIF>'), array('',''), $content); + } + + $content = str_replace(array('<@ELSE>', '<@ENDIF>'), array('', ''), $content); ob_start(); - $content = eval('?>'.$content); + $content = eval('?>' . $content); $content = ob_get_clean(); - $content = str_replace(array("{$sp}b","{$sp}e"),array(''),$content); - + $content = str_replace(array("{$sp}b", "{$sp}e"), array(''), $content); + return $content; } - - private function _prepareCTag($content, $iftag='<@IF:', $elseiftag='<@ELSEIF:', $elsetag='<@ELSE>', $endiftag='<@ENDIF>') { - if(strpos($content,'')!==false) $content = str_replace('', $elsetag, $content); // for jp - if(strpos($content,'')!==false) $content = str_replace('',$endiftag,$content); // for jp - if(strpos($content,'<@ENDIF-->')!==false) $content = str_replace('<@ENDIF-->',$endiftag,$content); + + /** + * @param $content + * @param string $iftag + * @param string $elseiftag + * @param string $elsetag + * @param string $endiftag + * @return mixed + */ + private function _prepareCTag($content, $iftag = '<@IF:', $elseiftag = '<@ELSEIF:', $elsetag = '<@ELSE>', $endiftag = '<@ENDIF>') + { + if (strpos($content, '') !== false) { + $content = str_replace('', $elsetag, $content); + } // for jp + if (strpos($content, '') !== false) { + $content = str_replace('', $endiftag, $content); + } // for jp + if (strpos($content, '<@ENDIF-->') !== false) { + $content = str_replace('<@ENDIF-->', $endiftag, $content); + } $tags = array($iftag, $elseiftag, $elsetag, $endiftag); - $content = str_ireplace($tags,$tags,$content); // Change to capital letters + $content = str_ireplace($tags, $tags, $content); // Change to capital letters return $content; } - - private function _parseCTagCMD($cmd) { + + /** + * @param $cmd + * @return mixed|string + */ + private function _parseCTagCMD($cmd) + { $cmd = trim($cmd); - $reverse = substr($cmd,0,1)==='!' ? true : false; - if($reverse) $cmd = ltrim($cmd,'!'); - if(strpos($cmd,'[!')!==false) $cmd = str_replace(array('[!','!]'),array('[[',']]'),$cmd); - $safe=0; - $bt=''; - while($safe < 20) { + $reverse = substr($cmd, 0, 1) === '!' ? true : false; + if ($reverse) { + $cmd = ltrim($cmd, '!'); + } + if (strpos($cmd, '[!') !== false) { + $cmd = str_replace(array('[!', '!]'), array('[[', ']]'), $cmd); + } + $safe = 0; + $bt = ''; + while ($safe < 20) { $bt = md5($cmd); - if(strpos($cmd,'[*')!==false) $cmd= $this->mergeDocumentContent($cmd); - if(strpos($cmd,'[(')!==false) $cmd= $this->mergeSettingsContent($cmd); - if(strpos($cmd,'{{')!==false) $cmd= $this->mergeChunkContent($cmd); - if(strpos($cmd,'[[')!==false) $cmd= $this->evalSnippets($cmd); - if(strpos($cmd,'[+')!==false - &&strpos($cmd,'[[')===false) $cmd= $this->mergePlaceholderContent($cmd); - if($bt===md5($cmd)) break; + if (strpos($cmd, '[*') !== false) { + $cmd = $this->mergeDocumentContent($cmd); + } + if (strpos($cmd, '[(') !== false) { + $cmd = $this->mergeSettingsContent($cmd); + } + if (strpos($cmd, '{{') !== false) { + $cmd = $this->mergeChunkContent($cmd); + } + if (strpos($cmd, '[[') !== false) { + $cmd = $this->evalSnippets($cmd); + } + if (strpos($cmd, '[+') !== false && strpos($cmd, '[[') === false) { + $cmd = $this->mergePlaceholderContent($cmd); + } + if ($bt === md5($cmd)) { + break; + } $safe++; } $cmd = ltrim($cmd); - $cmd = rtrim($cmd,'-'); - $cmd = str_ireplace(array(' and ',' or '),array('&&','||'),$cmd); - - if(!preg_match('@^[0-9]*$@', $cmd) && preg_match('@^[0-9<= \-\+\*/\(\)%!&|]*$@', $cmd)) + $cmd = rtrim($cmd, '-'); + $cmd = str_ireplace(array(' and ', ' or '), array('&&', '||'), $cmd); + + if (!preg_match('@^[0-9]*$@', $cmd) && preg_match('@^[0-9<= \-\+\*/\(\)%!&|]*$@', $cmd)) { $cmd = eval("return {$cmd};"); - else { + } else { $_ = explode(',', '[*,[(,{{,[[,[!,[+'); - foreach($_ as $left) { - if(strpos($cmd,$left)!==false) { + foreach ($_ as $left) { + if (strpos($cmd, $left) !== false) { $cmd = 0; break; } } } - if(!preg_match('@^[0-9]+$@',$cmd)) $cmd = empty(trim($cmd)) ? 0 : 1; - elseif($cmd <= 0) $cmd = 0; + if (!preg_match('@^[0-9]+$@', $cmd)) { + $cmd = empty(trim($cmd)) ? 0 : 1; + } elseif ($cmd <= 0) { + $cmd = 0; + } + + if ($reverse) { + $cmd = !$cmd; + } - if($reverse) $cmd = !$cmd; - return $cmd; } - + /** * Remove Comment-Tags from output like + * @param $content + * @param string $left + * @param string $right + * @return mixed */ - function ignoreCommentedTagsContent($content, $left='') { - if(strpos($content,$left)===false) return $content; + function ignoreCommentedTagsContent($content, $left = '') + { + if (strpos($content, $left) === false) { + return $content; + } - $matches = $this->getTagsFromContent($content,$left,$right); - if(!empty($matches)) { - foreach($matches[0] as $i=>$v) { - $addBreakMatches[$i] = $v."\n"; + $matches = $this->getTagsFromContent($content, $left, $right); + if (!empty($matches)) { + foreach ($matches[0] as $i => $v) { + $addBreakMatches[$i] = $v . "\n"; + } + $content = str_replace($addBreakMatches, '', $content); + if (strpos($content, $left) !== false) { + $content = str_replace($matches[0], '', $content); } - $content = str_replace($addBreakMatches,'',$content); - if(strpos($content,$left)!==false) - $content = str_replace($matches[0],'',$content); } return $content; } - - function escapeLiteralTagsContent($content, $left='<@LITERAL>', $right='<@ENDLITERAL>') { - if(stripos($content,$left)===false) return $content; - $matches = $this->getTagsFromContent($content,$left,$right); - if(empty($matches)) return $content; - list($sTags,$rTags) = $this->getTagsForEscape(); - foreach($matches[1] as $i=>$v) { - $v = str_ireplace($sTags,$rTags,$v); + /** + * @param $content + * @param string $left + * @param string $right + * @return mixed + */ + function escapeLiteralTagsContent($content, $left = '<@LITERAL>', $right = '<@ENDLITERAL>') + { + if (stripos($content, $left) === false) { + return $content; + } + $matches = $this->getTagsFromContent($content, $left, $right); + if (empty($matches)) { + return $content; + } + + list($sTags, $rTags) = $this->getTagsForEscape(); + foreach ($matches[1] as $i => $v) { + $v = str_ireplace($sTags, $rTags, $v); $s = &$matches[0][$i]; - if(strpos($content,$s)!==false) $content= str_replace($s, $v, $content); - else $this->addLog('ignoreCommentedTagsContent parse error',$_SERVER['REQUEST_URI'].$s,2); + if (strpos($content, $s) !== false) { + $content = str_replace($s, $v, $content); + } else { + $this->addLog('ignoreCommentedTagsContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); + } } return $content; } - + /** * Detect PHP error according to MODX error level * @@ -1335,14 +1735,16 @@ function escapeLiteralTagsContent($content, $left='<@LITERAL>', $right='<@ENDLIT * @return boolean Error detected */ - function detectError($error) { - $detected = FALSE; - if ($this->config['error_reporting'] == 99 && $error) - $detected = TRUE; - elseif ($this->config['error_reporting'] == 2 && ($error & ~E_NOTICE)) - $detected = TRUE; - elseif ($this->config['error_reporting'] == 1 && ($error & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)) - $detected = TRUE; + function detectError($error) + { + $detected = false; + if ($this->config['error_reporting'] == 99 && $error) { + $detected = true; + } elseif ($this->config['error_reporting'] == 2 && ($error & ~E_NOTICE)) { + $detected = true; + } elseif ($this->config['error_reporting'] == 1 && ($error & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)) { + $detected = true; + } return $detected; } @@ -1352,9 +1754,10 @@ function detectError($error) { * @param string $pluginCode Code to run * @param array $params */ - function evalPlugin($pluginCode, $params) { - $modx = & $this; - $modx->event->params = & $params; // store params inside event object + function evalPlugin($pluginCode, $params) + { + $modx = &$this; + $modx->event->params = &$params; // store params inside event object if (is_array($params)) { extract($params, EXTR_SKIP); } @@ -1373,7 +1776,7 @@ function evalPlugin($pluginCode, $params) { $msg = ob_get_contents(); ob_end_clean(); /*if(is_file($lock_file_path)) unlink($lock_file_path);*/ - + if ((0 < $this->config['error_reporting']) && $msg && isset($php_errormsg)) { $error_info = error_get_last(); if ($this->detectError($error_info['type'])) { @@ -1392,12 +1795,14 @@ function evalPlugin($pluginCode, $params) { /** * Run a snippet * - * @param string $snippet Code to run + * @param $phpcode * @param array $params * @return string + * @internal param string $snippet Code to run */ - function evalSnippet($phpcode, $params) { - $modx = & $this; + function evalSnippet($phpcode, $params) + { + $modx = &$this; /* if(isset($params) && is_array($params)) { foreach($params as $k=>$v) { @@ -1406,13 +1811,16 @@ function evalSnippet($phpcode, $params) { elseif($v==='true') $params[$k] = true; } }*/ - $modx->event->params = & $params; // store params inside event object + $modx->event->params = &$params; // store params inside event object if (is_array($params)) { extract($params, EXTR_SKIP); } ob_start(); - if(strpos($phpcode,';')!==false) $return = eval($phpcode); - else $return = call_user_func_array($phpcode,array($params)); + if (strpos($phpcode, ';') !== false) { + $return = eval($phpcode); + } else { + $return = call_user_func_array($phpcode, array($params)); + } $echo = ob_get_contents(); ob_end_clean(); if ((0 < $this->config['error_reporting']) && isset($php_errormsg)) { @@ -1436,383 +1844,470 @@ function evalSnippet($phpcode, $params) { /** * Run snippets as per the tags in $documentSource and replace the tags with the returned values. * - * @param string $documentSource + * @param $content * @return string + * @internal param string $documentSource */ function evalSnippets($content) { - if(strpos($content,'[[')===false) return $content; - - $matches = $this->getTagsFromContent($content,'[[',']]'); - - if(!$matches) return $content; - + if (strpos($content, '[[') === false) { + return $content; + } + + $matches = $this->getTagsFromContent($content, '[[', ']]'); + + if (!$matches) { + return $content; + } + $this->snipLapCount++; - if ($this->dumpSnippets) + if ($this->dumpSnippets) { $this->snippetsCode .= sprintf('
            PARSE PASS %s

            The following snippets (if any) were parsed during this pass.

            ', $this->snipLapCount); - - foreach($matches[1] as $i=>$call) { + } + + foreach ($matches[1] as $i => $call) { $s = &$matches[0][$i]; - if(substr($call,0,2)==='$_') { - if(strpos($content,'_PHX_INTERNAL_')===false) $value = $this->_getSGVar($call); - else $value = $s; - if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); - else $this->addLog('evalSnippetsSGVar parse error',$_SERVER['REQUEST_URI'].$s,2); + if (substr($call, 0, 2) === '$_') { + if (strpos($content, '_PHX_INTERNAL_') === false) { + $value = $this->_getSGVar($call); + } else { + $value = $s; + } + if (strpos($content, $s) !== false) { + $content = str_replace($s, $value, $content); + } else { + $this->addLog('evalSnippetsSGVar parse error', $_SERVER['REQUEST_URI'] . $s, 2); + } continue; } $value = $this->_get_snip_result($call); - if(is_null($value)) continue; - - if(strpos($content,$s)!==false) $content= str_replace($s, $value, $content); - else $this->addLog('evalSnippets parse error',$_SERVER['REQUEST_URI'].$s,2); - } - - if ($this->dumpSnippets) $this->snippetsCode .= '

            '; - + if (is_null($value)) { + continue; + } + + if (strpos($content, $s) !== false) { + $content = str_replace($s, $value, $content); + } else { + $this->addLog('evalSnippets parse error', $_SERVER['REQUEST_URI'] . $s, 2); + } + } + + if ($this->dumpSnippets) { + $this->snippetsCode .= '
            '; + } + return $content; } - - function _getSGVar($value) { // Get super globals + + /** + * @param $value + * @return mixed|string + */ + function _getSGVar($value) + { // Get super globals $key = $value; $_ = $this->config['enable_filter']; $this->config['enable_filter'] = 1; - list($key,$modifiers) = $this->splitKeyAndFilter($key); + list($key, $modifiers) = $this->splitKeyAndFilter($key); $this->config['enable_filter'] = $_; - $key = str_replace(array('(',')'),array("['","']"),$key); - $key = rtrim($key,';'); - if(strpos($key,'$_SESSION')!==false) - { + $key = str_replace(array('(', ')'), array("['", "']"), $key); + $key = rtrim($key, ';'); + if (strpos($key, '$_SESSION') !== false) { $_ = $_SESSION; - $key = str_replace('$_SESSION','$_',$key); - if(isset($_['mgrFormValues'])) unset($_['mgrFormValues']); - if(isset($_['token'])) unset($_['token']); + $key = str_replace('$_SESSION', '$_', $key); + if (isset($_['mgrFormValues'])) { + unset($_['mgrFormValues']); + } + if (isset($_['token'])) { + unset($_['token']); + } } - if(strpos($key,'[')!==false) + if (strpos($key, '[') !== false) { $value = $key ? eval("return {$key};") : ''; - elseif(0applyFilter($value,$modifiers,$key); + } else { + $value = ''; + } + if ($modifiers !== false) { + $value = $this->applyFilter($value, $modifiers, $key); + } return $value; } - + + /** + * @param $piece + * @return null|string + */ private function _get_snip_result($piece) { - if(ltrim($piece)!==$piece) return ''; - - if($this->dumpSnippets) $eventtime = $this->getMicroTime(); + if (ltrim($piece) !== $piece) { + return ''; + } + + if ($this->dumpSnippets) { + $eventtime = $this->getMicroTime(); + } $snip_call = $this->_split_snip_call($piece); $key = $snip_call['name']; - - list($key,$modifiers) = $this->splitKeyAndFilter($key); + + list($key, $modifiers) = $this->splitKeyAndFilter($key); $snip_call['name'] = $key; $snippetObject = $this->_getSnippetObject($key); - if(is_null($snippetObject['content'])) return null; - + if (is_null($snippetObject['content'])) { + return null; + } + $this->currentSnippet = $snippetObject['name']; - + // current params $params = $this->getParamsFromString($snip_call['params']); - - if(!isset($snippetObject['properties'])){ + + if (!isset($snippetObject['properties'])) { $snippetObject['properties'] = ''; } $default_params = $this->parseProperties($snippetObject['properties'], $this->currentSnippet, 'snippet'); - $params = array_merge($default_params,$params); - + $params = array_merge($default_params, $params); + $value = $this->evalSnippet($snippetObject['content'], $params); $this->currentSnippet = ''; - if($modifiers!==false) $value = $this->applyFilter($value,$modifiers,$key); - - if($this->dumpSnippets) - { + if ($modifiers !== false) { + $value = $this->applyFilter($value, $modifiers, $key); + } + + if ($this->dumpSnippets) { $eventtime = $this->getMicroTime() - $eventtime; - $eventtime = sprintf('%2.2f ms', $eventtime*1000); - $code = str_replace("\t",' ',$this->htmlspecialchars($value)); - $piece = str_replace("\t",' ',$this->htmlspecialchars($piece)); - $print_r_params = str_replace("\t",' ',$this->htmlspecialchars('$modx->event->params = '.print_r($params,true))); + $eventtime = sprintf('%2.2f ms', $eventtime * 1000); + $code = str_replace("\t", ' ', $this->htmlspecialchars($value)); + $piece = str_replace("\t", ' ', $this->htmlspecialchars($piece)); + $print_r_params = str_replace("\t", ' ', $this->htmlspecialchars('$modx->event->params = ' . print_r($params, true))); $this->snippetsCode .= sprintf('
            %s(%s)
            [[%s]]
            %s
            %s
            ', $snippetObject['name'], $eventtime, $piece, $print_r_params, $code); - $this->snippetsTime[] = array('sname'=>$key, 'time'=>$eventtime); + $this->snippetsTime[] = array('sname' => $key, 'time' => $eventtime); } return $value; } - - function getParamsFromString($string='') + + /** + * @param string $string + * @return array + */ + function getParamsFromString($string = '') { - if(empty($string)) return array(); - - if(strpos($string,'&_PHX_INTERNAL_')!==false) - $string = str_replace(array('&_PHX_INTERNAL_091_&','&_PHX_INTERNAL_093_&'), array('[',']'), $string); - + if (empty($string)) { + return array(); + } + + if (strpos($string, '&_PHX_INTERNAL_') !== false) { + $string = str_replace(array('&_PHX_INTERNAL_091_&', '&_PHX_INTERNAL_093_&'), array('[', ']'), $string); + } + $_ = $this->documentOutput; $this->documentOutput = $string; $this->invokeEvent('OnBeforeParseParams'); $string = $this->documentOutput; $this->documentOutput = $_; - + $_tmp = $string; $_tmp = ltrim($_tmp, '?&'); $temp_params = array(); $key = ''; $value = null; - while($_tmp!=='') { + while ($_tmp !== '') { $bt = $_tmp; - $char = substr($_tmp,0,1); - $_tmp = substr($_tmp,1); - - if($char==='=') - { + $char = substr($_tmp, 0, 1); + $_tmp = substr($_tmp, 1); + + if ($char === '=') { $_tmp = trim($_tmp); - $delim = substr($_tmp,0,1); - if(in_array($delim, array('"', "'", '`'))) - { + $delim = substr($_tmp, 0, 1); + if (in_array($delim, array('"', "'", '`'))) { list($null, $value, $_tmp) = explode($delim, $_tmp, 3); - if(substr(trim($_tmp), 0, 2)==='//') $_tmp = strstr(trim($_tmp), "\n"); - $i=0; - while($delim==='`' && substr(trim($_tmp),0,1)!=='&' && 1mergeDocumentContent($value); $value = $this->mergeSettingsContent($value); $value = $this->mergeChunkContent($value); $value = $this->evalSnippets($value); - if(substr($value,0,6)!=='@CODE:') + if (substr($value, 0, 6) !== '@CODE:') { $value = $this->mergePlaceholderContent($value); - - $temp_params[][$key]=$value; - - $key = ''; + } + + $temp_params[][$key] = $value; + + $key = ''; $value = null; $_tmp = ltrim($_tmp, " ,\t"); - if(substr($_tmp, 0, 2)==='//') $_tmp = strstr($_tmp, "\n"); + if (substr($_tmp, 0, 2) === '//') { + $_tmp = strstr($_tmp, "\n"); + } } - - if($_tmp===$bt) - { + + if ($_tmp === $bt) { $key = trim($key); - if($key!=='') $temp_params[][$key] = ''; + if ($key !== '') { + $temp_params[][$key] = ''; + } break; } } - - foreach($temp_params as $p) - { + + foreach ($temp_params as $p) { $k = key($p); - if(substr($k,-2)==='[]') - { - $k = substr($k,0,-2); + if (substr($k, -2) === '[]') { + $k = substr($k, 0, -2); $params[$k][] = current($p); - } - elseif(strpos($k,'[')!==false && substr($k,-1)===']') - { + } elseif (strpos($k, '[') !== false && substr($k, -1) === ']') { list($k, $subk) = explode('[', $k, 2); - $subk = substr($subk,0,-1); + $subk = substr($subk, 0, -1); $params[$k][$subk] = current($p); - } - else + } else { $params[$k] = current($p); + } } return $params; } - - function _getSplitPosition($str) { + + /** + * @param $str + * @return bool|int + */ + function _getSplitPosition($str) + { $closeOpt = false; $maybePos = false; $inFilter = false; $total = strlen($str); - $i=0; - for($i=0;$i<$total;$i++) { - $c = substr($str,$i,1); - $cc = substr($str,$i,2); - if(!$inFilter) { - if($c===':') $inFilter=true; - elseif($c==='?') $pos = $i; - elseif($c===' ') $maybePos = $i; - elseif($c==='&' && $maybePos) $pos = $maybePos; - elseif($c==="\n") $pos = $i; - else $pos = false; + $i = 0; + for ($i = 0; $i < $total; $i++) { + $c = substr($str, $i, 1); + $cc = substr($str, $i, 2); + if (!$inFilter) { + if ($c === ':') { + $inFilter = true; + } elseif ($c === '?') { + $pos = $i; + } elseif ($c === ' ') { + $maybePos = $i; + } elseif ($c === '&' && $maybePos) { + $pos = $maybePos; + } elseif ($c === "\n") { + $pos = $i; + } else { + $pos = false; + } + } else { + if ($cc == $closeOpt) { + $closeOpt = false; + } elseif ($c == $closeOpt) { + $closeOpt = false; + } elseif ($closeOpt) { + continue; + } elseif ($cc === "('") { + $closeOpt = "')"; + } elseif ($cc === '("') { + $closeOpt = '")'; + } elseif ($cc === '(`') { + $closeOpt = '`)'; + } elseif ($c === '(') { + $closeOpt = ')'; + } elseif ($c === '?') { + $pos = $i; + } elseif ($c === ' ' && strpos($str, '?') === false) { + $pos = $i; + } else { + $pos = false; + } + } + if ($pos) { + break; } - else { - if ($cc==$closeOpt) $closeOpt = false; - elseif($c==$closeOpt) $closeOpt = false; - elseif($closeOpt) continue; - elseif($cc==="('") $closeOpt = "')"; - elseif($cc==='("') $closeOpt = '")'; - elseif($cc==='(`') $closeOpt = '`)'; - elseif($c==='(') $closeOpt = ')'; - elseif($c==='?') $pos=$i; - elseif($c===' ' && strpos($str,'?')===false) - $pos = $i; - else $pos = false; - } - if($pos) break; } return $pos; } - + + /** + * @param $call + * @return mixed + */ private function _split_snip_call($call) { $spacer = md5('dummy'); - if(strpos($call,']]>')!==false) - $call = str_replace(']]>', "]{$spacer}]>",$call); - - $splitPosition = $this->_getSplitPosition($call); - - if($splitPosition !== false) - { - $name = substr($call, 0, $splitPosition); - $params = substr($call, $splitPosition+1); - } - else - { - $name = $call; + if (strpos($call, ']]>') !== false) { + $call = str_replace(']]>', "]{$spacer}]>", $call); + } + + $splitPosition = $this->_getSplitPosition($call); + + if ($splitPosition !== false) { + $name = substr($call, 0, $splitPosition); + $params = substr($call, $splitPosition + 1); + } else { + $name = $call; $params = ''; } - - $snip['name'] = trim($name); - if(strpos($params,$spacer)!==false) - $params = str_replace("]{$spacer}]>",']]>',$params); - $snip['params'] = $params = ltrim($params,"?& \t\n"); - + + $snip['name'] = trim($name); + if (strpos($params, $spacer) !== false) { + $params = str_replace("]{$spacer}]>", ']]>', $params); + } + $snip['params'] = $params = ltrim($params, "?& \t\n"); + return $snip; } - + + /** + * @param $snip_name + * @return mixed + */ private function _getSnippetObject($snip_name) { - if(isset($this->snippetCache[$snip_name])) - { - $snippetObject['name'] = $snip_name; + if (isset($this->snippetCache[$snip_name])) { + $snippetObject['name'] = $snip_name; $snippetObject['content'] = $this->snippetCache[$snip_name]; - if(isset($this->snippetCache["{$snip_name}Props"])) - { - if(!isset($this->snippetCache["{$snip_name}Props"])) + if (isset($this->snippetCache["{$snip_name}Props"])) { + if (!isset($this->snippetCache["{$snip_name}Props"])) { $this->snippetCache["{$snip_name}Props"] = ''; + } $snippetObject['properties'] = $this->snippetCache["{$snip_name}Props"]; } - } - elseif(substr($snip_name,0,1)==='@' && isset($this->pluginEvent[trim($snip_name,'@')])) - { - $snippetObject['name'] = trim($snip_name,'@'); - $snippetObject['content'] = sprintf('$rs=$this->invokeEvent("%s",$params);echo trim(join("",$rs));', trim($snip_name,'@')); + } elseif (substr($snip_name, 0, 1) === '@' && isset($this->pluginEvent[trim($snip_name, '@')])) { + $snippetObject['name'] = trim($snip_name, '@'); + $snippetObject['content'] = sprintf('$rs=$this->invokeEvent("%s",$params);echo trim(join("",$rs));', trim($snip_name, '@')); $snippetObject['properties'] = ''; - } - else - { - $where = sprintf("name='%s' AND disabled=0",$this->db->escape($snip_name)); - $rs= $this->db->select('name,snippet,properties','[+prefix+]site_snippets',$where); + } else { + $where = sprintf("name='%s' AND disabled=0", $this->db->escape($snip_name)); + $rs = $this->db->select('name,snippet,properties', '[+prefix+]site_snippets', $where); $count = $this->db->getRecordCount($rs); - if(1<$count) exit('Error $modx->_getSnippetObject()'.$snip_name); - if($count) - { + if (1 < $count) { + exit('Error $modx->_getSnippetObject()' . $snip_name); + } + if ($count) { $row = $this->db->getRow($rs); $snip_content = $row['snippet']; - $snip_prop = $row['properties']; - } - else - { + $snip_prop = $row['properties']; + } else { $snip_content = null; - $snip_prop = ''; + $snip_prop = ''; } - $snippetObject['name'] = $snip_name; - $snippetObject['content'] = $snip_content; + $snippetObject['name'] = $snip_name; + $snippetObject['content'] = $snip_content; $snippetObject['properties'] = $snip_prop; - $this->snippetCache[$snip_name] = $snip_content; + $this->snippetCache[$snip_name] = $snip_content; $this->snippetCache["{$snip_name}Props"] = $snip_prop; } return $snippetObject; } - - function toAlias($text) { - $suff= $this->config['friendly_url_suffix']; - return str_replace(array('.xml'.$suff,'.rss'.$suff,'.js'.$suff,'.css'.$suff,'.txt'.$suff,'.json'.$suff,'.pdf'.$suff),array('.xml','.rss','.js','.css','.txt','.json','.pdf'),$text); + + /** + * @param $text + * @return mixed + */ + function toAlias($text) + { + $suff = $this->config['friendly_url_suffix']; + return str_replace(array('.xml' . $suff, '.rss' . $suff, '.js' . $suff, '.css' . $suff, '.txt' . $suff, '.json' . $suff, '.pdf' . $suff), array('.xml', '.rss', '.js', '.css', '.txt', '.json', '.pdf'), $text); } - + /** * makeFriendlyURL - * + * * @desc Create an URL. - * + * * @param $pre {string} - Friendly URL Prefix. @required * @param $suff {string} - Friendly URL Suffix. @required * @param $alias {string} - Full document path. @required - * @param $isfolder {0; 1} - Is it a folder? Default: 0. - * @param $id {integer} - Document id. Default: 0. - * - * @return {string} - Result URL. + * @param int $isfolder {0; 1} + * - Is it a folder? Default: 0. + * @param int $id {integer} + * - Document id. Default: 0. + * @return mixed|string {string} - Result URL. + * - Result URL. */ - function makeFriendlyURL($pre, $suff, $alias, $isfolder = 0, $id = 0){ - if ($id == $this->config['site_start'] && $this->config['seostrict'] === '1'){ + function makeFriendlyURL($pre, $suff, $alias, $isfolder = 0, $id = 0) + { + if ($id == $this->config['site_start'] && $this->config['seostrict'] === '1') { $url = $this->config['base_url']; - }else{ - $Alias = explode('/',$alias); + } else { + $Alias = explode('/', $alias); $alias = array_pop($Alias); $dir = implode('/', $Alias); unset($Alias); - - if($this->config['make_folders'] === '1' && $isfolder == 1){$suff = '/';} - - $url = ($dir != '' ? $dir.'/' : '').$pre.$alias.$suff; + + if ($this->config['make_folders'] === '1' && $isfolder == 1) { + $suff = '/'; + } + + $url = ($dir != '' ? $dir . '/' : '') . $pre . $alias . $suff; } - + $evtOut = $this->invokeEvent('OnMakeDocUrl', array( 'id' => $id, 'url' => $url )); - - if (is_array($evtOut) && count($evtOut) > 0){ + + if (is_array($evtOut) && count($evtOut) > 0) { $url = array_pop($evtOut); } - + return $url; } - - /** + + /** * Convert URL tags [~...~] to URLs * * @param string $documentSource * @return string */ - function rewriteUrls($documentSource) { + function rewriteUrls($documentSource) + { // rewrite the urls if ($this->config['friendly_urls'] == 1) { - $aliases= array (); - if (is_array($this->documentListing)){ - foreach($this->documentListing as $path=>$docid) { // This is big Loop on large site! - $aliases[$docid] = $path; + $aliases = array(); + if (is_array($this->documentListing)) { + foreach ($this->documentListing as $path => $docid) { // This is big Loop on large site! + $aliases[$docid] = $path; $isfolder[$docid] = $this->aliasListing[$docid]['isfolder']; } } @@ -1821,14 +2316,14 @@ function rewriteUrls($documentSource) { preg_match_all('!\[\~([0-9]+)\~\]!ise', $documentSource, $match); $ids = implode(',', array_unique($match['1'])); if ($ids) { - $res = $this->db->select("id,alias,isfolder,parent,alias_visible", $this->getFullTableName('site_content'), "id IN (".$ids.") AND isfolder = '0'"); - while( $row = $this->db->getRow( $res ) ) { - if ($this->config['use_alias_path'] == '1' && $row['parent']!=0) { + $res = $this->db->select("id,alias,isfolder,parent,alias_visible", $this->getFullTableName('site_content'), "id IN (" . $ids . ") AND isfolder = '0'"); + while ($row = $this->db->getRow($res)) { + if ($this->config['use_alias_path'] == '1' && $row['parent'] != 0) { $parent = $row['parent']; - $path = $aliases[$parent]; + $path = $aliases[$parent]; - while ( isset( $this->aliasListing[$parent] ) && $this->aliasListing[$parent]['alias_visible'] == 0 ) { - $path = $this->aliasListing[$parent]['path']; + while (isset($this->aliasListing[$parent]) && $this->aliasListing[$parent]['alias_visible'] == 0) { + $path = $this->aliasListing[$parent]['path']; $parent = $this->aliasListing[$parent]['parent']; } @@ -1840,90 +2335,100 @@ function rewriteUrls($documentSource) { } } } - $in= '!\[\~([0-9]+)\~\]!is'; - $isfriendly= ($this->config['friendly_alias_urls'] == 1 ? 1 : 0); - $pref= $this->config['friendly_url_prefix']; - $suff= $this->config['friendly_url_suffix']; - $documentSource = preg_replace_callback( - $in, - function($m) use($aliases, $isfolder, $isfriendly, $pref, $suff) { - global $modx; - $thealias = $aliases[$m[1]]; - $thefolder = $isfolder[$m[1]]; - if( $isfriendly && isset($thealias) ){ - //found friendly url - $out = ($modx->config['seostrict'] == '1' ? $modx->toAlias($modx->makeFriendlyURL($pref, $suff, $thealias, $thefolder, $m[1])) : $modx->makeFriendlyURL($pref, $suff, $thealias, $thefolder, $m[1])); - } - else{ - //not found friendly url - $out = $modx->makeFriendlyURL($pref, $suff, $m[1]); - } - return $out; - }, - $documentSource - ); - + $in = '!\[\~([0-9]+)\~\]!is'; + $isfriendly = ($this->config['friendly_alias_urls'] == 1 ? 1 : 0); + $pref = $this->config['friendly_url_prefix']; + $suff = $this->config['friendly_url_suffix']; + $documentSource = preg_replace_callback($in, function ($m) use ($aliases, $isfolder, $isfriendly, $pref, $suff) { + global $modx; + $thealias = $aliases[$m[1]]; + $thefolder = $isfolder[$m[1]]; + if ($isfriendly && isset($thealias)) { + //found friendly url + $out = ($modx->config['seostrict'] == '1' ? $modx->toAlias($modx->makeFriendlyURL($pref, $suff, $thealias, $thefolder, $m[1])) : $modx->makeFriendlyURL($pref, $suff, $thealias, $thefolder, $m[1])); + } else { + //not found friendly url + $out = $modx->makeFriendlyURL($pref, $suff, $m[1]); + } + return $out; + }, $documentSource); + } else { - $in= '!\[\~([0-9]+)\~\]!is'; - $out= "index.php?id=" . '\1'; - $documentSource= preg_replace($in, $out, $documentSource); + $in = '!\[\~([0-9]+)\~\]!is'; + $out = "index.php?id=" . '\1'; + $documentSource = preg_replace($in, $out, $documentSource); } - + return $documentSource; } - - function sendStrictURI(){ + + function sendStrictURI() + { $q = $this->q; // FIX URLs - if (empty($this->documentIdentifier) || $this->config['seostrict']=='0' || $this->config['friendly_urls']=='0') - return; - if ($this->config['site_status'] == 0) return; - + if (empty($this->documentIdentifier) || $this->config['seostrict'] == '0' || $this->config['friendly_urls'] == '0') { + return; + } + if ($this->config['site_status'] == 0) { + return; + } + $scheme = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; $len_base_url = strlen($this->config['base_url']); - if(strpos($_SERVER['REQUEST_URI'],'?')) - list($url_path,$url_query_string) = explode('?', $_SERVER['REQUEST_URI'],2); - else $url_path = $_SERVER['REQUEST_URI']; + if (strpos($_SERVER['REQUEST_URI'], '?')) { + list($url_path, $url_query_string) = explode('?', $_SERVER['REQUEST_URI'], 2); + } else { + $url_path = $_SERVER['REQUEST_URI']; + } $url_path = $q;//LANG - - - if(substr($url_path,0,$len_base_url)===$this->config['base_url']) - $url_path = substr($url_path,$len_base_url); - - $strictURL = $this->toAlias($this->makeUrl($this->documentIdentifier)); - - if(substr($strictURL,0,$len_base_url)===$this->config['base_url']) - $strictURL = substr($strictURL,$len_base_url); + + + if (substr($url_path, 0, $len_base_url) === $this->config['base_url']) { + $url_path = substr($url_path, $len_base_url); + } + + $strictURL = $this->toAlias($this->makeUrl($this->documentIdentifier)); + + if (substr($strictURL, 0, $len_base_url) === $this->config['base_url']) { + $strictURL = substr($strictURL, $len_base_url); + } $http_host = $_SERVER['HTTP_HOST']; - $requestedURL = "{$scheme}://{$http_host}" . '/'.$q; //LANG - + $requestedURL = "{$scheme}://{$http_host}" . '/' . $q; //LANG + $site_url = $this->config['site_url']; - - if ($this->documentIdentifier == $this->config['site_start']){ - if ($requestedURL != $this->config['site_url']){ + + if ($this->documentIdentifier == $this->config['site_start']) { + if ($requestedURL != $this->config['site_url']) { // Force redirect of site start // $this->sendErrorPage(); $qstring = isset($url_query_string) ? preg_replace("#(^|&)(q|id)=[^&]+#", '', $url_query_string) : ''; // Strip conflicting id/q from query string - if ($qstring) $url = "{$site_url}?{$qstring}"; - else $url = $site_url; - if ($this->config['base_url'] != $_SERVER['REQUEST_URI']){ - if (empty($_POST)){ - if (($this->config['base_url'].'?'.$qstring) != $_SERVER['REQUEST_URI']) { - $this->sendRedirect($url,0,'REDIRECT_HEADER', 'HTTP/1.0 301 Moved Permanently'); + if ($qstring) { + $url = "{$site_url}?{$qstring}"; + } else { + $url = $site_url; + } + if ($this->config['base_url'] != $_SERVER['REQUEST_URI']) { + if (empty($_POST)) { + if (($this->config['base_url'] . '?' . $qstring) != $_SERVER['REQUEST_URI']) { + $this->sendRedirect($url, 0, 'REDIRECT_HEADER', 'HTTP/1.0 301 Moved Permanently'); exit(0); } } - } - } - }elseif ($url_path != $strictURL && $this->documentIdentifier != $this->config['error_page']){ - // Force page redirect + } + } + } elseif ($url_path != $strictURL && $this->documentIdentifier != $this->config['error_page']) { + // Force page redirect //$strictURL = ltrim($strictURL,'/'); - - if(!empty($url_query_string)) - $qstring = preg_replace("#(^|&)(q|id)=[^&]+#", '', $url_query_string); // Strip conflicting id/q from query string - if (!empty($qstring)) $url = "{$site_url}{$strictURL}?{$qstring}"; - else $url = "{$site_url}{$strictURL}"; - $this->sendRedirect($url,0,'REDIRECT_HEADER', 'HTTP/1.0 301 Moved Permanently'); + + if (!empty($url_query_string)) { + $qstring = preg_replace("#(^|&)(q|id)=[^&]+#", '', $url_query_string); + } // Strip conflicting id/q from query string + if (!empty($qstring)) { + $url = "{$site_url}{$strictURL}?{$qstring}"; + } else { + $url = "{$site_url}{$strictURL}"; + } + $this->sendRedirect($url, 0, 'REDIRECT_HEADER', 'HTTP/1.0 301 Moved Permanently'); exit(0); } return; @@ -1934,42 +2439,42 @@ function sendStrictURI(){ * * @param string $method * @param mixed $identifier + * @param bool $isPrepareResponse * @return array */ - function getDocumentObject($method, $identifier, $isPrepareResponse=false) { - - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - - $tblsc= $this->getFullTableName("site_content"); - $tbldg= $this->getFullTableName("document_groups"); + function getDocumentObject($method, $identifier, $isPrepareResponse = false) + { + + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + + $tblsc = $this->getFullTableName("site_content"); + $tbldg = $this->getFullTableName("document_groups"); // allow alias to be full path - if($method == 'alias') { + if ($method == 'alias') { $identifier = $this->cleanDocumentIdentifier($identifier); $method = $this->documentMethod; } - if($method == 'alias' && $this->config['use_alias_path'] && array_key_exists($identifier, $this->documentListing)) { + if ($method == 'alias' && $this->config['use_alias_path'] && array_key_exists($identifier, $this->documentListing)) { $method = 'id'; $identifier = $this->documentListing[$identifier]; } $out = $this->invokeEvent('OnBeforeLoadDocumentObject', compact('method', 'identifier')); - if(is_array($out) && is_array($out[0])){ + if (is_array($out) && is_array($out[0])) { $documentObject = $out[0]; - }else{ + } else { // get document groups for current user - if ($docgrp= $this->getUserDocGroups()) $docgrp= implode(",", $docgrp); + if ($docgrp = $this->getUserDocGroups()) { + $docgrp = implode(",", $docgrp); + } // get document - $access= ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . - (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); - $rs= $this->db->select( - 'sc.*', - "{$tblsc} sc - LEFT JOIN {$tbldg} dg ON dg.document = sc.id", - "sc.{$method} = '{$identifier}' AND ({$access})", - "", - 1); + $access = ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); + $rs = $this->db->select('sc.*', "{$tblsc} sc + LEFT JOIN {$tbldg} dg ON dg.document = sc.id", "sc.{$method} = '{$identifier}' AND ({$access})", "", 1); if ($this->db->getRecordCount($rs) < 1) { $seclimit = 0; if ($this->config['unauthorized_page']) { @@ -1980,7 +2485,7 @@ function getDocumentObject($method, $identifier, $isPrepareResponse=false) { $secrs = $this->db->select('count(id)', $tbldg, "document = '{$identifier}'", '', 1); } // check if file is not public - $seclimit= $this->db->getValue($secrs); + $seclimit = $this->db->getValue($secrs); } if ($seclimit > 0) { // match found but not publicly accessible, send the visitor to the unauthorized_page @@ -1992,25 +2497,23 @@ function getDocumentObject($method, $identifier, $isPrepareResponse=false) { } } # this is now the document :) # - $documentObject= $this->db->getRow($rs); + $documentObject = $this->db->getRow($rs); - if($isPrepareResponse==='prepareResponse') $this->documentObject = & $documentObject; + if ($isPrepareResponse === 'prepareResponse') { + $this->documentObject = &$documentObject; + } $out = $this->invokeEvent('OnLoadDocumentObject', compact('method', 'identifier', 'documentObject')); - if(is_array($out) && is_array($out[0])){ + if (is_array($out) && is_array($out[0])) { $documentObject = $out[0]; } if ($documentObject['template']) { // load TVs and merge with document - Orig by Apodigm - Docvars - $rs = $this->db->select( - "tv.*, IF(tvc.value!='',tvc.value,tv.default_text) as value", - $this->getFullTableName("site_tmplvars") . " tv - INNER JOIN " . $this->getFullTableName("site_tmplvar_templates")." tvtpl ON tvtpl.tmplvarid = tv.id - LEFT JOIN " . $this->getFullTableName("site_tmplvar_contentvalues")." tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$documentObject['id']}'", - "tvtpl.templateid = '{$documentObject['template']}'" - ); + $rs = $this->db->select("tv.*, IF(tvc.value!='',tvc.value,tv.default_text) as value", $this->getFullTableName("site_tmplvars") . " tv + INNER JOIN " . $this->getFullTableName("site_tmplvar_templates") . " tvtpl ON tvtpl.tmplvarid = tv.id + LEFT JOIN " . $this->getFullTableName("site_tmplvar_contentvalues") . " tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$documentObject['id']}'", "tvtpl.templateid = '{$documentObject['template']}'"); $tmplvars = array(); - while ($row= $this->db->getRow($rs)) { - $tmplvars[$row['name']]= array ( + while ($row = $this->db->getRow($rs)) { + $tmplvars[$row['name']] = array( $row['name'], $row['value'], $row['display'], @@ -2018,14 +2521,14 @@ function getDocumentObject($method, $identifier, $isPrepareResponse=false) { $row['type'] ); } - $documentObject= array_merge($documentObject, $tmplvars); + $documentObject = array_merge($documentObject, $tmplvars); } $out = $this->invokeEvent('OnAfterLoadDocumentObject', compact('method', 'identifier', 'documentObject')); - if(is_array($out) && array_key_exists(0,$out) !== FALSE && is_array($out[0])){ + if (is_array($out) && array_key_exists(0, $out) !== false && is_array($out[0])) { $documentObject = $out[0]; } } - + $this->tmpCache[__FUNCTION__][$cacheKey] = $documentObject; return $documentObject; @@ -2041,59 +2544,64 @@ function getDocumentObject($method, $identifier, $isPrepareResponse=false) { * @param string $source * @return string */ - function parseDocumentSource($source) { + function parseDocumentSource($source) + { // set the number of times we are to parse the document source - $this->minParserPasses= empty ($this->minParserPasses) ? 2 : $this->minParserPasses; - $this->maxParserPasses= empty ($this->maxParserPasses) ? 10 : $this->maxParserPasses; - $passes= $this->minParserPasses; - for ($i= 0; $i < $passes; $i++) { + $this->minParserPasses = empty ($this->minParserPasses) ? 2 : $this->minParserPasses; + $this->maxParserPasses = empty ($this->maxParserPasses) ? 10 : $this->maxParserPasses; + $passes = $this->minParserPasses; + for ($i = 0; $i < $passes; $i++) { // get source length if this is the final pass - if ($i == ($passes -1)) - $st= md5($source); + if ($i == ($passes - 1)) { + $st = md5($source); + } if ($this->dumpSnippets == 1) { - $this->snippetsCode .= "
            PARSE PASS " . ($i +1) . "

            The following snippets (if any) were parsed during this pass.

            "; + $this->snippetsCode .= "
            PARSE PASS " . ($i + 1) . "

            The following snippets (if any) were parsed during this pass.

            "; } // invoke OnParseDocument event - $this->documentOutput= $source; // store source code so plugins can + $this->documentOutput = $source; // store source code so plugins can $this->invokeEvent("OnParseDocument"); // work on it via $modx->documentOutput - $source= $this->documentOutput; - + $source = $this->documentOutput; + $source = $this->ignoreCommentedTagsContent($source); $source = $this->mergeConditionalTagsContent($source); - + $source = $this->mergeSettingsContent($source); $source = $this->mergeDocumentContent($source); $source = $this->mergeChunkContent($source); $source = $this->evalSnippets($source); $source = $this->mergePlaceholderContent($source); - + if ($this->dumpSnippets == 1) { $this->snippetsCode .= "

            "; } - if ($i == ($passes -1) && $i < ($this->maxParserPasses - 1)) { + if ($i == ($passes - 1) && $i < ($this->maxParserPasses - 1)) { // check if source content was changed - if ($st != md5($source)) - $passes++; // if content change then increase passes because + if ($st != md5($source)) { + $passes++; + } // if content change then increase passes because } // we have not yet reached maxParserPasses } return $source; } + /** * Starts the parsing operations. - * + * * - connects to the db * - gets the settings (including system_settings) * - gets the document/resource identifier as in the query string * - finally calls prepareResponse() */ - function executeParser() { + function executeParser() + { //error_reporting(0); - set_error_handler(array ( - & $this, - "phpError" - ), E_ALL); + set_error_handler(array( + & $this, + "phpError" + ), E_ALL); $this->db->connect(); @@ -2110,31 +2618,31 @@ function executeParser() { $this->updatePubStatus(); // find out which document we need to display - $this->documentMethod= filter_input(INPUT_GET,'q') ? 'alias' : 'id'; - $this->documentIdentifier= $this->getDocumentIdentifier($this->documentMethod); + $this->documentMethod = filter_input(INPUT_GET, 'q') ? 'alias' : 'id'; + $this->documentIdentifier = $this->getDocumentIdentifier($this->documentMethod); } else { header('HTTP/1.0 503 Service Unavailable'); $this->systemCacheKey = 'unavailable'; if (!$this->config['site_unavailable_page']) { // display offline message - $this->documentContent= $this->config['site_unavailable_message']; + $this->documentContent = $this->config['site_unavailable_message']; $this->outputContent(); exit; // stop processing here, as the site's offline } else { // setup offline page document settings - $this->documentMethod= 'id'; - $this->documentIdentifier= $this->config['site_unavailable_page']; + $this->documentMethod = 'id'; + $this->documentIdentifier = $this->config['site_unavailable_page']; } } if ($this->documentMethod == "alias") { - $this->documentIdentifier= $this->cleanDocumentIdentifier($this->documentIdentifier); + $this->documentIdentifier = $this->cleanDocumentIdentifier($this->documentIdentifier); // Check use_alias_path and check if $this->virtualDir is set to anything, then parse the path if ($this->config['use_alias_path'] == 1) { - $alias= (strlen($this->virtualDir) > 0 ? $this->virtualDir . '/' : '') . $this->documentIdentifier; + $alias = (strlen($this->virtualDir) > 0 ? $this->virtualDir . '/' : '') . $this->documentIdentifier; if (isset($this->documentListing[$alias])) { - $this->documentIdentifier= $this->documentListing[$alias]; + $this->documentIdentifier = $this->documentListing[$alias]; } else { //@TODO: check new $alias; if ($this->config['aliaslistingfolder'] == 1) { @@ -2147,28 +2655,26 @@ function executeParser() { $docAlias = $this->mb_basename($alias, $this->config['friendly_url_suffix']); - $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and parent='{$parentId}' and alias='{$docAlias}'"); - if($this->db->getRecordCount($rs)==0) - { + $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and parent='{$parentId}' and alias='{$docAlias}'"); + if ($this->db->getRecordCount($rs) == 0) { $this->sendErrorPage(); } $docId = $this->db->getValue($rs); - if ( !$docId ) { - if ( !empty( $this->config['friendly_url_suffix'] ) ) { - $pos = strrpos( $alias, $this->config['friendly_url_suffix'] ); + if (!$docId) { + if (!empty($this->config['friendly_url_suffix'])) { + $pos = strrpos($alias, $this->config['friendly_url_suffix']); - if ( $pos !== false ) { - $alias = substr( $alias, 0, $pos ); + if ($pos !== false) { + $alias = substr($alias, 0, $pos); } } - $docId = $this->getIdFromAlias( $alias ); + $docId = $this->getIdFromAlias($alias); } - if ($docId > 0) - { + if ($docId > 0) { $this->documentIdentifier = $docId; - }else{ + } else { /* $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and alias='{$docAlias}'"); if($this->db->getRecordCount($rs)==0) @@ -2180,13 +2686,13 @@ function executeParser() { if ($docId > 0) { $this->documentIdentifier = $docId; - + }else{ - */ + */ $this->sendErrorPage(); //} } - }else{ + } else { $this->sendErrorPage(); } @@ -2197,13 +2703,13 @@ function executeParser() { } else { $alias = $this->db->escape($this->q); $docAlias = basename($alias, $this->config['friendly_url_suffix']); - $rs = $this->db->select('id', $this->getFullTableName('site_content'), "deleted=0 and alias='{$docAlias}'"); - $this->documentIdentifier = (int) $this->db->getValue($rs); + $rs = $this->db->select('id', $this->getFullTableName('site_content'), "deleted=0 and alias='{$docAlias}'"); + $this->documentIdentifier = (int)$this->db->getValue($rs); } } - $this->documentMethod= 'id'; + $this->documentMethod = 'id'; } - + //$this->_fixURI(); // invoke OnWebPageInit event $this->invokeEvent("OnWebPageInit"); @@ -2211,42 +2717,55 @@ function executeParser() { if ($this->config['track_visitors'] == 1) { $this->invokeEvent("OnLogPageHit"); } - if($this->config['seostrict']==='1') $this->sendStrictURI(); + if ($this->config['seostrict'] === '1') { + $this->sendStrictURI(); + } $this->prepareResponse(); } - - function mb_basename($path, $suffix = null) { - $exp = explode('/', $path); - return str_replace($suffix, '', end($exp)); + + /** + * @param $path + * @param null $suffix + * @return mixed + */ + function mb_basename($path, $suffix = null) + { + $exp = explode('/', $path); + return str_replace($suffix, '', end($exp)); } function _IIS_furl_fix() { - if($this->config['friendly_urls'] != 1) return; - - if (strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') === false) return; - - $url= $_SERVER['QUERY_STRING']; - $err= substr($url, 0, 3); - if ($err !== '404' && $err !== '405') return; - - $k= array_keys($_GET); + if ($this->config['friendly_urls'] != 1) { + return; + } + + if (strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') === false) { + return; + } + + $url = $_SERVER['QUERY_STRING']; + $err = substr($url, 0, 3); + if ($err !== '404' && $err !== '405') { + return; + } + + $k = array_keys($_GET); unset ($_GET[$k[0]]); unset ($_REQUEST[$k[0]]); // remove 404,405 entry - $qp= parse_url(str_replace($this->config['site_url'], '', substr($url, 4))); - $_SERVER['QUERY_STRING']= $qp['query']; + $qp = parse_url(str_replace($this->config['site_url'], '', substr($url, 4))); + $_SERVER['QUERY_STRING'] = $qp['query']; if (!empty ($qp['query'])) { parse_str($qp['query'], $qv); - foreach ($qv as $n => $v) - { - $_REQUEST[$n]= $_GET[$n]= $v; + foreach ($qv as $n => $v) { + $_REQUEST[$n] = $_GET[$n] = $v; } } - $_SERVER['PHP_SELF']= $this->config['base_url'] . $qp['path']; + $_SERVER['PHP_SELF'] = $this->config['base_url'] . $qp['path']; $this->q = $qp['path']; return $qp['path']; } - + /** * The next step called at the end of executeParser() * @@ -2256,53 +2775,72 @@ function _IIS_furl_fix() * - gets template and parses it * - ensures that postProcess is called when PHP is finished */ - function prepareResponse() { + function prepareResponse() + { // we now know the method and identifier, let's check the cache - - if($this->config['enable_cache']==2 && $this->isLoggedIn()) $this->config['enable_cache'] = 0; - - if($this->config['enable_cache']) - $this->documentContent= $this->getDocumentObjectFromCache($this->documentIdentifier, true); - else $this->documentContent= ''; - + + if ($this->config['enable_cache'] == 2 && $this->isLoggedIn()) { + $this->config['enable_cache'] = 0; + } + + if ($this->config['enable_cache']) { + $this->documentContent = $this->getDocumentObjectFromCache($this->documentIdentifier, true); + } else { + $this->documentContent = ''; + } + if ($this->documentContent == '') { // get document object from DB - $this->documentObject= $this->getDocumentObject($this->documentMethod, $this->documentIdentifier, 'prepareResponse'); + $this->documentObject = $this->getDocumentObject($this->documentMethod, $this->documentIdentifier, 'prepareResponse'); // write the documentName to the object - $this->documentName= &$this->documentObject['pagetitle']; - + $this->documentName = &$this->documentObject['pagetitle']; + // check if we should not hit this document - if ($this->documentObject['donthit'] == 1) $this->config['track_visitors']= 0; - - if ($this->documentObject['deleted'] == 1) $this->sendErrorPage(); // validation routines - elseif ($this->documentObject['published'] == 0) $this->_sendErrorForUnpubPage(); - elseif ($this->documentObject['type'] == 'reference') $this->_sendRedirectForRefPage($this->documentObject['content']); + if ($this->documentObject['donthit'] == 1) { + $this->config['track_visitors'] = 0; + } + + if ($this->documentObject['deleted'] == 1) { + $this->sendErrorPage(); + } // validation routines + elseif ($this->documentObject['published'] == 0) { + $this->_sendErrorForUnpubPage(); + } elseif ($this->documentObject['type'] == 'reference') { + $this->_sendRedirectForRefPage($this->documentObject['content']); + } // get the template and start parsing! - if (!$this->documentObject['template']) $templateCode = '[*content*]'; // use blank template - else $templateCode = $this->_getTemplateCodeFromDB($this->documentObject['template']); + if (!$this->documentObject['template']) { + $templateCode = '[*content*]'; + } // use blank template + else { + $templateCode = $this->_getTemplateCodeFromDB($this->documentObject['template']); + } + + if (substr($templateCode, 0, 8) === '@INCLUDE') { + $templateCode = $this->atBindInclude($templateCode); + } + - if(substr($templateCode,0,8)==='@INCLUDE') $templateCode = $this->atBindInclude($templateCode); - - $this->documentContent = &$templateCode; // invoke OnLoadWebDocument event $this->invokeEvent('OnLoadWebDocument'); - + // Parse document source $this->documentContent = $this->parseDocumentSource($templateCode); - + $this->documentGenerated = 1; + } else { + $this->documentGenerated = 0; } - else $this->documentGenerated = 0; - if($this->config['error_page']==$this->documentIdentifier && $this->config['error_page']!=$this->config['site_start']) { + if ($this->config['error_page'] == $this->documentIdentifier && $this->config['error_page'] != $this->config['site_start']) { header('HTTP/1.0 404 Not Found'); } - register_shutdown_function(array ( + register_shutdown_function(array( &$this, 'postProcess' )); // tell PHP to call postProcess when it shuts down @@ -2310,45 +2848,54 @@ function prepareResponse() { //$this->postProcess(); } - function _sendErrorForUnpubPage() { + function _sendErrorForUnpubPage() + { // Can't view unpublished pages !$this->checkPreview() if (!$this->hasPermission('view_unpublished')) { $this->sendErrorPage(); } else { // Inculde the necessary files to check document permissions - include_once (MODX_MANAGER_PATH . 'processors/user_documents_permissions.class.php'); - $udperms= new udperms(); - $udperms->user= $this->getLoginUserID(); - $udperms->document= $this->documentIdentifier; - $udperms->role= $_SESSION['mgrRole']; + include_once(MODX_MANAGER_PATH . 'processors/user_documents_permissions.class.php'); + $udperms = new udperms(); + $udperms->user = $this->getLoginUserID(); + $udperms->document = $this->documentIdentifier; + $udperms->role = $_SESSION['mgrRole']; // Doesn't have access to this document if (!$udperms->checkPermissions()) { $this->sendErrorPage(); } } } - - function _sendRedirectForRefPage($url) { + + /** + * @param $url + */ + function _sendRedirectForRefPage($url) + { // check whether it's a reference - if (preg_match('@^[1-9][0-9]*$@',$url)) { - $url= $this->makeUrl($url); // if it's a bare document id - } - elseif (strpos($url, '[~') !== false) { - $url= $this->rewriteUrls($url); // if it's an internal docid tag, process it + if (preg_match('@^[1-9][0-9]*$@', $url)) { + $url = $this->makeUrl($url); // if it's a bare document id + } elseif (strpos($url, '[~') !== false) { + $url = $this->rewriteUrls($url); // if it's an internal docid tag, process it } $this->sendRedirect($url, 0, '', 'HTTP/1.0 301 Moved Permanently'); exit; } - - function _getTemplateCodeFromDB($templateID) { - $rs= $this->db->select('content', '[+prefix+]site_templates', "id = '{$templateID}'"); - if ($this->db->getRecordCount($rs)==1) { - return $this->db->getValue($rs); + + /** + * @param $templateID + * @return mixed + */ + function _getTemplateCodeFromDB($templateID) + { + $rs = $this->db->select('content', '[+prefix+]site_templates', "id = '{$templateID}'"); + if ($this->db->getRecordCount($rs) == 1) { + return $this->db->getValue($rs); } else { $this->messageQuit('Incorrect number of templates returned from database'); } } - + /** * Returns an array of all parent record IDs for the id passed. * @@ -2356,32 +2903,45 @@ function _getTemplateCodeFromDB($templateID) { * @param int $height The maximum number of levels to go up, default 10. * @return array */ - function getParentIds($id, $height= 10) { - $parents= array (); - while ( $id && $height-- ) { + function getParentIds($id, $height = 10) + { + $parents = array(); + while ($id && $height--) { $thisid = $id; if ($this->config['aliaslistingfolder'] == 1) { $id = isset($this->aliasListing[$id]['parent']) ? $this->aliasListing[$id]['parent'] : $this->db->getValue("SELECT `parent` FROM " . $this->getFullTableName("site_content") . " WHERE `id` = '{$id}' LIMIT 0,1"); - if (!$id || $id == '0') break; + if (!$id || $id == '0') { + break; + } } else { $id = $this->aliasListing[$id]['parent']; - if (!$id) break; + if (!$id) { + break; + } } $parents[$thisid] = $id; } return $parents; } - - function getUltimateParentId($id,$top=0) { - $i=0; - while ($id &&$i<20) { - if($top==$this->aliasListing[$id]['parent']) break; + + /** + * @param $id + * @param int $top + * @return mixed + */ + function getUltimateParentId($id, $top = 0) + { + $i = 0; + while ($id && $i < 20) { + if ($top == $this->aliasListing[$id]['parent']) { + break; + } $id = $this->aliasListing[$id]['parent']; $i++; } return $id; } - + /** * Returns an array of child IDs belonging to the specified parent. * @@ -2390,35 +2950,40 @@ function getUltimateParentId($id,$top=0) { * @param array $children Optional array of docids to merge with the result. * @return array Contains the document Listing (tree) like the sitemap */ - function getChildIds($id, $depth= 10, $children= array ()) { - - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - + function getChildIds($id, $depth = 10, $children = array()) + { + + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + if ($this->config['aliaslistingfolder'] == 1) { - $res = $this->db->select("id,alias,isfolder,parent", $this->getFullTableName('site_content'), "parent IN (".$id.") AND deleted = '0'"); + $res = $this->db->select("id,alias,isfolder,parent", $this->getFullTableName('site_content'), "parent IN (" . $id . ") AND deleted = '0'"); $idx = array(); - while( $row = $this->db->getRow( $res ) ) { + while ($row = $this->db->getRow($res)) { $pAlias = ''; - if( isset( $this->aliasListing[$row['parent']] )) { - $pAlias .= !empty( $this->aliasListing[$row['parent']]['path'] ) ? $this->aliasListing[$row['parent']]['path'] .'/' : ''; - $pAlias .= !empty( $this->aliasListing[$row['parent']]['alias'] ) ? $this->aliasListing[$row['parent']]['alias'] .'/' : ''; + if (isset($this->aliasListing[$row['parent']])) { + $pAlias .= !empty($this->aliasListing[$row['parent']]['path']) ? $this->aliasListing[$row['parent']]['path'] . '/' : ''; + $pAlias .= !empty($this->aliasListing[$row['parent']]['alias']) ? $this->aliasListing[$row['parent']]['alias'] . '/' : ''; }; - $children[$pAlias.$row['alias']] = $row['id']; - if ($row['isfolder']==1) $idx[] = $row['id']; + $children[$pAlias . $row['alias']] = $row['id']; + if ($row['isfolder'] == 1) { + $idx[] = $row['id']; + } } $depth--; - $idx = implode(',',$idx); + $idx = implode(',', $idx); if (!empty($idx)) { if ($depth) { - $children = $this->getChildIds($idx, $depth, $children ); + $children = $this->getChildIds($idx, $depth, $children); } } $this->tmpCache[__FUNCTION__][$cacheKey] = $children; return $children; - }else{ + } else { // Initialise a static array to index parents->children static $documentMap_cache = array(); @@ -2436,8 +3001,10 @@ function getChildIds($id, $depth= 10, $children= array ()) { foreach ($documentMap_cache[$id] as $childId) { $pkey = (strlen($this->aliasListing[$childId]['path']) ? "{$this->aliasListing[$childId]['path']}/" : '') . $this->aliasListing[$childId]['alias']; - if (!strlen($pkey)) $pkey = "{$childId}"; - $children[$pkey] = $childId; + if (!strlen($pkey)) { + $pkey = "{$childId}"; + } + $children[$pkey] = $childId; if ($depth && isset($documentMap_cache[$childId])) { $children += $this->getChildIds($childId, $depth); @@ -2456,7 +3023,8 @@ function getChildIds($id, $depth= 10, $children= array ()) { * @param string $msg Message to show * @param string $url URL to redirect to */ - function webAlertAndQuit($msg, $url= "") { + function webAlertAndQuit($msg, $url = "") + { global $modx_manager_charset; if (substr(strtolower($url), 0, 11) == "javascript:") { $fnc = substr($url, 11); @@ -2478,7 +3046,7 @@ function __alertQuit() {

            {$msg}

            "; - exit; + exit; } /** @@ -2487,14 +3055,16 @@ function __alertQuit() { * @param string $pm Permission name * @return int */ - function hasPermission($pm) { - $state= false; - $pms= $_SESSION['mgrPermissions']; - if ($pms) - $state= ($pms[$pm] == 1); - return (int) $state; + function hasPermission($pm) + { + $state = false; + $pms = $_SESSION['mgrPermissions']; + if ($pms) { + $state = ($pms[$pm] == 1); + } + return (int)$state; } - + /** * Returns true if element is locked * @@ -2503,78 +3073,88 @@ function hasPermission($pm) { * @param bool $includeThisUser true = Return also info about actual user * @return array lock-details or null */ - function elementIsLocked($type, $id, $includeThisUser=false) { + function elementIsLocked($type, $id, $includeThisUser = false) + { $id = intval($id); $type = intval($type); - if(!$type || !$id) return NULL; + if (!$type || !$id) { + return null; + } // Build lockedElements-Cache at first call $this->buildLockedElementsCache(); - - if(!$includeThisUser && $this->lockedElements[$type][$id]['sid'] == $this->sid) return NULL; - - if(isset($this->lockedElements[$type][$id])) { + + if (!$includeThisUser && $this->lockedElements[$type][$id]['sid'] == $this->sid) { + return null; + } + + if (isset($this->lockedElements[$type][$id])) { return $this->lockedElements[$type][$id]; } else { - return NULL; + return null; } } /** * Returns Locked Elements as Array - * + * * @param int $type Types: 0=all, 1=template, 2=tv, 3=chunk, 4=snippet, 5=plugin, 6=module, 7=resource, 8=role - * @param bool $minimumDetails true = + * @param bool $minimumDetails true = + * @return array|mixed|null */ - function getLockedElements($type=0, $minimumDetails=false) { + function getLockedElements($type = 0, $minimumDetails = false) + { $this->buildLockedElementsCache(); - if(!$minimumDetails) { + if (!$minimumDetails) { $lockedElements = $this->lockedElements; } else { // Minimum details for HTML / Ajax-requests $lockedElements = array(); - foreach($this->lockedElements as $elType=>$elements) { - foreach($elements as $elId=>$el) { + foreach ($this->lockedElements as $elType => $elements) { + foreach ($elements as $elId => $el) { $lockedElements[$elType][$elId] = array( - 'username' => $el['username'], - 'lasthit_df' => $el['lasthit_df'], - 'state' => $this->determineLockState($el['internalKey']) + 'username' => $el['username'], + 'lasthit_df' => $el['lasthit_df'], + 'state' => $this->determineLockState($el['internalKey']) ); } } } - - if($type == 0) return $lockedElements; + + if ($type == 0) { + return $lockedElements; + } $type = intval($type); - if(isset($lockedElements[$type])) return $lockedElements[$type]; - else return array(); + if (isset($lockedElements[$type])) { + return $lockedElements[$type]; + } else { + return array(); + } } /** * Builds the Locked Elements Cache once */ - function buildLockedElementsCache() { - if(is_null($this->lockedElements)) { + function buildLockedElementsCache() + { + if (is_null($this->lockedElements)) { $this->lockedElements = array(); $this->cleanupExpiredLocks(); - $rs = $this->db->select( - 'sid,internalKey,elementType,elementId,lasthit,username', - $this->getFullTableName('active_user_locks')." ul - LEFT JOIN {$this->getFullTableName('manager_users')} mu on ul.internalKey = mu.id" - ); + $rs = $this->db->select('sid,internalKey,elementType,elementId,lasthit,username', $this->getFullTableName('active_user_locks') . " ul + LEFT JOIN {$this->getFullTableName('manager_users')} mu on ul.internalKey = mu.id"); while ($row = $this->db->getRow($rs)) { $this->lockedElements[$row['elementType']][$row['elementId']] = array( - 'sid' => $row['sid'], + 'sid' => $row['sid'], 'internalKey' => $row['internalKey'], - 'username' => $row['username'], + 'username' => $row['username'], 'elementType' => $row['elementType'], - 'elementId' => $row['elementId'], - 'lasthit' => $row['lasthit'], - 'lasthit_df' => $this->toDateFormat($row['lasthit']), - 'state' => $this->determineLockState($row['sid']) + 'elementId' => $row['elementId'], + 'lasthit' => $row['lasthit'], + 'lasthit_df' => $this->toDateFormat($row['lasthit']), + 'state' => $this->determineLockState($row['sid']) ); } } @@ -2583,7 +3163,8 @@ function buildLockedElementsCache() { /** * Cleans up the active user locks table */ - function cleanupExpiredLocks() { + function cleanupExpiredLocks() + { // Clean-up active_user_sessions first $timeout = intval($this->config['session_timeout']) < 2 ? 120 : $this->config['session_timeout'] * 60; // session.js pings every 10min, updateMail() in mainMenu pings every minute, so 2min is minimum $validSessionTimeLimit = $this->time - $timeout; @@ -2592,58 +3173,57 @@ function cleanupExpiredLocks() { // Clean-up active_user_locks $rs = $this->db->select('sid,internalKey', $this->getFullTableName('active_user_sessions')); $count = $this->db->getRecordCount($rs); - if($count) { - $rs = $this->db->makeArray($rs); + if ($count) { + $rs = $this->db->makeArray($rs); $userSids = array(); - foreach ($rs as $row) $userSids[] = $row['sid']; - $userSids = "'". implode("','", $userSids) ."'"; + foreach ($rs as $row) { + $userSids[] = $row['sid']; + } + $userSids = "'" . implode("','", $userSids) . "'"; $this->db->delete($this->getFullTableName('active_user_locks'), "sid NOT IN({$userSids})"); } else { $this->db->delete($this->getFullTableName('active_user_locks')); } - + } /** * Cleans up the active users table */ - function cleanupMultipleActiveUsers() { + function cleanupMultipleActiveUsers() + { $timeout = 20 * 60; // Delete multiple user-sessions after 20min $validSessionTimeLimit = $this->time - $timeout; $activeUserSids = array(); $rs = $this->db->select('sid', $this->getFullTableName('active_user_sessions')); $count = $this->db->getRecordCount($rs); - if($count) { - $rs = $this->db->makeArray($rs); - foreach ($rs as $row) $activeUserSids[] = $row['sid']; - } - - $rs = $this->db->select( - "sid,internalKey,lasthit", - "{$this->getFullTableName('active_users')}", - "", - "lasthit DESC" - ); - if($this->db->getRecordCount($rs)) { - $rs = $this->db->makeArray($rs); + if ($count) { + $rs = $this->db->makeArray($rs); + foreach ($rs as $row) { + $activeUserSids[] = $row['sid']; + } + } + + $rs = $this->db->select("sid,internalKey,lasthit", "{$this->getFullTableName('active_users')}", "", "lasthit DESC"); + if ($this->db->getRecordCount($rs)) { + $rs = $this->db->makeArray($rs); $internalKeyCount = array(); $deleteSids = ''; foreach ($rs as $row) { - if(!isset($internalKeyCount[$row['internalKey']])) $internalKeyCount[$row['internalKey']] = 0; + if (!isset($internalKeyCount[$row['internalKey']])) { + $internalKeyCount[$row['internalKey']] = 0; + } $internalKeyCount[$row['internalKey']]++; - - if($internalKeyCount[$row['internalKey']] > 1 - && !in_array($row['sid'], $activeUserSids) - && $row['lasthit'] < $validSessionTimeLimit - ) { + + if ($internalKeyCount[$row['internalKey']] > 1 && !in_array($row['sid'], $activeUserSids) && $row['lasthit'] < $validSessionTimeLimit) { $deleteSids .= $deleteSids == '' ? '' : ' OR '; $deleteSids .= "sid='{$row['sid']}'"; }; - + } - if($deleteSids) { - $this->db->delete($this->getFullTableName('active_users'), $deleteSids); + if ($deleteSids) { + $this->db->delete($this->getFullTableName('active_users'), $deleteSids); } } @@ -2652,16 +3232,18 @@ function cleanupMultipleActiveUsers() { /** * Determines state of a locked element acc. to user-permissions * - * @param int $internalKey: ID of User who locked actual element + * @param $sid * @return int $state States: 0=No display, 1=viewing this element, 2=locked, 3=show unlock-button + * @internal param int $internalKey : ID of User who locked actual element */ - function determineLockState($sid) { + function determineLockState($sid) + { $state = 0; - if($this->hasPermission('display_locks')) { - if($sid == $this->sid) { + if ($this->hasPermission('display_locks')) { + if ($sid == $this->sid) { $state = 1; } else { - if($this->hasPermission('remove_locks')) { + if ($this->hasPermission('remove_locks')) { $state = 3; } else { $state = 2; @@ -2670,28 +3252,25 @@ function determineLockState($sid) { } return $state; } - + /** * Locks an element * * @param int $type Types: 1=template, 2=tv, 3=chunk, 4=snippet, 5=plugin, 6=module, 7=resource, 8=role - * @param int $id Element- / Resource-id + * @param int $id Element- / Resource-id + * @return bool */ - function lockElement($type, $id) { - $userId = $this->isBackend() && $_SESSION['mgrInternalKey'] ? $_SESSION['mgrInternalKey'] : 0; + function lockElement($type, $id) + { + $userId = $this->isBackend() && $_SESSION['mgrInternalKey'] ? $_SESSION['mgrInternalKey'] : 0; $type = intval($type); $id = intval($id); - if(!$type || !$id || !$userId) return false; - + if (!$type || !$id || !$userId) { + return false; + } + $sql = sprintf('REPLACE INTO %s (internalKey, elementType, elementId, lasthit, sid) - VALUES (%d, %d, %d, %d, \'%s\')', - $this->getFullTableName('active_user_locks'), - $userId, - $type, - $id, - $this->time, - $this->sid - ); + VALUES (%d, %d, %d, %d, \'%s\')', $this->getFullTableName('active_user_locks'), $userId, $type, $id, $this->time, $this->sid); $this->db->query($sql); } @@ -2701,26 +3280,21 @@ function lockElement($type, $id) { * @param int $type Types: 1=template, 2=tv, 3=chunk, 4=snippet, 5=plugin, 6=module, 7=resource, 8=role * @param int $id Element- / Resource-id * @param bool $includeAllUsers true = Deletes not only own user-locks + * @return bool */ - function unlockElement($type, $id, $includeAllUsers=false) { - $userId = $this->isBackend() && $_SESSION['mgrInternalKey'] ? $_SESSION['mgrInternalKey'] : 0; + function unlockElement($type, $id, $includeAllUsers = false) + { + $userId = $this->isBackend() && $_SESSION['mgrInternalKey'] ? $_SESSION['mgrInternalKey'] : 0; $type = intval($type); $id = intval($id); - if(!$type || !$id) return false; - - if(!$includeAllUsers) { - $sql = sprintf('DELETE FROM %s WHERE internalKey = %d AND elementType = %d AND elementId = %d;', - $this->getFullTableName('active_user_locks'), - $userId, - $type, - $id - ); + if (!$type || !$id) { + return false; + } + + if (!$includeAllUsers) { + $sql = sprintf('DELETE FROM %s WHERE internalKey = %d AND elementType = %d AND elementId = %d;', $this->getFullTableName('active_user_locks'), $userId, $type, $id); } else { - $sql = sprintf('DELETE FROM %s WHERE elementType = %d AND elementId = %d;', - $this->getFullTableName('active_user_locks'), - $type, - $id - ); + $sql = sprintf('DELETE FROM %s WHERE elementType = %d AND elementId = %d;', $this->getFullTableName('active_user_locks'), $type, $id); } $this->db->query($sql); } @@ -2728,27 +3302,29 @@ function unlockElement($type, $id, $includeAllUsers=false) { /** * Updates table "active_user_sessions" with userid, lasthit, IP */ - function updateValidatedUserSession() { - if(!$this->sid) return; - + function updateValidatedUserSession() + { + if (!$this->sid) { + return; + } + // web users are stored with negative keys $userId = $this->getLoginUserType() == 'manager' ? $this->getLoginUserID() : -$this->getLoginUserID(); - + // Get user IP - if ($cip = getenv("HTTP_CLIENT_IP")) $ip = $cip; - elseif ($cip = getenv("HTTP_X_FORWARDED_FOR")) $ip = $cip; - elseif ($cip = getenv("REMOTE_ADDR")) $ip = $cip; - else $ip = "UNKNOWN"; + if ($cip = getenv("HTTP_CLIENT_IP")) { + $ip = $cip; + } elseif ($cip = getenv("HTTP_X_FORWARDED_FOR")) { + $ip = $cip; + } elseif ($cip = getenv("REMOTE_ADDR")) { + $ip = $cip; + } else { + $ip = "UNKNOWN"; + } $_SESSION['ip'] = $ip; - + $sql = sprintf('REPLACE INTO %s (internalKey, lasthit, ip, sid) - VALUES (%d, %d, \'%s\', \'%s\')', - $this->getFullTableName('active_user_sessions'), - $userId, - $this->time, - $ip, - $this->sid - ); + VALUES (%d, %d, \'%s\', \'%s\')', $this->getFullTableName('active_user_sessions'), $userId, $this->time, $ip, $this->sid); $this->db->query($sql); } @@ -2761,32 +3337,35 @@ function updateValidatedUserSession() { * @param string $source source of the event (module, snippet name, etc.) * Default: Parser */ - function logEvent($evtid, $type, $msg, $source= 'Parser') { - $msg= $this->db->escape($msg); - if (strpos($GLOBALS['database_connection_charset'],'utf8')===0 && extension_loaded('mbstring')) { - $esc_source = mb_substr($source, 0, 50 , "UTF-8"); + function logEvent($evtid, $type, $msg, $source = 'Parser') + { + $msg = $this->db->escape($msg); + if (strpos($GLOBALS['database_connection_charset'], 'utf8') === 0 && extension_loaded('mbstring')) { + $esc_source = mb_substr($source, 0, 50, "UTF-8"); } else { $esc_source = substr($source, 0, 50); } - $esc_source= $this->db->escape($esc_source); + $esc_source = $this->db->escape($esc_source); $LoginUserID = $this->getLoginUserID(); - if ($LoginUserID == '') $LoginUserID = 0; + if ($LoginUserID == '') { + $LoginUserID = 0; + } $usertype = $this->isFrontend() ? 1 : 0; - $evtid= intval($evtid); + $evtid = intval($evtid); $type = intval($type); // Types: 1 = information, 2 = warning, 3 = error if ($type < 1) { - $type= 1; + $type = 1; } elseif ($type > 3) { - $type= 3; + $type = 3; } $this->db->insert(array( 'eventid' => $evtid, - 'type' =>$type, + 'type' => $type, 'createdon' => $_SERVER['REQUEST_TIME'] + $this->config['server_offset_time'], 'source' => $esc_source, 'description' => $msg, @@ -2797,127 +3376,136 @@ function logEvent($evtid, $type, $msg, $source= 'Parser') { if (isset($this->config['send_errormail']) && $this->config['send_errormail'] !== '0') { if ($this->config['send_errormail'] <= $type) { $this->sendmail(array( - 'subject' => 'MODX System Error on ' . $this->config['site_name'], - 'body' => 'Source: ' . $source . ' - The details of the error could be seen in the MODX system events log.', - 'type' => 'text') - ); + 'subject' => 'MODX System Error on ' . $this->config['site_name'], + 'body' => 'Source: ' . $source . ' - The details of the error could be seen in the MODX system events log.', + 'type' => 'text' + )); } } } - function sendmail($params=array(), $msg='', $files = array()) + /** + * @param array $params + * @param string $msg + * @param array $files + * @return mixed + */ + function sendmail($params = array(), $msg = '', $files = array()) { - if(isset($params) && is_string($params)) - { - if(strpos($params,'=')===false) - { - if(strpos($params,'@')!==false) $p['to'] = $params; - else $p['subject'] = $params; - } - else - { - $params_array = explode(',',$params); - foreach($params_array as $k=>$v) - { + if (isset($params) && is_string($params)) { + if (strpos($params, '=') === false) { + if (strpos($params, '@') !== false) { + $p['to'] = $params; + } else { + $p['subject'] = $params; + } + } else { + $params_array = explode(',', $params); + foreach ($params_array as $k => $v) { $k = trim($k); $v = trim($v); $p[$k] = $v; } } - } - else - { + } else { $p = $params; unset($params); } - if(isset($p['sendto'])) $p['to'] = $p['sendto']; - - if(isset($p['to']) && preg_match('@^[0-9]+$@',$p['to'])) - { + if (isset($p['sendto'])) { + $p['to'] = $p['sendto']; + } + + if (isset($p['to']) && preg_match('@^[0-9]+$@', $p['to'])) { $userinfo = $this->getUserInfo($p['to']); $p['to'] = $userinfo['email']; } - if(isset($p['from']) && preg_match('@^[0-9]+$@',$p['from'])) - { + if (isset($p['from']) && preg_match('@^[0-9]+$@', $p['from'])) { $userinfo = $this->getUserInfo($p['from']); - $p['from'] = $userinfo['email']; + $p['from'] = $userinfo['email']; $p['fromname'] = $userinfo['username']; } - if($msg==='' && !isset($p['body'])) - { + if ($msg === '' && !isset($p['body'])) { $p['body'] = $_SERVER['REQUEST_URI'] . "\n" . $_SERVER['HTTP_USER_AGENT'] . "\n" . $_SERVER['HTTP_REFERER']; + } elseif (is_string($msg) && 0 < strlen($msg)) { + $p['body'] = $msg; } - elseif(is_string($msg) && 0loadExtension('MODxMailer'); - $sendto = (!isset($p['to'])) ? $this->config['emailsender'] : $p['to']; - $sendto = explode(',',$sendto); - foreach($sendto as $address) - { + $sendto = (!isset($p['to'])) ? $this->config['emailsender'] : $p['to']; + $sendto = explode(',', $sendto); + foreach ($sendto as $address) { list($name, $address) = $this->mail->address_split($address); - $this->mail->AddAddress($address,$name); + $this->mail->AddAddress($address, $name); } - if(isset($p['cc'])) - { - $p['cc'] = explode(',',$p['cc']); - foreach($p['cc'] as $address) - { + if (isset($p['cc'])) { + $p['cc'] = explode(',', $p['cc']); + foreach ($p['cc'] as $address) { list($name, $address) = $this->mail->address_split($address); - $this->mail->AddCC($address,$name); + $this->mail->AddCC($address, $name); } } - if(isset($p['bcc'])) - { - $p['bcc'] = explode(',',$p['bcc']); - foreach($p['bcc'] as $address) - { + if (isset($p['bcc'])) { + $p['bcc'] = explode(',', $p['bcc']); + foreach ($p['bcc'] as $address) { list($name, $address) = $this->mail->address_split($address); - $this->mail->AddBCC($address,$name); + $this->mail->AddBCC($address, $name); } } - if(isset($p['from']) && strpos($p['from'],'<')!==false && substr($p['from'],-1)==='>') - list($p['fromname'],$p['from']) = $this->mail->address_split($p['from']); - $this->mail->From = (!isset($p['from'])) ? $this->config['emailsender'] : $p['from']; + if (isset($p['from']) && strpos($p['from'], '<') !== false && substr($p['from'], -1) === '>') { + list($p['fromname'], $p['from']) = $this->mail->address_split($p['from']); + } + $this->mail->From = (!isset($p['from'])) ? $this->config['emailsender'] : $p['from']; $this->mail->FromName = (!isset($p['fromname'])) ? $this->config['site_name'] : $p['fromname']; - $this->mail->Subject = (!isset($p['subject'])) ? $this->config['emailsubject'] : $p['subject']; - $this->mail->Body = $p['body']; - if (isset($p['type']) && $p['type'] == 'text') $this->mail->IsHTML(false); - if(!is_array($files)) $files = array(); - foreach($files as $f){ - if(file_exists(MODX_BASE_PATH.$f) && is_file(MODX_BASE_PATH.$f) && is_readable(MODX_BASE_PATH.$f)){ - $this->mail->AddAttachment(MODX_BASE_PATH.$f); + $this->mail->Subject = (!isset($p['subject'])) ? $this->config['emailsubject'] : $p['subject']; + $this->mail->Body = $p['body']; + if (isset($p['type']) && $p['type'] == 'text') { + $this->mail->IsHTML(false); + } + if (!is_array($files)) { + $files = array(); + } + foreach ($files as $f) { + if (file_exists(MODX_BASE_PATH . $f) && is_file(MODX_BASE_PATH . $f) && is_readable(MODX_BASE_PATH . $f)) { + $this->mail->AddAttachment(MODX_BASE_PATH . $f); } } $rs = $this->mail->send(); return $rs; } - - function rotate_log($target='event_log',$limit=3000, $trim=100) + + /** + * @param string $target + * @param int $limit + * @param int $trim + */ + function rotate_log($target = 'event_log', $limit = 3000, $trim = 100) { - if($limit < $trim) $trim = $limit; + if ($limit < $trim) { + $trim = $limit; + } $table_name = $this->getFullTableName($target); - $count = $this->db->getValue($this->db->select('COUNT(id)',$table_name)); + $count = $this->db->getValue($this->db->select('COUNT(id)', $table_name)); $over = $count - $limit; - if(0 < $over) - { + if (0 < $over) { $trim = ($over + $trim); - $this->db->delete($table_name,'','',$trim); + $this->db->delete($table_name, '', '', $trim); } $this->db->optimize($table_name); } - + /** * Returns true if we are currently in the manager backend * * @return boolean */ - function isBackend() { - if(defined('IN_MANAGER_MODE') && IN_MANAGER_MODE == 'true') - { + function isBackend() + { + if (defined('IN_MANAGER_MODE') && IN_MANAGER_MODE == 'true') { return true; + } else { + return false; } - else return false; } /** @@ -2925,12 +3513,13 @@ function isBackend() { * * @return boolean */ - function isFrontend() { - if(defined('IN_MANAGER_MODE') && IN_MANAGER_MODE == 'true') - { + function isFrontend() + { + if (defined('IN_MANAGER_MODE') && IN_MANAGER_MODE == 'true') { return false; + } else { + return true; } - else return true; } /** @@ -2944,29 +3533,27 @@ function isFrontend() { * @param string $fields Default: id, pagetitle, description, parent, alias, menutitle * @return array */ - function getAllChildren($id= 0, $sort= 'menuindex', $dir= 'ASC', $fields= 'id, pagetitle, description, parent, alias, menutitle') { - - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - - $tblsc= $this->getFullTableName("site_content"); - $tbldg= $this->getFullTableName("document_groups"); + function getAllChildren($id = 0, $sort = 'menuindex', $dir = 'ASC', $fields = 'id, pagetitle, description, parent, alias, menutitle') + { + + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + + $tblsc = $this->getFullTableName("site_content"); + $tbldg = $this->getFullTableName("document_groups"); // modify field names to use sc. table reference - $fields= 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); - $sort= 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $sort)))); + $fields = 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); + $sort = 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $sort)))); // get document groups for current user - if ($docgrp= $this->getUserDocGroups()) - $docgrp= implode(",", $docgrp); + if ($docgrp = $this->getUserDocGroups()) { + $docgrp = implode(",", $docgrp); + } // build query - $access= ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . - (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); - $result= $this->db->select( - "DISTINCT {$fields}", - "{$tblsc} sc - LEFT JOIN {$tbldg} dg on dg.document = sc.id", - "sc.parent = '{$id}' AND ({$access}) GROUP BY sc.id", - "{$sort} {$dir}" - ); + $access = ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); + $result = $this->db->select("DISTINCT {$fields}", "{$tblsc} sc + LEFT JOIN {$tbldg} dg on dg.document = sc.id", "sc.parent = '{$id}' AND ({$access}) GROUP BY sc.id", "{$sort} {$dir}"); $resourceArray = $this->db->makeArray($result); $this->tmpCache[__FUNCTION__][$cacheKey] = $resourceArray; return $resourceArray; @@ -2983,42 +3570,40 @@ function getAllChildren($id= 0, $sort= 'menuindex', $dir= 'ASC', $fields= 'id, p * @param string $fields Default: id, pagetitle, description, parent, alias, menutitle * @return array */ - function getActiveChildren($id= 0, $sort= 'menuindex', $dir= 'ASC', $fields= 'id, pagetitle, description, parent, alias, menutitle') { - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - - $tblsc= $this->getFullTableName("site_content"); - $tbldg= $this->getFullTableName("document_groups"); + function getActiveChildren($id = 0, $sort = 'menuindex', $dir = 'ASC', $fields = 'id, pagetitle, description, parent, alias, menutitle') + { + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + + $tblsc = $this->getFullTableName("site_content"); + $tbldg = $this->getFullTableName("document_groups"); // modify field names to use sc. table reference - $fields= 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); - $sort= 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $sort)))); + $fields = 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); + $sort = 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $sort)))); // get document groups for current user - if ($docgrp= $this->getUserDocGroups()) - $docgrp= implode(",", $docgrp); + if ($docgrp = $this->getUserDocGroups()) { + $docgrp = implode(",", $docgrp); + } // build query - $access= ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . - (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); - $result= $this->db->select( - "DISTINCT {$fields}", - "{$tblsc} sc - LEFT JOIN {$tbldg} dg on dg.document = sc.id", - "sc.parent = '{$id}' AND sc.published=1 AND sc.deleted=0 AND ({$access}) GROUP BY sc.id", - "{$sort} {$dir}" - ); + $access = ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); + $result = $this->db->select("DISTINCT {$fields}", "{$tblsc} sc + LEFT JOIN {$tbldg} dg on dg.document = sc.id", "sc.parent = '{$id}' AND sc.published=1 AND sc.deleted=0 AND ({$access}) GROUP BY sc.id", "{$sort} {$dir}"); $resourceArray = $this->db->makeArray($result); - + $this->tmpCache[__FUNCTION__][$cacheKey] = $resourceArray; - + return $resourceArray; } - + /** * getDocumentChildren * @version 1.1.1 (2014-02-19) - * + * * @desc Returns the children of the selected document/folder as an associative array. - * + * * @param $parentid {integer} - The parent document identifier. Default: 0 (site root). * @param $published {0; 1; 'all'} - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. * @param $deleted {0; 1; 'all'} - Document removal status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are deleted or they are not. Default: 0. @@ -3027,58 +3612,55 @@ function getActiveChildren($id= 0, $sort= 'menuindex', $dir= 'ASC', $fields= 'id * @param $sort {comma separated string} - Should be a comma-separated list of field names on which to sort. Default: 'menuindex'. * @param $dir {'ASC'; 'DESC'} - Sort direction, ASC and DESC is possible. Default: 'ASC'. * @param $limit {string} - Should be a valid SQL LIMIT clause without the 'LIMIT ' i.e. just include the numbers as a string. Default: Empty string (no limit). - * + * * @return {array; false} - Result array, or false. */ - function getDocumentChildren($parentid = 0, $published = 1, $deleted = 0, $fields = '*', $where = '', $sort = 'menuindex', $dir = 'ASC', $limit = ''){ - - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - - $published = ($published !== 'all') ? 'AND sc.published = '.$published : ''; - $deleted = ($deleted !== 'all') ? 'AND sc.deleted = '.$deleted : ''; - - if ($where != ''){ - $where = 'AND '.$where; - } - + function getDocumentChildren($parentid = 0, $published = 1, $deleted = 0, $fields = '*', $where = '', $sort = 'menuindex', $dir = 'ASC', $limit = '') + { + + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + + $published = ($published !== 'all') ? 'AND sc.published = ' . $published : ''; + $deleted = ($deleted !== 'all') ? 'AND sc.deleted = ' . $deleted : ''; + + if ($where != '') { + $where = 'AND ' . $where; + } + // modify field names to use sc. table reference $fields = 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); $sort = ($sort == '') ? '' : 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $sort)))); - + // get document groups for current user - if ($docgrp = $this->getUserDocGroups()){ + if ($docgrp = $this->getUserDocGroups()) { $docgrp = implode(',', $docgrp); } - + // build query - $access = ($this->isFrontend() ? 'sc.privateweb=0' : '1="'.$_SESSION['mgrRole'].'" OR sc.privatemgr=0').(!$docgrp ? '' : ' OR dg.document_group IN ('.$docgrp.')'); - + $access = ($this->isFrontend() ? 'sc.privateweb=0' : '1="' . $_SESSION['mgrRole'] . '" OR sc.privatemgr=0') . (!$docgrp ? '' : ' OR dg.document_group IN (' . $docgrp . ')'); + $tblsc = $this->getFullTableName('site_content'); $tbldg = $this->getFullTableName('document_groups'); - - $result= $this->db->select( - "DISTINCT {$fields}", - "{$tblsc} sc - LEFT JOIN {$tbldg} dg on dg.document = sc.id", - "sc.parent = '{$parentid}' {$published} {$deleted} {$where} AND ({$access}) GROUP BY sc.id", - ($sort ? "{$sort} {$dir}" : ""), - $limit - ); - + + $result = $this->db->select("DISTINCT {$fields}", "{$tblsc} sc + LEFT JOIN {$tbldg} dg on dg.document = sc.id", "sc.parent = '{$parentid}' {$published} {$deleted} {$where} AND ({$access}) GROUP BY sc.id", ($sort ? "{$sort} {$dir}" : ""), $limit); + $resourceArray = $this->db->makeArray($result); - + $this->tmpCache[__FUNCTION__][$cacheKey] = $resourceArray; - + return $resourceArray; } - + /** * getDocuments * @version 1.1.1 (2013-02-19) - * + * * @desc Returns required documents (their fields). - * + * * @param $ids {array; comma separated string} - Documents Ids to get. @required * @param $published {0; 1; 'all'} - Documents publication status. Once the parameter equals 'all', the result will be returned regardless of whether the documents are published or they are not. Default: 1. * @param $deleted {0; 1; 'all'} - Documents removal status. Once the parameter equals 'all', the result will be returned regardless of whether the documents are deleted or they are not. Default: 0. @@ -3087,112 +3669,126 @@ function getDocumentChildren($parentid = 0, $published = 1, $deleted = 0, $field * @param $sort {comma separated string} - A comma-separated list of field names to sort by. Default: 'menuindex'. * @param $dir {'ASC'; 'DESC'} - Sorting direction. Default: 'ASC'. * @param $limit {string} - SQL LIMIT (without 'LIMIT '). An empty string means no limit. Default: ''. - * + * * @return {array; false} - Result array with documents, or false. */ - function getDocuments($ids = array(), $published = 1, $deleted = 0, $fields = '*', $where = '', $sort = 'menuindex', $dir = 'ASC', $limit = ''){ - - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - - if(is_string($ids)){ - if(strpos($ids, ',') !== false){ + function getDocuments($ids = array(), $published = 1, $deleted = 0, $fields = '*', $where = '', $sort = 'menuindex', $dir = 'ASC', $limit = '') + { + + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + + if (is_string($ids)) { + if (strpos($ids, ',') !== false) { $ids = array_filter(array_map('intval', explode(',', $ids))); - }else{ + } else { $ids = array($ids); } } - if (count($ids) == 0){ + if (count($ids) == 0) { $this->tmpCache[__FUNCTION__][$cacheKey] = false; return false; - }else{ + } else { // modify field names to use sc. table reference - $fields = 'sc.'.implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); - $sort = ($sort == '') ? '' : 'sc.'.implode(',sc.', array_filter(array_map('trim', explode(',', $sort)))); - if ($where != ''){ - $where = 'AND '.$where; + $fields = 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); + $sort = ($sort == '') ? '' : 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $sort)))); + if ($where != '') { + $where = 'AND ' . $where; } - + $published = ($published !== 'all') ? "AND sc.published = '{$published}'" : ''; $deleted = ($deleted !== 'all') ? "AND sc.deleted = '{$deleted}'" : ''; - + // get document groups for current user - if ($docgrp = $this->getUserDocGroups()){ + if ($docgrp = $this->getUserDocGroups()) { $docgrp = implode(',', $docgrp); } - - $access = ($this->isFrontend() ? 'sc.privateweb=0' : '1="'.$_SESSION['mgrRole'].'" OR sc.privatemgr=0').(!$docgrp ? '' : ' OR dg.document_group IN ('.$docgrp.')'); - + + $access = ($this->isFrontend() ? 'sc.privateweb=0' : '1="' . $_SESSION['mgrRole'] . '" OR sc.privatemgr=0') . (!$docgrp ? '' : ' OR dg.document_group IN (' . $docgrp . ')'); + $tblsc = $this->getFullTableName('site_content'); $tbldg = $this->getFullTableName('document_groups'); - $result = $this->db->select( - "DISTINCT {$fields}", - "{$tblsc} sc - LEFT JOIN {$tbldg} dg on dg.document = sc.id", - "(sc.id IN (".implode(',', $ids).") {$published} {$deleted} {$where}) AND ({$access}) GROUP BY sc.id", - ($sort ? "{$sort} {$dir}" : ""), - $limit - ); - + $result = $this->db->select("DISTINCT {$fields}", "{$tblsc} sc + LEFT JOIN {$tbldg} dg on dg.document = sc.id", "(sc.id IN (" . implode(',', $ids) . ") {$published} {$deleted} {$where}) AND ({$access}) GROUP BY sc.id", ($sort ? "{$sort} {$dir}" : ""), $limit); + $resourceArray = $this->db->makeArray($result); - + $this->tmpCache[__FUNCTION__][$cacheKey] = $resourceArray; - + return $resourceArray; } } - + /** * getDocument * @version 1.0.1 (2014-02-19) - * + * * @desc Returns required fields of a document. - * - * @param $id {integer} - Id of a document which data has to be gained. @required - * @param $fields {comma separated string; '*'} - Comma separated list of document fields to get. Default: '*'. - * @param $published {0; 1; 'all'} - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: false. - * @param $deleted {0; 1; 'all'} - Document removal status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are deleted or they are not. Default: 0. - * - * @return {array; false} - Result array with fields or false. + * + * @param int $id {integer} + * - Id of a document which data has to be gained. @required + * @param string $fields {comma separated string; '*'} + * - Comma separated list of document fields to get. Default: '*'. + * @param int $published {0; 1; 'all'} + * - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the documents are published or they are not. Default: false. + * @param int $deleted {0; 1; 'all'} + * - Document removal status. Once the parameter equals 'all', the result will be returned regardless of whether the documents are deleted or they are not. Default: 0. + * @return bool {array; false} - Result array with fields or false. + * - Result array with fields or false. */ - function getDocument($id = 0, $fields = '*', $published = 1, $deleted = 0){ - if ($id == 0){ + function getDocument($id = 0, $fields = '*', $published = 1, $deleted = 0) + { + if ($id == 0) { return false; - }else{ + } else { $docs = $this->getDocuments(array($id), $published, $deleted, $fields, '', '', '', 1); - - if ($docs != false){ + + if ($docs != false) { return $docs[0]; - }else{ + } else { return false; } } } - - function getField($field='content', $docid='') { - if(empty($docid) && isset($this->documentIdentifier)) + + /** + * @param string $field + * @param string $docid + * @return bool|mixed + */ + function getField($field = 'content', $docid = '') + { + if (empty($docid) && isset($this->documentIdentifier)) { $docid = $this->documentIdentifier; - elseif(!preg_match('@^[0-9]+$@',$docid)) + } elseif (!preg_match('@^[0-9]+$@', $docid)) { $docid = $this->getIdFromAlias($docid); - - if(empty($docid)) return false; - - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - + } + + if (empty($docid)) { + return false; + } + + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + $doc = $this->getDocumentObject('id', $docid); - if(is_array($doc[$field])) { - $tvs= $this->getTemplateVarOutput($field, $docid,1); + if (is_array($doc[$field])) { + $tvs = $this->getTemplateVarOutput($field, $docid, 1); $content = $tvs[$field]; + } else { + $content = $doc[$field]; } - else $content = $doc[$field]; - + $this->tmpCache[__FUNCTION__][$cacheKey] = $content; - + return $content; } - + /** * Returns the page information as database row, the type of result is * defined with the parameter $rowMode @@ -3206,35 +3802,32 @@ function getField($field='content', $docid='') { * Default: id, pagetitle, description, alias * @return boolean|array */ - function getPageInfo($pageid= -1, $active= 1, $fields= 'id, pagetitle, description, alias') { - - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - + function getPageInfo($pageid = -1, $active = 1, $fields = 'id, pagetitle, description, alias') + { + + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + if ($pageid == 0) { return false; } else { - $tblsc= $this->getFullTableName("site_content"); - $tbldg= $this->getFullTableName("document_groups"); - $activeSql= $active == 1 ? "AND sc.published=1 AND sc.deleted=0" : ""; + $tblsc = $this->getFullTableName("site_content"); + $tbldg = $this->getFullTableName("document_groups"); + $activeSql = $active == 1 ? "AND sc.published=1 AND sc.deleted=0" : ""; // modify field names to use sc. table reference - $fields= 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); + $fields = 'sc.' . implode(',sc.', array_filter(array_map('trim', explode(',', $fields)))); // get document groups for current user - if ($docgrp= $this->getUserDocGroups()) - $docgrp= implode(",", $docgrp); - $access= ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . - (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); - $result= $this->db->select( - $fields, - "{$tblsc} sc LEFT JOIN {$tbldg} dg on dg.document = sc.id", - "(sc.id='{$pageid}' {$activeSql}) AND ({$access})", - "", - 1 - ); - $pageInfo= $this->db->getRow($result); - + if ($docgrp = $this->getUserDocGroups()) { + $docgrp = implode(",", $docgrp); + } + $access = ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") . (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)"); + $result = $this->db->select($fields, "{$tblsc} sc LEFT JOIN {$tbldg} dg on dg.document = sc.id", "(sc.id='{$pageid}' {$activeSql}) AND ({$access})", "", 1); + $pageInfo = $this->db->getRow($result); + $this->tmpCache[__FUNCTION__][$cacheKey] = $pageInfo; - + return $pageInfo; } } @@ -3251,20 +3844,20 @@ function getPageInfo($pageid= -1, $active= 1, $fields= 'id, pagetitle, descripti * Default: id, pagetitle, description, alias * @return boolean|array */ - function getParent($pid= -1, $active= 1, $fields= 'id, pagetitle, description, alias, parent') { + function getParent($pid = -1, $active = 1, $fields = 'id, pagetitle, description, alias, parent') + { if ($pid == -1) { - $pid= $this->documentObject['parent']; + $pid = $this->documentObject['parent']; return ($pid == 0) ? false : $this->getPageInfo($pid, $active, $fields); - } else - if ($pid == 0) { - return false; - } else { - // first get the child document - $child= $this->getPageInfo($pid, $active, "parent"); - // now return the child's parent - $pid= ($child['parent']) ? $child['parent'] : 0; - return ($pid == 0) ? false : $this->getPageInfo($pid, $active, $fields); - } + } else if ($pid == 0) { + return false; + } else { + // first get the child document + $child = $this->getPageInfo($pid, $active, "parent"); + // now return the child's parent + $pid = ($child['parent']) ? $child['parent'] : 0; + return ($pid == 0) ? false : $this->getPageInfo($pid, $active, $fields); + } } /** @@ -3272,12 +3865,14 @@ function getParent($pid= -1, $active= 1, $fields= 'id, pagetitle, description, a * * @return int */ - function getSnippetId() { + function getSnippetId() + { if ($this->currentSnippet) { - $tbl= $this->getFullTableName("site_snippets"); + $tbl = $this->getFullTableName("site_snippets"); $rs = $this->db->select('id', $tbl, "name='" . $this->db->escape($this->currentSnippet) . "'", '', 1); - if ($snippetId = $this->db->getValue($rs)) + if ($snippetId = $this->db->getValue($rs)) { return $snippetId; + } } return 0; } @@ -3287,172 +3882,191 @@ function getSnippetId() { * * @return string */ - function getSnippetName() { + function getSnippetName() + { return $this->currentSnippet; } /** * Clear the cache of MODX. * - * @return boolean + * @param string $type + * @param bool $report + * @return bool */ - function clearCache($type='', $report=false) { + function clearCache($type = '', $report = false) + { $cache_dir = MODX_BASE_PATH . $this->getCacheFolder(); - if(is_array($type)) { - foreach($type as $_) { - $this->clearCache($_,$report); + if (is_array($type)) { + foreach ($type as $_) { + $this->clearCache($_, $report); } - } elseif ($type=='full') { + } elseif ($type == 'full') { include_once(MODX_MANAGER_PATH . 'processors/cache_sync.class.processor.php'); $sync = new synccache(); $sync->setCachepath($cache_dir); $sync->setReport($report); $sync->emptyCache(); - } elseif(preg_match('@^[1-9][0-9]*$@',$type)) { + } elseif (preg_match('@^[1-9][0-9]*$@', $type)) { $key = ($this->config['cache_type'] == 2) ? $this->makePageCacheKey($type) : $type; $file_name = "docid_" . $key . "_*.pageCache.php"; $cache_path = $cache_dir . $file_name; $files = glob($cache_path); $files[] = $cache_dir . "docid_" . $key . ".pageCache.php"; - foreach($files as $file) { - if (!is_file($file)) continue; + foreach ($files as $file) { + if (!is_file($file)) { + continue; + } unlink($file); } } else { - $files = glob($cache_dir.'*'); + $files = glob($cache_dir . '*'); foreach ($files as $file) { $name = basename($file); - if (strpos($name,'.pageCache.php')===false) continue; - if (!is_file($file)) continue; + if (strpos($name, '.pageCache.php') === false) { + continue; + } + if (!is_file($file)) { + continue; + } unlink($file); } } } - + /** * makeUrl - * + * * @desc Create an URL for the given document identifier. The url prefix and postfix are used, when “friendly_url” is active. - * + * * @param $id {integer} - The document identifier. @required - * @param $alias {string} - The alias name for the document. Default: ''. - * @param $args {string} - The paramaters to add to the URL. Default: ''. - * @param $scheme {string} - With full as valus, the site url configuration is used. Default: ''. - * - * @return {string} - Result URL. + * @param string $alias {string} + * - The alias name for the document. Default: ''. + * @param string $args {string} + * - The paramaters to add to the URL. Default: ''. + * @param string $scheme {string} + * - With full as valus, the site url configuration is used. Default: ''. + * @return mixed|string {string} - Result URL. + * - Result URL. */ - function makeUrl($id, $alias = '', $args = '', $scheme = ''){ + function makeUrl($id, $alias = '', $args = '', $scheme = '') + { $url = ''; $virtualDir = isset($this->config['virtual_dir']) ? $this->config['virtual_dir'] : ''; $f_url_prefix = $this->config['friendly_url_prefix']; $f_url_suffix = $this->config['friendly_url_suffix']; - - if (!is_numeric($id)){ + + if (!is_numeric($id)) { $this->messageQuit("`{$id}` is not numeric and may not be passed to makeUrl()"); } - - if ($args !== ''){ + + if ($args !== '') { // add ? or & to $args if missing $args = ltrim($args, '?&'); $_ = strpos($f_url_prefix, '?'); - - if($_ === false && $this->config['friendly_urls'] == 1){ + + if ($_ === false && $this->config['friendly_urls'] == 1) { $args = "?{$args}"; - }else{ + } else { $args = "&{$args}"; } } - - if ($id != $this->config['site_start']){ - if ($this->config['friendly_urls'] == 1 && $alias != ''){ - }elseif ($this->config['friendly_urls'] == 1 && $alias == ''){ + + if ($id != $this->config['site_start']) { + if ($this->config['friendly_urls'] == 1 && $alias != '') { + } elseif ($this->config['friendly_urls'] == 1 && $alias == '') { $alias = $id; $alPath = ''; - + if ($this->config['friendly_alias_urls'] == 1) { if ($this->config['aliaslistingfolder'] == 1) { - $al= $this->getAliasListing($id); - }else{ - $al= $this->aliasListing[$id]; + $al = $this->getAliasListing($id); + } else { + $al = $this->aliasListing[$id]; } - - if ($al['isfolder'] === 1 && $this->config['make_folders'] === '1'){ + + if ($al['isfolder'] === 1 && $this->config['make_folders'] === '1') { $f_url_suffix = '/'; } - + $alPath = !empty ($al['path']) ? $al['path'] . '/' : ''; - - if ($al && $al['alias']){ + + if ($al && $al['alias']) { $alias = $al['alias']; } } - - $alias = $alPath.$f_url_prefix.$alias.$f_url_suffix; + + $alias = $alPath . $f_url_prefix . $alias . $f_url_suffix; $url = "{$alias}{$args}"; - }else{ + } else { $url = "index.php?id={$id}{$args}"; } - }else{ + } else { $url = $args; } - + $host = $this->config['base_url']; - + // check if scheme argument has been set - if ($scheme != ''){ + if ($scheme != '') { // for backward compatibility - check if the desired scheme is different than the current scheme - if (is_numeric($scheme) && $scheme != $_SERVER['HTTPS']){ - $scheme= ($_SERVER['HTTPS'] ? 'http' : 'https'); + if (is_numeric($scheme) && $scheme != $_SERVER['HTTPS']) { + $scheme = ($_SERVER['HTTPS'] ? 'http' : 'https'); } - + //TODO: check to make sure that $site_url incudes the url :port (e.g. :8080) - $host = $scheme == 'full' ? $this->config['site_url'] : $scheme.'://'.$_SERVER['HTTP_HOST'].$host; + $host = $scheme == 'full' ? $this->config['site_url'] : $scheme . '://' . $_SERVER['HTTP_HOST'] . $host; } - + //fix strictUrl by Bumkaka - if ($this->config['seostrict'] == '1'){ - $url = $this->toAlias($url); + if ($this->config['seostrict'] == '1') { + $url = $this->toAlias($url); } - - if ($this->config['xhtml_urls']){ - $url = preg_replace("/&(?!amp;)/","&", $host.$virtualDir.$url); - }else{ - $url = $host.$virtualDir.$url; + + if ($this->config['xhtml_urls']) { + $url = preg_replace("/&(?!amp;)/", "&", $host . $virtualDir . $url); + } else { + $url = $host . $virtualDir . $url; } - + $evtOut = $this->invokeEvent('OnMakeDocUrl', array( 'id' => $id, 'url' => $url )); - - if (is_array($evtOut) && count($evtOut) > 0){ + + if (is_array($evtOut) && count($evtOut) > 0) { $url = array_pop($evtOut); } - + return $url; } - function getAliasListing($id){ - if(isset($this->aliasListing[$id])){ + /** + * @param $id + * @return mixed + */ + function getAliasListing($id) + { + if (isset($this->aliasListing[$id])) { $out = $this->aliasListing[$id]; - }else{ - $q = $this->db->query("SELECT id,alias,isfolder,parent FROM ".$this->getFullTableName("site_content")." WHERE id=".(int)$id); - if($this->db->getRecordCount($q)=='1'){ + } else { + $q = $this->db->query("SELECT id,alias,isfolder,parent FROM " . $this->getFullTableName("site_content") . " WHERE id=" . (int)$id); + if ($this->db->getRecordCount($q) == '1') { $q = $this->db->getRow($q); - $this->aliasListing[$id] = array( + $this->aliasListing[$id] = array( 'id' => (int)$q['id'], - 'alias' => $q['alias']=='' ? $q['id'] : $q['alias'], + 'alias' => $q['alias'] == '' ? $q['id'] : $q['alias'], 'parent' => (int)$q['parent'], 'isfolder' => (int)$q['isfolder'], ); - if($this->aliasListing[$id]['parent']>0){ + if ($this->aliasListing[$id]['parent'] > 0) { //fix alias_path_usage if ($this->config['use_alias_path'] == '1') { //&& $tmp['path'] != '' - fix error slash with epty path $tmp = $this->getAliasListing($this->aliasListing[$id]['parent']); - $this->aliasListing[$id]['path'] = $tmp['path'] . ($tmp['alias_visible'] ? (($tmp['parent']>0 && $tmp['path'] != '') ? '/' : '') .$tmp['alias'] : ''); + $this->aliasListing[$id]['path'] = $tmp['path'] . ($tmp['alias_visible'] ? (($tmp['parent'] > 0 && $tmp['path'] != '') ? '/' : '') . $tmp['alias'] : ''); } else { $this->aliasListing[$id]['path'] = ''; } @@ -3469,9 +4083,11 @@ function getAliasListing($id){ * * Note: most code accesses the config array directly and we will continue to support this. * - * @return boolean|string + * @param string $name + * @return bool|string */ - function getConfig($name= '') { + function getConfig($name = '') + { if (!empty ($this->config[$name])) { return $this->config[$name]; } else { @@ -3482,24 +4098,26 @@ function getConfig($name= '') { /** * Returns the MODX version information as version, branch, release date and full application name. * + * @param null $data * @return array */ - - function getVersionData($data=null) { - $out=array(); - if(empty($this->version) || !is_array($this->version)){ + + function getVersionData($data = null) + { + $out = array(); + if (empty($this->version) || !is_array($this->version)) { //include for compatibility modx version < 1.0.10 include MODX_MANAGER_PATH . "includes/version.inc.php"; - $this->version=array(); - $this->version['version']= isset($modx_version) ? $modx_version : ''; - $this->version['branch']= isset($modx_branch) ? $modx_branch : ''; - $this->version['release_date']= isset($modx_release_date) ? $modx_release_date : ''; - $this->version['full_appname']= isset($modx_full_appname) ? $modx_full_appname : ''; + $this->version = array(); + $this->version['version'] = isset($modx_version) ? $modx_version : ''; + $this->version['branch'] = isset($modx_branch) ? $modx_branch : ''; + $this->version['release_date'] = isset($modx_release_date) ? $modx_release_date : ''; + $this->version['full_appname'] = isset($modx_full_appname) ? $modx_full_appname : ''; $this->version['new_version'] = isset($this->config['newversiontext']) ? $this->config['newversiontext'] : ''; } return (!is_null($data) && is_array($this->version) && isset($this->version[$data])) ? $this->version[$data] : $this->version; } - + /** * Executes a snippet. * @@ -3507,21 +4125,22 @@ function getVersionData($data=null) { * @param array $params Default: Empty array * @return string */ - function runSnippet($snippetName, $params= array ()) { + function runSnippet($snippetName, $params = array()) + { if (isset ($this->snippetCache[$snippetName])) { $snippet = $this->snippetCache[$snippetName]; $properties = !empty($this->snippetCache[$snippetName . "Props"]) ? $this->snippetCache[$snippetName . "Props"] : ''; } else { // not in cache so let's check the db - $sql = "SELECT ss.`name`, ss.`snippet`, ss.`properties`, sm.properties as `sharedproperties` FROM " . $this->getFullTableName("site_snippets") . " as ss LEFT JOIN ".$this->getFullTableName('site_modules')." as sm on sm.guid=ss.moduleguid WHERE ss.`name`='" . $this->db->escape($snippetName) . "' AND ss.disabled=0;"; + $sql = "SELECT ss.`name`, ss.`snippet`, ss.`properties`, sm.properties as `sharedproperties` FROM " . $this->getFullTableName("site_snippets") . " as ss LEFT JOIN " . $this->getFullTableName('site_modules') . " as sm on sm.guid=ss.moduleguid WHERE ss.`name`='" . $this->db->escape($snippetName) . "' AND ss.disabled=0;"; $result = $this->db->query($sql); if ($this->db->getRecordCount($result) == 1) { $row = $this->db->getRow($result); - $snippet = $this->snippetCache[$snippetName]= $row['snippet']; + $snippet = $this->snippetCache[$snippetName] = $row['snippet']; $mergedProperties = array_merge($this->parseProperties($row['properties']), $this->parseProperties($row['sharedproperties'])); - $properties = $this->snippetCache[$snippetName . "Props"]= json_encode($mergedProperties); + $properties = $this->snippetCache[$snippetName . "Props"] = json_encode($mergedProperties); } else { - $snippet = $this->snippetCache[$snippetName]= "return false;"; - $properties = $this->snippetCache[$snippetName . "Props"]= ''; + $snippet = $this->snippetCache[$snippetName] = "return false;"; + $properties = $this->snippetCache[$snippetName . "Props"] = ''; } } // load default params/properties @@ -3534,127 +4153,155 @@ function runSnippet($snippetName, $params= array ()) { /** * Returns the chunk content for the given chunk name - * + * * @param string $chunkName * @return boolean|string */ - function getChunk($chunkName) { + function getChunk($chunkName) + { $out = null; - if(empty($chunkName)) return $out; + if (empty($chunkName)) { + return $out; + } if (isset ($this->chunkCache[$chunkName])) { $out = $this->chunkCache[$chunkName]; - } else if(stripos($chunkName,'@FILE')===0) { + } else if (stripos($chunkName, '@FILE') === 0) { $out = $this->chunkCache[$chunkName] = $this->atBindFileContent($chunkName); } else { $where = sprintf("`name`='%s' AND disabled=0", $this->db->escape($chunkName)); - $rs= $this->db->select('snippet', '[+prefix+]site_htmlsnippets', $where); - if ($this->db->getRecordCount($rs)==1) { - $row= $this->db->getRow($rs); - $out = $this->chunkCache[$chunkName]= $row['snippet']; + $rs = $this->db->select('snippet', '[+prefix+]site_htmlsnippets', $where); + if ($this->db->getRecordCount($rs) == 1) { + $row = $this->db->getRow($rs); + $out = $this->chunkCache[$chunkName] = $row['snippet']; + } else { + $out = $this->chunkCache[$chunkName] = null; } - else $out = $this->chunkCache[$chunkName] = null; } return $out; } - + /** * parseText * @version 1.0 (2013-10-17) - * + * * @desc Replaces placeholders in text with required values. - * - * @param $chunk {string} - String to parse. @required - * @param $chunkArr {array} - Array of values. Key — placeholder name, value — value. @required - * @param $prefix {string} - Placeholders prefix. Default: '[+'. - * @param $suffix {string} - Placeholders suffix. Default: '+]'. - * - * @return {string} - Parsed text. - */ - function parseText($tpl='', $ph=array(), $left= '[+', $right= '+]', $execModifier=true) - { - if(!$ph) return $tpl; - if(!$tpl) return $tpl; - - if(stripos($tpl,'<@LITERAL>')!==false) $tpl= $this->escapeLiteralTagsContent($tpl); - - $matches = $this->getTagsFromContent($tpl,$left,$right); - if(!$matches) return $tpl; - - foreach($matches[1] as $i=>$key) { - - if(strpos($key,':')!==false && $execModifier) - list($key,$modifiers)=$this->splitKeyAndFilter($key); - else $modifiers = false; - -// if(!isset($ph[$key])) continue; - if(!array_key_exists($key,$ph)) continue; //NULL values must be saved in placeholders, if we got them from database string - + * + * @param string $tpl + * @param array $ph + * @param string $left + * @param string $right + * @param bool $execModifier + * @return mixed|string {string} - Parsed text. + * - Parsed text. + * @internal param $chunk {string} - String to parse. - String to parse. @required + * @internal param $chunkArr {array} - Array of values. Key — placeholder name, value — value. - Array of values. Key — placeholder name, value — value. @required + * @internal param $prefix {string} - Placeholders prefix. Default: '[+'. - Placeholders prefix. Default: '[+'. + * @internal param $suffix {string} - Placeholders suffix. Default: '+]'. - Placeholders suffix. Default: '+]'. + * + */ + function parseText($tpl = '', $ph = array(), $left = '[+', $right = '+]', $execModifier = true) + { + if (!$ph) { + return $tpl; + } + if (!$tpl) { + return $tpl; + } + + if (stripos($tpl, '<@LITERAL>') !== false) { + $tpl = $this->escapeLiteralTagsContent($tpl); + } + + $matches = $this->getTagsFromContent($tpl, $left, $right); + if (!$matches) { + return $tpl; + } + + foreach ($matches[1] as $i => $key) { + + if (strpos($key, ':') !== false && $execModifier) { + list($key, $modifiers) = $this->splitKeyAndFilter($key); + } else { + $modifiers = false; + } + + // if(!isset($ph[$key])) continue; + if (!array_key_exists($key, $ph)) { + continue; + } //NULL values must be saved in placeholders, if we got them from database string + $value = $ph[$key]; - + $s = &$matches[0][$i]; - if($modifiers!==false) { - if(strpos($modifiers,$left)!==false) { - $modifiers = $this->parseText($modifiers,$ph,$left,$right); + if ($modifiers !== false) { + if (strpos($modifiers, $left) !== false) { + $modifiers = $this->parseText($modifiers, $ph, $left, $right); } - $value = $this->applyFilter($value,$modifiers,$key); + $value = $this->applyFilter($value, $modifiers, $key); + } + if (strpos($tpl, $s) !== false) { + $tpl = str_replace($s, $value, $tpl); + } else { + $this->addLog('parseText parse error', $_SERVER['REQUEST_URI'] . $s, 2); } - if(strpos($tpl,$s)!==false) $tpl= str_replace($s, $value, $tpl); - else $this->addLog('parseText parse error',$_SERVER['REQUEST_URI'].$s,2); } - + return $tpl; } - + /** * parseChunk * @version 1.1 (2013-10-17) - * + * * @desc Replaces placeholders in a chunk with required values. - * + * * @param $chunkName {string} - Name of chunk to parse. @required * @param $chunkArr {array} - Array of values. Key — placeholder name, value — value. @required - * @param $prefix {string} - Placeholders prefix. Default: '{'. - * @param $suffix {string} - Placeholders suffix. Default: '}'. - * - * @return {string; false} - Parsed chunk or false if $chunkArr is not array. + * @param string $prefix {string} + * - Placeholders prefix. Default: '{'. + * @param string $suffix {string} + * - Placeholders suffix. Default: '}'. + * @return bool|mixed|string {string; false} - Parsed chunk or false if $chunkArr is not array. + * - Parsed chunk or false if $chunkArr is not array. */ - function parseChunk($chunkName, $chunkArr, $prefix = '{', $suffix = '}'){ + function parseChunk($chunkName, $chunkArr, $prefix = '{', $suffix = '}') + { //TODO: Wouldn't it be more practical to return the contents of a chunk instead of false? - if (!is_array($chunkArr)){ + if (!is_array($chunkArr)) { return false; } - + return $this->parseText($this->getChunk($chunkName), $chunkArr, $prefix, $suffix); } - + /** * getTpl * get template for snippets * @param $tpl {string} - * - * @return {string} + * @return bool|string {string} */ - function getTpl($tpl){ + function getTpl($tpl) + { $template = $tpl; if (preg_match("~^@([^:\s]+)[:\s]+(.+)$~", $tpl, $match)) { $command = strtoupper($match[1]); $template = $match[2]; } switch ($command) { - case 'CODE': + case 'CODE': break; - case 'FILE': - $template=file_get_contents(MODX_BASE_PATH . $template); + case 'FILE': + $template = file_get_contents(MODX_BASE_PATH . $template); break; - case 'CHUNK': - $template = $this->getChunk($template); + case 'CHUNK': + $template = $this->getChunk($template); break; - case 'DOCUMENT': - $doc = $this->getDocument($template, 'content', 'all'); - $template = $doc['content']; + case 'DOCUMENT': + $doc = $this->getDocument($template, 'content', 'all'); + $template = $doc['content']; break; - case 'SELECT': - $this->db->getValue($this->db->query("SELECT {$template}")); + case 'SELECT': + $this->db->getValue($this->db->query("SELECT {$template}")); break; default: if (!($template = $this->getChunk($tpl))) { @@ -3663,7 +4310,7 @@ function getTpl($tpl){ } return $template; } - + /** * Returns the timestamp in the date format defined in $this->config['datetime_format'] * @@ -3671,12 +4318,15 @@ function getTpl($tpl){ * @param string $mode Default: Empty string (adds the time as below). Can also be 'dateOnly' for no time or 'formatOnly' to get the datetime_format string. * @return string */ - function toDateFormat($timestamp = 0, $mode = '') { + function toDateFormat($timestamp = 0, $mode = '') + { $timestamp = trim($timestamp); - if($mode !== 'formatOnly' && empty($timestamp)) return '-'; + if ($mode !== 'formatOnly' && empty($timestamp)) { + return '-'; + } $timestamp = intval($timestamp); - - switch($this->config['datetime_format']) { + + switch ($this->config['datetime_format']) { case 'YYYY/mm/dd': $dateFormat = '%Y/%m/%d'; break; @@ -3692,7 +4342,7 @@ function toDateFormat($timestamp = 0, $mode = '') { break; */ } - + if (empty($mode)) { $strTime = strftime($dateFormat . " %H:%M:%S", $timestamp); } elseif ($mode == 'dateOnly') { @@ -3709,21 +4359,30 @@ function toDateFormat($timestamp = 0, $mode = '') { * @param string $str * @return string */ - function toTimeStamp($str) { + function toTimeStamp($str) + { $str = trim($str); - if (empty($str)) {return '';} + if (empty($str)) { + return ''; + } - switch($this->config['datetime_format']) { + switch ($this->config['datetime_format']) { case 'YYYY/mm/dd': - if (!preg_match('/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}[0-9 :]*$/', $str)) {return '';} + if (!preg_match('/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}[0-9 :]*$/', $str)) { + return ''; + } list ($Y, $m, $d, $H, $M, $S) = sscanf($str, '%4d/%2d/%2d %2d:%2d:%2d'); break; case 'dd-mm-YYYY': - if (!preg_match('/^[0-9]{2}-[0-9]{2}-[0-9]{4}[0-9 :]*$/', $str)) {return '';} + if (!preg_match('/^[0-9]{2}-[0-9]{2}-[0-9]{4}[0-9 :]*$/', $str)) { + return ''; + } list ($d, $m, $Y, $H, $M, $S) = sscanf($str, '%2d-%2d-%4d %2d:%2d:%2d'); break; case 'mm/dd/YYYY': - if (!preg_match('/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}[0-9 :]*$/', $str)) {return '';} + if (!preg_match('/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}[0-9 :]*$/', $str)) { + return ''; + } list ($m, $d, $Y, $H, $M, $S) = sscanf($str, '%2d/%2d/%4d %2d:%2d:%2d'); break; /* @@ -3733,7 +4392,11 @@ function toTimeStamp($str) { break; */ } - if (!$H && !$M && !$S) {$H = 0; $M = 0; $S = 0;} + if (!$H && !$M && !$S) { + $H = 0; + $M = 0; + $S = 0; + } $timeStamp = mktime($H, $M, $S, $m, $d, $Y); $timeStamp = intval($timeStamp); return $timeStamp; @@ -3746,134 +4409,148 @@ function toTimeStamp($str) { * * @param int $parentid The parent docid * Default: 0 (site root) - * @param array $tvidnames. Which TVs to fetch - Can relate to the TV ids in the db (array elements should be numeric only) + * @param array $tvidnames . Which TVs to fetch - Can relate to the TV ids in the db (array elements should be numeric only) * or the TV names (array elements should be names only) * Default: Empty array * @param int $published Whether published or unpublished documents are in the result * Default: 1 * @param string $docsort How to sort the result array (field) * Default: menuindex - * @param ASC $docsortdir How to sort the result array (direction) + * @param ASC|string $docsortdir How to sort the result array (direction) * Default: ASC * @param string $tvfields Fields to fetch from site_tmplvars, default '*' * Default: * * @param string $tvsort How to sort each element of the result array i.e. how to sort the TVs (field) * Default: rank - * @param string $tvsortdir How to sort each element of the result array i.e. how to sort the TVs (direction) + * @param string $tvsortdir How to sort each element of the result array i.e. how to sort the TVs (direction) * Default: ASC - * @return boolean|array + * @return array|bool */ - function getDocumentChildrenTVars($parentid= 0, $tvidnames= array (), $published= 1, $docsort= "menuindex", $docsortdir= "ASC", $tvfields= "*", $tvsort= "rank", $tvsortdir= "ASC") { - $docs= $this->getDocumentChildren($parentid, $published, 0, '*', '', $docsort, $docsortdir); - if (!$docs) + function getDocumentChildrenTVars($parentid = 0, $tvidnames = array(), $published = 1, $docsort = "menuindex", $docsortdir = "ASC", $tvfields = "*", $tvsort = "rank", $tvsortdir = "ASC") + { + $docs = $this->getDocumentChildren($parentid, $published, 0, '*', '', $docsort, $docsortdir); + if (!$docs) { return false; - else { - $result= array (); + } else { + $result = array(); // get user defined template variables - if($tvfields) { + if ($tvfields) { $_ = array_filter(array_map('trim', explode(',', $tvfields))); - foreach($_ as $i=>$v) { - if($v==='value') unset($_[$i]); - else $_[$i] = 'tv.' . $v; + foreach ($_ as $i => $v) { + if ($v === 'value') { + unset($_[$i]); + } else { + $_[$i] = 'tv.' . $v; + } } $fields = join(',', $_); + } else { + $fields = "tv.*"; } - else $fields = "tv.*"; - - if($tvsort!='') { + + if ($tvsort != '') { $tvsort = 'tv.' . join(',tv.', array_filter(array_map('trim', explode(',', $tvsort)))); } - if ($tvidnames == "*") - $query= "tv.id<>0"; - else - $query= (is_numeric($tvidnames[0]) ? "tv.id" : "tv.name") . " IN ('" . join("','", $tvidnames) . "')"; - - if ($docgrp= $this->getUserDocGroups()) $docgrp= join(',', $docgrp); + if ($tvidnames == "*") { + $query = "tv.id<>0"; + } else { + $query = (is_numeric($tvidnames[0]) ? "tv.id" : "tv.name") . " IN ('" . join("','", $tvidnames) . "')"; + } + + if ($docgrp = $this->getUserDocGroups()) { + $docgrp = join(',', $docgrp); + } foreach ($docs as $doc) { - $docid= $doc['id']; + $docid = $doc['id']; - $rs = $this->db->select( - "{$fields}, IF(tvc.value!='',tvc.value,tv.default_text) as value ", - "[+prefix+]site_tmplvars tv + $rs = $this->db->select("{$fields}, IF(tvc.value!='',tvc.value,tv.default_text) as value ", "[+prefix+]site_tmplvars tv INNER JOIN [+prefix+]site_tmplvar_templates tvtpl ON tvtpl.tmplvarid = tv.id - LEFT JOIN [+prefix+]site_tmplvar_contentvalues tvc ON tvc.tmplvarid=tv.id AND tvc.contentid='{$docid}'", - "{$query} AND tvtpl.templateid = '{$doc['template']}'", - ($tvsort ? "{$tvsort} {$tvsortdir}" : "") - ); + LEFT JOIN [+prefix+]site_tmplvar_contentvalues tvc ON tvc.tmplvarid=tv.id AND tvc.contentid='{$docid}'", "{$query} AND tvtpl.templateid = '{$doc['template']}'", ($tvsort ? "{$tvsort} {$tvsortdir}" : "")); $tvs = $this->db->makeArray($rs); // get default/built-in template variables ksort($doc); foreach ($doc as $key => $value) { - if ($tvidnames == '*' || in_array($key, $tvidnames)) - $tvs[] = array ('name'=>$key,'value'=>$value); + if ($tvidnames == '*' || in_array($key, $tvidnames)) { + $tvs[] = array('name' => $key, 'value' => $value); + } + } + if (count($tvs)) { + $result[] = $tvs; } - if (count($tvs)) $result[] = $tvs; } return $result; } } - + /** * getDocumentChildrenTVarOutput * @version 1.1 (2014-02-19) - * + * * @desc Returns an array where each element represents one child doc and contains the result from getTemplateVarOutput(). - * - * @param $parentid {integer} - Id of parent document. Default: 0 (site root). - * @param $tvidnames {array; '*'} - Which TVs to fetch. In the form expected by getTemplateVarOutput(). Default: array(). - * @param $published {0; 1; 'all'} - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. - * @param $sortBy {string} - How to sort the result array (field). Default: 'menuindex'. - * @param $sortDir {'ASC'; 'DESC'} - How to sort the result array (direction). Default: 'ASC'. - * @param $where {string} - SQL WHERE condition (use only document fields, not TV). Default: ''. - * @param $resultKey {string; false} - Field, which values are keys into result array. Use the “false”, that result array keys just will be numbered. Default: 'id'. - * - * @return {array; false} - Result array, or false. + * + * @param int $parentid {integer} + * - Id of parent document. Default: 0 (site root). + * @param array $tvidnames {array; '*'} + * - Which TVs to fetch. In the form expected by getTemplateVarOutput(). Default: array(). + * @param int $published {0; 1; 'all'} + * - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. + * @param string $sortBy {string} + * - How to sort the result array (field). Default: 'menuindex'. + * @param string $sortDir {'ASC'; 'DESC'} + * - How to sort the result array (direction). Default: 'ASC'. + * @param string $where {string} + * - SQL WHERE condition (use only document fields, not TV). Default: ''. + * @param string $resultKey {string; false} + * - Field, which values are keys into result array. Use the “false”, that result array keys just will be numbered. Default: 'id'. + * @return array {array; false} - Result array, or false. + * - Result array, or false. */ - function getDocumentChildrenTVarOutput($parentid = 0, $tvidnames = array(), $published = 1, $sortBy = 'menuindex', $sortDir = 'ASC', $where = '', $resultKey = 'id'){ + function getDocumentChildrenTVarOutput($parentid = 0, $tvidnames = array(), $published = 1, $sortBy = 'menuindex', $sortDir = 'ASC', $where = '', $resultKey = 'id') + { $docs = $this->getDocumentChildren($parentid, $published, 0, 'id', $where, $sortBy, $sortDir); - - if (!$docs){ + + if (!$docs) { return false; - }else{ + } else { $result = array(); - + $unsetResultKey = false; - - if ($resultKey !== false){ - if (is_array($tvidnames)){ - if (count($tvidnames) != 0 && !in_array($resultKey, $tvidnames)){ + + if ($resultKey !== false) { + if (is_array($tvidnames)) { + if (count($tvidnames) != 0 && !in_array($resultKey, $tvidnames)) { $tvidnames[] = $resultKey; $unsetResultKey = true; } - }else if ($tvidnames != '*' && $tvidnames != $resultKey){ + } else if ($tvidnames != '*' && $tvidnames != $resultKey) { $tvidnames = array($tvidnames, $resultKey); $unsetResultKey = true; } } - - for ($i = 0; $i < count($docs); $i++){ + + for ($i = 0; $i < count($docs); $i++) { $tvs = $this->getTemplateVarOutput($tvidnames, $docs[$i]['id'], $published); - - if ($tvs){ - if ($resultKey !== false && array_key_exists($resultKey, $tvs)){ + + if ($tvs) { + if ($resultKey !== false && array_key_exists($resultKey, $tvs)) { $result[$tvs[$resultKey]] = $tvs; - - if ($unsetResultKey){ + + if ($unsetResultKey) { unset($result[$tvs[$resultKey]][$resultKey]); } - }else{ + } else { $result[] = $tvs; } } } - + return $result; } } - + /** * Modified by Raymond for TV - Orig Modified by Apodigm - DocVars * Returns a single site_content field or TV record from the db. @@ -3884,150 +4561,155 @@ function getDocumentChildrenTVarOutput($parentid = 0, $tvidnames = array(), $pub * * @param string $idname Can be a TV id or name * @param string $fields Fields to fetch from site_tmplvars. Default: * - * @param type $docid Docid. Defaults to empty string which indicates the current document. + * @param string|type $docid Docid. Defaults to empty string which indicates the current document. * @param int $published Whether published or unpublished documents are in the result * Default: 1 - * @return boolean + * @return bool */ - function getTemplateVar($idname= "", $fields= "*", $docid= "", $published= 1) { + function getTemplateVar($idname = "", $fields = "*", $docid = "", $published = 1) + { if ($idname == "") { return false; } else { - $result= $this->getTemplateVars(array ($idname), $fields, $docid, $published, "", ""); //remove sorting for speed + $result = $this->getTemplateVars(array($idname), $fields, $docid, $published, "", ""); //remove sorting for speed return ($result != false) ? $result[0] : false; } } - + /** * getTemplateVars * @version 1.0.1 (2014-02-19) - * + * * @desc Returns an array of site_content field fields and/or TV records from the db. * Elements representing a site content field consist of an associative array of 'name' and 'value'. * Elements representing a TV consist of an array representing a db row including the fields specified in $fields. - * + * * @param $idnames {array; '*'} - Which TVs to fetch. Can relate to the TV ids in the db (array elements should be numeric only) or the TV names (array elements should be names only). @required * @param $fields {comma separated string; '*'} - Fields names in the TV table of MODx database. Default: '*' * @param $docid {integer; ''} - Id of a document to get. Default: an empty string which indicates the current document. * @param $published {0; 1; 'all'} - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. * @param $sort {comma separated string} - Fields of the TV table to sort by. Default: 'rank'. * @param $dir {'ASC'; 'DESC'} - How to sort the result array (direction). Default: 'ASC'. - * + * * @return {array; false} - Result array, or false. */ - function getTemplateVars($idnames = array(), $fields = '*', $docid = '', $published = 1, $sort = 'rank', $dir = 'ASC'){ - $cacheKey = md5(print_r(func_get_args(),true)); - if(isset($this->tmpCache[__FUNCTION__][$cacheKey])) return $this->tmpCache[__FUNCTION__][$cacheKey]; - - if (($idnames != '*' && !is_array($idnames)) || count($idnames) == 0){ + function getTemplateVars($idnames = array(), $fields = '*', $docid = '', $published = 1, $sort = 'rank', $dir = 'ASC') + { + $cacheKey = md5(print_r(func_get_args(), true)); + if (isset($this->tmpCache[__FUNCTION__][$cacheKey])) { + return $this->tmpCache[__FUNCTION__][$cacheKey]; + } + + if (($idnames != '*' && !is_array($idnames)) || count($idnames) == 0) { return false; - }else{ - + } else { + // get document record - if ($docid == ''){ + if ($docid == '') { $docid = $this->documentIdentifier; $docRow = $this->documentObject; - }else{ + } else { $docRow = $this->getDocument($docid, '*', $published); - - if (!$docRow){ + + if (!$docRow) { $this->tmpCache[__FUNCTION__][$cacheKey] = false; return false; } } - + // get user defined template variables - $fields = ($fields == '') ? 'tv.*' : 'tv.'.implode(',tv.', array_filter(array_map('trim', explode(',', $fields)))); - $sort = ($sort == '') ? '' : 'tv.'.implode(',tv.', array_filter(array_map('trim', explode(',', $sort)))); - - if ($idnames == '*'){ + $fields = ($fields == '') ? 'tv.*' : 'tv.' . implode(',tv.', array_filter(array_map('trim', explode(',', $fields)))); + $sort = ($sort == '') ? '' : 'tv.' . implode(',tv.', array_filter(array_map('trim', explode(',', $sort)))); + + if ($idnames == '*') { $query = 'tv.id<>0'; - }else{ - $query = (is_numeric($idnames[0]) ? 'tv.id' : 'tv.name')." IN ('".implode("','", $idnames)."')"; + } else { + $query = (is_numeric($idnames[0]) ? 'tv.id' : 'tv.name') . " IN ('" . implode("','", $idnames) . "')"; } - - $rs = $this->db->select( - "{$fields}, IF(tvc.value != '', tvc.value, tv.default_text) as value", - $this->getFullTableName('site_tmplvars') . " tv + + $rs = $this->db->select("{$fields}, IF(tvc.value != '', tvc.value, tv.default_text) as value", $this->getFullTableName('site_tmplvars') . " tv INNER JOIN " . $this->getFullTableName('site_tmplvar_templates') . " tvtpl ON tvtpl.tmplvarid = tv.id - LEFT JOIN " . $this->getFullTableName('site_tmplvar_contentvalues') . " tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$docid}'", - "{$query} AND tvtpl.templateid = '{$docRow['template']}'", - ($sort ? "{$sort} {$dir}" : "") - ); - + LEFT JOIN " . $this->getFullTableName('site_tmplvar_contentvalues') . " tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$docid}'", "{$query} AND tvtpl.templateid = '{$docRow['template']}'", ($sort ? "{$sort} {$dir}" : "")); + $result = $this->db->makeArray($rs); - + // get default/built-in template variables ksort($docRow); - - foreach ($docRow as $key => $value){ - if ($idnames == '*' || in_array($key, $idnames)){ + + foreach ($docRow as $key => $value) { + if ($idnames == '*' || in_array($key, $idnames)) { array_push($result, array( 'name' => $key, 'value' => $value )); } } - + $this->tmpCache[__FUNCTION__][$cacheKey] = $result; - + return $result; } } - + /** * getTemplateVarOutput * @version 1.0.1 (2014-02-19) - * + * * @desc Returns an associative array containing TV rendered output values. - * - * @param $idnames {array; '*'} - Which TVs to fetch - Can relate to the TV ids in the db (array elements should be numeric only) or the TV names (array elements should be names only). @required - * @param $docid {integer; ''} - Id of a document to get. Default: an empty string which indicates the current document. - * @param $published {0; 1; 'all'} - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. - * @param $sep {string} - Separator that is used while concatenating in getTVDisplayFormat(). Default: ''. - * - * @return {array; false} - Result array, or false. + * + * @param array $idnames {array; '*'} + * - Which TVs to fetch - Can relate to the TV ids in the db (array elements should be numeric only) or the TV names (array elements should be names only). @required + * @param string $docid {integer; ''} + * - Id of a document to get. Default: an empty string which indicates the current document. + * @param int $published {0; 1; 'all'} + * - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. + * @param string $sep {string} + * - Separator that is used while concatenating in getTVDisplayFormat(). Default: ''. + * @return array {array; false} - Result array, or false. + * - Result array, or false. */ - function getTemplateVarOutput($idnames = array(), $docid = '', $published = 1, $sep = ''){ - if (count($idnames) == 0){ + function getTemplateVarOutput($idnames = array(), $docid = '', $published = 1, $sep = '') + { + if (count($idnames) == 0) { return false; - }else{ + } else { $output = array(); $vars = ($idnames == '*' || is_array($idnames)) ? $idnames : array($idnames); - + $docid = intval($docid) ? intval($docid) : $this->documentIdentifier; // remove sort for speed $result = $this->getTemplateVars($vars, '*', $docid, $published, '', ''); - - if ($result == false){ + + if ($result == false) { return false; - }else{ - $baspath = MODX_MANAGER_PATH.'includes'; - include_once $baspath.'/tmplvars.format.inc.php'; - include_once $baspath.'/tmplvars.commands.inc.php'; - - for ($i= 0; $i < count($result); $i++){ + } else { + $baspath = MODX_MANAGER_PATH . 'includes'; + include_once $baspath . '/tmplvars.format.inc.php'; + include_once $baspath . '/tmplvars.commands.inc.php'; + + for ($i = 0; $i < count($result); $i++) { $row = $result[$i]; - - if (!isset($row['id']) or !$row['id']){ + + if (!isset($row['id']) or !$row['id']) { $output[$row['name']] = $row['value']; - }else{ + } else { $output[$row['name']] = getTVDisplayFormat($row['name'], $row['value'], $row['display'], $row['display_params'], $row['type'], $docid, $sep); } } - + return $output; } } } - + /** * Returns the full table name based on db settings * * @param string $tbl Table name * @return string Table name with prefix */ - function getFullTableName($tbl) { + function getFullTableName($tbl) + { return $this->db->config['dbase'] . ".`" . $this->db->config['table_prefix'] . $tbl . "`"; } @@ -4037,7 +4719,8 @@ function getFullTableName($tbl) { * @param string $name Placeholder name * @return string Placeholder value */ - function getPlaceholder($name) { + function getPlaceholder($name) + { return isset($this->placeholders[$name]) ? $this->placeholders[$name] : null; } @@ -4047,8 +4730,9 @@ function getPlaceholder($name) { * @param string $name The name of the placeholder * @param string $value The value of the placeholder */ - function setPlaceholder($name, $value) { - $this->placeholders[$name]= $value; + function setPlaceholder($name, $value) + { + $this->placeholders[$name] = $value; } /** @@ -4057,9 +4741,10 @@ function setPlaceholder($name, $value) { * @param object|array $subject * @param string $prefix */ - function toPlaceholders($subject, $prefix= '') { + function toPlaceholders($subject, $prefix = '') + { if (is_object($subject)) { - $subject= get_object_vars($subject); + $subject = get_object_vars($subject); } if (is_array($subject)) { foreach ($subject as $key => $value) { @@ -4075,7 +4760,8 @@ function toPlaceholders($subject, $prefix= '') { * @param object|array $value * @param string $prefix */ - function toPlaceholder($key, $value, $prefix= '') { + function toPlaceholder($key, $value, $prefix = '') + { if (is_array($value) || is_object($value)) { $this->toPlaceholders($value, "{$prefix}{$key}."); } else { @@ -4089,19 +4775,21 @@ function toPlaceholder($key, $value, $prefix= '') { * @global string $base_url * @return string The complete URL to the manager folder */ - function getManagerPath() { + function getManagerPath() + { return MODX_MANAGER_URL; } - /** + /** * Returns the cache relative URL/path with respect to the site root. * * @global string $base_url * @return string The complete URL to the cache folder */ - function getCachePath() { + function getCachePath() + { global $base_url; - $pth= $base_url . $this->getCacheFolder(); + $pth = $base_url . $this->getCacheFolder(); return $pth; } @@ -4116,8 +4804,9 @@ function getCachePath() { * @param int $private Whether it is a private message, or not * Default : 0 */ - function sendAlert($type, $to, $from, $subject, $msg, $private= 0) { - $private= ($private) ? 1 : 0; + function sendAlert($type, $to, $from, $subject, $msg, $private = 0) + { + $private = ($private) ? 1 : 0; if (!is_numeric($to)) { // Query for the To ID $rs = $this->db->select('id', $this->getFullTableName("manager_users"), "username='{$to}'"); @@ -4129,39 +4818,39 @@ function sendAlert($type, $to, $from, $subject, $msg, $private= 0) { $from = $this->db->getValue($rs); } // insert a new message into user_messages - $this->db->insert( - array( - 'type' => $type, - 'subject' => $subject, - 'message' => $msg, - 'sender' => $from, - 'recipient' => $to, - 'private' => $private, - 'postdate' => $_SERVER['REQUEST_TIME'] + $this->config['server_offset_time'], - 'messageread' => 0, - ), $this->getFullTableName('user_messages')); + $this->db->insert(array( + 'type' => $type, + 'subject' => $subject, + 'message' => $msg, + 'sender' => $from, + 'recipient' => $to, + 'private' => $private, + 'postdate' => $_SERVER['REQUEST_TIME'] + $this->config['server_offset_time'], + 'messageread' => 0, + ), $this->getFullTableName('user_messages')); } /** * Returns current user id. * - * @param string $context. Default is an empty string which indicates the method should automatically pick 'web (frontend) or 'mgr' (backend) + * @param string $context . Default is an empty string which indicates the method should automatically pick 'web (frontend) or 'mgr' (backend) * @return string */ - public function getLoginUserID($context= '') { + public function getLoginUserID($context = '') + { $out = false; - if(!empty($context)){ - if(is_scalar($context) && isset($_SESSION[$context . 'Validated'])){ + if (!empty($context)) { + if (is_scalar($context) && isset($_SESSION[$context . 'Validated'])) { $out = $_SESSION[$context . 'InternalKey']; } - }else{ - switch(true){ - case ($this->isFrontend() && isset ($_SESSION['webValidated'])):{ + } else { + switch (true) { + case ($this->isFrontend() && isset ($_SESSION['webValidated'])): { $out = $_SESSION['webInternalKey']; break; } - case ($this->isBackend() && isset ($_SESSION['mgrValidated'])):{ + case ($this->isBackend() && isset ($_SESSION['mgrValidated'])): { $out = $_SESSION['mgrInternalKey']; break; } @@ -4173,23 +4862,24 @@ public function getLoginUserID($context= '') { /** * Returns current user name * - * @param string $context. Default is an empty string which indicates the method should automatically pick 'web (frontend) or 'mgr' (backend) + * @param string $context . Default is an empty string which indicates the method should automatically pick 'web (frontend) or 'mgr' (backend) * @return string */ - function getLoginUserName($context= '') { + function getLoginUserName($context = '') + { $out = false; - if(!empty($context)){ - if(is_scalar($context) && isset($_SESSION[$context . 'Validated'])){ + if (!empty($context)) { + if (is_scalar($context) && isset($_SESSION[$context . 'Validated'])) { $out = $_SESSION[$context . 'Shortname']; } - }else{ - switch(true){ - case ($this->isFrontend() && isset ($_SESSION['webValidated'])):{ + } else { + switch (true) { + case ($this->isFrontend() && isset ($_SESSION['webValidated'])): { $out = $_SESSION['webShortname']; break; } - case ($this->isBackend() && isset ($_SESSION['mgrValidated'])):{ + case ($this->isBackend() && isset ($_SESSION['mgrValidated'])): { $out = $_SESSION['mgrShortname']; break; } @@ -4198,16 +4888,16 @@ function getLoginUserName($context= '') { return $out; } - /** + /** * Returns current login user type - web or manager * * @return string */ - function getLoginUserType() { + function getLoginUserType() + { if ($this->isFrontend() && isset ($_SESSION['webValidated'])) { return 'web'; - } - elseif ($this->isBackend() && isset ($_SESSION['mgrValidated'])) { + } elseif ($this->isBackend() && isset ($_SESSION['mgrValidated'])) { return 'manager'; } else { return ''; @@ -4220,20 +4910,27 @@ function getLoginUserType() { * @param int $uid * @return boolean|string */ - function getUserInfo($uid) { - if(isset($this->tmpCache[__FUNCTION__][$uid])) return $this->tmpCache[__FUNCTION__][$uid]; - - $from = '[+prefix+]manager_users mu INNER JOIN [+prefix+]user_attributes mua ON mua.internalkey=mu.id'; + function getUserInfo($uid) + { + if (isset($this->tmpCache[__FUNCTION__][$uid])) { + return $this->tmpCache[__FUNCTION__][$uid]; + } + + $from = '[+prefix+]manager_users mu INNER JOIN [+prefix+]user_attributes mua ON mua.internalkey=mu.id'; $where = sprintf("mu.id='%s'", $this->db->escape($uid)); $rs = $this->db->select('mu.username, mu.password, mua.*', $from, $where, '', 1); - - if(!$this->db->getRecordCount($rs)) return $this->tmpCache[__FUNCTION__][$uid] = false; - + + if (!$this->db->getRecordCount($rs)) { + return $this->tmpCache[__FUNCTION__][$uid] = false; + } + $row = $this->db->getRow($rs); - if (!isset($row['usertype']) || !$row['usertype']) $row['usertype']= 'manager'; - + if (!isset($row['usertype']) || !$row['usertype']) { + $row['usertype'] = 'manager'; + } + $this->tmpCache[__FUNCTION__][$uid] = $row; - + return $row; } @@ -4243,16 +4940,14 @@ function getUserInfo($uid) { * @param int $uid * @return boolean|string */ - function getWebUserInfo($uid) { - $rs = $this->db->select( - 'wu.username, wu.password, wua.*', - $this->getFullTableName("web_users") . " wu - INNER JOIN " . $this->getFullTableName("web_user_attributes") . " wua ON wua.internalkey=wu.id", - "wu.id='{$uid}'" - ); + function getWebUserInfo($uid) + { + $rs = $this->db->select('wu.username, wu.password, wua.*', $this->getFullTableName("web_users") . " wu + INNER JOIN " . $this->getFullTableName("web_user_attributes") . " wua ON wua.internalkey=wu.id", "wu.id='{$uid}'"); if ($row = $this->db->getRow($rs)) { - if (!isset($row['usertype']) or !$row["usertype"]) - $row["usertype"]= "web"; + if (!isset($row['usertype']) or !$row["usertype"]) { + $row["usertype"] = "web"; + } return $row; } } @@ -4266,36 +4961,36 @@ function getWebUserInfo($uid) { * Default: false * @return string|array */ - function getUserDocGroups($resolveIds = false) { + function getUserDocGroups($resolveIds = false) + { if ($this->isFrontend() && isset($_SESSION['webDocgroups']) && isset($_SESSION['webValidated'])) { $dg = $_SESSION['webDocgroups']; $dgn = isset($_SESSION['webDocgrpNames']) ? $_SESSION['webDocgrpNames'] : false; - } else - if ($this->isBackend() && isset($_SESSION['mgrDocgroups']) && isset($_SESSION['mgrValidated'])) { - $dg = $_SESSION['mgrDocgroups']; - $dgn = isset($_SESSION['mgrDocgrpNames']) ? $_SESSION['mgrDocgrpNames'] : false; + } else if ($this->isBackend() && isset($_SESSION['mgrDocgroups']) && isset($_SESSION['mgrValidated'])) { + $dg = $_SESSION['mgrDocgroups']; + $dgn = isset($_SESSION['mgrDocgrpNames']) ? $_SESSION['mgrDocgrpNames'] : false; + } else { + $dg = ''; + } + if (!$resolveIds) { + return $dg; + } else if (is_array($dgn)) { + return $dgn; + } else if (is_array($dg)) { + // resolve ids to names + $dgn = array(); + $ds = $this->db->select('name', $this->getFullTableName("documentgroup_names"), "id IN (" . implode(",", $dg) . ")"); + while ($row = $this->db->getRow($ds)) { + $dgn[] = $row['name']; + } + // cache docgroup names to session + if ($this->isFrontend()) { + $_SESSION['webDocgrpNames'] = $dgn; } else { - $dg = ''; + $_SESSION['mgrDocgrpNames'] = $dgn; } - if (!$resolveIds) - return $dg; - else - if (is_array($dgn)) - return $dgn; - else - if (is_array($dg)) { - // resolve ids to names - $dgn = array(); - $ds = $this->db->select('name', $this->getFullTableName("documentgroup_names"), "id IN (".implode(",", $dg).")"); - while ($row = $this->db->getRow($ds)) - $dgn[] = $row['name']; - // cache docgroup names to session - if ($this->isFrontend()) - $_SESSION['webDocgrpNames']= $dgn; - else - $_SESSION['mgrDocgrpNames']= $dgn; - return $dgn; - } + return $dgn; + } } /** @@ -4307,25 +5002,24 @@ function getUserDocGroups($resolveIds = false) { * @return string|boolean Returns true if successful, oterhwise return error * message */ - function changeWebUserPassword($oldPwd, $newPwd) { - $rt= false; + function changeWebUserPassword($oldPwd, $newPwd) + { + $rt = false; if ($_SESSION["webValidated"] == 1) { - $tbl= $this->getFullTableName("web_users"); - $ds = $this->db->select('id, username, password', $tbl, "id='".$this->getLoginUserID()."'"); - if ($row= $this->db->getRow($ds)) { + $tbl = $this->getFullTableName("web_users"); + $ds = $this->db->select('id, username, password', $tbl, "id='" . $this->getLoginUserID() . "'"); + if ($row = $this->db->getRow($ds)) { if ($row["password"] == md5($oldPwd)) { if (strlen($newPwd) < 6) { return "Password is too short!"; - } - elseif ($newPwd == "") { + } elseif ($newPwd == "") { return "You didn't specify a password for this user!"; } else { - $this->db->update( - array( - 'password' => $this->db->escape($newPwd), - ), $tbl, "id='".$this->getLoginUserID()."'"); + $this->db->update(array( + 'password' => $this->db->escape($newPwd), + ), $tbl, "id='" . $this->getLoginUserID() . "'"); // invoke OnWebChangePassword event - $this->invokeEvent("OnWebChangePassword", array ( + $this->invokeEvent("OnWebChangePassword", array( "userid" => $row["id"], "username" => $row["username"], "userpassword" => $newPwd @@ -4345,24 +5039,25 @@ function changeWebUserPassword($oldPwd, $newPwd) { * @param array $groupNames * @return boolean */ - function isMemberOfWebGroup($groupNames= array ()) { - if (!is_array($groupNames)) + function isMemberOfWebGroup($groupNames = array()) + { + if (!is_array($groupNames)) { return false; + } // check cache - $grpNames= isset ($_SESSION['webUserGroupNames']) ? $_SESSION['webUserGroupNames'] : false; + $grpNames = isset ($_SESSION['webUserGroupNames']) ? $_SESSION['webUserGroupNames'] : false; if (!is_array($grpNames)) { - $rs = $this->db->select( - 'wgn.name', - $this->getFullTableName("webgroup_names")." wgn - INNER JOIN ".$this->getFullTableName("web_groups")." wg ON wg.webgroup=wgn.id AND wg.webuser='" . $this->getLoginUserID() . "'" - ); - $grpNames= $this->db->getColumn("name", $rs); + $rs = $this->db->select('wgn.name', $this->getFullTableName("webgroup_names") . " wgn + INNER JOIN " . $this->getFullTableName("web_groups") . " wg ON wg.webgroup=wgn.id AND wg.webuser='" . $this->getLoginUserID() . "'"); + $grpNames = $this->db->getColumn("name", $rs); // save to cache - $_SESSION['webUserGroupNames']= $grpNames; + $_SESSION['webUserGroupNames'] = $grpNames; } - foreach ($groupNames as $k => $v) - if (in_array(trim($v), $grpNames)) + foreach ($groupNames as $k => $v) { + if (in_array(trim($v), $grpNames)) { return true; + } + } return false; } @@ -4372,18 +5067,21 @@ function isMemberOfWebGroup($groupNames= array ()) { * * @param string $src * @param string $media Default: Empty string + * @return string */ - function regClientCSS($src, $media='') { - if (empty($src) || isset ($this->loadedjscripts[$src])) + function regClientCSS($src, $media = '') + { + if (empty($src) || isset ($this->loadedjscripts[$src])) { return ''; - $nextpos= max(array_merge(array(0),array_keys($this->sjscripts)))+1; - $this->loadedjscripts[$src]['startup']= true; - $this->loadedjscripts[$src]['version']= '0'; - $this->loadedjscripts[$src]['pos']= $nextpos; + } + $nextpos = max(array_merge(array(0), array_keys($this->sjscripts))) + 1; + $this->loadedjscripts[$src]['startup'] = true; + $this->loadedjscripts[$src]['version'] = '0'; + $this->loadedjscripts[$src]['pos'] = $nextpos; if (strpos(strtolower($src), "sjscripts[$nextpos]= $src; + $this->sjscripts[$nextpos] = $src; } else { - $this->sjscripts[$nextpos]= "\t" . ''; + $this->sjscripts[$nextpos] = "\t" . ''; } } @@ -4393,7 +5091,8 @@ function regClientCSS($src, $media='') { * @param string $src * @param array $options Default: 'name'=>'', 'version'=>'0', 'plaintext'=>false */ - function regClientStartupScript($src, $options= array('name'=>'', 'version'=>'0', 'plaintext'=>false)) { + function regClientStartupScript($src, $options = array('name' => '', 'version' => '0', 'plaintext' => false)) + { $this->regClientScript($src, $options, true); } @@ -4405,48 +5104,54 @@ function regClientStartupScript($src, $options= array('name'=>'', 'version'=>'0' * @param boolean $startup Default: false * @return string */ - function regClientScript($src, $options= array('name'=>'', 'version'=>'0', 'plaintext'=>false), $startup= false) { - if (empty($src)) - return ''; // nothing to register + function regClientScript($src, $options = array('name' => '', 'version' => '0', 'plaintext' => false), $startup = false) + { + if (empty($src)) { + return ''; + } // nothing to register if (!is_array($options)) { if (is_bool($options)) // backward compatibility with old plaintext parameter - $options=array('plaintext'=>$options); - elseif (is_string($options)) // Also allow script name as 2nd param - $options=array('name'=>$options); - else - $options=array(); - } - $name= isset($options['name']) ? strtolower($options['name']) : ''; - $version= isset($options['version']) ? $options['version'] : '0'; - $plaintext= isset($options['plaintext']) ? $options['plaintext'] : false; - $key= !empty($name) ? $name : $src; + { + $options = array('plaintext' => $options); + } elseif (is_string($options)) // Also allow script name as 2nd param + { + $options = array('name' => $options); + } else { + $options = array(); + } + } + $name = isset($options['name']) ? strtolower($options['name']) : ''; + $version = isset($options['version']) ? $options['version'] : '0'; + $plaintext = isset($options['plaintext']) ? $options['plaintext'] : false; + $key = !empty($name) ? $name : $src; unset($overwritepos); // probably unnecessary--just making sure - $useThisVer= true; + $useThisVer = true; if (isset($this->loadedjscripts[$key])) { // a matching script was found // if existing script is a startup script, make sure the candidate is also a startup script - if ($this->loadedjscripts[$key]['startup']) - $startup= true; + if ($this->loadedjscripts[$key]['startup']) { + $startup = true; + } if (empty($name)) { - $useThisVer= false; // if the match was based on identical source code, no need to replace the old one + $useThisVer = false; // if the match was based on identical source code, no need to replace the old one } else { $useThisVer = version_compare($this->loadedjscripts[$key]['version'], $version, '<'); } if ($useThisVer) { - if ($startup==true && $this->loadedjscripts[$key]['startup']==false) { + if ($startup == true && $this->loadedjscripts[$key]['startup'] == false) { // remove old script from the bottom of the page (new one will be at the top) unset($this->jscripts[$this->loadedjscripts[$key]['pos']]); } else { // overwrite the old script (the position may be important for dependent scripts) - $overwritepos= $this->loadedjscripts[$key]['pos']; + $overwritepos = $this->loadedjscripts[$key]['pos']; } } else { // Use the original version - if ($startup==true && $this->loadedjscripts[$key]['startup']==false) { + if ($startup == true && $this->loadedjscripts[$key]['startup'] == false) { // need to move the exisiting script to the head - $version= $this->loadedjscripts[$key][$version]; - $src= $this->jscripts[$this->loadedjscripts[$key]['pos']]; + $version = $this->loadedjscripts[$key][$version]; + $src = $this->jscripts[$this->loadedjscripts[$key]['pos']]; unset($this->jscripts[$this->loadedjscripts[$key]['pos']]); } else { return ''; // the script is already in the right place @@ -4454,18 +5159,19 @@ function regClientScript($src, $options= array('name'=>'', 'version'=>'0', 'plai } } - if ($useThisVer && $plaintext!=true && (strpos(strtolower($src), "'; + if ($useThisVer && $plaintext != true && (strpos(strtolower($src), "'; + } if ($startup) { - $pos= isset($overwritepos) ? $overwritepos : max(array_merge(array(0),array_keys($this->sjscripts)))+1; - $this->sjscripts[$pos]= $src; + $pos = isset($overwritepos) ? $overwritepos : max(array_merge(array(0), array_keys($this->sjscripts))) + 1; + $this->sjscripts[$pos] = $src; } else { - $pos= isset($overwritepos) ? $overwritepos : max(array_merge(array(0),array_keys($this->jscripts)))+1; - $this->jscripts[$pos]= $src; + $pos = isset($overwritepos) ? $overwritepos : max(array_merge(array(0), array_keys($this->jscripts))) + 1; + $this->jscripts[$pos] = $src; } - $this->loadedjscripts[$key]['version']= $version; - $this->loadedjscripts[$key]['startup']= $startup; - $this->loadedjscripts[$key]['pos']= $pos; + $this->loadedjscripts[$key]['version'] = $version; + $this->loadedjscripts[$key]['startup'] = $startup; + $this->loadedjscripts[$key]['pos'] = $pos; } /** @@ -4473,7 +5179,8 @@ function regClientScript($src, $options= array('name'=>'', 'version'=>'0', 'plai * * @return string */ - function regClientStartupHTMLBlock($html) { + function regClientStartupHTMLBlock($html) + { $this->regClientScript($html, true, true); } @@ -4482,40 +5189,45 @@ function regClientStartupHTMLBlock($html) { * * @return string */ - function regClientHTMLBlock($html) { + function regClientHTMLBlock($html) + { $this->regClientScript($html, true); } - /** + /** * Remove unwanted html tags and snippet, settings and tags * * @param string $html * @param string $allowed Default: Empty string * @return string */ - function stripTags($html, $allowed= "") { - $t= strip_tags($html, $allowed); - $t= preg_replace('~\[\*(.*?)\*\]~', "", $t); //tv - $t= preg_replace('~\[\[(.*?)\]\]~', "", $t); //snippet - $t= preg_replace('~\[\!(.*?)\!\]~', "", $t); //snippet - $t= preg_replace('~\[\((.*?)\)\]~', "", $t); //settings - $t= preg_replace('~\[\+(.*?)\+\]~', "", $t); //placeholders - $t= preg_replace('~{{(.*?)}}~', "", $t); //chunks + function stripTags($html, $allowed = "") + { + $t = strip_tags($html, $allowed); + $t = preg_replace('~\[\*(.*?)\*\]~', "", $t); //tv + $t = preg_replace('~\[\[(.*?)\]\]~', "", $t); //snippet + $t = preg_replace('~\[\!(.*?)\!\]~', "", $t); //snippet + $t = preg_replace('~\[\((.*?)\)\]~', "", $t); //settings + $t = preg_replace('~\[\+(.*?)\+\]~', "", $t); //placeholders + $t = preg_replace('~{{(.*?)}}~', "", $t); //chunks return $t; } - /** + /** * Add an event listener to a plugin - only for use within the current execution cycle * * @param string $evtName * @param string $pluginName * @return boolean|int */ - function addEventListener($evtName, $pluginName) { - if (!$evtName || !$pluginName) + function addEventListener($evtName, $pluginName) + { + if (!$evtName || !$pluginName) { return false; - if (!array_key_exists($evtName,$this->pluginEvent)) + } + if (!array_key_exists($evtName, $this->pluginEvent)) { $this->pluginEvent[$evtName] = array(); + } return array_push($this->pluginEvent[$evtName], $pluginName); // return array count } @@ -4525,18 +5237,21 @@ function addEventListener($evtName, $pluginName) { * @param string $evtName * @return boolean */ - function removeEventListener($evtName) { - if (!$evtName) + function removeEventListener($evtName) + { + if (!$evtName) { return false; + } unset ($this->pluginEvent[$evtName]); } /** * Remove all event listeners - only for use within the current execution cycle */ - function removeAllEventListener() { + function removeAllEventListener() + { unset ($this->pluginEvent); - $this->pluginEvent= array (); + $this->pluginEvent = array(); } /** @@ -4546,46 +5261,65 @@ function removeAllEventListener() { * @param array $extParams Parameters available to plugins. Each array key will be the PHP variable name, and the array value will be the variable value. * @return boolean|array */ - function invokeEvent($evtName, $extParams= array ()) { - if (!$evtName) return false; - if (!isset ($this->pluginEvent[$evtName])) return false; - - $results= array (); - foreach($this->pluginEvent[$evtName] as $pluginName) { // start for loop - if ($this->dumpPlugins) $eventtime = $this->getMicroTime(); + function invokeEvent($evtName, $extParams = array()) + { + if (!$evtName) { + return false; + } + if (!isset ($this->pluginEvent[$evtName])) { + return false; + } + + $results = array(); + foreach ($this->pluginEvent[$evtName] as $pluginName) { // start for loop + if ($this->dumpPlugins) { + $eventtime = $this->getMicroTime(); + } // reset event object - $e= & $this->event; + $e = &$this->event; $e->_resetEventObject(); - $e->name = $evtName; + $e->name = $evtName; $e->activePlugin = $pluginName; // get plugin code $_ = $this->getPluginCode($pluginName); - $pluginCode = $_['code']; + $pluginCode = $_['code']; $pluginProperties = $_['props']; // load default params/properties - $parameter= $this->parseProperties($pluginProperties); - if(!is_array($parameter)) $parameter = array(); - if(!empty($extParams)) $parameter = array_merge($parameter, $extParams); + $parameter = $this->parseProperties($pluginProperties); + if (!is_array($parameter)) { + $parameter = array(); + } + if (!empty($extParams)) { + $parameter = array_merge($parameter, $extParams); + } // eval plugin $this->evalPlugin($pluginCode, $parameter); - if(class_exists('PHxParser')) $this->config['enable_filter'] = 0; + if (class_exists('PHxParser')) { + $this->config['enable_filter'] = 0; + } if ($this->dumpPlugins) { $eventtime = $this->getMicroTime() - $eventtime; - $this->pluginsCode .= sprintf('
            %s / %s (%2.2f ms)', $evtName, $pluginName, $eventtime*1000); - foreach ($parameter as $k=>$v) $this->pluginsCode .= "{$k} => " . print_r($v, true) . '
            '; + $this->pluginsCode .= sprintf('
            %s / %s (%2.2f ms)', $evtName, $pluginName, $eventtime * 1000); + foreach ($parameter as $k => $v) { + $this->pluginsCode .= "{$k} => " . print_r($v, true) . '
            '; + } $this->pluginsCode .= '

            '; $this->pluginsTime["{$evtName} / {$pluginName}"] += $eventtime; } - if ($e->_output != '') $results[]= $e->_output; - if ($e->_propagate != true) break; + if ($e->_output != '') { + $results[] = $e->_output; + } + if ($e->_propagate != true) { + break; + } } - - $e->activePlugin= ''; + + $e->activePlugin = ''; return $results; } @@ -4605,10 +5339,10 @@ public function getPluginCode($pluginName) $pluginName = $this->db->escape($pluginName); $result = $this->db->select('name, plugincode, properties', $this->getFullTableName("site_plugins"), "name='{$pluginName}' AND disabled=0"); if ($row = $this->db->getRow($result)) { - $pluginCode = $this->pluginCache[$row['name']]= $row['plugincode']; - $pluginProperties = $this->pluginCache[$row['name'] . "Props"]= $row['properties']; + $pluginCode = $this->pluginCache[$row['name']] = $row['plugincode']; + $pluginProperties = $this->pluginCache[$row['name'] . "Props"] = $row['properties']; } else { - $pluginCode = $this->pluginCache[$pluginName]= "return false;"; + $pluginCode = $this->pluginCache[$pluginName] = "return false;"; $pluginProperties = ''; } } @@ -4626,23 +5360,29 @@ public function getPluginCode($pluginName) * @param string|null $elementType * @return array Associative array in the form property name => property value */ - function parseProperties($propertyString, $elementName = null, $elementType = null) { + function parseProperties($propertyString, $elementName = null, $elementType = null) + { $propertyString = trim($propertyString); - $propertyString = str_replace('{}', '', $propertyString ); - $propertyString = str_replace('} {', ',', $propertyString ); - if(empty($propertyString)) return array(); - if($propertyString=='{}') return array(); - + $propertyString = str_replace('{}', '', $propertyString); + $propertyString = str_replace('} {', ',', $propertyString); + if (empty($propertyString)) { + return array(); + } + if ($propertyString == '{}') { + return array(); + } + $jsonFormat = $this->isJson($propertyString, true); $property = array(); // old format - if ( $jsonFormat === false) { - $props= explode('&', $propertyString); + if ($jsonFormat === false) { + $props = explode('&', $propertyString); foreach ($props as $prop) { - if(empty($prop)) continue; - elseif(strpos($prop, '=')===false) { - $property[trim($prop)]=''; + if (empty($prop)) { + continue; + } elseif (strpos($prop, '=') === false) { + $property[trim($prop)] = ''; continue; } @@ -4659,29 +5399,39 @@ function parseProperties($propertyString, $elementName = null, $elementType = nu default: $value = !isset($p[2]) ? '' : $p[2]; } - if (!empty($key)) $property[$key] = $value; + if (!empty($key)) { + $property[$key] = $value; + } } - // new json-format - } else if(!empty($jsonFormat)){ - foreach( $jsonFormat as $key=>$row ) { + // new json-format + } else if (!empty($jsonFormat)) { + foreach ($jsonFormat as $key => $row) { if (!empty($key)) { if (is_array($row)) { - if (isset($row[0]['value'])) $value = $row[0]['value']; + if (isset($row[0]['value'])) { + $value = $row[0]['value']; + } } else { $value = $row; } - if (isset($value) && $value !== "") $property[$key] = $value; + if (isset($value) && $value !== "") { + $property[$key] = $value; + } } } } - if(!empty($elementName) && !empty($elementType)){ + if (!empty($elementName) && !empty($elementType)) { $out = $this->invokeEvent('OnParseProperties', array( 'element' => $elementName, - 'type' => $elementType, - 'args' => $property + 'type' => $elementType, + 'args' => $property )); - if(is_array($out)) $out = array_pop($out); - if(is_array($out)) $property = $out; + if (is_array($out)) { + $out = array_pop($out); + } + if (is_array($out)) { + $property = $out; + } } return $property; } @@ -4694,20 +5444,21 @@ function parseProperties($propertyString, $elementName = null, $elementType = nu * @param boolean $escapeValues * @return array Associative array in the form property name => property value */ - function parseDocBlockFromFile($element_dir, $filename, $escapeValues=false) { + function parseDocBlockFromFile($element_dir, $filename, $escapeValues = false) + { $params = array(); $fullpath = $element_dir . '/' . $filename; - if(is_readable($fullpath)) { + if (is_readable($fullpath)) { $tpl = @fopen($fullpath, "r"); - if($tpl) { + if ($tpl) { $params['filename'] = $filename; $docblock_start_found = false; $name_found = false; $description_found = false; $docblock_end_found = false; - $arrayParams = array('author','documentation','reportissues','link'); - - while(!feof($tpl)) { + $arrayParams = array('author', 'documentation', 'reportissues', 'link'); + + while (!feof($tpl)) { $line = fgets($tpl); $r = $this->parseDocBlockLine($line, $docblock_start_found, $name_found, $description_found, $docblock_end_found); $docblock_start_found = $r['docblock_start_found']; @@ -4716,11 +5467,17 @@ function parseDocBlockFromFile($element_dir, $filename, $escapeValues=false) { $docblock_end_found = $r['docblock_end_found']; $param = $r['param']; $val = $r['val']; - if(!$docblock_end_found) break; - if(!$docblock_start_found || !$name_found || !$description_found || empty($param)) continue; - if(!empty($param)) { - if(in_array($param, $arrayParams)) { - if(!isset($params[$param])) $params[$param] = array(); + if (!$docblock_end_found) { + break; + } + if (!$docblock_start_found || !$name_found || !$description_found || empty($param)) { + continue; + } + if (!empty($param)) { + if (in_array($param, $arrayParams)) { + if (!isset($params[$param])) { + $params[$param] = array(); + } $params[$param][] = $escapeValues ? $this->db->escape($val) : $val; } else { $params[$param] = $escapeValues ? $this->db->escape($val) : $val; @@ -4740,18 +5497,19 @@ function parseDocBlockFromFile($element_dir, $filename, $escapeValues=false) { * @param boolean $escapeValues * @return array Associative array in the form property name => property value */ - function parseDocBlockFromString($string, $escapeValues=false) { + function parseDocBlockFromString($string, $escapeValues = false) + { $params = array(); - if(!empty($string)) { + if (!empty($string)) { $string = str_replace('\r\n', '\n', $string); $exp = explode('\n', $string); $docblock_start_found = false; $name_found = false; $description_found = false; $docblock_end_found = false; - $arrayParams = array('author','documentation','reportissues','link'); - - foreach($exp as $line) { + $arrayParams = array('author', 'documentation', 'reportissues', 'link'); + + foreach ($exp as $line) { $r = $this->parseDocBlockLine($line, $docblock_start_found, $name_found, $description_found, $docblock_end_found); $docblock_start_found = $r['docblock_start_found']; $name_found = $r['name_found']; @@ -4759,252 +5517,339 @@ function parseDocBlockFromString($string, $escapeValues=false) { $docblock_end_found = $r['docblock_end_found']; $param = $r['param']; $val = $r['val']; - if(!$docblock_start_found) continue; - if($docblock_end_found) break; - if(!empty($param)) { - if(in_array($param, $arrayParams)) { - if(!isset($params[$param])) $params[$param] = array(); + if (!$docblock_start_found) { + continue; + } + if ($docblock_end_found) { + break; + } + if (!empty($param)) { + if (in_array($param, $arrayParams)) { + if (!isset($params[$param])) { + $params[$param] = array(); + } $params[$param][] = $escapeValues ? $this->db->escape($val) : $val; } else { $params[$param] = $escapeValues ? $this->db->escape($val) : $val; } } - } + } } return $params; } - + /** * Parses docBlock of a component´s source-code and returns the result as an array * (modified parseDocBlock() from modules/stores/setup.info.php by Bumkaka & Dmi3yy) * - * @param string $line + * @param string $line * @param boolean $docblock_start_found * @param boolean $name_found * @param boolean $description_found * @param boolean $docblock_end_found * @return array Associative array in the form property name => property value */ - function parseDocBlockLine($line, $docblock_start_found, $name_found, $description_found, $docblock_end_found) { + function parseDocBlockLine($line, $docblock_start_found, $name_found, $description_found, $docblock_end_found) + { $param = ''; $val = ''; $ma = null; - if(!$docblock_start_found) { + if (!$docblock_start_found) { // find docblock start - if(strpos($line, '/**') !== false) { + if (strpos($line, '/**') !== false) { $docblock_start_found = true; } - } elseif(!$name_found) { + } elseif (!$name_found) { // find name - if(preg_match("/^\s+\*\s+(.+)/", $line, $ma)) { + if (preg_match("/^\s+\*\s+(.+)/", $line, $ma)) { $param = 'name'; $val = trim($ma[1]); $name_found = !empty($val); } - } elseif(!$description_found) { + } elseif (!$description_found) { // find description - if(preg_match("/^\s+\*\s+(.+)/", $line, $ma)) { + if (preg_match("/^\s+\*\s+(.+)/", $line, $ma)) { $param = 'description'; $val = trim($ma[1]); $description_found = !empty($val); } } else { - if(preg_match("/^\s+\*\s+\@([^\s]+)\s+(.+)/", $line, $ma)) { + if (preg_match("/^\s+\*\s+\@([^\s]+)\s+(.+)/", $line, $ma)) { $param = trim($ma[1]); $val = trim($ma[2]); - if(!empty($param) && !empty($val)) { - if($param == 'internal') { + if (!empty($param) && !empty($val)) { + if ($param == 'internal') { $ma = null; - if(preg_match("/\@([^\s]+)\s+(.+)/", $val, $ma)) { + if (preg_match("/\@([^\s]+)\s+(.+)/", $val, $ma)) { $param = trim($ma[1]); $val = trim($ma[2]); } } } - } elseif(preg_match("/^\s*\*\/\s*$/", $line)) { + } elseif (preg_match("/^\s*\*\/\s*$/", $line)) { $docblock_end_found = true; } } return array( - 'docblock_start_found'=>$docblock_start_found, - 'name_found'=>$name_found, - 'description_found'=>$description_found, - 'docblock_end_found'=>$docblock_end_found, - 'param'=>$param, - 'val'=>$val + 'docblock_start_found' => $docblock_start_found, + 'name_found' => $name_found, + 'description_found' => $description_found, + 'docblock_end_found' => $docblock_end_found, + 'param' => $param, + 'val' => $val ); } /** * Renders docBlock-parameters into human readable list * - * @param array $parsed + * @param array $parsed * @return string List in HTML-format */ - function convertDocBlockIntoList($parsed) { + function convertDocBlockIntoList($parsed) + { global $_lang; - + // Replace special placeholders & make URLs + Emails clickable - $ph = array('site_url'=>MODX_SITE_URL); + $ph = array('site_url' => MODX_SITE_URL); $regexUrl = "/((http|https|ftp|ftps)\:\/\/[^\/]+(\/[^\s]+[^,.?!:;\s])?)/"; $regexEmail = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i'; - $emailSubject = isset($parsed['name']) ? '?subject='.$parsed['name'] : ''; - $emailSubject .= isset($parsed['version']) ? ' v'.$parsed['version'] : ''; - foreach($parsed as $key=>$val) { - if(is_array($val)) { - foreach($val as $key2=>$val2) { + $emailSubject = isset($parsed['name']) ? '?subject=' . $parsed['name'] : ''; + $emailSubject .= isset($parsed['version']) ? ' v' . $parsed['version'] : ''; + foreach ($parsed as $key => $val) { + if (is_array($val)) { + foreach ($val as $key2 => $val2) { $val2 = $this->parseText($val2, $ph); - if(preg_match($regexUrl, $val2, $url)) $val2 = preg_replace($regexUrl, "{$url[0]} ", $val2); - if(preg_match($regexEmail, $val2, $url)) $val2 = preg_replace($regexEmail, '\\1', $val2); + if (preg_match($regexUrl, $val2, $url)) { + $val2 = preg_replace($regexUrl, "{$url[0]} ", $val2); + } + if (preg_match($regexEmail, $val2, $url)) { + $val2 = preg_replace($regexEmail, '\\1', $val2); + } $parsed[$key][$key2] = $val2; } } else { $val = $this->parseText($val, $ph); - if(preg_match($regexUrl, $val, $url)) $val = preg_replace($regexUrl, "{$url[0]} ", $val); - if(preg_match($regexEmail, $val, $url)) $val = preg_replace($regexEmail, '\\1', $val); + if (preg_match($regexUrl, $val, $url)) { + $val = preg_replace($regexUrl, "{$url[0]} ", $val); + } + if (preg_match($regexEmail, $val, $url)) { + $val = preg_replace($regexEmail, '\\1', $val); + } $parsed[$key] = $val; } } $arrayParams = array( - 'documentation'=>$_lang['documentation'], - 'reportissues'=>$_lang['report_issues'], - 'link'=>$_lang['further_info'], - 'author'=>$_lang['author_infos'] + 'documentation' => $_lang['documentation'], + 'reportissues' => $_lang['report_issues'], + 'link' => $_lang['further_info'], + 'author' => $_lang['author_infos'] ); - + $nl = "\n"; - $list = isset($parsed['logo']) ? ''.$nl : ''; - $list .= '

            '.$nl; - $list .= isset($parsed['name']) ? ''.$parsed['name'].'
            '.$nl : ''; - $list .= isset($parsed['description']) ? $parsed['description'].$nl : ''; - $list .= '


            '.$nl; - $list .= isset($parsed['version']) ? '

            '.$_lang['version'].': '.$parsed['version'].'

            '.$nl : ''; - $list .= isset($parsed['license']) ? '

            '.$_lang['license'].': '.$parsed['license'].'

            '.$nl : ''; - $list .= isset($parsed['lastupdate']) ? '

            '.$_lang['last_update'].': '.$parsed['lastupdate'].'

            '.$nl : ''; - $list .= '
            '.$nl; + $list = isset($parsed['logo']) ? '' . $nl : ''; + $list .= '

            ' . $nl; + $list .= isset($parsed['name']) ? '' . $parsed['name'] . '
            ' . $nl : ''; + $list .= isset($parsed['description']) ? $parsed['description'] . $nl : ''; + $list .= '


            ' . $nl; + $list .= isset($parsed['version']) ? '

            ' . $_lang['version'] . ': ' . $parsed['version'] . '

            ' . $nl : ''; + $list .= isset($parsed['license']) ? '

            ' . $_lang['license'] . ': ' . $parsed['license'] . '

            ' . $nl : ''; + $list .= isset($parsed['lastupdate']) ? '

            ' . $_lang['last_update'] . ': ' . $parsed['lastupdate'] . '

            ' . $nl : ''; + $list .= '
            ' . $nl; $first = true; - foreach($arrayParams as $param=>$label) { + foreach ($arrayParams as $param => $label) { if (isset($parsed[$param])) { - if($first) { - $list .= '

            '.$_lang['references'].'

            '.$nl; - $list .= '
              '.$nl; + if ($first) { + $list .= '

              ' . $_lang['references'] . '

              ' . $nl; + $list .= '
                ' . $nl; $first = false; - } - $list .= '
              • '.$label.''.$nl; - $list .= '
                  '.$nl; + } + $list .= '
                • ' . $label . '' . $nl; + $list .= '
                    ' . $nl; foreach ($parsed[$param] as $val) { - $list .= '
                  • '.$val.'
                  • '.$nl; + $list .= '
                  • ' . $val . '
                  • ' . $nl; } - $list .= '
                • '.$nl; + $list .= '
              • ' . $nl; } } - $list .= !$first ? '
              '.$nl : ''; - + $list .= !$first ? '
            ' . $nl : ''; + return $list; } - function removeSanitizeSeed ($string=''){ + /** + * @param string $string + * @return mixed|string + */ + function removeSanitizeSeed($string = '') + { global $sanitize_seed; - - if(!$string || strpos($string,$sanitize_seed)===false) return $string; - + + if (!$string || strpos($string, $sanitize_seed) === false) { + return $string; + } + return str_replace($sanitize_seed, '', $string); } - - function cleanUpMODXTags($content='') { - if ($this->minParserPasses < 1) return $content; - + + /** + * @param string $content + * @return mixed|string + */ + function cleanUpMODXTags($content = '') + { + if ($this->minParserPasses < 1) { + return $content; + } + $content = $this->removeSanitizeSeed($content); - + $enable_filter = $this->config['enable_filter']; $this->config['enable_filter'] = 1; - $_ = array('[* *]','[( )]','{{ }}','[[ ]]','[+ +]'); - foreach($_ as $brackets) { - list($left,$right) = explode(' ', $brackets); - if(strpos($content,$left)!==false) { - if ($left==='[*') $content = $this->mergeDocumentContent($content); - elseif($left==='[(') $content = $this->mergeSettingsContent($content); - elseif($left==='{{') $content = $this->mergeChunkContent($content); - elseif($left==='[[') $content = $this->evalSnippets($content); + $_ = array('[* *]', '[( )]', '{{ }}', '[[ ]]', '[+ +]'); + foreach ($_ as $brackets) { + list($left, $right) = explode(' ', $brackets); + if (strpos($content, $left) !== false) { + if ($left === '[*') { + $content = $this->mergeDocumentContent($content); + } elseif ($left === '[(') { + $content = $this->mergeSettingsContent($content); + } elseif ($left === '{{') { + $content = $this->mergeChunkContent($content); + } elseif ($left === '[[') { + $content = $this->evalSnippets($content); + } } } - foreach($_ as $brackets) { - list($left,$right) = explode(' ', $brackets); - if(strpos($content,$left)!==false) { - $matches = $this->getTagsFromContent($content,$left,$right); - $content= str_replace($matches[0], '', $content); + foreach ($_ as $brackets) { + list($left, $right) = explode(' ', $brackets); + if (strpos($content, $left) !== false) { + $matches = $this->getTagsFromContent($content, $left, $right); + $content = str_replace($matches[0], '', $content); } } $this->config['enable_filter'] = $enable_filter; return $content; } - - function strip_tags($str='', $allowable_tags='') { + + /** + * @param string $str + * @param string $allowable_tags + * @return string + */ + function strip_tags($str = '', $allowable_tags = '') + { $str = strip_tags($str, $allowable_tags); modx_sanitize_gpc($str); return $str; } - - function addSnippet($name, $phpCode) { - $this->snippetCache['#'.$name] = $phpCode; + + /** + * @param $name + * @param $phpCode + */ + function addSnippet($name, $phpCode) + { + $this->snippetCache['#' . $name] = $phpCode; } - - function addChunk($name, $text) { - $this->chunkCache['#'.$name] = $text; + + /** + * @param $name + * @param $text + */ + function addChunk($name, $text) + { + $this->chunkCache['#' . $name] = $text; } - - function safeEval($phpcode='',$evalmode='',$safe_functions='') { - if($evalmode=='') $evalmode = $this->config['allow_eval']; - if($safe_functions=='') $safe_functions = $this->config['safe_functions_at_eval']; - + + /** + * @param string $phpcode + * @param string $evalmode + * @param string $safe_functions + * @return string|void + */ + function safeEval($phpcode = '', $evalmode = '', $safe_functions = '') + { + if ($evalmode == '') { + $evalmode = $this->config['allow_eval']; + } + if ($safe_functions == '') { + $safe_functions = $this->config['safe_functions_at_eval']; + } + modx_sanitize_gpc($phpcode); - - switch($evalmode) { - case 'with_scan' : $isSafe = $this->isSafeCode($phpcode,$safe_functions); break; - case 'with_scan_at_post' : $isSafe = $_POST ? $this->isSafeCode($phpcode,$safe_functions) : true; break; - case 'everytime_eval' : $isSafe = true; break; // Should debug only - case 'dont_eval' : - default : return $phpcode; - } - - if(!$isSafe) { - $msg = $phpcode . "\n" . $this->currentSnippet . "\n" . print_r($_SERVER,true); - $title = sprintf('Unknown eval was executed (%s)', $this->htmlspecialchars(substr(trim($phpcode),0,50))); + + switch ($evalmode) { + case 'with_scan' : + $isSafe = $this->isSafeCode($phpcode, $safe_functions); + break; + case 'with_scan_at_post' : + $isSafe = $_POST ? $this->isSafeCode($phpcode, $safe_functions) : true; + break; + case 'everytime_eval' : + $isSafe = true; + break; // Should debug only + case 'dont_eval' : + default : + return $phpcode; + } + + if (!$isSafe) { + $msg = $phpcode . "\n" . $this->currentSnippet . "\n" . print_r($_SERVER, true); + $title = sprintf('Unknown eval was executed (%s)', $this->htmlspecialchars(substr(trim($phpcode), 0, 50))); $this->messageQuit($title, '', true, '', '', 'Parser', $msg); return; } - + ob_start(); $return = eval($phpcode); $echo = ob_get_clean(); - - if(is_array($return)) return 'array()'; - - $output = $echo.$return; + + if (is_array($return)) { + return 'array()'; + } + + $output = $echo . $return; modx_sanitize_gpc($output); return $this->htmlspecialchars($output); // Maybe, all html tags are dangerous } - - function isSafeCode($phpcode='',$safe_functions='') { // return true or false - if($safe_functions=='') return false; - + + /** + * @param string $phpcode + * @param string $safe_functions + * @return bool + */ + function isSafeCode($phpcode = '', $safe_functions = '') + { // return true or false + if ($safe_functions == '') { + return false; + } + $safe = explode(',', $safe_functions); - - $phpcode = rtrim($phpcode,';') . ';'; + + $phpcode = rtrim($phpcode, ';') . ';'; $tokens = token_get_all('$token) { - if(!is_array($token)) continue; + foreach ($tokens as $i => $token) { + if (!is_array($token)) { + continue; + } $tokens[$i]['token_name'] = token_name($token[0]); } - foreach($tokens as $token) { - if(!is_array($token)) continue; - switch($token['token_name']) { + foreach ($tokens as $token) { + if (!is_array($token)) { + continue; + } + switch ($token['token_name']) { case 'T_STRING': - if(!in_array($token[1],$safe)) return false; + if (!in_array($token[1], $safe)) { + return false; + } break; case 'T_VARIABLE': - if($token[1]=='$GLOBALS') return false; + if ($token[1] == '$GLOBALS') { + return false; + } break; case 'T_EVAL': return false; @@ -5012,43 +5857,72 @@ function isSafeCode($phpcode='',$safe_functions='') { // return true or false } return true; } - - function atBindFileContent($str='') { - - $search_path = array('assets/tvs/', 'assets/chunks/', 'assets/templates/', $this->config['rb_base_url'].'files/', ''); - - if(stripos($str,'@FILE')!==0) return $str; - if(strpos($str,"\n")!==false) $str = substr($str,0,strpos("\n",$str)); - - if($this->getExtFromFilename($str)==='.php') return 'Could not retrieve PHP file.'; - - $str = substr($str,6); + + /** + * @param string $str + * @return bool|mixed|string + */ + function atBindFileContent($str = '') + { + + $search_path = array('assets/tvs/', 'assets/chunks/', 'assets/templates/', $this->config['rb_base_url'] . 'files/', ''); + + if (stripos($str, '@FILE') !== 0) { + return $str; + } + if (strpos($str, "\n") !== false) { + $str = substr($str, 0, strpos("\n", $str)); + } + + if ($this->getExtFromFilename($str) === '.php') { + return 'Could not retrieve PHP file.'; + } + + $str = substr($str, 6); $str = trim($str); - if(strpos($str,'\\')!==false) $str = str_replace('\\','/',$str); - $str = ltrim($str,'/'); - + if (strpos($str, '\\') !== false) { + $str = str_replace('\\', '/', $str); + } + $str = ltrim($str, '/'); + $errorMsg = sprintf("Could not retrieve string '%s'.", $str); - - foreach($search_path as $path) { - $file_path = MODX_BASE_PATH.$path.$str; - if(strpos($file_path,MODX_MANAGER_PATH)===0) return $errorMsg; - elseif(is_file($file_path)) break; - else $file_path = false; - } - - if(!$file_path) return $errorMsg; - - $content = (string) file_get_contents($file_path); - if($content===false) return $errorMsg; - + + foreach ($search_path as $path) { + $file_path = MODX_BASE_PATH . $path . $str; + if (strpos($file_path, MODX_MANAGER_PATH) === 0) { + return $errorMsg; + } elseif (is_file($file_path)) { + break; + } else { + $file_path = false; + } + } + + if (!$file_path) { + return $errorMsg; + } + + $content = (string)file_get_contents($file_path); + if ($content === false) { + return $errorMsg; + } + return $content; } - - function getExtFromFilename($str) { + + /** + * @param $str + * @return bool|string + */ + function getExtFromFilename($str) + { $str = strtolower(trim($str)); - $pos = strrpos($str,'.'); - if($pos===false) return false; - else return substr($str,$pos); + $pos = strrpos($str, '.'); + if ($pos === false) { + return false; + } else { + return substr($str, $pos); + } } /***************************************************************************************/ /* End of API functions */ @@ -5068,40 +5942,62 @@ function getExtFromFilename($str) { * @param string $line Line number within $file * @return boolean */ - function phpError($nr, $text, $file, $line) { + function phpError($nr, $text, $file, $line) + { if (error_reporting() == 0 || $nr == 0) { return true; } - if($this->stopOnNotice == false) - { - switch($nr) - { + if ($this->stopOnNotice == false) { + switch ($nr) { case E_NOTICE: - if($this->error_reporting <= 2) return true; + if ($this->error_reporting <= 2) { + return true; + } break; case E_STRICT: case E_DEPRECATED: - if($this->error_reporting <= 1) return true; + if ($this->error_reporting <= 1) { + return true; + } break; default: - if($this->error_reporting === 0) return true; + if ($this->error_reporting === 0) { + return true; + } } } if (is_readable($file)) { - $source= file($file); - $source= $this->htmlspecialchars($source[$line -1]); + $source = file($file); + $source = $this->htmlspecialchars($source[$line - 1]); } else { - $source= ""; + $source = ""; } //Error $nr in $file at $line:
            $source
            $this->messageQuit("PHP Parse Error", '', true, $nr, $file, $source, $text, $line); } - function messageQuit($msg= 'unspecified error', $query= '', $is_error= true, $nr= '', $file= '', $source= '', $text= '', $line= '', $output='') { - - if(0<$this->messageQuitCount) return; + /** + * @param string $msg + * @param string $query + * @param bool $is_error + * @param string $nr + * @param string $file + * @param string $source + * @param string $text + * @param string $line + * @param string $output + * @return bool + */ + function messageQuit($msg = 'unspecified error', $query = '', $is_error = true, $nr = '', $file = '', $source = '', $text = '', $line = '', $output = '') + { + + if (0 < $this->messageQuitCount) { + return; + } $this->messageQuitCount++; - - if (!class_exists('makeTable')) include_once('extenders/maketable.class.php'); + + if (!class_exists('makeTable')) { + include_once('extenders/maketable.class.php'); + } $MakeTable = new MakeTable(); $MakeTable->setTableClass('grid'); $MakeTable->setRowRegularClass('gridItem'); @@ -5110,99 +6006,99 @@ function messageQuit($msg= 'unspecified error', $query= '', $is_error= true, $nr $table = array(); - $version= isset ($GLOBALS['modx_version']) ? $GLOBALS['modx_version'] : ''; - $release_date= isset ($GLOBALS['release_date']) ? $GLOBALS['release_date'] : ''; - $request_uri = "http://".$_SERVER['HTTP_HOST'].($_SERVER["SERVER_PORT"]==80?"":(":".$_SERVER["SERVER_PORT"])).$_SERVER['REQUEST_URI']; + $version = isset ($GLOBALS['modx_version']) ? $GLOBALS['modx_version'] : ''; + $release_date = isset ($GLOBALS['release_date']) ? $GLOBALS['release_date'] : ''; + $request_uri = "http://" . $_SERVER['HTTP_HOST'] . ($_SERVER["SERVER_PORT"] == 80 ? "" : (":" . $_SERVER["SERVER_PORT"])) . $_SERVER['REQUEST_URI']; $request_uri = $this->htmlspecialchars($request_uri, ENT_QUOTES, $this->config['modx_charset']); - $ua = $this->htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, $this->config['modx_charset']); - $referer = $this->htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_QUOTES, $this->config['modx_charset']); + $ua = $this->htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, $this->config['modx_charset']); + $referer = $this->htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_QUOTES, $this->config['modx_charset']); if ($is_error) { $str = '

            « MODX Parse Error »

            '; - if($msg != 'PHP Parse Error') { + if ($msg != 'PHP Parse Error') { $str .= '

            ' . $msg . '

            '; } } else { $str = '

            « MODX Debug/ stop message »

            '; - $str .= '

            '.$msg.'

            '; + $str .= '

            ' . $msg . '

            '; } if (!empty ($query)) { $str .= '
            SQL > ' . $query . '
            '; } - $errortype= array ( - E_ERROR => "ERROR", - E_WARNING => "WARNING", - E_PARSE => "PARSING ERROR", - E_NOTICE => "NOTICE", - E_CORE_ERROR => "CORE ERROR", - E_CORE_WARNING => "CORE WARNING", - E_COMPILE_ERROR => "COMPILE ERROR", - E_COMPILE_WARNING => "COMPILE WARNING", - E_USER_ERROR => "USER ERROR", - E_USER_WARNING => "USER WARNING", - E_USER_NOTICE => "USER NOTICE", - E_STRICT => "STRICT NOTICE", + $errortype = array( + E_ERROR => "ERROR", + E_WARNING => "WARNING", + E_PARSE => "PARSING ERROR", + E_NOTICE => "NOTICE", + E_CORE_ERROR => "CORE ERROR", + E_CORE_WARNING => "CORE WARNING", + E_COMPILE_ERROR => "COMPILE ERROR", + E_COMPILE_WARNING => "COMPILE WARNING", + E_USER_ERROR => "USER ERROR", + E_USER_WARNING => "USER WARNING", + E_USER_NOTICE => "USER NOTICE", + E_STRICT => "STRICT NOTICE", E_RECOVERABLE_ERROR => "RECOVERABLE ERROR", - E_DEPRECATED => "DEPRECATED", - E_USER_DEPRECATED => "USER DEPRECATED" + E_DEPRECATED => "DEPRECATED", + E_USER_DEPRECATED => "USER DEPRECATED" ); - if(!empty($nr) || !empty($file)) - { - if ($text != '') - { + if (!empty($nr) || !empty($file)) { + if ($text != '') { $str .= '
            Error : ' . $text . '
            '; } - if($output!='') - { + if ($output != '') { $str .= '
            ' . $output . '
            '; } - if($nr!=='') $table[] = array('ErrorType[num]' , $errortype [$nr] ."[".$nr."]"); - if($file) $table[] = array('File', $file); - if($line) $table[] = array('Line', $line); + if ($nr !== '') { + $table[] = array('ErrorType[num]', $errortype [$nr] . "[" . $nr . "]"); + } + if ($file) { + $table[] = array('File', $file); + } + if ($line) { + $table[] = array('Line', $line); + } } - if ($source != '') - { + if ($source != '') { $table[] = array("Source", $source); } - if(!empty($this->currentSnippet)) { - $table[] = array('Current Snippet' , $this->currentSnippet); + if (!empty($this->currentSnippet)) { + $table[] = array('Current Snippet', $this->currentSnippet); } - if(!empty($this->event->activePlugin)) { - $table[] = array('Current Plugin' , $this->event->activePlugin . '(' . $this->event->name . ')'); + if (!empty($this->event->activePlugin)) { + $table[] = array('Current Plugin', $this->event->activePlugin . '(' . $this->event->name . ')'); } - $str .= $MakeTable->create($table, array('Error information','')); + $str .= $MakeTable->create($table, array('Error information', '')); $str .= "
            "; $table = array(); - $table[] = array('REQUEST_URI' , $request_uri); + $table[] = array('REQUEST_URI', $request_uri); - if($this->manager->action) - { + if ($this->manager->action) { include_once(MODX_MANAGER_PATH . 'includes/actionlist.inc.php'); global $action_list; - $actionName =(isset($action_list[$this->manager->action])) ? " - {$action_list[$this->manager->action]}" : ''; + $actionName = (isset($action_list[$this->manager->action])) ? " - {$action_list[$this->manager->action]}" : ''; - $table[] = array('Manager action' , $this->manager->action.$actionName); + $table[] = array('Manager action', $this->manager->action . $actionName); } - if(preg_match('@^[0-9]+@',$this->documentIdentifier)) - { - $resource = $this->getDocumentObject('id',$this->documentIdentifier); - $url = $this->makeUrl($this->documentIdentifier,'','','full'); - $table[] = array('Resource', '['.$this->documentIdentifier.'] '.$resource['pagetitle'].''); + if (preg_match('@^[0-9]+@', $this->documentIdentifier)) { + $resource = $this->getDocumentObject('id', $this->documentIdentifier); + $url = $this->makeUrl($this->documentIdentifier, '', '', 'full'); + $table[] = array('Resource', '[' . $this->documentIdentifier . '] ' . $resource['pagetitle'] . ''); } - $table[] = array('Referer' , $referer); - $table[] = array('User Agent' , $ua); - $table[] = array('IP' , $_SERVER['REMOTE_ADDR']); - $table[] = array('Current time' , date("Y-m-d H:i:s", $_SERVER['REQUEST_TIME'] + $this->config['server_offset_time'])); - $str .= $MakeTable->create($table, array('Basic info','')); + $table[] = array('Referer', $referer); + $table[] = array('User Agent', $ua); + $table[] = array('IP', $_SERVER['REMOTE_ADDR']); + $table[] = array('Current time', date("Y-m-d H:i:s", $_SERVER['REQUEST_TIME'] + $this->config['server_offset_time'])); + $str .= $MakeTable->create($table, array('Basic info', '')); $str .= "
            "; $table = array(); @@ -5210,40 +6106,51 @@ function messageQuit($msg= 'unspecified error', $query= '', $is_error= true, $nr $table[] = array('PHP', '[^p^]'); $table[] = array('Total', '[^t^]'); $table[] = array('Memory', '[^m^]'); - $str .= $MakeTable->create($table, array('Benchmarks','')); + $str .= $MakeTable->create($table, array('Benchmarks', '')); $str .= "
            "; - $totalTime= ($this->getMicroTime() - $this->tstart); + $totalTime = ($this->getMicroTime() - $this->tstart); $mem = memory_get_peak_usage(true); $total_mem = $mem - $this->mstart; $total_mem = ($total_mem / 1024 / 1024) . ' mb'; - $queryTime= $this->queryTime; - $phpTime= $totalTime - $queryTime; - $queries= isset ($this->executedQueries) ? $this->executedQueries : 0; - $queryTime= sprintf("%2.4f s", $queryTime); - $totalTime= sprintf("%2.4f s", $totalTime); - $phpTime= sprintf("%2.4f s", $phpTime); + $queryTime = $this->queryTime; + $phpTime = $totalTime - $queryTime; + $queries = isset ($this->executedQueries) ? $this->executedQueries : 0; + $queryTime = sprintf("%2.4f s", $queryTime); + $totalTime = sprintf("%2.4f s", $totalTime); + $phpTime = sprintf("%2.4f s", $phpTime); - $str= str_replace('[^q^]', $queries, $str); - $str= str_replace('[^qt^]',$queryTime, $str); - $str= str_replace('[^p^]', $phpTime, $str); - $str= str_replace('[^t^]', $totalTime, $str); - $str= str_replace('[^m^]', $total_mem, $str); + $str = str_replace('[^q^]', $queries, $str); + $str = str_replace('[^qt^]', $queryTime, $str); + $str = str_replace('[^p^]', $phpTime, $str); + $str = str_replace('[^t^]', $totalTime, $str); + $str = str_replace('[^m^]', $total_mem, $str); - if(isset($php_errormsg) && !empty($php_errormsg)) $str = "{$php_errormsg}
            \n{$str}"; + if (isset($php_errormsg) && !empty($php_errormsg)) { + $str = "{$php_errormsg}
            \n{$str}"; + } $str .= $this->get_backtrace(debug_backtrace()); // Log error - if(!empty($this->currentSnippet)) $source = 'Snippet - ' . $this->currentSnippet; - elseif(!empty($this->event->activePlugin)) $source = 'Plugin - ' . $this->event->activePlugin; - elseif($source!=='') $source = 'Parser - ' . $source; - elseif($query!=='') $source = 'SQL Query'; - else $source = 'Parser'; - if($msg) $source .= ' / ' . $msg; - if(isset($actionName) && !empty($actionName)) $source .= $actionName; - switch($nr) - { + if (!empty($this->currentSnippet)) { + $source = 'Snippet - ' . $this->currentSnippet; + } elseif (!empty($this->event->activePlugin)) { + $source = 'Plugin - ' . $this->event->activePlugin; + } elseif ($source !== '') { + $source = 'Parser - ' . $source; + } elseif ($query !== '') { + $source = 'SQL Query'; + } else { + $source = 'Parser'; + } + if ($msg) { + $source .= ' / ' . $msg; + } + if (isset($actionName) && !empty($actionName)) { + $source .= $actionName; + } + switch ($nr) { case E_DEPRECATED : case E_USER_DEPRECATED : case E_STRICT : @@ -5254,47 +6161,63 @@ function messageQuit($msg= 'unspecified error', $query= '', $is_error= true, $nr default: $error_level = 3; } - $this->logEvent(0, $error_level, $str,$source); + $this->logEvent(0, $error_level, $str, $source); - if($error_level === 2 && $this->error_reporting!=='99') return true; - if($this->error_reporting==='99' && !isset($_SESSION['mgrValidated'])) return true; + if ($error_level === 2 && $this->error_reporting !== '99') { + return true; + } + if ($this->error_reporting === '99' && !isset($_SESSION['mgrValidated'])) { + return true; + } // Set 500 response header - if($error_level !== 2) header('HTTP/1.1 500 Internal Server Error'); + if ($error_level !== 2) { + header('HTTP/1.1 500 Internal Server Error'); + } // Display error - if (isset($_SESSION['mgrValidated'])) - { - echo 'MODX Content Manager ' . $version . ' » ' . $release_date . ' + if (isset($_SESSION['mgrValidated'])) { + echo 'MODX Content Manager ' . $version . ' » ' . $release_date . ' ' . $str . ''; + } else { + echo 'Error'; } - else echo 'Error'; ob_end_flush(); exit; } - function get_backtrace($backtrace) { - if (!class_exists('makeTable')) include_once('extenders/maketable.class.php'); + /** + * @param $backtrace + * @return string + */ + function get_backtrace($backtrace) + { + if (!class_exists('makeTable')) { + include_once('extenders/maketable.class.php'); + } $MakeTable = new MakeTable(); $MakeTable->setTableClass('grid'); $MakeTable->setRowRegularClass('gridItem'); $MakeTable->setRowAlternateClass('gridAltItem'); $table = array(); $backtrace = array_reverse($backtrace); - foreach ($backtrace as $key => $val) - { + foreach ($backtrace as $key => $val) { $key++; - if(substr($val['function'],0,11)==='messageQuit') break; - elseif(substr($val['function'],0,8)==='phpError') break; - $path = str_replace('\\','/',$val['file']); - if(strpos($path,MODX_BASE_PATH)===0) $path = substr($path,strlen(MODX_BASE_PATH)); - switch($val['type']) - { + if (substr($val['function'], 0, 11) === 'messageQuit') { + break; + } elseif (substr($val['function'], 0, 8) === 'phpError') { + break; + } + $path = str_replace('\\', '/', $val['file']); + if (strpos($path, MODX_BASE_PATH) === 0) { + $path = substr($path, strlen(MODX_BASE_PATH)); + } + switch ($val['type']) { case '->': case '::': $functionName = $val['function'] = $val['class'] . $val['type'] . $val['function']; @@ -5306,67 +6229,76 @@ function get_backtrace($backtrace) { $_ = (!empty($val['args'])) ? count($val['args']) : 0; $args = array_pad(array(), $_, '$var'); $args = implode(", ", $args); - $modx = & $this; - $args = preg_replace_callback('/\$var/', function() use($modx, &$tmp, $val){ + $modx = &$this; + $args = preg_replace_callback('/\$var/', function () use ($modx, &$tmp, $val) { $arg = $val['args'][$tmp - 1]; - switch(true){ - case is_null($arg):{ + switch (true) { + case is_null($arg): { $out = 'NULL'; break; } - case is_numeric($arg):{ + case is_numeric($arg): { $out = $arg; break; } - case is_scalar($arg):{ - $out = strlen($arg) > 20 ? 'string $var'.$tmp : ("'" . $this->htmlspecialchars(str_replace("'", "\\'", $arg)) . "'"); + case is_scalar($arg): { + $out = strlen($arg) > 20 ? 'string $var' . $tmp : ("'" . $this->htmlspecialchars(str_replace("'", "\\'", $arg)) . "'"); break; } - case is_bool($arg):{ + case is_bool($arg): { $out = $arg ? 'TRUE' : 'FALSE'; break; } - case is_array($arg):{ - $out = 'array $var'.$tmp; + case is_array($arg): { + $out = 'array $var' . $tmp; break; } - case is_object($arg):{ - $out = get_class($arg).' $var'.$tmp; + case is_object($arg): { + $out = get_class($arg) . ' $var' . $tmp; break; } - default:{ - $out = '$var'.$tmp; + default: { + $out = '$var' . $tmp; } } $tmp++; return $out; }, $args); $line = array( - "".$functionName."(".$args.")", - $path." on line ".$val['line'] + "" . $functionName . "(" . $args . ")", + $path . " on line " . $val['line'] ); $table[] = array(implode("
            ", $line)); } return $MakeTable->create($table, array('Backtrace')); } - function getRegisteredClientScripts() { + /** + * @return string + */ + function getRegisteredClientScripts() + { return implode("\n", $this->jscripts); } - function getRegisteredClientStartupScripts() { + /** + * @return string + */ + function getRegisteredClientStartupScripts() + { return implode("\n", $this->sjscripts); } - + /** * Format alias to be URL-safe. Strip invalid characters. * * @param string $alias Alias to be formatted * @return string Safe alias */ - function stripAlias($alias) { + function stripAlias($alias) + { // let add-ons overwrite the default behavior - $results = $this->invokeEvent('OnStripAlias', array ('alias'=>$alias)); + $results = $this->invokeEvent('OnStripAlias', array('alias' => $alias)); if (!empty($results)) { // if multiple plugins are registered, only the last one is used return end($results); @@ -5380,35 +6312,46 @@ function stripAlias($alias) { return $alias; } } - - function nicesize($size) { - $sizes = array('Tb'=>1099511627776, 'Gb'=>1073741824, 'Mb'=>1048576, 'Kb'=>1024, 'b'=>1); - $precisions = count($sizes)-1; - foreach ($sizes as $unit=>$bytes) { - if ($size>=$bytes) - return number_format($size/$bytes, $precisions).' '.$unit; + + /** + * @param $size + * @return string + */ + function nicesize($size) + { + $sizes = array('Tb' => 1099511627776, 'Gb' => 1073741824, 'Mb' => 1048576, 'Kb' => 1024, 'b' => 1); + $precisions = count($sizes) - 1; + foreach ($sizes as $unit => $bytes) { + if ($size >= $bytes) { + return number_format($size / $bytes, $precisions) . ' ' . $unit; + } $precisions--; } return '0 b'; } - function getHiddenIdFromAlias( $parentid, $alias ) { - $table = $this->getFullTableName( 'site_content' ); - $query = $this->db->query( "SELECT sc.id, children.id AS child_id, children.alias, COUNT(children2.id) AS children_count + /** + * @param $parentid + * @param $alias + * @return bool + */ + function getHiddenIdFromAlias($parentid, $alias) + { + $table = $this->getFullTableName('site_content'); + $query = $this->db->query("SELECT sc.id, children.id AS child_id, children.alias, COUNT(children2.id) AS children_count FROM {$table} sc JOIN {$table} children ON children.parent = sc.id LEFT JOIN {$table} children2 ON children2.parent = children.id - WHERE sc.parent = {$parentid} AND sc.alias_visible = '0' GROUP BY children.id;" - ); + WHERE sc.parent = {$parentid} AND sc.alias_visible = '0' GROUP BY children.id;"); - while ( $child = $this->db->getRow( $query ) ) { - if ( $child['alias'] == $alias || $child['child_id'] == $alias ) { + while ($child = $this->db->getRow($query)) { + if ($child['alias'] == $alias || $child['child_id'] == $alias) { return $child['child_id']; } - if ( $child['children_count'] > 0 ) { - $id = $this->getHiddenIdFromAlias( $child['id'], $alias ); - if ( $id ) { + if ($child['children_count'] > 0) { + $id = $this->getHiddenIdFromAlias($child['id'], $alias); + if ($id) { return $id; } } @@ -5417,101 +6360,162 @@ function getHiddenIdFromAlias( $parentid, $alias ) { return false; } + /** + * @param $alias + * @return bool|int + */ function getIdFromAlias($alias) { $children = array(); - if (isset($this->documentListing[$alias])) {return $this->documentListing[$alias];} + if (isset($this->documentListing[$alias])) { + return $this->documentListing[$alias]; + } $tbl_site_content = $this->getFullTableName('site_content'); - if($this->config['use_alias_path']==1) - { - if ( $alias == '.' ) { + if ($this->config['use_alias_path'] == 1) { + if ($alias == '.') { return 0; } - if(strpos($alias,'/')!==false) $_a = explode('/', $alias); - else $_a[] = $alias; - $id= 0; - - foreach($_a as $alias) - { - if($id===false) break; + if (strpos($alias, '/') !== false) { + $_a = explode('/', $alias); + } else { + $_a[] = $alias; + } + $id = 0; + + foreach ($_a as $alias) { + if ($id === false) { + break; + } $alias = $this->db->escape($alias); - $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and parent='{$id}' and alias='{$alias}'"); - if($this->db->getRecordCount($rs)==0) $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and parent='{$id}' and id='{$alias}'"); + $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and parent='{$id}' and alias='{$alias}'"); + if ($this->db->getRecordCount($rs) == 0) { + $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and parent='{$id}' and id='{$alias}'"); + } $next = $this->db->getValue($rs); - $id = !$next ? $this->getHiddenIdFromAlias( $id, $alias ) : $next; + $id = !$next ? $this->getHiddenIdFromAlias($id, $alias) : $next; } - } - else - { + } else { $rs = $this->db->select('id', $tbl_site_content, "deleted=0 and alias='{$alias}'", 'parent, menuindex'); $id = $this->db->getValue($rs); - if (!$id) $id = false; + if (!$id) { + $id = false; + } } return $id; } - function atBindInclude($str='') + /** + * @param string $str + * @return bool|mixed|string + */ + function atBindInclude($str = '') { - if(strpos($str,'@INCLUDE')!==0) return $str; - if(strpos($str,"\n")!==false) $str = substr($str,0,strpos("\n",$str)); - - $str = substr($str,9); + if (strpos($str, '@INCLUDE') !== 0) { + return $str; + } + if (strpos($str, "\n") !== false) { + $str = substr($str, 0, strpos("\n", $str)); + } + + $str = substr($str, 9); $str = trim($str); - $str = str_replace('\\','/',$str); - $str = ltrim($str,'/'); - + $str = str_replace('\\', '/', $str); + $str = ltrim($str, '/'); + $tpl_dir = 'assets/templates/'; - - if(strpos($str,MODX_MANAGER_PATH)===0) return false; - elseif(is_file(MODX_BASE_PATH . $str)) $file_path = MODX_BASE_PATH.$str; - elseif(is_file(MODX_BASE_PATH . "{$tpl_dir}{$str}")) $file_path = MODX_BASE_PATH.$tpl_dir.$str; - else return false; - - if(!$file_path || !is_file($file_path)) return false; - + + if (strpos($str, MODX_MANAGER_PATH) === 0) { + return false; + } elseif (is_file(MODX_BASE_PATH . $str)) { + $file_path = MODX_BASE_PATH . $str; + } elseif (is_file(MODX_BASE_PATH . "{$tpl_dir}{$str}")) { + $file_path = MODX_BASE_PATH . $tpl_dir . $str; + } else { + return false; + } + + if (!$file_path || !is_file($file_path)) { + return false; + } + ob_start(); - $modx = & $this; + $modx = &$this; $result = include($file_path); - if($result===1) $result = ''; + if ($result === 1) { + $result = ''; + } $content = ob_get_clean(); - if(!$content && $result) $content = $result; + if (!$content && $result) { + $content = $result; + } return $content; } - + // php compat + + /** + * @param $str + * @param int $flags + * @return mixed + */ function htmlspecialchars($str, $flags = ENT_COMPAT) { $this->loadExtension('PHPCOMPAT'); return $this->phpcompat->htmlspecialchars($str, $flags); } - function isJson($string, $returnData=false) { + /** + * @param $string + * @param bool $returnData + * @return bool|mixed + */ + function isJson($string, $returnData = false) + { $data = json_decode($string, true); return (json_last_error() == JSON_ERROR_NONE) ? ($returnData ? $data : true) : false; } - - function splitKeyAndFilter($key) { - if($this->config['enable_filter']==1 && strpos($key,':')!==false && stripos($key,'@FILE')!==0) - list($key,$modifiers) = explode(':', $key, 2); - else + + /** + * @param $key + * @return array + */ + function splitKeyAndFilter($key) + { + if ($this->config['enable_filter'] == 1 && strpos($key, ':') !== false && stripos($key, '@FILE') !== 0) { + list($key, $modifiers) = explode(':', $key, 2); + } else { $modifiers = false; - + } + $key = trim($key); - if($modifiers!==false) $modifiers = trim($modifiers); - - return array($key,$modifiers); - } - - function applyFilter($value='', $modifiers=false, $key='') { - if($modifiers===false || $modifiers=='raw') return $value; - if($modifiers!==false) $modifiers = trim($modifiers); - + if ($modifiers !== false) { + $modifiers = trim($modifiers); + } + + return array($key, $modifiers); + } + + /** + * @param string $value + * @param bool $modifiers + * @param string $key + * @return string + */ + function applyFilter($value = '', $modifiers = false, $key = '') + { + if ($modifiers === false || $modifiers == 'raw') { + return $value; + } + if ($modifiers !== false) { + $modifiers = trim($modifiers); + } + $this->loadExtension('MODIFIERS'); - return $this->filter->phxFilter($key,$value,$modifiers); + return $this->filter->phxFilter($key, $value, $modifiers); } - + // End of class. @@ -5521,38 +6525,51 @@ function applyFilter($value='', $modifiers=false, $key='') { * Fixes the issue where passing an array into the q get variable causes errors * */ - private static function _getCleanQueryString() { + private static function _getCleanQueryString() + { $q = $_GET['q']; //Return null if the query doesn't exist - if(empty($q)) { + if (empty($q)) { return null; } //If we have a string, return it - if(is_string($q)) { + if (is_string($q)) { return $q; } //If we have an array, return the first element - if(is_array($q)) { + if (is_array($q)) { return $q[0]; } } - public function addLog($title='no title',$msg='',$type=1) { - if($title==='') $title = 'no title'; - if(is_array($msg)) $msg = '
            '.print_r($msg,true).'
            '; - elseif($msg==='') $msg = $_SERVER['REQUEST_URI']; + /** + * @param string $title + * @param string $msg + * @param int $type + */ + public function addLog($title = 'no title', $msg = '', $type = 1) + { + if ($title === '') { + $title = 'no title'; + } + if (is_array($msg)) { + $msg = '
            ' . print_r($msg, true) . '
            '; + } elseif ($msg === '') { + $msg = $_SERVER['REQUEST_URI']; + } $this->logEvent(0, $type, $msg, $title); } - + } /** * System Event Class */ -class SystemEvent { +class SystemEvent +{ public $name; public $_propagate; public $_output; @@ -5562,9 +6579,10 @@ class SystemEvent { /** * @param string $name Name of the event */ - function __construct($name= "") { + function __construct($name = "") + { $this->_resetEventObject(); - $this->name= $name; + $this->name = $name; } /** @@ -5573,40 +6591,45 @@ function __construct($name= "") { * @global array $SystemAlertMsgQueque * @param string $msg The message */ - function alert($msg) { + function alert($msg) + { global $SystemAlertMsgQueque; - if ($msg == "") + if ($msg == "") { return; + } if (is_array($SystemAlertMsgQueque)) { $title = ''; if ($this->name && $this->activePlugin) { - $title= "
            " . $this->activePlugin . " - " . $this->name . "
            "; + $title = "
            " . $this->activePlugin . " - " . $this->name . "
            "; } - $SystemAlertMsgQueque[]= "$title
            $msg
            "; + $SystemAlertMsgQueque[] = "$title
            $msg
            "; } } /** * Output - * - * @param string $msg + * + * @param string $msg */ - function output($msg) { + function output($msg) + { $this->_output .= $msg; } - /** + /** * Stop event propogation */ - function stopPropagation() { - $this->_propagate= false; + function stopPropagation() + { + $this->_propagate = false; } - function _resetEventObject() { + function _resetEventObject() + { unset ($this->returnedValues); - $this->name= ""; - $this->_output= ""; - $this->_propagate= true; - $this->activated= false; + $this->name = ""; + $this->_output = ""; + $this->_propagate = true; + $this->activated = false; } } From 32042de69b00f87d5ac5a9042f2c9281242d00d9 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 23 Sep 2017 14:16:48 +0900 Subject: [PATCH 202/577] Improved - PHP error messages --- manager/includes/document.parser.class.inc.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 87bd80b2a0..28b8db7696 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -5953,17 +5953,23 @@ function phpError($nr, $text, $file, $line) if ($this->error_reporting <= 2) { return true; } + $isError = false; + $msg = 'PHP Minor Problem (this message show logged in only)'; break; case E_STRICT: case E_DEPRECATED: if ($this->error_reporting <= 1) { return true; } + $isError = true; + $msg = 'PHP Strict Standards Problem'; break; default: if ($this->error_reporting === 0) { return true; } + $isError = true; + $msg = 'PHP Parse Error'; } } if (is_readable($file)) { @@ -5972,7 +5978,8 @@ function phpError($nr, $text, $file, $line) } else { $source = ""; } //Error $nr in $file at $line:
            $source
            - $this->messageQuit("PHP Parse Error", '', true, $nr, $file, $source, $text, $line); + + $this->messageQuit($msg, '', $isError, $nr, $file, $source, $text, $line); } /** @@ -6013,13 +6020,13 @@ function messageQuit($msg = 'unspecified error', $query = '', $is_error = true, $ua = $this->htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, $this->config['modx_charset']); $referer = $this->htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_QUOTES, $this->config['modx_charset']); if ($is_error) { - $str = '

            « MODX Parse Error »

            '; + $str = '

            « Evo Parse Error »

            '; if ($msg != 'PHP Parse Error') { $str .= '

            ' . $msg . '

            '; } } else { - $str = '

            « MODX Debug/ stop message »

            '; - $str .= '

            ' . $msg . '

            '; + $str = '

            « Evo Debug/ stop message »

            '; + $str .= '

            ' . $msg . '

            '; } if (!empty ($query)) { From 3ad110c611b230a1597883a665ff8da47e6523e0 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 23 Sep 2017 14:24:34 +0900 Subject: [PATCH 203/577] Fix - Set the property variable as empty value Setting an empty value in the plugin's property causes error as undefined variable ex) &disabled paramerter by QuickManager --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 28b8db7696..5ac82e2bb4 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -5414,7 +5414,7 @@ function parseProperties($propertyString, $elementName = null, $elementType = nu } else { $value = $row; } - if (isset($value) && $value !== "") { + if (isset($value)) { $property[$key] = $value; } } From cbb45b72168bed3647056501979092fb3551bc15 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sat, 23 Sep 2017 14:42:55 +0900 Subject: [PATCH 204/577] #58 Fix - Giving placeholders to chunk from outside --- manager/includes/document.parser.class.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 5ac82e2bb4..d8da3bab05 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1447,7 +1447,8 @@ function mergeChunkContent($content, $ph = false) continue; } - $value = $this->mergePlaceholderContent($value, $params); + $value = $this->parseText($value,$params); // parse local scope placeholers for ConditionalTags + $value = $this->mergePlaceholderContent($value, $params); // parse page global placeholers $value = $this->mergeConditionalTagsContent($value); $value = $this->mergeDocumentContent($value); $value = $this->mergeSettingsContent($value); From 722b6e7d3ce7eed6c80691d1dc84d6cc456336da Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 24 Sep 2017 00:12:40 +0900 Subject: [PATCH 205/577] Fix - parse IF tas --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index d8da3bab05..a4b0d97590 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1532,10 +1532,10 @@ function mergePlaceholderContent($content, $ph = false) */ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '<@ELSEIF:', $elsetag = '<@ELSE>', $endiftag = '<@ENDIF>') { - $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); if (strpos($content, $iftag) === false) { return $content; } + $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); $sp = '#' . md5('ConditionalTags' . $_SERVER['REQUEST_TIME']) . '#'; $content = str_replace(array(''), array("{$sp}b", "{$sp}e"), $content); From 9c1554b8a25edf6f7dfdb87da98675e1fae2a8af Mon Sep 17 00:00:00 2001 From: Deesen Date: Sun, 24 Sep 2017 07:47:51 +0200 Subject: [PATCH 206/577] [F] Create directory 'assets/cache/updater' if not existing --- assets/plugins/updater/plugin.updater.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/plugins/updater/plugin.updater.php b/assets/plugins/updater/plugin.updater.php index aa9d3020ea..4db362ed64 100644 --- a/assets/plugins/updater/plugin.updater.php +++ b/assets/plugins/updater/plugin.updater.php @@ -64,6 +64,10 @@ $e->output(serialize($widgets)); return; } + + // Create directory 'assets/cache/updater' + if(!file_exists(MODX_BASE_PATH . 'assets/cache/updater')) + mkdir(MODX_BASE_PATH . 'assets/cache/updater', intval($modx->config['new_folder_permissions'], 8), true); $output = ''; if(!file_exists(MODX_BASE_PATH . 'assets/cache/updater/check_'.date("d").'.json')){ From 50a80be751225dba4067c5c9c0d673d3cd73ba13 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 24 Sep 2017 22:21:32 +0900 Subject: [PATCH 207/577] Revert @722b6e7 --- manager/includes/document.parser.class.inc.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index a4b0d97590..c149f960c9 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1532,11 +1532,12 @@ function mergePlaceholderContent($content, $ph = false) */ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '<@ELSEIF:', $elsetag = '<@ELSE>', $endiftag = '<@ENDIF>') { + $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); + if (strpos($content, $iftag) === false) { return $content; } - $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); - + $sp = '#' . md5('ConditionalTags' . $_SERVER['REQUEST_TIME']) . '#'; $content = str_replace(array(''), array("{$sp}b", "{$sp}e"), $content); From abbeed6caf10da13266d0873f4dd772d1f79ca78 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 24 Sep 2017 22:22:49 +0900 Subject: [PATCH 208/577] Minor fix --- manager/includes/document.parser.class.inc.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index c149f960c9..1c156bafdd 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1532,8 +1532,10 @@ function mergePlaceholderContent($content, $ph = false) */ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '<@ELSEIF:', $elsetag = '<@ELSE>', $endiftag = '<@ENDIF>') { - $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); - + if (strpos($content, '@IF') !== false) { + $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); + } + if (strpos($content, $iftag) === false) { return $content; } From 2db57457cea718d40e9e71fedd572b23a5516c25 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 24 Sep 2017 22:31:18 +0900 Subject: [PATCH 209/577] New - $modx->['enable_at_syntax'] (1. add config) --- .../mutate_settings/tab1_site_settings.inc.php | 15 +++++++++++++++ manager/includes/default_config.php | 1 + manager/includes/document.parser.class.inc.php | 2 ++ manager/includes/lang/english.inc.php | 3 +++ 4 files changed, 21 insertions(+) diff --git a/manager/actions/mutate_settings/tab1_site_settings.inc.php b/manager/actions/mutate_settings/tab1_site_settings.inc.php index 5ade04b0f6..aa9b2f3808 100644 --- a/manager/actions/mutate_settings/tab1_site_settings.inc.php +++ b/manager/actions/mutate_settings/tab1_site_settings.inc.php @@ -149,6 +149,21 @@
            + +
            [(enable_at_syntax)] + +
            + +
            + + +
            + +
            [(publish_default)] diff --git a/manager/includes/default_config.php b/manager/includes/default_config.php index c695664fa3..03a9a02b48 100644 --- a/manager/includes/default_config.php +++ b/manager/includes/default_config.php @@ -12,6 +12,7 @@ $c['docid_incrmnt_method'] = 0; $c['valid_hostnames'] = ''; $c['enable_filter'] = 0; +$c['enable_at_syntax'] = 1; $c['minifyphp_incache'] = 0; $c['rss_url_news'] = $_lang["rss_url_news_default"]; $c['rss_url_security'] = $_lang["rss_url_security_default"]; diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 1c156bafdd..373ef64f04 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -355,6 +355,8 @@ function getSettings() $this->error_reporting = $this->config['error_reporting']; $this->config['filemanager_path'] = str_replace('[(base_path)]', MODX_BASE_PATH, $this->config['filemanager_path']); $this->config['rb_base_dir'] = str_replace('[(base_path)]', MODX_BASE_PATH, $this->config['rb_base_dir']); + + if (!isset($this->config['enable_at_syntax'])) $this->config['enable_at_syntax'] = 1; // @TODO: This line is temporary, should be remove in next version // now merge user settings into evo-configuration $this->getUserSettings(); diff --git a/manager/includes/lang/english.inc.php b/manager/includes/lang/english.inc.php index 3f8896fb8c..fcf746237a 100644 --- a/manager/includes/lang/english.inc.php +++ b/manager/includes/lang/english.inc.php @@ -1226,6 +1226,9 @@ $_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; +$_lang["enable_at_syntax_title"] = 'Enable <@SYNTAX>'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) is simple and lightweight template syntax. This is designed to consider coexistence with HTML tags and content strings.'; + $_lang["bkmgr_alert_mkdir"] = 'A file cannot be created in a directory. Please check the permission of [+snapshot_path+]'; $_lang["bkmgr_restore_msg"] = '

            Database tables could be restored by SQL:

            '; $_lang["bkmgr_restore_title"] = 'Restore'; From 50c47bd8096a6631603e48ccbd643372baac3d8e Mon Sep 17 00:00:00 2001 From: yamamoto Date: Sun, 24 Sep 2017 22:38:16 +0900 Subject: [PATCH 210/577] New - $modx->['enable_at_syntax'] (2. implement) $modx->ignoreCommentedTagsContent() $modx->escapeLiteralTagsContent() $modx->mergeConditionalTagsContent() (private) $modx->_prepareCTag() --- manager/includes/document.parser.class.inc.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 373ef64f04..aa4ce36070 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1542,6 +1542,8 @@ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '< return $content; } + if (!$this->config['enable_at_syntax']) return $content; + $sp = '#' . md5('ConditionalTags' . $_SERVER['REQUEST_TIME']) . '#'; $content = str_replace(array(''), array("{$sp}b", "{$sp}e"), $content); @@ -1587,6 +1589,8 @@ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '< */ private function _prepareCTag($content, $iftag = '<@IF:', $elseiftag = '<@ELSEIF:', $elsetag = '<@ELSE>', $endiftag = '<@ENDIF>') { + if (!$this->config['enable_at_syntax']) return $content; + if (strpos($content, '' return $content; } + if (!$this->config['enable_at_syntax']) return $content; + $matches = $this->getTagsFromContent($content, $left, $right); if (!empty($matches)) { foreach ($matches[0] as $i => $v) { @@ -1716,6 +1722,9 @@ function escapeLiteralTagsContent($content, $left = '<@LITERAL>', $right = '<@EN if (stripos($content, $left) === false) { return $content; } + + if (!$this->config['enable_at_syntax']) return $content; + $matches = $this->getTagsFromContent($content, $left, $right); if (empty($matches)) { return $content; From 5932ca3f1dd086d9a8ed3cc183548b2fb19def42 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Sun, 24 Sep 2017 22:38:35 +0300 Subject: [PATCH 211/577] fix #251 --- manager/media/style/default/js/modx.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index ba8e7557c1..5107fb6d7c 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -314,9 +314,9 @@ r = JSON.parse(r); if (r.item.url) { if (modx.config.global_tabs) { - r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:"' + r.item.url + '"})}else{modx.popup({url:"' + r.item.url + '",width:"95%",height:"95%",margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:"center elements",wrap:"evo-tab-page-' + modx.urlToUid(w.location.hash) + '"})}'; + r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'evo-tab-page-' + modx.urlToUid(w.location.hash) + '\'})}'; } else { - r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:"' + r.item.url + '"})}else{modx.popup({url:"' + r.item.url + '",width:"95%",height:"95%",margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:"center elements",wrap:"main"})}'; + r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'main\'})}'; } } r = JSON.stringify(r); @@ -1030,11 +1030,9 @@ if (dataJson[key].hasOwnProperty(k)) { if (k.substring(0, 2) === 'on') { var onEvent = dataJson[key][k]; - item[k] = function(onEvent) { - return function() { - eval(onEvent); - }; - }(onEvent); + item.addEventListener(k.substring(2), function(event) { + eval(onEvent); + }, false); } else { item[k] = dataJson[key][k]; } From 2ed17105376a748a74955400780cb811ddfdecbc Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Mon, 25 Sep 2017 00:10:50 +0300 Subject: [PATCH 212/577] update top search search for a number in pagetitle, if more than 3 characters style locked and disabled result items --- manager/actions/search.static.php | 62 +++++++++++++------- manager/media/style/default/css/mainmenu.css | 7 ++- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/manager/actions/search.static.php b/manager/actions/search.static.php index 94e697d554..39c50a2839 100644 --- a/manager/actions/search.static.php +++ b/manager/actions/search.static.php @@ -11,12 +11,12 @@ ?>

            @@ -83,9 +83,9 @@ $tbl_site_content = $modx->getFullTableName('site_content'); $tbldg = $modx->getFullTableName('document_groups'); - $searchfields = htmlentities($_POST['searchfields'], ENT_QUOTES, $modx_manager_charset); - $searchlongtitle = $modx->db->escape($_REQUEST['searchfields']); - $search_alias = $modx->db->escape($_REQUEST['searchfields']); + $searchfields = htmlentities(trim($_POST['searchfields']), ENT_QUOTES, $modx_manager_charset); + $searchlongtitle = $modx->db->escape(trim($_REQUEST['searchfields'])); + $search_alias = $modx->db->escape(trim($_REQUEST['searchfields'])); $templateid = isset($_REQUEST['templateid']) && $_REQUEST['templateid'] !== '' ? intval($_REQUEST['templateid']) : ''; $searchcontent = $modx->db->escape($_REQUEST['content']); @@ -114,6 +114,9 @@ if ($searchfields != '') { if (ctype_digit($searchfields)) { $sqladd .= "sc.id='{$searchfields}'"; + if (strlen($searchfields) > 3) { + $sqladd .= " OR sc.pagetitle LIKE '%{$searchfields}%'"; + } } if ($idFromAlias) { $sqladd .= $sqladd != '' ? ' OR ' : ''; @@ -278,7 +281,7 @@ //templates if ($modx->hasPermission('edit_template')) { - $rs = $modx->db->select("id,templatename", $modx->getFullTableName('site_templates'), "`id` like '%" . $searchfields . "%' + $rs = $modx->db->select("id,templatename,locked", $modx->getFullTableName('site_templates'), "`id` like '%" . $searchfields . "%' OR `templatename` like '%" . $searchfields . "%' OR `description` like '%" . $searchfields . "%' OR `content` like '%" . $searchfields . "%'"); @@ -286,14 +289,14 @@ if ($templatecounts > 0) { $output .= '
          • ' . $_lang["manage_templates"] . ' (' . $templatecounts . ')
          • '; while ($row = $modx->db->getRow($rs)) { - $output .= '
          • ' . highlightingCoincidence($row['templatename'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . '
          • '; + $output .= '' . highlightingCoincidence($row['templatename'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . ''; } } } //tvs if ($modx->hasPermission('edit_template') && $modx->hasPermission('edit_snippet') && $modx->hasPermission('edit_chunk') && $modx->hasPermission('edit_plugin')) { - $rs = $modx->db->select("id,name", $modx->getFullTableName('site_tmplvars'), "`id` like '%" . $searchfields . "%' + $rs = $modx->db->select("id,name,locked", $modx->getFullTableName('site_tmplvars'), "`id` like '%" . $searchfields . "%' OR `name` like '%" . $searchfields . "%' OR `description` like '%" . $searchfields . "%' OR `type` like '%" . $searchfields . "%' @@ -305,14 +308,14 @@ if ($tvscounts > 0) { $output .= '
          • ' . $_lang["settings_templvars"] . ' (' . $tvscounts . ')
          • '; while ($row = $modx->db->getRow($rs)) { - $output .= '
          • ' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . '
          • '; + $output .= '' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . ''; } } } //Chunks if ($modx->hasPermission('edit_chunk')) { - $rs = $modx->db->select("id,name", $modx->getFullTableName('site_htmlsnippets'), "`id` like '%" . $searchfields . "%' + $rs = $modx->db->select("id,name,locked,disabled", $modx->getFullTableName('site_htmlsnippets'), "`id` like '%" . $searchfields . "%' OR `name` like '%" . $searchfields . "%' OR `description` like '%" . $searchfields . "%' OR `snippet` like '%" . $searchfields . "%'"); @@ -320,14 +323,14 @@ if ($chunkscounts > 0) { $output .= '
          • ' . $_lang["manage_htmlsnippets"] . ' (' . $chunkscounts . ')
          • '; while ($row = $modx->db->getRow($rs)) { - $output .= '
          • ' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . '
          • '; + $output .= '' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . ''; } } } //Snippets if ($modx->hasPermission('edit_snippet')) { - $rs = $modx->db->select("id,name", $modx->getFullTableName('site_snippets'), "`id` like '%" . $searchfields . "%' + $rs = $modx->db->select("id,name,locked,disabled", $modx->getFullTableName('site_snippets'), "`id` like '%" . $searchfields . "%' OR `name` like '%" . $searchfields . "%' OR `description` like '%" . $searchfields . "%' OR `snippet` like '%" . $searchfields . "%' @@ -337,14 +340,14 @@ if ($snippetscounts > 0) { $output .= '
          • ' . $_lang["manage_snippets"] . ' (' . $snippetscounts . ')
          • '; while ($row = $modx->db->getRow($rs)) { - $output .= '
          • ' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . '
          • '; + $output .= '' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . ''; } } } //plugins if ($modx->hasPermission('edit_plugin')) { - $rs = $modx->db->select("id,name", $modx->getFullTableName('site_plugins'), "`id` like '%" . $searchfields . "%' + $rs = $modx->db->select("id,name,locked,disabled", $modx->getFullTableName('site_plugins'), "`id` like '%" . $searchfields . "%' OR `name` like '%" . $searchfields . "%' OR `description` like '%" . $searchfields . "%' OR `plugincode` like '%" . $searchfields . "%' @@ -354,14 +357,14 @@ if ($pluginscounts > 0) { $output .= '
          • ' . $_lang["manage_plugins"] . ' (' . $pluginscounts . ')
          • '; while ($row = $modx->db->getRow($rs)) { - $output .= '
          • ' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . '
          • '; + $output .= '' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . ''; } } } //modules if ($modx->hasPermission('edit_module')) { - $rs = $modx->db->select("id,name", $modx->getFullTableName('site_modules'), "`id` like '%" . $searchfields . "%' + $rs = $modx->db->select("id,name,locked,disabled", $modx->getFullTableName('site_modules'), "`id` like '%" . $searchfields . "%' OR `name` like '%" . $searchfields . "%' OR `description` like '%" . $searchfields . "%' OR `modulecode` like '%" . $searchfields . "%' @@ -372,7 +375,7 @@ if ($modulescounts > 0) { $output .= '
          • ' . $_lang["modules"] . ' (' . $modulescounts . ')
          • '; while ($row = $modx->db->getRow($rs)) { - $output .= '
          • ' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . '
          • '; + $output .= '' . highlightingCoincidence($row['name'], $_REQUEST['searchfields']) . $_style['icons_external_link'] . ''; } } } @@ -394,6 +397,21 @@ function highlightingCoincidence($text, $search) ), array( '\(', '\)' - ), $search) . ')!isu'; + ), trim($search)) . ')!isu'; return preg_replace($regexp, '$1', $text); } + +function addClassForItemList($locked = '', $disabled = '') +{ + $class = ''; + if ($locked) { + $class .= 'locked'; + } + if ($disabled) { + $class .= ' disabled'; + } + if ($class) { + $class = ' class="' . $class . '"'; + } + return $class; +} diff --git a/manager/media/style/default/css/mainmenu.css b/manager/media/style/default/css/mainmenu.css index 51142f0c4e..df3f2b3973 100644 --- a/manager/media/style/default/css/mainmenu.css +++ b/manager/media/style/default/css/mainmenu.css @@ -69,12 +69,15 @@ #searchresult .ajaxSearchResults ul, #searchresult .ajaxSearchResults li { margin: 0; padding: 0; list-style: none } #searchresult .ajaxSearchResults b, #searchresult .ajaxSearchResults strong, #searchresult .ajaxSearchResults a { position: relative; z-index: 0; display: block; color: #333; padding: 0.25rem 1rem; margin-top: -1px; border-top: 1px solid rgba(0, 0, 0, 0.03); border-bottom: 1px solid rgba(0, 0, 0, 0.03); box-sizing: border-box } #searchresult .ajaxSearchResults b { z-index: 1; background-color: #ddd } -#searchresult .ajaxSearchResults a { color: #1377c5; padding: 0.25rem 2rem 0.25rem 1rem; text-decoration: none; } +#searchresult .ajaxSearchResults a { padding: 0.25rem 2rem 0.25rem 1rem; text-decoration: none; } #searchresult .ajaxSearchResults a:hover { color: #333; background-color: #f2f2f2; } -#searchresult .ajaxSearchResults a > i { position: absolute; right: 0; top: 50%; width: 2rem; height: 2rem; margin-top: -1rem; line-height: 2rem; text-align: center; } +#searchresult .ajaxSearchResults a > i { position: absolute; right: 0; top: 50%; width: 2rem; height: 2rem; margin-top: -1rem; line-height: 2rem; text-align: center; color: #1976d2; } +#searchresult .ajaxSearchResults a.selected > i { color: #fff } #searchresult .ajaxSearchResults a.selected { z-index: 1; background-color: #1976d2; color: #fff; font-weight: 700; } #searchresult .ajaxSearchResults a .text-danger { color: #333; font-weight: 700 } #searchresult .ajaxSearchResults a.selected .text-danger { color: #ffc107; text-shadow: 0 0 1px rgba(0, 0, 0, 0.5); } +#searchresult .ajaxSearchResults .locked a { font-style: italic; color: #646464; } +#searchresult .ajaxSearchResults .disabled a { opacity: 0.5; color: #7d2a24; } @media (min-width: 1020px) { /*#mainMenu #nav > li > a > .fa { font-size: 1.2rem }*/ } From 339b360d78921252a261d40797b3d80e17ce6b2a Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Mon, 25 Sep 2017 00:46:04 +0300 Subject: [PATCH 213/577] updated top search style unpublished and deleted documents in result items --- manager/actions/search.static.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/manager/actions/search.static.php b/manager/actions/search.static.php index 39c50a2839..b6f2ed95cb 100644 --- a/manager/actions/search.static.php +++ b/manager/actions/search.static.php @@ -274,7 +274,7 @@ if ($docscounts > 0) { $output .= '
          • ' . $_lang["manage_documents"] . ' (' . $docscounts . ')
          • '; while ($row = $modx->db->getRow($rs)) { - $output .= '
          • ' . highlightingCoincidence($row['pagetitle'] . ' (' . $row['id'] . ')', $_REQUEST['searchfields']) . $_style['icons_external_link'] . '
          • '; + $output .= '' . highlightingCoincidence($row['pagetitle'] . ' (' . $row['id'] . ')', $_REQUEST['searchfields']) . $_style['icons_external_link'] . ''; } } } @@ -401,7 +401,7 @@ function highlightingCoincidence($text, $search) return preg_replace($regexp, '$1', $text); } -function addClassForItemList($locked = '', $disabled = '') +function addClassForItemList($locked = '', $disabled = '', $deleted = '') { $class = ''; if ($locked) { @@ -410,8 +410,11 @@ function addClassForItemList($locked = '', $disabled = '') if ($disabled) { $class .= ' disabled'; } + if ($deleted) { + $class .= ' deleted'; + } if ($class) { - $class = ' class="' . $class . '"'; + $class = ' class="' . trim($class) . '"'; } return $class; } From 8eab2901847d8b780546263b9a0974d73854de43 Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Mon, 25 Sep 2017 00:47:30 +0300 Subject: [PATCH 214/577] updated top search style unpublished and deleted documents in result items --- manager/media/style/default/css/mainmenu.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/media/style/default/css/mainmenu.css b/manager/media/style/default/css/mainmenu.css index df3f2b3973..c558776530 100644 --- a/manager/media/style/default/css/mainmenu.css +++ b/manager/media/style/default/css/mainmenu.css @@ -77,7 +77,8 @@ #searchresult .ajaxSearchResults a .text-danger { color: #333; font-weight: 700 } #searchresult .ajaxSearchResults a.selected .text-danger { color: #ffc107; text-shadow: 0 0 1px rgba(0, 0, 0, 0.5); } #searchresult .ajaxSearchResults .locked a { font-style: italic; color: #646464; } -#searchresult .ajaxSearchResults .disabled a { opacity: 0.5; color: #7d2a24; } +#searchresult .ajaxSearchResults .disabled a { opacity: .5; color: #7d2a24; } +#searchresult .ajaxSearchResults .deleted a { color: #a52a2a; text-decoration: line-through } @media (min-width: 1020px) { /*#mainMenu #nav > li > a > .fa { font-size: 1.2rem }*/ } From 718c7ecc2ed79b7919196a1bcdefcdfc0dc35d82 Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 25 Sep 2017 13:12:13 +0200 Subject: [PATCH 215/577] fix missing progressbar in DB info page fix missing progressbar in DB info page (only in new install) --- install/actions/tpl_connection.html | 564 ++++++++++++++-------------- 1 file changed, 287 insertions(+), 277 deletions(-) diff --git a/install/actions/tpl_connection.html b/install/actions/tpl_connection.html index 61ccf74215..eb1cac75e8 100644 --- a/install/actions/tpl_connection.html +++ b/install/actions/tpl_connection.html @@ -1,277 +1,287 @@ - - - - - - -

            [%connection_screen_database_info%]

            -

            [%connection_screen_server_connection_information%]

            -

            [%connection_screen_server_connection_note%]

            - -

            - -

            -

            - -

            -

            - -

            - - - -
            - - -
            -
            -

            [%connection_screen_database_connection_information%]

            -

            [%connection_screen_database_connection_note%]

            -

            - -

            -

            - -

            -

            -

            - -
            -

            -

            -

            - -
            -

            - - -
             
            -
            -
            -
            -
            -

            [%connection_screen_defaults%]

            -

            [%connection_screen_default_admin_user%]

            -

            [%connection_screen_default_admin_note%]

            -

            - -

            -

            - -

            -

            - -

            -

            - -

            - -

            [%default_language%]

            -

            [%default_language_description%]

            -

            -

            -

            -
            -
            - - - - - - - - - +
            +
              +
            • [%choose_language%]:  
            • +
            • [%installation_mode%]
            • +
            • [%optional_items%]
            • +
            • [%preinstall_validation%]
            • +
            • [%install_results%]
            • +
            +
            +
            +
            + + + + + +

            [%connection_screen_database_info%]

            +

            [%connection_screen_server_connection_information%]

            +

            [%connection_screen_server_connection_note%]

            + +

            + +

            +

            + +

            +

            + +

            + + + +
            + + +
            +
            +

            [%connection_screen_database_connection_information%]

            +

            [%connection_screen_database_connection_note%]

            +

            + +

            +

            + +

            +

            +

            + +
            +

            +

            +

            + +
            +

            + + +
             
            +
            +
            +
            +
            +

            [%connection_screen_defaults%]

            +

            [%connection_screen_default_admin_user%]

            +

            [%connection_screen_default_admin_note%]

            +

            + +

            +

            + +

            +

            + +

            +

            + +

            + +

            [%default_language%]

            +

            [%default_language_description%]

            +

            +

            +

            +
            +
            + + + + +
            + + + + From a3c5cb263885cfa469fc67a60cd08ca8e1537aea Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 25 Sep 2017 13:51:54 +0200 Subject: [PATCH 216/577] Updated setup data to EVO cms - Replaced all MODX words with EVO - Replaced all external links (no more links to modx.com) --- install/setup.data.sql | 386 ++++++++++++++++++++--------------------- 1 file changed, 193 insertions(+), 193 deletions(-) diff --git a/install/setup.data.sql b/install/setup.data.sql index 74f7a25edd..45725f6f1c 100644 --- a/install/setup.data.sql +++ b/install/setup.data.sql @@ -1,193 +1,193 @@ -# MODX Database Script for New/Upgrade Installations -# -# Each sql command is separated by double lines - -# -# Dumping data for table `documentgroup_names` -# - - -REPLACE INTO `{PREFIX}document_groups` VALUES ('1','1','3'); - - -REPLACE INTO `{PREFIX}documentgroup_names` VALUES ('1','Site Admin Pages','0','0'); - - -# -# Dumping data for table `site_content` -# - -REPLACE INTO `{PREFIX}site_content` VALUES ('1','document','text/html','Home','Welcome to MODX','Introduction to MODX','index','','1','0','0','0','0','Create and do amazing things with MODX','

            Install successful!

            \n

            You have successfully installed and configured MODX. We hope you find this site an adequate starting configuration for many small business, organization or personal websites; just change the template and content, and you\'ll be good to go! This site is preconfigured with a variety of options we hope are helpful, relevant and just plain cool for many marketing or personal sites:

            \n
              \n
            • Simple Blog. When logged into your site, you\'ll be able to create new entries from the front end. This can also be turned into a News publishing or PR publishing system. View example blog
            • \n
            • Easy Comments. When logged into your site, your registered site users can comment on your posts. View example
            • \n
            • RSS Feeds. Your site visitors can stay up to date using your site feeds. View RSS feed
            • \n
            • Automatic User Registration. Those that wish to comment on blogs must first create an account. This comes pre-configured with a \"Captcha\" anti-robot registration feature. View registration form
            • \n
            • QuickEdit. When you\'re logged into the manager, you can edit a page directly from the front end! More about CMS features
            • \n
            • Integrated Site Search. Allows visitors to search only the pages you wish them to search. Uses Ajax to display results without loading a new page.
            • \n
            • Powerful Navigation Builder. Duplicate or build virtually any navigation system with our dynamic menu builder code. The menu above, for example. More about menu features
            • \n
            • Ajax ready. You\'re on your way to Web 2.0 and AJAX goodness. More about Ajax features
            • \n
            • Custom \"page not found (404)\" page. Help visitors who go astray to find what they\'re looking for. View 404 page
            • \n
            • Contact Us form. A highly configurable contact form you should customize to point to the right email address. Comes pre-configured to prevent mail-form-injection so your site does not become a source for spam. View form
            • \n
            • Newest documents list. Shows your visitor the most recently added pages (configurable).
            • \n
            • Customizable Content Manager. Preview uploaded images, hide or rename fields and lots more. See ManagerManager\'s documentation for details and instructions. Quick start: ManagerManager by default will look for \"rules\" in a Chunk named \"mm_rules\". Simply copy or rename the Chunk named \"mm_demo_rules\" to \"mm_rules\" and try it out!
            • \n
            • phpThumb. Examples to use phpThumb to crop images.
            • \n
            \n

            Full documentation can be found on the official documentation site.

            \n

            To log into the MODX Control Panel and start customizing this site, point your browser to /manager/.

            ','1','{BOOTSTRAP_SQL_ID}','0','1','1','1','1144904400','1','1378084284','0','0','0','0','0','Home','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('2','document','text/html','Blog','My Blog','','blog','','1','0','0','0','1','','[[Ditto? &parents=`2` &display=`2` &removeChunk=`Comments` &tpl=`ditto_blog` &paginate=`1` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`1` &tagData=`documentTags`]]\n\n

            Showing [+start+] - [+stop+] of [+total+] Articles

            \n\n
            [+previous+] [+pages+] [+next+]
            \n\n
             
            \n\n[[Reflect? &config=`wordpress` &dittoSnippetParameters=`parents:2` &id=`wp` &getDocuments=`1`]]','1','{BOOTSTRAP_SQL_ID}','1','0','0','1','1144904400','1','1159818696','0','0','0','0','0','Blog','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','[*loginName*]','Login to Enable to Comments','','login','','1','0','0','0','0','','

            In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

            \n
            [!WebLogin? &tpl=`WebLogin_tplForm` &loginhomeid=`2`!]
            ','1','{BOOTSTRAP_SQL_ID}','9','0','0','1','1144904400','1','1144904400','0','0','0','0','0','[*loginName*]','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('5','document','text/html','Request an Account','Sign Up for Full Site Privileges','','request-an-account','','1','0','0','0','0','','[[WebSignup? &tpl=`FormSignup` &groups=`Registered Users`]]','1','{BOOTSTRAP_SQL_ID}','7','0','0','1','1144904400','1','1158320704','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('6','document','text/html','Contact Us','Contact [(site_name)]','','contact-us','','1','0','0','0','0','','\n\n[!eForm? \n &formid=`ContactForm`\n &vericode=`1`\n &subject=`[+subject+]`\n &to=`[(emailsender)]` \n &ccsender=`1`\n &tpl=`ContactForm`\n &report=`ContactFormReport`\n &invalidClass=`invalidValue`\n &requiredClass=`requiredValue`\n &gotoid=`46`\n!]\n','0','{BOOTSTRAP_SQL_ID}','5','1','0','1','1144904400','1','1159303922','0','0','0','0','0','Contact us','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('7','document','text/html','404 - Document Not Found','Uh oh ... it\'s a 404! (Page Not Found)','','doc-not-found','','1','0','0','0','0','','

            Looks like you tried to go somewhere that does not exist... perhaps you need to login or you\'d like one of the following pages instead:

            \n\n[[Wayfinder? &startId=`0` &showDescription=`1`]]\n\n

            Want to find it the old fashioned way? Use the site search at the top of this site to find what you seek.

            \n\n','1','{BOOTSTRAP_SQL_ID}','12','0','1','1','1144904400','1','1159301173','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('8','document','text/html','Search Results','Your Search Results','','search-results','','1','0','0','0','0','','[!AjaxSearch? &showInputForm=`0` &ajaxSearch=`0`!]','0','{BOOTSTRAP_SQL_ID}','10','0','0','1','1144904400','1','1158613055','0','0','0','0','0','','1','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('9','document','text/html','Mini-Blog HOWTO','How to Start Posting with MODX Mini-Blogs','','article-1126081344','','1','0','0','2','0','','

            Setting up a mini-blog is relatively simple. Here\'s what you need to do to get started with making new posts:

            \n
              \n
            1. Login to the MODX Control Panel.
            2. \n
            3. Press the plus-sign next to the Blog(2) container resource to see the blog entries posted there.
            4. \n
            5. To make a new Blog entry, simply right-click the Blog container document and choose the \"Create Resource here\" menu option. To edit an existing blog article, right click the entry and choose the \"Edit Resource\" menu option.
            6. \n\n
            7. Write or edit the content and press save, making sure the document is published.
            8. \n
            9. Everything else is automatic; you\'re done!
            10. \n
            \n{{Comments}}','1','{BOOTSTRAP_SQL_ID}','0','1','1','-1','1144904400','1','1378084370','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('11','document','text/xml','RSS Feed','[(site_name)] RSS Feed','','feed.rss','','1','0','0','0','0','','[[Ditto? &parents=`2` &format=`rss` &display=`20` &total=`20` &removeChunk=`Comments`]]','0','0','11','0','0','1','1144904400','1','1160062859','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('14','document','text/html','Content Management','Ways to manage content','','cms','','1','0','0','15','0','','

            Manage your content in the backend

            \n

            The Manager is a skinnable feature-packed tool for admin users. You can add extra users and limit what functions they can access. MODX\'s Manager makes creating content and managing templates and reusable elements easy. Modules can be added to work with other datasets or make management tasks easier.

            \n

            Manage your content in the frontend

            \n

            The QuickEdit bar lets manager users edit content whilst browsing the site. Most content fields and template variables can be edited quickly and easily.

            \n

            Enable web users to add content

            \n

            Custom data entry is easy to code using the MODX API - so you can design forms and collect whatever information you need.

            ','1','{BOOTSTRAP_SQL_ID}','3','1','1','1','1144904400','1','1378086298','0','0','0','1378086298','1','Manage Content','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('15','document','text/html','MODX Features','MODX Features','','features','','1','0','0','0','1','','[[Wayfinder?startId=`[*id*]` &outerClass=`topnav`]]','1','{BOOTSTRAP_SQL_ID}','2','1','1','1','1144904400','1','1158452722','0','0','0','1144777367','1','Features','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('16','document','text/html','Ajax','Ajax and Web 2.0 ready','','ajax','','1','1159264800','0','15','0','','Ajax ready out-of-the-box\n

            MODX empowers users to build engaging sites today, with its pre-integrated Mootools javascript library.

            \n\n

            Check out the Ajax-powered search in this example site. The libraries are also used with QuickEdit, our front-end editing tool.

            \n\n

            Smart integration means the scripts are only included in the document head when needed - no unnecessary bloat on simple pages!

            \n\nWeb 2.0 today\n

            MODX makes child\'s play of building content managed sites with validating, accessible CSS layouts - so web standards compliance is easy. (You can create a site with excessively nested tables too, if you really want to).

            \n','1','{BOOTSTRAP_SQL_ID}','1','1','1','1','1144904400','1','1159307504','0','0','0','0','0','Ajax','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('18','document','text/html','Just a pretend, older post','This post should in fact be archived','','article-1128398162','','1','0','0','2','0','','

            Not so exciting, after all, eh?

            \n','1','{BOOTSTRAP_SQL_ID}','2','1','1','-1','1144904400','1','1159306886','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('22','document','text/html','Menus and Lists','Flexible Menus and Lists','','menus','','1','1159178400','0','15','0','','

            Your documents - listed how you want them

            \n

            MODX\'s document data structure has been designed to allow many different routines to redisplay the information in ways that suit your needs, such as a dynamic menu in your template.

            \n

            Since the last release of MODX, the community has produced many great snippets - reusable functions that you can call in your content or template. Two of the most widely useful are Ditto and Wayfinder.

            \n

            Wayfinder - the menu builder

            \n

            Allows you to template every part of the menu. On this site, Wayfinder is being used to generate the drop-down menus, but many types of menus and sitemaps are possible.

            \n

            Ditto - the document lister

            \n

            Uses include listing the most recent blog posts, producing a site map, listing related documents (using a TV filter) and generating an RSS feed. You could even write a menu with it. On this site, Ditto is being used for the blog posts list on the Blog page, and the list on the right of some templates.

            \n

            Unlimited Customization

            \n

            If you can\'t quite get your desired effect using templating and the many options of Ditto and Wayfinder, you can write your own routine, or look for other snippets in the MODX repository. MODX\'s fields for Menu Title, summaries, menu position etc can be used via the API to produce anything you can imagine.

            ','1','{BOOTSTRAP_SQL_ID}','2','1','1','1','1144904400','1','1160148522','0','0','0','0','0','Menus and Lists','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('24','document','text/html','Extendable by design','Extendable by design','','extendable','','1','1159092732','0','15','0','','

            The MODX community has created many add-ons which can be found in the Repository, from image galleries and e-commerce to smaller utilities.

            \n

            Template Variables with Bindings

            \n

            TVs - Template Variables - are powerful extra fields that you can use with your documents. As an example of an advanced template element that returns a different thing dependent on code or data, we created an @BINDING for the name of the Login menu item. This changes the menu name from Login to Logout based on your logged in state. The @BINDING as follows was placed in the default value as: @EVAL if ($modx->getLoginUserID()) return \'Logout\'; else return \'Login\';

            \n

            Using jQuery-effects

            \n

            We used some simple effects to highlight various things on the front/home page to demonstrate how easy it is to create a useful way to draw attention to things. To see them in action on the home page, click the Integrated Site Search, Related Links or Newest Documents headers.

            \n

            Custom Forms

            \n

            To demonstrate how to link to custom forms, we customized the calls to the Webuser Registration system and the Login system.

            \n

            And more

            \n

            Rich Text Editor for blog entries. To make it easier to format blog posts with simple text formatting, we modified the blog to use a custom RTE-enabled Template Variable (TV).

            \n

            Smart-Summary logic. When splitting the full blog/news posts you simply insert a \"<!-- splitter -->\" where you want the break to occur. In addition, if that leaves any important tags open, it will try to match them and close them so it doesn\'t mess up your site layout with unclosed OL, UL or DIV tags.

            ','1','{BOOTSTRAP_SQL_ID}','4','1','1','2','1144904400','1','1159309971','0','0','0','0','0','Extendability','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('32','document','text/html','Design','Site Design','','design','','1','0','0','0','0','','

            Credits

            \n

            The MODX Starter-theme is based on Bootstrap 3.3.6 and made by graffx.nl and fuseit.de.

            ','1','{BOOTSTRAP_SQL_ID}','4','1','1','2','1144904400','1','1160112322','0','0','0','1144912754','1','Design','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('33','document','text/html','Getting Help','Getting Help with MODX','','getting-help','','1','0','0','0','0','','

            The team behind MODX strives to constantly add to and refine the documentation to help you get up to speed with MODX:

            \n
              \n
            • For basic instructions on integrating custom templates into MODX, please see the Designer\'s Guide.
            • \n
            • For an introduction to working in MODX from the content editors perspectve, see the Content Editor\'s Guide.
            • \n
            • For a detailed overview of the backend "manager" and setting up Users and Groups, please peruse the Administration Guide.
            • \n
            • For developers, architecture and API documentation can be found in the Developer\'s Guide.
            • \n
            • And if someone has installed this site for you, but you\'re curious as to the steps they went through, please see the Getting Started Guide.
            • \n
            \n\n

            And don\'t forget, you can always learn and ask questions at the MODX forums. \n','1','{BOOTSTRAP_SQL_ID}','3','1','1','2','1144904400','2','1144904400','0','0','0','0','0','Getting Help','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('37','document','text/html','[*loginName*]','The page you\'re trying to reach requires a login','','blog-login','','1','0','0','0','0','','

            In order to add a blog entry, you must be logged in as a Site Admin webuser. Also, commenting on posts requires a login. Contact the site owner for permissions to create new post, or create a web user account to automatically receive commenting privileges. If you already have an account, please login below.

            \n\n[!WebLogin? &tpl=`WebLogin_tplForm` &loginhomeid=`3`!]','1','{BOOTSTRAP_SQL_ID}','8','0','0','1','1144904400','1','1158599931','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('46','document','text/html','Thank You','','','thank-you','','1','0','0','0','0','','

            Thank You!

            \n

            We do appreciate your feedback. Your comments have been submitted to our office and hopefully someone will bother to actually read it. You should also receive a copy of the message in your inbox.

            \n

            Please be assured that we will do our best not to ignore you, but if today is a Monday please try again in a few days.

            \n','1','{BOOTSTRAP_SQL_ID}','6','1','1','1','1159302141','1','1159302892','0','0','0','1159302182','1','','0','0','0','0','1','1'); - - -# -# Dumping data for table `site_htmlsnippets` -# - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'FormSignup', 'For the weblogin signup', 0, 'none', 2, 0, ' \n\n
            \n\n

            User Details

            \n
            \n \n Items marked by * are required
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n\n
            \n

            Password

            \n \n \n
            \n
            \n \n \n
            \n \n
            \n

            Optional Account Profile Info

            \n \n \n
            \n \n
            \n

            Bot-Patrol

            \n

            Enter the word/number combination shown in the image below.

            \n

            If you have trouble reading the code, click on the code itself to generate a new random code.

            \n \n
            \n \n
            \n \n
            \n\n
            \n\n\n
            \n\n

            Signup completed successfully!
            \nYour account was created. A copy of your signup information was sent to your email address.

            \n', 0, UNIX_TIMESTAMP(), 0, 0); - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'nl_sidebar', 'Default Template TPL for Ditto', 0, 'none', 1, 0, '[+title+]
            \n[+longtitle+]

            ', 0, UNIX_TIMESTAMP(), 0, 0); - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ditto_blog', 'Blog Template', 0, 'none', 1, 0, '
            \n \n \n \n \n

            [+title+]

            \n \n \n [+summary+]\n \n
            ','0', UNIX_TIMESTAMP(), 0, 0); - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'Comments', 'Comments (Jot) showing beneath a blog entry.', 0, 'none', 1, 0, '
            \r\n[!Jot? &customfields=`name,email` &subscribe=`1` &pagination=`4` &badwords=`dotNet` &canmoderate=`Site Admins` &tplForm=`Comments_tplForm` &tplComments=`Comments_tplComments`!]\r\n
            ', 0, UNIX_TIMESTAMP(), 0, 0); - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactForm', 'eForm-template for showing contact-form', 0, 'none', 1, 0, '
            \n \n \n \n \n \n
            \n \n \n
            \n
            \n \n \n
            \n \n
            \n \n \n
            \n \n
            \n \n \n
            \n \n \n
            \n
            \n
            \n verification code\n
            \n
            \n \n
            \n
            \n
            \n \n
            \n \n
            \n\n
            \n\n\n', 0, UNIX_TIMESTAMP(), 0, 0); - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactFormReport', 'eForm-template for sending form-data by mail', 0, 'none', 1, 0, '

            This is a response sent by [+name+] using the feedback form on the website. The details of the message follow below:

            \r\n\r\n\r\n

            Name: [+name+]

            \r\n

            Email: [+email+]

            \r\n

            Regarding: [+subject+]

            \r\n

            comments:
            [+message+]

            \r\n\r\n

            You can use this link to reply: [+email+]

            \r\n', 0, UNIX_TIMESTAMP(), 0, 0); - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'reflect_month_tpl', 'For the yearly archive. Use with Ditto.', 0, 'none', 1, 0, '[+month+] [+year+]', 0, UNIX_TIMESTAMP(), 0, 0); - - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactStyles', 'Styles for form validation', 0, 'none', 1, 0, '', 0, UNIX_TIMESTAMP(), 0, 0); - -# -# Dumping data for table `site_tmplvar_contentvalues` -# - - -REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('1','3','9','demo miniblog howto tutorial posting'); - - -REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('2','3','18','demo older posting'); - - -# -# Dumping data for table `system_settings` -# - - -REPLACE INTO `{PREFIX}system_settings` VALUES('error_page', '7'); - - -REPLACE INTO `{PREFIX}system_settings` VALUES('unauthorized_page', '4'); - - -# -# Dumping data for table `web_groups` -# - - -REPLACE INTO `{PREFIX}web_groups` VALUES ('1','1','1'); - - -# -# Dumping data for table `web_user_attributes` -# - - -REPLACE INTO `{PREFIX}web_user_attributes` VALUES ('1','1','Site Admin','0','you@example.com','','','0','0','0','25','1129049624','1129063123','0','f426f3209310abfddf2ee00e929774b4','0','0','','','','','','','','', UNIX_TIMESTAMP(), 0); - - -# -# Dumping data for table `web_users` -# - - -REPLACE INTO `{PREFIX}web_users` VALUES ('1','siteadmin','5f4dcc3b5aa765d61d8327deb882cf99',''); - - -# -# Dumping data for table `webgroup_access` -# - - -REPLACE INTO `{PREFIX}webgroup_access` VALUES ('1','1','1'); - - -# -# Dumping data for table `webgroup_names` -# - - -REPLACE INTO `{PREFIX}webgroup_names` VALUES ('1','Site Admins'); - - -REPLACE INTO `{PREFIX}webgroup_names` VALUES ('2','Registered Users'); - - - -# -# Table structure for table `jot_content` -# - - -CREATE TABLE IF NOT EXISTS `{PREFIX}jot_content` (`id` int(10) NOT NULL auto_increment, `title` varchar(255) default NULL, `tagid` varchar(50) default NULL, `published` int(1) NOT NULL default '0', `uparent` int(10) NOT NULL default '0', `parent` int(10) NOT NULL default '0', `flags` varchar(25) default NULL, `secip` varchar(32) default NULL, `sechash` varchar(32) default NULL, `content` mediumtext, `customfields` mediumtext, `mode` int(1) NOT NULL default '1', `createdby` int(10) NOT NULL default '0', `createdon` int(20) NOT NULL default '0', `editedby` int(10) NOT NULL default '0', `editedon` int(20) NOT NULL default '0', `deleted` int(1) NOT NULL default '0', `deletedon` int(20) NOT NULL default '0', `deletedby` int(10) NOT NULL default '0', `publishedon` int(20) NOT NULL default '0', `publishedby` int(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent` (`parent`), KEY `secip` (`secip`), KEY `tagidx` (`tagid`), KEY `uparent` (`uparent`)) ENGINE=MyISAM; - - -# -# Dumping data for table `jot_content` -# - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('9','The first comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the first comment.','','0','0','1160420310','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('10','Second comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the second comment and uses an alternate row color. I also supplied a name, but i\'m not logged in.','Armand','0','0','1160420453','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('11','No abuse','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Notice that I can\'t abuse html, , or [+placeholder+] tags.\r\n\r\nA new line also doesn\'t come unnoticed.','Armand','0','0','1160420681','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('12','Posting when logged in','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','When you are logged in your own posts have a special color so you can easily spot them from the comment view. \r\n\r\nThe form also does not display any guest fields when logged in.','','0','-1','1160421310','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('13','Managers','','1','9','0','','87.211.130.14','91e230cf219e3ade10f32d6a41d0bd4d','Comments posted when only logged in as a manager user will use your manager name.\r\n\r\nModerators options are always shown when you are logged in as manager user.','','0','1','1160421487','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('14','Moderation','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','In this setup the Site Admins group is defined as being the moderator for this particular comment view. These users will have extra moderation options \r\n\r\nManager users, Moderators or Trusted users can post bad words like: dotNet.','','0','-1','1160422081','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('15','I\'m untrusted','','0','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Untrusted users however can NOT post bad words like: dotNet. When they do the posts will be unpublished.','','0','0','1160422167','0','0','0','0','0','0','0'); - - -# -# Table structure for table `jot_subscriptions` -# - - -CREATE TABLE IF NOT EXISTS `{PREFIX}jot_subscriptions` (`id` mediumint(10) NOT NULL auto_increment, `uparent` mediumint(10) NOT NULL default '0', `tagid` varchar(50) NOT NULL default '', `userid` mediumint(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `uparent` (`uparent`), KEY `tagid` (`tagid`), KEY `userid` (`userid`)) ENGINE=MyISAM; - +# EVO Database Script for New/Upgrade Installations +# +# Each sql command is separated by double lines + +# +# Dumping data for table `documentgroup_names` +# + + +REPLACE INTO `{PREFIX}document_groups` VALUES ('1','1','3'); + + +REPLACE INTO `{PREFIX}documentgroup_names` VALUES ('1','Site Admin Pages','0','0'); + + +# +# Dumping data for table `site_content` +# + +REPLACE INTO `{PREFIX}site_content` VALUES ('1','document','text/html','Home','Welcome to EVO','Introduction to EVO','index','','1','0','0','0','0','Create and do amazing things with EVO','

            Install successful!

            \n

            You have successfully installed and configured EVO. We hope you find this site an adequate starting configuration for many small business, organization or personal websites; just change the template and content, and you\'ll be good to go! This site is preconfigured with a variety of options we hope are helpful, relevant and just plain cool for many marketing or personal sites:

            \n
              \n
            • Simple Blog. When logged into your site, you\'ll be able to create new entries from the front end. This can also be turned into a News publishing or PR publishing system. View example blog
            • \n
            • Easy Comments. When logged into your site, your registered site users can comment on your posts. View example
            • \n
            • RSS Feeds. Your site visitors can stay up to date using your site feeds. View RSS feed
            • \n
            • Automatic User Registration. Those that wish to comment on blogs must first create an account. This comes pre-configured with a \"Captcha\" anti-robot registration feature. View registration form
            • \n
            • QuickEdit. When you\'re logged into the manager, you can edit a page directly from the front end! More about CMS features
            • \n
            • Integrated Site Search. Allows visitors to search only the pages you wish them to search. Uses Ajax to display results without loading a new page.
            • \n
            • Powerful Navigation Builder. Duplicate or build virtually any navigation system with our dynamic menu builder code. The menu above, for example. More about menu features
            • \n
            • Ajax ready. You\'re on your way to Web 2.0 and AJAX goodness. More about Ajax features
            • \n
            • Custom \"page not found (404)\" page. Help visitors who go astray to find what they\'re looking for. View 404 page
            • \n
            • Contact Us form. A highly configurable contact form you should customize to point to the right email address. Comes pre-configured to prevent mail-form-injection so your site does not become a source for spam. View form
            • \n
            • Newest documents list. Shows your visitor the most recently added pages (configurable).
            • \n
            • Customizable Content Manager. Preview uploaded images, hide or rename fields and lots more. See ManagerManager\'s documentation for details and instructions. Quick start: ManagerManager by default will look for \"rules\" in a Chunk named \"mm_rules\". Simply copy or rename the Chunk named \"mm_demo_rules\" to \"mm_rules\" and try it out!
            • \n
            • phpThumb. Examples to use phpThumb to crop images.
            • \n
            \n

            Full documentation can be found on the official documentation site.

            \n

            To log into the EVO Control Panel and start customizing this site, point your browser to /manager/.

            ','1','{BOOTSTRAP_SQL_ID}','0','1','1','1','1144904400','1','1378084284','0','0','0','0','0','Home','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('2','document','text/html','Blog','My Blog','','blog','','1','0','0','0','1','','[[Ditto? &parents=`2` &display=`2` &removeChunk=`Comments` &tpl=`ditto_blog` &paginate=`1` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`1` &tagData=`documentTags`]]\n\n

            Showing [+start+] - [+stop+] of [+total+] Articles

            \n\n
            [+previous+] [+pages+] [+next+]
            \n\n
             
            \n\n[[Reflect? &config=`wordpress` &dittoSnippetParameters=`parents:2` &id=`wp` &getDocuments=`1`]]','1','{BOOTSTRAP_SQL_ID}','1','0','0','1','1144904400','1','1159818696','0','0','0','0','0','Blog','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','[*loginName*]','Login to Enable to Comments','','login','','1','0','0','0','0','','

            In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

            \n
            [!WebLogin? &tpl=`WebLogin_tplForm` &loginhomeid=`2`!]
            ','1','{BOOTSTRAP_SQL_ID}','9','0','0','1','1144904400','1','1144904400','0','0','0','0','0','[*loginName*]','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('5','document','text/html','Request an Account','Sign Up for Full Site Privileges','','request-an-account','','1','0','0','0','0','','[[WebSignup? &tpl=`FormSignup` &groups=`Registered Users`]]','1','{BOOTSTRAP_SQL_ID}','7','0','0','1','1144904400','1','1158320704','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('6','document','text/html','Contact Us','Contact [(site_name)]','','contact-us','','1','0','0','0','0','','\n\n[!eForm? \n &formid=`ContactForm`\n &vericode=`1`\n &subject=`[+subject+]`\n &to=`[(emailsender)]` \n &ccsender=`1`\n &tpl=`ContactForm`\n &report=`ContactFormReport`\n &invalidClass=`invalidValue`\n &requiredClass=`requiredValue`\n &gotoid=`46`\n!]\n','0','{BOOTSTRAP_SQL_ID}','5','1','0','1','1144904400','1','1159303922','0','0','0','0','0','Contact us','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('7','document','text/html','404 - Document Not Found','Uh oh ... it\'s a 404! (Page Not Found)','','doc-not-found','','1','0','0','0','0','','

            Looks like you tried to go somewhere that does not exist... perhaps you need to login or you\'d like one of the following pages instead:

            \n\n[[Wayfinder? &startId=`0` &showDescription=`1`]]\n\n

            Want to find it the old fashioned way? Use the site search at the top of this site to find what you seek.

            \n\n','1','{BOOTSTRAP_SQL_ID}','12','0','1','1','1144904400','1','1159301173','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('8','document','text/html','Search Results','Your Search Results','','search-results','','1','0','0','0','0','','[!AjaxSearch? &showInputForm=`0` &ajaxSearch=`0`!]','0','{BOOTSTRAP_SQL_ID}','10','0','0','1','1144904400','1','1158613055','0','0','0','0','0','','1','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('9','document','text/html','Mini-Blog HOWTO','How to Start Posting with EVO Mini-Blogs','','article-1126081344','','1','0','0','2','0','','

            Setting up a mini-blog is relatively simple. Here\'s what you need to do to get started with making new posts:

            \n
              \n
            1. Login to the EVO Control Panel.
            2. \n
            3. Press the plus-sign next to the Blog(2) container resource to see the blog entries posted there.
            4. \n
            5. To make a new Blog entry, simply right-click the Blog container document and choose the \"Create Resource here\" menu option. To edit an existing blog article, right click the entry and choose the \"Edit Resource\" menu option.
            6. \n\n
            7. Write or edit the content and press save, making sure the document is published.
            8. \n
            9. Everything else is automatic; you\'re done!
            10. \n
            \n{{Comments}}','1','{BOOTSTRAP_SQL_ID}','0','1','1','-1','1144904400','1','1378084370','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('11','document','text/xml','RSS Feed','[(site_name)] RSS Feed','','feed.rss','','1','0','0','0','0','','[[Ditto? &parents=`2` &format=`rss` &display=`20` &total=`20` &removeChunk=`Comments`]]','0','0','11','0','0','1','1144904400','1','1160062859','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('14','document','text/html','Content Management','Ways to manage content','','cms','','1','0','0','15','0','','

            Manage your content in the backend

            \n

            The Manager is a skinnable feature-packed tool for admin users. You can add extra users and limit what functions they can access. EVO\'s Manager makes creating content and managing templates and reusable elements easy. Modules can be added to work with other datasets or make management tasks easier.

            \n

            Manage your content in the frontend

            \n

            The QuickEdit bar lets manager users edit content whilst browsing the site. Most content fields and template variables can be edited quickly and easily.

            \n

            Enable web users to add content

            \n

            Custom data entry is easy to code using the EVO API - so you can design forms and collect whatever information you need.

            ','1','{BOOTSTRAP_SQL_ID}','3','1','1','1','1144904400','1','1378086298','0','0','0','1378086298','1','Manage Content','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('15','document','text/html','EVO Features','EVO Features','','features','','1','0','0','0','1','','[[Wayfinder?startId=`[*id*]` &outerClass=`topnav`]]','1','{BOOTSTRAP_SQL_ID}','2','1','1','1','1144904400','1','1158452722','0','0','0','1144777367','1','Features','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('16','document','text/html','Ajax','Ajax and Web 2.0 ready','','ajax','','1','1159264800','0','15','0','','Ajax ready out-of-the-box\n

            EVO empowers users to build engaging sites today, with its pre-integrated Mootools javascript library.

            \n\n

            Check out the Ajax-powered search in this example site. The libraries are also used with QuickEdit, our front-end editing tool.

            \n\n

            Smart integration means the scripts are only included in the document head when needed - no unnecessary bloat on simple pages!

            \n\nWeb 2.0 today\n

            EVO makes child\'s play of building content managed sites with validating, accessible CSS layouts - so web standards compliance is easy. (You can create a site with excessively nested tables too, if you really want to).

            \n','1','{BOOTSTRAP_SQL_ID}','1','1','1','1','1144904400','1','1159307504','0','0','0','0','0','Ajax','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('18','document','text/html','Just a pretend, older post','This post should in fact be archived','','article-1128398162','','1','0','0','2','0','','

            Not so exciting, after all, eh?

            \n','1','{BOOTSTRAP_SQL_ID}','2','1','1','-1','1144904400','1','1159306886','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('22','document','text/html','Menus and Lists','Flexible Menus and Lists','','menus','','1','1159178400','0','15','0','','

            Your documents - listed how you want them

            \n

            EVO\'s document data structure has been designed to allow many different routines to redisplay the information in ways that suit your needs, such as a dynamic menu in your template.

            \n

            Since the last release of EVO, the community has produced many great snippets - reusable functions that you can call in your content or template. Two of the most widely useful are Ditto and Wayfinder.

            \n

            Wayfinder - the menu builder

            \n

            Allows you to template every part of the menu. On this site, Wayfinder is being used to generate the drop-down menus, but many types of menus and sitemaps are possible.

            \n

            Ditto - the document lister

            \n

            Uses include listing the most recent blog posts, producing a site map, listing related documents (using a TV filter) and generating an RSS feed. You could even write a menu with it. On this site, Ditto is being used for the blog posts list on the Blog page, and the list on the right of some templates.

            \n

            Unlimited Customization

            \n

            If you can\'t quite get your desired effect using templating and the many options of Ditto and Wayfinder, you can write your own routine, or look for other snippets in the EVO repository. EVO\'s fields for Menu Title, summaries, menu position etc can be used via the API to produce anything you can imagine.

            ','1','{BOOTSTRAP_SQL_ID}','2','1','1','1','1144904400','1','1160148522','0','0','0','0','0','Menus and Lists','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('24','document','text/html','Extendable by design','Extendable by design','','extendable','','1','1159092732','0','15','0','','

            The EVO community has created many add-ons which can be found in the Repository, from image galleries and e-commerce to smaller utilities.

            \n

            Template Variables with Bindings

            \n

            TVs - Template Variables - are powerful extra fields that you can use with your documents. As an example of an advanced template element that returns a different thing dependent on code or data, we created an @BINDING for the name of the Login menu item. This changes the menu name from Login to Logout based on your logged in state. The @BINDING as follows was placed in the default value as: @EVAL if ($modx->getLoginUserID()) return \'Logout\'; else return \'Login\';

            \n

            Using jQuery-effects

            \n

            We used some simple effects to highlight various things on the front/home page to demonstrate how easy it is to create a useful way to draw attention to things. To see them in action on the home page, click the Integrated Site Search, Related Links or Newest Documents headers.

            \n

            Custom Forms

            \n

            To demonstrate how to link to custom forms, we customized the calls to the Webuser Registration system and the Login system.

            \n

            And more

            \n

            Rich Text Editor for blog entries. To make it easier to format blog posts with simple text formatting, we modified the blog to use a custom RTE-enabled Template Variable (TV).

            \n

            Smart-Summary logic. When splitting the full blog/news posts you simply insert a \"<!-- splitter -->\" where you want the break to occur. In addition, if that leaves any important tags open, it will try to match them and close them so it doesn\'t mess up your site layout with unclosed OL, UL or DIV tags.

            ','1','{BOOTSTRAP_SQL_ID}','4','1','1','2','1144904400','1','1159309971','0','0','0','0','0','Extendability','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('32','document','text/html','Design','Site Design','','design','','1','0','0','0','0','','

            Credits

            \n

            The EVO Starter-theme is based on Bootstrap 3.3.6 and made by graffx.nl and fuseit.de.

            ','1','{BOOTSTRAP_SQL_ID}','4','1','1','2','1144904400','1','1160112322','0','0','0','1144912754','1','Design','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('33','document','text/html','Getting Help','Getting Help with EVO','','getting-help','','1','0','0','0','0','','

            The team behind EVO strives to constantly add to and refine the documentation to help you get up to speed with EVO:

            \n
              \n
            • For basic instructions on integrating custom templates into EVO, please see the Designer\'s Guide.
            • \n
            • For an introduction to working in EVO from the content editors perspectve, see the Content Editor\'s Guide.
            • \n
            • For a detailed overview of the backend "manager" and setting up Users and Groups, please peruse the Administration Guide.
            • \n
            • For developers, architecture and API documentation can be found in the Developer\'s Guide.
            • \n
            • And if someone has installed this site for you, but you\'re curious as to the steps they went through, please see the Getting Started Guide.
            • \n
            \n\n

            And don\'t forget, you can always learn and ask questions at the EVO forums. \n','1','{BOOTSTRAP_SQL_ID}','3','1','1','2','1144904400','2','1144904400','0','0','0','0','0','Getting Help','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('37','document','text/html','[*loginName*]','The page you\'re trying to reach requires a login','','blog-login','','1','0','0','0','0','','

            In order to add a blog entry, you must be logged in as a Site Admin webuser. Also, commenting on posts requires a login. Contact the site owner for permissions to create new post, or create a web user account to automatically receive commenting privileges. If you already have an account, please login below.

            \n\n[!WebLogin? &tpl=`WebLogin_tplForm` &loginhomeid=`3`!]','1','{BOOTSTRAP_SQL_ID}','8','0','0','1','1144904400','1','1158599931','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('46','document','text/html','Thank You','','','thank-you','','1','0','0','0','0','','

            Thank You!

            \n

            We do appreciate your feedback. Your comments have been submitted to our office and hopefully someone will bother to actually read it. You should also receive a copy of the message in your inbox.

            \n

            Please be assured that we will do our best not to ignore you, but if today is a Monday please try again in a few days.

            \n','1','{BOOTSTRAP_SQL_ID}','6','1','1','1','1159302141','1','1159302892','0','0','0','1159302182','1','','0','0','0','0','1','1'); + + +# +# Dumping data for table `site_htmlsnippets` +# + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'FormSignup', 'For the weblogin signup', 0, 'none', 2, 0, ' \n\n
            \n\n

            User Details

            \n
            \n \n Items marked by * are required
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n\n
            \n

            Password

            \n \n \n
            \n
            \n \n \n
            \n \n
            \n

            Optional Account Profile Info

            \n \n \n
            \n \n
            \n

            Bot-Patrol

            \n

            Enter the word/number combination shown in the image below.

            \n

            If you have trouble reading the code, click on the code itself to generate a new random code.

            \n \n
            \n \n
            \n \n
            \n\n
            \n\n\n
            \n\n

            Signup completed successfully!
            \nYour account was created. A copy of your signup information was sent to your email address.

            \n', 0, UNIX_TIMESTAMP(), 0, 0); + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'nl_sidebar', 'Default Template TPL for Ditto', 0, 'none', 1, 0, '[+title+]
            \n[+longtitle+]

            ', 0, UNIX_TIMESTAMP(), 0, 0); + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ditto_blog', 'Blog Template', 0, 'none', 1, 0, '
            \n \n \n \n \n

            [+title+]

            \n \n \n [+summary+]\n \n
            ','0', UNIX_TIMESTAMP(), 0, 0); + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'Comments', 'Comments (Jot) showing beneath a blog entry.', 0, 'none', 1, 0, '
            \r\n[!Jot? &customfields=`name,email` &subscribe=`1` &pagination=`4` &badwords=`dotNet` &canmoderate=`Site Admins` &tplForm=`Comments_tplForm` &tplComments=`Comments_tplComments`!]\r\n
            ', 0, UNIX_TIMESTAMP(), 0, 0); + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactForm', 'eForm-template for showing contact-form', 0, 'none', 1, 0, '
            \n \n \n \n \n \n
            \n \n \n
            \n
            \n \n \n
            \n \n
            \n \n \n
            \n \n
            \n \n \n
            \n \n \n
            \n
            \n
            \n verification code\n
            \n
            \n \n
            \n
            \n
            \n \n
            \n \n
            \n\n
            \n\n\n', 0, UNIX_TIMESTAMP(), 0, 0); + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactFormReport', 'eForm-template for sending form-data by mail', 0, 'none', 1, 0, '

            This is a response sent by [+name+] using the feedback form on the website. The details of the message follow below:

            \r\n\r\n\r\n

            Name: [+name+]

            \r\n

            Email: [+email+]

            \r\n

            Regarding: [+subject+]

            \r\n

            comments:
            [+message+]

            \r\n\r\n

            You can use this link to reply: [+email+]

            \r\n', 0, UNIX_TIMESTAMP(), 0, 0); + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'reflect_month_tpl', 'For the yearly archive. Use with Ditto.', 0, 'none', 1, 0, '[+month+] [+year+]', 0, UNIX_TIMESTAMP(), 0, 0); + + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactStyles', 'Styles for form validation', 0, 'none', 1, 0, '', 0, UNIX_TIMESTAMP(), 0, 0); + +# +# Dumping data for table `site_tmplvar_contentvalues` +# + + +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('1','3','9','demo miniblog howto tutorial posting'); + + +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('2','3','18','demo older posting'); + + +# +# Dumping data for table `system_settings` +# + + +REPLACE INTO `{PREFIX}system_settings` VALUES('error_page', '7'); + + +REPLACE INTO `{PREFIX}system_settings` VALUES('unauthorized_page', '4'); + + +# +# Dumping data for table `web_groups` +# + + +REPLACE INTO `{PREFIX}web_groups` VALUES ('1','1','1'); + + +# +# Dumping data for table `web_user_attributes` +# + + +REPLACE INTO `{PREFIX}web_user_attributes` VALUES ('1','1','Site Admin','0','you@example.com','','','0','0','0','25','1129049624','1129063123','0','f426f3209310abfddf2ee00e929774b4','0','0','','','','','','','','', UNIX_TIMESTAMP(), 0); + + +# +# Dumping data for table `web_users` +# + + +REPLACE INTO `{PREFIX}web_users` VALUES ('1','siteadmin','5f4dcc3b5aa765d61d8327deb882cf99',''); + + +# +# Dumping data for table `webgroup_access` +# + + +REPLACE INTO `{PREFIX}webgroup_access` VALUES ('1','1','1'); + + +# +# Dumping data for table `webgroup_names` +# + + +REPLACE INTO `{PREFIX}webgroup_names` VALUES ('1','Site Admins'); + + +REPLACE INTO `{PREFIX}webgroup_names` VALUES ('2','Registered Users'); + + + +# +# Table structure for table `jot_content` +# + + +CREATE TABLE IF NOT EXISTS `{PREFIX}jot_content` (`id` int(10) NOT NULL auto_increment, `title` varchar(255) default NULL, `tagid` varchar(50) default NULL, `published` int(1) NOT NULL default '0', `uparent` int(10) NOT NULL default '0', `parent` int(10) NOT NULL default '0', `flags` varchar(25) default NULL, `secip` varchar(32) default NULL, `sechash` varchar(32) default NULL, `content` mediumtext, `customfields` mediumtext, `mode` int(1) NOT NULL default '1', `createdby` int(10) NOT NULL default '0', `createdon` int(20) NOT NULL default '0', `editedby` int(10) NOT NULL default '0', `editedon` int(20) NOT NULL default '0', `deleted` int(1) NOT NULL default '0', `deletedon` int(20) NOT NULL default '0', `deletedby` int(10) NOT NULL default '0', `publishedon` int(20) NOT NULL default '0', `publishedby` int(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent` (`parent`), KEY `secip` (`secip`), KEY `tagidx` (`tagid`), KEY `uparent` (`uparent`)) ENGINE=MyISAM; + + +# +# Dumping data for table `jot_content` +# + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('9','The first comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the first comment.','','0','0','1160420310','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('10','Second comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the second comment and uses an alternate row color. I also supplied a name, but i\'m not logged in.','Armand','0','0','1160420453','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('11','No abuse','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Notice that I can\'t abuse html, , or [+placeholder+] tags.\r\n\r\nA new line also doesn\'t come unnoticed.','Armand','0','0','1160420681','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('12','Posting when logged in','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','When you are logged in your own posts have a special color so you can easily spot them from the comment view. \r\n\r\nThe form also does not display any guest fields when logged in.','','0','-1','1160421310','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('13','Managers','','1','9','0','','87.211.130.14','91e230cf219e3ade10f32d6a41d0bd4d','Comments posted when only logged in as a manager user will use your manager name.\r\n\r\nModerators options are always shown when you are logged in as manager user.','','0','1','1160421487','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('14','Moderation','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','In this setup the Site Admins group is defined as being the moderator for this particular comment view. These users will have extra moderation options \r\n\r\nManager users, Moderators or Trusted users can post bad words like: dotNet.','','0','-1','1160422081','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('15','I\'m untrusted','','0','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Untrusted users however can NOT post bad words like: dotNet. When they do the posts will be unpublished.','','0','0','1160422167','0','0','0','0','0','0','0'); + + +# +# Table structure for table `jot_subscriptions` +# + + +CREATE TABLE IF NOT EXISTS `{PREFIX}jot_subscriptions` (`id` mediumint(10) NOT NULL auto_increment, `uparent` mediumint(10) NOT NULL default '0', `tagid` varchar(50) NOT NULL default '', `userid` mediumint(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `uparent` (`uparent`), KEY `tagid` (`tagid`), KEY `userid` (`userid`)) ENGINE=MyISAM; + From 3bde405c92a38a3d0528871838b42dad18ee830d Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 25 Sep 2017 19:12:10 +0900 Subject: [PATCH 217/577] Code cleanup - save_plugin.processor.php --- manager/processors/save_plugin.processor.php | 58 ++++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/manager/processors/save_plugin.processor.php b/manager/processors/save_plugin.processor.php index cb6ae43642..83a22b4017 100755 --- a/manager/processors/save_plugin.processor.php +++ b/manager/processors/save_plugin.processor.php @@ -1,9 +1,9 @@ INCLUDE_ORDERING_ERROR

            Please use the MODX Content Manager instead of accessing this file directly."); +if (IN_MANAGER_MODE != 'true') { + die('INCLUDE_ORDERING_ERROR

            Please use the MODX Content Manager instead of accessing this file directly.'); } if (!$modx->hasPermission('save_plugin')) { - $modx->webAlertAndQuit($_lang["error_no_privileges"]); + $modx->webAlertAndQuit($_lang['error_no_privileges']); } $id = intval($_POST['id']); @@ -12,10 +12,10 @@ $locked = $_POST['locked'] == 'on' ? '1' : '0'; $plugincode = $modx->db->escape($_POST['post']); $properties = $modx->db->escape($_POST['properties']); -$disabled = $_POST['disabled'] == "on" ? '1' : '0'; +$disabled = $_POST['disabled'] == 'on' ? '1' : '0'; $moduleguid = $modx->db->escape($_POST['moduleguid']); $sysevents = $_POST['sysevents']; -$parse_docblock = $_POST['parse_docblock'] == "1" ? '1' : '0'; +$parse_docblock = $_POST['parse_docblock'] == '1' ? '1' : '0'; $currentdate = time() + $modx->config['server_offset_time']; //Kyle Jaebker - added category support @@ -28,14 +28,14 @@ $categoryid = getCategory($_POST['newcategory']); } -if ($name == "") { - $name = "Untitled plugin"; +if ($name == '') { + $name = 'Untitled plugin'; } if ($parse_docblock) { $parsed = $modx->parseDocBlockFromString($plugincode, true); - $name = isset($parsed['name']) ? $parsed['name'] : $name; - $sysevents = isset($parsed['events']) ? explode(',', $parsed['events']) : $sysevents; + $name = isset($parsed['name']) ? $parsed['name'] : $name; + $sysevents = isset($parsed['events']) ? explode(',', $parsed['events']) : $sysevents; $properties = isset($parsed['properties']) ? $parsed['properties'] : $properties; $moduleguid = isset($parsed['guid']) ? $parsed['guid'] : $moduleguid; @@ -56,9 +56,9 @@ case '101': // invoke OnBeforePluginFormSave event - $modx->invokeEvent("OnBeforePluginFormSave", array( - "mode" => "new", - "id" => $id + $modx->invokeEvent('OnBeforePluginFormSave', array( + 'mode' => 'new', + 'id' => $id )); // disallow duplicate names for active plugins @@ -67,7 +67,7 @@ $count = $modx->db->getValue($rs); if ($count > 0) { $modx->manager->saveFormValues(101); - $modx->webAlertAndQuit(sprintf($_lang['duplicate_name_found_general'], $_lang['plugin'], $name), "index.php?a=101"); + $modx->webAlertAndQuit(sprintf($_lang['duplicate_name_found_general'], $_lang['plugin'], $name), 'index.php?a=101'); } } @@ -89,9 +89,9 @@ saveEventListeners($newid, $sysevents, $_POST['mode']); // invoke OnPluginFormSave event - $modx->invokeEvent("OnPluginFormSave", array( - "mode" => "new", - "id" => $newid + $modx->invokeEvent('OnPluginFormSave', array( + 'mode' => 'new', + 'id' => $newid )); // Set the item name for logger @@ -102,20 +102,20 @@ // finished emptying cache - redirect if ($_POST['stay'] != '') { - $a = ($_POST['stay'] == '2') ? "102&id=$newid" : "101"; - $header = "Location: index.php?a=" . $a . "&r=2&stay=" . $_POST['stay']; + $a = ($_POST['stay'] == '2') ? "102&id=$newid" : '101'; + $header = 'Location: index.php?a=' . $a . '&r=2&stay=' . $_POST['stay']; header($header); } else { - $header = "Location: index.php?a=76&r=2"; + $header = 'Location: index.php?a=76&r=2'; header($header); } break; case '102': // invoke OnBeforePluginFormSave event - $modx->invokeEvent("OnBeforePluginFormSave", array( - "mode" => "upd", - "id" => $id + $modx->invokeEvent('OnBeforePluginFormSave', array( + 'mode' => 'upd', + 'id' => $id )); // disallow duplicate names for active plugins @@ -144,9 +144,9 @@ saveEventListeners($id, $sysevents, $_POST['mode']); // invoke OnPluginFormSave event - $modx->invokeEvent("OnPluginFormSave", array( - "mode" => "upd", - "id" => $id + $modx->invokeEvent('OnPluginFormSave', array( + 'mode' => 'upd', + 'id' => $id )); // Set the item name for logger @@ -157,17 +157,17 @@ // finished emptying cache - redirect if ($_POST['stay'] != '') { - $a = ($_POST['stay'] == '2') ? "102&id=$id" : "101"; - $header = "Location: index.php?a=" . $a . "&r=2&stay=" . $_POST['stay']; + $a = ($_POST['stay'] == '2') ? "102&id=$id" : '101'; + $header = 'Location: index.php?a=' . $a . '&r=2&stay=' . $_POST['stay']; header($header); } else { $modx->unlockElement(5, $id); - $header = "Location: index.php?a=76&r=2"; + $header = 'Location: index.php?a=76&r=2'; header($header); } break; default: - $modx->webAlertAndQuit("No operation set in request."); + $modx->webAlertAndQuit('No operation set in request.'); } # Save Plugin Event Listeners From 185fd00c6152b27bfece647046933357d87f17ae Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 25 Sep 2017 20:56:12 +0900 Subject: [PATCH 218/577] New - $modx->db->save() $modx->db->save($fields, $table, $where); https://www.google.com/search?q=mysql+replace+into This is similar to "replace into table". --- manager/includes/extenders/dbapi.mysql.class.inc.php | 11 +++++++++++ manager/includes/extenders/dbapi.mysqli.class.inc.php | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/manager/includes/extenders/dbapi.mysql.class.inc.php b/manager/includes/extenders/dbapi.mysql.class.inc.php index 4197c5f778..fe1c4ded29 100644 --- a/manager/includes/extenders/dbapi.mysql.class.inc.php +++ b/manager/includes/extenders/dbapi.mysql.class.inc.php @@ -335,6 +335,17 @@ function insert($fields, $intotable, $fromfields = "*", $fromtable = "", $where return $lid; } } + + function save($fields, $table, $where='') { + + if($where === '') $mode = 'insert'; + elseif($this->getRecordCount($this->select('*',$table,$where))==0) $mode = 'insert'; + else $mode = 'update'; + + if($mode==='insert') return $this->insert($fields, $table); + else return $this->update($fields, $table, $where); + } + /** * @name: isResult * diff --git a/manager/includes/extenders/dbapi.mysqli.class.inc.php b/manager/includes/extenders/dbapi.mysqli.class.inc.php index 66709ac2fd..f1101227a5 100644 --- a/manager/includes/extenders/dbapi.mysqli.class.inc.php +++ b/manager/includes/extenders/dbapi.mysqli.class.inc.php @@ -223,6 +223,16 @@ function insert($fields, $intotable, $fromfields = "*", $fromtable = "", $where } } + function save($fields, $table, $where='') { // This is similar to "replace into table". + + if($where === '') $mode = 'insert'; + elseif($this->getRecordCount($this->select('*',$table,$where))==0) $mode = 'insert'; + else $mode = 'update'; + + if($mode==='insert') return $this->insert($fields, $table); + else return $this->update($fields, $table, $where); + } + function isResult($rs) { return is_object($rs); } From fb756bd85a6a81fedb3f4cffac852c42fb9d8daf Mon Sep 17 00:00:00 2001 From: yamamoto Date: Mon, 25 Sep 2017 20:56:57 +0900 Subject: [PATCH 219/577] Refactor - save_plugin.processor.php --- manager/processors/save_plugin.processor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/processors/save_plugin.processor.php b/manager/processors/save_plugin.processor.php index 83a22b4017..f769d8157c 100755 --- a/manager/processors/save_plugin.processor.php +++ b/manager/processors/save_plugin.processor.php @@ -193,9 +193,9 @@ function saveEventListeners($id, $sysevents, $mode) } $insert_sysevents[] = array('pluginid' => $id, 'evtid' => $evtId, 'priority' => $priority); } - $modx->db->delete($tblSitePluginEvents, "pluginid='{$id}'"); + foreach ($insert_sysevents as $insert_sysevent) { - $modx->db->insert($insert_sysevent, $tblSitePluginEvents); + $modx->db->save($insert_sysevent, '[+prefix+]site_plugin_events',"pluginid='{$id}'"); } } From b757e3b37d051c2e9e77e0c8897820237db30367 Mon Sep 17 00:00:00 2001 From: Mr B Date: Tue, 26 Sep 2017 09:58:07 +0100 Subject: [PATCH 220/577] [F] Allow Updater to try cURL if needed Some servers have fopen disabled. If so try cURL instead to get zip file. There may be a more elegant coding way, but this seems to work? --- assets/plugins/updater/plugin.updater.php | 24 ++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/assets/plugins/updater/plugin.updater.php b/assets/plugins/updater/plugin.updater.php index 4db362ed64..9991a4af0a 100644 --- a/assets/plugins/updater/plugin.updater.php +++ b/assets/plugins/updater/plugin.updater.php @@ -135,16 +135,26 @@ function downloadFile($url, $path) { $newfname = $path; try { - $file = fopen($url, "rb"); - if ($file) { - $newf = fopen($newfname, "wb"); - if ($newf) { - while (!feof($file)) { - fwrite($newf, fread($file, 1024 * 8), 1024 * 8); + if( ini_get("allow_url_fopen") ) { + $file = fopen($url, "rb"); + if ($file) { + $newf = fopen($newfname, "wb"); + if ($newf) { + while (!feof($file)) { + fwrite($newf, fread($file, 1024 * 8), 1024 * 8); + } } } + } elseif (function_exists("curl_version")) { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); + $content = curl_exec($ch); + curl_close($ch); + file_put_contents($newfname,$content); } - } catch (Exception $e) { $this->errors[] = array("ERROR:Download", $e->getMessage()); return false; From b49755205b46a97626bb00f8fd3faccedb0ea5e4 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 26 Sep 2017 14:14:32 +0200 Subject: [PATCH 221/577] translated DocInfo snippet description in english --- install/assets/snippets/docinfo.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/assets/snippets/docinfo.tpl b/install/assets/snippets/docinfo.tpl index 06913a3c14..a1bcf89571 100644 --- a/install/assets/snippets/docinfo.tpl +++ b/install/assets/snippets/docinfo.tpl @@ -2,7 +2,7 @@ /** * DocInfo * - * Берем любое поле из любого документа (меньше запросов по сравнению с GetField) + * Take any field from any document (fewer requests than GetField) * * @category snippet * @version 1 @@ -12,4 +12,4 @@ * @internal @installset base, sample */ -return require MODX_BASE_PATH.'assets/snippets/docinfo/snippet.docinfo.php'; \ No newline at end of file +return require MODX_BASE_PATH.'assets/snippets/docinfo/snippet.docinfo.php'; From 460a4cb6290008ad508954d9e7034201993358af Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 26 Sep 2017 17:37:47 +0200 Subject: [PATCH 222/577] Show widget settings for Updater widget --- install/assets/plugins/updater.tpl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/install/assets/plugins/updater.tpl b/install/assets/plugins/updater.tpl index 935c9dd0ea..c714d930e7 100644 --- a/install/assets/plugins/updater.tpl +++ b/install/assets/plugins/updater.tpl @@ -5,17 +5,18 @@ * show message about outdated CMS version * * @category plugin - * @version 0.7 + * @version 0.8 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) * @package evo * @author Dmi3yy (dmi3yy.com) * @internal @events OnManagerWelcomeHome,OnPageNotFound,OnSiteRefresh * @internal @modx_category Manager and Admin - * @internal @properties &showButton=Show Update Button:;menu;show,hide,AdminOnly;AdminOnly &type=Type:;menu;tags,releases,commits;tags + * @internal @properties &wdgVisibility=Show widget for:;menu;All,AdminOnly,AdminExcluded,ThisRoleOnly,ThisUserOnly;All &ThisRole=Show only to this role id:;string;;;enter the role id &ThisUser=Show only to this username:;string;;;enter the username &showButton=Show Update Button:;menu;show,hide,AdminOnly;AdminOnly &type=Type:;menu;tags,releases,commits;tags * @internal @legacy_names MODX.Evolution.updateNotify * @internal @installset base * @internal @disabled 0 */ + require MODX_BASE_PATH.'assets/plugins/updater/plugin.updater.php'; From e1d4f5021f4bcff5c7f132b1d6803fd4c81b5f68 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 26 Sep 2017 17:38:30 +0200 Subject: [PATCH 223/577] Show widget settings for Updater widget --- assets/plugins/updater/plugin.updater.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/assets/plugins/updater/plugin.updater.php b/assets/plugins/updater/plugin.updater.php index 4db362ed64..1b82abc165 100644 --- a/assets/plugins/updater/plugin.updater.php +++ b/assets/plugins/updater/plugin.updater.php @@ -8,7 +8,20 @@ if(!defined('MODX_BASE_PATH')){die('What are you doing? Get out of here!');} if (empty($_SESSION['mgrInternalKey'])) return; - +// get manager role +$internalKey = $modx->getLoginUserID(); +$sid = $modx->sid; +$role = $_SESSION['mgrRole']; +$user = $_SESSION['mgrShortname']; +if(($role!=1) AND ($wdgVisibility == 'AdminOnly')) { +} +else if(($role==1) AND ($wdgVisibility == 'AdminExcluded')) { +} +else if(($role!=$ThisRole) AND ($wdgVisibility == 'ThisRoleOnly')) { +} +else if(($user!=$ThisUser) AND ($wdgVisibility == 'ThisUserOnly')) { +} +else { $version = 'evolution-cms/evolution'; $type = isset($type) ? $type: 'tags'; $showButton = isset($showButton) ? $showButton: 'AdminOnly'; @@ -262,3 +275,4 @@ function mmkDir($folder, $perm = 0777) } } +} \ No newline at end of file From d5aba6c931504091b8c3cc4492db1b968a958553 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 26 Sep 2017 17:50:02 +0200 Subject: [PATCH 224/577] removed HELP button removed HELP button (linked to modx forum) --- install/template.tpl | 91 ++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/install/template.tpl b/install/template.tpl index 1466f9ac01..60da8a01e4 100644 --- a/install/template.tpl +++ b/install/template.tpl @@ -1,46 +1,45 @@ - - - - -[+pagetitle+] - - - - - - - - - -
            -
            - -
            -
            - -
            -
            -
            - [+content+] -
            -
            -
            - - - - - + + + + +[+pagetitle+] + + + + + + + + + +
            +
            + +
            +
            + +
            +
            +
            + [+content+] +
            +
            +
            + + + + + From 9829d3cbb57492ba7196e32390cc78eac9b132b0 Mon Sep 17 00:00:00 2001 From: Piotr Matysiak Date: Tue, 26 Sep 2017 23:00:43 +0200 Subject: [PATCH 225/577] Better navbar icons rendering in Firefox --- manager/media/style/default/css/mainmenu.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/media/style/default/css/mainmenu.css b/manager/media/style/default/css/mainmenu.css index c558776530..2c3482f938 100644 --- a/manager/media/style/default/css/mainmenu.css +++ b/manager/media/style/default/css/mainmenu.css @@ -17,7 +17,7 @@ #mainMenu .nav > li > a .icon { display: inline-block; overflow: hidden; width: auto; height: 2rem; line-height: 2rem; font-size: 1.5em; text-align: center; margin: 0.05rem 0 0 0.5rem; vertical-align: top; border-radius: 50%; background: no-repeat 50% 50%; background-size: cover; } #mainMenu .nav > li > a .icon.photo { width: 2rem } #mainMenu .nav > li > a .icon .fa { font-size: 1.2rem; line-height: 2.1rem } -#mainMenu .nav > li .fa { line-height: 2.2rem; font-size: 1rem; vertical-align: top } +#mainMenu .nav > li .fa { line-height: 2.2rem; font-size: .9rem; vertical-align: top } #mainMenu #nav > li > a > .fa { margin-right: 0.5rem; } #mainMenu #nav #bars .fa { display: inline-block; width: 1.5rem; margin: 0; text-align: center; overflow: hidden; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } .sidebar-closed #mainMenu #nav #bars .fa { width: 0.25rem; margin: 0 0.625rem; } @@ -35,7 +35,7 @@ #mainMenu .nav > li > ul > li > a:first-child, #mainMenu .nav > li > ul > li > span { display: block; position: relative; padding: 0 2rem 0 1rem; line-height: 2.2rem; color: #444; text-decoration: none } #mainMenu .nav > li > ul > li.hover > a:first-child { color: #fff; background-color: #1976d2; } #mainMenu .nav > li > ul > li > span:first-child { padding: 0 1em; text-align: center; font-size: 0.875em; color: #aaa; } -#mainMenu .nav > li > ul > li .fa { width: 1.3em; margin-right: 0.5em; font-size: .8rem; line-height: .8rem; text-align: center; vertical-align: baseline } +#mainMenu .nav > li > ul > li .fa { width: 1.3em; margin-right: 0.5em; font-size: .9rem; line-height: .8rem; text-align: center; vertical-align: baseline } #mainMenu .nav > li > ul > li.selected a:first-child::before, #main .evo-tab-row .tab.changed::before { content: ''; position: absolute; right: 0.25em; top: 0.25em; width: 0.5em; height: 0.5em; background-color: #ffc107; -webkit-border-radius: 50%; border-radius: 50%; pointer-events: none } #mainMenu .nav > li > ul > li.toggle-dropdown > a::after { content: "\f105"; position: absolute; top: 0.6em; right: 0.6em; font: normal normal normal 1.2em/1 FontAwesome; } #mainMenu .nav > li > ul > li.disabled > a { opacity: 0.5; color: #7d2a24; } From 902ac6c886cd8a181277983c29960b2569281ca6 Mon Sep 17 00:00:00 2001 From: yamamoto Date: Wed, 27 Sep 2017 10:10:18 +0900 Subject: [PATCH 226/577] revert @3ad110c however as this is not better as it is, will consider solutions --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index aa4ce36070..6ce114c9d3 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -5429,7 +5429,7 @@ function parseProperties($propertyString, $elementName = null, $elementType = nu } else { $value = $row; } - if (isset($value)) { + if (isset($value) && $value !== '') { $property[$key] = $value; } } From d923aad37f7ade92fe6b0c4df5161293516a4644 Mon Sep 17 00:00:00 2001 From: Deesen Date: Wed, 27 Sep 2017 09:29:40 +0200 Subject: [PATCH 227/577] [I] #260 Tree: Added option "alias" to sortBy --- manager/frames/1.php | 1 + manager/includes/lang/english.inc.php | 1 + 2 files changed, 2 insertions(+) diff --git a/manager/frames/1.php b/manager/frames/1.php index 04b6ad5887..e61e8146d5 100644 --- a/manager/frames/1.php +++ b/manager/frames/1.php @@ -370,6 +370,7 @@ +

          diff --git a/manager/includes/lang/english.inc.php b/manager/includes/lang/english.inc.php index fcf746237a..951bcf57e4 100644 --- a/manager/includes/lang/english.inc.php +++ b/manager/includes/lang/english.inc.php @@ -636,6 +636,7 @@ $_lang["onlineusers_user"] = 'User'; $_lang["onlineusers_userid"] = 'User\'s ID'; $_lang["optimize_table"] = 'Click here to optimize this table'; +$_lang["page_data_alias"] = 'Alias'; $_lang["page_data_cacheable"] = 'Cacheable'; $_lang["page_data_cacheable_help"] = 'This allows the Resource to be saved to the site cache, and affects all Snippets on the page.'; $_lang["page_data_cached"] = 'Source retrieved from cache:'; From 3b99b143a6c5c6c82b90fc6e3b4105bcfb523ec0 Mon Sep 17 00:00:00 2001 From: Deesen Date: Wed, 27 Sep 2017 10:25:47 +0200 Subject: [PATCH 228/577] [I] Improved performance with disabled "@syntax" --- .../includes/document.parser.class.inc.php | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 6ce114c9d3..f79aab39c0 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1178,7 +1178,7 @@ function _getTagsFromContent($content, $left = '[+', $right = '+]') */ function mergeDocumentContent($content, $ph = false) { - if (stripos($content, '<@LITERAL>') !== false) { + if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { $content = $this->escapeLiteralTagsContent($content); } if (strpos($content, '[*') === false) { @@ -1367,7 +1367,7 @@ function _contextValue($key, $parent = false) */ function mergeSettingsContent($content, $ph = false) { - if (stripos($content, '<@LITERAL>') !== false) { + if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { $content = $this->escapeLiteralTagsContent($content); } if (strpos($content, '[(') === false) { @@ -1417,7 +1417,7 @@ function mergeChunkContent($content, $ph = false) if (strpos($content, '{{ ') !== false) { $content = str_replace(array('{{ ', ' }}'), array('\{\{ ', ' \}\}'), $content); } - if (stripos($content, '<@LITERAL>') !== false) { + if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { $content = $this->escapeLiteralTagsContent($content); } if (strpos($content, '{{') === false) { @@ -1451,7 +1451,7 @@ function mergeChunkContent($content, $ph = false) $value = $this->parseText($value,$params); // parse local scope placeholers for ConditionalTags $value = $this->mergePlaceholderContent($value, $params); // parse page global placeholers - $value = $this->mergeConditionalTagsContent($value); + $value = !$this->config['enable_at_syntax'] ? $value : $this->mergeConditionalTagsContent($value); $value = $this->mergeDocumentContent($value); $value = $this->mergeSettingsContent($value); $value = $this->mergeChunkContent($value); @@ -1480,7 +1480,7 @@ function mergeChunkContent($content, $ph = false) function mergePlaceholderContent($content, $ph = false) { - if (stripos($content, '<@LITERAL>') !== false) { + if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { $content = $this->escapeLiteralTagsContent($content); } if (strpos($content, '[+') === false) { @@ -1491,7 +1491,7 @@ function mergePlaceholderContent($content, $ph = false) $ph = $this->placeholders; } - $content = $this->mergeConditionalTagsContent($content); + $content = !$this->config['enable_at_syntax'] ? $content : $this->mergeConditionalTagsContent($content); $content = $this->mergeDocumentContent($content); $content = $this->mergeSettingsContent($content); $matches = $this->getTagsFromContent($content, '[+', '+]'); @@ -1541,8 +1541,6 @@ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '< if (strpos($content, $iftag) === false) { return $content; } - - if (!$this->config['enable_at_syntax']) return $content; $sp = '#' . md5('ConditionalTags' . $_SERVER['REQUEST_TIME']) . '#'; $content = str_replace(array(''), array("{$sp}b", "{$sp}e"), $content); @@ -1589,8 +1587,6 @@ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '< */ private function _prepareCTag($content, $iftag = '<@IF:', $elseiftag = '<@ELSEIF:', $elsetag = '<@ELSE>', $endiftag = '<@ENDIF>') { - if (!$this->config['enable_at_syntax']) return $content; - if (strpos($content, '' if (strpos($content, $left) === false) { return $content; } - - if (!$this->config['enable_at_syntax']) return $content; $matches = $this->getTagsFromContent($content, $left, $right); if (!empty($matches)) { @@ -1723,8 +1717,6 @@ function escapeLiteralTagsContent($content, $left = '<@LITERAL>', $right = '<@EN return $content; } - if (!$this->config['enable_at_syntax']) return $content; - $matches = $this->getTagsFromContent($content, $left, $right); if (empty($matches)) { return $content; @@ -2579,8 +2571,8 @@ function parseDocumentSource($source) $this->invokeEvent("OnParseDocument"); // work on it via $modx->documentOutput $source = $this->documentOutput; - $source = $this->ignoreCommentedTagsContent($source); - $source = $this->mergeConditionalTagsContent($source); + $source = !$this->config['enable_at_syntax'] ? $source : $this->ignoreCommentedTagsContent($source); + $source = !$this->config['enable_at_syntax'] ? $source : $this->mergeConditionalTagsContent($source); $source = $this->mergeSettingsContent($source); $source = $this->mergeDocumentContent($source); @@ -4223,7 +4215,7 @@ function parseText($tpl = '', $ph = array(), $left = '[+', $right = '+]', $execM return $tpl; } - if (stripos($tpl, '<@LITERAL>') !== false) { + if ($this->config['enable_at_syntax'] && stripos($tpl, '<@LITERAL>') !== false) { $tpl = $this->escapeLiteralTagsContent($tpl); } From 6b7f7ef95319eeac0db2db3061cb77f1bbe4c1c6 Mon Sep 17 00:00:00 2001 From: Nicola Date: Wed, 27 Sep 2017 16:00:03 +0200 Subject: [PATCH 229/577] lighter color for widget card header in dark theme --- manager/media/style/default/css/custom.css | 699 +++++++++++---------- 1 file changed, 350 insertions(+), 349 deletions(-) diff --git a/manager/media/style/default/css/custom.css b/manager/media/style/default/css/custom.css index 3e0fb64f22..d09062401d 100644 --- a/manager/media/style/default/css/custom.css +++ b/manager/media/style/default/css/custom.css @@ -1,350 +1,351 @@ -/* [ COLS ] */ -.row { margin-left: -1.25rem; margin-right: -1.25rem } -.container { padding-left: 1.25rem; padding-right: 1.25rem; width: 100% } -/* :TODO .container-body need remove and replace .tab-content */ -.container-body { padding: 1.25rem } -/* [ FORMS ] */ -.form-row { margin-bottom: 0.25rem; } -.form-row.row { margin-left: 0; margin-right: -1rem } -.form-row label { margin-bottom: 0.15rem } -.form-row .col, .form-row .col-1, .form-row .col-10, .form-row .col-11, .form-row .col-12, .form-row .col-2, .form-row .col-3, .form-row .col-4, .form-row .col-5, .form-row .col-6, .form-row .col-7, .form-row .col-8, .form-row .col-9, .form-row .col-lg, .form-row .col-lg-1, .form-row .col-lg-10, .form-row .col-lg-11, .form-row .col-lg-12, .form-row .col-lg-2, .form-row .col-lg-3, .form-row .col-lg-4, .form-row .col-lg-5, .form-row .col-lg-6, .form-row .col-lg-7, .form-row .col-lg-8, .form-row .col-lg-9, .form-row .col-md, .form-row .col-md-1, .form-row .col-md-10, .form-row .col-md-11, .form-row .col-md-12, .form-row .col-md-2, .form-row .col-md-3, .form-row .col-md-4, .form-row .col-md-5, .form-row .col-md-6, .form-row .col-md-7, .form-row .col-md-8, .form-row .col-md-9, .form-row .col-sm, .form-row .col-sm-1, .form-row .col-sm-10, .form-row .col-sm-11, .form-row .col-sm-12, .form-row .col-sm-2, .form-row .col-sm-3, .form-row .col-sm-4, .form-row .col-sm-5, .form-row .col-sm-6, .form-row .col-sm-7, .form-row .col-sm-8, .form-row .col-sm-9, .form-row .col-xl, .form-row .col-xl-1, .form-row .col-xl-10, .form-row .col-xl-11, .form-row .col-xl-12, .form-row .col-xl-2, .form-row .col-xl-3, .form-row .col-xl-4, .form-row .col-xl-5, .form-row .col-xl-6, .form-row .col-xl-7, .form-row .col-xl-8, .form-row .col-xl-9, .form-row .col-xs, .form-row .col-xs-1, .form-row .col-xs-10, .form-row .col-xs-11, .form-row .col-xs-12, .form-row .col-xs-2, .form-row .col-xs-3, .form-row .col-xs-4, .form-row .col-xs-5, .form-row .col-xs-6, .form-row .col-xs-7, .form-row .col-xs-8, .form-row .col-xs-9 { padding-left: 0 } -.form-row .form-control { float: left; } -.form-inline .form-row .form-control { float: none; } -.container-body > .form-group:last-child, .container-body > .form-row:last-child, .container-body > p:last-child, .container-body > .form-group:last-child > p:last-child { margin-bottom: 0 } -.form-control-name { position: relative; } -.form-control-name .form-control { padding-right: 2em } -.form-control-name .custom-control { display: block; overflow: hidden; position: absolute; z-index: 3; top: 0; right: 0; width: 2em; height: 100%; margin: 0; padding: 0; cursor: pointer } -.form-control-name .custom-control input { position: absolute; left: -100% } -.form-control-name .custom-control .fa-lock { margin-top: 0.6em; font-size: 1.5em } -.form-control-name .custom-control .fa-lock::before { content: "\f09c"; color: #ddd } -.form-control-name .custom-control input:checked ~ .fa-lock::before { content: "\f023"; color: #d9534f } -input[type=date]:not(.unstyled), input[name*=date]:not(.unstyled):not([type=checkbox]):not([type=radio]), input[name=createdon], input[name=editedon], input[size="1"], select[size="1"]:not(.unstyled), select[name=usergroup]:not(.unstyled), select[name=docgroup]:not(.unstyled) { width: auto !important; vertical-align: middle } -input[name*=date]:not(.unstyled) + .input-group-addon { float: left; width: auto; } -input[size="50"], select[size="50"] { width: 10rem !important } -select[name=usergroup], select[name=docgroup] { margin: 0 0.5em; } -select[name=docgroup] + input[type=submit] { float: none; margin: 0; } -#settingsPane #filemanager_path, #settingsPane #rb_base_dir, #settingsPane input[name=txt_custom_contenttype] { border-top-right-radius: 0; border-bottom-right-radius: 0 } -#settingsPane #filemanager_path + input[name=reset_filemanager_path], #settingsPane #rb_base_dir + input[name=reset_rb_base_dir], #settingsPane input[name=txt_custom_contenttype] + input[type=button], input[name=photo] + input[type=button], #range input#pids + input[name=fsubmit], input[name="ta"].inputBox + input[type=button], input[name="ta"].inputBox + .CodeMirror + input[type=button], #documentPane input[name^=tv]:not([class*=mtv]) + input[type=button] { z-index: 5; float: right; margin-top: -2.30769em; width: auto !important; border-top-left-radius: 0; border-bottom-left-radius: 0 } -#settingsPane [name=site_name], #settingsPane [name=txt_custom_contenttype], #settingsPane [name=filemanager_path], #settingsPane [name=rb_base_dir], input[name=photo], #range input#pids, input[maxlength="350"], textarea.mce, #editorRow_TinyMCE { width: 100% !important } -#range::after { content: ""; display: table; width: 100% } -/* [ Editor ] */ -.navbar.navbar-editor { padding: .5rem 1.25rem; border-radius: 0 } -.navbar-editor > label { margin-bottom: 0 } -.section-editor textarea { float: left; border-left: none; border-right: none; font-family: 'Inconsolata', 'Monaco', 'Consolas', 'Courier New', 'Courier', monospace; font-weight: 300; font-size: 0.875rem; } -/* [ Action Buttons ] */ -/* new style */ -#actions { background: rgba(199, 199, 199, 0.25); padding: 0.5rem; position: fixed; top: 0; right: 1rem; text-align: right; z-index: 1001; border-radius: 0 0 0.3rem 0.3rem; } -#actions .btn-group { margin: 0 } -#actions .btn-group > .btn-group { display: block } -#actions .btn-group .btn, #actions .btn-group .form-control { font-size: .6772rem; height: 2.4em; line-height: 1.4 } -#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: none; width: 1em; font-size: 1em; text-align: center } -#actions .btn-group .btn-group #Button1 { min-width: 100%; text-align: left; float: right; } -#actions .btn-group .btn-success { box-shadow: inset 0 -2px 0 rgba(0, 0, 0, .07); } -#actions .btn-group .btn-success:hover { box-shadow: none } -#actions .btn-group .plus { z-index: 2; float: right; margin: -2.4em 0 0 0; width: 2rem; padding-left: 0; padding-right: 0; text-align: center } -#actions .btn-group select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; margin: -100% 0 -2rem 0; font-size: 0.675rem; opacity: 0; visibility: hidden; } -#actions .btn-group .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 2rem; margin: 0; padding: 0; text-align: left; font-size: .6772rem; border-top: none; border-radius: 0 0 0.1em 0.1em; overflow: hidden; } -#actions .btn-group .show > .dropdown-menu { display: block } -#actions .btn-group .dropdown-menu > span { display: block; margin: 0; text-align: left; border: none; border-top: 1px solid rgba(0, 0, 0, 0.1) } -#actions .btn-group .dropdown-menu > span:first-child { border-color: transparent } -#actions .btn-group .dropdown-menu > span:hover { background-color: #e6e6e6; } -#actions .btn-group .dropdown-toggle::after { margin: 0; border-width: 0.4em; transition-duration: 0.25s } -#actions .btn-group .show .dropdown-toggle::after { transform: rotate(180deg) } -#_actions .btn-group .input-group-btn .btn { margin-left: .1875rem } -#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: .1em } -@media (max-width: 840px) { -#actions { right: 0 } -#actions .btn-group .btn span, #actions .btn-group select#stay, #_actions .btn-group .btn span { display: none } -#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: inline-block } -#actions .btn-group .dropdown-menu { width: 2rem } -#actions .btn-group .dropdown-menu span { padding-left: 0; padding-right: 0; text-align: center } -#_actions .btn-group .input-group-btn .btn { margin-left: -1px } -#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: 0 } -#_actions .btn-group .form-control:first-child { border-top-left-radius: .1em; border-bottom-left-radius: .1em; } -#_actions .btn-group .btn:last-child { border-top-right-radius: .1em; border-bottom-right-radius: .1em; } -} -/* old style */ -#actions .actionButtons { float: left; min-height: 32px } -#actions .actionButtons li { position: relative; float: left; margin-right: 3px; border: none } -#actions .actionButtons li a, #actions .actionButtons .plus { float: left; padding: 0 10px !important; height: 32px; line-height: 30px; -webkit-user-select: none; user-select: none; } -#actions .actionButtons li:last-child { margin: 0 } -#actions .actionButtons #Button1 a { width: 100%; text-align: left; } -#actions .actionButtons .plus { overflow: hidden; float: right; margin: -32px 0 0 0; width: 35px; border-radius: 0 3px 3px 0 !important; text-align: center; cursor: default; font: normal normal normal 0/30px FontAwesome } -#actions .actionButtons .plus::before { content: "\f107"; font-size: 14px } -#actions .actionButtons .show .plus::before { content: "\f106"; } -#actions .actionButtons .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 35px; margin: -2px 0 0; padding: 2px 0 0; text-align: left; font-size: 1em; background-color: #fff; border: 1px solid #32ab9a; border-top: none; border-radius: 0 0 3px 3px; overflow: hidden; } -#actions .actionButtons .show > .dropdown-menu { display: block } -#actions .actionButtons .dropdown-menu > span { display: block; padding: 0 10px; height: 32px; line-height: 30px; border: none; border-top: 1px solid #f2f2f2; cursor: pointer; } -#actions .actionButtons .dropdown-menu > span:hover { background-color: #fbfbfb; } -#actions .actionButtons select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; padding: 0 10px; margin: -100% 0 -32px 0; font-size: 1em; opacity: 0; visibility: hidden; } -#actions .actionButtons #Button1 a, #actions .actionButtons .plus { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } -#actions .actionButtons #Button1 a:hover, #actions .actionButtons .plus:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } -#actions .actionButtons #Button1 a:active, #actions .actionButtons .plus:active { background: #32ab9a; border-color: #32ab9a; } -@media (max-width: 900px) { -#actions .actionButtons li a, #actions .actionButtons .dropdown-menu span { font-size: 0 } -#actions .actionButtons li a .fa, #actions .actionButtons .dropdown-menu span .fa { display: inline-block; font-size: 14px; line-height: 30px } -#actions .actionButtons .dropdown-menu { width: 35px } -#actions .actionButtons #Button1 a { margin: 0; width: auto } -#actions .actionButtons .plus { margin: 0 0 0 -2px } -#actions .actionButtons select#stay { display: none } -} -/* actionButtons in content ( old style ) */ -.actionButtons { margin: 0; padding: 0; background: none; width: auto; white-space: nowrap; } -.actionButtons li { float: left; margin: 0; padding: 0; list-style: none; } -.actionButtons li:before, .mmTagList li:before, .rTable li:before, .tab-pane ul li ul li:before, .dashboard li:before, div#idShowHideSocialBox.sectionBody > div.btn-group.ope > ul.dropdown-menu > li:before, .sectionBody .multitv .list li:before { display: none; content: ''; } -.actionButtons img { vertical-align: top; margin-top: 1px; opacity: 0.3; } -.actionButtons:hover img { opacity: 1; } -.actionButtons a:hover { border-color: #999; -webkit-box-shadow: 1px 1px 2px #aaa; box-shadow: 1px 1px 2px #aaa; -webkit-transition: .3s ease; transition: .3s ease; background: -moz-linear-gradient(#fff, #f5f5f5); background: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f5f5f5)); background: -o-linear-gradient(#fff, #f5f5f5); text-decoration: none !important; } -.actionButtons a:active { background: #92aac4 bottom left; -webkit-box-shadow: 0 0 10px #b8c7d6; box-shadow: 0 0 10px #b8c7d6; } -.actionButtons a { float: left; padding: 5px 10px; height: 32px; font-size: 13px; font-weight: 500; } -.actionButtons a, .actionButtons li.primary a, .actionButtons a.primary, .actionButtons a.default { text-shadow: none; background: #fff; color: #555; border: 1px solid #e4e4e4; border-radius: 3px; /*box-shadow: 0 0 0 1px #E4E4E4;*/ box-shadow: none; transition: none; } -.actionButtons a:hover { background: #1377c5; box-shadow: none; border-color: #1377c5; color: #fff !important; transition: none; } -.actionButtons a:active { background-color: #3189ba; border-color: #3189ba; } -.actionButtons li.primary a, .actionButtons a.primary { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } -.actionButtons li.primary a:hover, .actionButtons a.primary:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } -.actionButtons li.primary a:active, .actionButtons a.primary:active { background: #32ab9a; border-color: #32ab9a; } -.actionButtons img { display: none; } -#treePane .actionButtons img { display: inline; } -.actionButtons--tableheader .fa { font-size: 14px; } -.sectionBody .actionButtons { padding-top: 0; min-height: 40px; } -.sectionBody .actionButtons li { margin-right: 10px; } -.sectionBody .actionButtons a { display: inline-block; padding: 9px 10px; line-height: 1; } -table.actionButtons { margin-top: 1rem; margin-bottom: 10px; } -table.actionButtons img { display: inline-block; } -table.actionButtons .searchtext { padding: 5px; height: 24px; width: 150px; } -.actionButtons .fa { display: none; text-align: center; font-size: 1em; line-height: 1em; width: 1.1em; vertical-align: initial } -.actionButtons .fa, .actionButtons--eit .fa { display: inline-block; } -.optionsTitle .fa { display: inline-block; } -@media (max-width: 900px) { -.actionButtons a { display: inline-block; padding: 6px 10px } -.tab-page .actionButtons a { margin-top: 0 !important } -.actionButtons a span { display: none; } -.actionButtons a .fa { display: inline-block; } -} -/* [ TABLES ] */ -/* table */ -.table th, .table td { padding: 0.15rem 0.25rem; } -/* table-data */ -.table.data { width: 100%; max-width: 100%; margin-bottom: 0; border-bottom: 1px solid #eceeef } -.table.data th, .table.data thead td { padding: 0.75rem; text-transform: uppercase; white-space: nowrap; font-size: 0.675rem; color: #777; border-bottom: 2px solid #eceeef } -.table.data td { padding: 0.55rem 0.75rem; } -.table.data td, .table.data th, .table.data thead td { vertical-align: top; border-top: 1px solid #eceeef } -.table.data td:first-child, .table.data th:first-child, .table.data.table-sm td:first-child, .table.data.table-sm th:first-child { padding-left: 1.25rem } -.table.data td:last-child, .table.data th:last-child, .table.data.table-sm td:last-child, .table.data.table-sm th:last-child { padding-right: 1.25rem } -.table.data thead { background-color: #fff; } -.table.data > tbody > tr { background-color: #f9f9f9; transition-duration: .5s } -.table.data > tbody > tr:nth-child(2n) { background-color: #fff } -.table.data > tbody > tr:hover { cursor: default; background-color: rgba(93, 109, 202, 0.16); transition-duration: .05s } -.table.data tr.unstyled:hover { background-color: inherit } -.table.data .actions { white-space: nowrap } -.table.data .actions a { color: #555 } -.table.data .actions a .fa, .table.data .actions span .fa { position: relative; margin: 0 0.375rem; font-size: 0.9rem; color: #555 } -.table.data .actions a:hover .fa { color: #000; } -.table.data .actions a:hover .fa.fa-trash { color: #d80030 } -.table.data .actions a .fa::before { position: relative; z-index: 2; } -.table.data .actions a .fa::after { content: ""; position: absolute; z-index: 1; left: 50%; top: 50%; width: 1.5rem; height: 1.5rem; margin: -0.75rem 0 0 -0.75rem; border-radius: 50%; -webkit-transition: 0.15s; transition: 0.15s; } -.table.data .actions a:hover .fa::after { background-color: #fff } -.table.data .actions .disabled { visibility: hidden } -/* table-data-nowrap */ -.table.data.nowrap th, .table.data.nowrap td { white-space: nowrap } -/* table-data-sortable */ -.table.data thead .sortable a, .table.data thead .sortable-text a { color: #777; text-decoration: none !important; } -.table.data thead .sortable a:hover, .table.data thead .sortable-text a:hover { color: #222 } -.table.data thead .sortable a::after, .table.data thead .sortable-text a::after { content: "\f107"; font-family: FontAwesome; opacity: .3; margin-left: .5em; } -.table.data thead .sortable.forwardSort a::after, .table.data thead .sortable-text.forwardSort a::after { opacity: 1; content: "\f106"; color: #d9534f } -.table.data thead .sortable.reverseSort a::after, .table.data thead .sortable-text.reverseSort a::after { opacity: 1; content: "\f107"; color: #d9534f } -.table.data thead .sortable:hover a::after, .table.data thead .sortable-text:hover a::after, .table.data thead .sortable-numeric:hover a::after, .table.data thead .sortable-date:hover a::after { opacity: 1 } -.table.data thead .sortable, .table.data thead .sortable-text, .table.data thead .sortable-numeric, .table.data thead .sortable-date { cursor: pointer } -.table.data thead .sortable-text span, .table.data thead .sortable-numeric span, .table.data thead .sortable-date span { display: none } -.table.data.table-sortable > tbody > tr { cursor: move; transition-duration: .5s } -.table.data.table-sortable > tbody > tr.ghost { background-color: rgba(93, 109, 202, 0.16); color: #d9534f !important; transition: background-color .5s, color .5s, transform 0s } -/* table-data-sm */ -.table.data.table-sm td, .table.data.table-sm th { padding: .25rem .5rem; } -.table.data.table-sm th, .table.data.table-sm thead td { font-size: 0.75rem; text-transform: none; } -/* table-data-even */ -.table.data.table-even > tbody > tr:not(:hover) { background-color: #fff } -.table.data.table-even > tbody > tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } -.table.data.table-even > tbody > tr:nth-child(2n) { background-color: #fff } -/* table-data-docs */ -.table.data .doc-item .fa { width: 1.2em; font-size: 0.9rem; text-align: center; margin-right: 0.25rem } -.table.data .doc-item { text-decoration: none } -.table.data .doc-item:hover span { text-decoration: underline } -.table.data .doc-item.private .fa::after { position: relative; float: left; margin: .5em -1em 0 0; content: "\f023"; font-size: 0.75em; color: #d9534f; } -/* [ BREADCRUMBS ] */ -ul.breadcrumbs { margin: 0 1rem .5rem; padding: 0 0 .5rem; line-height: normal; font-size: .675rem; color: #888; border-bottom: 1px dotted #cecaca; } -ul.breadcrumbs li { list-style: none; display: inline-block; padding: 0; margin: 0; } -ul.breadcrumbs a { text-decoration: none; } -ul.breadcrumbs span { display: inline-block; width: 1.25em; vertical-align: top; text-indent: -2.25em; overflow: hidden; } -ul.breadcrumbs span::after { margin-left: 2em; font-family: FontAwesome; content: "\f105" } -/* [ PAGINATION ] */ -#pagination { padding: 0 1.25rem; margin: .5rem 0 0; } -#pagination ul { margin: 0 0 0 .5rem; display: inline-block; } -#pagination li { list-style: none; display: inline-block; margin: 0 0 0 1px; } -#pagination li a { display: inline-block; padding: 0 .5rem; line-height: 1.7; border: 1px solid #ddd; text-decoration: none; color: #333; } -#pagination li.currentPage a, #pagination li a:hover { color: #555; border: 1px solid #555; } -/* [ SEARCHBAR ] */ -.searchbar input[type=text] { max-width: 10rem } -/* [ WIDGETS ] */ -.widgets .card { margin-bottom: .75rem; border: none; border-radius: 0.15rem; background-color: #fff; box-shadow: 0 0 0.1rem 0 rgba(0, 0, 0, 0.1), 0 0.1rem 0.3rem rgba(0, 0, 0, 0.05) } -.widgets .card-header { padding: .75rem 1rem; font-size: .675rem; color: #616a73; text-transform: uppercase; font-weight: 900; border: none; background-color: #f2f2f2; } -.widgets .card-header .fa { font-size: .9rem } -.widgets .card-block { padding: 0; } -.widgets .card-block .card-block p { padding: 0 1rem } -.widgets .card-block .card-body { padding: 1rem; } -.widgets .card-block .card-body + .card-body { padding-top: 0 } -.widgets .table { margin-bottom: 1rem } -.widgets .table:not(.data) tr th, .widgets .table:not(.data) tr td { padding: .15rem; } -.widgets .table tr th:first-child, .widgets .table tr td:first-child { padding-left: 1rem !important } -.widgets .table tr th:last-child, .widgets .table tr td:last-child { padding-right: 1rem !important } -.widgets .table .actions a .fa { margin: 0 .05rem; } -/* widgets custom */ -.widgets #welcome .wm_buttons { text-align: center } -.widgets #welcome .wm_button { display: inline-block; margin: 0 .15rem .5rem; } -.widgets #welcome .wm_button a { display: inline-block; text-decoration: none; color: #646b7b; padding: .25rem; /*min-width: 6rem; background-color: #f9f9f9;*/ border-radius: 0.25rem; box-shadow: none; transition-duration: .5s } -.widgets #welcome .wm_button a:hover { color: #373b46; } -.widgets #welcome .wm_button a .fa { display: inline-block; } -.widgets #welcome .wm_button a .fa + span { display: block; font-size: .7rem; } -.widgets #modxrecent_widget .table.data tbody tr:not(:hover) { background-color: #fff } -.widgets #modxrecent_widget .table.data tbody tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } -.widgets #modxrecent_widget .table.data tbody tr:nth-child(2n) { background-color: #fff } -/* [ DATEPICKER ] */ -.dp_container { position: absolute; z-index: 500; } -.dp_cal { overflow: hidden; width: 220px; margin: 0.25rem 0; background-color: #fff; -webkit-box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); } -.dp_cal p { position: relative; margin: 10px; } -.dp_cal select { font-size: 1em; margin: 2px 3px; width: auto !important } -.dp_cal select option { padding: 1px 3px } -.dp_cal table { border-collapse: collapse; border-spacing: 0; width: 100% } -.dp_cal td.dp_roll { background-color: rgba(0, 0, 0, 0.1); color: #333 !important } -.dp_cal th, .dp_cal td { font-size: 1em; padding: 0.5em 0 !important; text-align: center !important; width: 14.2857%; cursor: default } -.dp_cal tbody th { background-color: #656d79; color: #fff; } -.dp_cal tbody td:nth-child(6), .dp_cal tbody td:nth-child(7) { color: indianred } -.dp_cal .dp_empty { background-color: #f9f9f9 } -.dp_cal .dp_hide { visibility: hidden } -.dp_cal .dp_today { background-color: #4caf50; color: #fff !important } -.dp_cal .dp_selected { background-color: #3189ba; color: #fff !important } -.dp_cal input { width: 68% !important } -.dp_cal button { position: absolute; top: 0; right: 0; margin: 0 !important; width: 30% !important } -/* datepicker icon clear */ -.clearDate { position: relative; margin: 0.5rem 0 0 -1.5rem; } -/* [ GRID STYLE ] */ -.grid { width: 100%; background-color: #fff !important; border: 1px solid rgba(0, 0, 0, 0.1); border-collapse: collapse; } -.grid thead, .grid tfoot { background-color: #e9e9e9 } -.grid th, .grid td { padding: 0.375rem !important; border: 1px solid #ddd } -.gridHeader, .grid th { color: #333; font-weight: 500; white-space: nowrap; background-color: #e9e9e9; text-align: left; } -.grid > tbody > tr:nth-child(2n) > td { background-color: rgba(0, 0, 0, 0.03) } -.gridItem { background-color: #fff; padding: 3px; } -.gridAltItem { background-color: #f7f7f7; padding: 3px; } -.grid tbody tr:hover td { background: #e9edf3; } -.grid a { text-decoration: none; } -.grid img { vertical-align: middle; padding-right: 4px; } -/* SORTABLELIST */ -ul.sortableList { margin: 0; } -ul.sortableList li { position: relative; z-index: 1; float: left; clear: both; max-width: 100%; width: 30rem; list-style: none; font-weight: bold; cursor: move; padding: 0.46153846em 1em; margin: .0625rem 0; border: 1px solid #ccc; line-height: 1.23076923; background-color: #fff; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); box-shadow: none; transition: color .3s, box-shadow .3s, transform .3s, z-index .3s step-end; } -ul.sortableList li.ghost { z-index: 2; box-shadow: 0 0.25rem 1.5rem rgba(0, 0, 0, 0.15); transition: color .3s, box-shadow .3s, transform 0s, z-index 0s; } -/* [ TOOLTIPS ] */ -.evo-tooltip, .custom-tip { position: fixed; z-index: 13000; width: 13rem; margin: 1rem; padding: 0.9rem 1rem; font-size: 0.75rem; line-height: 1.5; font-family: sans-serif; text-align: left; color: #333; background-color: #fff; visibility: hidden; transition-duration: .3s; transform: translate3d(1rem, 0, 0); -webkit-box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); } -.evo-tooltip { opacity: 0; content: attr(data-tooltip); } -.evo-tooltip.show { opacity: 1; visibility: visible; transform: translate3d(0, 0, 0); } -[data-tooltip] { cursor: help } -[data-tooltip].fa-question-circle { opacity: 0.15; } -[data-tooltip].fa-question-circle:hover { opacity: 1; } -/* [ FILES MANAGER ] */ -#ManageFiles { padding-bottom: 1rem; } -#ManageFiles .breadcrumbs { } -#ManageFiles .breadcrumbs a, #ManageFiles .breadcrumbs span { display: inline-block; padding: 0 0.25em; } -#ManageFiles #imageviewer { text-align: center; } -#ManageFiles #imageviewer img { display: inline-block; max-width: 100%; margin-top: 1rem } -#FilesTable { margin-bottom: 1rem; border-bottom: 1px solid #ddd; } -#file_editfile.section .sectionHeader { margin: 0; padding: 0.5rem 1rem; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } -#file_editfile.section .sectionBody { margin: 0 !important; padding: 0 0 1rem; border: none; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } -#file_editfile td { padding: 0 !important; } -#file_editfile #content { float: left; width: 100%; min-height: 25rem; border: none; border-bottom: 1px solid rgba(0, 0, 0, .15) } -/* STYLES FOR PAGE HELP */ -#helpPane h1 { margin-bottom: 1em; padding: .5rem; font-size: .8rem; border-bottom: 1px solid #e0e0e0; } -#helpPane li:not(:first-child) > strong { margin-top: 1.4em; } -#helpPane li > strong { display: block; font-size: 14px; } -#helpPane pre { border: 1px solid rgba(0, 0, 0, 0.1); padding: 1em; } -/* [ DARK THEME ] */ -.dark .section-editor textarea { background-color: #282c34; color: #abb2bf } -.dark .tab-page, .dark .sectionBody .tab-page, .dark .tab-row .tab.selected, .dark .tab-row .tab.selected.hover, .dark .tab-row .tab.selected:before, .dark .tab-row .tab.selected span { background-color: #f9f9f9; } -.dark, .dark .resourceTable .panel-heading { background: #ecf0f1 !important; } -.dark .resourceTable .panel-heading:hover { background: #ecf0f1 !important; } -.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background: #f9f9f9 !important; } -.dark .multitv .list li.element { background: #fefefe !important; } -.dark .split { border-color: rgba(0, 0, 0, .05) } -.dark hr { background: transparent; } -.dark .content-blocks .block { background: #fefefe; border: 1px solid #e3e3e3; } -.dark .content-blocks .block .fields-group { border: 1px dashed #e2e2e2; } -.dark .content-blocks input[type="text"], .dark .content-blocks input[type="password"], .dark .content-blocks input[type="number"], .dark .content-blocks textarea { background-color: #fbfbfb !important; border-color: #dbdbdb !important; } -.dark .content-blocks .controls { background: transparent !important; } -/* - [ OTHERS COMPONENTS ] - this components need fix css -*/ -/* extras */ -.catalog_item select[name=link] { width: auto !important; margin-left: 0.5rem } -/* ManagerManager */ -.sectionHeader.minimizable { position: relative; z-index: 1; background-color: #fafafa; padding: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.15); } -.dark .sectionHeader.minimizable { background-color: #f2f2f2 } -.imageField { min-width: 100% !important; width: 100% !important } -ul.mmTagList { float: left; margin-top: .25rem !important } -/* MCE */ -.mce-container, .mce-container-body { box-sizing: border-box !important } -.mce-container button { border: none; border-radius: 0; background-color: transparent; } -.mce-window-head .mce-close { padding: 0; } -#editorRow_TinyMCE { background-color: #fff; } -#editorRow_TinyMCE tr { border: 1px dotted rgba(0, 0, 0, .05); } -#editorRow_TinyMCE th { white-space: nowrap } -#editorRow_TinyMCE th, #editorRow_TinyMCE td { padding: 0.5em; border: none !important } -/* codeMirror */ -.CodeMirror { width: 100%; margin: 0 !important; } -.CodeMirror pre { word-break: break-all !important; } -.CodeMirror > div:first-child > textarea { /*opacity: 0;*/ z-index: -1; left: -9999rem; } -div.CodeMirror-cursors { pointer-events: none; } -/* docFinder */ -form#docfinder div.tab-page { height: auto !important } -/* SimpleGallery */ -#SimpleGallery .pagination { display: block } -#SimpleGallery .sg_image { width: auto } -/* multiTV */ -.multitv .list li.element a.copy, .multitv .list li.element a.remove { width: 25px !important; text-align: center; background: #fff !important; top: -10px !important; } -.multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background: #fefefe !important; margin-bottom: 10px !important; } - -/* loginbox animation */ -@keyframes anim-loginbox { - from { - opacity: 0; - transform: translateY(30px); - } - to { - opacity: 1; - transform: translateY(0); - } -} -@-webkit-keyframes anim-loginbox { - from { - opacity: 0; - transform: translateY(30px); - } - to { - opacity: 1; - transform: translateY(0); - } -} -.loginbox { - -webkit-animation-name: anim-loginbox; - -webkit-animation-duration: .5s; - -webkit-animation-iteration-count: 1; - -webkit-animation-timing-function: ease; - -webkit-animation-fill-mode: forwards; - -moz-animation-name: anim-loginbox; - -moz-animation-duration: .5s; - -moz-animation-iteration-count: 1; - -moz-animation-timing-function: ease; - -moz-animation-fill-mode: forwards; - animation-name: anim-loginbox; - animation-duration: .5s; - animation-iteration-count: 1; - animation-timing-function: ease; - animation-fill-mode: forwards; -} +/* [ COLS ] */ +.row { margin-left: -1.25rem; margin-right: -1.25rem } +.container { padding-left: 1.25rem; padding-right: 1.25rem; width: 100% } +/* :TODO .container-body need remove and replace .tab-content */ +.container-body { padding: 1.25rem } +/* [ FORMS ] */ +.form-row { margin-bottom: 0.25rem; } +.form-row.row { margin-left: 0; margin-right: -1rem } +.form-row label { margin-bottom: 0.15rem } +.form-row .col, .form-row .col-1, .form-row .col-10, .form-row .col-11, .form-row .col-12, .form-row .col-2, .form-row .col-3, .form-row .col-4, .form-row .col-5, .form-row .col-6, .form-row .col-7, .form-row .col-8, .form-row .col-9, .form-row .col-lg, .form-row .col-lg-1, .form-row .col-lg-10, .form-row .col-lg-11, .form-row .col-lg-12, .form-row .col-lg-2, .form-row .col-lg-3, .form-row .col-lg-4, .form-row .col-lg-5, .form-row .col-lg-6, .form-row .col-lg-7, .form-row .col-lg-8, .form-row .col-lg-9, .form-row .col-md, .form-row .col-md-1, .form-row .col-md-10, .form-row .col-md-11, .form-row .col-md-12, .form-row .col-md-2, .form-row .col-md-3, .form-row .col-md-4, .form-row .col-md-5, .form-row .col-md-6, .form-row .col-md-7, .form-row .col-md-8, .form-row .col-md-9, .form-row .col-sm, .form-row .col-sm-1, .form-row .col-sm-10, .form-row .col-sm-11, .form-row .col-sm-12, .form-row .col-sm-2, .form-row .col-sm-3, .form-row .col-sm-4, .form-row .col-sm-5, .form-row .col-sm-6, .form-row .col-sm-7, .form-row .col-sm-8, .form-row .col-sm-9, .form-row .col-xl, .form-row .col-xl-1, .form-row .col-xl-10, .form-row .col-xl-11, .form-row .col-xl-12, .form-row .col-xl-2, .form-row .col-xl-3, .form-row .col-xl-4, .form-row .col-xl-5, .form-row .col-xl-6, .form-row .col-xl-7, .form-row .col-xl-8, .form-row .col-xl-9, .form-row .col-xs, .form-row .col-xs-1, .form-row .col-xs-10, .form-row .col-xs-11, .form-row .col-xs-12, .form-row .col-xs-2, .form-row .col-xs-3, .form-row .col-xs-4, .form-row .col-xs-5, .form-row .col-xs-6, .form-row .col-xs-7, .form-row .col-xs-8, .form-row .col-xs-9 { padding-left: 0 } +.form-row .form-control { float: left; } +.form-inline .form-row .form-control { float: none; } +.container-body > .form-group:last-child, .container-body > .form-row:last-child, .container-body > p:last-child, .container-body > .form-group:last-child > p:last-child { margin-bottom: 0 } +.form-control-name { position: relative; } +.form-control-name .form-control { padding-right: 2em } +.form-control-name .custom-control { display: block; overflow: hidden; position: absolute; z-index: 3; top: 0; right: 0; width: 2em; height: 100%; margin: 0; padding: 0; cursor: pointer } +.form-control-name .custom-control input { position: absolute; left: -100% } +.form-control-name .custom-control .fa-lock { margin-top: 0.6em; font-size: 1.5em } +.form-control-name .custom-control .fa-lock::before { content: "\f09c"; color: #ddd } +.form-control-name .custom-control input:checked ~ .fa-lock::before { content: "\f023"; color: #d9534f } +input[type=date]:not(.unstyled), input[name*=date]:not(.unstyled):not([type=checkbox]):not([type=radio]), input[name=createdon], input[name=editedon], input[size="1"], select[size="1"]:not(.unstyled), select[name=usergroup]:not(.unstyled), select[name=docgroup]:not(.unstyled) { width: auto !important; vertical-align: middle } +input[name*=date]:not(.unstyled) + .input-group-addon { float: left; width: auto; } +input[size="50"], select[size="50"] { width: 10rem !important } +select[name=usergroup], select[name=docgroup] { margin: 0 0.5em; } +select[name=docgroup] + input[type=submit] { float: none; margin: 0; } +#settingsPane #filemanager_path, #settingsPane #rb_base_dir, #settingsPane input[name=txt_custom_contenttype] { border-top-right-radius: 0; border-bottom-right-radius: 0 } +#settingsPane #filemanager_path + input[name=reset_filemanager_path], #settingsPane #rb_base_dir + input[name=reset_rb_base_dir], #settingsPane input[name=txt_custom_contenttype] + input[type=button], input[name=photo] + input[type=button], #range input#pids + input[name=fsubmit], input[name="ta"].inputBox + input[type=button], input[name="ta"].inputBox + .CodeMirror + input[type=button], #documentPane input[name^=tv]:not([class*=mtv]) + input[type=button] { z-index: 5; float: right; margin-top: -2.30769em; width: auto !important; border-top-left-radius: 0; border-bottom-left-radius: 0 } +#settingsPane [name=site_name], #settingsPane [name=txt_custom_contenttype], #settingsPane [name=filemanager_path], #settingsPane [name=rb_base_dir], input[name=photo], #range input#pids, input[maxlength="350"], textarea.mce, #editorRow_TinyMCE { width: 100% !important } +#range::after { content: ""; display: table; width: 100% } +/* [ Editor ] */ +.navbar.navbar-editor { padding: .5rem 1.25rem; border-radius: 0 } +.navbar-editor > label { margin-bottom: 0 } +.section-editor textarea { float: left; border-left: none; border-right: none; font-family: 'Inconsolata', 'Monaco', 'Consolas', 'Courier New', 'Courier', monospace; font-weight: 300; font-size: 0.875rem; } +/* [ Action Buttons ] */ +/* new style */ +#actions { background: rgba(199, 199, 199, 0.25); padding: 0.5rem; position: fixed; top: 0; right: 1rem; text-align: right; z-index: 1001; border-radius: 0 0 0.3rem 0.3rem; } +#actions .btn-group { margin: 0 } +#actions .btn-group > .btn-group { display: block } +#actions .btn-group .btn, #actions .btn-group .form-control { font-size: .6772rem; height: 2.4em; line-height: 1.4 } +#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: none; width: 1em; font-size: 1em; text-align: center } +#actions .btn-group .btn-group #Button1 { min-width: 100%; text-align: left; float: right; } +#actions .btn-group .btn-success { box-shadow: inset 0 -2px 0 rgba(0, 0, 0, .07); } +#actions .btn-group .btn-success:hover { box-shadow: none } +#actions .btn-group .plus { z-index: 2; float: right; margin: -2.4em 0 0 0; width: 2rem; padding-left: 0; padding-right: 0; text-align: center } +#actions .btn-group select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; margin: -100% 0 -2rem 0; font-size: 0.675rem; opacity: 0; visibility: hidden; } +#actions .btn-group .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 2rem; margin: 0; padding: 0; text-align: left; font-size: .6772rem; border-top: none; border-radius: 0 0 0.1em 0.1em; overflow: hidden; } +#actions .btn-group .show > .dropdown-menu { display: block } +#actions .btn-group .dropdown-menu > span { display: block; margin: 0; text-align: left; border: none; border-top: 1px solid rgba(0, 0, 0, 0.1) } +#actions .btn-group .dropdown-menu > span:first-child { border-color: transparent } +#actions .btn-group .dropdown-menu > span:hover { background-color: #e6e6e6; } +#actions .btn-group .dropdown-toggle::after { margin: 0; border-width: 0.4em; transition-duration: 0.25s } +#actions .btn-group .show .dropdown-toggle::after { transform: rotate(180deg) } +#_actions .btn-group .input-group-btn .btn { margin-left: .1875rem } +#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: .1em } +@media (max-width: 840px) { +#actions { right: 0 } +#actions .btn-group .btn span, #actions .btn-group select#stay, #_actions .btn-group .btn span { display: none } +#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: inline-block } +#actions .btn-group .dropdown-menu { width: 2rem } +#actions .btn-group .dropdown-menu span { padding-left: 0; padding-right: 0; text-align: center } +#_actions .btn-group .input-group-btn .btn { margin-left: -1px } +#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: 0 } +#_actions .btn-group .form-control:first-child { border-top-left-radius: .1em; border-bottom-left-radius: .1em; } +#_actions .btn-group .btn:last-child { border-top-right-radius: .1em; border-bottom-right-radius: .1em; } +} +/* old style */ +#actions .actionButtons { float: left; min-height: 32px } +#actions .actionButtons li { position: relative; float: left; margin-right: 3px; border: none } +#actions .actionButtons li a, #actions .actionButtons .plus { float: left; padding: 0 10px !important; height: 32px; line-height: 30px; -webkit-user-select: none; user-select: none; } +#actions .actionButtons li:last-child { margin: 0 } +#actions .actionButtons #Button1 a { width: 100%; text-align: left; } +#actions .actionButtons .plus { overflow: hidden; float: right; margin: -32px 0 0 0; width: 35px; border-radius: 0 3px 3px 0 !important; text-align: center; cursor: default; font: normal normal normal 0/30px FontAwesome } +#actions .actionButtons .plus::before { content: "\f107"; font-size: 14px } +#actions .actionButtons .show .plus::before { content: "\f106"; } +#actions .actionButtons .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 35px; margin: -2px 0 0; padding: 2px 0 0; text-align: left; font-size: 1em; background-color: #fff; border: 1px solid #32ab9a; border-top: none; border-radius: 0 0 3px 3px; overflow: hidden; } +#actions .actionButtons .show > .dropdown-menu { display: block } +#actions .actionButtons .dropdown-menu > span { display: block; padding: 0 10px; height: 32px; line-height: 30px; border: none; border-top: 1px solid #f2f2f2; cursor: pointer; } +#actions .actionButtons .dropdown-menu > span:hover { background-color: #fbfbfb; } +#actions .actionButtons select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; padding: 0 10px; margin: -100% 0 -32px 0; font-size: 1em; opacity: 0; visibility: hidden; } +#actions .actionButtons #Button1 a, #actions .actionButtons .plus { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } +#actions .actionButtons #Button1 a:hover, #actions .actionButtons .plus:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } +#actions .actionButtons #Button1 a:active, #actions .actionButtons .plus:active { background: #32ab9a; border-color: #32ab9a; } +@media (max-width: 900px) { +#actions .actionButtons li a, #actions .actionButtons .dropdown-menu span { font-size: 0 } +#actions .actionButtons li a .fa, #actions .actionButtons .dropdown-menu span .fa { display: inline-block; font-size: 14px; line-height: 30px } +#actions .actionButtons .dropdown-menu { width: 35px } +#actions .actionButtons #Button1 a { margin: 0; width: auto } +#actions .actionButtons .plus { margin: 0 0 0 -2px } +#actions .actionButtons select#stay { display: none } +} +/* actionButtons in content ( old style ) */ +.actionButtons { margin: 0; padding: 0; background: none; width: auto; white-space: nowrap; } +.actionButtons li { float: left; margin: 0; padding: 0; list-style: none; } +.actionButtons li:before, .mmTagList li:before, .rTable li:before, .tab-pane ul li ul li:before, .dashboard li:before, div#idShowHideSocialBox.sectionBody > div.btn-group.ope > ul.dropdown-menu > li:before, .sectionBody .multitv .list li:before { display: none; content: ''; } +.actionButtons img { vertical-align: top; margin-top: 1px; opacity: 0.3; } +.actionButtons:hover img { opacity: 1; } +.actionButtons a:hover { border-color: #999; -webkit-box-shadow: 1px 1px 2px #aaa; box-shadow: 1px 1px 2px #aaa; -webkit-transition: .3s ease; transition: .3s ease; background: -moz-linear-gradient(#fff, #f5f5f5); background: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f5f5f5)); background: -o-linear-gradient(#fff, #f5f5f5); text-decoration: none !important; } +.actionButtons a:active { background: #92aac4 bottom left; -webkit-box-shadow: 0 0 10px #b8c7d6; box-shadow: 0 0 10px #b8c7d6; } +.actionButtons a { float: left; padding: 5px 10px; height: 32px; font-size: 13px; font-weight: 500; } +.actionButtons a, .actionButtons li.primary a, .actionButtons a.primary, .actionButtons a.default { text-shadow: none; background: #fff; color: #555; border: 1px solid #e4e4e4; border-radius: 3px; /*box-shadow: 0 0 0 1px #E4E4E4;*/ box-shadow: none; transition: none; } +.actionButtons a:hover { background: #1377c5; box-shadow: none; border-color: #1377c5; color: #fff !important; transition: none; } +.actionButtons a:active { background-color: #3189ba; border-color: #3189ba; } +.actionButtons li.primary a, .actionButtons a.primary { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } +.actionButtons li.primary a:hover, .actionButtons a.primary:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } +.actionButtons li.primary a:active, .actionButtons a.primary:active { background: #32ab9a; border-color: #32ab9a; } +.actionButtons img { display: none; } +#treePane .actionButtons img { display: inline; } +.actionButtons--tableheader .fa { font-size: 14px; } +.sectionBody .actionButtons { padding-top: 0; min-height: 40px; } +.sectionBody .actionButtons li { margin-right: 10px; } +.sectionBody .actionButtons a { display: inline-block; padding: 9px 10px; line-height: 1; } +table.actionButtons { margin-top: 1rem; margin-bottom: 10px; } +table.actionButtons img { display: inline-block; } +table.actionButtons .searchtext { padding: 5px; height: 24px; width: 150px; } +.actionButtons .fa { display: none; text-align: center; font-size: 1em; line-height: 1em; width: 1.1em; vertical-align: initial } +.actionButtons .fa, .actionButtons--eit .fa { display: inline-block; } +.optionsTitle .fa { display: inline-block; } +@media (max-width: 900px) { +.actionButtons a { display: inline-block; padding: 6px 10px } +.tab-page .actionButtons a { margin-top: 0 !important } +.actionButtons a span { display: none; } +.actionButtons a .fa { display: inline-block; } +} +/* [ TABLES ] */ +/* table */ +.table th, .table td { padding: 0.15rem 0.25rem; } +/* table-data */ +.table.data { width: 100%; max-width: 100%; margin-bottom: 0; border-bottom: 1px solid #eceeef } +.table.data th, .table.data thead td { padding: 0.75rem; text-transform: uppercase; white-space: nowrap; font-size: 0.675rem; color: #777; border-bottom: 2px solid #eceeef } +.table.data td { padding: 0.55rem 0.75rem; } +.table.data td, .table.data th, .table.data thead td { vertical-align: top; border-top: 1px solid #eceeef } +.table.data td:first-child, .table.data th:first-child, .table.data.table-sm td:first-child, .table.data.table-sm th:first-child { padding-left: 1.25rem } +.table.data td:last-child, .table.data th:last-child, .table.data.table-sm td:last-child, .table.data.table-sm th:last-child { padding-right: 1.25rem } +.table.data thead { background-color: #fff; } +.table.data > tbody > tr { background-color: #f9f9f9; transition-duration: .5s } +.table.data > tbody > tr:nth-child(2n) { background-color: #fff } +.table.data > tbody > tr:hover { cursor: default; background-color: rgba(93, 109, 202, 0.16); transition-duration: .05s } +.table.data tr.unstyled:hover { background-color: inherit } +.table.data .actions { white-space: nowrap } +.table.data .actions a { color: #555 } +.table.data .actions a .fa, .table.data .actions span .fa { position: relative; margin: 0 0.375rem; font-size: 0.9rem; color: #555 } +.table.data .actions a:hover .fa { color: #000; } +.table.data .actions a:hover .fa.fa-trash { color: #d80030 } +.table.data .actions a .fa::before { position: relative; z-index: 2; } +.table.data .actions a .fa::after { content: ""; position: absolute; z-index: 1; left: 50%; top: 50%; width: 1.5rem; height: 1.5rem; margin: -0.75rem 0 0 -0.75rem; border-radius: 50%; -webkit-transition: 0.15s; transition: 0.15s; } +.table.data .actions a:hover .fa::after { background-color: #fff } +.table.data .actions .disabled { visibility: hidden } +/* table-data-nowrap */ +.table.data.nowrap th, .table.data.nowrap td { white-space: nowrap } +/* table-data-sortable */ +.table.data thead .sortable a, .table.data thead .sortable-text a { color: #777; text-decoration: none !important; } +.table.data thead .sortable a:hover, .table.data thead .sortable-text a:hover { color: #222 } +.table.data thead .sortable a::after, .table.data thead .sortable-text a::after { content: "\f107"; font-family: FontAwesome; opacity: .3; margin-left: .5em; } +.table.data thead .sortable.forwardSort a::after, .table.data thead .sortable-text.forwardSort a::after { opacity: 1; content: "\f106"; color: #d9534f } +.table.data thead .sortable.reverseSort a::after, .table.data thead .sortable-text.reverseSort a::after { opacity: 1; content: "\f107"; color: #d9534f } +.table.data thead .sortable:hover a::after, .table.data thead .sortable-text:hover a::after, .table.data thead .sortable-numeric:hover a::after, .table.data thead .sortable-date:hover a::after { opacity: 1 } +.table.data thead .sortable, .table.data thead .sortable-text, .table.data thead .sortable-numeric, .table.data thead .sortable-date { cursor: pointer } +.table.data thead .sortable-text span, .table.data thead .sortable-numeric span, .table.data thead .sortable-date span { display: none } +.table.data.table-sortable > tbody > tr { cursor: move; transition-duration: .5s } +.table.data.table-sortable > tbody > tr.ghost { background-color: rgba(93, 109, 202, 0.16); color: #d9534f !important; transition: background-color .5s, color .5s, transform 0s } +/* table-data-sm */ +.table.data.table-sm td, .table.data.table-sm th { padding: .25rem .5rem; } +.table.data.table-sm th, .table.data.table-sm thead td { font-size: 0.75rem; text-transform: none; } +/* table-data-even */ +.table.data.table-even > tbody > tr:not(:hover) { background-color: #fff } +.table.data.table-even > tbody > tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } +.table.data.table-even > tbody > tr:nth-child(2n) { background-color: #fff } +/* table-data-docs */ +.table.data .doc-item .fa { width: 1.2em; font-size: 0.9rem; text-align: center; margin-right: 0.25rem } +.table.data .doc-item { text-decoration: none } +.table.data .doc-item:hover span { text-decoration: underline } +.table.data .doc-item.private .fa::after { position: relative; float: left; margin: .5em -1em 0 0; content: "\f023"; font-size: 0.75em; color: #d9534f; } +/* [ BREADCRUMBS ] */ +ul.breadcrumbs { margin: 0 1rem .5rem; padding: 0 0 .5rem; line-height: normal; font-size: .675rem; color: #888; border-bottom: 1px dotted #cecaca; } +ul.breadcrumbs li { list-style: none; display: inline-block; padding: 0; margin: 0; } +ul.breadcrumbs a { text-decoration: none; } +ul.breadcrumbs span { display: inline-block; width: 1.25em; vertical-align: top; text-indent: -2.25em; overflow: hidden; } +ul.breadcrumbs span::after { margin-left: 2em; font-family: FontAwesome; content: "\f105" } +/* [ PAGINATION ] */ +#pagination { padding: 0 1.25rem; margin: .5rem 0 0; } +#pagination ul { margin: 0 0 0 .5rem; display: inline-block; } +#pagination li { list-style: none; display: inline-block; margin: 0 0 0 1px; } +#pagination li a { display: inline-block; padding: 0 .5rem; line-height: 1.7; border: 1px solid #ddd; text-decoration: none; color: #333; } +#pagination li.currentPage a, #pagination li a:hover { color: #555; border: 1px solid #555; } +/* [ SEARCHBAR ] */ +.searchbar input[type=text] { max-width: 10rem } +/* [ WIDGETS ] */ +.widgets .card { margin-bottom: .75rem; border: none; border-radius: 0.15rem; background-color: #fff; box-shadow: 0 0 0.1rem 0 rgba(0, 0, 0, 0.1), 0 0.1rem 0.3rem rgba(0, 0, 0, 0.05) } +.widgets .card-header { padding: .75rem 1rem; font-size: .675rem; color: #616a73; text-transform: uppercase; font-weight: 900; border: none; background-color: #f2f2f2; } +.widgets .card-header .fa { font-size: .9rem } +.widgets .card-block { padding: 0; } +.widgets .card-block .card-block p { padding: 0 1rem } +.widgets .card-block .card-body { padding: 1rem; } +.widgets .card-block .card-body + .card-body { padding-top: 0 } +.widgets .table { margin-bottom: 1rem } +.widgets .table:not(.data) tr th, .widgets .table:not(.data) tr td { padding: .15rem; } +.widgets .table tr th:first-child, .widgets .table tr td:first-child { padding-left: 1rem !important } +.widgets .table tr th:last-child, .widgets .table tr td:last-child { padding-right: 1rem !important } +.widgets .table .actions a .fa { margin: 0 .05rem; } +/* widgets custom */ +.widgets #welcome .wm_buttons { text-align: center } +.widgets #welcome .wm_button { display: inline-block; margin: 0 .15rem .5rem; } +.widgets #welcome .wm_button a { display: inline-block; text-decoration: none; color: #646b7b; padding: .25rem; /*min-width: 6rem; background-color: #f9f9f9;*/ border-radius: 0.25rem; box-shadow: none; transition-duration: .5s } +.widgets #welcome .wm_button a:hover { color: #373b46; } +.widgets #welcome .wm_button a .fa { display: inline-block; } +.widgets #welcome .wm_button a .fa + span { display: block; font-size: .7rem; } +.widgets #modxrecent_widget .table.data tbody tr:not(:hover) { background-color: #fff } +.widgets #modxrecent_widget .table.data tbody tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } +.widgets #modxrecent_widget .table.data tbody tr:nth-child(2n) { background-color: #fff } +/* [ DATEPICKER ] */ +.dp_container { position: absolute; z-index: 500; } +.dp_cal { overflow: hidden; width: 220px; margin: 0.25rem 0; background-color: #fff; -webkit-box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); } +.dp_cal p { position: relative; margin: 10px; } +.dp_cal select { font-size: 1em; margin: 2px 3px; width: auto !important } +.dp_cal select option { padding: 1px 3px } +.dp_cal table { border-collapse: collapse; border-spacing: 0; width: 100% } +.dp_cal td.dp_roll { background-color: rgba(0, 0, 0, 0.1); color: #333 !important } +.dp_cal th, .dp_cal td { font-size: 1em; padding: 0.5em 0 !important; text-align: center !important; width: 14.2857%; cursor: default } +.dp_cal tbody th { background-color: #656d79; color: #fff; } +.dp_cal tbody td:nth-child(6), .dp_cal tbody td:nth-child(7) { color: indianred } +.dp_cal .dp_empty { background-color: #f9f9f9 } +.dp_cal .dp_hide { visibility: hidden } +.dp_cal .dp_today { background-color: #4caf50; color: #fff !important } +.dp_cal .dp_selected { background-color: #3189ba; color: #fff !important } +.dp_cal input { width: 68% !important } +.dp_cal button { position: absolute; top: 0; right: 0; margin: 0 !important; width: 30% !important } +/* datepicker icon clear */ +.clearDate { position: relative; margin: 0.5rem 0 0 -1.5rem; } +/* [ GRID STYLE ] */ +.grid { width: 100%; background-color: #fff !important; border: 1px solid rgba(0, 0, 0, 0.1); border-collapse: collapse; } +.grid thead, .grid tfoot { background-color: #e9e9e9 } +.grid th, .grid td { padding: 0.375rem !important; border: 1px solid #ddd } +.gridHeader, .grid th { color: #333; font-weight: 500; white-space: nowrap; background-color: #e9e9e9; text-align: left; } +.grid > tbody > tr:nth-child(2n) > td { background-color: rgba(0, 0, 0, 0.03) } +.gridItem { background-color: #fff; padding: 3px; } +.gridAltItem { background-color: #f7f7f7; padding: 3px; } +.grid tbody tr:hover td { background: #e9edf3; } +.grid a { text-decoration: none; } +.grid img { vertical-align: middle; padding-right: 4px; } +/* SORTABLELIST */ +ul.sortableList { margin: 0; } +ul.sortableList li { position: relative; z-index: 1; float: left; clear: both; max-width: 100%; width: 30rem; list-style: none; font-weight: bold; cursor: move; padding: 0.46153846em 1em; margin: .0625rem 0; border: 1px solid #ccc; line-height: 1.23076923; background-color: #fff; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); box-shadow: none; transition: color .3s, box-shadow .3s, transform .3s, z-index .3s step-end; } +ul.sortableList li.ghost { z-index: 2; box-shadow: 0 0.25rem 1.5rem rgba(0, 0, 0, 0.15); transition: color .3s, box-shadow .3s, transform 0s, z-index 0s; } +/* [ TOOLTIPS ] */ +.evo-tooltip, .custom-tip { position: fixed; z-index: 13000; width: 13rem; margin: 1rem; padding: 0.9rem 1rem; font-size: 0.75rem; line-height: 1.5; font-family: sans-serif; text-align: left; color: #333; background-color: #fff; visibility: hidden; transition-duration: .3s; transform: translate3d(1rem, 0, 0); -webkit-box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); } +.evo-tooltip { opacity: 0; content: attr(data-tooltip); } +.evo-tooltip.show { opacity: 1; visibility: visible; transform: translate3d(0, 0, 0); } +[data-tooltip] { cursor: help } +[data-tooltip].fa-question-circle { opacity: 0.15; } +[data-tooltip].fa-question-circle:hover { opacity: 1; } +/* [ FILES MANAGER ] */ +#ManageFiles { padding-bottom: 1rem; } +#ManageFiles .breadcrumbs { } +#ManageFiles .breadcrumbs a, #ManageFiles .breadcrumbs span { display: inline-block; padding: 0 0.25em; } +#ManageFiles #imageviewer { text-align: center; } +#ManageFiles #imageviewer img { display: inline-block; max-width: 100%; margin-top: 1rem } +#FilesTable { margin-bottom: 1rem; border-bottom: 1px solid #ddd; } +#file_editfile.section .sectionHeader { margin: 0; padding: 0.5rem 1rem; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } +#file_editfile.section .sectionBody { margin: 0 !important; padding: 0 0 1rem; border: none; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } +#file_editfile td { padding: 0 !important; } +#file_editfile #content { float: left; width: 100%; min-height: 25rem; border: none; border-bottom: 1px solid rgba(0, 0, 0, .15) } +/* STYLES FOR PAGE HELP */ +#helpPane h1 { margin-bottom: 1em; padding: .5rem; font-size: .8rem; border-bottom: 1px solid #e0e0e0; } +#helpPane li:not(:first-child) > strong { margin-top: 1.4em; } +#helpPane li > strong { display: block; font-size: 14px; } +#helpPane pre { border: 1px solid rgba(0, 0, 0, 0.1); padding: 1em; } +/* [ DARK THEME ] */ +.dark .section-editor textarea { background-color: #282c34; color: #abb2bf } +.dark .tab-page, .dark .sectionBody .tab-page, .dark .tab-row .tab.selected, .dark .tab-row .tab.selected.hover, .dark .tab-row .tab.selected:before, .dark .tab-row .tab.selected span { background-color: #f9f9f9; } +.dark, .dark .resourceTable .panel-heading { background: #ecf0f1 !important; } +.dark .resourceTable .panel-heading:hover { background: #ecf0f1 !important; } +.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background: #f9f9f9 !important; } +.dark .multitv .list li.element { background: #fefefe !important; } +.dark .split { border-color: rgba(0, 0, 0, .05) } +.dark hr { background: transparent; } +.dark .content-blocks .block { background: #fefefe; border: 1px solid #e3e3e3; } +.dark .content-blocks .block .fields-group { border: 1px dashed #e2e2e2; } +.dark .content-blocks input[type="text"], .dark .content-blocks input[type="password"], .dark .content-blocks input[type="number"], .dark .content-blocks textarea { background-color: #fbfbfb !important; border-color: #dbdbdb !important; } +.dark .content-blocks .controls { background: transparent !important; } +.dark .widgets .card-header { color: #616a73; background-color: #fff;} +/* + [ OTHERS COMPONENTS ] - this components need fix css +*/ +/* extras */ +.catalog_item select[name=link] { width: auto !important; margin-left: 0.5rem } +/* ManagerManager */ +.sectionHeader.minimizable { position: relative; z-index: 1; background-color: #fafafa; padding: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.15); } +.dark .sectionHeader.minimizable { background-color: #f2f2f2 } +.imageField { min-width: 100% !important; width: 100% !important } +ul.mmTagList { float: left; margin-top: .25rem !important } +/* MCE */ +.mce-container, .mce-container-body { box-sizing: border-box !important } +.mce-container button { border: none; border-radius: 0; background-color: transparent; } +.mce-window-head .mce-close { padding: 0; } +#editorRow_TinyMCE { background-color: #fff; } +#editorRow_TinyMCE tr { border: 1px dotted rgba(0, 0, 0, .05); } +#editorRow_TinyMCE th { white-space: nowrap } +#editorRow_TinyMCE th, #editorRow_TinyMCE td { padding: 0.5em; border: none !important } +/* codeMirror */ +.CodeMirror { width: 100%; margin: 0 !important; } +.CodeMirror pre { word-break: break-all !important; } +.CodeMirror > div:first-child > textarea { /*opacity: 0;*/ z-index: -1; left: -9999rem; } +div.CodeMirror-cursors { pointer-events: none; } +/* docFinder */ +form#docfinder div.tab-page { height: auto !important } +/* SimpleGallery */ +#SimpleGallery .pagination { display: block } +#SimpleGallery .sg_image { width: auto } +/* multiTV */ +.multitv .list li.element a.copy, .multitv .list li.element a.remove { width: 25px !important; text-align: center; background: #fff !important; top: -10px !important; } +.multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background: #fefefe !important; margin-bottom: 10px !important; } + +/* loginbox animation */ +@keyframes anim-loginbox { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} +@-webkit-keyframes anim-loginbox { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} +.loginbox { + -webkit-animation-name: anim-loginbox; + -webkit-animation-duration: .5s; + -webkit-animation-iteration-count: 1; + -webkit-animation-timing-function: ease; + -webkit-animation-fill-mode: forwards; + -moz-animation-name: anim-loginbox; + -moz-animation-duration: .5s; + -moz-animation-iteration-count: 1; + -moz-animation-timing-function: ease; + -moz-animation-fill-mode: forwards; + animation-name: anim-loginbox; + animation-duration: .5s; + animation-iteration-count: 1; + animation-timing-function: ease; + animation-fill-mode: forwards; +} /* end loginbox animation */ \ No newline at end of file From 32e997982153353bcb33a7554e17761d5e990f4c Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Wed, 27 Sep 2017 22:24:49 +0300 Subject: [PATCH 230/577] change to #265 Page load speedup after disabled <@> tags --- .../includes/document.parser.class.inc.php | 69 ++++++++++++------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index f79aab39c0..d7f5ee164f 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -355,8 +355,10 @@ function getSettings() $this->error_reporting = $this->config['error_reporting']; $this->config['filemanager_path'] = str_replace('[(base_path)]', MODX_BASE_PATH, $this->config['filemanager_path']); $this->config['rb_base_dir'] = str_replace('[(base_path)]', MODX_BASE_PATH, $this->config['rb_base_dir']); - - if (!isset($this->config['enable_at_syntax'])) $this->config['enable_at_syntax'] = 1; // @TODO: This line is temporary, should be remove in next version + + if (!isset($this->config['enable_at_syntax'])) { + $this->config['enable_at_syntax'] = 1; + } // @TODO: This line is temporary, should be remove in next version // now merge user settings into evo-configuration $this->getUserSettings(); @@ -1178,8 +1180,10 @@ function _getTagsFromContent($content, $left = '[+', $right = '+]') */ function mergeDocumentContent($content, $ph = false) { - if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { - $content = $this->escapeLiteralTagsContent($content); + if ($this->config['enable_at_syntax']) { + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } } if (strpos($content, '[*') === false) { return $content; @@ -1367,8 +1371,10 @@ function _contextValue($key, $parent = false) */ function mergeSettingsContent($content, $ph = false) { - if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { - $content = $this->escapeLiteralTagsContent($content); + if ($this->config['enable_at_syntax']) { + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } } if (strpos($content, '[(') === false) { return $content; @@ -1414,11 +1420,13 @@ function mergeSettingsContent($content, $ph = false) */ function mergeChunkContent($content, $ph = false) { - if (strpos($content, '{{ ') !== false) { - $content = str_replace(array('{{ ', ' }}'), array('\{\{ ', ' \}\}'), $content); - } - if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { - $content = $this->escapeLiteralTagsContent($content); + if ($this->config['enable_at_syntax']) { + if (strpos($content, '{{ ') !== false) { + $content = str_replace(array('{{ ', ' }}'), array('\{\{ ', ' \}\}'), $content); + } + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } } if (strpos($content, '{{') === false) { return $content; @@ -1449,9 +1457,11 @@ function mergeChunkContent($content, $ph = false) continue; } - $value = $this->parseText($value,$params); // parse local scope placeholers for ConditionalTags - $value = $this->mergePlaceholderContent($value, $params); // parse page global placeholers - $value = !$this->config['enable_at_syntax'] ? $value : $this->mergeConditionalTagsContent($value); + if ($this->config['enable_at_syntax']) { + $value = $this->parseText($value, $params); // parse local scope placeholers for ConditionalTags + $value = $this->mergePlaceholderContent($value, $params); // parse page global placeholers + $value = $this->mergeConditionalTagsContent($value); + } $value = $this->mergeDocumentContent($value); $value = $this->mergeSettingsContent($value); $value = $this->mergeChunkContent($value); @@ -1480,8 +1490,10 @@ function mergeChunkContent($content, $ph = false) function mergePlaceholderContent($content, $ph = false) { - if ($this->config['enable_at_syntax'] && stripos($content, '<@LITERAL>') !== false) { - $content = $this->escapeLiteralTagsContent($content); + if ($this->config['enable_at_syntax']) { + if (stripos($content, '<@LITERAL>') !== false) { + $content = $this->escapeLiteralTagsContent($content); + } } if (strpos($content, '[+') === false) { return $content; @@ -1491,7 +1503,10 @@ function mergePlaceholderContent($content, $ph = false) $ph = $this->placeholders; } - $content = !$this->config['enable_at_syntax'] ? $content : $this->mergeConditionalTagsContent($content); + if ($this->config['enable_at_syntax']) { + $content = $this->mergeConditionalTagsContent($content); + } + $content = $this->mergeDocumentContent($content); $content = $this->mergeSettingsContent($content); $matches = $this->getTagsFromContent($content, '[+', '+]'); @@ -1537,7 +1552,7 @@ function mergeConditionalTagsContent($content, $iftag = '<@IF:', $elseiftag = '< if (strpos($content, '@IF') !== false) { $content = $this->_prepareCTag($content, $iftag, $elseiftag, $elsetag, $endiftag); } - + if (strpos($content, $iftag) === false) { return $content; } @@ -1691,7 +1706,7 @@ function ignoreCommentedTagsContent($content, $left = '' if (strpos($content, $left) === false) { return $content; } - + $matches = $this->getTagsFromContent($content, $left, $right); if (!empty($matches)) { foreach ($matches[0] as $i => $v) { @@ -1716,7 +1731,7 @@ function escapeLiteralTagsContent($content, $left = '<@LITERAL>', $right = '<@EN if (stripos($content, $left) === false) { return $content; } - + $matches = $this->getTagsFromContent($content, $left, $right); if (empty($matches)) { return $content; @@ -2571,8 +2586,10 @@ function parseDocumentSource($source) $this->invokeEvent("OnParseDocument"); // work on it via $modx->documentOutput $source = $this->documentOutput; - $source = !$this->config['enable_at_syntax'] ? $source : $this->ignoreCommentedTagsContent($source); - $source = !$this->config['enable_at_syntax'] ? $source : $this->mergeConditionalTagsContent($source); + if ($this->config['enable_at_syntax']) { + $source = $this->ignoreCommentedTagsContent($source); + $source = $this->mergeConditionalTagsContent($source); + } $source = $this->mergeSettingsContent($source); $source = $this->mergeDocumentContent($source); @@ -4215,8 +4232,10 @@ function parseText($tpl = '', $ph = array(), $left = '[+', $right = '+]', $execM return $tpl; } - if ($this->config['enable_at_syntax'] && stripos($tpl, '<@LITERAL>') !== false) { - $tpl = $this->escapeLiteralTagsContent($tpl); + if ($this->config['enable_at_syntax']) { + if (stripos($tpl, '<@LITERAL>') !== false) { + $tpl = $this->escapeLiteralTagsContent($tpl); + } } $matches = $this->getTagsFromContent($tpl, $left, $right); @@ -5985,7 +6004,7 @@ function phpError($nr, $text, $file, $line) } else { $source = ""; } //Error $nr in $file at $line:
          $source
          - + $this->messageQuit($msg, '', $isError, $nr, $file, $source, $text, $line); } From dab9e58c0ad68a85787dd4f63b93fa08a9d96376 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Wed, 27 Sep 2017 23:15:23 +0300 Subject: [PATCH 231/577] demosite Breadcrumbs -> DLCrumbs --- install/assets/templates/MODX_startup_Bootstrap.tpl | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/install/assets/templates/MODX_startup_Bootstrap.tpl b/install/assets/templates/MODX_startup_Bootstrap.tpl index ac6aaf0422..b7ade977fb 100644 --- a/install/assets/templates/MODX_startup_Bootstrap.tpl +++ b/install/assets/templates/MODX_startup_Bootstrap.tpl @@ -77,10 +77,12 @@ section.main .container{background-color:#fff; padding-bottom:20px;} footer.footer .container{background-color:#000; color:#fff; line-height:40px;} - section.main ul{list-style:none; margin:0 0 1em 0; padding:0;} - section.main ul li{padding-left:1em;} - section.main ul li:before{content:'\2022'; position:absolute; line-height:1.85em; margin-left:-1em;} + section.main .content ul{list-style:none; margin:0 0 1em 0; padding:0;} + section.main .content ul li{padding-left:1em;} + section.main .content ul li:before{content:'\2022'; position:absolute; line-height:1.85em; margin-left:-1em;} + .breadcrumb {padding: 0px 0px;margin-bottom: 0px;list-style: none;background-color:#fff;border-radius: 0px;} + .footer{text-align:center;} .footer .text-right{text-align:center;} @@ -178,12 +180,12 @@
          - [[Breadcrumbs]] + [[DLCrumbs? &showCurrent=`1`]]
          -
          +

          [*#longtitle*]

          From 6eedbf6d1b64e2906fd01c5295573d89b5b4ac21 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Wed, 27 Sep 2017 23:23:52 +0300 Subject: [PATCH 232/577] =?UTF-8?q?#253=20=D0=94=D1=83=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=D1=85=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=20=D1=81?= =?UTF-8?q?=D0=B0=D0=B9=D1=82=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20ind?= =?UTF-8?q?ex.php=3Fq=3D=20add=20in=20ht.access?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ht.access | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ht.access b/ht.access index 0460781c96..b94d4ef808 100644 --- a/ht.access +++ b/ht.access @@ -35,6 +35,12 @@ RewriteRule .* - [F,L] #RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC] #RewriteRule ^(.*)$ http://%1/$1 [R=301,L] +# 301 that removes index.php?q= from all urls +#RewriteCond %{THE_REQUEST} \s/+index\.php\?&q=([^\s&]+) [NC] +#RewriteRule ^ /%1? [R=301,L] +#RewriteCond %{THE_REQUEST} \s/+index\.php\?q=([^\s&]+) [NC] +#RewriteRule ^ /%1? [R=301,L] + # Exclude /assets and /manager directories and images from rewrite rules RewriteRule ^(manager|assets|js|css|images|img)/.*$ - [L] RewriteRule \.(jpg|jpeg|png|gif|ico)$ - [L] From b0207a13dabcc2a86f3dd29cd8022139abf4ec8a Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Thu, 28 Sep 2017 00:08:06 +0300 Subject: [PATCH 233/577] Change logo file name to evo-logo.png #104 --- assets/images/{modx-logo.png => evo-logo.png} | Bin install/assets/templates/MODX_startup_Bootstrap.tpl | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename assets/images/{modx-logo.png => evo-logo.png} (100%) diff --git a/assets/images/modx-logo.png b/assets/images/evo-logo.png similarity index 100% rename from assets/images/modx-logo.png rename to assets/images/evo-logo.png diff --git a/install/assets/templates/MODX_startup_Bootstrap.tpl b/install/assets/templates/MODX_startup_Bootstrap.tpl index b7ade977fb..f88df103ad 100644 --- a/install/assets/templates/MODX_startup_Bootstrap.tpl +++ b/install/assets/templates/MODX_startup_Bootstrap.tpl @@ -137,7 +137,7 @@
          From bb061a609103b9478aa23f739883efbec3bbbb02 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Thu, 28 Sep 2017 00:15:41 +0300 Subject: [PATCH 234/577] no more need. now not used for AjaxSearch. --- index-ajax.php | 67 -------------------------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 index-ajax.php diff --git a/index-ajax.php b/index-ajax.php deleted file mode 100644 index 0a476e16c7..0000000000 --- a/index-ajax.php +++ /dev/null @@ -1,67 +0,0 @@ - Date: Thu, 28 Sep 2017 07:51:39 +0900 Subject: [PATCH 235/577] Fix - $modx->getTagsFromContent() test example [[$_GET['test']]] or [!$_GET['test']!] --- .../includes/document.parser.class.inc.php | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index d7f5ee164f..b8e348dd49 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1086,18 +1086,11 @@ function _getTagsFromContent($content, $left = '[+', $right = '+]') if (strpos($content, $left) === false) { return array(); } - if (strpos($content, ';}}') !== false) { - $content = str_replace(';}}', '', $content); - } - if (strpos($content, '{{}}') !== false) { - $content = str_replace('{{}}', '', $content); - } - if (strpos($content, ']]]]') !== false) { - $content = str_replace(']] ]]', '', $content); - } - if (strpos($content, ']]]') !== false) { - $content = str_replace('] ]]', '', $content); - } + $spacer = md5('<<>>'); + if($left==='{{' && strpos($content,';}}')!==false) $content = str_replace(';}}', sprintf(';}%s}', $spacer),$content); + if($left==='{{' && strpos($content,'{{}}')!==false) $content = str_replace('{{}}',sprintf('{%$1s{}%$1s}',$spacer),$content); + if($left==='[[' && strpos($content,']]]]')!==false) $content = str_replace(']]]]',sprintf(']]%s]]', $spacer),$content); + if($left==='[[' && strpos($content,']]]')!==false) $content = str_replace(']]]', sprintf(']%s]]', $spacer),$content); $pos[''] = strpos($content, ']]>'); @@ -1167,6 +1160,9 @@ function _getTagsFromContent($content, $left = '[+', $right = '+]') } } } + foreach($tags as $i=>$tag) { + if(strpos($tag,$spacer)!==false) $tags[$i] = str_replace($spacer, '', $tag); + } return $tags; } From 6a7aa707996bd44f14eaf5affdd139d048556e4a Mon Sep 17 00:00:00 2001 From: 64j <64j@mail.ru> Date: Thu, 28 Sep 2017 03:50:36 +0300 Subject: [PATCH 236/577] fixed modx.js fix open chunk or snippet from contextmenu --- manager/media/style/default/js/modx.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 5107fb6d7c..bbb42abd8d 100644 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -312,11 +312,13 @@ }, function(r) { if (r) { r = JSON.parse(r); - if (r.item.url) { - if (modx.config.global_tabs) { - r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'evo-tab-page-' + modx.urlToUid(w.location.hash) + '\'})}'; - } else { - r.item.onclick = 'if(event.shiftKey){modx.openWindow({url:\'' + r.item.url + '\'})}else{modx.popup({url:\'' + r.item.url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'main\'})}'; + for (var k in r) { + if (r.hasOwnProperty(k) && r[k].url) { + if (modx.config.global_tabs) { + r[k]['onclick'] = 'if(event.shiftKey){modx.openWindow({url:\'' + r[k].url + '\'})}else{modx.popup({url:\'' + r[k].url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'evo-tab-page-' + modx.urlToUid(w.location.hash) + '\'})}'; + } else { + r[k]['onclick'] = 'if(event.shiftKey){modx.openWindow({url:\'' + r[k].url + '\'})}else{modx.popup({url:\'' + r[k].url + '\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:1,position:\'center elements\',wrap:\'main\'})}'; + } } } r = JSON.stringify(r); @@ -1030,9 +1032,11 @@ if (dataJson[key].hasOwnProperty(k)) { if (k.substring(0, 2) === 'on') { var onEvent = dataJson[key][k]; - item.addEventListener(k.substring(2), function(event) { - eval(onEvent); - }, false); + item[k] = function(onEvent) { + return function(event) { + eval(onEvent) + } + }(onEvent) } else { item[k] = dataJson[key][k]; } From 88351909bb1ec91bc702ba2ff876979cb04e5966 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 20:51:59 +0200 Subject: [PATCH 237/577] updated buttons styles --- assets/plugins/qm/css/actionButtons.css | 179 +++++++++++------------ assets/plugins/qm/css/navButtons.css | 184 ++++++++++++------------ 2 files changed, 176 insertions(+), 187 deletions(-) diff --git a/assets/plugins/qm/css/actionButtons.css b/assets/plugins/qm/css/actionButtons.css index 351fdddac7..543ba5699a 100644 --- a/assets/plugins/qm/css/actionButtons.css +++ b/assets/plugins/qm/css/actionButtons.css @@ -1,95 +1,86 @@ -/* Action buttons based on MODxRE Theme */ - -#qmEditor ul -{ /* .actionButtons --> #qmEditor */ - margin: 0; - padding: 0px 10px 0px 0px; - list-style-type: none; -} - -#qmEditor li -{ - margin: 0 8px 0 0; - float: left; - height: 15px; - line-height: 15px; - padding: 0; - list-style-type: none; - height: auto; - width: auto; - background: none; - border: 0; - list-style-image:none; -} - -#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel -{ - font-size: 13px; - font-weight: 500; - text-shadow: none; - background: #fff; - filter: none; - color: #555; - border-width: 1px; - border-style: solid; - border-color: #E4E4E4; - border-radius: 3px !important; - /*box-shadow: 0 0 0 1px #E4E4E4;*/ - box-shadow: none; - transition: none; -} -#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel -{ - padding: 6px 10px; -} -.qm-tv a, .qm-save a, .qm-cancel a -{ - padding: 9px 10px; -} -#qmEditor .qmButton.qmClose -{ - padding: 3px 15px 6px 10px; - color: #dedede; - background-color: Transparent; - border:none; -} -#qmEditor .qmButton.qmClose:hover -{ - color: #fff; - background-color: Transparent; -} -#qmEditor .qmButton:hover, .qm-edit:hover, .qm-new:hover, .qm-tv:hover, .qm-save:hover, .qm-cancel:hover -{ - background: none; - filter: none; - background-color: #3697cd; - box-shadow: none; - border-color: #3697cd; - color: #FFF !important; - transition: none; - text-decoration: none; -} -a.colorbox.cboxElement:hover, .qm-cancel a:hover, .qm-save a:hover -{ - color: #FFF !important; -} -#qmEditor .qmButton:active -{ - background-color: #3189ba; - border-color: #3189ba; -} - -#qmEditor .qmButton.primary, .qm-save a -{ - color: #fff; - border-color: #32AB9A; - background-color: #32AB9A; - background-image: linear-gradient(#32AB9A, #00948E); -} -#qmEditor .qmButton.primary:hover, .qm-save a:hover -{ - background-color: #2b9385; - background-image: linear-gradient(#2b9385, #007571); - border-color: #2b9385; -} +/* Action buttons based on MODxRE Theme */ + +#qmEditor ul +{ /* .actionButtons --> #qmEditor */ + margin: 0; + padding: 0px 10px 0px 0px; + list-style-type: none; +} + +#qmEditor li +{ + margin: 0 8px 0 0; + float: left; + height: 13px; + line-height: 15px; + padding: 0; + list-style-type: none; + height: auto; + width: auto; + background: none; + border: 0; + list-style-image:none; +} + +#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel +{ + font-size: 12px; + font-weight: 500; + text-shadow: none; + background: #fff; + filter: none; + color: #555; + border-width: 1px; + border-style: solid; + border-color: #E4E4E4; + /*box-shadow: 0 0 0 1px #E4E4E4;*/ + box-shadow: none; + transition: none; +} +#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel +{ + padding: 4px 10px; +} +.qm-tv a, .qm-save a, .qm-cancel a +{ + padding: 9px 10px; +} +#qmEditor .qmButton.qmClose +{ + padding: 3px 15px 6px 10px; + color: #dedede; + background-color: Transparent; + border:none; +} +#qmEditor .qmButton.qmClose:hover +{ + color: #fff; + background-color: Transparent; +} +a.colorbox.cboxElement:hover, #qmEditor .qmButton:hover, .qm-edit:hover, .qm-new:hover, .qm-tv:hover, .qm-save:hover, .qm-cancel:hover +{ + background: none; + filter: none; + color: #292b2c; background-color: #e6e6e6; border-color: #adadad + transition: none; + text-decoration: none; +} + .qm-cancel a:hover, .qm-save a:hover +{ + color: #FFF !important; +} +#qmEditor .qmButton:active +{ + background-color: #3189ba; + border-color: #3189ba; +} + +#qmEditor .qmButton.primary, .qm-save a +{ + color: #fff; background-color: #0275d8; border-color: #0275d8 +} +#qmEditor .qmButton.primary:hover, .qm-save a:hover +{ + background-color: #025aa5; border-color: #01549b +} #qmEditor i.fa {font-size:24px;} \ No newline at end of file diff --git a/assets/plugins/qm/css/navButtons.css b/assets/plugins/qm/css/navButtons.css index 3f47981186..b923e7d229 100644 --- a/assets/plugins/qm/css/navButtons.css +++ b/assets/plugins/qm/css/navButtons.css @@ -1,94 +1,92 @@ -/* Action buttons based Manager nav */ - -#qmEditor ul -{ /* .actionButtons --> #qmEditor */ - margin: 0; - padding: 0px 10px 0px 0px; - list-style-type: none; -} - -#qmEditor li -{ - margin: 0 8px 0 0; - float: left; - height: 15px; - line-height: 15px; - padding: 0; - list-style-type: none; - height: auto; - width: auto; - background: none; - border: 0; - list-style-image:none; -} - -#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel -{ - font-size: 13px; - font-weight: 500; - text-shadow: none; - background: #fff; - filter: none; - border: 1px solid rgba(255, 255, 255, 0.6); - padding: 2px 7px; - border-radius: 3px; - margin: 0 2px; - background-color: rgba(255,255,255,.1); - color: #fff !important; - /*box-shadow: 0 0 0 1px #E4E4E4;*/ - box-shadow: none; - transition: none; -} -#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel -{ - padding: 6px 10px; -} -.qm-tv a, .qm-save a, .qm-cancel a -{ - padding: 9px 10px; -} -#qmEditor .qmButton.qmClose -{ - padding: 3px 10px 6px 10px; - color: #dedede!important; - background-color: Transparent; - border:none; -} -#qmEditor .qmButton.qmClose:hover -{ - color: #fff!important; - background-color: Transparent; -} -#qmEditor .qmButton:hover, .qm-edit:hover, .qm-new:hover, .qm-tv:hover, .qm-save:hover, .qm-cancel:hover -{ - text-decoration: none; - background-color: rgba(255,255,255,.3); -} -.qm-cancel a:hover, .qm-save a:hover -{ - color: #FFF !important; -} -a.colorbox.cboxElement{color:#FFF!important; background-color:rgba(57, 81, 93, 0.8);border-color: rgba(255, 255, 255, 0.8)} -a.colorbox.cboxElement:hover{color:#FFF!important; background-color:rgba(57, 81, 93,.4); border-color: rgba(255, 255, 255, 1)} - - -#qmEditor .qmButton:active -{ - background-color: #3189ba; - border-color: #3189ba; -} - -.qm-save a -{ - color: #fff; - border-color: #32AB9A; - background-color: #32AB9A; - background-image: linear-gradient(#32AB9A, #00948E); -} -.qm-save a:hover -{ - background-color: #2b9385; - background-image: linear-gradient(#2b9385, #007571); - border-color: #2b9385; -} +/* Action buttons based Manager nav */ +#qmEditor, #qmEditorClosed {padding:0!important; border: 0;} +#qmEditor ul +{ /* .actionButtons --> #qmEditor */ + margin: 0; + padding: 0px 10px 0px 0px; + list-style-type: none; +} + +#qmEditor li +{ + margin: 0 1px 0 0; + float: left; + height: 34px; + line-height: 30px; + padding: 4px 3px 4px 2px; + list-style-type: none; + width: auto; + background: none; + border: 0; + list-style-image:none; +} +#qmEditor li:hover {background-color: rgba(255,255,255,.1);} + + +#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel +{ + font-size: 13px; + font-weight: 500; + text-shadow: none; + background: transparent; + filter: none; + padding: 0px 3px; + margin: 0 1px; + color: #bbb !important; + /*box-shadow: 0 0 0 1px #E4E4E4;*/ + box-shadow: none; + transition: none; +} +#qmEditor .qmButton, .qm-edit, .qm-new, .qm-tv, .qm-save, .qm-cancel +{ + padding: 7px 9px; +} +.qm-tv a, .qm-save a, .qm-cancel a +{ + padding: 9px 10px; +} +#qmEditor .qmButton.qmClose +{ + padding: 3px 10px 6px 10px; + color: #dedede!important; + background-color: Transparent; + border:none; +} +#qmEditor .qmButton.qmClose:hover +{ + color: #fff!important; + background-color: Transparent; +} +#qmEditor .qmButton:hover, .qm-edit:hover, .qm-new:hover, .qm-tv:hover, .qm-save:hover, .qm-cancel:hover +{ + text-decoration: none; + color: #fff!important; +} +.qm-cancel a:hover, .qm-save a:hover +{ + color: #FFF !important; +} +a.colorbox.cboxElement{color:#FFF!important; background-color:rgba(57, 81, 93, 0.8);border-color: rgba(255, 255, 255, 0.8)} +a.colorbox.cboxElement:hover{color:#FFF!important; background-color:rgba(57, 81, 93,.4); border-color: rgba(255, 255, 255, 1)} + + +#qmEditor .qmButton:active +{ + background-color: #3189ba; + border-color: #3189ba; +} + +.qm-save a +{ + color: #fff; + border-color: #32AB9A; + background-color: #32AB9A; + background-image: linear-gradient(#32AB9A, #00948E); +} +.qm-save a:hover +{ + background-color: #2b9385; + background-image: linear-gradient(#2b9385, #007571); + border-color: #2b9385; +} #qmEditor i.fa {font-size:24px;} \ No newline at end of file From b34d3ea6bb2b544f19a2d42a614cd1f82d3768a6 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 20:53:00 +0200 Subject: [PATCH 238/577] updated toolbar styles for 1.5.9 --- assets/plugins/qm/css/style.css | 673 ++++++++++++++++---------------- 1 file changed, 337 insertions(+), 336 deletions(-) diff --git a/assets/plugins/qm/css/style.css b/assets/plugins/qm/css/style.css index 6d41bb2f1a..c5e5b2c789 100755 --- a/assets/plugins/qm/css/style.css +++ b/assets/plugins/qm/css/style.css @@ -1,336 +1,337 @@ -/* Edit buttons in content, e.g. for Ditto listings */ - -.qm-edit -{ - display: block; - float: right; - font-family: Arial, Helvetica, sans-serif; - font-size: 12px; - margin: 5px 0 5px 5px; - line-height: 1em; - padding: 0 !important; -} - -.qm-edit a -{ - display: block; - color: #3b454f; - text-decoration: none; - border: none; - line-height: 1em; - padding: 6px 6px; -} - - -/* New document buttons in content */ - -.qm-new, .qm-tv -{ - display: block; - float: right; - font-family: Arial, Helvetica, sans-serif; - font-size: 12px; - margin: 5px 0 5px 5px; - line-height: 1em; - padding: 0 !important; -} - -.qm-new a, .qm-tv a -{ - display: block; - color: #3b454f; - text-decoration: none; - border: none; - padding: 6px 6px; -} - - -/* TV edit form */ - -#qm-tv-body -{ - font-family: Arial, Helvetica, sans-serif; - color: #111; - font-size: 1em; -} - -#qm-tv-tv -{ - font-size: 80%; -} - -.qm-save, .qm-cancel -{ - display: block; - float: right; - font-family: Arial, Helvetica, sans-serif; - font-size: 12px; - margin: 5px 0 5px 5px; - line-height: 1em; - padding: 0 !important; -} - -.qm-save a, .qm-cancel a -{ - display: block; - color: #3b454f; - text-decoration: none; - border: none; - padding: 6px 6px; -} - - -.qm-save -{ - margin-right: 5px; -} - -.qm-cancel -{ - margin-right: 20px; -} -.qm-save, .qm-cancel -{ - font-size: 13px; - font-weight: 500; - text-shadow: none; - background: #fff; - filter: none; - color: #555; - border-width: 1px; - border-style: solid; - border-color: #E4E4E4; - border-radius: 3px !important; - /*box-shadow: 0 0 0 1px #E4E4E4;*/ - box-shadow: none; - transition: none; -} -.qm-save:hover, .qm-cancel:hover -{ - background: none; - filter: none; - background-color: #3697cd; - box-shadow: none; - border-color: #3697cd; - color: #FFF !important; - transition: none; - text-decoration: none; -} -.qm-cancel a:hover, .qm-save a:hover -{ - color: #FFF !important; -} -.qm-save a -{ - color: #fff; - border-color: #32AB9A; - background-color: #32AB9A; - background-image: linear-gradient(#32AB9A, #00948E); -} -.qm-save a:hover -{ - background-color: #2b9385; - background-image: linear-gradient(#2b9385, #007571); - border-color: #2b9385; -} -#qm-tv-actions -{ - position: fixed; - top: 10px; - right: 0; - z-index: 100; - margin: 0; - text-align: right; -} - -#qm-tv-body h1 -{ - font-size: 120%; - letter-spacing: 1px; - color: #333333; - font-weight: normal; - margin-bottom: 20px; -} - -#qm-tv-description -{ - margin-bottom: 20px; - font-size: 80%; -} - -.qm-tv-text input, .qm-tv-textarea textarea, .qm-tv-image input[type=text], .qm-tv-file input[type=text] -{ - border: 1px solid #ddd; - border-left-color: #c3c3c3; - border-top-color: #7c7c7c; - padding: 4px 4px 4px 4px; - background: #fff url(images/input-bg.gif) repeat-x top left; -} - -.qm-tv-text input -{ - width: 400px !important; -} - -.qm-tv-textarea textarea -{ - width: 400px !important; - height: 200px; - font-family: monospace; -} - -.qm-tv-image input[type=text] -{ - width: 400px !important; -} - -#qm-tv-image-preview -{ - margin-top: 15px; -} - -#qm-tv-image-preview img -{ - max-width: 200px; - max-height: 200px; -} - - -/* Toolbar */ - -*:focus, *:active -{ - outline: none !important; -} - -#qmEditor, #qmEditorClosed -{ - position: fixed; - font-family: Arial, Helvetica, sans-serif !important; - line-height: 1; - z-index: 2147483647; - height: 40px; - box-sizing: border-box; - padding: 5px 0 0 10px; - color: #fff; - background: none; - background-color: #39515D !important; - background-image: -webkit-linear-gradient(left, #3f4850 0%, #365462 46%, #3e5554 60%, #42554d 68%, #573d4e 100%) !important; - background-image: -o-linear-gradient(left, #3f4850 0%, #365462 46%, #3e5554 60%, #42554d 68%, #573d4e 100%) !important; - background-image: linear-gradient(to right, #3f4850 0%, #365462 46%, #3e5554 60%, #42554d 68%, #573d4e 100%) !important; - text-align: left; - opacity:0.7; - ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - filter: alpha(opacity=70); - -webkit-transition-duration: 0.7s; - -moz-transition-duration: 0.7s; - transition-duration: 0.7s; - text-shadow: none; -} - - -#qmEditor > li -{ - line-height: 30px; -} - - -#qmEditor *:focus, #qmEditor *:active -{ - outline: none !important; -} - -#qmEditor img -{ - border: 0; -} - -#qmEditor a -{ - display: block; - width: auto; - height: auto; - margin: 0; - padding: 0; - line-height: normal; - border: 0; - text-decoration: none; -} - -#qmEditor .qmId { - font-size: 18px; - line-height: 30px; - color: #fff; - font-weight: normal; -} -#qmEditor .qmButton span -{ - -} - -#qmEditorClosed -{ - height: 40px!important; - display: none; - width: 40px !important; - cursor: pointer !important; - margin-right: 20px!important; -} -#qmEditorClosed:after -{ - display:block; - float:left; - font-family: FontAwesome; - content: "\f0a9"; - color: #dedede; - font-size:22px; - margin-top: 3px; -} -div#qmEditorClosed:hover:after -{ - color: #fff; -} -#qmClose -{ - display: block; - float: right !important; - margin-right: -2px !important; -} - -a#qmLogoClose -{ - display: block; - float: left; - height: 30px !important; - width: 30px !important; - text-decoration: none !important; - border: 0 !important; -} -a#qmLogoClose:after -{ - display:block; - font-family: FontAwesome; - content: "\f0a8"; - color: #dedede; - font-size:22px; - margin-top: 3px; -} -a:hover#qmLogoClose:after -{ - color: #FFF; -} -#qmEditor:hover, #qmEditorClosed:hover -{ - opacity:1; - -ms-filter:"" !important; - filter:none !important; -/* top: 0px;*/ - -webkit-transition-duration: 0.2s; - -moz-transition-duration: 0.2s; - transition-duration: 0.2s; -} - - - - - +/* Edit buttons in content, e.g. for Ditto listings */ + +.qm-edit +{ + display: block; + float: right; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + margin: 5px 0 5px 5px; + line-height: 1em; + padding: 0 !important; +} + +.qm-edit a +{ + display: block; + color: #3b454f; + text-decoration: none; + border: none; + line-height: 1em; + padding: 6px 6px; +} + + +/* New document buttons in content */ + +.qm-new, .qm-tv +{ + display: block; + float: right; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + margin: 5px 0 5px 5px; + line-height: 1em; + padding: 0 !important; +} + +.qm-new a, .qm-tv a +{ + display: block; + color: #3b454f; + text-decoration: none; + border: none; + padding: 6px 6px; +} + + +/* TV edit form */ + +#qm-tv-body +{ + font-family: Arial, Helvetica, sans-serif; + color: #111; + font-size: 1em; +} + +#qm-tv-tv +{ + font-size: 80%; +} + +.qm-save, .qm-cancel +{ + display: block; + float: right; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + margin: 5px 0 5px 5px; + line-height: 1em; + padding: 0 !important; +} + +.qm-save a, .qm-cancel a +{ + display: block; + color: #3b454f; + text-decoration: none; + border: none; + padding: 6px 6px; +} + + +.qm-save +{ + margin-right: 5px; +} + +.qm-cancel +{ + margin-right: 20px; +} +.qm-save, .qm-cancel +{ + font-size: 13px; + font-weight: 500; + text-shadow: none; + background: #fff; + filter: none; + color: #555; + border-width: 1px; + border-style: solid; + border-color: #E4E4E4; + border-radius: 3px !important; + /*box-shadow: 0 0 0 1px #E4E4E4;*/ + box-shadow: none; + transition: none; +} +.qm-save:hover, .qm-cancel:hover +{ + background: none; + filter: none; + background-color: #3697cd; + box-shadow: none; + border-color: #3697cd; + color: #FFF !important; + transition: none; + text-decoration: none; +} +.qm-cancel a:hover, .qm-save a:hover +{ + color: #FFF !important; +} +.qm-save a +{ + color: #fff; + border-color: #32AB9A; + background-color: #32AB9A; + background-image: linear-gradient(#32AB9A, #00948E); +} +.qm-save a:hover +{ + background-color: #2b9385; + background-image: linear-gradient(#2b9385, #007571); + border-color: #2b9385; +} +#qm-tv-actions +{ + position: fixed; + top: 10px; + right: 0; + z-index: 100; + margin: 0; + text-align: right; +} + +#qm-tv-body h1 +{ + font-size: 120%; + letter-spacing: 1px; + color: #333333; + font-weight: normal; + margin-bottom: 20px; +} + +#qm-tv-description +{ + margin-bottom: 20px; + font-size: 80%; +} + +.qm-tv-text input, .qm-tv-textarea textarea, .qm-tv-image input[type=text], .qm-tv-file input[type=text] +{ + border: 1px solid #ddd; + border-left-color: #c3c3c3; + border-top-color: #7c7c7c; + padding: 4px 4px 4px 4px; + background: #fff url(images/input-bg.gif) repeat-x top left; +} + +.qm-tv-text input +{ + width: 400px !important; +} + +.qm-tv-textarea textarea +{ + width: 400px !important; + height: 200px; + font-family: monospace; +} + +.qm-tv-image input[type=text] +{ + width: 400px !important; +} + +#qm-tv-image-preview +{ + margin-top: 15px; +} + +#qm-tv-image-preview img +{ + max-width: 200px; + max-height: 200px; +} + + +/* Toolbar */ + +*:focus, *:active +{ + outline: none !important; +} + +#qmEditor, #qmEditorClosed +{ + position: fixed; + font-family: Arial, Helvetica, sans-serif !important; + line-height: 1; + z-index: 2147483647; + height: 35px; + box-sizing: border-box; + padding: 5px 0 0 10px; + color: #fff; + border:0; + background-color: #1d2023; color: #8b9298; -webkit-box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); + text-align: left; + opacity:0.7; + ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + -webkit-transition-duration: 0.7s; + -moz-transition-duration: 0.7s; + transition-duration: 0.7s; + text-shadow: none; +} + + +#qmEditor > li +{ + line-height: 30px; +} + + +#qmEditor *:focus, #qmEditor *:active +{ + outline: none !important; +} + +#qmEditor img +{ + border: 0; +} + +#qmEditor a +{ + display: block; + width: auto; + height: auto; + margin: 0; + padding: 0; + line-height: normal; + border: 0; + text-decoration: none; +} + +#qmEditor .qmId { + font-size: 16px; + line-height: 28px; + color: #bbb; + font-weight: normal; +} +#qmEditor .qmButton span +{ + +} + +#qmEditorClosed +{ + display: none; + height: 34px !important; + width:50px !important; + cursor: pointer !important; +} +#qmEditorClosed:after +{ + display:block; + float:left; + font-family: FontAwesome; + content: "\f142"; + color: #dedede; + font-size:16px; + margin: 9px 0 0 28px; +} +div#qmEditorClosed:hover:after +{ + color: #fff; +} +#qmClose +{ + display: block; + float: right !important; + margin-right: -2px !important; +} + +a#qmLogoClose +{ + display: block; + float: left; + font-size:12px; + height: 34px !important; + width:44px !important; + text-decoration: none !important; + border: 0 !important; +} +a#qmLogoClose:after +{ + display:block; + font-family: FontAwesome; + content: "\f0c9 "; + color: #bbb; + font-size:16px; + margin: 5px 0 0 20px; +} +a:hover#qmLogoClose:after +{ + color: #FFF; + background-color:transparent; +} +#qmEditor:hover, #qmEditorClosed:hover +{ + opacity:1; + -ms-filter:"" !important; + filter:none !important; +/* top: 0px;*/ + -webkit-transition-duration: 0.2s; + -moz-transition-duration: 0.2s; + transition-duration: 0.2s; +} +i.butticon {display:inline-block; + margin:-1px 2px 0 0; + vertical-align:top; + height:14px; +font-size: 16px!important; +} + + From d6c9612a975aceb84f4219bf79814695375291ca Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 20:53:45 +0200 Subject: [PATCH 239/577] 1.5.9 restyled toolbar --- assets/plugins/qm/qm.inc.php | 2598 +++++++++++++++++----------------- 1 file changed, 1294 insertions(+), 1304 deletions(-) diff --git a/assets/plugins/qm/qm.inc.php b/assets/plugins/qm/qm.inc.php index dd276f9a46..c485782d1a 100755 --- a/assets/plugins/qm/qm.inc.php +++ b/assets/plugins/qm/qm.inc.php @@ -1,1304 +1,1294 @@ -modx = $modx; - - // Get plugin parameters - $this->jqpath = $jqpath; - $this->loadmanagerjq = $loadmanagerjq; - $this->loadfrontendjq = $loadfrontendjq; - $this->noconflictjq = $noconflictjq; - $this->loadfa = $loadfa; - $this->loadtb = $loadtb; - $this->tbwidth = $tbwidth; - $this->tbheight = $tbheight; - $this->usemm = null; - $this->hidefields = $hidefields; - $this->hidetabs = $hidetabs; - $this->hidesections = $hidesections; - $this->addbutton = $addbutton; - $this->tpltype = $tpltype; - $this->tplid = $tplid; - $this->custombutton = $custombutton; - $this->managerbutton = $managerbutton; - $this->logout = $logout; - $this->autohide = $autohide; - $this->position = $position; - $this->editbuttons = $editbuttons; - $this->editbclass = $editbclass; - $this->newbuttons = $newbuttons; - $this->newbclass = $newbclass; - $this->tvbuttons = $tvbuttons; - $this->tvbclass = $tvbclass; - $this->buttonStyle = $buttonStyle; - $this->removeBg = $removeBg; - - // Includes - include_once($this->modx->config['base_path'].'assets/plugins/qm/mcc.class.php'); - - // Run plugin - $this->Run(); - } - - //_______________________________________________________ - function Run() { - - // Include MODX manager language file - global $_lang; - - // Get manager language - $manager_language = $this->modx->config['manager_language']; - - // Individual user language setting (if set) - if (isset($_SESSION['mgrUsrConfigSet']['manager_language'])) $manager_language = $_SESSION['mgrUsrConfigSet']['manager_language']; - - // Include_once the language file - if(!isset($manager_language) || !file_exists(MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php")) { - $manager_language = "english"; // if not set, get the english language file. - } - // Include default language - include_once MODX_MANAGER_PATH."includes/lang/english.inc.php"; - - // Include user language - if($manager_language!="english" && file_exists(MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php")) { - include_once MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php"; - } - - // Get event - $e = &$this->modx->Event; - - // Run plugin based on event - switch ($e->name) { - - // Save document - case 'OnDocFormSave': - - // Saving process for Qm only - if(intval($_REQUEST['quickmanager']) == 1) { - - $id = $e->params['id']; - $key = $id; - - // Normal saving document procedure stops to redirect => Before redirecting secure documents and clear cache - - // Secure web documents - flag as private (code from: processors/save_content.processor.php) - include $this->modx->config['site_manager_path']."includes/secure_web_documents.inc.php"; - secureWebDocument($key); - - // Secure manager documents - flag as private (code from: processors/save_content.processor.php) - include $this->modx->config['site_manager_path']."includes/secure_mgr_documents.inc.php"; - secureMgrDocument($key); - - // Clear cache - $this->modx->clearCache('full'); - - // Different doc to be refreshed than the one we are editing? - if (isset($_POST['qmrefresh'])) { - $id = intval($_POST['qmrefresh']); - } - - // Redirect to clearer page which refreshes parent window and closes modal box frame - if ($this->modx->config['friendly_urls'] == 1){ - $this->modx->sendRedirect($this->modx->makeUrl($id).'?quickmanagerclose=1', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); - }else{ - $this->modx->sendRedirect($this->modx->makeUrl($id).'&quickmanagerclose=1', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); - } - - } - - break; - - // Display page in front-end - case 'OnWebPagePrerender': - - // Get document id - $docID = $this->modx->documentIdentifier; - - // Get page output - $output = &$this->modx->documentOutput; - - // Close modal box after saving (previously close.php) - if (isset($_GET['quickmanagerclose'])) { - - // Set url to refresh - $url = $this->modx->makeUrl($docID, '', '', 'full'); - - $output = ' - - - - - - - - - -'; - break; - } - - // QM+ TV edit - if(intval($_GET['quickmanagertv'] == 1) && $_GET['tvname'] != '' && $this->tvbuttons == 'true') { - - $tvName = ''; - $locked = FALSE; - $access = FALSE; - $save = 0; - $imagePreview = ''; - - // Includes - include_once(MODX_MANAGER_PATH.'includes/tmplvars.inc.php'); - include_once(MODX_MANAGER_PATH.'includes/tmplvars.commands.inc.php'); - include_once(MODX_MANAGER_PATH.'includes/tmplvars.format.inc.php'); - - // Get save status - if (isset($_POST['save'])) $save = intval($_POST['save']); - - // Get TV name - if (preg_match('/^([^\\"\'\(\)<>!?]+)/i', $_GET['tvname'])) $tvName = $_GET['tvname']; - - // Get TV array - $tv = $this->modx->getTemplateVar($tvName, '*', $docID); - - // Handle default TVs - switch ($tvName) { - case 'pagetitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; - case 'longtitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; - case 'description' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; - case 'content' : $tv['type'] = 'richtext'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; - case 'menutitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; - case 'introtext' : $tv['type'] = 'textarea'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; - } - - // Check TV access - if (!$access) { $access = $this->checkTvAccess($tv['id']); } - - // User can access TV - if ($access) { - - // Show TV form - if ($save == 0) { - - // Check is document locked? Someone else is editing the document... //$_lang['lock_msg'] - if ($this->checkLocked()) $locked = TRUE; - - // Set document locked - else $this->setLocked(1); - - // Handle RTE - if($tv['type'] == 'richtext') { - // Invoke OnRichTextEditorInit event - $eventOutput = $this->modx->invokeEvent("OnRichTextEditorInit", array('editor'=>$this->modx->config['which_editor'], 'elements'=>array('tv'.$tvName))); - - if(is_array($eventOutput)) { - $editorHtml = implode("",$eventOutput); - } - } - - // Render TV html - $tvHtml = renderFormElement($tv['type'], $tv['name'], $tv['default_text'], $tv['elements'], $tv['value']); - - // Get jQuery conflict mode - if ($this->noconflictjq == 'true') $jq_mode = '$j'; - else $jq_mode = '$'; - } - - // Save TV - else { - // Remove document locked - $this->setLocked(0); - - // Save TV - $this->saveTv($tvName); - } - - // Page output: header - $output = ' - - - - - - - - - - '; - - // Page output: TV form - if ($save == 0) { - $output .= ' - - '; - - // Document is locked message - if ($locked) { - $output .= ' -

          '.$_lang['locked'].'

          -
          '.$_lang['lock_msg'].'
          - '; - } - - // Normal form - else { - // Image preview - if ($tv['type'] == 'image') { - $imagePreview = ' -
          - - '; - } - $amp = ($this->modx->config['friendly_urls'] == 1) ? '?' : '&'; - $output .= ' -
          - - - - - -

          '.$tv['caption'].'

          - -
          '.$tv['description'].'
          - -
          - '.$tvHtml.' -
          - - '.$imagePreview.' - -
          - '.$editorHtml.' - '; - } - } - - // Page output: close modal box and refresh parent frame - else $output .= ''; - - // Page output: footer - $output .= ' - - - '; - } - - else { - $output = 'Error: Access denied.'; - } - } - - // QM+ with toolbar - else { - - if(isset($_SESSION['mgrValidated']) && $_REQUEST['z'] != 'manprev') { - - // If logout break here - if(isset($_REQUEST['logout'])) { - $this->Logout(); - break; - } - - $userID = $_SESSION['mgrInternalKey']; - - // Add ID - $controls .= '
        • ID: '.$docID.'
        • '; - - // Edit button - - $editButton = ' -
        • - '.$_lang['edit_resource'].' -
        • - '; - - // Check if user has manager access to current document - $access = $this->checkAccess(); - - // Does user have permissions to edit document - if($access) $controls .= $editButton; - - if ($this->addbutton == 'true' && $access) { - // Add button - $addButton = ' -
        • - '.$_lang['create_resource_here'].' -
        • - '; - - // Does user have permissions to add document - if($this->modx->hasPermission('new_document')) $controls .= $addButton; - } - - // Custom add buttons if not empty and enough permissions - if ($this->custombutton != '') { - - // Replace [*id*] with current doc id - $this->custombutton = str_replace("[*id*]", $docID, $this->custombutton); - - // Handle [~id~] links - $this->custombutton = $this->modx->rewriteUrls($this->custombutton); - - $buttons = explode("||", $this->custombutton); // Buttons are divided by "||" - - // Custom buttons class index - $i = 0; - - // Parse buttons - foreach($buttons as $key => $field) { - $i++; - - $field = substr($field, 1, -1); // Trim "'" from beginning and from end - $buttonParams = explode("','", $field); // Button params are divided by "','" - - $buttonTitle = $buttonParams[0]; - $buttonAction = $buttonParams[1]; // Contains URL if this is not add button - $buttonParentId = $buttonParams[2]; // Is empty is this is not add button - $buttonTplId = $buttonParams[3]; - - // Button visible for all - if ($buttonParams[4] == '') { - $showButton = TRUE; - } - // Button is visible for specific user roles - else { - $showButton = FALSE; - - // Get user roles the button is visible for - $buttonRoles = explode(",", $buttonParams[4]); // Roles are divided by ',' - - // Check if user role is found - foreach($buttonRoles as $key => $field) { - if ($field == $_SESSION['mgrRole']) { - $showButton = TRUE; - } - } - } - $buttonIcon = $buttonParams[5]; - // Show custom button - if ($showButton) { - switch ($buttonAction) - { - case 'new': - $customButton = ' -
        • - '.$buttonTitle.' -
        • - '; - break; - - case 'link': - $customButton = ' -
        • - '.$buttonTitle.' -
        • - '; - break; - - case 'modal': - $customButton = ' -
        • - '.$buttonTitle.' -
        • - '; - break; - } - $controls .= $customButton; - } - } - } - - // Go to Manager button - if ($this->managerbutton == 'true') { - $managerButton = ' -
        • - '.$_lang['manager'].' -
        • - '; - $controls .= $managerButton; - } - - // Logout button - $logout = $this->modx->config['site_manager_url'].'index.php?a=8&quickmanager=logout&logoutid='.$docID; - $logoutButton = ' -
        • - '.$_lang['logout'].' -
        • - '; - $controls .= $logoutButton; - - // Add action buttons - $editor = ' -
          - -
          - -
            -
          • -
          • - '.$controls.' -
          -
          '; - - $MGR_DIR = $this->modx->getManagerPath( ); - $css = ' - '; - - $css .= ' - - '; - - // font-awesome - if ($this->loadfa == 'true') { - $css .= ' - - '; - } - // Buttons Styles - if ($this->buttonStyle == 'actionButtons') { - $css .= ' - - '; - } - else - if ($this->buttonStyle == 'navButtons') { - $css .= ' - - '; - } - // Top toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'top')) { - $css .= ' - - '; - } - else - // Top toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'top')) { - $css .= ' - - '; - } - else - // Top toolbar Relative - if ($this->position == 'before') { - $css .= ' - - '; - } - else - // Bottom toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'bottom')) { - $css .= ' - - '; - } - else - // Bottom toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'bottom')) { - $css .= ' - - '; - } - // Left toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'left')) { - $css .= ' - - '; - } - else - // Left toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'left')) { - $css .= ' - - '; - } - // Right toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'right')) { - $css .= ' - - '; - } - else - // Right toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'right')) { - $css .= ' - - '; - } - // Remove background - if (($this->removeBg == 'yes') && ($this->buttonStyle == 'actionButtons')) { - $css .= ' - - '; - } - else - if (($this->removeBg == 'yes') && ($this->buttonStyle == 'navButtons')) { - $css .= ' - - '; - } - // Insert jQuery and ColorBox in head if needed - $head = ''; - if ($this->loadfrontendjq == 'true') $head .= ''; - if ($this->loadtb == 'true') { - $head .= ' - - - - - - '; - } - - // Insert ColorBox jQuery definitions for QuickManager+ - $head .= ' - - '; - - $head .= " - - "; - - // Insert QM+ css in head - $head .= $css; - - // Place QM+ head information in head, just before tag - $output = preg_replace('~()~i', $head . '\1', $output); - - // Insert editor toolbar right after tag - $output = preg_replace('~(]*>)~i', '\1' . $editor, $output); - - // Search and create edit buttons in to the content - if ($this->editbuttons == 'true' && $access) { - $output = preg_replace('//', '$2', $output); - } - - // Search and create new document buttons in to the content - if ($this->newbuttons == 'true' && $access) { - $output = preg_replace('//', '$3', $output); - } - - // Search and create new document buttons in to the content - if ($this->tvbuttons == 'true' && $access) { - // Set and get user doc groups for TV permissions - $this->docGroup = ''; - $mrgDocGroups = $_SESSION['mgrDocgroups']; - if (!empty($mrgDocGroups)) $this->docGroup = implode(",", $mrgDocGroups); - - // Create TV buttons and check TV permissions - $output = preg_replace_callback('//', array(&$this, 'createTvButtons'), $output); - } - } - } - - break; - - // Edit document in ThickBox frame (MODX manager frame) - case 'OnDocFormPrerender': - - // If there is Qm call, add control buttons and modify to edit document page - if (intval($_REQUEST['quickmanager']) == 1) { - - global $content, $_style; - - // Set template for new document, action = 4 - if(intval($_GET['a']) == 4) { - - // Custom add button - if (isset($_GET['customaddtplid'])) { - // Set template - $content['template'] = intval($_GET['customaddtplid']); - } - - // Normal add button - else { - switch ($this->tpltype) { - // Template type is parent - case 'parent': - // Get parent document id - $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); - - // Get parent document - $parent = $this->modx->getDocument($pid); - - // Set parent template - $content['template'] = $parent['template']; - - break; - - // Template is specific id - case 'id': - $content['template'] = $this->tplid; - - break; - - // Template is inherited by Inherit Selected Template plugin - case 'selected': // Template is inherited by Inherit Selected Template plugin - case 'sibling': - // Get parent document id - $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); - - if ($this->modx->config['auto_template_logic'] === 'sibling') { - // Eoler: template_autologic in Evolution 1.0.5+ - // http://tracker.modx.com/issues/9586 - $tv = array(); - $sibl = $this->modx->getDocumentChildren($pid, 1, 0, 'template', '', 'menuindex', 'ASC', 1); - if(empty($sibl)) { - $sibl = $this->modx->getDocumentChildren($pid, 0, 0, 'template', '', 'menuindex', 'ASC', 1); - } - if(!empty($sibl)) { - $tv['value'] = $sibl[0]['template']; - } - else $tv['value'] = ''; // Added by yama - } - else - { - // Get "inheritTpl" TV - $tv = $this->modx->getTemplateVar('inheritTpl', '', $pid); - } - - // Set template to inherit - if ($tv['value'] != '') $content['template'] = $tv['value']; - else $content['template'] = $this->modx->config['default_template']; - break; - } - } - } - - // Manager control class - $mc = new Mcc(); - - // Hide default manager action buttons - $mc->addLine('$("#actions").hide();'); - - - // Get doc id - $doc_id = intval($_REQUEST['id']); - - // Get jQuery conflict mode - if ($this->noconflictjq == 'true') $jq_mode = '$j'; - else $jq_mode = '$'; - - // Add action buttons - $url = $this->modx->makeUrl($doc_id,'','','full'); - $mc->addLine('var controls = "";'); - - // Modify head - $mc->head = ''; - if ($this->loadmanagerjq == 'true') $mc->head .= ''; - - // Add control button - $mc->addLine('$("body").prepend(controls);'); - - // Hide fields to from front-end editors - if ($this->hidefields != '') { - $hideFields = explode(",", $this->hidefields); - - foreach($hideFields as $key => $field) { - $mc->hideField($field); - } - } - - // Hide tabs to from front-end editors - if ($this->hidetabs != '') { - $hideTabs = explode(",", $this->hidetabs); - - foreach($hideTabs as $key => $field) { - $mc->hideTab($field); - } - } - - // Hide sections from front-end editors - if ($this->hidesections != '') { - $hideSections = explode(",", $this->hidesections); - - foreach($hideSections as $key => $field) { - $mc->hideSection($field); - } - } - - // Hidden field to verify that QM+ call exists - $hiddenFields = ''; - - // Different doc to be refreshed? - if (isset($_REQUEST['qmrefresh'])) { - $hiddenFields .= ''; - } - - // Output - $e->output($mc->Output().$hiddenFields); - } - - break; - - // Where to logout - case 'OnManagerLogout': - // Only if cancel editing the document and QuickManager is in use - if ($_REQUEST['quickmanager'] == 'logout') { - // Redirect to document id - if ($this->logout != 'manager') { - $this->modx->sendRedirect($this->modx->makeUrl($_REQUEST['logoutid']), 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); - } - } - - break; - } - } - - // Check if user has manager access permissions to current document - //_______________________________________________________ - function checkAccess() { - $access = FALSE; - - // If user is admin (role = 1) - if ($_SESSION['mgrRole'] == 1) $access = TRUE; - - else { - $docID = $this->modx->documentIdentifier; - - // Database table - $table= $this->modx->getFullTableName("document_groups"); - - // Check if current document is assigned to one or more doc groups - $result = $this->modx->db->select('count(id)', $table, "document='{$docID}'"); - $rowCount= $this->modx->db->getValue($result); - - // If document is assigned to one or more doc groups, check access - if ($rowCount >= 1) { - - // Get document groups for current user - $mrgDocGroups = $_SESSION['mgrDocgroups']; - if (!empty($mrgDocGroups)) { - $docGroup = implode(",", $mrgDocGroups); - - // Check if user has access to current document - $result = $this->modx->db->select('count(id)', $table, "document = '{$docID}' AND document_group IN ({$docGroup})"); - $rowCount = $this->modx->db->getValue($result); - - if ($rowCount >= 1) $access = TRUE; - } - - else $access = FALSE; - } - - else $access = TRUE; - } - - return $access; - } - - // Function from: processors/cache_sync.class.processor.php - //_____________________________________________________ - function getParents($id, $path = '') { // modx:returns child's parent - if(empty($this->aliases)) { - $qh = $this->modx->db->select("id, IF(alias='', id, alias) AS alias, parent", $this->modx->getFullTableName('site_content')); - while ($row = $this->modx->db->getRow($qh)) { - $this->aliases[$row['id']] = $row['alias']; - $this->parents[$row['id']] = $row['parent']; - } - } - if (isset($this->aliases[$id])) { - $path = $this->aliases[$id] . ($path != '' ? '/' : '') . $path; - return $this->getParents($this->parents[$id], $path); - } - return $path; - } - - // Create TV buttons if user has permissions to TV - //_____________________________________________________ - function createTvButtons($matches) { - - $access = FALSE; - $table = $this->modx->getFullTableName('site_tmplvar_access'); - $docID = $this->modx->documentIdentifier; - - // Get TV caption for button title - $tv = $this->modx->getTemplateVar($matches[1]); - $caption = $tv['caption']; - - // If caption is empty this must be a "build-in-tv-field" like pagetitle etc. - if ($caption == '') { - - // Allowed for all - $access = TRUE; - - // Resolve caption - $caption = $this->getDefaultTvCaption($matches[1]); - } - - // Check TV access - else { - $access = $this->checkTvAccess($tv['id']); - } - - // Return TV button link if access - if ($access && $caption != '') { - $amp = ($this->modx->config['friendly_urls'] == 1) ? '?' : '&'; - return ''.$caption.''; - } - } - - // Check user access to TV - //_____________________________________________________ - function checkTvAccess($tvId) { - $access = FALSE; - $table = $this->modx->getFullTableName('site_tmplvar_access'); - - // If user is admin (role = 1) - if ($_SESSION['mgrRole'] == 1 && !$access) { $access = TRUE; } - - // Check permission to TV, is TV in document group? - if (!$access) { - $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}'"); - $rowCount = $this->modx->db->getValue($result); - // TV is not in any document group - if ($rowCount == 0) { $access = TRUE; } - } - - // Check permission to TV, TV is in document group - if (!$access && $this->docGroup != '') { - $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}' AND documentgroup IN ({$this->docGroup})"); - $rowCount = $this->modx->db->getValue($result); - if ($rowCount >= 1) { $access = TRUE; } - } - - return $access; - } - - // Get default TV ("build-in" TVs) captions - //_____________________________________________________ - function getDefaultTvCaption($name) { - - global $_lang; - $caption = ''; - - switch ($name) { - case 'pagetitle' : $caption = $_lang['resource_title']; break; - case 'longtitle' : $caption = $_lang['long_title']; break; - case 'description' : $caption = $_lang['resource_description']; break; - case 'content' : $caption = $_lang['resource_content']; break; - case 'menutitle' : $caption = $_lang['resource_opt_menu_title']; break; - case 'introtext' : $caption = $_lang['resource_summary']; break; - } - - return $caption; - } - - // Check that a document isn't locked for editing - //_____________________________________________________ - function checkLocked() { - - $pageId = $this->modx->documentIdentifier; - $locked = TRUE; - - if ($this->modx->elementIsLocked(7, $pageId) === NULL) { - $locked = FALSE; - } - - return $locked; - } - - // Set document locked on/off - //_____________________________________________________ - function setLocked($locked) { - - $pageId = $this->modx->documentIdentifier; - - // Set document locked - if ($locked == 1) { - $this->modx->lockElement(7, $pageId); - } - - // Set document unlocked - else { - $this->modx->unlockElement(7, $pageId); - } - } - - // Save TV - //_____________________________________________________ - function saveTv($tvName) { - - $tmplvarContentValuesTable = $this->modx->getFullTableName('site_tmplvar_contentvalues'); - $siteContentTable = $this->modx->getFullTableName('site_content'); - $pageId = $this->modx->documentIdentifier; - $result = null; - $time = time(); - $user = $_SESSION['mgrInternalKey']; - $tvId = isset($_POST['tvid']) ? intval($_POST['tvid']) : ''; - $tvContent = isset($_POST['tv'.$tvName]) ? $_POST['tv'.$tvName] : ''; - $tvContentTemp = ''; - - // Escape TV content - $tvContent = $this->modx->db->escape($tvContent); - - // Invoke OnBeforeDocFormSave event - $this->modx->invokeEvent('OnBeforeDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); - - // Handle checkboxes and other arrays, TV to be saved must be e.g. value1||value2||value3 - if (is_array($tvContent)) { - $tvContent = implode("||", $tvContent); - } - - // Save TV - if ($tvId != '') { - $fields = array( - 'tmplvarid' => $tvId, - 'contentid' => $pageId, - 'value' => $tvContent, - ); - $result = $this->modx->db->select('count(id)', $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); - - // TV exists, update TV - if($this->modx->db->getValue($result)) { - $this->modx->db->update($fields, $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); - } - - // TV does not exist, create new TV - else { - $this->modx->db->insert($fields, $tmplvarContentValuesTable); - } - - // Page edited by - $this->modx->db->update( - array( - 'editedon' => $time, - 'editedby' => $user - ), $siteContentTable, "id = '{$pageId}'"); - } - - // Save default field, e.g. pagetitle - else { - $this->modx->db->update( - array( - $tvName => $tvContent, - 'editedon' => $time, - 'editedby' => $user - ), $siteContentTable, "id = '{$pageId}'"); - } - - // Invoke OnDocFormSave event - $this->modx->invokeEvent('OnDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); - - // Clear cache - $this->modx->clearCache('full'); - } - -} -} +modx = $modx; + + // Get plugin parameters + $this->jqpath = $jqpath; + $this->loadmanagerjq = $loadmanagerjq; + $this->loadfrontendjq = $loadfrontendjq; + $this->noconflictjq = $noconflictjq; + $this->loadfa = $loadfa; + $this->loadtb = $loadtb; + $this->tbwidth = $tbwidth; + $this->tbheight = $tbheight; + $this->usemm = null; + $this->hidefields = $hidefields; + $this->hidetabs = $hidetabs; + $this->hidesections = $hidesections; + $this->addbutton = $addbutton; + $this->tpltype = $tpltype; + $this->tplid = $tplid; + $this->custombutton = $custombutton; + $this->managerbutton = $managerbutton; + $this->logout = $logout; + $this->autohide = $autohide; + $this->position = $position; + $this->editbuttons = $editbuttons; + $this->editbclass = $editbclass; + $this->newbuttons = $newbuttons; + $this->newbclass = $newbclass; + $this->tvbuttons = $tvbuttons; + $this->tvbclass = $tvbclass; + $this->buttonStyle = $buttonStyle; + $this->removeBg = $removeBg; + + // Includes + include_once($this->modx->config['base_path'].'assets/plugins/qm/mcc.class.php'); + + // Run plugin + $this->Run(); + } + + //_______________________________________________________ + function Run() { + + // Include MODX manager language file + global $_lang; + + // Get manager language + $manager_language = $this->modx->config['manager_language']; + + // Individual user language setting (if set) + if (isset($_SESSION['mgrUsrConfigSet']['manager_language'])) $manager_language = $_SESSION['mgrUsrConfigSet']['manager_language']; + + // Include_once the language file + if(!isset($manager_language) || !file_exists(MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php")) { + $manager_language = "english"; // if not set, get the english language file. + } + // Include default language + include_once MODX_MANAGER_PATH."includes/lang/english.inc.php"; + + // Include user language + if($manager_language!="english" && file_exists(MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php")) { + include_once MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php"; + } + + // Get event + $e = &$this->modx->Event; + + // Run plugin based on event + switch ($e->name) { + + // Save document + case 'OnDocFormSave': + + // Saving process for Qm only + if(intval($_REQUEST['quickmanager']) == 1) { + + $id = $e->params['id']; + $key = $id; + + // Normal saving document procedure stops to redirect => Before redirecting secure documents and clear cache + + // Secure web documents - flag as private (code from: processors/save_content.processor.php) + include $this->modx->config['site_manager_path']."includes/secure_web_documents.inc.php"; + secureWebDocument($key); + + // Secure manager documents - flag as private (code from: processors/save_content.processor.php) + include $this->modx->config['site_manager_path']."includes/secure_mgr_documents.inc.php"; + secureMgrDocument($key); + + // Clear cache + $this->modx->clearCache('full'); + + // Different doc to be refreshed than the one we are editing? + if (isset($_POST['qmrefresh'])) { + $id = intval($_POST['qmrefresh']); + } + + // Redirect to clearer page which refreshes parent window and closes modal box frame + if ($this->modx->config['friendly_urls'] == 1){ + $this->modx->sendRedirect($this->modx->makeUrl($id).'?quickmanagerclose=1', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); + }else{ + $this->modx->sendRedirect($this->modx->makeUrl($id).'&quickmanagerclose=1', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); + } + + } + + break; + + // Display page in front-end + case 'OnWebPagePrerender': + + // Get document id + $docID = $this->modx->documentIdentifier; + + // Get page output + $output = &$this->modx->documentOutput; + + // Close modal box after saving (previously close.php) + if (isset($_GET['quickmanagerclose'])) { + + // Set url to refresh + $url = $this->modx->makeUrl($docID, '', '', 'full'); + + $output = ' + + + + + + + + + +'; + break; + } + + // QM+ TV edit + if(intval($_GET['quickmanagertv'] == 1) && $_GET['tvname'] != '' && $this->tvbuttons == 'true') { + + $tvName = ''; + $locked = FALSE; + $access = FALSE; + $save = 0; + $imagePreview = ''; + + // Includes + include_once(MODX_MANAGER_PATH.'includes/tmplvars.inc.php'); + include_once(MODX_MANAGER_PATH.'includes/tmplvars.commands.inc.php'); + include_once(MODX_MANAGER_PATH.'includes/tmplvars.format.inc.php'); + + // Get save status + if (isset($_POST['save'])) $save = intval($_POST['save']); + + // Get TV name + if (preg_match('/^([^\\"\'\(\)<>!?]+)/i', $_GET['tvname'])) $tvName = $_GET['tvname']; + + // Get TV array + $tv = $this->modx->getTemplateVar($tvName, '*', $docID); + + // Handle default TVs + switch ($tvName) { + case 'pagetitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'longtitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'description' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'content' : $tv['type'] = 'richtext'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'menutitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'introtext' : $tv['type'] = 'textarea'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + } + + // Check TV access + if (!$access) { $access = $this->checkTvAccess($tv['id']); } + + // User can access TV + if ($access) { + + // Show TV form + if ($save == 0) { + + // Check is document locked? Someone else is editing the document... //$_lang['lock_msg'] + if ($this->checkLocked()) $locked = TRUE; + + // Set document locked + else $this->setLocked(1); + + // Handle RTE + if($tv['type'] == 'richtext') { + // Invoke OnRichTextEditorInit event + $eventOutput = $this->modx->invokeEvent("OnRichTextEditorInit", array('editor'=>$this->modx->config['which_editor'], 'elements'=>array('tv'.$tvName))); + + if(is_array($eventOutput)) { + $editorHtml = implode("",$eventOutput); + } + } + + // Render TV html + $tvHtml = renderFormElement($tv['type'], $tv['name'], $tv['default_text'], $tv['elements'], $tv['value']); + + // Get jQuery conflict mode + if ($this->noconflictjq == 'true') $jq_mode = '$j'; + else $jq_mode = '$'; + } + + // Save TV + else { + // Remove document locked + $this->setLocked(0); + + // Save TV + $this->saveTv($tvName); + } + + // Page output: header + $output = ' + + + + + + + + + + '; + + // Page output: TV form + if ($save == 0) { + $output .= ' + + '; + + // Document is locked message + if ($locked) { + $output .= ' +

          '.$_lang['locked'].'

          +
          '.$_lang['lock_msg'].'
          + '; + } + + // Normal form + else { + // Image preview + if ($tv['type'] == 'image') { + $imagePreview = ' +
          + + '; + } + $amp = ($this->modx->config['friendly_urls'] == 1) ? '?' : '&'; + $output .= ' +
          + + + + + +

          '.$tv['caption'].'

          + +
          '.$tv['description'].'
          + +
          + '.$tvHtml.' +
          + + '.$imagePreview.' + +
          + '.$editorHtml.' + '; + } + } + + // Page output: close modal box and refresh parent frame + else $output .= ''; + + // Page output: footer + $output .= ' + + + '; + } + + else { + $output = 'Error: Access denied.'; + } + } + + // QM+ with toolbar + else { + + if(isset($_SESSION['mgrValidated']) && $_REQUEST['z'] != 'manprev') { + + // If logout break here + if(isset($_REQUEST['logout'])) { + $this->Logout(); + break; + } + + $userID = $_SESSION['mgrInternalKey']; + + // Add ID + $controls .= '
        • ID: '.$docID.'
        • '; + // Go to Manager button + if ($this->managerbutton == 'true') { + $managerButton = ' +
        • + '.$_lang['manager'].' +
        • + '; + $controls .= $managerButton; + } + // Edit button + + $editButton = ' +
        • + '.$_lang['edit_resource'].' +
        • + '; + + // Check if user has manager access to current document + $access = $this->checkAccess(); + + // Does user have permissions to edit document + if($access) $controls .= $editButton; + + if ($this->addbutton == 'true' && $access) { + // Add button + $addButton = ' +
        • + '.$_lang['create_resource_here'].' +
        • + '; + + // Does user have permissions to add document + if($this->modx->hasPermission('new_document')) $controls .= $addButton; + } + + // Custom add buttons if not empty and enough permissions + if ($this->custombutton != '') { + + // Replace [*id*] with current doc id + $this->custombutton = str_replace("[*id*]", $docID, $this->custombutton); + + // Handle [~id~] links + $this->custombutton = $this->modx->rewriteUrls($this->custombutton); + + $buttons = explode("||", $this->custombutton); // Buttons are divided by "||" + + // Custom buttons class index + $i = 0; + + // Parse buttons + foreach($buttons as $key => $field) { + $i++; + + $field = substr($field, 1, -1); // Trim "'" from beginning and from end + $buttonParams = explode("','", $field); // Button params are divided by "','" + + $buttonTitle = $buttonParams[0]; + $buttonAction = $buttonParams[1]; // Contains URL if this is not add button + $buttonParentId = $buttonParams[2]; // Is empty is this is not add button + $buttonTplId = $buttonParams[3]; + + // Button visible for all + if ($buttonParams[4] == '') { + $showButton = TRUE; + } + // Button is visible for specific user roles + else { + $showButton = FALSE; + + // Get user roles the button is visible for + $buttonRoles = explode(",", $buttonParams[4]); // Roles are divided by ',' + + // Check if user role is found + foreach($buttonRoles as $key => $field) { + if ($field == $_SESSION['mgrRole']) { + $showButton = TRUE; + } + } + } + $buttonIcon = $buttonParams[5]; + // Show custom button + if ($showButton) { + switch ($buttonAction) + { + case 'new': + $customButton = ' +
        • + '.$buttonTitle.' +
        • + '; + break; + + case 'link': + $customButton = ' +
        • + '.$buttonTitle.' +
        • + '; + break; + + case 'modal': + $customButton = ' +
        • + '.$buttonTitle.' +
        • + '; + break; + } + $controls .= $customButton; + } + } + } + + + + // Logout button + $logout = $this->modx->config['site_manager_url'].'index.php?a=8&quickmanager=logout&logoutid='.$docID; + $logoutButton = ' +
        • + '.$_lang['logout'].' +
        • + '; + $controls .= $logoutButton; + + // Add action buttons + $editor = ' +
          + +
          + +
            +
          • +
          • + '.$controls.' +
          +
          '; + + $MGR_DIR = $this->modx->getManagerPath( ); + $css = ' + '; + + $css .= ' + + '; + + // font-awesome + if ($this->loadfa == 'true') { + $css .= ' + + '; + } + // Buttons Styles + if ($this->buttonStyle == 'actionButtons') { + $css .= ' + + '; + } + else + if ($this->buttonStyle == 'navButtons') { + $css .= ' + + '; + } + // Top toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'top')) { + $css .= ' + + '; + } + else + // Top toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'top')) { + $css .= ' + + '; + } + else + // Top toolbar Relative + if ($this->position == 'before') { + $css .= ' + + '; + } + else + // Bottom toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'bottom')) { + $css .= ' + + '; + } + else + // Bottom toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'bottom')) { + $css .= ' + + '; + } + // Left toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'left')) { + $css .= ' + + '; + } + else + // Left toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'left')) { + $css .= ' + + '; + } + // Right toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'right')) { + $css .= ' + + '; + } + else + // Right toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'right')) { + $css .= ' + + '; + } + // Remove background + if (($this->removeBg == 'yes') && ($this->buttonStyle == 'actionButtons')) { + $css .= ' + + '; + } + else + if (($this->removeBg == 'yes') && ($this->buttonStyle == 'navButtons')) { + $css .= ' + + '; + } + // Insert jQuery and ColorBox in head if needed + $head = ''; + if ($this->loadfrontendjq == 'true') $head .= ''; + if ($this->loadtb == 'true') { + $head .= ' + + + + + + '; + } + + // Insert ColorBox jQuery definitions for QuickManager+ + $head .= ' + + '; + + $head .= " + + "; + + // Insert QM+ css in head + $head .= $css; + + // Place QM+ head information in head, just before tag + $output = preg_replace('~()~i', $head . '\1', $output); + + // Insert editor toolbar right after tag + $output = preg_replace('~(]*>)~i', '\1' . $editor, $output); + + // Search and create edit buttons in to the content + if ($this->editbuttons == 'true' && $access) { + $output = preg_replace('//', '$2', $output); + } + + // Search and create new document buttons in to the content + if ($this->newbuttons == 'true' && $access) { + $output = preg_replace('//', '$3', $output); + } + + // Search and create new document buttons in to the content + if ($this->tvbuttons == 'true' && $access) { + // Set and get user doc groups for TV permissions + $this->docGroup = ''; + $mrgDocGroups = $_SESSION['mgrDocgroups']; + if (!empty($mrgDocGroups)) $this->docGroup = implode(",", $mrgDocGroups); + + // Create TV buttons and check TV permissions + $output = preg_replace_callback('//', array(&$this, 'createTvButtons'), $output); + } + } + } + + break; + + // Edit document in ThickBox frame (MODX manager frame) + case 'OnDocFormPrerender': + + // If there is Qm call, add control buttons and modify to edit document page + if (intval($_REQUEST['quickmanager']) == 1) { + + global $content, $_style; + + // Set template for new document, action = 4 + if(intval($_GET['a']) == 4) { + + // Custom add button + if (isset($_GET['customaddtplid'])) { + // Set template + $content['template'] = intval($_GET['customaddtplid']); + } + + // Normal add button + else { + switch ($this->tpltype) { + // Template type is parent + case 'parent': + // Get parent document id + $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); + + // Get parent document + $parent = $this->modx->getDocument($pid); + + // Set parent template + $content['template'] = $parent['template']; + + break; + + // Template is specific id + case 'id': + $content['template'] = $this->tplid; + + break; + + // Template is inherited by Inherit Selected Template plugin + case 'selected': // Template is inherited by Inherit Selected Template plugin + case 'sibling': + // Get parent document id + $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); + + if ($this->modx->config['auto_template_logic'] === 'sibling') { + // Eoler: template_autologic in Evolution 1.0.5+ + // http://tracker.modx.com/issues/9586 + $tv = array(); + $sibl = $this->modx->getDocumentChildren($pid, 1, 0, 'template', '', 'menuindex', 'ASC', 1); + if(empty($sibl)) { + $sibl = $this->modx->getDocumentChildren($pid, 0, 0, 'template', '', 'menuindex', 'ASC', 1); + } + if(!empty($sibl)) { + $tv['value'] = $sibl[0]['template']; + } + else $tv['value'] = ''; // Added by yama + } + else + { + // Get "inheritTpl" TV + $tv = $this->modx->getTemplateVar('inheritTpl', '', $pid); + } + + // Set template to inherit + if ($tv['value'] != '') $content['template'] = $tv['value']; + else $content['template'] = $this->modx->config['default_template']; + break; + } + } + } + + // Manager control class + $mc = new Mcc(); + + // Hide default manager action buttons + $mc->addLine('$("#actions").hide();'); + + + // Get doc id + $doc_id = intval($_REQUEST['id']); + + // Get jQuery conflict mode + if ($this->noconflictjq == 'true') $jq_mode = '$j'; + else $jq_mode = '$'; + + // Add action buttons + $url = $this->modx->makeUrl($doc_id,'','','full'); + $mc->addLine('var controls = "";'); + + // Modify head + $mc->head = ''; + if ($this->loadmanagerjq == 'true') $mc->head .= ''; + + // Add control button + $mc->addLine('$("body").prepend(controls);'); + + // Hide fields to from front-end editors + if ($this->hidefields != '') { + $hideFields = explode(",", $this->hidefields); + + foreach($hideFields as $key => $field) { + $mc->hideField($field); + } + } + + // Hide tabs to from front-end editors + if ($this->hidetabs != '') { + $hideTabs = explode(",", $this->hidetabs); + + foreach($hideTabs as $key => $field) { + $mc->hideTab($field); + } + } + + // Hide sections from front-end editors + if ($this->hidesections != '') { + $hideSections = explode(",", $this->hidesections); + + foreach($hideSections as $key => $field) { + $mc->hideSection($field); + } + } + + // Hidden field to verify that QM+ call exists + $hiddenFields = ''; + + // Different doc to be refreshed? + if (isset($_REQUEST['qmrefresh'])) { + $hiddenFields .= ''; + } + + // Output + $e->output($mc->Output().$hiddenFields); + } + + break; + + // Where to logout + case 'OnManagerLogout': + // Only if cancel editing the document and QuickManager is in use + if ($_REQUEST['quickmanager'] == 'logout') { + // Redirect to document id + if ($this->logout != 'manager') { + $this->modx->sendRedirect($this->modx->makeUrl($_REQUEST['logoutid']), 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); + } + } + + break; + } + } + + // Check if user has manager access permissions to current document + //_______________________________________________________ + function checkAccess() { + $access = FALSE; + + // If user is admin (role = 1) + if ($_SESSION['mgrRole'] == 1) $access = TRUE; + + else { + $docID = $this->modx->documentIdentifier; + + // Database table + $table= $this->modx->getFullTableName("document_groups"); + + // Check if current document is assigned to one or more doc groups + $result = $this->modx->db->select('count(id)', $table, "document='{$docID}'"); + $rowCount= $this->modx->db->getValue($result); + + // If document is assigned to one or more doc groups, check access + if ($rowCount >= 1) { + + // Get document groups for current user + $mrgDocGroups = $_SESSION['mgrDocgroups']; + if (!empty($mrgDocGroups)) { + $docGroup = implode(",", $mrgDocGroups); + + // Check if user has access to current document + $result = $this->modx->db->select('count(id)', $table, "document = '{$docID}' AND document_group IN ({$docGroup})"); + $rowCount = $this->modx->db->getValue($result); + + if ($rowCount >= 1) $access = TRUE; + } + + else $access = FALSE; + } + + else $access = TRUE; + } + + return $access; + } + + // Function from: processors/cache_sync.class.processor.php + //_____________________________________________________ + function getParents($id, $path = '') { // modx:returns child's parent + if(empty($this->aliases)) { + $qh = $this->modx->db->select("id, IF(alias='', id, alias) AS alias, parent", $this->modx->getFullTableName('site_content')); + while ($row = $this->modx->db->getRow($qh)) { + $this->aliases[$row['id']] = $row['alias']; + $this->parents[$row['id']] = $row['parent']; + } + } + if (isset($this->aliases[$id])) { + $path = $this->aliases[$id] . ($path != '' ? '/' : '') . $path; + return $this->getParents($this->parents[$id], $path); + } + return $path; + } + + // Create TV buttons if user has permissions to TV + //_____________________________________________________ + function createTvButtons($matches) { + + $access = FALSE; + $table = $this->modx->getFullTableName('site_tmplvar_access'); + $docID = $this->modx->documentIdentifier; + + // Get TV caption for button title + $tv = $this->modx->getTemplateVar($matches[1]); + $caption = $tv['caption']; + + // If caption is empty this must be a "build-in-tv-field" like pagetitle etc. + if ($caption == '') { + + // Allowed for all + $access = TRUE; + + // Resolve caption + $caption = $this->getDefaultTvCaption($matches[1]); + } + + // Check TV access + else { + $access = $this->checkTvAccess($tv['id']); + } + + // Return TV button link if access + if ($access && $caption != '') { + $amp = ($this->modx->config['friendly_urls'] == 1) ? '?' : '&'; + return ''.$caption.''; + } + } + + // Check user access to TV + //_____________________________________________________ + function checkTvAccess($tvId) { + $access = FALSE; + $table = $this->modx->getFullTableName('site_tmplvar_access'); + + // If user is admin (role = 1) + if ($_SESSION['mgrRole'] == 1 && !$access) { $access = TRUE; } + + // Check permission to TV, is TV in document group? + if (!$access) { + $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}'"); + $rowCount = $this->modx->db->getValue($result); + // TV is not in any document group + if ($rowCount == 0) { $access = TRUE; } + } + + // Check permission to TV, TV is in document group + if (!$access && $this->docGroup != '') { + $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}' AND documentgroup IN ({$this->docGroup})"); + $rowCount = $this->modx->db->getValue($result); + if ($rowCount >= 1) { $access = TRUE; } + } + + return $access; + } + + // Get default TV ("build-in" TVs) captions + //_____________________________________________________ + function getDefaultTvCaption($name) { + + global $_lang; + $caption = ''; + + switch ($name) { + case 'pagetitle' : $caption = $_lang['resource_title']; break; + case 'longtitle' : $caption = $_lang['long_title']; break; + case 'description' : $caption = $_lang['resource_description']; break; + case 'content' : $caption = $_lang['resource_content']; break; + case 'menutitle' : $caption = $_lang['resource_opt_menu_title']; break; + case 'introtext' : $caption = $_lang['resource_summary']; break; + } + + return $caption; + } + + // Check that a document isn't locked for editing + //_____________________________________________________ + function checkLocked() { + + $pageId = $this->modx->documentIdentifier; + $locked = TRUE; + + if ($this->modx->elementIsLocked(7, $pageId) === NULL) { + $locked = FALSE; + } + + return $locked; + } + + // Set document locked on/off + //_____________________________________________________ + function setLocked($locked) { + + $pageId = $this->modx->documentIdentifier; + + // Set document locked + if ($locked == 1) { + $this->modx->lockElement(7, $pageId); + } + + // Set document unlocked + else { + $this->modx->unlockElement(7, $pageId); + } + } + + // Save TV + //_____________________________________________________ + function saveTv($tvName) { + + $tmplvarContentValuesTable = $this->modx->getFullTableName('site_tmplvar_contentvalues'); + $siteContentTable = $this->modx->getFullTableName('site_content'); + $pageId = $this->modx->documentIdentifier; + $result = null; + $time = time(); + $user = $_SESSION['mgrInternalKey']; + $tvId = isset($_POST['tvid']) ? intval($_POST['tvid']) : ''; + $tvContent = isset($_POST['tv'.$tvName]) ? $_POST['tv'.$tvName] : ''; + $tvContentTemp = ''; + + // Escape TV content + $tvContent = $this->modx->db->escape($tvContent); + + // Invoke OnBeforeDocFormSave event + $this->modx->invokeEvent('OnBeforeDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); + + // Handle checkboxes and other arrays, TV to be saved must be e.g. value1||value2||value3 + if (is_array($tvContent)) { + $tvContent = implode("||", $tvContent); + } + + // Save TV + if ($tvId != '') { + $fields = array( + 'tmplvarid' => $tvId, + 'contentid' => $pageId, + 'value' => $tvContent, + ); + $result = $this->modx->db->select('count(id)', $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); + + // TV exists, update TV + if($this->modx->db->getValue($result)) { + $this->modx->db->update($fields, $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); + } + + // TV does not exist, create new TV + else { + $this->modx->db->insert($fields, $tmplvarContentValuesTable); + } + + // Page edited by + $this->modx->db->update( + array( + 'editedon' => $time, + 'editedby' => $user + ), $siteContentTable, "id = '{$pageId}'"); + } + + // Save default field, e.g. pagetitle + else { + $this->modx->db->update( + array( + $tvName => $tvContent, + 'editedon' => $time, + 'editedby' => $user + ), $siteContentTable, "id = '{$pageId}'"); + } + + // Invoke OnDocFormSave event + $this->modx->invokeEvent('OnDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); + + // Clear cache + $this->modx->clearCache('full'); + } + +} +} From f63eb526a48b91e00caf4500fb440cc281459b78 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 20:54:55 +0200 Subject: [PATCH 240/577] set as default menu navbar button style --- install/assets/plugins/qm.tpl | 94 +++++++++++++++++------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/install/assets/plugins/qm.tpl b/install/assets/plugins/qm.tpl index 546e08963d..9cc22cb7e3 100644 --- a/install/assets/plugins/qm.tpl +++ b/install/assets/plugins/qm.tpl @@ -1,47 +1,47 @@ -//checkSession()) return; - -$show = TRUE; - -if ($disabled != '') { - $arr = array_filter(array_map('intval', explode(',', $disabled))); - if (in_array($modx->documentIdentifier, $arr)) { - $show = FALSE; - } -} - -if ($show) { - // Replace [*#tv*] with QM+ edit TV button placeholders - if ($tvbuttons == 'true') { - if ($modx->event->name == 'OnParseDocument') { - $output = &$modx->documentOutput; - $output = preg_replace('~\[\*#(.*?)\*\]~', '[*$1*]', $output); - $modx->documentOutput = $output; - } - } - include_once($modx->config['base_path'].'assets/plugins/qm/qm.inc.php'); - $qm = new Qm($modx, $jqpath, $loadmanagerjq, $loadfrontendjq, $noconflictjq, $loadfa, $loadtb, $tbwidth, $tbheight, $hidefields, $hidetabs, $hidesections, $addbutton, $tpltype, $tplid, $custombutton, $managerbutton, $logout, $autohide, $position, $editbuttons, $editbclass, $newbuttons, $newbclass, $tvbuttons, $tvbclass, $buttonStyle, $removeBg); -} +//checkSession()) return; + +$show = TRUE; + +if ($disabled != '') { + $arr = array_filter(array_map('intval', explode(',', $disabled))); + if (in_array($modx->documentIdentifier, $arr)) { + $show = FALSE; + } +} + +if ($show) { + // Replace [*#tv*] with QM+ edit TV button placeholders + if ($tvbuttons == 'true') { + if ($modx->event->name == 'OnParseDocument') { + $output = &$modx->documentOutput; + $output = preg_replace('~\[\*#(.*?)\*\]~', '[*$1*]', $output); + $modx->documentOutput = $output; + } + } + include_once($modx->config['base_path'].'assets/plugins/qm/qm.inc.php'); + $qm = new Qm($modx, $jqpath, $loadmanagerjq, $loadfrontendjq, $noconflictjq, $loadfa, $loadtb, $tbwidth, $tbheight, $hidefields, $hidetabs, $hidesections, $addbutton, $tpltype, $tplid, $custombutton, $managerbutton, $logout, $autohide, $position, $editbuttons, $editbclass, $newbuttons, $newbclass, $tvbuttons, $tvbclass, $buttonStyle, $removeBg); +} From fd673b48a28f1cf0f8c8a83e8ae33d3cde70141b Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 21:37:39 +0200 Subject: [PATCH 241/577] spectrum.js for colorpicker menu --- manager/media/script/spectrum.evo.min.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 manager/media/script/spectrum.evo.min.js diff --git a/manager/media/script/spectrum.evo.min.js b/manager/media/script/spectrum.evo.min.js new file mode 100644 index 0000000000..1336ade344 --- /dev/null +++ b/manager/media/script/spectrum.evo.min.js @@ -0,0 +1 @@ +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports&&"object"==typeof module?module.exports=t(require("jquery")):t(jQuery)}(function(t,e){"use strict";function r(e,r,n,a){for(var i=[],s=0;s')}else{i.push(t("
          ").append(t('').attr("title",a.noColorSelectedText)).html())}}return"
          "+i.join("")+"
          "}function n(){for(var t=0;t1&&(delete window.localStorage[V],t.each(e,function(t,e){y(e)}))}catch(t){}try{ut=window.localStorage[V].split(";")}catch(t){}}}function y(e){if(K){var r=tinycolor(e).toRgbString();if(!ft[r]&&-1===t.inArray(r,ut))for(ut.push(r);ut.length>ht;)ut.shift();if(V&&window.localStorage)try{window.localStorage[V]=ut.join(";")}catch(t){}}}function w(){var t=[];if(B.showPalette)for(var e=0;eMath.abs(e-a);pt=i?"x":"y"}}else pt=null;var s=!pt||"x"===pt,o=!pt||"y"===pt;s&&(it=parseFloat(t/Q)),o&&(st=parseFloat((J-e)/J)),Vt=!1,B.showAlpha||(ot=1),N()},k,S),zt?(T(zt),j(),Lt=B.preferredFormat||tinycolor(zt).format,y(zt)):j(),L&&A();var n=g?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Mt.delegate(".sp-thumb-el",n,e),Rt.delegate(".sp-thumb-el:nth-child(1)",n,{ignore:!0},e)}();var Wt={show:A,hide:H,toggle:P,reflow:I,option:function(r,n){return r===e?t.extend({},B):n===e?B[r]:(B[r]=n,"preferredFormat"===r&&(Lt=B.preferredFormat),void c())},enable:function(){vt=!1,bt.attr("disabled",!1),Dt.removeClass("sp-disabled")},disable:z,offset:function(t){B.offset=t,I()},set:function(t){T(t),D()},get:O,destroy:function(){bt.show(),Dt.unbind("click.spectrum touchstart.spectrum"),mt.remove(),Et.remove(),p[Wt.id]=null},container:mt};return Wt.id=p.push(Wt)-1,Wt}function s(e,r){var n=e.outerWidth(),a=e.outerHeight(),i=r.outerHeight(),s=e[0].ownerDocument,o=s.documentElement,l=o.clientWidth+t(s).scrollLeft(),c=o.clientHeight+t(s).scrollTop(),f=r.offset();return f.top+=i,f.left-=Math.min(f.left,f.left+n>l&&l>n?Math.abs(f.left+n-l):0),f.top-=Math.min(f.top,f.top+a>c&&c>a?Math.abs(a+i-0):0),f}function o(){}function l(t){t.stopPropagation()}function c(t,e){var r=Array.prototype.slice,n=r.call(arguments,2);return function(){return t.apply(e,n.concat(r.call(arguments)))}}function f(e,r,n,a){function i(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function s(t){if(c){if(g&&l.documentMode<9&&!t.button)return o();var n=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],a=n&&n.pageX||t.pageX,s=n&&n.pageY||t.pageY,p=Math.max(0,Math.min(a-f.left,h)),b=Math.max(0,Math.min(s-f.top,u));d&&i(t),r.apply(e,[p,b,t])}}function o(){c&&(t(l).unbind(p),t(l.body).removeClass("sp-dragging"),setTimeout(function(){a.apply(e,arguments)},0)),c=!1}r=r||function(){},n=n||function(){},a=a||function(){};var l=document,c=!1,f={},u=0,h=0,d="ontouchstart"in window,p={};p.selectstart=i,p.dragstart=i,p["touchmove mousemove"]=s,p["touchend mouseup"]=o,t(e).bind("touchstart mousedown",function(r){(r.which?3==r.which:2==r.button)||c||!1!==n.apply(e,arguments)&&(c=!0,u=t(e).height(),h=t(e).width(),f=t(e).offset(),t(l).bind(p),t(l.body).addClass("sp-dragging"),s(r),i(r))})}function u(t,e,r){var n;return function(){var a=this,i=arguments;r&&clearTimeout(n),!r&&n||(n=setTimeout(function(){n=null,t.apply(a,i)},e))}}function h(){return t.fn.spectrum.inputTypeColorSupport()}var d={beforeShow:o,move:o,change:o,show:o,hide:o,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},p=[],g=!!/msie/i.exec(window.navigator.userAgent),b=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div").style;return e.cssText="background-color:rgba(0,0,0,.5)",t(e.backgroundColor,"rgba")||t(e.backgroundColor,"hsla")}(),v=["
          ","
          ","
          ","
          "].join(""),m=function(){var t="";if(g)for(var e=1;e<=6;e++)t+="
          ";return["
          ","
          ","
          ","
          ","","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ",t,"
          ","
          ","
          ","
          ","
          ","","
          ","
          ","
          ","","","
          ","
          ","
          "].join("")}();t.fn.spectrum=function(e,r){if("string"==typeof e){var n=this,a=Array.prototype.slice.call(arguments,1);return this.each(function(){var r=p[t(this).data("spectrum.id")];if(r){var i=r[e];if(!i)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?n=r.get():"container"==e?n=r.container:"option"==e?n=r.option.apply(r,a):"destroy"==e?(r.destroy(),t(this).removeData("spectrum.id")):i.apply(r,a)}}),n}return this.spectrum("destroy").each(function(){var r=i(this,t.extend({},e,t(this).data()));t(this).data("spectrum.id",r.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=f,t.fn.spectrum.defaults=d,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var r=t("")[0];e._cachedResult="color"===r.type&&""!==r.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!h()&&e.spectrum({preferredFormat:"hex6"})},function(){function t(t){var r={r:0,g:0,b:0},a=1,s=!1,o=!1;return"string"==typeof t&&(t=F(t)),"object"==typeof t&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(r=e(t.r,t.g,t.b),s=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=M(t.s),t.v=M(t.v),r=i(t.h,t.s,t.v),s=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=M(t.s),t.l=M(t.l),r=n(t.h,t.s,t.l),s=!0,o="hsl"),t.hasOwnProperty("a")&&(a=t.a)),a=_(a),{ok:s,format:t.format||o,r:E(255,D(r.r,0)),g:E(255,D(r.g,0)),b:E(255,D(r.b,0)),a:a}}function e(t,e,r){return{r:255*x(t,255),g:255*x(e,255),b:255*x(r,255)}}function r(t,e,r){t=x(t,255),e=x(e,255),r=x(r,255);var n,a,i=D(t,e,r),s=E(t,e,r),o=(i+s)/2;if(i==s)n=a=0;else{var l=i-s;switch(a=o>.5?l/(2-i-s):l/(i+s),i){case t:n=(e-r)/l+(e1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}var a,i,s;if(t=x(t,360),e=x(e,100),r=x(r,100),0===e)a=i=s=r;else{var o=r<.5?r*(1+e):r+e-r*e,l=2*r-o;a=n(l,o,t+1/3),i=n(l,o,t),s=n(l,o,t-1/3)}return{r:255*a,g:255*i,b:255*s}}function a(t,e,r){t=x(t,255),e=x(e,255),r=x(r,255);var n,a,i=D(t,e,r),s=E(t,e,r),o=i,l=i-s;if(a=0===i?0:l/i,i==s)n=0;else{switch(i){case t:n=(e-r)/l+(e>1)+720)%360;--e;)n.h=(n.h+a)%360,i.push(z(n));return i}function w(t,e){e=e||6;for(var r=z(t).toHsv(),n=r.h,a=r.s,i=r.v,s=[],o=1/e;e--;)s.push(z({h:n,s:a,v:i})),i=(i+o)%1;return s}function _(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function x(t,e){C(t)&&(t="100%");var r=P(t);return t=E(e,D(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),N.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function k(t){return E(1,D(0,t))}function S(t){return parseInt(t,16)}function C(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function P(t){return"string"==typeof t&&-1!=t.indexOf("%")}function A(t){return 1==t.length?"0"+t:""+t}function M(t){return t<=1&&(t=100*t+"%"),t}function R(t){return Math.round(255*parseFloat(t)).toString(16)}function H(t){return S(t)/255}function F(t){t=t.replace(T,"").replace(O,"").toLowerCase();var e=!1;if(B[t])t=B[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=K.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=K.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=K.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=K.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=K.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=K.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=K.hex8.exec(t))?{a:H(r[1]),r:S(r[2]),g:S(r[3]),b:S(r[4]),format:e?"name":"hex8"}:(r=K.hex6.exec(t))?{r:S(r[1]),g:S(r[2]),b:S(r[3]),format:e?"name":"hex"}:!!(r=K.hex3.exec(t))&&{r:S(r[1]+""+r[1]),g:S(r[2]+""+r[2]),b:S(r[3]+""+r[3]),format:e?"name":"hex"}}var T=/^[\s,#]+/,O=/\s+$/,q=0,N=Math,j=N.round,E=N.min,D=N.max,I=N.random,z=function(e,r){if(e=e||"",r=r||{},e instanceof z)return e;if(!(this instanceof z))return new z(e,r);var n=t(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=j(100*this._a)/100,this._format=r.format||n.format,this._gradientType=r.gradientType,this._r<1&&(this._r=j(this._r)),this._g<1&&(this._g=j(this._g)),this._b<1&&(this._b=j(this._b)),this._ok=n.ok,this._tc_id=q++};z.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=_(t),this._roundA=j(100*this._a)/100,this},toHsv:function(){var t=a(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=a(this._r,this._g,this._b),e=j(360*t.h),r=j(100*t.s),n=j(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=r(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=r(this._r,this._g,this._b),e=j(360*t.h),n=j(100*t.s),a=j(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+a+"%)":"hsla("+e+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return s(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return o(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:j(this._r),g:j(this._g),b:j(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+j(this._r)+", "+j(this._g)+", "+j(this._b)+")":"rgba("+j(this._r)+", "+j(this._g)+", "+j(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:j(100*x(this._r,255))+"%",g:j(100*x(this._g,255))+"%",b:j(100*x(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+j(100*x(this._r,255))+"%, "+j(100*x(this._g,255))+"%, "+j(100*x(this._b,255))+"%)":"rgba("+j(100*x(this._r,255))+"%, "+j(100*x(this._g,255))+"%, "+j(100*x(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[s(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+o(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";return t&&(r=z(t).toHex8String()),"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(u,arguments)},brighten:function(){return this._applyModification(h,arguments)},darken:function(){return this._applyModification(d,arguments)},desaturate:function(){return this._applyModification(l,arguments)},saturate:function(){return this._applyModification(c,arguments)},greyscale:function(){return this._applyModification(f,arguments)},spin:function(){return this._applyModification(p,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(y,arguments)},complement:function(){return this._applyCombination(g,arguments)},monochromatic:function(){return this._applyCombination(w,arguments)},splitcomplement:function(){return this._applyCombination(m,arguments)},triad:function(){return this._applyCombination(b,arguments)},tetrad:function(){return this._applyCombination(v,arguments)}},z.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:M(t[n]));t=r}return z(t,e)},z.equals=function(t,e){return!(!t||!e)&&z(t).toRgbString()==z(e).toRgbString()},z.random=function(){return z.fromRatio({r:I(),g:I(),b:I()})},z.mix=function(t,e,r){r=0===r?0:r||50;var n,a=z(t).toRgb(),i=z(e).toRgb(),s=r/100,o=2*s-1,l=i.a-a.a,c=1-(n=((n=o*l==-1?o:(o+l)/(1+o*l))+1)/2),f={r:i.r*n+a.r*c,g:i.g*n+a.g*c,b:i.b*n+a.b*c,a:i.a*s+a.a*(1-s)};return z(f)},z.readability=function(t,e){var r=z(t),n=z(e),a=r.toRgb(),i=n.toRgb(),s=r.getBrightness(),o=n.getBrightness(),l=Math.max(a.r,i.r)-Math.min(a.r,i.r)+Math.max(a.g,i.g)-Math.min(a.g,i.g)+Math.max(a.b,i.b)-Math.min(a.b,i.b);return{brightness:Math.abs(s-o),color:l}},z.isReadable=function(t,e){var r=z.readability(t,e);return r.brightness>125&&r.color>500},z.mostReadable=function(t,e){for(var r=null,n=0,a=!1,i=0;i125&&s.color>500,l=s.brightness/125*3+s.color/500;(o&&!a||o&&a&&l>n||!o&&!a&&l>n)&&(a=o,n=l,r=z(e[i]))}return r};var B=z.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=z.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(B),K=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",r="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+r),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+r),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+r),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=z}(),t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})}); \ No newline at end of file From 9b10053b7f9a7fb56554f51702efa2a6e0277f3a Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 21:38:15 +0200 Subject: [PATCH 242/577] Rename manager/media/script/spectrum.evo.min.js to manager/media/script/spectrum/spectrum.evo.min.js --- manager/media/script/{ => spectrum}/spectrum.evo.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename manager/media/script/{ => spectrum}/spectrum.evo.min.js (99%) diff --git a/manager/media/script/spectrum.evo.min.js b/manager/media/script/spectrum/spectrum.evo.min.js similarity index 99% rename from manager/media/script/spectrum.evo.min.js rename to manager/media/script/spectrum/spectrum.evo.min.js index 1336ade344..de5f7499f5 100644 --- a/manager/media/script/spectrum.evo.min.js +++ b/manager/media/script/spectrum/spectrum.evo.min.js @@ -1 +1 @@ -!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports&&"object"==typeof module?module.exports=t(require("jquery")):t(jQuery)}(function(t,e){"use strict";function r(e,r,n,a){for(var i=[],s=0;s')}else{i.push(t("
          ").append(t('').attr("title",a.noColorSelectedText)).html())}}return"
          "+i.join("")+"
          "}function n(){for(var t=0;t1&&(delete window.localStorage[V],t.each(e,function(t,e){y(e)}))}catch(t){}try{ut=window.localStorage[V].split(";")}catch(t){}}}function y(e){if(K){var r=tinycolor(e).toRgbString();if(!ft[r]&&-1===t.inArray(r,ut))for(ut.push(r);ut.length>ht;)ut.shift();if(V&&window.localStorage)try{window.localStorage[V]=ut.join(";")}catch(t){}}}function w(){var t=[];if(B.showPalette)for(var e=0;eMath.abs(e-a);pt=i?"x":"y"}}else pt=null;var s=!pt||"x"===pt,o=!pt||"y"===pt;s&&(it=parseFloat(t/Q)),o&&(st=parseFloat((J-e)/J)),Vt=!1,B.showAlpha||(ot=1),N()},k,S),zt?(T(zt),j(),Lt=B.preferredFormat||tinycolor(zt).format,y(zt)):j(),L&&A();var n=g?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Mt.delegate(".sp-thumb-el",n,e),Rt.delegate(".sp-thumb-el:nth-child(1)",n,{ignore:!0},e)}();var Wt={show:A,hide:H,toggle:P,reflow:I,option:function(r,n){return r===e?t.extend({},B):n===e?B[r]:(B[r]=n,"preferredFormat"===r&&(Lt=B.preferredFormat),void c())},enable:function(){vt=!1,bt.attr("disabled",!1),Dt.removeClass("sp-disabled")},disable:z,offset:function(t){B.offset=t,I()},set:function(t){T(t),D()},get:O,destroy:function(){bt.show(),Dt.unbind("click.spectrum touchstart.spectrum"),mt.remove(),Et.remove(),p[Wt.id]=null},container:mt};return Wt.id=p.push(Wt)-1,Wt}function s(e,r){var n=e.outerWidth(),a=e.outerHeight(),i=r.outerHeight(),s=e[0].ownerDocument,o=s.documentElement,l=o.clientWidth+t(s).scrollLeft(),c=o.clientHeight+t(s).scrollTop(),f=r.offset();return f.top+=i,f.left-=Math.min(f.left,f.left+n>l&&l>n?Math.abs(f.left+n-l):0),f.top-=Math.min(f.top,f.top+a>c&&c>a?Math.abs(a+i-0):0),f}function o(){}function l(t){t.stopPropagation()}function c(t,e){var r=Array.prototype.slice,n=r.call(arguments,2);return function(){return t.apply(e,n.concat(r.call(arguments)))}}function f(e,r,n,a){function i(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function s(t){if(c){if(g&&l.documentMode<9&&!t.button)return o();var n=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],a=n&&n.pageX||t.pageX,s=n&&n.pageY||t.pageY,p=Math.max(0,Math.min(a-f.left,h)),b=Math.max(0,Math.min(s-f.top,u));d&&i(t),r.apply(e,[p,b,t])}}function o(){c&&(t(l).unbind(p),t(l.body).removeClass("sp-dragging"),setTimeout(function(){a.apply(e,arguments)},0)),c=!1}r=r||function(){},n=n||function(){},a=a||function(){};var l=document,c=!1,f={},u=0,h=0,d="ontouchstart"in window,p={};p.selectstart=i,p.dragstart=i,p["touchmove mousemove"]=s,p["touchend mouseup"]=o,t(e).bind("touchstart mousedown",function(r){(r.which?3==r.which:2==r.button)||c||!1!==n.apply(e,arguments)&&(c=!0,u=t(e).height(),h=t(e).width(),f=t(e).offset(),t(l).bind(p),t(l.body).addClass("sp-dragging"),s(r),i(r))})}function u(t,e,r){var n;return function(){var a=this,i=arguments;r&&clearTimeout(n),!r&&n||(n=setTimeout(function(){n=null,t.apply(a,i)},e))}}function h(){return t.fn.spectrum.inputTypeColorSupport()}var d={beforeShow:o,move:o,change:o,show:o,hide:o,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},p=[],g=!!/msie/i.exec(window.navigator.userAgent),b=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div").style;return e.cssText="background-color:rgba(0,0,0,.5)",t(e.backgroundColor,"rgba")||t(e.backgroundColor,"hsla")}(),v=["
          ","
          ","
          ","
          "].join(""),m=function(){var t="";if(g)for(var e=1;e<=6;e++)t+="
          ";return["
          ","
          ","
          ","
          ","","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ",t,"
          ","
          ","
          ","
          ","
          ","","
          ","
          ","
          ","","","
          ","
          ","
          "].join("")}();t.fn.spectrum=function(e,r){if("string"==typeof e){var n=this,a=Array.prototype.slice.call(arguments,1);return this.each(function(){var r=p[t(this).data("spectrum.id")];if(r){var i=r[e];if(!i)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?n=r.get():"container"==e?n=r.container:"option"==e?n=r.option.apply(r,a):"destroy"==e?(r.destroy(),t(this).removeData("spectrum.id")):i.apply(r,a)}}),n}return this.spectrum("destroy").each(function(){var r=i(this,t.extend({},e,t(this).data()));t(this).data("spectrum.id",r.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=f,t.fn.spectrum.defaults=d,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var r=t("")[0];e._cachedResult="color"===r.type&&""!==r.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!h()&&e.spectrum({preferredFormat:"hex6"})},function(){function t(t){var r={r:0,g:0,b:0},a=1,s=!1,o=!1;return"string"==typeof t&&(t=F(t)),"object"==typeof t&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(r=e(t.r,t.g,t.b),s=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=M(t.s),t.v=M(t.v),r=i(t.h,t.s,t.v),s=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=M(t.s),t.l=M(t.l),r=n(t.h,t.s,t.l),s=!0,o="hsl"),t.hasOwnProperty("a")&&(a=t.a)),a=_(a),{ok:s,format:t.format||o,r:E(255,D(r.r,0)),g:E(255,D(r.g,0)),b:E(255,D(r.b,0)),a:a}}function e(t,e,r){return{r:255*x(t,255),g:255*x(e,255),b:255*x(r,255)}}function r(t,e,r){t=x(t,255),e=x(e,255),r=x(r,255);var n,a,i=D(t,e,r),s=E(t,e,r),o=(i+s)/2;if(i==s)n=a=0;else{var l=i-s;switch(a=o>.5?l/(2-i-s):l/(i+s),i){case t:n=(e-r)/l+(e1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}var a,i,s;if(t=x(t,360),e=x(e,100),r=x(r,100),0===e)a=i=s=r;else{var o=r<.5?r*(1+e):r+e-r*e,l=2*r-o;a=n(l,o,t+1/3),i=n(l,o,t),s=n(l,o,t-1/3)}return{r:255*a,g:255*i,b:255*s}}function a(t,e,r){t=x(t,255),e=x(e,255),r=x(r,255);var n,a,i=D(t,e,r),s=E(t,e,r),o=i,l=i-s;if(a=0===i?0:l/i,i==s)n=0;else{switch(i){case t:n=(e-r)/l+(e>1)+720)%360;--e;)n.h=(n.h+a)%360,i.push(z(n));return i}function w(t,e){e=e||6;for(var r=z(t).toHsv(),n=r.h,a=r.s,i=r.v,s=[],o=1/e;e--;)s.push(z({h:n,s:a,v:i})),i=(i+o)%1;return s}function _(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function x(t,e){C(t)&&(t="100%");var r=P(t);return t=E(e,D(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),N.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function k(t){return E(1,D(0,t))}function S(t){return parseInt(t,16)}function C(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function P(t){return"string"==typeof t&&-1!=t.indexOf("%")}function A(t){return 1==t.length?"0"+t:""+t}function M(t){return t<=1&&(t=100*t+"%"),t}function R(t){return Math.round(255*parseFloat(t)).toString(16)}function H(t){return S(t)/255}function F(t){t=t.replace(T,"").replace(O,"").toLowerCase();var e=!1;if(B[t])t=B[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=K.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=K.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=K.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=K.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=K.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=K.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=K.hex8.exec(t))?{a:H(r[1]),r:S(r[2]),g:S(r[3]),b:S(r[4]),format:e?"name":"hex8"}:(r=K.hex6.exec(t))?{r:S(r[1]),g:S(r[2]),b:S(r[3]),format:e?"name":"hex"}:!!(r=K.hex3.exec(t))&&{r:S(r[1]+""+r[1]),g:S(r[2]+""+r[2]),b:S(r[3]+""+r[3]),format:e?"name":"hex"}}var T=/^[\s,#]+/,O=/\s+$/,q=0,N=Math,j=N.round,E=N.min,D=N.max,I=N.random,z=function(e,r){if(e=e||"",r=r||{},e instanceof z)return e;if(!(this instanceof z))return new z(e,r);var n=t(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=j(100*this._a)/100,this._format=r.format||n.format,this._gradientType=r.gradientType,this._r<1&&(this._r=j(this._r)),this._g<1&&(this._g=j(this._g)),this._b<1&&(this._b=j(this._b)),this._ok=n.ok,this._tc_id=q++};z.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=_(t),this._roundA=j(100*this._a)/100,this},toHsv:function(){var t=a(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=a(this._r,this._g,this._b),e=j(360*t.h),r=j(100*t.s),n=j(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=r(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=r(this._r,this._g,this._b),e=j(360*t.h),n=j(100*t.s),a=j(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+a+"%)":"hsla("+e+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return s(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return o(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:j(this._r),g:j(this._g),b:j(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+j(this._r)+", "+j(this._g)+", "+j(this._b)+")":"rgba("+j(this._r)+", "+j(this._g)+", "+j(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:j(100*x(this._r,255))+"%",g:j(100*x(this._g,255))+"%",b:j(100*x(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+j(100*x(this._r,255))+"%, "+j(100*x(this._g,255))+"%, "+j(100*x(this._b,255))+"%)":"rgba("+j(100*x(this._r,255))+"%, "+j(100*x(this._g,255))+"%, "+j(100*x(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[s(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+o(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";return t&&(r=z(t).toHex8String()),"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(u,arguments)},brighten:function(){return this._applyModification(h,arguments)},darken:function(){return this._applyModification(d,arguments)},desaturate:function(){return this._applyModification(l,arguments)},saturate:function(){return this._applyModification(c,arguments)},greyscale:function(){return this._applyModification(f,arguments)},spin:function(){return this._applyModification(p,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(y,arguments)},complement:function(){return this._applyCombination(g,arguments)},monochromatic:function(){return this._applyCombination(w,arguments)},splitcomplement:function(){return this._applyCombination(m,arguments)},triad:function(){return this._applyCombination(b,arguments)},tetrad:function(){return this._applyCombination(v,arguments)}},z.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:M(t[n]));t=r}return z(t,e)},z.equals=function(t,e){return!(!t||!e)&&z(t).toRgbString()==z(e).toRgbString()},z.random=function(){return z.fromRatio({r:I(),g:I(),b:I()})},z.mix=function(t,e,r){r=0===r?0:r||50;var n,a=z(t).toRgb(),i=z(e).toRgb(),s=r/100,o=2*s-1,l=i.a-a.a,c=1-(n=((n=o*l==-1?o:(o+l)/(1+o*l))+1)/2),f={r:i.r*n+a.r*c,g:i.g*n+a.g*c,b:i.b*n+a.b*c,a:i.a*s+a.a*(1-s)};return z(f)},z.readability=function(t,e){var r=z(t),n=z(e),a=r.toRgb(),i=n.toRgb(),s=r.getBrightness(),o=n.getBrightness(),l=Math.max(a.r,i.r)-Math.min(a.r,i.r)+Math.max(a.g,i.g)-Math.min(a.g,i.g)+Math.max(a.b,i.b)-Math.min(a.b,i.b);return{brightness:Math.abs(s-o),color:l}},z.isReadable=function(t,e){var r=z.readability(t,e);return r.brightness>125&&r.color>500},z.mostReadable=function(t,e){for(var r=null,n=0,a=!1,i=0;i125&&s.color>500,l=s.brightness/125*3+s.color/500;(o&&!a||o&&a&&l>n||!o&&!a&&l>n)&&(a=o,n=l,r=z(e[i]))}return r};var B=z.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=z.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(B),K=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",r="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+r),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+r),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+r),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=z}(),t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})}); \ No newline at end of file +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports&&"object"==typeof module?module.exports=t(require("jquery")):t(jQuery)}(function(t,e){"use strict";function r(e,r,n,a){for(var i=[],s=0;s')}else{i.push(t("
          ").append(t('').attr("title",a.noColorSelectedText)).html())}}return"
          "+i.join("")+"
          "}function n(){for(var t=0;t1&&(delete window.localStorage[V],t.each(e,function(t,e){y(e)}))}catch(t){}try{ut=window.localStorage[V].split(";")}catch(t){}}}function y(e){if(K){var r=tinycolor(e).toRgbString();if(!ft[r]&&-1===t.inArray(r,ut))for(ut.push(r);ut.length>ht;)ut.shift();if(V&&window.localStorage)try{window.localStorage[V]=ut.join(";")}catch(t){}}}function w(){var t=[];if(B.showPalette)for(var e=0;eMath.abs(e-a);pt=i?"x":"y"}}else pt=null;var s=!pt||"x"===pt,o=!pt||"y"===pt;s&&(it=parseFloat(t/Q)),o&&(st=parseFloat((J-e)/J)),Vt=!1,B.showAlpha||(ot=1),N()},k,S),zt?(T(zt),j(),Lt=B.preferredFormat||tinycolor(zt).format,y(zt)):j(),L&&A();var n=g?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Mt.delegate(".sp-thumb-el",n,e),Rt.delegate(".sp-thumb-el:nth-child(1)",n,{ignore:!0},e)}();var Wt={show:A,hide:H,toggle:P,reflow:I,option:function(r,n){return r===e?t.extend({},B):n===e?B[r]:(B[r]=n,"preferredFormat"===r&&(Lt=B.preferredFormat),void c())},enable:function(){vt=!1,bt.attr("disabled",!1),Dt.removeClass("sp-disabled")},disable:z,offset:function(t){B.offset=t,I()},set:function(t){T(t),D()},get:O,destroy:function(){bt.show(),Dt.unbind("click.spectrum touchstart.spectrum"),mt.remove(),Et.remove(),p[Wt.id]=null},container:mt};return Wt.id=p.push(Wt)-1,Wt}function s(e,r){var n=e.outerWidth(),a=e.outerHeight(),i=r.outerHeight(),s=e[0].ownerDocument,o=s.documentElement,l=o.clientWidth+t(s).scrollLeft(),c=o.clientHeight+t(s).scrollTop(),f=r.offset();return f.top+=i,f.left-=Math.min(f.left,f.left+n>l&&l>n?Math.abs(f.left+n-l):0),f.top-=Math.min(f.top,f.top+a>c&&c>a?Math.abs(a+i-0):0),f}function o(){}function l(t){t.stopPropagation()}function c(t,e){var r=Array.prototype.slice,n=r.call(arguments,2);return function(){return t.apply(e,n.concat(r.call(arguments)))}}function f(e,r,n,a){function i(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function s(t){if(c){if(g&&l.documentMode<9&&!t.button)return o();var n=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],a=n&&n.pageX||t.pageX,s=n&&n.pageY||t.pageY,p=Math.max(0,Math.min(a-f.left,h)),b=Math.max(0,Math.min(s-f.top,u));d&&i(t),r.apply(e,[p,b,t])}}function o(){c&&(t(l).unbind(p),t(l.body).removeClass("sp-dragging"),setTimeout(function(){a.apply(e,arguments)},0)),c=!1}r=r||function(){},n=n||function(){},a=a||function(){};var l=document,c=!1,f={},u=0,h=0,d="ontouchstart"in window,p={};p.selectstart=i,p.dragstart=i,p["touchmove mousemove"]=s,p["touchend mouseup"]=o,t(e).bind("touchstart mousedown",function(r){(r.which?3==r.which:2==r.button)||c||!1!==n.apply(e,arguments)&&(c=!0,u=t(e).height(),h=t(e).width(),f=t(e).offset(),t(l).bind(p),t(l.body).addClass("sp-dragging"),s(r),i(r))})}function u(t,e,r){var n;return function(){var a=this,i=arguments;r&&clearTimeout(n),!r&&n||(n=setTimeout(function(){n=null,t.apply(a,i)},e))}}function h(){return t.fn.spectrum.inputTypeColorSupport()}var d={beforeShow:o,move:o,change:o,show:o,hide:o,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},p=[],g=!!/msie/i.exec(window.navigator.userAgent),b=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div").style;return e.cssText="background-color:rgba(0,0,0,.5)",t(e.backgroundColor,"rgba")||t(e.backgroundColor,"hsla")}(),v=["
          ","
          ","
          ","
          "].join(""),m=function(){var t="";if(g)for(var e=1;e<=6;e++)t+="
          ";return["
          ","
          ","
          ","
          ","","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ","
          ",t,"
          ","
          ","
          ","
          ","
          ","","
          ","
          ","
          ","","","
          ","
          ","
          "].join("")}();t.fn.spectrum=function(e,r){if("string"==typeof e){var n=this,a=Array.prototype.slice.call(arguments,1);return this.each(function(){var r=p[t(this).data("spectrum.id")];if(r){var i=r[e];if(!i)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?n=r.get():"container"==e?n=r.container:"option"==e?n=r.option.apply(r,a):"destroy"==e?(r.destroy(),t(this).removeData("spectrum.id")):i.apply(r,a)}}),n}return this.spectrum("destroy").each(function(){var r=i(this,t.extend({},e,t(this).data()));t(this).data("spectrum.id",r.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=f,t.fn.spectrum.defaults=d,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var r=t("")[0];e._cachedResult="color"===r.type&&""!==r.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!h()&&e.spectrum({preferredFormat:"hex6"})},function(){function t(t){var r={r:0,g:0,b:0},a=1,s=!1,o=!1;return"string"==typeof t&&(t=F(t)),"object"==typeof t&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(r=e(t.r,t.g,t.b),s=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=M(t.s),t.v=M(t.v),r=i(t.h,t.s,t.v),s=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=M(t.s),t.l=M(t.l),r=n(t.h,t.s,t.l),s=!0,o="hsl"),t.hasOwnProperty("a")&&(a=t.a)),a=_(a),{ok:s,format:t.format||o,r:E(255,D(r.r,0)),g:E(255,D(r.g,0)),b:E(255,D(r.b,0)),a:a}}function e(t,e,r){return{r:255*x(t,255),g:255*x(e,255),b:255*x(r,255)}}function r(t,e,r){t=x(t,255),e=x(e,255),r=x(r,255);var n,a,i=D(t,e,r),s=E(t,e,r),o=(i+s)/2;if(i==s)n=a=0;else{var l=i-s;switch(a=o>.5?l/(2-i-s):l/(i+s),i){case t:n=(e-r)/l+(e1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}var a,i,s;if(t=x(t,360),e=x(e,100),r=x(r,100),0===e)a=i=s=r;else{var o=r<.5?r*(1+e):r+e-r*e,l=2*r-o;a=n(l,o,t+1/3),i=n(l,o,t),s=n(l,o,t-1/3)}return{r:255*a,g:255*i,b:255*s}}function a(t,e,r){t=x(t,255),e=x(e,255),r=x(r,255);var n,a,i=D(t,e,r),s=E(t,e,r),o=i,l=i-s;if(a=0===i?0:l/i,i==s)n=0;else{switch(i){case t:n=(e-r)/l+(e>1)+720)%360;--e;)n.h=(n.h+a)%360,i.push(z(n));return i}function w(t,e){e=e||6;for(var r=z(t).toHsv(),n=r.h,a=r.s,i=r.v,s=[],o=1/e;e--;)s.push(z({h:n,s:a,v:i})),i=(i+o)%1;return s}function _(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function x(t,e){C(t)&&(t="100%");var r=P(t);return t=E(e,D(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),N.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function k(t){return E(1,D(0,t))}function S(t){return parseInt(t,16)}function C(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function P(t){return"string"==typeof t&&-1!=t.indexOf("%")}function A(t){return 1==t.length?"0"+t:""+t}function M(t){return t<=1&&(t=100*t+"%"),t}function R(t){return Math.round(255*parseFloat(t)).toString(16)}function H(t){return S(t)/255}function F(t){t=t.replace(T,"").replace(O,"").toLowerCase();var e=!1;if(B[t])t=B[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=K.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=K.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=K.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=K.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=K.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=K.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=K.hex8.exec(t))?{a:H(r[1]),r:S(r[2]),g:S(r[3]),b:S(r[4]),format:e?"name":"hex8"}:(r=K.hex6.exec(t))?{r:S(r[1]),g:S(r[2]),b:S(r[3]),format:e?"name":"hex"}:!!(r=K.hex3.exec(t))&&{r:S(r[1]+""+r[1]),g:S(r[2]+""+r[2]),b:S(r[3]+""+r[3]),format:e?"name":"hex"}}var T=/^[\s,#]+/,O=/\s+$/,q=0,N=Math,j=N.round,E=N.min,D=N.max,I=N.random,z=function(e,r){if(e=e||"",r=r||{},e instanceof z)return e;if(!(this instanceof z))return new z(e,r);var n=t(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=j(100*this._a)/100,this._format=r.format||n.format,this._gradientType=r.gradientType,this._r<1&&(this._r=j(this._r)),this._g<1&&(this._g=j(this._g)),this._b<1&&(this._b=j(this._b)),this._ok=n.ok,this._tc_id=q++};z.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=_(t),this._roundA=j(100*this._a)/100,this},toHsv:function(){var t=a(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=a(this._r,this._g,this._b),e=j(360*t.h),r=j(100*t.s),n=j(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=r(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=r(this._r,this._g,this._b),e=j(360*t.h),n=j(100*t.s),a=j(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+a+"%)":"hsla("+e+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return s(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return o(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:j(this._r),g:j(this._g),b:j(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+j(this._r)+", "+j(this._g)+", "+j(this._b)+")":"rgba("+j(this._r)+", "+j(this._g)+", "+j(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:j(100*x(this._r,255))+"%",g:j(100*x(this._g,255))+"%",b:j(100*x(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+j(100*x(this._r,255))+"%, "+j(100*x(this._g,255))+"%, "+j(100*x(this._b,255))+"%)":"rgba("+j(100*x(this._r,255))+"%, "+j(100*x(this._g,255))+"%, "+j(100*x(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[s(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+o(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";return t&&(r=z(t).toHex8String()),"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(u,arguments)},brighten:function(){return this._applyModification(h,arguments)},darken:function(){return this._applyModification(d,arguments)},desaturate:function(){return this._applyModification(l,arguments)},saturate:function(){return this._applyModification(c,arguments)},greyscale:function(){return this._applyModification(f,arguments)},spin:function(){return this._applyModification(p,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(y,arguments)},complement:function(){return this._applyCombination(g,arguments)},monochromatic:function(){return this._applyCombination(w,arguments)},splitcomplement:function(){return this._applyCombination(m,arguments)},triad:function(){return this._applyCombination(b,arguments)},tetrad:function(){return this._applyCombination(v,arguments)}},z.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:M(t[n]));t=r}return z(t,e)},z.equals=function(t,e){return!(!t||!e)&&z(t).toRgbString()==z(e).toRgbString()},z.random=function(){return z.fromRatio({r:I(),g:I(),b:I()})},z.mix=function(t,e,r){r=0===r?0:r||50;var n,a=z(t).toRgb(),i=z(e).toRgb(),s=r/100,o=2*s-1,l=i.a-a.a,c=1-(n=((n=o*l==-1?o:(o+l)/(1+o*l))+1)/2),f={r:i.r*n+a.r*c,g:i.g*n+a.g*c,b:i.b*n+a.b*c,a:i.a*s+a.a*(1-s)};return z(f)},z.readability=function(t,e){var r=z(t),n=z(e),a=r.toRgb(),i=n.toRgb(),s=r.getBrightness(),o=n.getBrightness(),l=Math.max(a.r,i.r)-Math.min(a.r,i.r)+Math.max(a.g,i.g)-Math.min(a.g,i.g)+Math.max(a.b,i.b)-Math.min(a.b,i.b);return{brightness:Math.abs(s-o),color:l}},z.isReadable=function(t,e){var r=z.readability(t,e);return r.brightness>125&&r.color>500},z.mostReadable=function(t,e){for(var r=null,n=0,a=!1,i=0;i125&&s.color>500,l=s.brightness/125*3+s.color/500;(o&&!a||o&&a&&l>n||!o&&!a&&l>n)&&(a=o,n=l,r=z(e[i]))}return r};var B=z.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=z.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(B),K=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",r="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+r),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+r),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+r),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=z}(),t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})}); From 017c99a7fd85b84b9628a496394569dc1cfdcb73 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 21:39:10 +0200 Subject: [PATCH 243/577] spectrum.css for colorpicker menu --- manager/media/style/common/spectrum.css | 524 ++++++++++++++++++++++++ 1 file changed, 524 insertions(+) create mode 100644 manager/media/style/common/spectrum.css diff --git a/manager/media/style/common/spectrum.css b/manager/media/style/common/spectrum.css new file mode 100644 index 0000000000..48dc1089d3 --- /dev/null +++ b/manager/media/style/common/spectrum.css @@ -0,0 +1,524 @@ +/*** +Spectrum Colorpicker v1.8.0 +https://github.com/bgrins/spectrum +Author: Brian Grinstead +License: MIT +***/ + +.sp-container { + position:absolute; + top:0; + left:0; + display:inline-block; + *display: inline; + *zoom: 1; + /* https://github.com/bgrins/spectrum/issues/40 */ + z-index: 9999994; + overflow: hidden; +} +.sp-container.sp-flat { + position: relative; + width:100%; + background:#FFF; + border:none; +} + +/* Fix for * { box-sizing: border-box; } */ +.sp-container, +.sp-container * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */ +.sp-top { + position:relative; + width: 100%; + display:inline-block; +} +.sp-top-inner { + position:absolute; + top:0; + left:0; + bottom:0; + right:0; +} +.sp-color { + position: absolute; + top:0; + left:0; + bottom:0; + right:20%; +} +.sp-hue { + position: absolute; + top:0; + right:0; + bottom:0; + left:84%; + height: 100%; +} + +.sp-clear-enabled .sp-hue { + top:33px; + height: 77.5%; +} + +.sp-fill { + padding-top: 80%; +} +.sp-sat, .sp-val { + position: absolute; + top:0; + left:0; + right:0; + bottom:0; +} + +.sp-alpha-enabled .sp-top { + margin-bottom: 18px; +} +.sp-alpha-enabled .sp-alpha { + display: block; +} +.sp-alpha-handle { + position:absolute; + top:-4px; + bottom: -4px; + width: 6px; + left: 50%; + cursor: pointer; + border: 1px solid black; + background: white; + opacity: .8; +} +.sp-alpha { + display: none; + position: absolute; + bottom: -14px; + right: 0; + left: 0; + height: 8px; +} +.sp-alpha-inner { + border: solid 1px #333; +} + +.sp-clear { + display: none; +} + +.sp-clear.sp-clear-display { + background-position: center; +} + +.sp-clear-enabled .sp-clear { + display: block; + position:absolute; + top:0px; + right:0; + bottom:0; + left:84%; + height: 28px; +} + +/* Don't allow text selection */ +.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { + -webkit-user-select:none; + -moz-user-select: -moz-none; + -o-user-select:none; + user-select: none; +} + +.sp-container.sp-input-disabled .sp-input-container { + display: none; +} +.sp-container.sp-buttons-disabled .sp-button-container { + display: none; +} +.sp-container.sp-palette-buttons-disabled .sp-palette-button-container { + display: none; +} +.sp-palette-only .sp-picker-container { + display: none; +} +.sp-palette-disabled .sp-palette-container { + display: none; +} + +.sp-initial-disabled .sp-initial { + display: none; +} + + +/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */ +.sp-sat { + background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; + filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); +} +.sp-val { + background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; + filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); +} + +.sp-hue { + background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); + background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); +} + +/* IE filters do not support multiple color stops. + Generate 6 divs, line them up, and do two color gradients for each. + Yes, really. + */ +.sp-1 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); +} +.sp-2 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); +} +.sp-3 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); +} +.sp-4 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); +} +.sp-5 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); +} +.sp-6 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); +} + +.sp-hidden { + display: none !important; +} + +/* Clearfix hack */ +.sp-cf:before, .sp-cf:after { content: ""; display: table; } +.sp-cf:after { clear: both; } +.sp-cf { *zoom: 1; } +button.sp-choose, .sp-cancel { display:none; } + +/* Mobile devices, make hue slider bigger so it is easier to slide */ +@media (max-device-width: 480px) { + .sp-color { right: 40%; } + .sp-hue { left: 63%; } + .sp-fill { padding-top: 60%; } +} +.sp-dragger { + border-radius: 5px; + height: 5px; + width: 5px; + border: 1px solid #fff; + background: #000; + cursor: pointer; + position:absolute; + top:0; + left: 0; +} +.sp-slider { + position: absolute; + top:0; + cursor:pointer; + height: 3px; + left: -1px; + right: -1px; + border: 1px solid #000; + background: white; + opacity: .8; +} + +/* +Theme authors: +Here are the basic themeable display options (colors, fonts, global widths). +See http://bgrins.github.io/spectrum/themes/ for instructions. +*/ + +.sp-container { + border-radius: 0; + background-color: #ECECEC; + border: solid 1px #f0c49B; + padding: 0; +} +.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear { + font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.sp-top { + margin-bottom: 3px; +} +.sp-color, .sp-hue, .sp-clear { + border: solid 1px #666; +} + +/* Input */ +.sp-input-container { + float:right; + width: 100px; + margin-bottom: 4px; +} +.sp-initial-disabled .sp-input-container { + width: 100%; +} +.sp-input { + font-size: 12px !important; + border: 1px inset; + padding: 4px 5px; + margin: 0; + width: 100%; + background:transparent; + border-radius: 3px; + color: #222; +} +.sp-input:focus { + border: 1px solid orange; +} +.sp-input.sp-validation-error { + border: 1px solid red; + background: #fdd; +} +.sp-picker-container , .sp-palette-container { + float:left; + position: relative; + padding: 10px; + padding-bottom: 300px; + margin-bottom: -290px; + margin-left:20px; + width:95%; + border:none; +} +.sp-picker-container { + width: 172px; + border-left: solid 1px #fff; +} + +/* Palettes */ +.sp-palette-container { + border-right: solid 1px #ccc; +} + +.sp-palette-only .sp-palette-container { + border: 0; +} + +.sp-palette .sp-thumb-el { + display: block; + position:relative; + float:left; + width: 24px; + height: 15px; + margin: 3px; + cursor: pointer; + border:solid 2px transparent; +} +.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active { + border-color: orange; +} +.sp-thumb-el { + position:relative; +} +.sp-palette-toggle {margin-right:117px;margin-top:3px;} + +.sp-container a.sp-palette-toggle{ +color:#1976d2; +cursor:pointer;} +} +.sp-container a.sp-palette-toggle:hover{ +background:#444; +} +} + +/* Initial */ +.sp-initial { + float: left; + border: solid 1px #333; +} +.sp-initial span { + width: 30px; + height: 25px; + border:none; + display:block; + float:left; + margin:0; +} + +.sp-initial .sp-clear-display { + background-position: center; +} + +/* Buttons */ +.sp-palette-button-container, +.sp-button-container { + float: right; +} + +/* Replacer (the little preview div that shows up instead of the ) */ +.sp-replacer { + margin:0; + overflow:hidden; + cursor:pointer; + padding: 4px; + display:inline-block; + *zoom: 1; + *display: inline; + border: solid 1px #91765d; + background: #eee; + color: #333; + vertical-align: middle; +} +.sp-replacer:hover, .sp-replacer.sp-active { + border-color: #F0C49B; + color: #111; +} +.sp-replacer.sp-disabled { + cursor:default; + border-color: silver; + color: silver; +} +.sp-dd { + padding: 2px 0; + height: 16px; + line-height: 16px; + float:left; + font-size:10px; +} +.sp-preview { + position:relative; + width:25px; + height: 20px; + border: solid 1px #222; + margin-right: 5px; + float:left; + z-index: 0; +} + +.sp-palette { + *width: 220px; + max-width: 220px; +} +.sp-palette .sp-thumb-el { + width:16px; + height: 16px; + margin:2px 1px; + border: solid 1px #d0d0d0; +} + +.sp-container { + padding-bottom:0; +} + + +/* Buttons: http://hellohappy.org/css3-buttons/ */ +.sp-container button { + background-color: #eeeeee; + background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc); + background-image: -moz-linear-gradient(top, #eeeeee, #cccccc); + background-image: -ms-linear-gradient(top, #eeeeee, #cccccc); + background-image: -o-linear-gradient(top, #eeeeee, #cccccc); + background-image: linear-gradient(to bottom, #eeeeee, #cccccc); + border: 1px solid #ccc; + border-bottom: 1px solid #bbb; + border-radius: 3px; + color: #333; + font-size: 14px; + line-height: 1; + padding: 5px 4px; + text-align: center; + text-shadow: 0 1px 0 #eee; + vertical-align: middle; +} +.sp-container button:hover { + background-color: #dddddd; + background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb); + background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb); + background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb); + background-image: -o-linear-gradient(top, #dddddd, #bbbbbb); + background-image: linear-gradient(to bottom, #dddddd, #bbbbbb); + border: 1px solid #bbb; + border-bottom: 1px solid #999; + cursor: pointer; + text-shadow: 0 1px 0 #ddd; +} +.sp-container button:active { + border: 1px solid #aaa; + border-bottom: 1px solid #888; + -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; +} +.sp-cancel { + font-size: 11px; + color: #d93f3f !important; + margin:0; + padding:2px; + margin-right: 5px; + vertical-align: middle; + text-decoration:none; + +} +.sp-cancel:hover { + color: #d93f3f !important; + text-decoration: underline; +} + + +.sp-palette span:hover, .sp-palette span.sp-thumb-active { + border-color: #000; +} + +.sp-preview, .sp-alpha, .sp-thumb-el { + position:relative; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); +} +.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { + display:block; + position:absolute; + top:0;left:0;bottom:0;right:0; +} + +.sp-palette .sp-thumb-inner { + background-position: 50% 50%; + background-repeat: no-repeat; +} + +.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); +} + +.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); +} + +.sp-clear-display { + background-repeat:no-repeat; + background-position: center; + background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); +} From baa6068613a064e83a9f983715aca248ff63678a Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 21:39:40 +0200 Subject: [PATCH 244/577] Rename manager/media/style/common/spectrum.css to manager/media/style/common/spectrum/spectrum.css --- manager/media/style/common/{ => spectrum}/spectrum.css | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename manager/media/style/common/{ => spectrum}/spectrum.css (100%) diff --git a/manager/media/style/common/spectrum.css b/manager/media/style/common/spectrum/spectrum.css similarity index 100% rename from manager/media/style/common/spectrum.css rename to manager/media/style/common/spectrum/spectrum.css From e16c407c7471b5b6f5be779043b658d55a61c76c Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 28 Sep 2017 21:41:50 +0200 Subject: [PATCH 245/577] menu color picker --- manager/frames/1.php | 61 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/manager/frames/1.php b/manager/frames/1.php index e61e8146d5..d4e9a6358b 100644 --- a/manager/frames/1.php +++ b/manager/frames/1.php @@ -84,6 +84,7 @@ + '; } @@ -671,13 +640,14 @@ function Run() { if (($this->autohide == 'false') && ($this->position == 'left')) { $css .= ' '; } @@ -685,14 +655,15 @@ function Run() { if (($this->autohide == 'true') && ($this->position == 'right')) { $css .= ' '; } @@ -701,13 +672,14 @@ function Run() { if (($this->autohide == 'false') && ($this->position == 'right')) { $css .= ' '; } From b339116966e22ed855b5dfc3c31c77344e865ffb Mon Sep 17 00:00:00 2001 From: Mr B Date: Sun, 8 Oct 2017 16:48:32 +0100 Subject: [PATCH 276/577] hide usericon when max 728px as without text it has no meaning --- assets/plugins/qm/qm.inc.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/plugins/qm/qm.inc.php b/assets/plugins/qm/qm.inc.php index b1e13fa726..507258d946 100755 --- a/assets/plugins/qm/qm.inc.php +++ b/assets/plugins/qm/qm.inc.php @@ -519,6 +519,7 @@ function Run() { .butticon {display:inline} @media only screen and (max-width: 728px) { .butttext {display:none} + #qmUser {display:none} } @media only screen and (min-device-width: 768px) @@ -541,6 +542,7 @@ function Run() { .butticon {display:none} @media only screen and (max-width: 728px) { .butttext {display:none} + #qmUser {display:none} } @media only screen and (min-device-width: 768px) @@ -563,6 +565,7 @@ function Run() { .butticon {display:none} @media only screen and (max-width: 728px) { .butttext {display:none} + #qmUser {display:none} } @media only screen and (min-device-width: 768px) @@ -585,6 +588,7 @@ function Run() { .butticon {display:none} @media only screen and (max-width: 728px) { .butttext {display:none} + #qmUser {display:none} } @media only screen and (min-device-width: 768px) @@ -607,6 +611,7 @@ function Run() { .butticon {display:none} @media only screen and (max-width: 728px) { .butttext {display:none} + #qmUser {display:none} } @media only screen and (min-device-width: 768px) From efe0af72b13b51217a841bf0114dfc6d3470c46c Mon Sep 17 00:00:00 2001 From: Mr B Date: Sun, 8 Oct 2017 17:12:39 +0100 Subject: [PATCH 277/577] minor fix --- assets/plugins/qm/css/style.css | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/plugins/qm/css/style.css b/assets/plugins/qm/css/style.css index 948440dc28..6bbb6d421e 100755 --- a/assets/plugins/qm/css/style.css +++ b/assets/plugins/qm/css/style.css @@ -253,9 +253,7 @@ } #qmEditor .qmId { - font-size: 16px; - line-height: 28px; - color: #bbb; + color: #bbb; font-weight: normal; } #qmEditor .qmButton span From d7b3c479712e9fd6f386cdb870be768fb67f4089 Mon Sep 17 00:00:00 2001 From: Andrej Kabachnik Date: Mon, 9 Oct 2017 13:21:41 +0200 Subject: [PATCH 278/577] Update mutate_menuindex_sort.dynamic.php --- manager/actions/mutate_menuindex_sort.dynamic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/actions/mutate_menuindex_sort.dynamic.php b/manager/actions/mutate_menuindex_sort.dynamic.php index 28b256c1de..44ae7c01d7 100644 --- a/manager/actions/mutate_menuindex_sort.dynamic.php +++ b/manager/actions/mutate_menuindex_sort.dynamic.php @@ -168,7 +168,7 @@ function resetSortOrder() - Date: Mon, 9 Oct 2017 13:22:51 +0200 Subject: [PATCH 279/577] Update sysinfo.static.php --- manager/actions/sysinfo.static.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/actions/sysinfo.static.php b/manager/actions/sysinfo.static.php index 091dbae92d..65c7774ee6 100644 --- a/manager/actions/sysinfo.static.php +++ b/manager/actions/sysinfo.static.php @@ -62,7 +62,7 @@ function viewPHPInfo()   - From f7337e41db385acf57dcb9646f38e3d6633eab8d Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Wed, 11 Oct 2017 13:02:12 +0300 Subject: [PATCH 280/577] fix error if empty docRow --- manager/includes/document.parser.class.inc.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index b8e348dd49..d10e09a455 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -4656,14 +4656,16 @@ function getTemplateVars($idnames = array(), $fields = '*', $docid = '', $publis $result = $this->db->makeArray($rs); // get default/built-in template variables - ksort($docRow); - - foreach ($docRow as $key => $value) { - if ($idnames == '*' || in_array($key, $idnames)) { - array_push($result, array( - 'name' => $key, - 'value' => $value - )); + if(is_array($docRow)){ + ksort($docRow); + + foreach ($docRow as $key => $value) { + if ($idnames == '*' || in_array($key, $idnames)) { + array_push($result, array( + 'name' => $key, + 'value' => $value + )); + } } } From 71aa08d6167489e7f48284d542e7b8d806fa65bb Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Wed, 11 Oct 2017 15:29:24 +0300 Subject: [PATCH 281/577] update DocLister --- assets/lib/Helpers/Assets.php | 10 +++-- assets/lib/Helpers/Config.php | 3 -- assets/lib/MODxAPI/modUsers.php | 1 - .../DocLister/core/DocLister.abstract.php | 41 +++++++++++-------- .../DocLister/core/controller/onetable.php | 4 -- .../DocLister/core/controller/shopkeeper.php | 4 -- .../core/controller/site_content.php | 4 -- .../core/controller/site_content_filters.php | 4 -- .../core/controller/site_content_menu.php | 12 +++--- .../core/controller/site_content_tags.php | 4 -- .../DocLister/core/extDocLister.abstract.php | 3 -- .../DocLister/core/extender/e.extender.inc | 3 -- .../core/extender/example.extender.inc | 4 -- .../core/extender/jotcount.extender.inc | 4 -- .../core/extender/paginate.extender.inc | 26 ++++++------ .../core/extender/prepare.extender.inc | 4 -- .../core/extender/request.extender.inc | 4 -- .../core/extender/summary.extender.inc | 4 -- .../core/extender/template.extender.inc | 4 -- .../DocLister/core/extender/tv.extender.inc | 4 -- .../DocLister/core/extender/user.extender.inc | 4 -- .../DocLister/core/filter/content.filter.php | 4 -- .../DocLister/core/filter/private.filter.php | 4 -- .../DocLister/core/filter/tv.filter.php | 4 -- .../DocLister/core/filter/tvd.filter.php | 4 -- .../core/filterDocLister.abstract.php | 3 -- .../DocLister/lib/jsonHelper.class.php | 3 -- 27 files changed, 50 insertions(+), 123 deletions(-) mode change 100755 => 100644 assets/snippets/DocLister/core/controller/site_content_filters.php mode change 100755 => 100644 assets/snippets/DocLister/core/controller/site_content_tags.php mode change 100755 => 100644 assets/snippets/DocLister/core/extDocLister.abstract.php mode change 100755 => 100644 assets/snippets/DocLister/core/extender/example.extender.inc mode change 100755 => 100644 assets/snippets/DocLister/core/extender/request.extender.inc mode change 100755 => 100644 assets/snippets/DocLister/core/extender/summary.extender.inc mode change 100755 => 100644 assets/snippets/DocLister/core/extender/template.extender.inc mode change 100755 => 100644 assets/snippets/DocLister/core/extender/user.extender.inc mode change 100755 => 100644 assets/snippets/DocLister/core/filter/content.filter.php mode change 100755 => 100644 assets/snippets/DocLister/core/filter/private.filter.php mode change 100755 => 100644 assets/snippets/DocLister/core/filter/tv.filter.php mode change 100755 => 100644 assets/snippets/DocLister/core/filter/tvd.filter.php mode change 100755 => 100644 assets/snippets/DocLister/core/filterDocLister.abstract.php mode change 100755 => 100644 assets/snippets/DocLister/lib/jsonHelper.class.php diff --git a/assets/lib/Helpers/Assets.php b/assets/lib/Helpers/Assets.php index bead2df571..73829d61f8 100644 --- a/assets/lib/Helpers/Assets.php +++ b/assets/lib/Helpers/Assets.php @@ -73,13 +73,15 @@ public function registerJQuery() $output = ''; $plugins = $this->modx->pluginEvent; //файл проверяется чтобы определить новую админку - if ((array_search('ManagerManager', $plugins['OnDocFormRender']) === false) || !file_exists(MODX_MANAGER_PATH . 'media/script/jquery/jquery.min.js')) { - $output .= $this->registerScript('jQuery', array( + if (file_exists(MODX_MANAGER_PATH . 'media/script/jquery/jquery.min.js') || array_search('ManagerManager', $plugins['OnDocFormRender']) !== false) { + return $output; + } + + $output .= $this->registerScript('jQuery', array( 'src' => 'assets/js/jquery/jquery-1.9.1.min.js', 'version' => '1.9.1' )); - $output .= ''; - } + $output .= ''; return $output; } diff --git a/assets/lib/Helpers/Config.php b/assets/lib/Helpers/Config.php index 4500ca7ad5..6b1c70e3a2 100644 --- a/assets/lib/Helpers/Config.php +++ b/assets/lib/Helpers/Config.php @@ -1,8 +1,5 @@ set('sessionid', ''); $fld = $this->toArray(); foreach ($this->default_field['user'] as $key => $value) { diff --git a/assets/snippets/DocLister/core/DocLister.abstract.php b/assets/snippets/DocLister/core/DocLister.abstract.php index ae939f9672..ed6202ea98 100644 --- a/assets/snippets/DocLister/core/DocLister.abstract.php +++ b/assets/snippets/DocLister/core/DocLister.abstract.php @@ -1,7 +1,4 @@ get_join(); - $output['where'] = $filter->get_where(); + $output['where'] = stripslashes($filter->get_where()); } } $this->debug->debug('getFilter'); @@ -1698,23 +1699,29 @@ protected function loadFilter($filter) $out = false; $fltr_params = explode(':', $filter, 2); $fltr = APIHelpers::getkey($fltr_params, 0, null); + /** + * @var tv_DL_filter|content_DL_filter $fltr_class + */ + $fltr_class = $fltr . '_DL_filter'; // check if the filter is implemented - if (!is_null($fltr) && file_exists(dirname(__FILE__) . '/filter/' . $fltr . '.filter.php')) { - require_once dirname(__FILE__) . '/filter/' . $fltr . '.filter.php'; - /** - * @var tv_DL_filter|content_DL_filter $fltr_class - */ - $fltr_class = $fltr . '_DL_filter'; - $this->totalFilters++; - $fltr_obj = new $fltr_class(); - if ($fltr_obj->init($this, $filter)) { - $out = $fltr_obj; - } else { - $this->debug->error("Wrong filter parameter: '{$this->debug->dumpData($filter)}'", 'Filter'); + if (!is_null($fltr)) { + if (!class_exists($fltr_class) && file_exists(__DIR__ . '/filter/' . $fltr . '.filter.php')) { + require_once dirname(__FILE__) . '/filter/' . $fltr . '.filter.php'; } - } else { + if (class_exists($fltr_class)) { + $this->totalFilters++; + $fltr_obj = new $fltr_class(); + if ($fltr_obj->init($this, $filter)) { + $out = $fltr_obj; + } else { + $this->debug->error("Wrong filter parameter: '{$this->debug->dumpData($filter)}'", 'Filter'); + } + } + } + if (!$out) { $this->debug->error("Error load Filter: '{$this->debug->dumpData($filter)}'", 'Filter'); } + $this->debug->debugEnd("loadFilter"); return $out; diff --git a/assets/snippets/DocLister/core/controller/onetable.php b/assets/snippets/DocLister/core/controller/onetable.php index c4f8f16cb3..ccf6d28e7c 100644 --- a/assets/snippets/DocLister/core/controller/onetable.php +++ b/assets/snippets/DocLister/core/controller/onetable.php @@ -1,8 +1,4 @@ getCFGDef('rowTpl', '@CODE:[+title+]'); - if ($data['wrap']) { + if (!empty($data['wrap'])) { $tpl = $this->getCFGDef('parentRowTpl', '@CODE:[+title+][+wrap+]'); if ((isset($data['template']) && !$data['template']) || (isset($data['link_attributes']) && strpos($data['link_attributes'], 'category') !== false) ) { $tpl = $this->getCFGDef('categoryFolderTpl', $tpl); - } elseif ($data['here']) { + } elseif (isset($data['here'])) { $tpl = $this->getCFGDef('parentRowHereTpl', $tpl); - } elseif ($data['active']) { + } elseif (isset($data['active'])) { $tpl = $this->getCFGDef('parentRowActiveTpl', $tpl); } } elseif ($data['level'] > 1) { $tpl = $this->getCFGDef('innerRowTpl', $tpl); - if ($data['here']) { + if (isset($data['here'])) { $tpl = $this->getCFGDef('innerRowHereTpl', $tpl); } } else { - if ($data['here']) { + if (isset($data['here'])) { $tpl = $this->getCFGDef('rowHereTpl', $tpl); } } diff --git a/assets/snippets/DocLister/core/controller/site_content_tags.php b/assets/snippets/DocLister/core/controller/site_content_tags.php old mode 100755 new mode 100644 index cc35b751a5..a89934fdb1 --- a/assets/snippets/DocLister/core/controller/site_content_tags.php +++ b/assets/snippets/DocLister/core/controller/site_content_tags.php @@ -1,8 +1,4 @@ * */ -if (!defined('MODX_BASE_PATH')) { - die('HACK???'); -} include_once(MODX_BASE_PATH . 'assets/lib/APIHelpers.class.php'); /** diff --git a/assets/snippets/DocLister/core/extender/e.extender.inc b/assets/snippets/DocLister/core/extender/e.extender.inc index e672fb4d4e..b49eb2ec97 100644 --- a/assets/snippets/DocLister/core/extender/e.extender.inc +++ b/assets/snippets/DocLister/core/extender/e.extender.inc @@ -1,7 +1,4 @@ DocLister->toPlaceholders($pages + 1 - $this->currentPage(), 1, "current"); + if ($this->reverse) { + $currentPage = $pages + 1 - $this->currentPage(); + $diff = $currentPage == $this->totalPage() ? 0 : $display * $pages - $this->count; + $from = ($this->currentPage() - 1) * $display + 1 - $diff; + $to = $currentPage == $this->totalPage() ? $display : $from - 1 + $display; + } else { + $currentPage = $this->currentPage(); + $from = ($this->currentPage() - 1) * $display + 1; + $to = $currentPage == $this->totalPage() ? $this->count : $from - 1 + $display; + } + $this->DocLister->toPlaceholders($currentPage, 1, "current"); + $this->DocLister->toPlaceholders($from, 1, "from"); + $this->DocLister->toPlaceholders($to, 1, "to"); $this->DocLister->toPlaceholders($this->renderPages($paginate), 1, "pages"); $this->DocLister->toPlaceholders(($this->currentPage() == 1 ? 1 : 0), 1, "isstart"); //[+isstart+] – is start page $this->DocLister->toPlaceholders(($this->currentPage() == $pages ? 1 : 0), 1, "isstop"); //[+isstop+] – is end page $this->DocLister->toPlaceholders($pages, 1, "totalPages"); // [+totalPages+] - total page. - $limit = $this->DocLister->getCFGDef('maxDocs', 0); if ($limit > 0 && !$this->reverse) { switch ($paginate) { @@ -129,7 +135,7 @@ class paginate_DL_Extender extends extDocLister $this->_pages['total'] = 1; } else { $addTables = $this->DocLister->AddTable; - $tmp = $this->count = $this->DocLister->getChildrenCount(); + $tmp = $this->count = (int)$this->DocLister->getChildrenCount(); $this->DocLister->AddTable = $addTables; $display = $this->DocLister->getCFGDef('display', 0); @@ -138,10 +144,6 @@ class paginate_DL_Extender extends extDocLister 0) ) { $this->DocLister->toPlaceholders($tmp, 1, "count"); - $from = ($this->currentPage() - 1) * $display + 1; - $this->DocLister->toPlaceholders($from, 1, "from"); - $to = ($this->currentPage() == $this->totalPage()) ? $from - 1 + $tmp - ($this->currentPage() - 1) * $display : $from - 1 + $display; - $this->DocLister->toPlaceholders($to, 1, "to"); } else { $this->modx->sendRedirect($this->getUrl()); } diff --git a/assets/snippets/DocLister/core/extender/prepare.extender.inc b/assets/snippets/DocLister/core/extender/prepare.extender.inc index 4a566a3224..0e8c16ab94 100644 --- a/assets/snippets/DocLister/core/extender/prepare.extender.inc +++ b/assets/snippets/DocLister/core/extender/prepare.extender.inc @@ -1,8 +1,4 @@ */ -if (!defined('MODX_BASE_PATH')) { - die('HACK???'); -} /** * Class filterDocLister diff --git a/assets/snippets/DocLister/lib/jsonHelper.class.php b/assets/snippets/DocLister/lib/jsonHelper.class.php old mode 100755 new mode 100644 index b6069ae5f9..e5b9df9a3b --- a/assets/snippets/DocLister/lib/jsonHelper.class.php +++ b/assets/snippets/DocLister/lib/jsonHelper.class.php @@ -1,7 +1,4 @@ Date: Thu, 12 Oct 2017 15:14:07 +0300 Subject: [PATCH 282/577] =?UTF-8?q?=D0=A1=D0=BC=D0=B5=D0=BD=D0=B0=20=D1=80?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8F=20=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=83=D1=80=D1=81=D0=B0=20=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=BA=D0=B0=20=D1=81=D0=BE=D1=81=D0=B5=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Чтобы можно было перенести ресурс внутрь "соседа", нужно проверять не oldparent, а id существующего ресурса, иначе эта проверка не даст перенести ресурс внутрь соседа, так как oldparent окажется среди массива parents. --- manager/processors/save_content.processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index e6a75ed350..df3c8f59ef 100644 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -463,7 +463,7 @@ } $parents = $modx->getParentIds($parent); - if (in_array($oldparent, $parents)) { + if (in_array($id, $parents)) { $modx->webAlertAndQuit("Document descendant can not be it's parent!"); } From 92b6843e19f6dfb91b87c0f6b5bd84ee3eb6ebc9 Mon Sep 17 00:00:00 2001 From: Mr B Date: Tue, 17 Oct 2017 09:09:26 +0100 Subject: [PATCH 283/577] [F] Manager and User account country list sort Ensure dropdown list of countries is sorted alphabetically --- manager/actions/mutate_web_user.dynamic.php | 1 + 1 file changed, 1 insertion(+) diff --git a/manager/actions/mutate_web_user.dynamic.php b/manager/actions/mutate_web_user.dynamic.php index 1f5addadda..604bd5497b 100644 --- a/manager/actions/mutate_web_user.dynamic.php +++ b/manager/actions/mutate_web_user.dynamic.php @@ -83,6 +83,7 @@ } else { include_once "lang/country/english_country.inc.php"; } +asort($_country_lang); $displayStyle = ($_SESSION['browser'] === 'modern') ? 'table-row' : 'block'; ?> From 289a9ef0183f344efec6cc3ae4aecb7c9b623d05 Mon Sep 17 00:00:00 2001 From: Mr B Date: Tue, 17 Oct 2017 09:12:40 +0100 Subject: [PATCH 284/577] Update mutate_user.dynamic.php --- manager/actions/mutate_user.dynamic.php | 1 + 1 file changed, 1 insertion(+) diff --git a/manager/actions/mutate_user.dynamic.php b/manager/actions/mutate_user.dynamic.php index c8395e91ed..0cb84e18d6 100644 --- a/manager/actions/mutate_user.dynamic.php +++ b/manager/actions/mutate_user.dynamic.php @@ -87,6 +87,7 @@ if($manager_language != "english" && file_exists($modx->config['site_manager_path'] . "includes/lang/country/" . $manager_language . "_country.inc.php")) { include_once "lang/country/" . $manager_language . "_country.inc.php"; } +asort($_country_lang); $displayStyle = ($_SESSION['browser'] === 'modern') ? 'table-row' : 'block'; if($which_browser == 'default') { From cff0e3d3355da9759f156cb3dbc45a601dd7e725 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 17 Oct 2017 12:08:43 +0200 Subject: [PATCH 285/577] color.switcher.css --- .../style/default/css/color.switcher.css | 298 ++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 manager/media/style/default/css/color.switcher.css diff --git a/manager/media/style/default/css/color.switcher.css b/manager/media/style/default/css/color.switcher.css new file mode 100644 index 0000000000..dba6f9409b --- /dev/null +++ b/manager/media/style/default/css/color.switcher.css @@ -0,0 +1,298 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +.evocp-box { + position: fixed; + width: 300px; + min-height: 100%; + top: 35px; + right: -270px; + color: #444; + z-index: 10; + transition: 0.5s cubic-bezier(1, 1.48, 0.76, 0.95) right; +} +.evocp-icon { + position: absolute; + width: 34px; + height: 29px; + vertical-align: middle; + line-height: 28px; + left: 0; + bottom: 440; + background: #fafafa; + box-shadow: -2px 0px 3px 1px rgba(0, 0, 0, 0.1); + border-radius: 50% 0 0 50%; + text-align: center; + font-size: 17px; + cursor: pointer; + z-index: 10; + -webkit-animation: colorchange 15s infinite alternate; +} +.dark .evocp-icon { + background: #2f323a; + border: 1px solid #2f323a; + border-right: 0; + -webkit-animation: colorchange 15s infinite alternate; +} +i.evocpicon:hover { + -webkit-transform: rotate(30deg); + -moz-transform: rotate(30deg); + -ms-transform: rotate(30deg); + -o-transform: rotate(30deg); + transform: rotate(30deg); + +} +@keyframes colorchange { + 0% { + color: #b45f06; + } + 10% { + color: #38761d; + } + 20% { + color: #134f5c; + } + 30% { + color: #0b5394; + } + 40% { + color: #351c75; + } + 50% { + color: #741b47; + } + 60% { + color: blue; + } + 70% { + color: #2980b9; + } + 80% { + color: #f1c40f; + } + 90% { + color: #2980b9; + } + 100% { + color: #900; + } +} +@-webkit-keyframes colorchange +/* Safari and Chrome - necessary duplicate */ + +{ + 0% { + color: #b45f06; + } + 10% { + color: #38761d; + } + 20% { + color: #134f5c; + } + 30% { + color: #0b5394; + } + 40% { + color: #351c75; + } + 50% { + color: #741b47; + } + 60% { + color: blue; + } + 70% { + color: #2980b9; + } + 80% { + color: #f1c40f; + } + 90% { + color: #2980b9; + } + 100% { + color: #900; + } +} +.evocp-box .evocp-frame { + position: absolute; + width: calc(100% - 30px); + height: 100%; + top: 0; + right: 0; + background: #fafafa; + box-shadow: -3px 0px 4px 1px rgba(0, 0, 0, 0.1); + text-align: center; + font-weight: 700; + color: #444; + padding: 0px 0px 20px 0px; +} +.dark .evocp-box .evocp-frame { + color: #dedede; + background: #202329; + border-top: 1px solid #2f323a; +} +.evocp-box .evocp-menuHColors, +.evocp-box .evocp-menuColors, +.evocp-box .evocp-bgmcolors, +.evocp-box .evocp-colors, +.evocp-box .evocp-alinkcolors { + margin: 10px; + padding-bottom: 20px; +} +.evocp-box .evocp-menuHColor, +.evocp-box .evocp-menuColor, +.evocp-box .evocp-bgmcolor, +.evocp-box .evocp-color, +.evocp-box .evocp-alinkcolor { + position: relative; + float: left; + margin: 2px; + height: 31px; + width: 31px; + max-height: 31px; + max-width: 31px; + background: #2f323a; + color: transparent; + overflow: hidden; + cursor: pointer; + border: 1px solid #646b7b; + border-radius: 50%; +} +.evocp-box .evocp-custom-colors, +.evocp-box .evocp-custom-colors { + clear: both; + padding-top: 20px; +} +.evocp-box input[name="evocpCustomalinkcolor"], +.evocp-box input[name="evocpCustommenuColor"], +.evocp-box input[name="evocpCustommenuHColor"], +.evocp-box input[name="evocpCustombgmColor"], +.evocp-box input[name="evocpCustomTXColor"] { + margin: 10px 0 0 -4px; + cursor: pointer; + height: 30px; + width: 30px; + border-radius: 50%; + border: none; + outline: none; + background: transparent; + padding: 0; +} +.appear-it { + right: 0; +} + +.evocp-frame h2 { + font-size: 1.0rem; + line-height: 1.6rem; + border-bottom: 1px solid #dedede; + padding-top: 4px; + /* -webkit-animation: colorchange 20s infinite alternate;*/ +} +.dark .evocp-frame h2 { + background-color: #2f323a; + border-bottom: 1px solid #dedede; +} +.evocp-frame .panel-heading h3 { + cursor: pointer; + display: inline-block; + font-size: 0.8rem; + line-height: 1.1rem; + margin-top: 9px; +} +.evocp-frame .panel-heading h3:hover { + color: #000; +} +.dark .evocp-frame h3:hover { + color: #fff; +} +.evocp-frame .panel-heading { + text-align: left; + border-top: 1px solid #dedede; + border-bottom: 1px solid #dedede; + background-color: #f2f2f2; + margin-bottom: 2px; + padding: 0 0 0 8px; + text-transform: uppercase; +} +.dark .evocp-frame .panel-heading { + background-color: #2f323a; + border-color: #3e4144; +} +.evocp-frame .panel-heading .btn { + margin-top: 2px +} +.dark .evocp-frame .panel-heading .btn { + background-color: #2f323a; + border-color: #3e4144; + color: #fafafa; +} +.dark .evocp-frame .panel-heading .btn:hover { + background-color: #1a1c21; +} +.dark .evocp-frame h2 { + border-color: #3e4144; +} +.evocp-frame .panel-heading .togglearrow { + width: 10px; + font-size: 10px; + color: #bbb; + margin-right: 2px; + margin-top:-5px; +} +.evocp-box .evocp-menuHColor.colorSelected:before, +.evocp-box .evocp-menuColor.colorSelected:before, +.evocp-box .evocp-bgmcolor.colorSelected:before, +.evocp-box .evocp-color.colorSelected:before, +.evocp-box .evocp-alinkcolor.colorSelected:before { + font-family: FontAwesome; + content: "\f1fc"; + display: inline-block; + padding-top: 3px; + vertical-align: middle; + color: #FFF; +} +.evocp-box .evocp-menuHColor.evocp_light.colorSelected:before, +.evocp-box .evocp-menuColor.evocp_light.colorSelected:before, +.evocp-box .evocp-bgmcolor.evocp_light.colorSelected:before, +.evocp-box .evocp-color.evocp_light.colorSelected:before, +.evocp-box .evocp-alinkcolor.evocp_light.colorSelected:before { + color: #444!important; +} + +.dark .evocp-box .btn-secondary{ + background-color: #2f323a; + border-color: #3e4144; + color: #fafafa; +} +/*fix for mainmenu*/ +/* +#mainMenu.show .nav > li.dropdown.hover > a { + background-color: #fff; + color: #666!important; +} +/* color picker*/ +.sp-picker-container { + width:200px + border-left:0!important; +} +.sp-container {width:270px; background: #f2f2f2; border: 1px solid #dedede;} +.dark .sp-container {background: #2f323a; border: 1px solid #3e4144;} +.evo-cp-replacer, .sp-replacer.sp-light {padding:2px; background: #f2f2f2; border-color: #dedede; margin:3px auto;} +.dark .evo-cp-replacer, .dark .sp-replacer.sp-light {background: #2f323a; border-color: #3e4144;} +.sp-dd {margin-top:4px;color:#666;} +.dark .sp-dd {color:#bcbec0;} +.sp-preview { + height: 25px; + width: 25px; + max-height: 25px; + max-width: 25px; + overflow: hidden; + cursor: pointer; + border-radius: 50%; + border: 0px solid #2f323a; +} From 2b6ff4904e3c93a1b8da227f23071f2c493df9b6 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 17 Oct 2017 12:09:16 +0200 Subject: [PATCH 286/577] color.switcher.js --- .../media/style/default/js/color.switcher.js | 282 ++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 manager/media/style/default/js/color.switcher.js diff --git a/manager/media/style/default/js/color.switcher.js b/manager/media/style/default/js/color.switcher.js new file mode 100644 index 0000000000..e07c2166f6 --- /dev/null +++ b/manager/media/style/default/js/color.switcher.js @@ -0,0 +1,282 @@ +//Evolution color switcher +jQuery(document).ready(function($) { + //appear the evo colors switcher sidebar + $('.evocp-box .evocp-icon').on('click', function() { + $('.evocp-box').toggleClass('appear-it'); + }); + $('.evocp-box').attr('unselectable', 'on') + .css('user-select', 'none') + .on('selectstart', false); + + //vars// + var bgmcolor; + var color; + var menuColor; + var menuHColor; + var alinkcolor; + + // Get text color + var my_evo_color = localStorage.getItem('my_evo_color'); + if (my_evo_color) { + color = my_evo_color; + setColor(color); + } + // Get alink color + var my_evo_alinkcolor = localStorage.getItem('my_evo_alinkcolor'); + if (my_evo_alinkcolor) { + alinkcolor = my_evo_alinkcolor; + setalinkColor(alinkcolor); + } + // Get background menu color + var my_evo_bgmcolor = localStorage.getItem('my_evo_bgmcolor'); + if (my_evo_bgmcolor) { + bgmcolor = my_evo_bgmcolor; + setBgmColor(bgmcolor); + } + // Get menu link color + var my_evo_menuColor = localStorage.getItem('my_evo_menuColor'); + if (my_evo_menuColor) { + menuColor = my_evo_menuColor; + setMenuColor(menuColor); + } + // Get menu link hover color + var my_evo_menuHColor = localStorage.getItem('my_evo_menuHColor'); + if (my_evo_menuHColor) { + menuHColor = my_evo_menuHColor; + setMenuHColor(menuHColor); + } + + //Menu background part + + //change elements colors + function setBgmColor(bgmcolor) { + $('[data-evocp="bgmColor"]').css('backgroundColor', bgmcolor); + $('#mainMenu li.item > a').mouseover(function() { + $(this).css('backgroundColor', bgmcolor); + $(this).css('color', '#fff'); + }).mouseout(function() { + $(this).css('backgroundColor', '#FFF'); + $(this).css('color', '#444'); + }); + } + //store the color value in a variable + $('.evocp-bgmcolor').each(function(i) { + $('.evocp-bgmcolor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-bgmcolor').eq(i).on('click', function() { + bgmcolor = $(this).css('backgroundColor'); + // Save the color in local storage + localStorage.setItem('my_evo_bgmcolor', bgmcolor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + //Color Picker colors + $('.bgmPicker .sp-top-inner').on('click', function() { + bgmcolor = $('.bgmcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_bgmcolor', bgmcolor); + setBgmColor(bgmcolor); + }); + $('.bgmPicker .sp-input').on('keydown', function() { + bgmcolor = $('.bgmcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_bgmcolor', bgmcolor); + setBgmColor(bgmcolor); + }); + //apply colors + $('*').on('click', function() { + setBgmColor(bgmcolor); + }); + + /////menu link Color part + + //change elements colors + function setMenuColor(menucolor) { + $('[data-evocp="menuColor"]').css('color', menuColor); + $("#mainMenu:not(.show) .nav > li > a").css('color', menuColor); + $("#mainMenu .nav .label_searchid").css('color', menuColor); + $("#mainMenu.show .nav > li > a").css('color', '#444!important'); + } + //store the color value in a variable + $('.evocp-menuColor').each(function(i) { + $('.evocp-menuColor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-menuColor').eq(i).on('click', function() { + menuColor = $(this).css('backgroundColor'); + // Save the color in local storage + localStorage.setItem('my_evo_menuColor', menuColor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + + //Color Picker colors + $('.menucolorPicker .sp-top-inner').on('click', function() { + menuColor = $('.menuColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuColor', menuColor); + setMenuColor(menuColor); + }); + $('.menucolorPicker .sp-input').on('keydown', function() { + menuColor = $('.menuColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuColor', menuColor); + setMenuColor(menuColor); + }); + //apply colors + $('*').on('click', function() { + setMenuColor(menuColor); + }); + + /////menu link Hover Color + + //change elements colors + function setMenuHColor(menuHcolor) { + $('[data-evocp="menuHColor"]').css('color', menuHColor); + $('#mainMenu .nav > li:not(.active) > a.hover').css('color', menuHColor); + $('[data-evocp="menuColor"].hover').css('color', menuHColor); + + //$('#evo-tab-home.tab.selected').css('backgroundColor', bgcolor); + + $('#mainMenu .nav > li:not(.active) > a').mouseover(function() { + $(this).css('color', menuHColor); + }).mouseout(function() { + $(this).css('color', menuColor); + }); + $('#mainMenu .nav .label_searchid').mouseover(function() { + $(this).css('color', menuHColor); + }).mouseout(function() { + $(this).css('color', menuColor); + }); + $('#mainMenu .nav > li.active > a').css('color', menuHColor); + //#mainMenu.show .nav > li.dropdown.hover > a + //$('#bgPicker').val('bgcolor'); + } + //store the color value in a variable + $('.evocp-menuHColor').each(function(i) { + $('.evocp-menuHColor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-menuHColor').eq(i).on('click', function() { + menuHColor = $(this).css('backgroundColor'); + // Save the color in local storage + localStorage.setItem('my_evo_menuHColor', menuHColor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + + //Color Picker colors + $('.menuHcolorPicker .sp-top-inner').on('click', function() { + menuHColor = $('.menuHColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuHColor', menuHColor); + setMenuHColor(menuHColor); + }); + $('.menuHcolorPicker .sp-input').on('keydown', function() { + menuHColor = $('.menuHColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuHColor', menuHColor); + setMenuHColor(menuHColor); + }); + //apply colors + $('*').on('click', function() { + setMenuHColor(menuHColor); + }); + + ///// Body Links color + //change elements colors + function setalinkColor(alinkcolor) { + $('[data-evocp="alinkcolor"]').css('color', alinkcolor); + //need fix and move to dedicated tree panel + // $('body:not(.dark) #treeRoot a:not(.deleted):not(.unpublished):not(.hidemenu) .title').css('color', alinkcolor); + // $('body #treeRoot a:not(.deleted):not(.unpublished):not(.hidemenu) .title').css('color', alinkcolor); + $('.container-body a:not(.btn)').css('color', alinkcolor); + } + //store the color value in a variable + $('.evocp-alinkcolor').each(function(i) { + $('.evocp-alinkcolor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-alinkcolor').eq(i).on('click', function() { + alinkcolor = $(this).css('backgroundColor'); + window.main.location.reload(); + // Save the color in local storage + localStorage.setItem('my_evo_alinkcolor', alinkcolor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + //Color Picker colors + $('.linkcolorPicker .sp-top-inner').on('click', function() { + alinkcolor = $('.alinkcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_alinkcolor', alinkcolor); + setalinkColor(alinkcolor); + window.main.location.reload(); + }); + $('.linkcolorPicker .sp-input').on('keydown', function() { + alinkcolor = $('.alinkcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_alinkcolor', alinkcolor); + setalinkColor(alinkcolor); + window.main.location.reload(); + }); + //apply colors + $('*').on('click', function() { + setalinkColor(alinkcolor); + }); + + /////Body text color + //change elements colors + function setColor(color) { + $('[data-evocp="color"]').css('color', color); + $('[data-evocp="borderColor"]').css('border-color', color); + $('h1 .fa:not(.help)').css('color', color); + $('.widgets .card-header').css('color', color); + } + //store the color value in a variable + $('.evocp-color').each(function(i) { + $('.evocp-color').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-color').eq(i).on('click', function() { + color = $(this).css('backgroundColor'); + window.main.location.reload(); + // Save the color in local storage + localStorage.setItem('my_evo_color', color); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + //alert("Text color is " + color); + + }); + }); + + //custom colors + $('.textcolorPicker .sp-top-inner').on('click', function() { + color = $('.cpcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_color', color); + setColor(color); + window.main.location.reload(); + }); + + //apply colors + $('*').on('click', function() { + setColor(color); + }); + + +////close document ready +}); +//clear Local Storage and reload only main frame +function cleanLocalStorageReloadMain(keys) { + keys = keys.split(','); + for (var i = 0; i < keys.length; i++) { + delete localStorage[keys[i]]; + } + window.main.location.reload(); +} +//clear Local Storage and reload all frames +function cleanLocalStorageReloadAll(keys) { + keys = keys.split(','); + for (var i = 0; i < keys.length; i++) { + delete localStorage[keys[i]]; + } + location.reload(); +} +//toggle chevron icon +jQuery(document).on('click', '.panel-heading h3', function(e) { + var $this = $(this); + icon = $(this).find("i.togglearrow"); + icon.toggleClass("fa-chevron-right fa-chevron-down") + +}) From 9bbb915b05370043746d19b21f600ed276e26495 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 17 Oct 2017 12:09:46 +0200 Subject: [PATCH 287/577] color.switcher.php --- .../media/style/default/color.switcher.php | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 manager/media/style/default/color.switcher.php diff --git a/manager/media/style/default/color.switcher.php b/manager/media/style/default/color.switcher.php new file mode 100644 index 0000000000..34ea0351d5 --- /dev/null +++ b/manager/media/style/default/color.switcher.php @@ -0,0 +1,170 @@ +
          +
          +
          +

          COLOR SWITCHER

          +
          +
          +

          Menu Background

          +
          +
          +
          +
          #000
          +
          #222
          +
          #333
          +
          #444
          +
          #555
          +
          #777
          +
          #888
          +
          #0f243e
          +
          #548dd4
          +
          #134f5c
          +
          #0b5394
          +
          #351c75
          +
          #741b47
          +
          #900
          +
          + +
          +
          +
          +
          +

          Menu links

          +
          + +
          + +
          +
          +

          Menu links:hover

          +
          + +
          +
          +
          +

          Text color

          +
          +
          +
          +
          #000
          +
          #222
          +
          #333
          +
          #444
          +
          #555
          +
          #777
          +
          #888
          +
          #b45f06
          +
          #38761d
          +
          #134f5c
          +
          #0b5394
          +
          #351c75
          +
          #741b47
          +
          #9d2661
          +
          + +
          +
          +
          +
          +

          Links Color

          +
          +
          +
          +
          #000
          +
          #222
          +
          #555
          +
          #666
          +
          #dedede
          +
          #fafafa
          +
          #fff
          +
          #b45f06
          +
          #38761d
          +
          #134f5c
          +
          #0b5394
          +
          #351c75
          +
          #741b47
          +
          #9d2661
          +
          + +
          +
          +
          + +
          +
          + From 86a79c1bf39fb567746975f84a1159ec219b995f Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 17 Oct 2017 12:10:33 +0200 Subject: [PATCH 288/577] updated spectrum.css --- .../media/style/common/spectrum/spectrum.css | 1028 ++++++++--------- 1 file changed, 514 insertions(+), 514 deletions(-) diff --git a/manager/media/style/common/spectrum/spectrum.css b/manager/media/style/common/spectrum/spectrum.css index 34cbdfae04..a31dedc2b2 100644 --- a/manager/media/style/common/spectrum/spectrum.css +++ b/manager/media/style/common/spectrum/spectrum.css @@ -1,515 +1,515 @@ -/*** -Spectrum Colorpicker v1.8.0 -https://github.com/bgrins/spectrum -Author: Brian Grinstead -License: MIT -***/ - -.sp-container { - position:absolute; - top:0; - left:0; - display:inline-block; - *display: inline; - *zoom: 1; - /* https://github.com/bgrins/spectrum/issues/40 */ - z-index: 9999994; - overflow: hidden; -} -.sp-container.sp-flat { - position: relative; - width:95%; - background:#FFF; - border:none; -} - -/* Fix for * { box-sizing: border-box; } */ -.sp-container, -.sp-container * { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */ -.sp-top { - position:relative; - width: 100%; - display:inline-block; -} -.sp-top-inner { - position:absolute; - top:0; - left:0; - bottom:0; - right:0; -} -.sp-color { - position: absolute; - top:0; - left:0; - bottom:0; - right:20%; -} -.sp-hue { - position: absolute; - top:0; - right:0; - bottom:0; - left:84%; - height: 100%; -} - -.sp-clear-enabled .sp-hue { - top:33px; - height: 77.5%; -} - -.sp-fill { - padding-top: 80%; -} -.sp-sat, .sp-val { - position: absolute; - top:0; - left:0; - right:0; - bottom:0; -} - -.sp-alpha-enabled .sp-top { - margin-bottom: 18px; -} -.sp-alpha-enabled .sp-alpha { - display: block; -} -.sp-alpha-handle { - position:absolute; - top:-4px; - bottom: -4px; - width: 6px; - left: 50%; - cursor: pointer; - border: 1px solid black; - background: white; - opacity: .8; -} -.sp-alpha { - display: none; - position: absolute; - bottom: -14px; - right: 0; - left: 0; - height: 8px; -} -.sp-alpha-inner { - border: solid 1px #333; -} - -.sp-clear { - display: none; -} - -.sp-clear.sp-clear-display { - background-position: center; -} - -.sp-clear-enabled .sp-clear { - display: block; - position:absolute; - top:0px; - right:0; - bottom:0; - left:84%; - height: 28px; -} - -/* Don't allow text selection */ -.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { - -webkit-user-select:none; - -moz-user-select: -moz-none; - -o-user-select:none; - user-select: none; -} - -.sp-container.sp-input-disabled .sp-input-container { - display: none; -} -.sp-container.sp-buttons-disabled .sp-button-container { - display: none; -} -.sp-container.sp-palette-buttons-disabled .sp-palette-button-container { - display: none; -} -.sp-palette-only .sp-picker-container { - display: none; -} -.sp-palette-disabled .sp-palette-container { - display: none; -} - -.sp-initial-disabled .sp-initial { - display: none; -} - - -/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */ -.sp-sat { - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); - background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); - background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); - background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); - background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); - background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; - filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); -} -.sp-val { - background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); - background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); - background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); - background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); - background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); - background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; - filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); -} - -.sp-hue { - background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); - background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); -} - -/* IE filters do not support multiple color stops. - Generate 6 divs, line them up, and do two color gradients for each. - Yes, really. - */ -.sp-1 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); -} -.sp-2 { - height:16%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); -} -.sp-3 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); -} -.sp-4 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); -} -.sp-5 { - height:16%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); -} -.sp-6 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); -} - -.sp-hidden { - display: none !important; -} - -/* Clearfix hack */ -.sp-cf:before, .sp-cf:after { content: ""; display: table; } -.sp-cf:after { clear: both; } -.sp-cf { *zoom: 1; } -button.sp-choose, .sp-cancel { display:none; } - -/* Mobile devices, make hue slider bigger so it is easier to slide */ -@media (max-device-width: 480px) { - .sp-color { right: 40%; } - .sp-hue { left: 63%; } - .sp-fill { padding-top: 60%; } -} -.sp-dragger { - border-radius: 5px; - height: 5px; - width: 5px; - border: 1px solid #fff; - background: #000; - cursor: pointer; - position:absolute; - top:0; - left: 0; -} -.sp-slider { - position: absolute; - top:0; - cursor:pointer; - height: 3px; - left: -1px; - right: -1px; - border: 1px solid #000; - background: white; - opacity: .8; -} - -/* -Theme authors: -Here are the basic themeable display options (colors, fonts, global widths). -See http://bgrins.github.io/spectrum/themes/ for instructions. -*/ - -.sp-container { - border-radius: 0; - background-color: #fff; - border: 0; - padding: 0; - top:1px; - left:0; - margin-bottom:3px -} -.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear { - font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -.sp-top { - margin-bottom: 3px; -} -.sp-color, .sp-hue, .sp-clear { - border: solid 1px #666; -} - -/* Input */ -.sp-input-container { - float:right; - width: 100px; - margin-bottom: 4px; -} -.sp-initial-disabled .sp-input-container { - width: 100%; -} -.sp-input { - font-size: 12px !important; - border: 1px inset; - padding: 4px 5px; - margin: 0; - width: 100%; - background:transparent; - border-radius: 3px; - color: #222; -} -.sp-input:focus { - border: 1px solid orange; -} -.sp-input.sp-validation-error { - border: 1px solid red; - background: #fdd; -} -.sp-picker-container , .sp-palette-container { - float:left; - position: relative; - padding: 10px; - padding-bottom: 300px; - margin-bottom: -290px; - margin-left:20px; - width:95%; - border:none; -} -.sp-picker-container { - width: 172px; - border-left: solid 1px #fff; -} - -/* Palettes */ -.sp-palette-container { - border-right: solid 1px #ccc; -} - -.sp-palette-only .sp-palette-container { - border: 0; -} - -.sp-palette .sp-thumb-el { - display: block; - position:relative; - float:left; - width: 24px; - height: 15px; - margin: 3px; - cursor: pointer; - border:solid 2px transparent; -} -.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active { - border-color: orange; -} -.sp-thumb-el { - position:relative; -} -.sp-palette-toggle {margin-right:110px;margin-top:3px;} - -.sp-container a.sp-palette-toggle{ -color:#1976d2; -font-size:16px; -font-weight:bold; -cursor:pointer; -padding:1px 10px 2px 10px;} -} -.sp-container a.sp-palette-toggle:hover -{ color: #292b2c; background-color: #e6e6e6!important; border-color: #adadad } - - -/* Initial */ -.sp-initial { - float: left; - border: solid 1px #333; -} -.sp-initial span { - width: 30px; - height: 25px; - border:none; - display:block; - float:left; - margin:0; -} - -.sp-initial .sp-clear-display { - background-position: center; -} - -/* Buttons */ -.sp-palette-button-container, -.sp-button-container { - float: right; -} - -/* Replacer (the little preview div that shows up instead of the ) */ -.sp-replacer { - margin:0; - overflow:hidden; - cursor:pointer; - padding: 4px; - display:inline-block; - *zoom: 1; - *display: inline; - border: solid 1px #91765d; - background: #eee; - color: #333; - vertical-align: middle; -} -.sp-replacer:hover, .sp-replacer.sp-active { - border-color: #F0C49B; - color: #111; -} -.sp-replacer.sp-disabled { - cursor:default; - border-color: silver; - color: silver; -} -.sp-dd { - padding: 2px 0; - height: 16px; - line-height: 16px; - float:left; - font-size:10px; -} -.sp-preview { - position:relative; - width:25px; - height: 20px; - border: solid 1px #222; - margin-right: 5px; - float:left; - z-index: 0; -} - -.sp-palette { - *width: 220px; - max-width: 220px; -} -.sp-palette .sp-thumb-el { - width:16px; - height: 16px; - margin:2px 1px; - border: solid 1px #d0d0d0; -} - -.sp-container { - padding-bottom:0; -} - - -/* Buttons: http://hellohappy.org/css3-buttons/ */ -.sp-container button { - background-color: #eeeeee; - border: 1px solid #ccc; - border-bottom: 1px solid #bbb; - border-radius: 3px; - color: #333; - font-size: 14px; - line-height: 1; - padding: 5px 4px; - text-align: center; - text-shadow: 0 1px 0 #eee; - vertical-align: middle; -} -.sp-container button:hover { - background-color: #dddddd; - border: 1px solid #bbb; - border-bottom: 1px solid #999; - cursor: pointer; - text-shadow: 0 1px 0 #ddd; -} -.sp-container button:active { - border: 1px solid #aaa; - border-bottom: 1px solid #888; -} -.sp-cancel { - font-size: 11px; - color: #d93f3f !important; - margin:0; - padding:2px; - margin-right: 5px; - vertical-align: middle; - text-decoration:none; - -} -.sp-cancel:hover { - color: #d93f3f !important; - text-decoration: underline; -} - - -.sp-palette span:hover, .sp-palette span.sp-thumb-active { - border-color: #000; -} - -.sp-preview, .sp-alpha, .sp-thumb-el { - position:relative; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); -} -.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { - display:block; - position:absolute; - top:0;left:0;bottom:0;right:0; -} - -.sp-palette .sp-thumb-inner { - background-position: 50% 50%; - background-repeat: no-repeat; -} - -.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); -} - -.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); -} - -.sp-clear-display { - background-repeat:no-repeat; - background-position: center; - background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); -} +/*** +Spectrum Colorpicker v1.8.0 +https://github.com/bgrins/spectrum +Author: Brian Grinstead +License: MIT +***/ + +.sp-container { + position:absolute; + top:0; + left:0; + display:inline-block; + *display: inline; + *zoom: 1; + /* https://github.com/bgrins/spectrum/issues/40 */ + z-index: 9999994; + overflow: hidden; +} +.sp-container.sp-flat { + position: relative; + width:95%; + background:#FFF; + border:none; +} + +/* Fix for * { box-sizing: border-box; } */ +.sp-container, +.sp-container * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */ +.sp-top { + position:relative; + width: 100%; + display:inline-block; +} +.sp-top-inner { + position:absolute; + top:0; + left:0; + bottom:0; + right:0; +} +.sp-color { + position: absolute; + top:0; + left:0; + bottom:0; + right:20%; +} +.sp-hue { + position: absolute; + top:0; + right:0; + bottom:0; + left:84%; + height: 100%; +} + +.sp-clear-enabled .sp-hue { + top:33px; + height: 77.5%; +} + +.sp-fill { + padding-top: 80%; +} +.sp-sat, .sp-val { + position: absolute; + top:0; + left:0; + right:0; + bottom:0; +} + +.sp-alpha-enabled .sp-top { + margin-bottom: 18px; +} +.sp-alpha-enabled .sp-alpha { + display: block; +} +.sp-alpha-handle { + position:absolute; + top:-4px; + bottom: -4px; + width: 6px; + left: 50%; + cursor: pointer; + border: 1px solid black; + background: white; + opacity: .8; +} +.sp-alpha { + display: none; + position: absolute; + bottom: -14px; + right: 0; + left: 0; + height: 8px; +} +.sp-alpha-inner { + border: solid 1px #333; +} + +.sp-clear { + display: none; +} + +.sp-clear.sp-clear-display { + background-position: center; +} + +.sp-clear-enabled .sp-clear { + display: block; + position:absolute; + top:0px; + right:0; + bottom:0; + left:84%; + height: 28px; +} + +/* Don't allow text selection */ +.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { + -webkit-user-select:none; + -moz-user-select: -moz-none; + -o-user-select:none; + user-select: none; +} + +.sp-container.sp-input-disabled .sp-input-container { + display: none; +} +.sp-container.sp-buttons-disabled .sp-button-container { + display: none; +} +.sp-container.sp-palette-buttons-disabled .sp-palette-button-container { + display: none; +} +.sp-palette-only .sp-picker-container { + display: none; +} +.sp-palette-disabled .sp-palette-container { + display: none; +} + +.sp-initial-disabled .sp-initial { + display: none; +} + + +/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */ +.sp-sat { + background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; + filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); +} +.sp-val { + background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; + filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); +} + +.sp-hue { + background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); + background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); +} + +/* IE filters do not support multiple color stops. + Generate 6 divs, line them up, and do two color gradients for each. + Yes, really. + */ +.sp-1 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); +} +.sp-2 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); +} +.sp-3 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); +} +.sp-4 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); +} +.sp-5 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); +} +.sp-6 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); +} + +.sp-hidden { + display: none !important; +} + +/* Clearfix hack */ +.sp-cf:before, .sp-cf:after { content: ""; display: table; } +.sp-cf:after { clear: both; } +.sp-cf { *zoom: 1; } + + +/* Mobile devices, make hue slider bigger so it is easier to slide */ +@media (max-device-width: 480px) { + .sp-color { right: 40%; } + .sp-hue { left: 63%; } + .sp-fill { padding-top: 60%; } +} +.sp-dragger { + border-radius: 5px; + height: 5px; + width: 5px; + border: 1px solid #fff; + background: #000; + cursor: pointer; + position:absolute; + top:0; + left: 0; +} +.sp-slider { + position: absolute; + top:0; + cursor:pointer; + height: 3px; + left: -1px; + right: -1px; + border: 1px solid #000; + background: white; + opacity: .8; +} + +/* +Theme authors: +Here are the basic themeable display options (colors, fonts, global widths). +See http://bgrins.github.io/spectrum/themes/ for instructions. +*/ + +.sp-container { + border-radius: 0; + background-color: #fff; + border: 0; + padding: 0; + top:1px; + left:0; + margin-bottom:3px +} +.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear { + font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.sp-top { + margin-bottom: 3px; +} +.sp-color, .sp-hue, .sp-clear { + border: solid 1px #666; +} + +/* Input */ +.sp-input-container { + float:right; + width: 100px; + margin-bottom: 4px; +} +.sp-initial-disabled .sp-input-container { + width: 100%; +} +.sp-input { + font-size: 12px !important; + border: 1px inset; + padding: 4px 5px; + margin: 0; + width: 100%; + background:transparent; + border-radius: 3px; + color: #222; +} +.sp-input:focus { + border: 1px solid orange; +} +.sp-input.sp-validation-error { + border: 1px solid red; + background: #fdd; +} +.sp-picker-container , .sp-palette-container { + float:left; + position: relative; + padding: 10px; + padding-bottom: 300px; + margin-bottom: -290px; + margin-left:20px; + width:95%; + border:none; +} +.sp-picker-container { + width: 210px; + /* border-left: solid 1px #fff;*/ +} + +/* Palettes */ +.sp-palette-container { + border-right: solid 1px #ccc; +} + +.sp-palette-only .sp-palette-container { + border: 0; +} + +.sp-palette .sp-thumb-el { + display: block; + position:relative; + float:left; + width: 24px; + height: 15px; + margin: 3px; + cursor: pointer; + border:solid 2px transparent; +} +.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active { + border-color: orange; +} +.sp-thumb-el { + position:relative; +} +.sp-palette-toggle {margin-right:110px;margin-top:3px;} + +.sp-container a.sp-palette-toggle{ +color:#1976d2; +font-size:16px; +font-weight:bold; +cursor:pointer; +padding:1px 10px 2px 10px;} +} +.sp-container a.sp-palette-toggle:hover +{ color: #292b2c; background-color: #e6e6e6!important; border-color: #adadad } + + +/* Initial */ +.sp-initial { + float: left; + border: solid 1px #333; +} +.sp-initial span { + width: 30px; + height: 25px; + border:none; + display:block; + float:left; + margin:0; +} + +.sp-initial .sp-clear-display { + background-position: center; +} + +/* Buttons */ +.sp-palette-button-container, +.sp-button-container { + float: right; +} + +/* Replacer (the little preview div that shows up instead of the ) */ +.sp-replacer { + margin:0; + overflow:hidden; + cursor:pointer; + padding: 4px; + display:inline-block; + *zoom: 1; + *display: inline; + border: solid 1px #91765d; + background: #eee; + color: #333; + vertical-align: middle; +} +.sp-replacer:hover, .sp-replacer.sp-active { + border-color: #F0C49B; + color: #111; +} +.sp-replacer.sp-disabled { + cursor:default; + border-color: silver; + color: silver; +} +.sp-dd { + padding: 2px 0; + height: 16px; + line-height: 16px; + float:left; + font-size:10px; +} +.sp-preview { + position:relative; + width:25px; + height: 20px; + border: solid 1px #222; + margin-right: 5px; + float:left; + z-index: 0; +} + +.sp-palette { + *width: 220px; + max-width: 220px; +} +.sp-palette .sp-thumb-el { + width:16px; + height: 16px; + margin:2px 1px; + border: solid 1px #d0d0d0; +} + +.sp-container { + padding-bottom:0; +} + + +/* Buttons: http://hellohappy.org/css3-buttons/ */ +.sp-container button { + background-color: #eeeeee; + border: 1px solid #ccc; + border-bottom: 1px solid #bbb; + border-radius: 3px; + color: #333; + font-size: 14px; + line-height: 1; + padding: 5px 4px; + text-align: center; + text-shadow: 0 1px 0 #eee; + vertical-align: middle; +} +.sp-container button:hover { + background-color: #dddddd; + border: 1px solid #bbb; + border-bottom: 1px solid #999; + cursor: pointer; + text-shadow: 0 1px 0 #ddd; +} +.sp-container button:active { + border: 1px solid #aaa; + border-bottom: 1px solid #888; +} +.sp-cancel { + font-size: 11px; + color: #d93f3f !important; + margin:0; + padding:2px; + margin-right: 5px; + vertical-align: middle; + text-decoration:none; + +} +.sp-cancel:hover { + color: #d93f3f !important; + text-decoration: underline; +} + + +.sp-palette span:hover, .sp-palette span.sp-thumb-active { + border-color: #000; +} + +.sp-preview, .sp-alpha, .sp-thumb-el { + position:relative; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); +} +.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { + display:block; + position:absolute; + top:0;left:0;bottom:0;right:0; +} + +.sp-palette .sp-thumb-inner { + background-position: 50% 50%; + background-repeat: no-repeat; +} + +.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); +} + +.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); +} + +.sp-clear-display { + background-repeat:no-repeat; + background-position: center; + background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); +} #mainMenu.show .nav > li.dropdown.hover > a { background-color: #fff; color: #444!important; } \ No newline at end of file From 9f74fb91c25e2512fb2dcb5ffd87eeb5848f3f82 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 17 Oct 2017 12:12:46 +0200 Subject: [PATCH 289/577] Updated Color Switcher moved Color Switcher code to default theme file color.switcher.php --- manager/includes/header.inc.php | 1008 ++++++++++++++++--------------- 1 file changed, 505 insertions(+), 503 deletions(-) diff --git a/manager/includes/header.inc.php b/manager/includes/header.inc.php index 8c923588b7..fa4273a66b 100644 --- a/manager/includes/header.inc.php +++ b/manager/includes/header.inc.php @@ -1,503 +1,505 @@ -INCLUDE_ORDERING_ERROR

          Please use the MODX Content Manager instead of accessing this file directly."); -} -$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; - -// invoke OnManagerRegClientStartupHTMLBlock event -$evtOut = $modx->invokeEvent('OnManagerMainFrameHeaderHTMLBlock'); -$modx_textdir = isset($modx_textdir) ? $modx_textdir : null; -$onManagerMainFrameHeaderHTMLBlock = is_array($evtOut) ? implode("\n", $evtOut) : ''; -$textdir = $modx_textdir === 'rtl' ? 'rtl' : 'ltr'; -if (!isset($modx->config['mgr_jquery_path'])) { - $modx->config['mgr_jquery_path'] = 'media/script/jquery/jquery.min.js'; -} -if (!isset($modx->config['mgr_date_picker_path'])) { - $modx->config['mgr_date_picker_path'] = 'media/script/air-datepicker/datepicker.inc.php'; -} - -if (!empty($_COOKIE['MODX_themeColor'])) { - $body_class .= ' ' . $_COOKIE['MODX_themeColor']; -} - -?> - - - - Evolution CMS - - - - - - - ' . "\n", $modx->config['mgr_jquery_path']) ?> - - - - - - - - - - - - class=""> +INCLUDE_ORDERING_ERROR

          Please use the MODX Content Manager instead of accessing this file directly."); +} +$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; + +// invoke OnManagerRegClientStartupHTMLBlock event +$evtOut = $modx->invokeEvent('OnManagerMainFrameHeaderHTMLBlock'); +$modx_textdir = isset($modx_textdir) ? $modx_textdir : null; +$onManagerMainFrameHeaderHTMLBlock = is_array($evtOut) ? implode("\n", $evtOut) : ''; +$textdir = $modx_textdir === 'rtl' ? 'rtl' : 'ltr'; +if (!isset($modx->config['mgr_jquery_path'])) { + $modx->config['mgr_jquery_path'] = 'media/script/jquery/jquery.min.js'; +} +if (!isset($modx->config['mgr_date_picker_path'])) { + $modx->config['mgr_date_picker_path'] = 'media/script/air-datepicker/datepicker.inc.php'; +} + +if (!empty($_COOKIE['MODX_themeColor'])) { + $body_class .= ' ' . $_COOKIE['MODX_themeColor']; +} + +?> + + + + Evolution CMS + + + + + + + ' . "\n", $modx->config['mgr_jquery_path']) ?> + config['show_picker'] != "0") { ?> + + + + + + + + + + + + + class="" data-evocp="color"> From 82fcd24dd6ac25825651b5dc0fbc14f6f0d81e56 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 17 Oct 2017 12:14:03 +0200 Subject: [PATCH 290/577] Updated Color Switcher moved switcher code to theme file --- manager/frames/1.php | 1199 ++++++++++++++++++------------------------ 1 file changed, 526 insertions(+), 673 deletions(-) diff --git a/manager/frames/1.php b/manager/frames/1.php index 1812bde589..03363e7fe3 100644 --- a/manager/frames/1.php +++ b/manager/frames/1.php @@ -1,673 +1,526 @@ -INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); -} -header("X-XSS-Protection: 0"); - -$_SESSION['browser'] = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 1') !== false) ? 'legacy_IE' : 'modern'; - -// invoke OnManagerPreFrameLoader -$modx->invokeEvent('OnManagerPreFrameLoader', array('action' => $action)); - -$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; - -if (!isset($modx->config['manager_menu_height'])) { - $modx->config['manager_menu_height'] = 2.2; // rem -} - -if (!isset($modx->config['manager_tree_width'])) { - $modx->config['manager_tree_width'] = 20; // rem -} - -if (isset($_SESSION['onLoginForwardToAction']) && is_int($_SESSION['onLoginForwardToAction'])) { - $initMainframeAction = $_SESSION['onLoginForwardToAction']; - unset($_SESSION['onLoginForwardToAction']); -} else { - $initMainframeAction = 2; // welcome.static -} - -if (!isset($_SESSION['tree_show_only_folders'])) { - $_SESSION['tree_show_only_folders'] = 0; -} - -$body_class = ''; -$menu_height = $modx->config['manager_menu_height']; -$tree_width = $modx->config['manager_tree_width']; -$tree_min_width = 0; - -if (isset($_COOKIE['MODX_widthSideBar'])) { - $MODX_widthSideBar = $_COOKIE['MODX_widthSideBar']; -} else { - $MODX_widthSideBar = $tree_width; -} - -if (!$MODX_widthSideBar) { - $body_class .= 'sidebar-closed'; -} - -if (isset($_COOKIE['MODX_themeColor'])) { - $body_class .= ' ' . $_COOKIE['MODX_themeColor']; -} - -if (isset($modx->pluginCache['ElementsInTree'])) { - $body_class .= ' ElementsInTree'; -} - -$unlockTranslations = array( - 'msg' => $_lang["unlock_element_id_warning"], - 'type1' => $_lang["lock_element_type_1"], - 'type2' => $_lang["lock_element_type_2"], - 'type3' => $_lang["lock_element_type_3"], - 'type4' => $_lang["lock_element_type_4"], - 'type5' => $_lang["lock_element_type_5"], - 'type6' => $_lang["lock_element_type_6"], - 'type7' => $_lang["lock_element_type_7"], - 'type8' => $_lang["lock_element_type_8"] -); - -foreach ($unlockTranslations as $key => $value) { - $unlockTranslations[$key] = iconv($modx->config["modx_charset"], "utf-8", $value); -} - -$user = $modx->getUserInfo($modx->getLoginUserID()); -if ($user['which_browser'] == 'default') { - $user['which_browser'] = $modx->config['which_browser']; -} -?> - -> - - <?= $site_name ?>- (EVO CMS Manager) - - - - - - config['show_picker'] != "0") { ?> - - - - - - - config['show_picker'] != "0") { ?> - - - - - - - invokeEvent('OnManagerTopPrerender', $_REQUEST); - if (is_array($evtOut)) { - echo implode("\n", $evtOut); - } - ?> - - - -
          - -
          - -
          -
          - config['global_tabs'] && $user['role'] == 1): ?> -
          -

          -
          -
          - -
          - - - -
          -
          -
          -
          - - - - - - - ', $action, $action); - echo sprintf(' %s
          ', $img, $text); - } - } - - ?> - - - - invokeEvent('OnManagerFrameLoader', array('action' => $action)); - ?> - -
          - - - +INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); +} +header("X-XSS-Protection: 0"); + +$_SESSION['browser'] = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 1') !== false) ? 'legacy_IE' : 'modern'; + +// invoke OnManagerPreFrameLoader +$modx->invokeEvent('OnManagerPreFrameLoader', array('action' => $action)); + +$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; + +if (!isset($modx->config['manager_menu_height'])) { + $modx->config['manager_menu_height'] = 2.2; // rem +} + +if (!isset($modx->config['manager_tree_width'])) { + $modx->config['manager_tree_width'] = 20; // rem +} + +if (isset($_SESSION['onLoginForwardToAction']) && is_int($_SESSION['onLoginForwardToAction'])) { + $initMainframeAction = $_SESSION['onLoginForwardToAction']; + unset($_SESSION['onLoginForwardToAction']); +} else { + $initMainframeAction = 2; // welcome.static +} + +if (!isset($_SESSION['tree_show_only_folders'])) { + $_SESSION['tree_show_only_folders'] = 0; +} + +$body_class = ''; +$menu_height = $modx->config['manager_menu_height']; +$tree_width = $modx->config['manager_tree_width']; +$tree_min_width = 0; + +if (isset($_COOKIE['MODX_widthSideBar'])) { + $MODX_widthSideBar = $_COOKIE['MODX_widthSideBar']; +} else { + $MODX_widthSideBar = $tree_width; +} + +if (!$MODX_widthSideBar) { + $body_class .= 'sidebar-closed'; +} + +if (isset($_COOKIE['MODX_themeColor'])) { + $body_class .= ' ' . $_COOKIE['MODX_themeColor']; +} + +if (isset($modx->pluginCache['ElementsInTree'])) { + $body_class .= ' ElementsInTree'; +} + +$unlockTranslations = array( + 'msg' => $_lang["unlock_element_id_warning"], + 'type1' => $_lang["lock_element_type_1"], + 'type2' => $_lang["lock_element_type_2"], + 'type3' => $_lang["lock_element_type_3"], + 'type4' => $_lang["lock_element_type_4"], + 'type5' => $_lang["lock_element_type_5"], + 'type6' => $_lang["lock_element_type_6"], + 'type7' => $_lang["lock_element_type_7"], + 'type8' => $_lang["lock_element_type_8"] +); + +foreach ($unlockTranslations as $key => $value) { + $unlockTranslations[$key] = iconv($modx->config["modx_charset"], "utf-8", $value); +} + +$user = $modx->getUserInfo($modx->getLoginUserID()); +if ($user['which_browser'] == 'default') { + $user['which_browser'] = $modx->config['which_browser']; +} +?> + +> + + <?= $site_name ?>- (EVO CMS Manager) + + + + + + config['show_picker'] != "0") { ?> + + + + + + + + + + config['show_picker'] != "0") { ?> + + + + + invokeEvent('OnManagerTopPrerender', $_REQUEST); + if (is_array($evtOut)) { + echo implode("\n", $evtOut); + } + ?> + + + +
          + +
          + +
          +
          + config['global_tabs'] && $user['role'] == 1): ?> +
          +

          +
          +
          + +
          + + + +
          +
          +
          +
          + + + + + + + ', $action, $action); + echo sprintf(' %s
          ', $img, $text); + } + } + + ?> + + + + invokeEvent('OnManagerFrameLoader', array('action' => $action)); + ?> + +
          +config['show_picker'] != "0") { + include('media/style/'.$modx->config['manager_theme'].'/color.switcher.php'); + } ?> + + From b9593bf5202d4290ee4c8898b2526b07e8231bc4 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 17 Oct 2017 12:15:15 +0200 Subject: [PATCH 291/577] Updted color switcher settings description --- manager/includes/lang/english.inc.php | 2946 ++++++++++++------------- 1 file changed, 1473 insertions(+), 1473 deletions(-) diff --git a/manager/includes/lang/english.inc.php b/manager/includes/lang/english.inc.php index 10e5865ce8..594b666654 100644 --- a/manager/includes/lang/english.inc.php +++ b/manager/includes/lang/english.inc.php @@ -1,1473 +1,1473 @@ -PHP Application Framework and Content Management System licensed under the GNU GPL.'; -$_lang["about_title"] = 'About Evolution'; -$_lang["access_permission_denied"] = 'You do not have the correct permissions for this Resource.'; -$_lang["access_permission_parent_denied"] = 'You do not have permission to create or move a Resource here! Please choose another location.'; -$_lang["access_permissions"] = 'Access permissions'; -$_lang["access_permissions_add_resource_group"] = 'Create a new Resource Group'; -$_lang["access_permissions_add_user_group"] = 'Create a new User Group'; -$_lang["access_permissions_docs_collision"] = 'Because the Web User Groups and Manager User Groups conflict for your Role, this Resource will be public. Contact a site administrator for further help.'; -$_lang["access_permissions_docs_message"] = 'Select which Resource Groups this Resource belongs to'; -$_lang["access_permissions_group_link"] = 'Create a new group link'; -$_lang["access_permissions_introtext"] = 'Manage the User Groups and Resource Groups used for access permissions. To add a user to a User Group, edit the user and select the groups (s)he should be a member of. To add a Resource to a User Group, edit the Resource and select the groups it should belong to.'; -$_lang["access_permissions_link_to_group"] = 'to Resource Group'; -$_lang["access_permissions_link_user_group"] = 'Link User Group'; -$_lang["access_permissions_links"] = 'User/Resource Group links'; -$_lang["access_permissions_links_tab"] = 'Specify which User Groups are given access (i.e. can edit or create children) to the Resource Groups. To link a Resource Group to a User Group, select the appropriate groups from the drop down menus, and click on \'Submit\'. To remove the link for a certain group, press \'Remove\'. This will immediately remove the link.'; -$_lang["access_permissions_no_resources_in_group"] = 'None.'; -$_lang["access_permissions_no_users_in_group"] = 'None.'; -$_lang["access_permissions_off"] = 'Access Permissions are not activated. This means any changes made here will not have any effect until Access Permissions are activated in your Configuration.'; -$_lang["access_permissions_resource_groups"] = 'Resource Groups'; -$_lang["access_permissions_resources_in_group"] = 'Resources in group: '; -$_lang["access_permissions_resources_tab"] = 'See which Resource Groups have been created. Also create new groups, rename groups, delete groups and see which Resources are in the different groups (hover over the id of the Resource to see it\'s name). To add a Resource to a group or remove a Resource from a group, edit the Resource directly.'; -$_lang["access_permissions_user_groups"] = 'User groups'; -$_lang["access_permissions_user_message"] = 'Select which User Groups this user belongs to:'; -$_lang["access_permissions_users_in_group"] = 'Users in group:'; -$_lang["access_permissions_users_tab"] = 'View the User Groups that have been created. You can also create new groups, rename groups, delete groups and see which users are members of the different groups. To add a new user to a group or to remove a user from a group, edit the user directly. Administrators (users who have been assigned the role with ID 1) always have access to all Resources, so they don\'t need to be added to any groups.'; -$_lang["account_email"] = 'Account email'; -$_lang["actioncomplete"] = 'Action was completed successfully!
          - Please wait while EVO cleans up.'; -$_lang["activity_message"] = 'This list shows the last Resources you created or edited:'; -$_lang["activity_title"] = 'Recently edited/created Resources'; -$_lang["add"] = 'Add'; -$_lang["add_chunk"] = 'Add Chunk'; -$_lang["add_doc"] = 'Add Resource'; -$_lang["add_folder"] = 'New Directory'; -$_lang["add_plugin"] = 'Add Plugin'; -$_lang["add_resource"] = 'New Resource'; -$_lang["add_snippet"] = 'Add Snippet'; -$_lang["add_tag"] = 'Add tag'; -$_lang["add_template"] = 'Add Template'; -$_lang["add_tv"] = 'Add TV'; -$_lang["add_weblink"] = 'New Weblink'; -$_lang["administrator_role_message"] = 'This role cannot be edited or deleted.'; -$_lang["administrators"] = 'Administrators'; -$_lang["after_saving"] = 'After saving'; -$_lang["alert_delete_self"] = 'You can\'t delete yourself!'; -$_lang["alias"] = 'URL alias'; -$_lang["all_doc_groups"] = 'All Resource Groups (Public)'; -$_lang["all_events"] = 'All Events'; -$_lang["all_usr_groups"] = 'All User Groups (Public)'; -$_lang["allow_mgr_access"] = 'Manager Interface Access'; -$_lang["allow_mgr_access_message"] = 'Select this option to enable or disable access to the manager interface. NOTE: If this option is set to no then the user will be redirected to the Manager Login Startup or Site Start web page.'; -$_lang["already_deleted"] = 'has already been deleted.'; -$_lang["attachment"] = 'Attachment'; -$_lang["author_infos"] = 'Author information'; -$_lang["automatic_alias_message"] = 'Select \'yes\' to have the system automatically generate a URL alias based on the Resource\'s page title when saving.'; -$_lang["automatic_alias_title"] = 'Automatically generate URL alias'; -$_lang["backup"] = 'Backup'; -$_lang["bk_manager"] = 'Backup'; -$_lang["block_message"] = 'This user will be blocked after saving the user\'s data!'; -$_lang["blocked_minutes_message"] = 'Enter the number of minutes that a user will be blocked for if they reach their maximum number of allowed failed login attempts. Please enter this value as numbers only (no commas, spaces etc.)'; -$_lang["blocked_minutes_title"] = 'Blocked Minutes'; -$_lang["cache_files_deleted"] = 'The following files were deleted:'; -$_lang["cancel"] = 'Cancel'; -$_lang["captcha_code"] = 'Security code'; -$_lang["captcha_message"] = 'Enable this to strengthen security by requiring users to enter a code which is unreadable by machines (and script-kiddy hacking scripts).'; -$_lang["captcha_title"] = 'Use CAPTCHA codes'; -$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; -$_lang["captcha_words_message"] = 'Enter a list of CAPTCHA words to use if CAPTCHA is enabled. Separate the words with commas. This input field is limited to 255 characters.'; -$_lang["captcha_words_title"] = 'CAPTCHA Words'; -$_lang["category_heading"] = 'Category'; -$_lang["category_manager"] = 'Category Manager'; -$_lang["category_management"] = 'Category management'; -$_lang["manage_categories"] = 'Manage Categories'; -$_lang["category_msg"] = 'View and edit all Elements grouped by category.'; -$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; -$_lang["cfg_base_url"] = 'MODX_BASE_URL'; -$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; -$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; -$_lang["cfg_site_url"] = 'MODX_SITE_URL'; -$_lang["change_name"] = 'Change name'; -$_lang["change_password"] = 'Change Password'; -$_lang["change_password_confirm"] = 'Confirm password'; -$_lang["change_password_message"] = 'Please enter your new password, and then enter it again to confirm. Your password needs to be at least 6 characters long.'; -$_lang["change_password_new"] = 'New password'; -$_lang["charset_message"] = 'Select the default character encoding for the [(modx_charset)] system variable. This does not affect the Manager.'; -$_lang["charset_title"] = 'Character encoding'; -$_lang["chunk"] = 'Chunk'; -$_lang["chunk_code"] = 'Chunk code (html)'; -$_lang["chunk_multiple_id"] = 'Error: Multiple Chunks share the same unique ID.'; -$_lang["chunk_no_exist"] = 'Chunk does not exist.'; -$_lang["cleaningup"] = 'Cleaning up'; -$_lang["clean_uploaded_filename"] = 'Use Transliteration for File Uploads'; -$_lang["clean_uploaded_filename_message"] = 'Use the default or transalias settings for the file name to clean special characters from uploaded file names, preserving dot-characters (periods)'; -$_lang["clear_log"] = 'Clear log'; -$_lang["click_to_context"] = 'Click to access context menu'; -$_lang["click_to_edit_title"] = 'Click here to edit this record'; -$_lang["click_to_view_details"] = 'Click here to view details'; -$_lang["close"] = 'Close'; -$_lang["code"] = 'Code'; -$_lang["collapse_tree"] = 'Collapse Site Tree'; -$_lang["comment"] = 'Comment'; -$_lang["configcheck_admin"] = 'Please contact a systems administrator and warn them about this message!'; -$_lang["configcheck_cache"] = 'cache directory not writable'; -$_lang["configcheck_cache_msg"] = 'EVO cannot write to the cache directory. EVO will still function as expected, but no caching will take place. To solve this, make the /_cache/ directory writable.'; -$_lang["configcheck_configinc"] = 'Config file still writable'; -$_lang["configcheck_configinc_msg"] = 'Very naughty people could potentially wreak some havoc on your site and everything associated with it. Really. Please make your config file (/[+MGR_DIR+]/includes/config.inc.php) read only!'; -$_lang["configcheck_default_msg"] = 'An unspecified warning was found. Which is strange.'; -$_lang["configcheck_errorpage_unavailable"] = 'Your site\'s Error page is not available.'; -$_lang["configcheck_errorpage_unavailable_msg"] = 'This means that your Error page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; -$_lang["configcheck_errorpage_unpublished"] = 'Your site\'s Error page is not published or does not exist.'; -$_lang["configcheck_errorpage_unpublished_msg"] = 'This means that your Error page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; -$_lang["configcheck_filemanager_path"] = 'The currently set File Manager path seems incorrect.'; -$_lang["configcheck_filemanager_path_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; -$_lang["configcheck_hide_warning"] = 'Don\'t show this again.'; -$_lang["configcheck_images"] = 'Images directory not writable'; -$_lang["configcheck_images_msg"] = 'The images directory isn\'t writable, or doesn\'t exist. This means the Image Manager functions in the editor will not work!'; -$_lang["configcheck_installer"] = 'Installer still present'; -$_lang["configcheck_installer_msg"] = 'The /install directory contains the installer for EVO. Just imagine what might happen if an evil person finds this directory and runs the installer! They\'d probably not get too far, because they need to enter some user information for the database, but it is still best to remove this directory from your server.'; -$_lang["configcheck_lang_difference"] = 'Incorrect number of entries in language file'; -$_lang["configcheck_lang_difference_msg"] = 'The currently selected language has a different number of entries than the default language. While not necessarily a problem, this may mean the language file needs to be updated.'; -$_lang["configcheck_notok"] = 'One or more configuration details didn\'t check out OK:'; -$_lang["configcheck_ok"] = 'Check passed OK - no warnings to report.'; -$_lang["configcheck_php_gdzip"] = 'GD and/or Zip PHP extensions not found'; -$_lang["configcheck_php_gdzip_msg"] = 'EVO needs the GD and Zip extension enabled for PHP. While EVO will work without them, you will not be able to take full advantage of the built-in File Manager, Image Editor or Captcha for logins.'; -$_lang["configcheck_rb_base_dir"] = 'The currently set File base path seems incorrect.'; -$_lang["configcheck_rb_base_dir_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; -$_lang["configcheck_register_globals"] = 'register_globals is set to ON in your php.ini configuration file'; -$_lang["configcheck_register_globals_msg"] = 'This configuration makes your site much more susceptible to Cross Site Scripting (XSS) attacks. You should speak to your host about what you can do to disable this setting.'; -$_lang["configcheck_title"] = 'Configuration check'; -$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin detected'; -$_lang["configcheck_templateswitcher_present_delete"] = 'Delete TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_disable"] = 'Disable TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_msg"] = 'The TemplateSwitcher plugin has been found to cause caching and performance problems, and should be used only the functionality is required in your site.'; -$_lang["configcheck_unauthorizedpage_unavailable"] = 'Your site\'s Unauthorized page is not published or does not exist.'; -$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'This means that your Unauthorized page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; -$_lang["configcheck_unauthorizedpage_unpublished"] = 'The Unauthorized page defined in the site configuration settings is not published.'; -$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'This means that your Unauthorized page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; -$_lang["configcheck_validate_referer"] = 'Security Warning: HTTP Header Validation'; -$_lang["configcheck_validate_referer_msg"] = 'The configuration setting Validate HTTP_REFERER headers? is Off. We recommend turning it On. Go to Configuration options'; -$_lang["configcheck_warning"] = 'Configuration warning: '; -$_lang["configcheck_what"] = 'What does this mean?'; -$_lang["confirm_block"] = 'Are you sure you want to block this user?'; -$_lang["confirm_delete_category"] = 'Are you sure you want to delete this category?'; -$_lang["confirm_delete_eventlog"] = 'Are you sure you want to delete this event log?'; -$_lang["confirm_delete_file"] = 'Are you sure you want to delete the file?\n\nThis may stop your site from working properly! Only delete this file if you know for certain what you are doing will not break anything.'; -$_lang["confirm_delete_group"] = 'Are you sure you want to delete this group?'; -$_lang["confirm_delete_htmlsnippet"] = 'Are you sure you want to delete this Chunk?'; -$_lang["confirm_delete_keywords"] = 'Are you sure you want to delete these keywords?'; -$_lang["confirm_delete_module"] = 'Are you sure you want to delete this Module?'; -$_lang["confirm_delete_plugin"] = 'Are you sure you want to delete this Plugin?'; -$_lang["confirm_delete_record"] = 'Are you sure you want to delete the selected record(s)?'; -$_lang["confirm_delete_resource"] = 'Are you sure you want to delete this Resource?\nAny children Resources will also be deleted.'; -$_lang["confirm_delete_role"] = 'Are you sure you want to delete this role?'; -$_lang["confirm_delete_snippet"] = 'Are you sure you want to delete this Snippet?'; -$_lang["confirm_delete_tags"] = 'Are you sure you want to delete the selected META tags?'; -$_lang["confirm_delete_template"] = 'Are you sure you want to delete this Template?'; -$_lang["confirm_delete_tmplvars"] = 'Are you sure you want to remove this Template Variable and all stored values?'; -$_lang["confirm_delete_user"] = 'Are you sure you want to delete this User?'; -$_lang["confirm_duplicate_record"] = 'Are you sure you want to duplicate this record?'; -$_lang["confirm_empty_trash"] = 'This will permanently remove ALL deleted Resources?\n\nProceed?'; -$_lang["confirm_load_depends"] = 'Are you sure you want to load the Manage Dependencies screen without saving your modifications?'; -$_lang["confirm_name_change"] = 'Changing the user name can affect other applications that are linked to the Content Manager.\n\nAre you sure you want to change this user name?'; -$_lang["confirm_publish"] = '\n\nPublishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; -$_lang["confirm_remove_locks"] = 'Users sometimes close their browser while editing Resources, Templates, Snippets or parsers, possibly leaving the item they were editing in locked state. By pressing OK you can remove ALL locks currently in place.\n\nProceed?'; -$_lang["confirm_reset_sort_order"] = 'Are you sure you want to reset the \"sort order/index\" of all listed elements to 0 ?'; -$_lang["confirm_resource_duplicate"] = 'Are you sure you want to duplicate this Resource? Any item(s) it contains will also be duplicated.'; -$_lang["confirm_setting_language_change"] = 'You have modified the default value and will lose the changes. Proceed?'; -$_lang["confirm_unblock"] = 'Are you sure you want to unblock this user?'; -$_lang["confirm_undelete"] = '\n\nAny children Resources deleted at the same time as this Resource will also be undeleted, but children Resources deleted at an earlier time will still be deleted.'; -$_lang["confirm_unpublish"] = '\n\nUn-publishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; -$_lang["confirm_unzip_file"] = 'Are you sure you want to unzip this file?\n\nExisting files will be overwritten.'; -$_lang["could_not_find_user"] = 'Could not find user'; -$_lang["create_folder_here"] = 'Create Container here'; -$_lang["create_resource_here"] = 'Create Resource here'; -$_lang["create_resource_title"] = 'Create Resource'; -$_lang["create_weblink_here"] = 'Create Weblink here'; -$_lang["createdon"] = 'Creation date'; -$_lang["create_new"] = 'Create new'; -$_lang["credits"] = 'Credits'; -$_lang["credits_shouts_msg"] = '

          EVO is managed and maintained at evo.im.

          '; -$_lang["custom_contenttype_message"] = 'Add custom content types for Resources. To add a new entry, enter the content type in the text box then click the \'Add\' button.'; -$_lang["custom_contenttype_title"] = 'Custom content types'; -$_lang["database_charset"] = 'Database Charset'; -$_lang["database_collation"] = 'Database Collation Charset'; -$_lang["database_name"] = 'Database name'; -$_lang["database_overhead"] = 'Note: Overhead is unused space reserved by MySQL. To free up this space, click on the table\'s overhead figure.'; -$_lang["database_server"] = 'Database server'; -$_lang["database_table_clickbackup"] = 'Backup & download the selected tables'; -$_lang["database_table_clickhere"] = 'Click here'; -$_lang["database_table_datasize"] = 'Data size'; -$_lang["database_table_droptablestatements"] = 'Generate DROP TABLE statements.'; -$_lang["database_table_effectivesize"] = 'Effective size'; -$_lang["database_table_indexsize"] = 'Index size'; -$_lang["database_table_overhead"] = 'Overhead'; -$_lang["database_table_records"] = 'Records'; -$_lang["database_table_tablename"] = 'Table name'; -$_lang["database_table_totals"] = 'Totals'; -$_lang["database_table_totalsize"] = 'Total size'; -$_lang["database_tables"] = 'Database tables'; -$_lang["database_version"] = 'Database Version'; -$_lang["date"] = 'Date'; -$_lang["datechanged"] = 'Date changed'; -$_lang["datepicker_offset"] = 'Datepicker offset'; -$_lang["datepicker_offset_message"] = 'The number of years to show in the past on the datepicker.'; -$_lang["datetime_format"] = 'Date format'; -$_lang["datetime_format_message"] = 'The format for dates in the Manager.'; -$_lang["default"] = 'Default:'; -$_lang["defaultcache_message"] = 'Select \'Yes\' to make all new Resources cacheable by default.'; -$_lang["defaultcache_title"] = 'Cacheable default'; -$_lang["defaultmenuindex_message"] = 'Select \'Yes\' to turn on automatic menu index incrementing by default.'; -$_lang["defaultmenuindex_title"] = 'Menu indexing default'; -$_lang["defaultpublish_message"] = 'Select \'Yes\' to make all new Resources published by default.'; -$_lang["defaultpublish_title"] = 'Published default'; -$_lang["defaultsearch_message"] = 'Select \'Yes\' to make all new Resources searchable by default.'; -$_lang["defaultsearch_title"] = 'Searchable default'; -$_lang["defaulttemplate_message"] = 'Select the Template you wish to use as a system default for new Resources. You can still select a different Template in the Resource editor, this setting just pre-selects one of your Templates for you.'; -$_lang["defaulttemplate_title"] = 'System Default Template'; -$_lang["defaulttemplate_logic_title"] = 'Automatic Template Assignment'; -$_lang["defaulttemplate_logic_general_message"] = 'New Resources will have the following templates, falling back to higher levels if not found:'; -$_lang["defaulttemplate_logic_system_message"] = 'System: the System Default Template.'; -$_lang["defaulttemplate_logic_parent_message"] = 'Parent: the same Template as the parent container.'; -$_lang["defaulttemplate_logic_sibling_message"] = 'Sibling: the same Template as other Resources in the same container.'; -$_lang["delete"] = 'Delete'; -$_lang["delete_resource"] = 'Delete Resource'; -$_lang["delete_tags"] = 'Delete tags'; -$_lang["deleting_file"] = 'Deleting file `%s`: '; -$_lang["description"] = 'Description'; -$_lang["deselect_keywords"] = 'Clear keywords'; -$_lang["deselect_metatags"] = 'Clear META tags'; -$_lang["disabled"] = 'Disabled'; -$_lang["doc_data_title"] = 'View Resource data'; -$_lang["documentation"] = 'Documentation'; -$_lang["duplicate"] = 'Duplicate'; -$_lang["duplicate_alias_found"] = 'Resource \'%s\' is already using the URL alias \'%s\'. Please enter a unique URL alias.'; -$_lang["duplicate_alias_message"] = 'Select \'yes\' to allow duplicate URL aliases to be saved. NOTE: This option should be used with \'Friendly URL alias path\' option set to \'Yes\' in order to avoid problems when referencing a Resource.'; -$_lang["duplicate_alias_title"] = 'Allow duplicate URL aliases'; -$_lang["duplicate_name_found_general"] = 'There is already a %s named \'%s\'. Please enter a unique name.'; -$_lang["duplicate_name_found_module"] = 'There is already a Module named \'%s\'. Please enter a unique name.'; -$_lang["duplicated_el_suffix"] = 'Duplicate'; -$_lang["edit"] = 'Edit'; -$_lang["edit_resource"] = 'Edit Resource'; -$_lang["edit_resource_title"] = 'Edit Resource'; -$_lang["edit_settings"] = 'Configuration'; -$_lang["editedon"] = 'Edit date'; -$_lang["editing_file"] = 'Editing file: '; -$_lang["editor_css_path_message"] = 'Enter the path to your CSS file that you wish to use within the editor. The best way to enter the path is to enter the path from the root of your server, for example: /assets/site/style.css. If you do not wish to load a style sheet into the editor, leave this field blank.'; -$_lang["editor_css_path_title"] = 'Path to CSS file'; -$_lang["element"] = 'Element'; -$_lang["element_categories"] = 'Combined View'; -$_lang["element_filter_msg"] = 'Type here to filter list'; -$_lang["element_management"] = 'Manage Elements'; -$_lang["element_name"] = 'Element name'; -$_lang["element_selector_msg"] = 'Select the Elements(s) from the list below and click the \'Insert\' button.'; -$_lang["element_selector_title"] = 'Element Selector'; -$_lang["elements"] = 'Elements'; -$_lang["email"] = 'Email'; -$_lang["email_sent"] = 'Email sent'; -$_lang["emailsender_message"] = 'The email address of the site administrator. For example, this email address will be used as the destination of system notification e-mail etc.'; -$_lang["emailsender_title"] = 'E-mail address'; -$_lang["emailsubject_default"] = 'Your login details'; -$_lang["emailsubject_message"] = 'Specify the value of the subject of the signup e-mail.'; -$_lang["emailsubject_title"] = 'E-mail subject'; -$_lang["empty_folder"] = 'This Container is empty'; -$_lang["empty_recycle_bin"] = 'Purge deleted Resources'; -$_lang["empty_recycle_bin_empty"] = 'There are no deleted Resources to purge.'; -$_lang["enable_resource"] = 'Enable Element file.'; -$_lang["enable_sharedparams"] = 'Enable parameter sharing'; -$_lang["enable_sharedparams_msg"] = 'NOTE: The above globally unique id (GUID) will be used to uniquely identify this Module and it\'s shared parameters. The GUID is also used to form a link between the Module and the Plugins or Snippets accessing the it\'s shared parameters. '; -$_lang["enabled"] = 'Enabled'; -$_lang["error"] = 'Error'; -$_lang["error_sending_email"] = 'Error sending email'; -$_lang["errorpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect users to when requesting a non-existing Resource.'; -$_lang["errorpage_title"] = 'Error page'; -$_lang["event_id"] = 'Event Id'; -$_lang["eventlog"] = 'Event log'; -$_lang["eventlog_msg"] = 'The event log is used to display information, warning and error messages generated by the content manager. The \'source\' column shows the section of the content manager where the message occurred.'; -$_lang["eventlog_viewer"] = 'System Events'; -$_lang["everybody"] = 'Everybody'; -$_lang["existing_category"] = 'Existing Category'; -$_lang["expand_tree"] = 'Expand Site Tree'; -$_lang["export_site"] = 'Export Static HTML'; -$_lang["export_site_cacheable"] = 'Include non-cacheable files:'; -$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; -$_lang["export_site_failed"] = 'Failed!'; -$_lang["export_site_failed_no_open"] = 'Cannot open file: '; -$_lang["export_site_failed_no_retrieve"] = 'Cannot retrieve document.'; -$_lang["export_site_failed_no_write"] = 'Cannot write file.'; -$_lang["export_site_html"] = 'Export site to HTML'; -$_lang["export_site_maxtime"] = 'Max export time:'; -$_lang["export_site_maxtime_message"] = 'Specify the number of seconds EVO can take to export the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; -$_lang["export_site_message"] = '

          Use this to export the entire site to static HTML files. Please note, however, that you will lose a lot of the EVO functionality should you do so:

          • Page reads on the exported files will not be recorded.
          • Interactive Snippets will NOT work in exported files
          • Only regular Resources will be exported, Weblinks will not be exported.
          • The export process may fail if your Resources contain Snippets which send redirection headers.
          • Depending on how you\'ve written your Resources, style sheets and images, the design of your site may be broken. To fix this, save/move your exported files to the same directory where the main EVO index.php file is located.

          Please fill out the form and press \'Export\' to start the export process. The files created will be saved in the /assets/export directory, using the Resources\' URL aliases as filenames when possible. While exporting your site, it\'s best to have the EVO configuration item \'Friendly URL aliases\' set to \'yes\'. Depending on the size of your site, the export may take a while.

          Any existing files will be overwritten by the new files if their names are identical!

          '; -$_lang["export_site_numberdocs"] = '

          Found %s Resources to export...

          '; -$_lang["export_site_prefix"] = 'File prefix:'; -$_lang["export_site_start"] = 'Start export'; -$_lang["export_site_success"] = 'Success!'; -$_lang["export_site_success_skip_dir"] = 'Skip this directory.'; -$_lang["export_site_success_skip_doc"] = 'Skip this document.'; -$_lang["export_site_suffix"] = 'File suffix:'; -$_lang["export_site_target_unwritable"] = 'Target directory isn\'t writable. Please ensure the directory is writable, and try again.'; -$_lang["export_site_time"] = 'Export finished. Export took %s seconds to complete.'; -$_lang["failed_login_message"] = 'Enter the number of failed login attempts allowed before blocking a user.'; -$_lang["failed_login_title"] = 'Failed Login Attempts'; -$_lang["fe_editor_lang_message"] = 'Choose a language for the editor to use when used as a front-end editor.'; -$_lang["fe_editor_lang_title"] = 'Front-end Editor Language'; -$_lang["file_delete_file"] = 'Delete file'; -$_lang["file_delete_folder"] = 'Delete directory'; -$_lang["file_deleted"] = 'Success!'; -$_lang["file_download_file"] = 'Download File'; -$_lang["file_download_unzip"] = 'Unzip File'; -$_lang["file_folder_chmod_error"] = 'Unable to change permissions, you will need to change permissions outside of EVO.'; -$_lang["file_folder_created"] = 'Directory created successfully!'; -$_lang["file_folder_deleted"] = 'Directory was successfully deleted!'; -$_lang["file_folder_not_created"] = 'Unable to create directory'; -$_lang["file_folder_not_deleted"] = 'Unable to delete directory. Make sure it is empty before deleting.'; -$_lang["file_not_deleted"] = 'Failed!'; -$_lang["file_not_saved"] = 'Cannot save file, please ensure target directory is writable!'; -$_lang["file_saved"] = 'File updated successfully!'; -$_lang["file_unzip"] = 'Unzip was successful!'; -$_lang["file_unzip_fail"] = 'Unzip Failed!'; -$_lang["filemanager_path_message"] = 'IIS often does not populate the document_root setting properly, which is used by the file manager to determine what you can see. If you are having problems using the file manager, make sure this path points to the root of your EVO installation.'; -$_lang["filemanager_path_title"] = 'File Manager path'; -$_lang["files_access_denied"] = 'Access denied!'; -$_lang["files_data"] = 'Data'; -$_lang["files_dir_listing"] = 'Directory listing for:'; -$_lang["files_directories"] = 'Directories'; -$_lang["files_directory_is_empty"] = 'This directory is empty.'; -$_lang["files_dirwritable"] = 'Directory writable?'; -$_lang["files_editfile"] = 'Edit file'; -$_lang["files_file_type"] = 'File type: '; -$_lang["files_filename"] = 'Filename'; -$_lang["files_fileoptions"] = 'Options'; -$_lang["files_files"] = 'Files'; -$_lang["files_filesize"] = 'File size'; -$_lang["files_filetype_notok"] = 'Uploading of this kind of file is not allowed!'; -$_lang["files_management"] = 'Manage Files'; -$_lang["files_management_no_permission"] = 'You do not have enough permissions to view or edit these files. Ask the administrator to grant you access to %s.'; -$_lang["files_modified"] = 'Modified'; -$_lang["files_top_level"] = 'To top level'; -$_lang["files_up_level"] = 'Up one level'; -$_lang["files_upload_copyfailed"] = 'Failed to copy file to destination directory - upload failed!'; -$_lang["files_upload_error"] = 'Error'; -$_lang["files_upload_error0"] = 'There was a problem with your upload.'; -$_lang["files_upload_error1"] = 'The file you are trying to upload is too big.'; -$_lang["files_upload_error2"] = 'The file you are trying to upload is too big.'; -$_lang["files_upload_error3"] = 'The file you are trying upload was only partially uploaded.'; -$_lang["files_upload_error4"] = 'You must select a file for upload.'; -$_lang["files_upload_error5"] = 'There was a problem with your upload.'; -$_lang["files_upload_inhibited_msg"] = 'Upload feature inhibited - make sure uploads are supported and the directory is writable for PHP.'; -$_lang["files_upload_ok"] = 'File uploaded successfully!'; -$_lang["files_upload_permissions_error"] = 'Possible permission problems - the directory you want to upload to needs to be writable by your webserver.'; -$_lang["files_uploadfile"] = 'Upload file'; -$_lang["files_uploadfile_msg"] = 'Select a file to upload:'; -$_lang["files_uploading"] = 'Uploading %s to %s/'; -$_lang["files_viewfile"] = 'View file'; -$_lang["folder"] = 'Folder'; -$_lang["forgot_password_email_fine_print"] = '* The URL above will expire once you change your password or after today.'; -$_lang["forgot_password_email_instructions"] = 'From there you will be able to change your password from the My Account menu.'; -$_lang["forgot_password_email_intro"] = 'A request has been made to change the password on your account.'; -$_lang["forgot_password_email_link"] = 'Click here to complete the process.'; -$_lang["forgot_your_password"] = 'Forgot your password?'; -$_lang["friday"] = 'Friday'; -$_lang["friendly_alias_message"] = 'With Friendly URLs enabled, a Resource URL alias will be used when present instead of the Resource ID. E.g., if a Resource with ID 1 has an URL alias of "introduction", no prefix set (empty) and a suffix of ".html", enabling this option would generate an URL alias of "introduction.html". If there is no URL alias set, EVO generates "1.html".'; -$_lang["friendly_alias_title"] = 'Use Friendly URL aliases'; -$_lang["friendlyurls_message"] = 'Use Search Engine Friendly URLs on Apache webservers with mod_rewrite or IIS with third-party plugins. See the .htaccess file in the site root of the distribution for more info.'; -$_lang["friendlyurls_title"] = 'Use FriendlyURLs'; -$_lang["friendlyurlsprefix_message"] = 'A prefix setting of "page" will turn the URL /index.php?id=2 to the URL alias "page2.html" (assuming the suffix is set to .html).'; -$_lang["friendlyurlsprefix_title"] = 'Friendly URL Prefix'; -$_lang["friendlyurlsuffix_message"] = 'Any suffix you choose will work, including no suffix at all. E.g., ".aspx" will append .aspx to all URL aliases.'; -$_lang["friendlyurlsuffix_title"] = 'Friendly URL Suffix'; -$_lang["functionnotimpl"] = 'Sorry!'; -$_lang["functionnotimpl_message"] = 'This function has not been implemented yet.'; -$_lang["further_info"] = 'Further information'; -$_lang["global_tabs"] = 'Global Tabs'; -$_lang["go"] = 'Go'; -$_lang["group_access_permissions"] = 'User group access'; -$_lang['group_tvs'] = 'Group TV'; -$_lang["guid"] = 'GUID'; -$_lang["help"] = 'Help'; -$_lang["help_msg"] = '

          You can obtain free community support by visiting the EVO Forums. There is also a growing body of EVO Documentation and Guides that touch on virtually every aspect of EVO.

          We are planning to offer commercial support services for EVO as well. Please email us if you\'re interested.

          '; -$_lang["help_title"] = 'Help'; -$_lang["hide_tree"] = 'Hide Site Tree'; -$_lang["home"] = 'Home'; -$_lang["htmlsnippet"] = 'Chunk'; -$_lang["htmlsnippets"] = 'Chunks'; -$_lang["htmlsnippet_desc"] = 'Description'; -$_lang["htmlsnippet_management_msg"] = 'Select the Chunk you wish to edit.'; -$_lang["htmlsnippet_msg"] = 'Add and edit Chunks. Remember, Chunks are \'raw\' HTML code, so any PHP code won\'t be processed.'; -$_lang["htmlsnippet_name"] = 'Chunk name'; -$_lang["htmlsnippet_title"] = 'Create/edit Chunk'; -$_lang["icon"] = 'Icon'; -$_lang["id"] = 'ID'; -$_lang["illegal_parent_child"] = 'Parent Assignment:\n\nResource is a child of the selected Resource.'; -$_lang["illegal_parent_self"] = 'Parent Assignment:\n\nThe selected Resource cannot be assigned to itself.'; -$_lang["images_management"] = 'Manage Images'; -$_lang["import_files_found"] = 'Found %s Resources for import...'; -$_lang["import_params"] = 'Import Module shared parameters'; -$_lang["import_params_msg"] = 'You can import the parameters or settings of a Module by selecting the name of the Module from the above drop down menu. NOTE: In order for Modules to appear inside the menu, this Plugin/Snippet must be a part of the Module\'s dependency listing and the Module must have parameter sharing enabled. '; -$_lang["import_parent_resource"] = 'Parent Resource:'; -$_lang["import_site"] = 'Import HTML'; -$_lang["import_site_failed"] = 'Failed!'; -$_lang["import_site_failed_db_error"] = 'A database error occured while trying to clone Resource: '; -$_lang["import_site_failed_no_open_dir"] = 'Could not open directory: '; -$_lang["import_site_failed_no_retrieve_file"] = 'Could not retrieve file: '; -$_lang["import_site_html"] = 'Import site from HTML'; -$_lang["import_site_importing_document"] = 'Importing file %s '; -$_lang["import_site_maxtime"] = 'Max import time:'; -$_lang["import_site_maxtime_message"] = 'Specify the number of seconds allowed for the Content Manager to import the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; -$_lang["import_site_message"] = '

          Import an entire HTML site into your site database. Please note that you will need to copy your html files and/or directories into the /assets/import directory.

          Please fill out the form and press \'Import\' to start the import process. The files imported will be saved into the selected location, using the files name as the Resource\'s URL aliases where possible, and the Resource title tag as the pagetitle.'; -$_lang["import_site_skip"] = 'Skipped!'; -$_lang["import_site_start"] = 'Start Import'; -$_lang["import_site_success"] = 'Success!'; -$_lang["import_site_time"] = 'Import finished. Import took %s seconds to complete.'; -$_lang["inbox"] = 'Inbox'; -$_lang["info"] = 'Info'; -$_lang["information"] = 'Information'; -$_lang["inline"] = 'Inline'; -$_lang["insert"] = 'Insert'; -$_lang["maxImageWidth"] = 'Maximum image width'; -$_lang["maxImageHeight"] = 'Maximum image height'; -$_lang["thumbWidth"] = 'Maximum thumbnail width'; -$_lang["thumbHeight"] = 'Maximum thumbnail height'; -$_lang["thumbsDir"] = 'Thumbnails directory location'; -$_lang["jpegQuality"] = 'JPEG compression'; -$_lang["denyZipDownload"] = 'Disable zip-archives downloading'; -$_lang["denyExtensionRename"] = 'Disable renaming of file extensions'; -$_lang["maxImageWidth_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; -$_lang["maxImageHeight_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; -$_lang["thumbWidth_message"] = 'Maximum thumbnail width.'; -$_lang["thumbHeight_message"] = 'Maximum thumbnail height.'; -$_lang["thumbsDir_message"] = 'The name of thumbnail directory.'; -$_lang["jpegQuality_message"] = 'JPEG compression quality of thumbnails and resized images'; -$_lang["showHiddenFiles"] = 'Show hidden files in file browser'; -$_lang["keyword"] = 'Keyword'; -$_lang["keywords"] = 'Keywords'; -$_lang["keywords_intro"] = 'To edit a keyword, simply type in the new keyword in the text field next to the keyword you wish to change. To delete a keyword, check the \'delete\' box for that keyword. If you check the keyword\'s delete box, and also change it\'s name, it will be deleted, and the renaming of the keyword will not take place!'; -$_lang["language_message"] = 'Select the language for the EVO Content Manager.'; -$_lang["language_title"] = 'Manager language'; -$_lang["last_update"] = 'Last update'; -$_lang["launch_site"] = 'View Site'; -$_lang["license"] = 'License'; -$_lang["link_attributes"] = 'Link Attributes'; -$_lang["link_attributes_help"] = 'Enter optional attributes for a link for this page, such as target="_blank" or rel="external".'; -$_lang["list_mode"] = 'Turn on/off list mode - used to list all records in the grid.'; -$_lang["loading_doc_tree"] = 'Loading Site Tree...'; -$_lang["loading_menu"] = 'Loading menu...'; -$_lang["loading_page"] = 'Please wait while EVO loads the page...'; -$_lang["localtime"] = 'Local Time'; -$_lang["lock_htmlsnippet"] = 'Lock Chunk for editing'; -$_lang["lock_htmlsnippet_msg"] = 'Only Administrators (Role ID 1) can edit this Chunk.'; -$_lang["lock_module"] = 'Lock Module for editing'; -$_lang["lock_module_msg"] = 'Only Administrators (Role ID 1) can edit this Module.'; -$_lang["lock_msg"] = '%s is currently editing this %s. Please wait until the other user has finished and try again.'; -$_lang["lock_plugin"] = 'Lock Plugin for editing'; -$_lang["lock_plugin_msg"] = 'Only Administrators (Role ID 1) can edit this Plugin.'; -$_lang["lock_settings_msg"] = '%s is currently editing these settings. Please wait until the other user has finished and try again.'; -$_lang["lock_snippet"] = 'Lock Snippet for editing'; -$_lang["lock_snippet_msg"] = 'Only Administrators (Role ID 1) can edit this Snippet.'; -$_lang["lock_template"] = 'Lock Template for editing'; -$_lang["lock_template_msg"] = 'Only Administrators (Role ID 1) can edit this Template.'; -$_lang["lock_tmplvars"] = 'Lock Template Variable for editing'; -$_lang["lock_tmplvars_msg"] = 'Only Administrators (Role ID 1) can edit this Template Variable.'; -$_lang["locked"] = 'Locked'; -$_lang["login_allowed_days"] = 'Allowed Days'; -$_lang["login_allowed_days_message"] = 'Select the days that this user is allowed to login.'; -$_lang["login_allowed_ip"] = 'Allowed IP Address'; -$_lang["login_allowed_ip_message"] = 'Enter the IP addresses that this user is allowed to login from. NOTE: Separate multiple IP addresses with a comma (,)'; -$_lang["login_button"] = 'Login'; -$_lang["login_cancelled_install_in_progress"] = 'Install/update of this site is currently in progress. Please retry in a couple of minutes!'; -$_lang["login_cancelled_site_was_updated"] = 'Install/update on this site was executed, please login again!'; -$_lang["login_captcha_message"] = 'Please enter the security code shown in the graphic. If you can\'t read the code, click the image to generate a new one or contact your site admin.'; -$_lang["login_homepage"] = 'Login Home Page'; -$_lang["login_homepage_message"] = 'Enter the ID of the Resource you want to send user to after he/she has logged in. NOTE: make sure the ID you enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; -$_lang["login_message"] = 'Please enter your login credentials to start your Manager session. Your username and password are case-sensitive, so please enter them carefully!'; -$_lang["logo_slogan"] = 'EVO Content Manager - \nCreate and do more with less'; -$_lang["logout"] = 'Logout'; -$_lang["long_title"] = 'Long title'; -$_lang["mail_check_timeperiod_message"] = 'How often to check for new mail messages in the Manager, in seconds.'; -$_lang["mail_check_timeperiod_title"] = 'Mail Check Time Period'; -$_lang["manage_depends"] = 'Manage Dependencies'; -$_lang["manage_files"] = 'Manage Files'; -$_lang["manage_htmlsnippets"] = 'Chunks'; -$_lang["manage_metatags"] = 'Manage META tags and Keywords'; -$_lang["manage_modules"] = 'Manage Modules'; -$_lang["manage_plugins"] = 'Plugins'; -$_lang["manage_snippets"] = 'Snippets'; -$_lang["manage_templates"] = 'Templates'; -$_lang["manage_documents"] = 'Documents'; -$_lang["manager"] = 'Manager'; -$_lang["manager_lockout_message"] = 'You are currently logged into the Content Manager. If you would like to close your login session please click the "Logout" button.

          To go to your startup or home page click the "Home" button.'; -$_lang["manager_permissions"] = 'Manager Permissions'; -$_lang["manager_theme"] = 'Manager Theme'; -$_lang["manager_theme_message"] = 'Select the Theme for the Content Manager.'; -$_lang["messages"] = 'Messages'; -$_lang["messages_all"] = 'Everyone'; -$_lang["messages_compose"] = 'Compose a message'; -$_lang["messages_forward"] = 'Forward'; -$_lang["messages_from"] = 'From'; -$_lang["messages_group"] = 'A group'; -$_lang["messages_inbox"] = 'Inbox'; -$_lang["messages_message"] = 'Message'; -$_lang["messages_no_messages"] = 'No messages in Inbox.'; -$_lang["messages_not_allowed_to_read"] = 'You\'re not allowed to read this message!'; -$_lang["messages_private"] = 'Private'; -$_lang["messages_read_message"] = 'Read message'; -$_lang["messages_reply"] = 'Reply'; -$_lang["messages_select_group"] = 'Select a group'; -$_lang["messages_select_user"] = 'Select a user'; -$_lang["messages_send"] = 'Send'; -$_lang["messages_send_to"] = 'Send to'; -$_lang["messages_sent"] = 'Sent on'; -$_lang["messages_subject"] = 'Subject'; -$_lang["messages_system_user"] = '[System]'; -$_lang["messages_title"] = 'Messages'; -$_lang["messages_user"] = 'A user'; -$_lang["meta_keywords"] = 'META Keywords'; -$_lang["metatag_intro"] = 'On this page you can delete, create or edit META tags. To link META tags to Resources, click on the META Keywords tab when editing the Resource, and select the desired META tags and keywords. To add a new tag enter the name and value and click the \'Add tag\' button. To edit the tag click on the name of the tag from within the data grid.'; -$_lang["metatag_notice"] = 'You may wish to reference the HTML Reference Guide site for more information. This is not a complete list of possible Meta Tags.'; -$_lang["metatags"] = 'META tags'; -$_lang["mgr_access_permissions"] = 'Manager access permissions'; -$_lang["mgr_login_start"] = 'Manager Login Startup'; -$_lang["mgr_login_start_message"] = 'Enter the ID of the Resource you want to send the user to after he/she has logged into the manager. NOTE: make sure the ID you\'ve enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; -$_lang["mgrlog_action"] = 'Action'; -$_lang["mgrlog_actionid"] = 'Action ID'; -$_lang["mgrlog_anyall"] = 'Any/All'; -$_lang["mgrlog_datecheckfalse"] = 'checkdate() returned false.'; -$_lang["mgrlog_datefr"] = 'Date from'; -$_lang["mgrlog_dateinvalid"] = 'Invalid date format.'; -$_lang["mgrlog_dateto"] = 'Date to'; -$_lang["mgrlog_emptysrch"] = 'Your search query returned an empty result set (i.e. not matching logs found).'; -$_lang["mgrlog_field"] = 'Field'; -$_lang["mgrlog_itemid"] = 'Item ID'; -$_lang["mgrlog_itemname"] = 'Item name'; -$_lang["mgrlog_msg"] = 'Message'; -$_lang["mgrlog_noquery"] = 'No search query entered yet.'; -$_lang["mgrlog_qresults"] = 'Query results'; -$_lang["mgrlog_query"] = 'Query logging'; -$_lang["mgrlog_query_msg"] = 'Please make a selection for viewing the logs. You can select log entries by date, but be aware that the dates you enter are not inclusive - to select every log entry for 01-01-2004, set \'date from\' to 01-01-2004 and \'date to\' to 02-01-2004.

          Message and action are usually the same. If you\'re searching for a specific message, it\'s best to set action to \'Any/All\'.'; -$_lang["mgrlog_results"] = 'No. of results'; -$_lang["mgrlog_searchlogs"] = 'Search logs'; -$_lang["mgrlog_sortinst"] = 'Sort the table by clicking on the column headers. If the logs are too large, empty the log file to remove all log entries up to now. This cannot be undone!'; -$_lang["mgrlog_time"] = 'Time'; -$_lang["mgrlog_user"] = 'User'; -$_lang["mgrlog_username"] = 'Username'; -$_lang["mgrlog_value"] = 'Value'; -$_lang["mgrlog_view"] = 'View manager logs'; -$_lang["module_code"] = 'Module code (php)'; -$_lang["module_config"] = 'Module configuration'; -$_lang["module_desc"] = 'Description'; -$_lang["module_disabled"] = 'Module disabled'; -$_lang["module_edit_click_title"] = 'Click here to edit this Module'; -$_lang["module_group_access_msg"] = 'Select the User Groups that are allowed to execute this Module from within the Content Manager.'; -$_lang["module_management"] = 'Manage Modules'; -$_lang["module_management_msg"] = 'Choose the Module you would like to execute or modify. To run the Module click on the icon in the grid. To modify the Module click on the name of the Module.'; -$_lang["module_msg"] = 'Add/edit Modules. A Module is a collection of Elements (e.g. Plugins, Snippets, etc).'; -$_lang["module_name"] = 'Module name'; -$_lang["module_resource_msg"] = 'Add or remove Elements upon which this Module depends. To add a new Element click on the one of the add buttons below.'; -$_lang["module_resource_title"] = 'Module Dependencies'; -$_lang["module_title"] = 'Create/edit Module'; -$_lang["module_viewdepend_msg"] = 'View the assigned Elements on which this Module depends. Click on the "Manager Dependencies" button to modify the dependencies'; -$_lang["modules"] = 'Modules'; -$_lang["modx_news"] = 'EVO News Notices'; -$_lang["modx_news_tab"] = 'EVO News'; -$_lang["modx_news_title"] = 'EVO News'; -$_lang["modx_security_notices"] = 'EVO Security Notices'; -$_lang["modx_version"] = 'EVO version'; -$_lang["monday"] = 'Monday'; -$_lang["move"] = 'Move'; -$_lang["move_resource"] = 'Move Resource'; -$_lang["move_resource_message"] = 'Move a Resource and all its children by selecting a new parent in the Site Tree. If you select a Resource that is not already a Container, it will be changed into one. Please click on the new parent in the Site Tree.'; -$_lang["move_resource_new_parent"] = 'Please select a new parent in the Site Tree.'; -$_lang["move_resource_title"] = 'Move Resource'; -$_lang["name"] = 'Name'; -$_lang["new_category"] = 'New Category'; -$_lang["new_file_permissions_message"] = 'When uploading a new file in the File Manager, the File Manager will attempt to change the file permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; -$_lang["new_file_permissions_title"] = 'New File Permissions'; -$_lang["new_folder_permissions_message"] = 'When creating a new directory in the File Manager, the File Manager will attempt to change the directory permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; -$_lang["new_folder_permissions_title"] = 'New Directory Permissions'; -$_lang["new_htmlsnippet"] = 'New Chunk'; -$_lang["new_keyword"] = 'Add new keyword:'; -$_lang["new_module"] = 'New Module'; -$_lang["new_parent"] = 'New parent'; -$_lang["new_plugin"] = 'New Plugin'; -$_lang["new_role"] = 'New Role'; -$_lang["new_snippet"] = 'New Snippet'; -$_lang["new_template"] = 'New Template'; -$_lang["new_tmplvars"] = 'New Template Variable'; -$_lang["new_user"] = 'New User'; -$_lang["new_web_user"] = 'New Web User'; -$_lang["new_resource"] = 'New Resource'; -$_lang["no"] = 'No'; -$_lang["no_active_users_found"] = 'No active users found.'; -$_lang["no_activity_message"] = 'You have not yet created or edited any Resources.'; -$_lang["no_category"] = 'uncategorized'; -$_lang["no_docs_pending_publishing"] = 'No Resources pending publishing.'; -$_lang["no_docs_pending_pubunpub"] = 'No Events Found'; -$_lang["no_docs_pending_unpublishing"] = 'No Resources pending unpublishing.'; -$_lang["no_edits_creates"] = 'No edits or creates found.'; -$_lang["no_groups_found"] = 'No groups found.'; -$_lang["no_keywords_found"] = 'There are currently no keywords.'; -$_lang["no_records_found"] = 'No records found.'; -$_lang["no_results"] = 'No results found'; -$_lang["nologentries_message"] = 'Enter the number of log entries shown per page when you browse the Audit trail.'; -$_lang["nologentries_title"] = 'Number of log entries'; -$_lang["nomessages_message"] = 'Enter the number of messages to show in inbox when viewing messages.'; -$_lang["nomessages_title"] = 'Number of messages'; -$_lang["none"] = 'None'; -$_lang["noresults_message"] = 'Enter the number of results to show in the data grid when viewing listings and search results.'; -$_lang["noresults_title"] = 'Number of Results'; -$_lang["not_deleted"] = 'has not been deleted.'; -$_lang["not_set"] = 'Not set'; -$_lang["offline"] = 'Offline'; -$_lang["online"] = 'Online'; -$_lang["onlineusers_action"] = 'Action'; -$_lang["onlineusers_actionid"] = 'Action-ID'; -$_lang["onlineusers_ipaddress"] = 'User\'s IP address'; -$_lang["onlineusers_lasthit"] = 'Last hit'; -$_lang["onlineusers_message"] = 'This list shows all users active within the last 20 minutes (current time is '; -$_lang["onlineusers_title"] = 'Online users'; -$_lang["onlineusers_user"] = 'User'; -$_lang["onlineusers_userid"] = 'User\'s ID'; -$_lang["optimize_table"] = 'Click here to optimize this table'; -$_lang["page_data_alias"] = 'Alias'; -$_lang["page_data_cacheable"] = 'Cacheable'; -$_lang["page_data_cacheable_help"] = 'This allows the Resource to be saved to the site cache, and affects all Snippets on the page.'; -$_lang["page_data_cached"] = 'Source retrieved from cache:'; -$_lang["page_data_changes"] = 'Changes'; -$_lang["page_data_contentType"] = 'Internet Media Type'; -$_lang["page_data_contentType_help"] = 'Select the content type for this Resource. If you\'re not sure which content type the Resource should have, just leave it as text/html.'; -$_lang["page_data_created"] = 'Created'; -$_lang["page_data_edited"] = 'Edited'; -$_lang["page_data_editor"] = 'Edit using rich text editor'; -$_lang["page_data_folder"] = 'Resource is Container'; -$_lang["page_data_general"] = 'General'; -$_lang["page_data_markup"] = 'Markup/structure'; -$_lang["page_data_mgr_access"] = 'Manager access'; -$_lang["page_data_notcached"] = 'This Resource has not yet been cached.'; -$_lang["page_data_publishdate"] = 'Publish date'; -$_lang["page_data_publishdate_help"] = 'If you set a publish date, the Resource will be published as soon as the publish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the publish date. This will then mean the Resource is never automatically published.'; -$_lang["page_data_published"] = 'Published'; -$_lang["page_data_searchable"] = 'Searchable'; -$_lang["page_data_searchable_help"] = 'Checking this field will allow the Resource to be searched. You can also use this field for other purposes in your Snippets.'; -$_lang["page_data_source"] = 'Source'; -$_lang["page_data_status"] = 'Status'; -$_lang["page_data_template"] = 'Uses Template'; -$_lang["page_data_template_help"] = 'Select the Template for this Resource.'; -$_lang["page_data_title"] = 'Page data'; -$_lang["page_data_unpublishdate"] = 'Un-publish date'; -$_lang["page_data_unpublishdate_help"] = 'If you set an unpublish date, the Resource will be unpublished as soon as the unpublish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the unpublish date. This will then mean the Resource is never automatically unpublished.'; -$_lang["page_data_unpublished"] = 'Un-published'; -$_lang["page_data_web_access"] = 'Web access'; -$_lang["pagetitle"] = 'Resource\'s title'; -$_lang["pagination_table_first"] = 'First'; -$_lang["pagination_table_gotopage"] = 'Go to page'; -$_lang["pagination_table_last"] = 'Last'; -$_lang["paging_first"] = 'first'; -$_lang["paging_last"] = 'last'; -$_lang["paging_next"] = 'next'; -$_lang["paging_prev"] = 'prev'; -$_lang["paging_showing"] = 'Showing'; -$_lang["paging_to"] = 'to'; -$_lang["paging_total"] = 'total'; -$_lang["parameter"] = 'Parameter'; -$_lang["parse_docblock"] = 'Parse DocBlock'; -$_lang["parse_docblock_msg"] = 'Attention (!): Resets actual name, configuration, description and category to install-defaults by parsing the source code.'; -$_lang["password"] = 'Password'; -$_lang["password_change_request"] = 'Password change request'; -$_lang["password_gen_gen"] = 'Let EVO generate a password.'; -$_lang["password_gen_length"] = 'The password you specify needs to be at least 6 characters long.'; -$_lang["password_gen_method"] = 'New password method'; -$_lang["password_gen_specify"] = 'Let me specify the password:'; -$_lang["password_method"] = 'Password notification method'; -$_lang["password_method_email"] = 'Send the new password by e-mail.'; -$_lang["password_method_screen"] = 'Show the new password on screen.'; -$_lang["password_msg"] = 'The new password for %s is %s.'; -$_lang["php_version_check"] = 'EVO Evolution is compatible with PHP version 5.0.0 and higher. This server is using version %s%. Please upgrade your PHP installation!'; -$_lang["plugin"] = 'Plugin'; -$_lang["plugins"] = 'Plugins'; -$_lang["plugin_code"] = 'Plugin code (php)'; -$_lang["plugin_config"] = 'Plugin configuration'; -$_lang["plugin_desc"] = 'Description'; -$_lang["plugin_disabled"] = 'Plugin Disabled'; -$_lang["plugin_event_msg"] = 'Select the events that you would like this Plugin to listen to.'; -$_lang["plugin_management_msg"] = 'Choose which Plugin you wish to edit.'; -$_lang["plugin_msg"] = 'Add/edit Plugins. Plugins use PHP code that is invoked whenever specific System Events trigger.'; -$_lang["plugin_name"] = 'Plugin name'; -$_lang["plugin_priority"] = 'Edit Plugin Execution Order by Event'; -$_lang["plugin_priority_instructions"] = 'Drag to reorder the Plugins under each Event header. The first plugin to execute should go at the top.'; -$_lang["plugin_priority_title"] = 'Plugin Execution Order'; -$_lang["purge_plugin"] = 'Purge obsolete plugins'; -$_lang["plugin_title"] = 'Create/edit Plugin'; -$_lang["preview"] = 'Preview'; -$_lang["preview_msg"] = 'This is a preview of your last saved changes. Click here to Save and Refresh your current changes'; -$_lang["preview_resource"] = 'Preview Resource'; -$_lang["private"] = 'Private'; -$_lang["public"] = 'Public'; -$_lang["publish_date"] = 'Publish Date'; -$_lang["publish_events"] = 'Publish Events'; -$_lang["publish_resource"] = 'Publish Resource'; -$_lang["rb_base_dir_message"] = 'Enter the physical path to the File Browser directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the path out on its own, causing the File Browser to show an error. In that case, you can enter the path to the images directory here (the path as you\'d see it in Windows Explorer). NOTE: The File Browser directory must contain the subdirectories images, files, flash and media in order for the file browser to function correctly.'; -$_lang["rb_base_dir_title"] = 'File base path'; -$_lang["rb_base_url_message"] = 'Enter the virtual path to files directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the URL out on it\'s own, causing the File Browser to show an error. In that case, you can enter the URL to the images directory here (the URL as you\'d enter it on Internet Explorer).'; -$_lang["rb_base_url_title"] = 'File Browser URL'; -$_lang["rb_message"] = 'Select yes to enable the File Browser. This will allow your users to browse and upload files such as images, flash and media files on the server.'; -$_lang["rb_title"] = 'Enable File Browser'; -$_lang["rb_webuser_message"] = 'Do you want to allow a web user the ability to use the file browser? WARNING: Allowing web users the use of the file browser exposes the files available to manager users. Only use this option for trusted web users.'; -$_lang["rb_webuser_title"] = 'Web Users?'; -$_lang["recent_docs"] = 'Recent Resources'; -$_lang["recommend_setting_change_title"] = 'Recommended Setting Change'; -$_lang["recommend_setting_change_description"] = 'Your site is not configured to validate the HTTP_REFERER of incoming requests to the Manager. We strongly recommend enabling this setting to reduce the risk of a CSRF (Cross Site Request Forgery) attack.'; -$_lang["references"] = 'References'; -$_lang["refresh_cache"] = 'Cache: Found %s files in cache directory and deleted %d cache files.

          New cache files will be created when pages are requested.'; -$_lang["refresh_published"] = '%s Resources were published.'; -$_lang["refresh_site"] = 'Clear Cache'; -$_lang["refresh_title"] = 'Refresh site'; -$_lang["refresh_tree"] = 'Refresh Site Tree'; -$_lang["refresh_unpublished"] = '%s Resources were unpublished.'; -$_lang["release_date"] = 'Release date'; -$_lang["remember_last_tab"] = 'Remember tabs'; -$_lang["remember_last_tab_message"] = 'Tabbed Manager pages load with the last tab viewed instead of defaulting to the first tab'; -$_lang["remember_username"] = 'Remember me'; -$_lang["remove"] = 'Remove'; -$_lang["remove_date"] = 'Remove date'; -$_lang["remove_locks"] = 'Remove Locks'; -$_lang["rename"] = 'Rename'; -$_lang["reports"] = 'Reports'; -$_lang["report_issues"] = 'Report issues'; -$_lang["require_tagname"] = 'A tag name is required'; -$_lang["require_tagvalue"] = 'A tag value is required'; -$_lang["reserved_name_warning"] = 'You have used a reserved name.'; -$_lang["reset"] = 'Reset'; -$_lang["reset_failedlogins"] = 'reset'; -$_lang["reset_sort_order"] = 'Reset sort order'; -$_lang["resource"] = 'Resource'; -$_lang["resource_alias"] = 'URL alias'; -$_lang["resource_alias_help"] = 'Set the URL alias to make the Resource accessible as http://example.com/weburl. This only works Friendly URLs are enabled in the site configuration.'; -$_lang["resource_content"] = 'Resource content'; -$_lang["resource_description"] = 'Description'; -$_lang["resource_description_help"] = 'Enter an optional description of this Resource.'; -$_lang["resource_duplicate"] = 'Duplicate Resource'; -$_lang["resource_long_title_help"] = 'Enter an optional longer title for your Resource. This can be used for automatic Resource header tags for search engines, and might be more descriptive for your Resource.'; -$_lang["resource_metatag_help"] = 'Select the META tags or keywords you wish to assign to this Resource. Hold down the CTRL key to select multiple keywords or meta tags.'; -$_lang["resource_opt_contentdispo"] = 'Content-Disposition'; -$_lang["resource_opt_contentdispo_help"] = 'Use the content disposition field to specify how this Resource will be handled by the web browser. For file downloads select the Attachment option.'; -$_lang["resource_opt_emptycache"] = 'Empty cache'; -$_lang["resource_opt_emptycache_help"] = 'Leaving this field checked will make EVO empty the cache after you save the Resource. This way your visitors will not see an older version of the Resource.'; -$_lang["resource_opt_folder"] = 'Container'; -$_lang["resource_opt_folder_help"] = 'Check this to make the Resource also act as a Container for other Resources. A \'Container\' is like a folder, only it can also have content.'; -$_lang["resource_opt_menu_index"] = 'Menu index'; -$_lang["resource_opt_menu_index_help"] = 'Menu Index is a field that can control sorting Resources, particularly in menu Snippet(s). You can also use it for any other purpose in your Snippets.'; -$_lang["resource_opt_menu_title"] = 'Menu title'; -$_lang["resource_opt_menu_title_help"] = 'Menu title is an optional field used to display a short title in menu Snippet(s) or Modules.'; -$_lang["resource_opt_published"] = 'Published'; -$_lang["resource_opt_published_help"] = 'Check this field to have the Resource published immediately after saving it.'; -$_lang["resource_opt_richtext"] = 'Rich text'; -$_lang["resource_opt_richtext_help"] = 'Leave this checked to use the rich text editor for editing Resources. If your Resources contain JavaScript and forms, uncheck this to edit in HTML mode to prevent the editor from incorrectly changing your Resources.'; -$_lang["resource_opt_show_menu"] = 'Show in menu'; -$_lang["resource_opt_show_menu_help"] = 'Select this option to show Resource inside a web menu. Please note that some Menu Builders might choose to ignore this option.'; -$_lang["resource_opt_trackvisit_help"] = 'Log each visitor\'s visit to this page'; -$_lang["resource_overview"] = 'Resource overview'; -$_lang["resource_parent"] = 'Resource parent'; -$_lang["resource_parent_help"] = 'Click the icon to enable setting a Resource parent, then click a Resource in the Site Tree to set a new parent.'; -$_lang["resource_permissions_error"] = 'Assign this Resource to at least one Resource Group to which you have access.'; -$_lang["resource_setting"] = 'Resource setting'; -$_lang["resource_summary"] = 'Summary (introtext)'; -$_lang["resource_summary_help"] = 'Type a brief summary of the Resource'; -$_lang["resource_title"] = 'Title'; -$_lang["resource_title_help"] = 'Enter the name/title of the Resource. Avoid using backslashes in the name.'; -$_lang["resource_to_be_moved"] = 'Resource to be moved'; -$_lang["resource_type"] = 'Resource Type'; -$_lang["resource_type_message"] = 'Weblinks reference Resources on the Internet including another EVO Resource, an external page, or an image or other file on the Internet. Weblinks should have a text/html Internet Media Type and Inline Content-Disposition.'; -$_lang["resource_type_weblink"] = 'Weblink'; -$_lang["resource_type_webpage"] = 'Web page'; -$_lang["resource_weblink_help"] = 'Type the address of the object you wish to reference with this Weblink here. Alternatively insert from the File Browser or use the link selection icon and select a resource from the Site Tree.'; -$_lang["resources_in_container"] = 'Resources in this Container'; -$_lang["resources_in_container_no"] = 'This Container does not have child-Resources.'; -$_lang["role"] = 'Role'; -$_lang["role_about"] = 'View the about page'; -$_lang["role_access_persmissions"] = 'Access permissions'; -$_lang["role_actionok"] = 'View action completed screen'; -$_lang["role_assets_images"] = 'Manage assets/images'; -$_lang["role_assets_files"] = 'Manage assets/files'; -$_lang["role_bk_manager"] = 'Use the Backup Manager'; -$_lang["role_cache_refresh"] = 'Empty the site\'s cache'; -$_lang["role_category_manager"] = 'Use the Category Manager'; -$_lang["role_change_password"] = 'Change password'; -$_lang["role_change_resourcetype"] = 'Change Resource-Type'; -$_lang["role_chunk_management"] = 'Chunk management'; -$_lang["role_config_management"] = 'Configuration management'; -$_lang["role_content_management"] = 'Content management'; -$_lang["role_create_chunk"] = 'Create new Chunks'; -$_lang["role_create_doc"] = 'Create new Resources'; -$_lang["role_create_plugin"] = 'Create new Plugins'; -$_lang["role_create_snippet"] = 'Create new Snippets'; -$_lang["role_create_template"] = 'Create new site Templates'; -$_lang["role_credits"] = 'View credits'; -$_lang["role_delete_chunk"] = 'Delete Chunks'; -$_lang["role_delete_doc"] = 'Delete Resources'; -$_lang["role_delete_eventlog"] = 'Delete event log'; -$_lang["role_delete_module"] = 'Delete Module'; -$_lang["role_delete_plugin"] = 'Delete Plugins'; -$_lang["role_delete_role"] = 'Delete roles'; -$_lang["role_delete_snippet"] = 'Delete Snippets'; -$_lang["role_delete_template"] = 'Delete Templates'; -$_lang["role_delete_user"] = 'Delete users'; -$_lang["role_delete_web_user"] = 'Delete web users'; -$_lang["role_edit_chunk"] = 'Edit Chunks'; -$_lang["role_edit_doc"] = 'Edit a Resource'; -$_lang["role_edit_doc_metatags"] = 'Edit Resource META tags and keywords'; -$_lang["role_edit_module"] = 'Edit Module'; -$_lang["role_edit_plugin"] = 'Edit Plugins'; -$_lang["role_edit_role"] = 'Edit roles'; -$_lang["role_edit_settings"] = 'Change site settings'; -$_lang["role_edit_snippet"] = 'Edit Snippets'; -$_lang["role_edit_template"] = 'Edit site Templates'; -$_lang["role_edit_user"] = 'Edit users'; -$_lang["role_edit_web_user"] = 'Edit web users'; -$_lang["role_empty_trash"] = 'Permanently purge deleted Resources'; -$_lang["role_errors"] = 'View error dialog'; -$_lang["role_eventlog_management"] = 'Event log management'; -$_lang["role_export_static"] = 'Export Static HTML'; -$_lang["role_file_management"] = 'File Management'; -$_lang["role_file_manager"] = 'Use the file manager (full root access)'; -$_lang["role_frames"] = 'Request manager frames'; -$_lang["role_help"] = 'View help pages'; -$_lang["role_home"] = 'Request manager intro page'; -$_lang["role_import_static"] = 'Import HTML'; -$_lang["role_logout"] = 'Log out of the manager'; -$_lang["role_manage_metatags"] = 'Manage site META tags and keywords'; -$_lang["role_management_msg"] = 'Choose the role you wish to edit.'; -$_lang["role_management_title"] = 'Roles'; -$_lang["role_messages"] = 'View and send messages'; -$_lang["role_module_management"] = 'Module management'; -$_lang["role_name"] = 'Role name'; -$_lang["role_new_module"] = 'Create new Module'; -$_lang["role_new_role"] = 'Create new roles'; -$_lang["role_new_user"] = 'Create new users'; -$_lang["role_new_web_user"] = 'Create new web users'; -$_lang["role_plugin_management"] = 'Plugin management'; -$_lang["role_publish_doc"] = 'Publish Resources'; -$_lang["role_remove_locks"] = 'Remove Locks'; -$_lang["role_role_management"] = 'Roles'; -$_lang["role_run_module"] = 'Run Module'; -$_lang["role_save_chunk"] = 'Save Chunks'; -$_lang["role_save_doc"] = 'Save Resources'; -$_lang["role_save_module"] = 'Save Module'; -$_lang["role_save_password"] = 'Save password'; -$_lang["role_save_plugin"] = 'Save Plugins'; -$_lang["role_save_role"] = 'Save roles'; -$_lang["role_save_snippet"] = 'Save Snippets'; -$_lang["role_save_template"] = 'Save Templates'; -$_lang["role_save_user"] = 'Save users'; -$_lang["role_save_web_user"] = 'Save web users'; -$_lang["role_snippet_management"] = 'Snippet management'; -$_lang["role_template_management"] = 'Template management'; -$_lang["role_title"] = 'Create/edit role'; -$_lang["role_udperms"] = 'Permissions management'; -$_lang["role_user_management"] = 'User management'; -$_lang["role_view_docdata"] = 'View a Resource\'s data'; -$_lang["role_view_eventlog"] = 'View event log'; -$_lang["role_view_logs"] = 'View system logs'; -$_lang["role_view_unpublished"] = 'View Unpublished Resources'; -$_lang["role_web_access_persmissions"] = 'Web access permissions'; -$_lang["role_web_user_management"] = 'Web user management'; -$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/modx-announce'; -$_lang["rss_url_news_message"] = 'Enter the URL for the EVO News Feed.'; -$_lang["rss_url_news_title"] = 'RSS News Feed'; -$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/modxsecurity'; -$_lang["rss_url_security_message"] = 'Enter the URL for the EVO Security Feed.'; -$_lang["rss_url_security_title"] = 'RSS Security Feed'; -$_lang["run_module"] = 'Run Module'; -$_lang["saturday"] = 'Saturday'; -$_lang["save"] = 'Save'; -$_lang["save_all_changes"] = 'Save all changes'; -$_lang["save_tag"] = 'Save tag'; -$_lang["saving"] = 'Saving, please wait...'; -$_lang["search"] = 'Search'; -$_lang["search_criteria"] = 'Search criteria'; -$_lang["search_criteria_content"] = 'Search by content'; -$_lang["search_criteria_content_msg"] = 'Find all Resources with the entered text in their content.'; -$_lang["search_criteria_id"] = 'Search by ID'; -$_lang["search_criteria_id_msg"] = 'Enter a Resource\'s ID to quickly locate that Resource.'; -$_lang["search_criteria_top"] = 'Search in main fields'; -$_lang["search_criteria_top_msg"] = 'Pagetitle, Longtitle, Alias, ID'; -$_lang["search_criteria_template_id"] = 'Search by template ID'; -$_lang["search_criteria_template_id_msg"] = 'Find all Resources using the specified template.'; -$_lang["search_criteria_url_msg"] = 'Find Resource by exact URL.'; -$_lang["search_criteria_longtitle"] = 'Search by long title'; -$_lang["search_criteria_longtitle_msg"] = 'Find all Resources with the entered text in their long title.'; -$_lang["search_criteria_title"] = 'Search by title'; -$_lang["search_criteria_title_msg"] = 'Find all Resources with the entered text in their title.'; -$_lang["search_empty"] = 'Your search returned no results. Please broaden your search criteria and try again.'; -$_lang["search_item_deleted"] = 'This item has been deleted'; -$_lang["search_results"] = 'Search results'; -$_lang["search_results_returned_desc"] = 'Description'; -$_lang["search_results_returned_id"] = 'ID'; -$_lang["search_results_returned_msg"] = 'Your search criteria returned %s Resources. If a lot of results are being returned, try to enter a more specific search. The two left-most columns will allow you to find the Resource in the Site Tree or view the Resource. The two right most columns show, respectively, if a Resource has been deleted and what it\'s published status is.

          '; -$_lang["search_results_returned_title"] = 'Title'; -$_lang["search_view_docdata"] = 'View this item'; -$_lang["security"] = 'Security'; -$_lang["security_notices_tab"] = 'Security Notices'; -$_lang["security_notices_title"] = 'Security Notices'; -$_lang["select_date"] = 'Select a date'; -$_lang["send"] = 'Send'; -$_lang["server_protocol_http"] = 'http'; -$_lang["server_protocol_https"] = 'https'; -$_lang["server_protocol_message"] = 'If your site is on a https connection, please specify so here.'; -$_lang["server_protocol_title"] = 'Server type'; -$_lang["serveroffset"] = 'Server offset'; -$_lang["serveroffset_message"] = 'Select the number of hours time difference between where you are and where the server is. Current time on server is [%s], current time on server using the currently saved offset is [%s].'; -$_lang["serveroffset_title"] = 'Server offset time'; -$_lang["servertime"] = 'Server Time'; -$_lang["set_automatic"] = 'Set automatic'; -$_lang["set_default"] = 'Set default'; -$_lang["set_default_all"] = 'Set defaults'; -$_lang["settings_after_install"] = 'As this is a new install, you are required to control these settings, and change any that you may wish to. After you\'ve controlled the settings, press \'Save\' to update the settings database.'; -$_lang["settings_config"] = 'Configuration'; -$_lang["settings_dependencies"] = 'Dependencies'; -$_lang["settings_events"] = 'System Events'; -$_lang["settings_furls"] = 'Friendly URLs'; -$_lang["settings_general"] = 'General'; -$_lang["settings_group_tv_message"] = 'Choose if Template Variables should be grouped in sections or tabs (named by TV category) when editing a Resource'; -$_lang["settings_group_tv_options"] = 'No,Sections in General tab,Tabs in General tab,Sections in new tab,Tabs in new tab,New tabs'; -$_lang["settings_misc"] = 'File Manager'; -$_lang["settings_security"] = 'Security'; -$_lang["settings_KC"] = 'File Browser'; -$_lang["settings_page_settings"] = 'Settings'; -$_lang["settings_photo"] = 'Photo'; -$_lang["settings_properties"] = 'Properties'; -$_lang["settings_show_picker_message"] = 'Show color picker to change Theme colors'; -$_lang["settings_site"] = 'Site'; -$_lang["settings_strip_image_paths_message"] = 'If this is set to \'No\', EVO will write file browser src\'s (images, files, flash, etc.) as absolute URLs. Relative URLs are helpful should you wish to move your EVO install, e.g., from a staging site to a production site. If you have no idea what this means, it\'s best just to leave it set to \'Yes\'.'; -$_lang["settings_strip_image_paths_title"] = 'Rewrite browser paths?'; -$_lang["settings_templvars"] = 'Template Variables'; -$_lang["settings_title"] = 'System configuration'; -$_lang["settings_ui"] = 'Interface & Features'; -$_lang["settings_users"] = 'User'; -$_lang["show_meta"] = 'Show META Keywords tab'; -$_lang["show_meta_message"] = 'Show the deprecated META Keywords tab when editing Resources in the Manager.'; -$_lang["show_tree"] = 'Show Site Tree'; -$_lang["show_picker"] = 'Show Color Picker'; -$_lang["showing"] = 'Showing'; -$_lang["signupemail_message"] = 'Set the email message sent to users when creating accounts including their username and password.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your users won\'t know their username or password!'; -$_lang["signupemail_title"] = 'Signup e-mail'; -$_lang["site"] = 'Site'; -$_lang["site_schedule"] = 'Schedule'; -$_lang["sitename_message"] = 'Enter the name of your site here.'; -$_lang["sitename_title"] = 'Site name'; -$_lang["sitestart_message"] = 'Enter the ID of the Resource you want to use as homepage here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; -$_lang["sitestart_title"] = 'Site start'; -$_lang["sitestatus_message"] = 'Select \'Online\' to publish your site on the web. If you select \'Offline\', your visitors will see the \'Site unavailable message\', and won\'t be able to browse the site.'; -$_lang["sitestatus_title"] = 'Site status'; -$_lang["siteunavailable_message"] = 'Message to show when the site is offline or if an error occurs. Note: This message will only be displayed if the Site unavailable page option is not set.'; -$_lang["siteunavailable_message_default"] = 'The site is currently unavailable.'; -$_lang["siteunavailable_page_message"] = 'Enter the ID of the Resource you want to use as an offline page here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; -$_lang["siteunavailable_page_title"] = 'Site unavailable page'; -$_lang["siteunavailable_title"] = 'Site unavailable message'; -$_lang["snippet"] = 'Snippet'; -$_lang["snippets"] = 'Snippets'; -$_lang["snippet_code"] = 'Snippet code (php)'; -$_lang["snippet_desc"] = 'Description'; -$_lang["snippet_execonsave"] = 'Execute Snippet after saving.'; -$_lang["snippet_management_msg"] = 'Choose the Snippet you wish to edit.'; -$_lang["snippet_msg"] = 'Add/edit Snippets. Remember, Snippets are \'raw\' PHP code, and if you expect the output of the Snippet to be shown at a certain point within the Template, you need to return a value from within the Snippet.'; -$_lang["snippet_name"] = 'Snippet name'; -$_lang["snippet_properties"] = 'Default Properties'; -$_lang["snippet_title"] = 'Create/edit Snippet'; -$_lang["sort_alphabetically"] = 'Sort alphabetically'; -$_lang["sort_asc"] = 'Ascending'; -$_lang["sort_desc"] = 'Descending'; -$_lang["sort_menuindex"] = 'Sort menu index'; -$_lang["sort_tree"] = 'Sort the Site Tree'; -$_lang['sort_updating'] = 'Updating ...'; -$_lang['sort_updated'] = 'Updated!'; -$_lang['sort_nochildren'] = 'Parent does not have any children'; -$_lang["sort_elements_msg"] = 'Drag to reorder the listed elements.'; -$_lang["source"] = 'Source'; -$_lang["stay"] = 'Continue editing'; -$_lang["stay_new"] = 'Add another'; -$_lang["submit"] = 'Submit'; -$_lang["sunday"] = 'Sunday'; -$_lang["sys_alert"] = 'System Alert'; -$_lang["sysinfo_activity_message"] = 'This list show which Resources have been recently edited by your users.'; -$_lang["sysinfo_userid"] = 'User'; -$_lang["system_email_signup"] = ' - -Hello [+uid+] - -Here are your login details for [+sname+] Content Manager: - -Username: [+uid+] -Password: [+pwd+] - -Once you log into the Content Manager ([+surl+]), you can change your password. - -Regards, -Site Administrator -'; -$_lang["system_email_webreminder"] = 'Hello [+uid+] - -To activate your new password click the following link: - -[+surl+] - -If successful you can use the following password to login: - -Password:[+pwd+] - -If you did not request this email then please ignore it. - -Regards, -Site Administrator'; -$_lang["system_email_websignup"] = 'Hello [+uid+] - -Here are your login details for [+sname+]: - -Username: [+uid+] -Password: [+pwd+] - -Once you log into [+sname+] ([+surl+]), you can change your password. - -Regards, -Site Administrator'; -$_lang["table_hoverinfo"] = 'Hover the mouse cursor over a table\'s name to see a short description of the table\'s function (not all tables have comments set).'; -$_lang["table_prefix"] = 'Table prefix'; -$_lang["tag"] = 'Tag'; -$_lang["template"] = 'Template'; -$_lang["templates"] = 'Templates'; -$_lang["template_assignedtv_tab"] = 'Assigned Template Variables'; -$_lang["template_code"] = 'Template code (html)'; -$_lang["template_desc"] = 'Description'; -$_lang["template_edit_tab"] = 'Edit Template'; -$_lang["template_management_msg"] = 'Choose which Template you wish to edit.'; -$_lang["template_msg"] = 'Create and edit Templates. Changed or new Templates won\'t be visible in your site\'s cached pages until the cache is emptied, however, you can use the preview function on a page to see the Template in action.'; -$_lang["template_name"] = 'Template name'; -$_lang["template_no_tv"] = 'No Template Variables have been assigned to this Template yet.'; -$_lang["template_notassigned_tv"] = 'These Template Variables are available for assigning.'; -$_lang["template_reset_all"] = 'Reset all pages to use Default Template'; -$_lang["template_reset_specific"] = 'Reset only \'%s\' pages'; -$_lang["template_selectable"] = 'Template selectable when creating or editing ressources.'; -$_lang["template_title"] = 'Create/edit Template'; -$_lang["template_tv_edit"] = 'Edit the TV sort order'; -$_lang["template_tv_edit_message"] = 'Drag to reorder the Template Variables for this template.'; -$_lang["template_tv_edit_title"] = 'Template Variable Sort Order'; -$_lang["template_tv_msg"] = 'The Template Variables assigned to this Template are listed below.'; -$_lang["thursday"] = 'Thursday'; -$_lang["tmplvar_access_msg"] = 'Select the Resource Groups that are allowed to modify the content or value of this Template Variable'; -$_lang["tmplvar_change_template_msg"] = 'Changing this Template will cause the page to reload the Template Variables, losing any unsaved changes.\n\n Are you sure you want to change this Template?'; -$_lang["tmplvar_inuse"] = 'The following Resource(s) are currently using this Template Variable. To continue with the delete operation click the Delete button otherwise click the Cancel button.'; -$_lang["tmplvar_tmpl_access"] = 'Template Access'; -$_lang["tmplvar_tmpl_access_msg"] = 'Select the Templates that are allowed to access/process this Template Variable'; -$_lang["tmplvar"] = 'Template Variable'; -$_lang["tmplvars"] = 'Template Variables'; -$_lang["tmplvars_binding_msg"] = 'This field supports data source bindings using the @ commands'; -$_lang["tmplvars_caption"] = 'Caption'; -$_lang["tmplvars_default"] = 'Default Value'; -$_lang["tmplvars_description"] = 'Description'; -$_lang["tmplvars_elements"] = 'Input Option Values'; -$_lang["tmplvars_inherited"] = 'Value inherited'; -$_lang["tmplvars_management_msg"] = 'Manage additional Template Variables for your Resources.'; -$_lang["tmplvars_msg"] = 'Add or edit Template Variables here. Template Variables must be assigned to Templates in order to access them from Snippets and Resources.'; -$_lang["tmplvars_name"] = 'Template Variable Name'; -$_lang["tmplvars_novars"] = 'No Template Variables found'; -$_lang["tmplvars_rank"] = 'Sort Order'; -$_lang["tmplvars_rank_edit_message"] = 'Drag to reorder the Template Variables.'; -$_lang["tmplvars_reset_params"] = 'Reset parameters'; -$_lang["tmplvars_title"] = 'Create/edit Template Variable'; -$_lang["tmplvars_type"] = 'Input Type'; -$_lang["tmplvars_widget"] = 'Widget'; -$_lang["tmplvars_widget_prop"] = 'Widget Properties'; -$_lang["to"] = 'to'; -$_lang["tools"] = 'Tools'; -$_lang["top_howmany_message"] = 'When viewing reports, how large should the \'Top ...\' lists be?'; -$_lang["top_howmany_title"] = 'Top how many'; -$_lang["total"] = 'total'; -$_lang["track_visitors_message"] = 'Check to show the child resources in the document tree'; -$_lang["track_visitors_title"] = 'Show child resources'; -$_lang["tree_page_click"] = 'Page Click Behavior'; -$_lang["tree_page_click_message"] = 'The default behavior when clicking on a page in the site tree.'; -$_lang["use_breadcrumbs"] = 'Show navigation'; -$_lang["use_breadcrumbs_message"] = 'Show the navigation when creating or editing Resource in the Manager'; -$_lang["tree_show_protected"] = 'Show protected pages'; -$_lang["tree_show_protected_message"] = 'When set to "No", Protected Resources (and all their child-Resources) do not appear in the Site Tree menu. "No" is the legacy setting for EVO.'; -$_lang["truncate_table"] = 'Click here to truncate this table'; -$_lang["tuesday"] = 'Tuesday'; -$_lang["tv"] = 'TV'; -$_lang["type"] = 'Type'; -$_lang["udperms_allowroot_message"] = 'Allow Users to create new Resources in the site root. '; -$_lang["udperms_allowroot_title"] = 'Allow root'; -$_lang["udperms_message"] = 'Control access to Resources via User Groups and Resource Groups.'; -$_lang["udperms_title"] = 'Use access permissions'; -$_lang["unable_set_link"] = 'Unable to set the link!'; -$_lang["unable_set_parent"] = 'Unable to set new parent!'; -$_lang["unauthorizedpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect Users to when requesting a secured/unauthorized Resource.'; -$_lang["unauthorizedpage_title"] = 'Unauthorized page'; -$_lang["unblock_message"] = 'This User will not be blocked after saving the User\'s data.'; -$_lang["undelete_resource"] = 'Undelete Resource'; -$_lang["unpublish_date"] = 'Unpublish Date'; -$_lang["unpublish_events"] = 'Un-publish Events'; -$_lang["unpublish_resource"] = 'Un-publish Resource'; -$_lang["untitled_resource"] = 'Untitled Resource'; -$_lang["untitled_weblink"] = 'Untitled Weblink'; -$_lang["update_params"] = 'Update parameter display'; -$_lang["update_settings_from_language"] = 'Replace current with:'; -$_lang["upload_maxsize_message"] = 'Enter the maximum file size that can be uploaded via the file manager. Upload file size must be entered in bytes. NOTE: Large files can take a very long time to upload!'; -$_lang["upload_maxsize_title"] = 'Maximum upload size'; -$_lang["uploadable_files_message"] = 'Enter a list of files that can be uploaded into \'assets/files/\' using the File Browser. Please enter the extensions for the filetypes, separated by commas.'; -$_lang["uploadable_files_title"] = 'Uploadable File Types'; -$_lang["uploadable_flash_message"] = 'Enter a list of files that can be uploaded into \'assets/flash/\' using the File Browser. Please enter the extensions for the flash types, separated by commas.'; -$_lang["uploadable_flash_title"] = 'Uploadable Flash Types'; -$_lang["uploadable_images_message"] = 'Enter a list of files that can be uploaded into \'assets/images/\' using the File Browser. Please enter the extensions for the image types, separated by commas.'; -$_lang["uploadable_images_title"] = 'Uploadable Image Types'; -$_lang["uploadable_media_message"] = 'Enter a list of files that can be uploaded into \'assets/media/\' using the File Browser. Please enter the extensions for the media types, separated by commas.'; -$_lang["uploadable_media_title"] = 'Uploadable Media Types'; -$_lang["use_alias_path_message"] = 'Enabling this option generates a virtual path to the Resource. E.g., if a Resource "child.html" is located in a Container Resource "parent", then the full URL alias path URL will be "/parent/child.html".'; -$_lang["use_alias_path_title"] = 'Use Friendly URL alias path'; -$_lang["use_editor_message"] = 'Enable editing with a Rich Text Editor (RTE). This setting applies to all Resources, but can be overridden in the User settings.'; -$_lang["use_editor_title"] = 'Enable editor'; -$_lang["use_global_tabs"] = 'Use global Tabs'; -$_lang["user"] = 'User'; -$_lang["user_block"] = 'Blocked'; -$_lang["user_blockedafter"] = 'Blocked After'; -$_lang["user_blockeduntil"] = 'Blocked Until'; -$_lang["user_changeddata"] = 'Your data has been changed. Please log in again.'; -$_lang["user_country"] = 'Country'; -$_lang["user_dob"] = 'Date of birth'; -$_lang["user_doesnt_exist"] = 'User does not exist'; -$_lang["user_edit_self_msg"] = 'You may need to log out and log in again after saving to fully update your information. New passwords will be sent to your e-mail address or shown onscreen.'; -$_lang["user_email"] = 'E-mail address'; -$_lang["user_failedlogincount"] = 'Failed logins'; -$_lang["user_fax"] = 'Fax'; -$_lang["user_female"] = 'Female'; -$_lang["user_full_name"] = 'Full name'; -$_lang["user_gender"] = 'Gender'; -$_lang["user_is_blocked"] = 'This User is blocked!'; -$_lang["user_logincount"] = 'Number of logins'; -$_lang["user_male"] = 'Male'; -$_lang["user_management_msg"] = 'Choose the Content Manager to edit. Content Manager Users are those Users who are allowed to log into the Content Manager'; -$_lang["user_management_title"] = 'Manager Users'; -$_lang["user_mobile"] = 'Mobile phone number'; -$_lang["user_phone"] = 'Phone number'; -$_lang["user_photo"] = 'User Photo'; -$_lang["user_photo_message"] = 'Enter the image url for the this User or use the insert button to selected or upload an image file on the server.'; -$_lang["user_prevlogin"] = 'Last login'; -$_lang["user_role"] = 'User\'s role'; -$_lang["user_state"] = 'State'; -$_lang["user_title"] = 'Create/Edit User'; -$_lang["user_upload_message"] = ' If you wish to stop this User uploading any filetypes in this category, make sure that the \'Use Main Configuration Setting\' checkbox is not ticked and leave the field blank.'; -$_lang["user_use_config"] = 'Use System Configuration Setting'; -$_lang["user_zip"] = 'Zip'; -$_lang["username"] = 'Username'; -$_lang["users"] = 'Security'; -$_lang["valid_hostnames_message"] = 'Help prevent XSS exploits misusing the site_url system setting by providing a comma separated list of valid hostnames for this installation. This is important for some types of shared hosts or hosts direct accessible via an IP address. First hostname in the list is used if the HTTP_HOST does not match any valid hostname.'; -$_lang["valid_hostnames_title"] = 'Valid hostnames'; -$_lang["validate_referer_message"] = 'Validate the HTTP_REFERER headers to reduce the risk of your content editors being tricked into performing unintended actions in the manager as victims of a CSRF (Cross Site Request Forgery) attack. Some configurations may not be able to use this option if the server is not sending HTTP_REFERER headers.'; -$_lang["validate_referer_title"] = 'Validate HTTP_REFERER headers?'; -$_lang["value"] = 'Value'; -$_lang["version"] = 'Version'; -$_lang["view"] = 'View'; -$_lang["view_child_resources_in_container"] = 'View children'; -$_lang["view_log"] = 'View log'; -$_lang["view_logging"] = 'Manager Actions'; -$_lang["view_sysinfo"] = 'System Info'; -$_lang["warning"] = 'Warning!'; -$_lang["warning_not_saved"] = 'The changes you have made have not been saved yet. You can choose to stay on the current page in order to save the changes (\'Cancel\'), or you can leave this page, losing any changes you have made (\'OK\').'; -$_lang["warning_visibility"] = 'Configuration Warnings visible to'; -$_lang["warning_visibility_message"] = 'Control the visibility of the configuration warnings shown on the Manager welcome page'; -$_lang["web_access_permissions"] = 'Web access permissions'; -$_lang["web_access_permissions_user_groups"] = 'Web User groups'; -$_lang["web_permissions"] = 'Web Permissions'; -$_lang["web_user_management_msg"] = 'Choose the web User you wish to edit. Web Users are those Users who are only allowed to log into the web site'; -$_lang["web_user_management_title"] = 'Web Users'; -$_lang["web_user_title"] = 'Create/edit Web User'; -$_lang["web_users"] = 'Web Users'; -$_lang["weblink"] = 'Weblink'; -$_lang["webpwdreminder_message"] = 'Enter a message to be sent to your Web Users whenever they request a new password via email. The Content Manager will send an e-mail containing their new password and activation information.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; -$_lang["webpwdreminder_title"] = 'Web Reminder Email'; -$_lang["websignupemail_message"] = 'Set the email message sent to Users when creating accounts including their username and password
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; -$_lang["websignupemail_title"] = 'Web Signup e-mail'; -$_lang["wednesday"] = 'Wednesday'; -$_lang["welcome_messages"] = 'Your Inbox contains %d message(s), of which %s are unread.'; -$_lang["welcome_title"] = 'Welcome to your EVO Content Manager'; -$_lang["which_editor_message"] = 'Select the rich text editor (RTE). You can download and install additional RTEs from the EVO download page.'; -$_lang["which_editor_title"] = 'Editor to use'; -$_lang["working"] = 'Working...'; -$_lang["wrap_lines"] = 'Wrap lines'; -$_lang["xhtml_urls_message"] = 'Replaces ampersand (&) characters in urls that are generated by EVO with the validating &amp; htmlentity'; -$_lang["xhtml_urls_title"] = 'XHTML URLs'; -$_lang["yes"] = 'Yes'; -$_lang["you_got_mail"] = 'You got mail'; -$_lang["yourinfo_message"] = 'This section shows some information about you:'; -$_lang["yourinfo_previous_login"] = 'Your last login:'; -$_lang["yourinfo_role"] = 'Your role is:'; -$_lang["yourinfo_title"] = 'Your info'; -$_lang["yourinfo_total_logins"] = 'Total number of logins:'; -$_lang["yourinfo_username"] = 'You are logged in as:'; - -$_lang["a17_error_reporting_title"] = 'Detection level of PHP errors'; -$_lang["a17_error_reporting_msg"] = 'Set the detection level of the PHP errors.'; -$_lang["a17_error_reporting_opt0"] = 'Ignore all'; -$_lang["a17_error_reporting_opt1"] = 'Ignore warnings of a slight notice level (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; -$_lang["a17_error_reporting_opt2"] = 'Detect all errors except E_NOTICE'; -$_lang["a17_error_reporting_opt99"] = 'Detect all'; - -$_lang["pwd_hash_algo_title"] = 'Hash algorithm'; -$_lang["pwd_hash_algo_message"] = 'Password hash algorithm.'; - -$_lang["enable_bindings_title"] = 'Enable @Bindings commands'; -$_lang["enable_bindings_message"] = 'Prevents the execution of PHP functions through TV @Bindings. Useful if you have Manager users who should not be able to create PHP code but need to be able to create or edit TVs. The output of any TV with an @Binding will be "@Bindings disabled".'; -$_lang["enable_filter_title"] = 'Enable filters'; -$_lang["enable_filter_message"] = 'Filters allow you to manipulate the way data is presented or parsed in a tag. They allow you to modify values from inside your templates. This is analogous to PHx. More info'; // todo: change link to documentation -$_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; - -$_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; - -$_lang["enable_at_syntax_title"] = 'Enable <@SYNTAX>'; -$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) is simple and lightweight template syntax. This is designed to consider coexistence with HTML tags and content strings.'; - -$_lang["bkmgr_alert_mkdir"] = 'A file cannot be created in a directory. Please check the permission of [+snapshot_path+]'; -$_lang["bkmgr_restore_msg"] = '

          Database tables could be restored by SQL:

          '; -$_lang["bkmgr_restore_title"] = 'Restore'; -$_lang["bkmgr_import_ok"] = 'SQL recovery was performed normally.'; -$_lang["bkmgr_snapshot_ok"] = 'The snapshot was saved normally.'; -$_lang["bkmgr_run_sql_file_label"] = 'Execute by SQL file'; -$_lang["bkmgr_run_sql_direct_label"] = 'Direct execute SQL commands'; -$_lang["bkmgr_run_sql_submit"] = 'Execute restore'; -$_lang["bkmgr_run_sql_result"] = 'Result'; -$_lang["bkmgr_snapshot_title"] = 'Snapshot save and recovery'; -$_lang["bkmgr_snapshot_msg"] = '

          The contents of the database are saved in and restored from a server directory.
          Location: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; -$_lang["bkmgr_snapshot_submit"] = 'Add Snapshot'; -$_lang["bkmgr_snapshot_list_title"] = 'List of snapshots'; -$_lang["bkmgr_restore_submit"] = 'Revert this data'; -$_lang["bkmgr_restore_confirm"] = 'Are you sure you want to revert backup\n[+filename+] ?'; -$_lang["bkmgr_snapshot_nothing"] = 'No snapshots available'; - -$_lang["files.dynamic.php1"] = 'New Text File'; -$_lang["files.dynamic.php2"] = 'This directory cannot be displayed.'; -$_lang["files.dynamic.php3"] = 'There is a problem in a file name.'; -$_lang["files.dynamic.php4"] = 'The text file was created.'; -$_lang["files.dynamic.php5"] = 'File could not be duplicated.'; -$_lang["files.dynamic.php6"] = 'File or directory could not be renamed.'; -$_lang["files_dynamic_new_folder_name"] = 'Enter new directory name:'; -$_lang["files_dynamic_new_file_name"] = 'Enter new file name:'; -$_lang["not_readable_dir"] = 'Can not read this directory.'; -$_lang["confirm_delete_dir"] = 'Are you sure you want to delete the directory?'; -$_lang["confirm_delete_dir_recursive"] = 'Are you sure you want to delete this directory?\n\nAll files inside this directory will also be deleted.'; - -$_lang["make_folders_title"] = 'End Container URL with Slash'; -$_lang["make_folders_message"] = 'Append trailing slash to Resources that are set as containers when using Friendly URLs.'; - -$_lang["check_files_onlogin_title"] = 'Check core files on login'; -$_lang["check_files_onlogin_message"] = 'By enabling this option, important system files will be checked for modification typical of scripted website attacks. While not a foolproof guarantee, it may alert you to a compromised EVO system file and website.'; - -$_lang["configcheck_sysfiles_mod"] = 'Important System Files have been modified.'; -$_lang["configcheck_sysfiles_mod_msg"] = 'You have configured EVO to check important system files for possible website script attacks. This warning does not necessarily mean your site has been compromised, however, you should review the watched files in your installation (set in System configuration -> User -> Check core files on login). If you find your files unaltered or changes were made by site administrators, go to System Configuration and click to re-save settings to dismiss this message. Changes in the following files have been found:'; - -$_lang['email_method_title'] = 'Sendmail method'; -$_lang['email_method_mail'] = 'PHP mail() function'; -$_lang['email_method_smtp'] = 'SMTP Server'; -$_lang['smtp_auth_title'] = 'SMTP-AUTH'; -$_lang['smtp_host_title'] = 'SMTP host'; -$_lang['smtp_secure_title'] = 'Encrypted SMTP'; -$_lang['smtp_username_title'] = 'SMTP user name'; -$_lang['smtp_password_title'] = 'SMTP password'; -$_lang['smtp_port_title'] = 'SMTP port'; - -$_lang["setting_resource_tree_node_name"] = 'Display Name in Resource Tree'; -$_lang["setting_resource_tree_node_name_desc"] = 'Select the Resource field to show as the Resource name in the Resource Tree. The default setting is pagetitle.'; -$_lang["setting_resource_tree_node_name_desc_add"] = 'Note: Since EVO 1.1 you can change this Display Name within Resource-Tree´s sorting option. This setting is used when Display Name in Resource Tree is set to "Default".'; - -$_lang["resource_opt_alvisibled"] = 'Use current alias in alias path'; -$_lang["resource_opt_alvisibled_help"] = 'The alias of this Resource is inserted in Friendly URL alias path'; -$_lang['resource_opt_is_published'] = 'Published'; -$_lang["docid_incrmnt_method_title"] = 'Increment Resource ID method'; -$_lang["docid_incrmnt_method_0"] = 'DB auto increment'; -$_lang["docid_incrmnt_method_1"] = 'Minimum missed ID'; -$_lang["docid_incrmnt_method_2"] = 'Maximal ID + 1'; - -$_lang["enable_cache_title"] = 'Document caching'; -$_lang["disabled_at_login"] = 'Disabled at login'; - -$_lang["cache_type_title"] = 'Document caching type'; -$_lang["cache_type_1"] = 'Cache is based only on Resource ID (standard)'; -$_lang["cache_type_2"] = 'Cache is based on Resource ID and $_GET parameters'; -$_lang["seostrict_title"] = 'Use SEO Strict URLs'; -$_lang["seostrict_message"] = 'Enforces the use of strict URLs to prevent duplicate content (if needed)'; -$_lang["aliaslistingfolder_title"] = 'Use AliasListing only for Folders'; -$_lang["aliaslistingfolder_message"] = 'Reduces memory consumption when a large number of resources'; - -$_lang["settings_friendlyurls_alert"] = 'It is necessary to rename the ht.access file in the EVO installation directory at .htaccess to use the Friendly URL function.'; -$_lang["settings_friendlyurls_alert2"] = 'Since EVO was installed in a subdirectory, it is necessary to change the content of .htaccess.'; - -$_lang["user_street"] = 'Street'; -$_lang["user_city"] = 'City'; -$_lang["user_other"] = 'Other'; - -$_lang["import_site.static.php1"] = 'Reset resource tree'; -$_lang["import_site.static.php2"] = 'Reset resource tree and initialize all Resource IDs.'; -$_lang["import_site.static.php3"] = 'Target'; -$_lang["import_site.static.php4"] = 'Only <body></body> part'; -$_lang["import_site.static.php5"] = 'Whole file content'; - -$_lang["a83_ignore_ids_title"] = 'Ignore IDs (comma separated)'; -$_lang["export_site.static.php1"] = 'Target'; -$_lang["export_site.static.php2"] = 'Only edited Resources'; -$_lang["export_site.static.php3"] = 'All Resources'; -$_lang["export_site.static.php4"] = 'Search for'; -$_lang["export_site.static.php5"] = 'Replace with'; -$_lang["export_site.static.php6"] = 'Target'; -$_lang["export_site.static.php7"] = 'Files could not be saved to [+rb_base_url+]'; - -$_lang["mutate_settings.dynamic.php6"] = 'Send mail on EVO errors'; -$_lang["mutate_settings.dynamic.php7"] = 'not notify'; -$_lang["mutate_settings.dynamic.php8"] = 'A mail with the error source will be sent to [(emailsender)] ([+emailsender+]) if a EVO error occurs. The details of the error could be seen in the EVO system events log.'; - -$_lang["error_no_privileges"] = "You don't have enough privileges for this action!"; -$_lang["error_no_optimise_tablename"] = "Table to optimise not found in request!"; -$_lang["error_no_truncate_tablename"] = "Table to truncate not found in request!"; -$_lang["error_double_action"] = "Double action (GET & POST) posted!"; -$_lang["error_no_id"] = "ID not passed in request!"; -$_lang["error_id_nan"] = "ID passed in request is NaN!"; -$_lang["error_no_parent"] = "Couldn't find parent document's name!"; -$_lang["error_many_results"] = "Too many results returned from database!"; -$_lang["error_no_results"] = "Not enough/ no results returned from database!"; -$_lang["error_no_user_selected"] = "No user selected as recipient of this message!"; -$_lang["error_no_group_selected"] = "No group selected as recipient of this message!"; -$_lang["error_movedocument1"] = "Document cannot be it's own parent!"; -$_lang["error_movedocument2"] = "Document's ID not passed in request!"; -$_lang["error_movedocument3"] = "New parent not set in request!"; -$_lang["error_internet_connection"] = "Server isn't available. Check your internet connection!"; - -$_lang["login_processor_unknown_user"] = "Incorrect username or password entered!"; -$_lang["login_processor_wrong_password"] = "Incorrect username or password entered!"; -$_lang["login_processor_many_failed_logins"] = "Due to too many failed logins, you have been blocked!"; -$_lang["login_processor_blocked1"] = "You are blocked and cannot log in!"; -$_lang["login_processor_blocked2"] = "You are blocked and cannot log in! Please try again later."; -$_lang["login_processor_blocked3"] = "You are blocked automatic after a specified date and you cannot log in anymore!"; -$_lang["login_processor_bad_code"] = "The security code you entered didn't validate! Please try to login again!"; -$_lang["login_processor_remotehost_ip"] = "Your hostname doesn't point back to your IP!"; -$_lang["login_processor_remote_ip"] = "You are not allowed to login from this location."; -$_lang["login_processor_date"] = "You are not allowed to login at this time. Please try again later."; -$_lang["login_processor_captcha_config"] = "Captcha is not configured properly."; - -$_lang["dp_dayNames"] = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']"; -$_lang["dp_monthNames"] = "['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']"; -$_lang["dp_startDay"] = "1"; - -$_lang["check_all"] = "Select all"; -$_lang["check_none"] = "Select none"; -$_lang["check_toggle"] = "Toggle selection"; - -$_lang["version_notices"] = "Version Notices"; - -$_lang["em_button_shift"] = " (Shift-Mouseclick to open multiple windows)"; - -$_lang["reset_sysfiles_checksum_button"] = "Rebuild Checksums"; -$_lang["reset_sysfiles_checksum_alert"] = "Are you sure you want to reset the system files checksums?"; - -$_lang["file_browser_disabled_msg"] = "The File Browser Feature is not enabled."; -$_lang["which_browser_default_title"]= "Default File Browser"; -$_lang["which_browser_default_msg"]= "Choose the File Browser you prefer as default. In User-Settings you can choose a Custom Browser per User, or leave it on "default"."; -$_lang["which_browser_title"]= "File Browser"; -$_lang["which_browser_msg"]= "You can choose a custom File Browser for this user. To use the System´s default Browser, leave it on "Default"."; -$_lang["option_default"] = "Default"; -$_lang["position"] = "Position"; -$_lang["are_you_sure"] = "Are you sure?"; - -$_lang['evo_downloads_title'] = "Evolution Downloads"; -$_lang['help_translating_title'] = "Help translating Evolution"; -$_lang['download'] = "Download"; -$_lang['downloads'] = "Downloads"; -$_lang["previous_releases"] = "Previous Releases"; -$_lang["extras"] = "Extras"; - -$_lang["display_locks"] = "Display Locks"; -$_lang["role_display_locks"] = "Display Locks"; -$_lang["session_timeout"] = "Session Timeout"; -$_lang["session_timeout_msg"] = "EVO will ping the server as per setting "Mail Check Time Period". If the last ping exceeds this setting, the associated session will be considered invalid and all related locks will be removed automatically. Set value in minutes (>2min, default 15min)."; -$_lang["unlock_element_id_warning"] = "Are you sure you want to unlock this [+element_type+] (ID [+id+])?"; -$_lang["lock_element_type_1"] = "Template"; -$_lang["lock_element_type_2"] = "Template-Variable"; -$_lang["lock_element_type_3"] = "Chunk"; -$_lang["lock_element_type_4"] = "Snippet"; -$_lang["lock_element_type_5"] = "Plugin"; -$_lang["lock_element_type_6"] = "Module"; -$_lang["lock_element_type_7"] = "Resource"; -$_lang["lock_element_type_8"] = "Role"; -$_lang["lock_element_editing"] = "You are editing this [+element_type+] since\n[+lasthit_df+]"; -$_lang["lock_element_locked_by"] = "This [+element_type+] is locked by user\n[+username+] since [+lasthit_df+]"; - -$_lang["minifyphp_incache_title"] = 'Minify php code in site cache'; -$_lang["minifyphp_incache_message"] = 'Minify php code (snippets and plugins) and store in the site cache file, ref:#938'; - -$_lang["logout_reminder_msg"] = "Reminder: It seems on [+date+] you forgot to logout. Please pay attention in future to do so after your work is finished."; - -$_lang["allow_eval_title"] = "Eval php code in snippet call"; -$_lang["allow_eval_msg"] = "For developer : Please use \$modx->safeEval()."; -$_lang["allow_eval_with_scan"] = "Execute only permitted functions"; -$_lang["allow_eval_with_scan_at_post"] = "Execute all. However, at POST, only permitted functions"; -$_lang["allow_eval_everytime_eval"] = "Unlimited (Use only for debugging)"; -$_lang["allow_eval_dont_eval"] = "Do not allow all functions"; - -$_lang["safe_functions_at_eval_title"] = "Functions to allow eval"; -$_lang["safe_functions_at_eval_msg"] = "Comma separated list"; - -$_lang["multiple_sessions_msg"] = "Information: Multiple active user sessions (total [+total+]) found for user [+username+]."; -$_lang["iconv_not_available"] = "It is important to install/enable extension iconv. Please speak to your host if you don´t know how to enable it."; - -$_lang["cm_create_new_category"] = "Create the new category"; -$_lang["cm_category_name"] = "Category name"; -$_lang["cm_category_position"] = "Category position"; -$_lang["cm_no_x_assigned"] = "No %s assigned"; -$_lang["cm_save_categorization"] = "Save categorization"; -$_lang["cm_update_categories"] = "Update categories"; -$_lang["cm_assigned_elements"] = "Assigned elements"; -$_lang["cm_edit_name"] = "Edit name"; -$_lang["cm_mark_for_deletion"] = "Mark for deletion"; -$_lang["cm_delete_now"] = "Delete immediately"; -$_lang["cm_delete_element_x_now"] = "Delete "%s" immediately"; -$_lang["cm_select_element_group"] = "Select an element group"; -$_lang["cm_global_messages"] = "Global Messages"; -$_lang["cm_add_new_category"] = "Add a new category"; -$_lang["cm_edit_categories"] = "Edit categories"; -$_lang["cm_sort_categories"] = "Sort categories"; -$_lang["cm_categorize_elements"] = "Categorize elements"; -$_lang["cm_translation"] = "Translation"; -$_lang["cm_translations"] = "Translations"; -$_lang["cm_categorize_x"] = "Categorize %s"; -$_lang["cm_unknown_error"] = "Something went wrong."; -$_lang["cm_x_assigned_to_category_y"] = "%s(%s) has been assigned to category %s(%s)"; -$_lang["cm_no_categorization"] = "No categorization made."; -$_lang["cm_no_changes"] = "Nothing to change, so no changes made."; -$_lang["cm_x_changes_made"] = "%s changes made"; -$_lang["cm_enter_name_for_category"] = "Please enter a name for the new category."; -$_lang["cm_category_x_exists"] = "Category %s already exists."; -$_lang["cm_category_x_saved_at_position_y"] = "The new category %s was saved at position %s."; -$_lang["cm_category_x_moved_to_position_y"] = "Category %s was moved to position %s"; -$_lang["cm_category_x_deleted"] = "Category %s has been deleted"; -$_lang["cm_category_x_renamed_to_y"] = "Category %s was renamed to %s"; -$_lang["cm_translation_for_x_empty"] = "Translation for %s was empty"; -$_lang["cm_translation_for_x_to_y_success"] = "Translation for %s to %s successfully saved"; -$_lang["cm_save_new_sorting"] = "Save new sorting"; -$_lang["cm_translate_phrases"] = "Translate phrases"; -$_lang["cm_translate_module_phrases"] = "Translate module-phrases"; -$_lang["cm_native_phrase"] = "Native phrase"; - -$_lang["btn_view_options"] = 'View Options'; -$_lang["view_options_msg"] = 'The display & listing of elements can be customized via "View Options"-button. Settings are saved and restored per Browser using HTML5´s localStorage.'; -$_lang["viewopts_title"] = 'View Options'; -$_lang["viewopts_cb_buttons"] = 'Buttons'; -$_lang["viewopts_cb_descriptions"] = 'Descriptions'; -$_lang["viewopts_cb_icons"] = 'Icons'; -$_lang["viewopts_radio_list"] = 'List'; -$_lang["viewopts_radio_inline"] = 'Inline'; -$_lang["viewopts_radio_flex"] = 'Flex'; -$_lang["viewopts_fontsize"] = 'Font-Size'; -$_lang["viewopts_cb_alltabs"] = 'All Tabs'; +PHP Application Framework and Content Management System licensed under the GNU GPL.'; +$_lang["about_title"] = 'About Evolution'; +$_lang["access_permission_denied"] = 'You do not have the correct permissions for this Resource.'; +$_lang["access_permission_parent_denied"] = 'You do not have permission to create or move a Resource here! Please choose another location.'; +$_lang["access_permissions"] = 'Access permissions'; +$_lang["access_permissions_add_resource_group"] = 'Create a new Resource Group'; +$_lang["access_permissions_add_user_group"] = 'Create a new User Group'; +$_lang["access_permissions_docs_collision"] = 'Because the Web User Groups and Manager User Groups conflict for your Role, this Resource will be public. Contact a site administrator for further help.'; +$_lang["access_permissions_docs_message"] = 'Select which Resource Groups this Resource belongs to'; +$_lang["access_permissions_group_link"] = 'Create a new group link'; +$_lang["access_permissions_introtext"] = 'Manage the User Groups and Resource Groups used for access permissions. To add a user to a User Group, edit the user and select the groups (s)he should be a member of. To add a Resource to a User Group, edit the Resource and select the groups it should belong to.'; +$_lang["access_permissions_link_to_group"] = 'to Resource Group'; +$_lang["access_permissions_link_user_group"] = 'Link User Group'; +$_lang["access_permissions_links"] = 'User/Resource Group links'; +$_lang["access_permissions_links_tab"] = 'Specify which User Groups are given access (i.e. can edit or create children) to the Resource Groups. To link a Resource Group to a User Group, select the appropriate groups from the drop down menus, and click on \'Submit\'. To remove the link for a certain group, press \'Remove\'. This will immediately remove the link.'; +$_lang["access_permissions_no_resources_in_group"] = 'None.'; +$_lang["access_permissions_no_users_in_group"] = 'None.'; +$_lang["access_permissions_off"] = 'Access Permissions are not activated. This means any changes made here will not have any effect until Access Permissions are activated in your Configuration.'; +$_lang["access_permissions_resource_groups"] = 'Resource Groups'; +$_lang["access_permissions_resources_in_group"] = 'Resources in group: '; +$_lang["access_permissions_resources_tab"] = 'See which Resource Groups have been created. Also create new groups, rename groups, delete groups and see which Resources are in the different groups (hover over the id of the Resource to see it\'s name). To add a Resource to a group or remove a Resource from a group, edit the Resource directly.'; +$_lang["access_permissions_user_groups"] = 'User groups'; +$_lang["access_permissions_user_message"] = 'Select which User Groups this user belongs to:'; +$_lang["access_permissions_users_in_group"] = 'Users in group:'; +$_lang["access_permissions_users_tab"] = 'View the User Groups that have been created. You can also create new groups, rename groups, delete groups and see which users are members of the different groups. To add a new user to a group or to remove a user from a group, edit the user directly. Administrators (users who have been assigned the role with ID 1) always have access to all Resources, so they don\'t need to be added to any groups.'; +$_lang["account_email"] = 'Account email'; +$_lang["actioncomplete"] = 'Action was completed successfully!
          - Please wait while EVO cleans up.'; +$_lang["activity_message"] = 'This list shows the last Resources you created or edited:'; +$_lang["activity_title"] = 'Recently edited/created Resources'; +$_lang["add"] = 'Add'; +$_lang["add_chunk"] = 'Add Chunk'; +$_lang["add_doc"] = 'Add Resource'; +$_lang["add_folder"] = 'New Directory'; +$_lang["add_plugin"] = 'Add Plugin'; +$_lang["add_resource"] = 'New Resource'; +$_lang["add_snippet"] = 'Add Snippet'; +$_lang["add_tag"] = 'Add tag'; +$_lang["add_template"] = 'Add Template'; +$_lang["add_tv"] = 'Add TV'; +$_lang["add_weblink"] = 'New Weblink'; +$_lang["administrator_role_message"] = 'This role cannot be edited or deleted.'; +$_lang["administrators"] = 'Administrators'; +$_lang["after_saving"] = 'After saving'; +$_lang["alert_delete_self"] = 'You can\'t delete yourself!'; +$_lang["alias"] = 'URL alias'; +$_lang["all_doc_groups"] = 'All Resource Groups (Public)'; +$_lang["all_events"] = 'All Events'; +$_lang["all_usr_groups"] = 'All User Groups (Public)'; +$_lang["allow_mgr_access"] = 'Manager Interface Access'; +$_lang["allow_mgr_access_message"] = 'Select this option to enable or disable access to the manager interface. NOTE: If this option is set to no then the user will be redirected to the Manager Login Startup or Site Start web page.'; +$_lang["already_deleted"] = 'has already been deleted.'; +$_lang["attachment"] = 'Attachment'; +$_lang["author_infos"] = 'Author information'; +$_lang["automatic_alias_message"] = 'Select \'yes\' to have the system automatically generate a URL alias based on the Resource\'s page title when saving.'; +$_lang["automatic_alias_title"] = 'Automatically generate URL alias'; +$_lang["backup"] = 'Backup'; +$_lang["bk_manager"] = 'Backup'; +$_lang["block_message"] = 'This user will be blocked after saving the user\'s data!'; +$_lang["blocked_minutes_message"] = 'Enter the number of minutes that a user will be blocked for if they reach their maximum number of allowed failed login attempts. Please enter this value as numbers only (no commas, spaces etc.)'; +$_lang["blocked_minutes_title"] = 'Blocked Minutes'; +$_lang["cache_files_deleted"] = 'The following files were deleted:'; +$_lang["cancel"] = 'Cancel'; +$_lang["captcha_code"] = 'Security code'; +$_lang["captcha_message"] = 'Enable this to strengthen security by requiring users to enter a code which is unreadable by machines (and script-kiddy hacking scripts).'; +$_lang["captcha_title"] = 'Use CAPTCHA codes'; +$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; +$_lang["captcha_words_message"] = 'Enter a list of CAPTCHA words to use if CAPTCHA is enabled. Separate the words with commas. This input field is limited to 255 characters.'; +$_lang["captcha_words_title"] = 'CAPTCHA Words'; +$_lang["category_heading"] = 'Category'; +$_lang["category_manager"] = 'Category Manager'; +$_lang["category_management"] = 'Category management'; +$_lang["manage_categories"] = 'Manage Categories'; +$_lang["category_msg"] = 'View and edit all Elements grouped by category.'; +$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; +$_lang["cfg_base_url"] = 'MODX_BASE_URL'; +$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; +$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; +$_lang["cfg_site_url"] = 'MODX_SITE_URL'; +$_lang["change_name"] = 'Change name'; +$_lang["change_password"] = 'Change Password'; +$_lang["change_password_confirm"] = 'Confirm password'; +$_lang["change_password_message"] = 'Please enter your new password, and then enter it again to confirm. Your password needs to be at least 6 characters long.'; +$_lang["change_password_new"] = 'New password'; +$_lang["charset_message"] = 'Select the default character encoding for the [(modx_charset)] system variable. This does not affect the Manager.'; +$_lang["charset_title"] = 'Character encoding'; +$_lang["chunk"] = 'Chunk'; +$_lang["chunk_code"] = 'Chunk code (html)'; +$_lang["chunk_multiple_id"] = 'Error: Multiple Chunks share the same unique ID.'; +$_lang["chunk_no_exist"] = 'Chunk does not exist.'; +$_lang["cleaningup"] = 'Cleaning up'; +$_lang["clean_uploaded_filename"] = 'Use Transliteration for File Uploads'; +$_lang["clean_uploaded_filename_message"] = 'Use the default or transalias settings for the file name to clean special characters from uploaded file names, preserving dot-characters (periods)'; +$_lang["clear_log"] = 'Clear log'; +$_lang["click_to_context"] = 'Click to access context menu'; +$_lang["click_to_edit_title"] = 'Click here to edit this record'; +$_lang["click_to_view_details"] = 'Click here to view details'; +$_lang["close"] = 'Close'; +$_lang["code"] = 'Code'; +$_lang["collapse_tree"] = 'Collapse Site Tree'; +$_lang["comment"] = 'Comment'; +$_lang["configcheck_admin"] = 'Please contact a systems administrator and warn them about this message!'; +$_lang["configcheck_cache"] = 'cache directory not writable'; +$_lang["configcheck_cache_msg"] = 'EVO cannot write to the cache directory. EVO will still function as expected, but no caching will take place. To solve this, make the /_cache/ directory writable.'; +$_lang["configcheck_configinc"] = 'Config file still writable'; +$_lang["configcheck_configinc_msg"] = 'Very naughty people could potentially wreak some havoc on your site and everything associated with it. Really. Please make your config file (/[+MGR_DIR+]/includes/config.inc.php) read only!'; +$_lang["configcheck_default_msg"] = 'An unspecified warning was found. Which is strange.'; +$_lang["configcheck_errorpage_unavailable"] = 'Your site\'s Error page is not available.'; +$_lang["configcheck_errorpage_unavailable_msg"] = 'This means that your Error page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; +$_lang["configcheck_errorpage_unpublished"] = 'Your site\'s Error page is not published or does not exist.'; +$_lang["configcheck_errorpage_unpublished_msg"] = 'This means that your Error page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; +$_lang["configcheck_filemanager_path"] = 'The currently set File Manager path seems incorrect.'; +$_lang["configcheck_filemanager_path_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; +$_lang["configcheck_hide_warning"] = 'Don\'t show this again.'; +$_lang["configcheck_images"] = 'Images directory not writable'; +$_lang["configcheck_images_msg"] = 'The images directory isn\'t writable, or doesn\'t exist. This means the Image Manager functions in the editor will not work!'; +$_lang["configcheck_installer"] = 'Installer still present'; +$_lang["configcheck_installer_msg"] = 'The /install directory contains the installer for EVO. Just imagine what might happen if an evil person finds this directory and runs the installer! They\'d probably not get too far, because they need to enter some user information for the database, but it is still best to remove this directory from your server.'; +$_lang["configcheck_lang_difference"] = 'Incorrect number of entries in language file'; +$_lang["configcheck_lang_difference_msg"] = 'The currently selected language has a different number of entries than the default language. While not necessarily a problem, this may mean the language file needs to be updated.'; +$_lang["configcheck_notok"] = 'One or more configuration details didn\'t check out OK:'; +$_lang["configcheck_ok"] = 'Check passed OK - no warnings to report.'; +$_lang["configcheck_php_gdzip"] = 'GD and/or Zip PHP extensions not found'; +$_lang["configcheck_php_gdzip_msg"] = 'EVO needs the GD and Zip extension enabled for PHP. While EVO will work without them, you will not be able to take full advantage of the built-in File Manager, Image Editor or Captcha for logins.'; +$_lang["configcheck_rb_base_dir"] = 'The currently set File base path seems incorrect.'; +$_lang["configcheck_rb_base_dir_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; +$_lang["configcheck_register_globals"] = 'register_globals is set to ON in your php.ini configuration file'; +$_lang["configcheck_register_globals_msg"] = 'This configuration makes your site much more susceptible to Cross Site Scripting (XSS) attacks. You should speak to your host about what you can do to disable this setting.'; +$_lang["configcheck_title"] = 'Configuration check'; +$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin detected'; +$_lang["configcheck_templateswitcher_present_delete"] = 'Delete TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_disable"] = 'Disable TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_msg"] = 'The TemplateSwitcher plugin has been found to cause caching and performance problems, and should be used only the functionality is required in your site.'; +$_lang["configcheck_unauthorizedpage_unavailable"] = 'Your site\'s Unauthorized page is not published or does not exist.'; +$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'This means that your Unauthorized page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; +$_lang["configcheck_unauthorizedpage_unpublished"] = 'The Unauthorized page defined in the site configuration settings is not published.'; +$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'This means that your Unauthorized page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; +$_lang["configcheck_validate_referer"] = 'Security Warning: HTTP Header Validation'; +$_lang["configcheck_validate_referer_msg"] = 'The configuration setting Validate HTTP_REFERER headers? is Off. We recommend turning it On. Go to Configuration options'; +$_lang["configcheck_warning"] = 'Configuration warning: '; +$_lang["configcheck_what"] = 'What does this mean?'; +$_lang["confirm_block"] = 'Are you sure you want to block this user?'; +$_lang["confirm_delete_category"] = 'Are you sure you want to delete this category?'; +$_lang["confirm_delete_eventlog"] = 'Are you sure you want to delete this event log?'; +$_lang["confirm_delete_file"] = 'Are you sure you want to delete the file?\n\nThis may stop your site from working properly! Only delete this file if you know for certain what you are doing will not break anything.'; +$_lang["confirm_delete_group"] = 'Are you sure you want to delete this group?'; +$_lang["confirm_delete_htmlsnippet"] = 'Are you sure you want to delete this Chunk?'; +$_lang["confirm_delete_keywords"] = 'Are you sure you want to delete these keywords?'; +$_lang["confirm_delete_module"] = 'Are you sure you want to delete this Module?'; +$_lang["confirm_delete_plugin"] = 'Are you sure you want to delete this Plugin?'; +$_lang["confirm_delete_record"] = 'Are you sure you want to delete the selected record(s)?'; +$_lang["confirm_delete_resource"] = 'Are you sure you want to delete this Resource?\nAny children Resources will also be deleted.'; +$_lang["confirm_delete_role"] = 'Are you sure you want to delete this role?'; +$_lang["confirm_delete_snippet"] = 'Are you sure you want to delete this Snippet?'; +$_lang["confirm_delete_tags"] = 'Are you sure you want to delete the selected META tags?'; +$_lang["confirm_delete_template"] = 'Are you sure you want to delete this Template?'; +$_lang["confirm_delete_tmplvars"] = 'Are you sure you want to remove this Template Variable and all stored values?'; +$_lang["confirm_delete_user"] = 'Are you sure you want to delete this User?'; +$_lang["confirm_duplicate_record"] = 'Are you sure you want to duplicate this record?'; +$_lang["confirm_empty_trash"] = 'This will permanently remove ALL deleted Resources?\n\nProceed?'; +$_lang["confirm_load_depends"] = 'Are you sure you want to load the Manage Dependencies screen without saving your modifications?'; +$_lang["confirm_name_change"] = 'Changing the user name can affect other applications that are linked to the Content Manager.\n\nAre you sure you want to change this user name?'; +$_lang["confirm_publish"] = '\n\nPublishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; +$_lang["confirm_remove_locks"] = 'Users sometimes close their browser while editing Resources, Templates, Snippets or parsers, possibly leaving the item they were editing in locked state. By pressing OK you can remove ALL locks currently in place.\n\nProceed?'; +$_lang["confirm_reset_sort_order"] = 'Are you sure you want to reset the \"sort order/index\" of all listed elements to 0 ?'; +$_lang["confirm_resource_duplicate"] = 'Are you sure you want to duplicate this Resource? Any item(s) it contains will also be duplicated.'; +$_lang["confirm_setting_language_change"] = 'You have modified the default value and will lose the changes. Proceed?'; +$_lang["confirm_unblock"] = 'Are you sure you want to unblock this user?'; +$_lang["confirm_undelete"] = '\n\nAny children Resources deleted at the same time as this Resource will also be undeleted, but children Resources deleted at an earlier time will still be deleted.'; +$_lang["confirm_unpublish"] = '\n\nUn-publishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; +$_lang["confirm_unzip_file"] = 'Are you sure you want to unzip this file?\n\nExisting files will be overwritten.'; +$_lang["could_not_find_user"] = 'Could not find user'; +$_lang["create_folder_here"] = 'Create Container here'; +$_lang["create_resource_here"] = 'Create Resource here'; +$_lang["create_resource_title"] = 'Create Resource'; +$_lang["create_weblink_here"] = 'Create Weblink here'; +$_lang["createdon"] = 'Creation date'; +$_lang["create_new"] = 'Create new'; +$_lang["credits"] = 'Credits'; +$_lang["credits_shouts_msg"] = '

          EVO is managed and maintained at evo.im.

          '; +$_lang["custom_contenttype_message"] = 'Add custom content types for Resources. To add a new entry, enter the content type in the text box then click the \'Add\' button.'; +$_lang["custom_contenttype_title"] = 'Custom content types'; +$_lang["database_charset"] = 'Database Charset'; +$_lang["database_collation"] = 'Database Collation Charset'; +$_lang["database_name"] = 'Database name'; +$_lang["database_overhead"] = 'Note: Overhead is unused space reserved by MySQL. To free up this space, click on the table\'s overhead figure.'; +$_lang["database_server"] = 'Database server'; +$_lang["database_table_clickbackup"] = 'Backup & download the selected tables'; +$_lang["database_table_clickhere"] = 'Click here'; +$_lang["database_table_datasize"] = 'Data size'; +$_lang["database_table_droptablestatements"] = 'Generate DROP TABLE statements.'; +$_lang["database_table_effectivesize"] = 'Effective size'; +$_lang["database_table_indexsize"] = 'Index size'; +$_lang["database_table_overhead"] = 'Overhead'; +$_lang["database_table_records"] = 'Records'; +$_lang["database_table_tablename"] = 'Table name'; +$_lang["database_table_totals"] = 'Totals'; +$_lang["database_table_totalsize"] = 'Total size'; +$_lang["database_tables"] = 'Database tables'; +$_lang["database_version"] = 'Database Version'; +$_lang["date"] = 'Date'; +$_lang["datechanged"] = 'Date changed'; +$_lang["datepicker_offset"] = 'Datepicker offset'; +$_lang["datepicker_offset_message"] = 'The number of years to show in the past on the datepicker.'; +$_lang["datetime_format"] = 'Date format'; +$_lang["datetime_format_message"] = 'The format for dates in the Manager.'; +$_lang["default"] = 'Default:'; +$_lang["defaultcache_message"] = 'Select \'Yes\' to make all new Resources cacheable by default.'; +$_lang["defaultcache_title"] = 'Cacheable default'; +$_lang["defaultmenuindex_message"] = 'Select \'Yes\' to turn on automatic menu index incrementing by default.'; +$_lang["defaultmenuindex_title"] = 'Menu indexing default'; +$_lang["defaultpublish_message"] = 'Select \'Yes\' to make all new Resources published by default.'; +$_lang["defaultpublish_title"] = 'Published default'; +$_lang["defaultsearch_message"] = 'Select \'Yes\' to make all new Resources searchable by default.'; +$_lang["defaultsearch_title"] = 'Searchable default'; +$_lang["defaulttemplate_message"] = 'Select the Template you wish to use as a system default for new Resources. You can still select a different Template in the Resource editor, this setting just pre-selects one of your Templates for you.'; +$_lang["defaulttemplate_title"] = 'System Default Template'; +$_lang["defaulttemplate_logic_title"] = 'Automatic Template Assignment'; +$_lang["defaulttemplate_logic_general_message"] = 'New Resources will have the following templates, falling back to higher levels if not found:'; +$_lang["defaulttemplate_logic_system_message"] = 'System: the System Default Template.'; +$_lang["defaulttemplate_logic_parent_message"] = 'Parent: the same Template as the parent container.'; +$_lang["defaulttemplate_logic_sibling_message"] = 'Sibling: the same Template as other Resources in the same container.'; +$_lang["delete"] = 'Delete'; +$_lang["delete_resource"] = 'Delete Resource'; +$_lang["delete_tags"] = 'Delete tags'; +$_lang["deleting_file"] = 'Deleting file `%s`: '; +$_lang["description"] = 'Description'; +$_lang["deselect_keywords"] = 'Clear keywords'; +$_lang["deselect_metatags"] = 'Clear META tags'; +$_lang["disabled"] = 'Disabled'; +$_lang["doc_data_title"] = 'View Resource data'; +$_lang["documentation"] = 'Documentation'; +$_lang["duplicate"] = 'Duplicate'; +$_lang["duplicate_alias_found"] = 'Resource \'%s\' is already using the URL alias \'%s\'. Please enter a unique URL alias.'; +$_lang["duplicate_alias_message"] = 'Select \'yes\' to allow duplicate URL aliases to be saved. NOTE: This option should be used with \'Friendly URL alias path\' option set to \'Yes\' in order to avoid problems when referencing a Resource.'; +$_lang["duplicate_alias_title"] = 'Allow duplicate URL aliases'; +$_lang["duplicate_name_found_general"] = 'There is already a %s named \'%s\'. Please enter a unique name.'; +$_lang["duplicate_name_found_module"] = 'There is already a Module named \'%s\'. Please enter a unique name.'; +$_lang["duplicated_el_suffix"] = 'Duplicate'; +$_lang["edit"] = 'Edit'; +$_lang["edit_resource"] = 'Edit Resource'; +$_lang["edit_resource_title"] = 'Edit Resource'; +$_lang["edit_settings"] = 'Configuration'; +$_lang["editedon"] = 'Edit date'; +$_lang["editing_file"] = 'Editing file: '; +$_lang["editor_css_path_message"] = 'Enter the path to your CSS file that you wish to use within the editor. The best way to enter the path is to enter the path from the root of your server, for example: /assets/site/style.css. If you do not wish to load a style sheet into the editor, leave this field blank.'; +$_lang["editor_css_path_title"] = 'Path to CSS file'; +$_lang["element"] = 'Element'; +$_lang["element_categories"] = 'Combined View'; +$_lang["element_filter_msg"] = 'Type here to filter list'; +$_lang["element_management"] = 'Manage Elements'; +$_lang["element_name"] = 'Element name'; +$_lang["element_selector_msg"] = 'Select the Elements(s) from the list below and click the \'Insert\' button.'; +$_lang["element_selector_title"] = 'Element Selector'; +$_lang["elements"] = 'Elements'; +$_lang["email"] = 'Email'; +$_lang["email_sent"] = 'Email sent'; +$_lang["emailsender_message"] = 'The email address of the site administrator. For example, this email address will be used as the destination of system notification e-mail etc.'; +$_lang["emailsender_title"] = 'E-mail address'; +$_lang["emailsubject_default"] = 'Your login details'; +$_lang["emailsubject_message"] = 'Specify the value of the subject of the signup e-mail.'; +$_lang["emailsubject_title"] = 'E-mail subject'; +$_lang["empty_folder"] = 'This Container is empty'; +$_lang["empty_recycle_bin"] = 'Purge deleted Resources'; +$_lang["empty_recycle_bin_empty"] = 'There are no deleted Resources to purge.'; +$_lang["enable_resource"] = 'Enable Element file.'; +$_lang["enable_sharedparams"] = 'Enable parameter sharing'; +$_lang["enable_sharedparams_msg"] = 'NOTE: The above globally unique id (GUID) will be used to uniquely identify this Module and it\'s shared parameters. The GUID is also used to form a link between the Module and the Plugins or Snippets accessing the it\'s shared parameters. '; +$_lang["enabled"] = 'Enabled'; +$_lang["error"] = 'Error'; +$_lang["error_sending_email"] = 'Error sending email'; +$_lang["errorpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect users to when requesting a non-existing Resource.'; +$_lang["errorpage_title"] = 'Error page'; +$_lang["event_id"] = 'Event Id'; +$_lang["eventlog"] = 'Event log'; +$_lang["eventlog_msg"] = 'The event log is used to display information, warning and error messages generated by the content manager. The \'source\' column shows the section of the content manager where the message occurred.'; +$_lang["eventlog_viewer"] = 'System Events'; +$_lang["everybody"] = 'Everybody'; +$_lang["existing_category"] = 'Existing Category'; +$_lang["expand_tree"] = 'Expand Site Tree'; +$_lang["export_site"] = 'Export Static HTML'; +$_lang["export_site_cacheable"] = 'Include non-cacheable files:'; +$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; +$_lang["export_site_failed"] = 'Failed!'; +$_lang["export_site_failed_no_open"] = 'Cannot open file: '; +$_lang["export_site_failed_no_retrieve"] = 'Cannot retrieve document.'; +$_lang["export_site_failed_no_write"] = 'Cannot write file.'; +$_lang["export_site_html"] = 'Export site to HTML'; +$_lang["export_site_maxtime"] = 'Max export time:'; +$_lang["export_site_maxtime_message"] = 'Specify the number of seconds EVO can take to export the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; +$_lang["export_site_message"] = '

          Use this to export the entire site to static HTML files. Please note, however, that you will lose a lot of the EVO functionality should you do so:

          • Page reads on the exported files will not be recorded.
          • Interactive Snippets will NOT work in exported files
          • Only regular Resources will be exported, Weblinks will not be exported.
          • The export process may fail if your Resources contain Snippets which send redirection headers.
          • Depending on how you\'ve written your Resources, style sheets and images, the design of your site may be broken. To fix this, save/move your exported files to the same directory where the main EVO index.php file is located.

          Please fill out the form and press \'Export\' to start the export process. The files created will be saved in the /assets/export directory, using the Resources\' URL aliases as filenames when possible. While exporting your site, it\'s best to have the EVO configuration item \'Friendly URL aliases\' set to \'yes\'. Depending on the size of your site, the export may take a while.

          Any existing files will be overwritten by the new files if their names are identical!

          '; +$_lang["export_site_numberdocs"] = '

          Found %s Resources to export...

          '; +$_lang["export_site_prefix"] = 'File prefix:'; +$_lang["export_site_start"] = 'Start export'; +$_lang["export_site_success"] = 'Success!'; +$_lang["export_site_success_skip_dir"] = 'Skip this directory.'; +$_lang["export_site_success_skip_doc"] = 'Skip this document.'; +$_lang["export_site_suffix"] = 'File suffix:'; +$_lang["export_site_target_unwritable"] = 'Target directory isn\'t writable. Please ensure the directory is writable, and try again.'; +$_lang["export_site_time"] = 'Export finished. Export took %s seconds to complete.'; +$_lang["failed_login_message"] = 'Enter the number of failed login attempts allowed before blocking a user.'; +$_lang["failed_login_title"] = 'Failed Login Attempts'; +$_lang["fe_editor_lang_message"] = 'Choose a language for the editor to use when used as a front-end editor.'; +$_lang["fe_editor_lang_title"] = 'Front-end Editor Language'; +$_lang["file_delete_file"] = 'Delete file'; +$_lang["file_delete_folder"] = 'Delete directory'; +$_lang["file_deleted"] = 'Success!'; +$_lang["file_download_file"] = 'Download File'; +$_lang["file_download_unzip"] = 'Unzip File'; +$_lang["file_folder_chmod_error"] = 'Unable to change permissions, you will need to change permissions outside of EVO.'; +$_lang["file_folder_created"] = 'Directory created successfully!'; +$_lang["file_folder_deleted"] = 'Directory was successfully deleted!'; +$_lang["file_folder_not_created"] = 'Unable to create directory'; +$_lang["file_folder_not_deleted"] = 'Unable to delete directory. Make sure it is empty before deleting.'; +$_lang["file_not_deleted"] = 'Failed!'; +$_lang["file_not_saved"] = 'Cannot save file, please ensure target directory is writable!'; +$_lang["file_saved"] = 'File updated successfully!'; +$_lang["file_unzip"] = 'Unzip was successful!'; +$_lang["file_unzip_fail"] = 'Unzip Failed!'; +$_lang["filemanager_path_message"] = 'IIS often does not populate the document_root setting properly, which is used by the file manager to determine what you can see. If you are having problems using the file manager, make sure this path points to the root of your EVO installation.'; +$_lang["filemanager_path_title"] = 'File Manager path'; +$_lang["files_access_denied"] = 'Access denied!'; +$_lang["files_data"] = 'Data'; +$_lang["files_dir_listing"] = 'Directory listing for:'; +$_lang["files_directories"] = 'Directories'; +$_lang["files_directory_is_empty"] = 'This directory is empty.'; +$_lang["files_dirwritable"] = 'Directory writable?'; +$_lang["files_editfile"] = 'Edit file'; +$_lang["files_file_type"] = 'File type: '; +$_lang["files_filename"] = 'Filename'; +$_lang["files_fileoptions"] = 'Options'; +$_lang["files_files"] = 'Files'; +$_lang["files_filesize"] = 'File size'; +$_lang["files_filetype_notok"] = 'Uploading of this kind of file is not allowed!'; +$_lang["files_management"] = 'Manage Files'; +$_lang["files_management_no_permission"] = 'You do not have enough permissions to view or edit these files. Ask the administrator to grant you access to %s.'; +$_lang["files_modified"] = 'Modified'; +$_lang["files_top_level"] = 'To top level'; +$_lang["files_up_level"] = 'Up one level'; +$_lang["files_upload_copyfailed"] = 'Failed to copy file to destination directory - upload failed!'; +$_lang["files_upload_error"] = 'Error'; +$_lang["files_upload_error0"] = 'There was a problem with your upload.'; +$_lang["files_upload_error1"] = 'The file you are trying to upload is too big.'; +$_lang["files_upload_error2"] = 'The file you are trying to upload is too big.'; +$_lang["files_upload_error3"] = 'The file you are trying upload was only partially uploaded.'; +$_lang["files_upload_error4"] = 'You must select a file for upload.'; +$_lang["files_upload_error5"] = 'There was a problem with your upload.'; +$_lang["files_upload_inhibited_msg"] = 'Upload feature inhibited - make sure uploads are supported and the directory is writable for PHP.'; +$_lang["files_upload_ok"] = 'File uploaded successfully!'; +$_lang["files_upload_permissions_error"] = 'Possible permission problems - the directory you want to upload to needs to be writable by your webserver.'; +$_lang["files_uploadfile"] = 'Upload file'; +$_lang["files_uploadfile_msg"] = 'Select a file to upload:'; +$_lang["files_uploading"] = 'Uploading %s to %s/'; +$_lang["files_viewfile"] = 'View file'; +$_lang["folder"] = 'Folder'; +$_lang["forgot_password_email_fine_print"] = '* The URL above will expire once you change your password or after today.'; +$_lang["forgot_password_email_instructions"] = 'From there you will be able to change your password from the My Account menu.'; +$_lang["forgot_password_email_intro"] = 'A request has been made to change the password on your account.'; +$_lang["forgot_password_email_link"] = 'Click here to complete the process.'; +$_lang["forgot_your_password"] = 'Forgot your password?'; +$_lang["friday"] = 'Friday'; +$_lang["friendly_alias_message"] = 'With Friendly URLs enabled, a Resource URL alias will be used when present instead of the Resource ID. E.g., if a Resource with ID 1 has an URL alias of "introduction", no prefix set (empty) and a suffix of ".html", enabling this option would generate an URL alias of "introduction.html". If there is no URL alias set, EVO generates "1.html".'; +$_lang["friendly_alias_title"] = 'Use Friendly URL aliases'; +$_lang["friendlyurls_message"] = 'Use Search Engine Friendly URLs on Apache webservers with mod_rewrite or IIS with third-party plugins. See the .htaccess file in the site root of the distribution for more info.'; +$_lang["friendlyurls_title"] = 'Use FriendlyURLs'; +$_lang["friendlyurlsprefix_message"] = 'A prefix setting of "page" will turn the URL /index.php?id=2 to the URL alias "page2.html" (assuming the suffix is set to .html).'; +$_lang["friendlyurlsprefix_title"] = 'Friendly URL Prefix'; +$_lang["friendlyurlsuffix_message"] = 'Any suffix you choose will work, including no suffix at all. E.g., ".aspx" will append .aspx to all URL aliases.'; +$_lang["friendlyurlsuffix_title"] = 'Friendly URL Suffix'; +$_lang["functionnotimpl"] = 'Sorry!'; +$_lang["functionnotimpl_message"] = 'This function has not been implemented yet.'; +$_lang["further_info"] = 'Further information'; +$_lang["global_tabs"] = 'Global Tabs'; +$_lang["go"] = 'Go'; +$_lang["group_access_permissions"] = 'User group access'; +$_lang['group_tvs'] = 'Group TV'; +$_lang["guid"] = 'GUID'; +$_lang["help"] = 'Help'; +$_lang["help_msg"] = '

          You can obtain free community support by visiting the EVO Forums. There is also a growing body of EVO Documentation and Guides that touch on virtually every aspect of EVO.

          We are planning to offer commercial support services for EVO as well. Please email us if you\'re interested.

          '; +$_lang["help_title"] = 'Help'; +$_lang["hide_tree"] = 'Hide Site Tree'; +$_lang["home"] = 'Home'; +$_lang["htmlsnippet"] = 'Chunk'; +$_lang["htmlsnippets"] = 'Chunks'; +$_lang["htmlsnippet_desc"] = 'Description'; +$_lang["htmlsnippet_management_msg"] = 'Select the Chunk you wish to edit.'; +$_lang["htmlsnippet_msg"] = 'Add and edit Chunks. Remember, Chunks are \'raw\' HTML code, so any PHP code won\'t be processed.'; +$_lang["htmlsnippet_name"] = 'Chunk name'; +$_lang["htmlsnippet_title"] = 'Create/edit Chunk'; +$_lang["icon"] = 'Icon'; +$_lang["id"] = 'ID'; +$_lang["illegal_parent_child"] = 'Parent Assignment:\n\nResource is a child of the selected Resource.'; +$_lang["illegal_parent_self"] = 'Parent Assignment:\n\nThe selected Resource cannot be assigned to itself.'; +$_lang["images_management"] = 'Manage Images'; +$_lang["import_files_found"] = 'Found %s Resources for import...'; +$_lang["import_params"] = 'Import Module shared parameters'; +$_lang["import_params_msg"] = 'You can import the parameters or settings of a Module by selecting the name of the Module from the above drop down menu. NOTE: In order for Modules to appear inside the menu, this Plugin/Snippet must be a part of the Module\'s dependency listing and the Module must have parameter sharing enabled. '; +$_lang["import_parent_resource"] = 'Parent Resource:'; +$_lang["import_site"] = 'Import HTML'; +$_lang["import_site_failed"] = 'Failed!'; +$_lang["import_site_failed_db_error"] = 'A database error occured while trying to clone Resource: '; +$_lang["import_site_failed_no_open_dir"] = 'Could not open directory: '; +$_lang["import_site_failed_no_retrieve_file"] = 'Could not retrieve file: '; +$_lang["import_site_html"] = 'Import site from HTML'; +$_lang["import_site_importing_document"] = 'Importing file %s '; +$_lang["import_site_maxtime"] = 'Max import time:'; +$_lang["import_site_maxtime_message"] = 'Specify the number of seconds allowed for the Content Manager to import the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; +$_lang["import_site_message"] = '

          Import an entire HTML site into your site database. Please note that you will need to copy your html files and/or directories into the /assets/import directory.

          Please fill out the form and press \'Import\' to start the import process. The files imported will be saved into the selected location, using the files name as the Resource\'s URL aliases where possible, and the Resource title tag as the pagetitle.'; +$_lang["import_site_skip"] = 'Skipped!'; +$_lang["import_site_start"] = 'Start Import'; +$_lang["import_site_success"] = 'Success!'; +$_lang["import_site_time"] = 'Import finished. Import took %s seconds to complete.'; +$_lang["inbox"] = 'Inbox'; +$_lang["info"] = 'Info'; +$_lang["information"] = 'Information'; +$_lang["inline"] = 'Inline'; +$_lang["insert"] = 'Insert'; +$_lang["maxImageWidth"] = 'Maximum image width'; +$_lang["maxImageHeight"] = 'Maximum image height'; +$_lang["thumbWidth"] = 'Maximum thumbnail width'; +$_lang["thumbHeight"] = 'Maximum thumbnail height'; +$_lang["thumbsDir"] = 'Thumbnails directory location'; +$_lang["jpegQuality"] = 'JPEG compression'; +$_lang["denyZipDownload"] = 'Disable zip-archives downloading'; +$_lang["denyExtensionRename"] = 'Disable renaming of file extensions'; +$_lang["maxImageWidth_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; +$_lang["maxImageHeight_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; +$_lang["thumbWidth_message"] = 'Maximum thumbnail width.'; +$_lang["thumbHeight_message"] = 'Maximum thumbnail height.'; +$_lang["thumbsDir_message"] = 'The name of thumbnail directory.'; +$_lang["jpegQuality_message"] = 'JPEG compression quality of thumbnails and resized images'; +$_lang["showHiddenFiles"] = 'Show hidden files in file browser'; +$_lang["keyword"] = 'Keyword'; +$_lang["keywords"] = 'Keywords'; +$_lang["keywords_intro"] = 'To edit a keyword, simply type in the new keyword in the text field next to the keyword you wish to change. To delete a keyword, check the \'delete\' box for that keyword. If you check the keyword\'s delete box, and also change it\'s name, it will be deleted, and the renaming of the keyword will not take place!'; +$_lang["language_message"] = 'Select the language for the EVO Content Manager.'; +$_lang["language_title"] = 'Manager language'; +$_lang["last_update"] = 'Last update'; +$_lang["launch_site"] = 'View Site'; +$_lang["license"] = 'License'; +$_lang["link_attributes"] = 'Link Attributes'; +$_lang["link_attributes_help"] = 'Enter optional attributes for a link for this page, such as target="_blank" or rel="external".'; +$_lang["list_mode"] = 'Turn on/off list mode - used to list all records in the grid.'; +$_lang["loading_doc_tree"] = 'Loading Site Tree...'; +$_lang["loading_menu"] = 'Loading menu...'; +$_lang["loading_page"] = 'Please wait while EVO loads the page...'; +$_lang["localtime"] = 'Local Time'; +$_lang["lock_htmlsnippet"] = 'Lock Chunk for editing'; +$_lang["lock_htmlsnippet_msg"] = 'Only Administrators (Role ID 1) can edit this Chunk.'; +$_lang["lock_module"] = 'Lock Module for editing'; +$_lang["lock_module_msg"] = 'Only Administrators (Role ID 1) can edit this Module.'; +$_lang["lock_msg"] = '%s is currently editing this %s. Please wait until the other user has finished and try again.'; +$_lang["lock_plugin"] = 'Lock Plugin for editing'; +$_lang["lock_plugin_msg"] = 'Only Administrators (Role ID 1) can edit this Plugin.'; +$_lang["lock_settings_msg"] = '%s is currently editing these settings. Please wait until the other user has finished and try again.'; +$_lang["lock_snippet"] = 'Lock Snippet for editing'; +$_lang["lock_snippet_msg"] = 'Only Administrators (Role ID 1) can edit this Snippet.'; +$_lang["lock_template"] = 'Lock Template for editing'; +$_lang["lock_template_msg"] = 'Only Administrators (Role ID 1) can edit this Template.'; +$_lang["lock_tmplvars"] = 'Lock Template Variable for editing'; +$_lang["lock_tmplvars_msg"] = 'Only Administrators (Role ID 1) can edit this Template Variable.'; +$_lang["locked"] = 'Locked'; +$_lang["login_allowed_days"] = 'Allowed Days'; +$_lang["login_allowed_days_message"] = 'Select the days that this user is allowed to login.'; +$_lang["login_allowed_ip"] = 'Allowed IP Address'; +$_lang["login_allowed_ip_message"] = 'Enter the IP addresses that this user is allowed to login from. NOTE: Separate multiple IP addresses with a comma (,)'; +$_lang["login_button"] = 'Login'; +$_lang["login_cancelled_install_in_progress"] = 'Install/update of this site is currently in progress. Please retry in a couple of minutes!'; +$_lang["login_cancelled_site_was_updated"] = 'Install/update on this site was executed, please login again!'; +$_lang["login_captcha_message"] = 'Please enter the security code shown in the graphic. If you can\'t read the code, click the image to generate a new one or contact your site admin.'; +$_lang["login_homepage"] = 'Login Home Page'; +$_lang["login_homepage_message"] = 'Enter the ID of the Resource you want to send user to after he/she has logged in. NOTE: make sure the ID you enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; +$_lang["login_message"] = 'Please enter your login credentials to start your Manager session. Your username and password are case-sensitive, so please enter them carefully!'; +$_lang["logo_slogan"] = 'EVO Content Manager - \nCreate and do more with less'; +$_lang["logout"] = 'Logout'; +$_lang["long_title"] = 'Long title'; +$_lang["mail_check_timeperiod_message"] = 'How often to check for new mail messages in the Manager, in seconds.'; +$_lang["mail_check_timeperiod_title"] = 'Mail Check Time Period'; +$_lang["manage_depends"] = 'Manage Dependencies'; +$_lang["manage_files"] = 'Manage Files'; +$_lang["manage_htmlsnippets"] = 'Chunks'; +$_lang["manage_metatags"] = 'Manage META tags and Keywords'; +$_lang["manage_modules"] = 'Manage Modules'; +$_lang["manage_plugins"] = 'Plugins'; +$_lang["manage_snippets"] = 'Snippets'; +$_lang["manage_templates"] = 'Templates'; +$_lang["manage_documents"] = 'Documents'; +$_lang["manager"] = 'Manager'; +$_lang["manager_lockout_message"] = 'You are currently logged into the Content Manager. If you would like to close your login session please click the "Logout" button.

          To go to your startup or home page click the "Home" button.'; +$_lang["manager_permissions"] = 'Manager Permissions'; +$_lang["manager_theme"] = 'Manager Theme'; +$_lang["manager_theme_message"] = 'Select the Theme for the Content Manager.'; +$_lang["messages"] = 'Messages'; +$_lang["messages_all"] = 'Everyone'; +$_lang["messages_compose"] = 'Compose a message'; +$_lang["messages_forward"] = 'Forward'; +$_lang["messages_from"] = 'From'; +$_lang["messages_group"] = 'A group'; +$_lang["messages_inbox"] = 'Inbox'; +$_lang["messages_message"] = 'Message'; +$_lang["messages_no_messages"] = 'No messages in Inbox.'; +$_lang["messages_not_allowed_to_read"] = 'You\'re not allowed to read this message!'; +$_lang["messages_private"] = 'Private'; +$_lang["messages_read_message"] = 'Read message'; +$_lang["messages_reply"] = 'Reply'; +$_lang["messages_select_group"] = 'Select a group'; +$_lang["messages_select_user"] = 'Select a user'; +$_lang["messages_send"] = 'Send'; +$_lang["messages_send_to"] = 'Send to'; +$_lang["messages_sent"] = 'Sent on'; +$_lang["messages_subject"] = 'Subject'; +$_lang["messages_system_user"] = '[System]'; +$_lang["messages_title"] = 'Messages'; +$_lang["messages_user"] = 'A user'; +$_lang["meta_keywords"] = 'META Keywords'; +$_lang["metatag_intro"] = 'On this page you can delete, create or edit META tags. To link META tags to Resources, click on the META Keywords tab when editing the Resource, and select the desired META tags and keywords. To add a new tag enter the name and value and click the \'Add tag\' button. To edit the tag click on the name of the tag from within the data grid.'; +$_lang["metatag_notice"] = 'You may wish to reference the HTML Reference Guide site for more information. This is not a complete list of possible Meta Tags.'; +$_lang["metatags"] = 'META tags'; +$_lang["mgr_access_permissions"] = 'Manager access permissions'; +$_lang["mgr_login_start"] = 'Manager Login Startup'; +$_lang["mgr_login_start_message"] = 'Enter the ID of the Resource you want to send the user to after he/she has logged into the manager. NOTE: make sure the ID you\'ve enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; +$_lang["mgrlog_action"] = 'Action'; +$_lang["mgrlog_actionid"] = 'Action ID'; +$_lang["mgrlog_anyall"] = 'Any/All'; +$_lang["mgrlog_datecheckfalse"] = 'checkdate() returned false.'; +$_lang["mgrlog_datefr"] = 'Date from'; +$_lang["mgrlog_dateinvalid"] = 'Invalid date format.'; +$_lang["mgrlog_dateto"] = 'Date to'; +$_lang["mgrlog_emptysrch"] = 'Your search query returned an empty result set (i.e. not matching logs found).'; +$_lang["mgrlog_field"] = 'Field'; +$_lang["mgrlog_itemid"] = 'Item ID'; +$_lang["mgrlog_itemname"] = 'Item name'; +$_lang["mgrlog_msg"] = 'Message'; +$_lang["mgrlog_noquery"] = 'No search query entered yet.'; +$_lang["mgrlog_qresults"] = 'Query results'; +$_lang["mgrlog_query"] = 'Query logging'; +$_lang["mgrlog_query_msg"] = 'Please make a selection for viewing the logs. You can select log entries by date, but be aware that the dates you enter are not inclusive - to select every log entry for 01-01-2004, set \'date from\' to 01-01-2004 and \'date to\' to 02-01-2004.

          Message and action are usually the same. If you\'re searching for a specific message, it\'s best to set action to \'Any/All\'.'; +$_lang["mgrlog_results"] = 'No. of results'; +$_lang["mgrlog_searchlogs"] = 'Search logs'; +$_lang["mgrlog_sortinst"] = 'Sort the table by clicking on the column headers. If the logs are too large, empty the log file to remove all log entries up to now. This cannot be undone!'; +$_lang["mgrlog_time"] = 'Time'; +$_lang["mgrlog_user"] = 'User'; +$_lang["mgrlog_username"] = 'Username'; +$_lang["mgrlog_value"] = 'Value'; +$_lang["mgrlog_view"] = 'View manager logs'; +$_lang["module_code"] = 'Module code (php)'; +$_lang["module_config"] = 'Module configuration'; +$_lang["module_desc"] = 'Description'; +$_lang["module_disabled"] = 'Module disabled'; +$_lang["module_edit_click_title"] = 'Click here to edit this Module'; +$_lang["module_group_access_msg"] = 'Select the User Groups that are allowed to execute this Module from within the Content Manager.'; +$_lang["module_management"] = 'Manage Modules'; +$_lang["module_management_msg"] = 'Choose the Module you would like to execute or modify. To run the Module click on the icon in the grid. To modify the Module click on the name of the Module.'; +$_lang["module_msg"] = 'Add/edit Modules. A Module is a collection of Elements (e.g. Plugins, Snippets, etc).'; +$_lang["module_name"] = 'Module name'; +$_lang["module_resource_msg"] = 'Add or remove Elements upon which this Module depends. To add a new Element click on the one of the add buttons below.'; +$_lang["module_resource_title"] = 'Module Dependencies'; +$_lang["module_title"] = 'Create/edit Module'; +$_lang["module_viewdepend_msg"] = 'View the assigned Elements on which this Module depends. Click on the "Manager Dependencies" button to modify the dependencies'; +$_lang["modules"] = 'Modules'; +$_lang["modx_news"] = 'EVO News Notices'; +$_lang["modx_news_tab"] = 'EVO News'; +$_lang["modx_news_title"] = 'EVO News'; +$_lang["modx_security_notices"] = 'EVO Security Notices'; +$_lang["modx_version"] = 'EVO version'; +$_lang["monday"] = 'Monday'; +$_lang["move"] = 'Move'; +$_lang["move_resource"] = 'Move Resource'; +$_lang["move_resource_message"] = 'Move a Resource and all its children by selecting a new parent in the Site Tree. If you select a Resource that is not already a Container, it will be changed into one. Please click on the new parent in the Site Tree.'; +$_lang["move_resource_new_parent"] = 'Please select a new parent in the Site Tree.'; +$_lang["move_resource_title"] = 'Move Resource'; +$_lang["name"] = 'Name'; +$_lang["new_category"] = 'New Category'; +$_lang["new_file_permissions_message"] = 'When uploading a new file in the File Manager, the File Manager will attempt to change the file permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; +$_lang["new_file_permissions_title"] = 'New File Permissions'; +$_lang["new_folder_permissions_message"] = 'When creating a new directory in the File Manager, the File Manager will attempt to change the directory permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; +$_lang["new_folder_permissions_title"] = 'New Directory Permissions'; +$_lang["new_htmlsnippet"] = 'New Chunk'; +$_lang["new_keyword"] = 'Add new keyword:'; +$_lang["new_module"] = 'New Module'; +$_lang["new_parent"] = 'New parent'; +$_lang["new_plugin"] = 'New Plugin'; +$_lang["new_role"] = 'New Role'; +$_lang["new_snippet"] = 'New Snippet'; +$_lang["new_template"] = 'New Template'; +$_lang["new_tmplvars"] = 'New Template Variable'; +$_lang["new_user"] = 'New User'; +$_lang["new_web_user"] = 'New Web User'; +$_lang["new_resource"] = 'New Resource'; +$_lang["no"] = 'No'; +$_lang["no_active_users_found"] = 'No active users found.'; +$_lang["no_activity_message"] = 'You have not yet created or edited any Resources.'; +$_lang["no_category"] = 'uncategorized'; +$_lang["no_docs_pending_publishing"] = 'No Resources pending publishing.'; +$_lang["no_docs_pending_pubunpub"] = 'No Events Found'; +$_lang["no_docs_pending_unpublishing"] = 'No Resources pending unpublishing.'; +$_lang["no_edits_creates"] = 'No edits or creates found.'; +$_lang["no_groups_found"] = 'No groups found.'; +$_lang["no_keywords_found"] = 'There are currently no keywords.'; +$_lang["no_records_found"] = 'No records found.'; +$_lang["no_results"] = 'No results found'; +$_lang["nologentries_message"] = 'Enter the number of log entries shown per page when you browse the Audit trail.'; +$_lang["nologentries_title"] = 'Number of log entries'; +$_lang["nomessages_message"] = 'Enter the number of messages to show in inbox when viewing messages.'; +$_lang["nomessages_title"] = 'Number of messages'; +$_lang["none"] = 'None'; +$_lang["noresults_message"] = 'Enter the number of results to show in the data grid when viewing listings and search results.'; +$_lang["noresults_title"] = 'Number of Results'; +$_lang["not_deleted"] = 'has not been deleted.'; +$_lang["not_set"] = 'Not set'; +$_lang["offline"] = 'Offline'; +$_lang["online"] = 'Online'; +$_lang["onlineusers_action"] = 'Action'; +$_lang["onlineusers_actionid"] = 'Action-ID'; +$_lang["onlineusers_ipaddress"] = 'User\'s IP address'; +$_lang["onlineusers_lasthit"] = 'Last hit'; +$_lang["onlineusers_message"] = 'This list shows all users active within the last 20 minutes (current time is '; +$_lang["onlineusers_title"] = 'Online users'; +$_lang["onlineusers_user"] = 'User'; +$_lang["onlineusers_userid"] = 'User\'s ID'; +$_lang["optimize_table"] = 'Click here to optimize this table'; +$_lang["page_data_alias"] = 'Alias'; +$_lang["page_data_cacheable"] = 'Cacheable'; +$_lang["page_data_cacheable_help"] = 'This allows the Resource to be saved to the site cache, and affects all Snippets on the page.'; +$_lang["page_data_cached"] = 'Source retrieved from cache:'; +$_lang["page_data_changes"] = 'Changes'; +$_lang["page_data_contentType"] = 'Internet Media Type'; +$_lang["page_data_contentType_help"] = 'Select the content type for this Resource. If you\'re not sure which content type the Resource should have, just leave it as text/html.'; +$_lang["page_data_created"] = 'Created'; +$_lang["page_data_edited"] = 'Edited'; +$_lang["page_data_editor"] = 'Edit using rich text editor'; +$_lang["page_data_folder"] = 'Resource is Container'; +$_lang["page_data_general"] = 'General'; +$_lang["page_data_markup"] = 'Markup/structure'; +$_lang["page_data_mgr_access"] = 'Manager access'; +$_lang["page_data_notcached"] = 'This Resource has not yet been cached.'; +$_lang["page_data_publishdate"] = 'Publish date'; +$_lang["page_data_publishdate_help"] = 'If you set a publish date, the Resource will be published as soon as the publish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the publish date. This will then mean the Resource is never automatically published.'; +$_lang["page_data_published"] = 'Published'; +$_lang["page_data_searchable"] = 'Searchable'; +$_lang["page_data_searchable_help"] = 'Checking this field will allow the Resource to be searched. You can also use this field for other purposes in your Snippets.'; +$_lang["page_data_source"] = 'Source'; +$_lang["page_data_status"] = 'Status'; +$_lang["page_data_template"] = 'Uses Template'; +$_lang["page_data_template_help"] = 'Select the Template for this Resource.'; +$_lang["page_data_title"] = 'Page data'; +$_lang["page_data_unpublishdate"] = 'Un-publish date'; +$_lang["page_data_unpublishdate_help"] = 'If you set an unpublish date, the Resource will be unpublished as soon as the unpublish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the unpublish date. This will then mean the Resource is never automatically unpublished.'; +$_lang["page_data_unpublished"] = 'Un-published'; +$_lang["page_data_web_access"] = 'Web access'; +$_lang["pagetitle"] = 'Resource\'s title'; +$_lang["pagination_table_first"] = 'First'; +$_lang["pagination_table_gotopage"] = 'Go to page'; +$_lang["pagination_table_last"] = 'Last'; +$_lang["paging_first"] = 'first'; +$_lang["paging_last"] = 'last'; +$_lang["paging_next"] = 'next'; +$_lang["paging_prev"] = 'prev'; +$_lang["paging_showing"] = 'Showing'; +$_lang["paging_to"] = 'to'; +$_lang["paging_total"] = 'total'; +$_lang["parameter"] = 'Parameter'; +$_lang["parse_docblock"] = 'Parse DocBlock'; +$_lang["parse_docblock_msg"] = 'Attention (!): Resets actual name, configuration, description and category to install-defaults by parsing the source code.'; +$_lang["password"] = 'Password'; +$_lang["password_change_request"] = 'Password change request'; +$_lang["password_gen_gen"] = 'Let EVO generate a password.'; +$_lang["password_gen_length"] = 'The password you specify needs to be at least 6 characters long.'; +$_lang["password_gen_method"] = 'New password method'; +$_lang["password_gen_specify"] = 'Let me specify the password:'; +$_lang["password_method"] = 'Password notification method'; +$_lang["password_method_email"] = 'Send the new password by e-mail.'; +$_lang["password_method_screen"] = 'Show the new password on screen.'; +$_lang["password_msg"] = 'The new password for %s is %s.'; +$_lang["php_version_check"] = 'EVO Evolution is compatible with PHP version 5.0.0 and higher. This server is using version %s%. Please upgrade your PHP installation!'; +$_lang["plugin"] = 'Plugin'; +$_lang["plugins"] = 'Plugins'; +$_lang["plugin_code"] = 'Plugin code (php)'; +$_lang["plugin_config"] = 'Plugin configuration'; +$_lang["plugin_desc"] = 'Description'; +$_lang["plugin_disabled"] = 'Plugin Disabled'; +$_lang["plugin_event_msg"] = 'Select the events that you would like this Plugin to listen to.'; +$_lang["plugin_management_msg"] = 'Choose which Plugin you wish to edit.'; +$_lang["plugin_msg"] = 'Add/edit Plugins. Plugins use PHP code that is invoked whenever specific System Events trigger.'; +$_lang["plugin_name"] = 'Plugin name'; +$_lang["plugin_priority"] = 'Edit Plugin Execution Order by Event'; +$_lang["plugin_priority_instructions"] = 'Drag to reorder the Plugins under each Event header. The first plugin to execute should go at the top.'; +$_lang["plugin_priority_title"] = 'Plugin Execution Order'; +$_lang["purge_plugin"] = 'Purge obsolete plugins'; +$_lang["plugin_title"] = 'Create/edit Plugin'; +$_lang["preview"] = 'Preview'; +$_lang["preview_msg"] = 'This is a preview of your last saved changes. Click here to Save and Refresh your current changes'; +$_lang["preview_resource"] = 'Preview Resource'; +$_lang["private"] = 'Private'; +$_lang["public"] = 'Public'; +$_lang["publish_date"] = 'Publish Date'; +$_lang["publish_events"] = 'Publish Events'; +$_lang["publish_resource"] = 'Publish Resource'; +$_lang["rb_base_dir_message"] = 'Enter the physical path to the File Browser directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the path out on its own, causing the File Browser to show an error. In that case, you can enter the path to the images directory here (the path as you\'d see it in Windows Explorer). NOTE: The File Browser directory must contain the subdirectories images, files, flash and media in order for the file browser to function correctly.'; +$_lang["rb_base_dir_title"] = 'File base path'; +$_lang["rb_base_url_message"] = 'Enter the virtual path to files directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the URL out on it\'s own, causing the File Browser to show an error. In that case, you can enter the URL to the images directory here (the URL as you\'d enter it on Internet Explorer).'; +$_lang["rb_base_url_title"] = 'File Browser URL'; +$_lang["rb_message"] = 'Select yes to enable the File Browser. This will allow your users to browse and upload files such as images, flash and media files on the server.'; +$_lang["rb_title"] = 'Enable File Browser'; +$_lang["rb_webuser_message"] = 'Do you want to allow a web user the ability to use the file browser? WARNING: Allowing web users the use of the file browser exposes the files available to manager users. Only use this option for trusted web users.'; +$_lang["rb_webuser_title"] = 'Web Users?'; +$_lang["recent_docs"] = 'Recent Resources'; +$_lang["recommend_setting_change_title"] = 'Recommended Setting Change'; +$_lang["recommend_setting_change_description"] = 'Your site is not configured to validate the HTTP_REFERER of incoming requests to the Manager. We strongly recommend enabling this setting to reduce the risk of a CSRF (Cross Site Request Forgery) attack.'; +$_lang["references"] = 'References'; +$_lang["refresh_cache"] = 'Cache: Found %s files in cache directory and deleted %d cache files.

          New cache files will be created when pages are requested.'; +$_lang["refresh_published"] = '%s Resources were published.'; +$_lang["refresh_site"] = 'Clear Cache'; +$_lang["refresh_title"] = 'Refresh site'; +$_lang["refresh_tree"] = 'Refresh Site Tree'; +$_lang["refresh_unpublished"] = '%s Resources were unpublished.'; +$_lang["release_date"] = 'Release date'; +$_lang["remember_last_tab"] = 'Remember tabs'; +$_lang["remember_last_tab_message"] = 'Tabbed Manager pages load with the last tab viewed instead of defaulting to the first tab'; +$_lang["remember_username"] = 'Remember me'; +$_lang["remove"] = 'Remove'; +$_lang["remove_date"] = 'Remove date'; +$_lang["remove_locks"] = 'Remove Locks'; +$_lang["rename"] = 'Rename'; +$_lang["reports"] = 'Reports'; +$_lang["report_issues"] = 'Report issues'; +$_lang["require_tagname"] = 'A tag name is required'; +$_lang["require_tagvalue"] = 'A tag value is required'; +$_lang["reserved_name_warning"] = 'You have used a reserved name.'; +$_lang["reset"] = 'Reset'; +$_lang["reset_failedlogins"] = 'reset'; +$_lang["reset_sort_order"] = 'Reset sort order'; +$_lang["resource"] = 'Resource'; +$_lang["resource_alias"] = 'URL alias'; +$_lang["resource_alias_help"] = 'Set the URL alias to make the Resource accessible as http://example.com/weburl. This only works Friendly URLs are enabled in the site configuration.'; +$_lang["resource_content"] = 'Resource content'; +$_lang["resource_description"] = 'Description'; +$_lang["resource_description_help"] = 'Enter an optional description of this Resource.'; +$_lang["resource_duplicate"] = 'Duplicate Resource'; +$_lang["resource_long_title_help"] = 'Enter an optional longer title for your Resource. This can be used for automatic Resource header tags for search engines, and might be more descriptive for your Resource.'; +$_lang["resource_metatag_help"] = 'Select the META tags or keywords you wish to assign to this Resource. Hold down the CTRL key to select multiple keywords or meta tags.'; +$_lang["resource_opt_contentdispo"] = 'Content-Disposition'; +$_lang["resource_opt_contentdispo_help"] = 'Use the content disposition field to specify how this Resource will be handled by the web browser. For file downloads select the Attachment option.'; +$_lang["resource_opt_emptycache"] = 'Empty cache'; +$_lang["resource_opt_emptycache_help"] = 'Leaving this field checked will make EVO empty the cache after you save the Resource. This way your visitors will not see an older version of the Resource.'; +$_lang["resource_opt_folder"] = 'Container'; +$_lang["resource_opt_folder_help"] = 'Check this to make the Resource also act as a Container for other Resources. A \'Container\' is like a folder, only it can also have content.'; +$_lang["resource_opt_menu_index"] = 'Menu index'; +$_lang["resource_opt_menu_index_help"] = 'Menu Index is a field that can control sorting Resources, particularly in menu Snippet(s). You can also use it for any other purpose in your Snippets.'; +$_lang["resource_opt_menu_title"] = 'Menu title'; +$_lang["resource_opt_menu_title_help"] = 'Menu title is an optional field used to display a short title in menu Snippet(s) or Modules.'; +$_lang["resource_opt_published"] = 'Published'; +$_lang["resource_opt_published_help"] = 'Check this field to have the Resource published immediately after saving it.'; +$_lang["resource_opt_richtext"] = 'Rich text'; +$_lang["resource_opt_richtext_help"] = 'Leave this checked to use the rich text editor for editing Resources. If your Resources contain JavaScript and forms, uncheck this to edit in HTML mode to prevent the editor from incorrectly changing your Resources.'; +$_lang["resource_opt_show_menu"] = 'Show in menu'; +$_lang["resource_opt_show_menu_help"] = 'Select this option to show Resource inside a web menu. Please note that some Menu Builders might choose to ignore this option.'; +$_lang["resource_opt_trackvisit_help"] = 'Log each visitor\'s visit to this page'; +$_lang["resource_overview"] = 'Resource overview'; +$_lang["resource_parent"] = 'Resource parent'; +$_lang["resource_parent_help"] = 'Click the icon to enable setting a Resource parent, then click a Resource in the Site Tree to set a new parent.'; +$_lang["resource_permissions_error"] = 'Assign this Resource to at least one Resource Group to which you have access.'; +$_lang["resource_setting"] = 'Resource setting'; +$_lang["resource_summary"] = 'Summary (introtext)'; +$_lang["resource_summary_help"] = 'Type a brief summary of the Resource'; +$_lang["resource_title"] = 'Title'; +$_lang["resource_title_help"] = 'Enter the name/title of the Resource. Avoid using backslashes in the name.'; +$_lang["resource_to_be_moved"] = 'Resource to be moved'; +$_lang["resource_type"] = 'Resource Type'; +$_lang["resource_type_message"] = 'Weblinks reference Resources on the Internet including another EVO Resource, an external page, or an image or other file on the Internet. Weblinks should have a text/html Internet Media Type and Inline Content-Disposition.'; +$_lang["resource_type_weblink"] = 'Weblink'; +$_lang["resource_type_webpage"] = 'Web page'; +$_lang["resource_weblink_help"] = 'Type the address of the object you wish to reference with this Weblink here. Alternatively insert from the File Browser or use the link selection icon and select a resource from the Site Tree.'; +$_lang["resources_in_container"] = 'Resources in this Container'; +$_lang["resources_in_container_no"] = 'This Container does not have child-Resources.'; +$_lang["role"] = 'Role'; +$_lang["role_about"] = 'View the about page'; +$_lang["role_access_persmissions"] = 'Access permissions'; +$_lang["role_actionok"] = 'View action completed screen'; +$_lang["role_assets_images"] = 'Manage assets/images'; +$_lang["role_assets_files"] = 'Manage assets/files'; +$_lang["role_bk_manager"] = 'Use the Backup Manager'; +$_lang["role_cache_refresh"] = 'Empty the site\'s cache'; +$_lang["role_category_manager"] = 'Use the Category Manager'; +$_lang["role_change_password"] = 'Change password'; +$_lang["role_change_resourcetype"] = 'Change Resource-Type'; +$_lang["role_chunk_management"] = 'Chunk management'; +$_lang["role_config_management"] = 'Configuration management'; +$_lang["role_content_management"] = 'Content management'; +$_lang["role_create_chunk"] = 'Create new Chunks'; +$_lang["role_create_doc"] = 'Create new Resources'; +$_lang["role_create_plugin"] = 'Create new Plugins'; +$_lang["role_create_snippet"] = 'Create new Snippets'; +$_lang["role_create_template"] = 'Create new site Templates'; +$_lang["role_credits"] = 'View credits'; +$_lang["role_delete_chunk"] = 'Delete Chunks'; +$_lang["role_delete_doc"] = 'Delete Resources'; +$_lang["role_delete_eventlog"] = 'Delete event log'; +$_lang["role_delete_module"] = 'Delete Module'; +$_lang["role_delete_plugin"] = 'Delete Plugins'; +$_lang["role_delete_role"] = 'Delete roles'; +$_lang["role_delete_snippet"] = 'Delete Snippets'; +$_lang["role_delete_template"] = 'Delete Templates'; +$_lang["role_delete_user"] = 'Delete users'; +$_lang["role_delete_web_user"] = 'Delete web users'; +$_lang["role_edit_chunk"] = 'Edit Chunks'; +$_lang["role_edit_doc"] = 'Edit a Resource'; +$_lang["role_edit_doc_metatags"] = 'Edit Resource META tags and keywords'; +$_lang["role_edit_module"] = 'Edit Module'; +$_lang["role_edit_plugin"] = 'Edit Plugins'; +$_lang["role_edit_role"] = 'Edit roles'; +$_lang["role_edit_settings"] = 'Change site settings'; +$_lang["role_edit_snippet"] = 'Edit Snippets'; +$_lang["role_edit_template"] = 'Edit site Templates'; +$_lang["role_edit_user"] = 'Edit users'; +$_lang["role_edit_web_user"] = 'Edit web users'; +$_lang["role_empty_trash"] = 'Permanently purge deleted Resources'; +$_lang["role_errors"] = 'View error dialog'; +$_lang["role_eventlog_management"] = 'Event log management'; +$_lang["role_export_static"] = 'Export Static HTML'; +$_lang["role_file_management"] = 'File Management'; +$_lang["role_file_manager"] = 'Use the file manager (full root access)'; +$_lang["role_frames"] = 'Request manager frames'; +$_lang["role_help"] = 'View help pages'; +$_lang["role_home"] = 'Request manager intro page'; +$_lang["role_import_static"] = 'Import HTML'; +$_lang["role_logout"] = 'Log out of the manager'; +$_lang["role_manage_metatags"] = 'Manage site META tags and keywords'; +$_lang["role_management_msg"] = 'Choose the role you wish to edit.'; +$_lang["role_management_title"] = 'Roles'; +$_lang["role_messages"] = 'View and send messages'; +$_lang["role_module_management"] = 'Module management'; +$_lang["role_name"] = 'Role name'; +$_lang["role_new_module"] = 'Create new Module'; +$_lang["role_new_role"] = 'Create new roles'; +$_lang["role_new_user"] = 'Create new users'; +$_lang["role_new_web_user"] = 'Create new web users'; +$_lang["role_plugin_management"] = 'Plugin management'; +$_lang["role_publish_doc"] = 'Publish Resources'; +$_lang["role_remove_locks"] = 'Remove Locks'; +$_lang["role_role_management"] = 'Roles'; +$_lang["role_run_module"] = 'Run Module'; +$_lang["role_save_chunk"] = 'Save Chunks'; +$_lang["role_save_doc"] = 'Save Resources'; +$_lang["role_save_module"] = 'Save Module'; +$_lang["role_save_password"] = 'Save password'; +$_lang["role_save_plugin"] = 'Save Plugins'; +$_lang["role_save_role"] = 'Save roles'; +$_lang["role_save_snippet"] = 'Save Snippets'; +$_lang["role_save_template"] = 'Save Templates'; +$_lang["role_save_user"] = 'Save users'; +$_lang["role_save_web_user"] = 'Save web users'; +$_lang["role_snippet_management"] = 'Snippet management'; +$_lang["role_template_management"] = 'Template management'; +$_lang["role_title"] = 'Create/edit role'; +$_lang["role_udperms"] = 'Permissions management'; +$_lang["role_user_management"] = 'User management'; +$_lang["role_view_docdata"] = 'View a Resource\'s data'; +$_lang["role_view_eventlog"] = 'View event log'; +$_lang["role_view_logs"] = 'View system logs'; +$_lang["role_view_unpublished"] = 'View Unpublished Resources'; +$_lang["role_web_access_persmissions"] = 'Web access permissions'; +$_lang["role_web_user_management"] = 'Web user management'; +$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/modx-announce'; +$_lang["rss_url_news_message"] = 'Enter the URL for the EVO News Feed.'; +$_lang["rss_url_news_title"] = 'RSS News Feed'; +$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/modxsecurity'; +$_lang["rss_url_security_message"] = 'Enter the URL for the EVO Security Feed.'; +$_lang["rss_url_security_title"] = 'RSS Security Feed'; +$_lang["run_module"] = 'Run Module'; +$_lang["saturday"] = 'Saturday'; +$_lang["save"] = 'Save'; +$_lang["save_all_changes"] = 'Save all changes'; +$_lang["save_tag"] = 'Save tag'; +$_lang["saving"] = 'Saving, please wait...'; +$_lang["search"] = 'Search'; +$_lang["search_criteria"] = 'Search criteria'; +$_lang["search_criteria_content"] = 'Search by content'; +$_lang["search_criteria_content_msg"] = 'Find all Resources with the entered text in their content.'; +$_lang["search_criteria_id"] = 'Search by ID'; +$_lang["search_criteria_id_msg"] = 'Enter a Resource\'s ID to quickly locate that Resource.'; +$_lang["search_criteria_top"] = 'Search in main fields'; +$_lang["search_criteria_top_msg"] = 'Pagetitle, Longtitle, Alias, ID'; +$_lang["search_criteria_template_id"] = 'Search by template ID'; +$_lang["search_criteria_template_id_msg"] = 'Find all Resources using the specified template.'; +$_lang["search_criteria_url_msg"] = 'Find Resource by exact URL.'; +$_lang["search_criteria_longtitle"] = 'Search by long title'; +$_lang["search_criteria_longtitle_msg"] = 'Find all Resources with the entered text in their long title.'; +$_lang["search_criteria_title"] = 'Search by title'; +$_lang["search_criteria_title_msg"] = 'Find all Resources with the entered text in their title.'; +$_lang["search_empty"] = 'Your search returned no results. Please broaden your search criteria and try again.'; +$_lang["search_item_deleted"] = 'This item has been deleted'; +$_lang["search_results"] = 'Search results'; +$_lang["search_results_returned_desc"] = 'Description'; +$_lang["search_results_returned_id"] = 'ID'; +$_lang["search_results_returned_msg"] = 'Your search criteria returned %s Resources. If a lot of results are being returned, try to enter a more specific search. The two left-most columns will allow you to find the Resource in the Site Tree or view the Resource. The two right most columns show, respectively, if a Resource has been deleted and what it\'s published status is.

          '; +$_lang["search_results_returned_title"] = 'Title'; +$_lang["search_view_docdata"] = 'View this item'; +$_lang["security"] = 'Security'; +$_lang["security_notices_tab"] = 'Security Notices'; +$_lang["security_notices_title"] = 'Security Notices'; +$_lang["select_date"] = 'Select a date'; +$_lang["send"] = 'Send'; +$_lang["server_protocol_http"] = 'http'; +$_lang["server_protocol_https"] = 'https'; +$_lang["server_protocol_message"] = 'If your site is on a https connection, please specify so here.'; +$_lang["server_protocol_title"] = 'Server type'; +$_lang["serveroffset"] = 'Server offset'; +$_lang["serveroffset_message"] = 'Select the number of hours time difference between where you are and where the server is. Current time on server is [%s], current time on server using the currently saved offset is [%s].'; +$_lang["serveroffset_title"] = 'Server offset time'; +$_lang["servertime"] = 'Server Time'; +$_lang["set_automatic"] = 'Set automatic'; +$_lang["set_default"] = 'Set default'; +$_lang["set_default_all"] = 'Set defaults'; +$_lang["settings_after_install"] = 'As this is a new install, you are required to control these settings, and change any that you may wish to. After you\'ve controlled the settings, press \'Save\' to update the settings database.'; +$_lang["settings_config"] = 'Configuration'; +$_lang["settings_dependencies"] = 'Dependencies'; +$_lang["settings_events"] = 'System Events'; +$_lang["settings_furls"] = 'Friendly URLs'; +$_lang["settings_general"] = 'General'; +$_lang["settings_group_tv_message"] = 'Choose if Template Variables should be grouped in sections or tabs (named by TV category) when editing a Resource'; +$_lang["settings_group_tv_options"] = 'No,Sections in General tab,Tabs in General tab,Sections in new tab,Tabs in new tab,New tabs'; +$_lang["settings_misc"] = 'File Manager'; +$_lang["settings_security"] = 'Security'; +$_lang["settings_KC"] = 'File Browser'; +$_lang["settings_page_settings"] = 'Settings'; +$_lang["settings_photo"] = 'Photo'; +$_lang["settings_properties"] = 'Properties'; +$_lang["settings_show_picker_message"] = 'Customize manager theme and save to localstorage'; +$_lang["settings_site"] = 'Site'; +$_lang["settings_strip_image_paths_message"] = 'If this is set to \'No\', EVO will write file browser src\'s (images, files, flash, etc.) as absolute URLs. Relative URLs are helpful should you wish to move your EVO install, e.g., from a staging site to a production site. If you have no idea what this means, it\'s best just to leave it set to \'Yes\'.'; +$_lang["settings_strip_image_paths_title"] = 'Rewrite browser paths?'; +$_lang["settings_templvars"] = 'Template Variables'; +$_lang["settings_title"] = 'System configuration'; +$_lang["settings_ui"] = 'Interface & Features'; +$_lang["settings_users"] = 'User'; +$_lang["show_meta"] = 'Show META Keywords tab'; +$_lang["show_meta_message"] = 'Show the deprecated META Keywords tab when editing Resources in the Manager.'; +$_lang["show_tree"] = 'Show Site Tree'; +$_lang["show_picker"] = 'Show Color Switcher'; +$_lang["showing"] = 'Showing'; +$_lang["signupemail_message"] = 'Set the email message sent to users when creating accounts including their username and password.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your users won\'t know their username or password!'; +$_lang["signupemail_title"] = 'Signup e-mail'; +$_lang["site"] = 'Site'; +$_lang["site_schedule"] = 'Schedule'; +$_lang["sitename_message"] = 'Enter the name of your site here.'; +$_lang["sitename_title"] = 'Site name'; +$_lang["sitestart_message"] = 'Enter the ID of the Resource you want to use as homepage here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; +$_lang["sitestart_title"] = 'Site start'; +$_lang["sitestatus_message"] = 'Select \'Online\' to publish your site on the web. If you select \'Offline\', your visitors will see the \'Site unavailable message\', and won\'t be able to browse the site.'; +$_lang["sitestatus_title"] = 'Site status'; +$_lang["siteunavailable_message"] = 'Message to show when the site is offline or if an error occurs. Note: This message will only be displayed if the Site unavailable page option is not set.'; +$_lang["siteunavailable_message_default"] = 'The site is currently unavailable.'; +$_lang["siteunavailable_page_message"] = 'Enter the ID of the Resource you want to use as an offline page here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; +$_lang["siteunavailable_page_title"] = 'Site unavailable page'; +$_lang["siteunavailable_title"] = 'Site unavailable message'; +$_lang["snippet"] = 'Snippet'; +$_lang["snippets"] = 'Snippets'; +$_lang["snippet_code"] = 'Snippet code (php)'; +$_lang["snippet_desc"] = 'Description'; +$_lang["snippet_execonsave"] = 'Execute Snippet after saving.'; +$_lang["snippet_management_msg"] = 'Choose the Snippet you wish to edit.'; +$_lang["snippet_msg"] = 'Add/edit Snippets. Remember, Snippets are \'raw\' PHP code, and if you expect the output of the Snippet to be shown at a certain point within the Template, you need to return a value from within the Snippet.'; +$_lang["snippet_name"] = 'Snippet name'; +$_lang["snippet_properties"] = 'Default Properties'; +$_lang["snippet_title"] = 'Create/edit Snippet'; +$_lang["sort_alphabetically"] = 'Sort alphabetically'; +$_lang["sort_asc"] = 'Ascending'; +$_lang["sort_desc"] = 'Descending'; +$_lang["sort_menuindex"] = 'Sort menu index'; +$_lang["sort_tree"] = 'Sort the Site Tree'; +$_lang['sort_updating'] = 'Updating ...'; +$_lang['sort_updated'] = 'Updated!'; +$_lang['sort_nochildren'] = 'Parent does not have any children'; +$_lang["sort_elements_msg"] = 'Drag to reorder the listed elements.'; +$_lang["source"] = 'Source'; +$_lang["stay"] = 'Continue editing'; +$_lang["stay_new"] = 'Add another'; +$_lang["submit"] = 'Submit'; +$_lang["sunday"] = 'Sunday'; +$_lang["sys_alert"] = 'System Alert'; +$_lang["sysinfo_activity_message"] = 'This list show which Resources have been recently edited by your users.'; +$_lang["sysinfo_userid"] = 'User'; +$_lang["system_email_signup"] = ' + +Hello [+uid+] + +Here are your login details for [+sname+] Content Manager: + +Username: [+uid+] +Password: [+pwd+] + +Once you log into the Content Manager ([+surl+]), you can change your password. + +Regards, +Site Administrator +'; +$_lang["system_email_webreminder"] = 'Hello [+uid+] + +To activate your new password click the following link: + +[+surl+] + +If successful you can use the following password to login: + +Password:[+pwd+] + +If you did not request this email then please ignore it. + +Regards, +Site Administrator'; +$_lang["system_email_websignup"] = 'Hello [+uid+] + +Here are your login details for [+sname+]: + +Username: [+uid+] +Password: [+pwd+] + +Once you log into [+sname+] ([+surl+]), you can change your password. + +Regards, +Site Administrator'; +$_lang["table_hoverinfo"] = 'Hover the mouse cursor over a table\'s name to see a short description of the table\'s function (not all tables have comments set).'; +$_lang["table_prefix"] = 'Table prefix'; +$_lang["tag"] = 'Tag'; +$_lang["template"] = 'Template'; +$_lang["templates"] = 'Templates'; +$_lang["template_assignedtv_tab"] = 'Assigned Template Variables'; +$_lang["template_code"] = 'Template code (html)'; +$_lang["template_desc"] = 'Description'; +$_lang["template_edit_tab"] = 'Edit Template'; +$_lang["template_management_msg"] = 'Choose which Template you wish to edit.'; +$_lang["template_msg"] = 'Create and edit Templates. Changed or new Templates won\'t be visible in your site\'s cached pages until the cache is emptied, however, you can use the preview function on a page to see the Template in action.'; +$_lang["template_name"] = 'Template name'; +$_lang["template_no_tv"] = 'No Template Variables have been assigned to this Template yet.'; +$_lang["template_notassigned_tv"] = 'These Template Variables are available for assigning.'; +$_lang["template_reset_all"] = 'Reset all pages to use Default Template'; +$_lang["template_reset_specific"] = 'Reset only \'%s\' pages'; +$_lang["template_selectable"] = 'Template selectable when creating or editing ressources.'; +$_lang["template_title"] = 'Create/edit Template'; +$_lang["template_tv_edit"] = 'Edit the TV sort order'; +$_lang["template_tv_edit_message"] = 'Drag to reorder the Template Variables for this template.'; +$_lang["template_tv_edit_title"] = 'Template Variable Sort Order'; +$_lang["template_tv_msg"] = 'The Template Variables assigned to this Template are listed below.'; +$_lang["thursday"] = 'Thursday'; +$_lang["tmplvar_access_msg"] = 'Select the Resource Groups that are allowed to modify the content or value of this Template Variable'; +$_lang["tmplvar_change_template_msg"] = 'Changing this Template will cause the page to reload the Template Variables, losing any unsaved changes.\n\n Are you sure you want to change this Template?'; +$_lang["tmplvar_inuse"] = 'The following Resource(s) are currently using this Template Variable. To continue with the delete operation click the Delete button otherwise click the Cancel button.'; +$_lang["tmplvar_tmpl_access"] = 'Template Access'; +$_lang["tmplvar_tmpl_access_msg"] = 'Select the Templates that are allowed to access/process this Template Variable'; +$_lang["tmplvar"] = 'Template Variable'; +$_lang["tmplvars"] = 'Template Variables'; +$_lang["tmplvars_binding_msg"] = 'This field supports data source bindings using the @ commands'; +$_lang["tmplvars_caption"] = 'Caption'; +$_lang["tmplvars_default"] = 'Default Value'; +$_lang["tmplvars_description"] = 'Description'; +$_lang["tmplvars_elements"] = 'Input Option Values'; +$_lang["tmplvars_inherited"] = 'Value inherited'; +$_lang["tmplvars_management_msg"] = 'Manage additional Template Variables for your Resources.'; +$_lang["tmplvars_msg"] = 'Add or edit Template Variables here. Template Variables must be assigned to Templates in order to access them from Snippets and Resources.'; +$_lang["tmplvars_name"] = 'Template Variable Name'; +$_lang["tmplvars_novars"] = 'No Template Variables found'; +$_lang["tmplvars_rank"] = 'Sort Order'; +$_lang["tmplvars_rank_edit_message"] = 'Drag to reorder the Template Variables.'; +$_lang["tmplvars_reset_params"] = 'Reset parameters'; +$_lang["tmplvars_title"] = 'Create/edit Template Variable'; +$_lang["tmplvars_type"] = 'Input Type'; +$_lang["tmplvars_widget"] = 'Widget'; +$_lang["tmplvars_widget_prop"] = 'Widget Properties'; +$_lang["to"] = 'to'; +$_lang["tools"] = 'Tools'; +$_lang["top_howmany_message"] = 'When viewing reports, how large should the \'Top ...\' lists be?'; +$_lang["top_howmany_title"] = 'Top how many'; +$_lang["total"] = 'total'; +$_lang["track_visitors_message"] = 'Check to show the child resources in the document tree'; +$_lang["track_visitors_title"] = 'Show child resources'; +$_lang["tree_page_click"] = 'Page Click Behavior'; +$_lang["tree_page_click_message"] = 'The default behavior when clicking on a page in the site tree.'; +$_lang["use_breadcrumbs"] = 'Show navigation'; +$_lang["use_breadcrumbs_message"] = 'Show the navigation when creating or editing Resource in the Manager'; +$_lang["tree_show_protected"] = 'Show protected pages'; +$_lang["tree_show_protected_message"] = 'When set to "No", Protected Resources (and all their child-Resources) do not appear in the Site Tree menu. "No" is the legacy setting for EVO.'; +$_lang["truncate_table"] = 'Click here to truncate this table'; +$_lang["tuesday"] = 'Tuesday'; +$_lang["tv"] = 'TV'; +$_lang["type"] = 'Type'; +$_lang["udperms_allowroot_message"] = 'Allow Users to create new Resources in the site root. '; +$_lang["udperms_allowroot_title"] = 'Allow root'; +$_lang["udperms_message"] = 'Control access to Resources via User Groups and Resource Groups.'; +$_lang["udperms_title"] = 'Use access permissions'; +$_lang["unable_set_link"] = 'Unable to set the link!'; +$_lang["unable_set_parent"] = 'Unable to set new parent!'; +$_lang["unauthorizedpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect Users to when requesting a secured/unauthorized Resource.'; +$_lang["unauthorizedpage_title"] = 'Unauthorized page'; +$_lang["unblock_message"] = 'This User will not be blocked after saving the User\'s data.'; +$_lang["undelete_resource"] = 'Undelete Resource'; +$_lang["unpublish_date"] = 'Unpublish Date'; +$_lang["unpublish_events"] = 'Un-publish Events'; +$_lang["unpublish_resource"] = 'Un-publish Resource'; +$_lang["untitled_resource"] = 'Untitled Resource'; +$_lang["untitled_weblink"] = 'Untitled Weblink'; +$_lang["update_params"] = 'Update parameter display'; +$_lang["update_settings_from_language"] = 'Replace current with:'; +$_lang["upload_maxsize_message"] = 'Enter the maximum file size that can be uploaded via the file manager. Upload file size must be entered in bytes. NOTE: Large files can take a very long time to upload!'; +$_lang["upload_maxsize_title"] = 'Maximum upload size'; +$_lang["uploadable_files_message"] = 'Enter a list of files that can be uploaded into \'assets/files/\' using the File Browser. Please enter the extensions for the filetypes, separated by commas.'; +$_lang["uploadable_files_title"] = 'Uploadable File Types'; +$_lang["uploadable_flash_message"] = 'Enter a list of files that can be uploaded into \'assets/flash/\' using the File Browser. Please enter the extensions for the flash types, separated by commas.'; +$_lang["uploadable_flash_title"] = 'Uploadable Flash Types'; +$_lang["uploadable_images_message"] = 'Enter a list of files that can be uploaded into \'assets/images/\' using the File Browser. Please enter the extensions for the image types, separated by commas.'; +$_lang["uploadable_images_title"] = 'Uploadable Image Types'; +$_lang["uploadable_media_message"] = 'Enter a list of files that can be uploaded into \'assets/media/\' using the File Browser. Please enter the extensions for the media types, separated by commas.'; +$_lang["uploadable_media_title"] = 'Uploadable Media Types'; +$_lang["use_alias_path_message"] = 'Enabling this option generates a virtual path to the Resource. E.g., if a Resource "child.html" is located in a Container Resource "parent", then the full URL alias path URL will be "/parent/child.html".'; +$_lang["use_alias_path_title"] = 'Use Friendly URL alias path'; +$_lang["use_editor_message"] = 'Enable editing with a Rich Text Editor (RTE). This setting applies to all Resources, but can be overridden in the User settings.'; +$_lang["use_editor_title"] = 'Enable editor'; +$_lang["use_global_tabs"] = 'Use global Tabs'; +$_lang["user"] = 'User'; +$_lang["user_block"] = 'Blocked'; +$_lang["user_blockedafter"] = 'Blocked After'; +$_lang["user_blockeduntil"] = 'Blocked Until'; +$_lang["user_changeddata"] = 'Your data has been changed. Please log in again.'; +$_lang["user_country"] = 'Country'; +$_lang["user_dob"] = 'Date of birth'; +$_lang["user_doesnt_exist"] = 'User does not exist'; +$_lang["user_edit_self_msg"] = 'You may need to log out and log in again after saving to fully update your information. New passwords will be sent to your e-mail address or shown onscreen.'; +$_lang["user_email"] = 'E-mail address'; +$_lang["user_failedlogincount"] = 'Failed logins'; +$_lang["user_fax"] = 'Fax'; +$_lang["user_female"] = 'Female'; +$_lang["user_full_name"] = 'Full name'; +$_lang["user_gender"] = 'Gender'; +$_lang["user_is_blocked"] = 'This User is blocked!'; +$_lang["user_logincount"] = 'Number of logins'; +$_lang["user_male"] = 'Male'; +$_lang["user_management_msg"] = 'Choose the Content Manager to edit. Content Manager Users are those Users who are allowed to log into the Content Manager'; +$_lang["user_management_title"] = 'Manager Users'; +$_lang["user_mobile"] = 'Mobile phone number'; +$_lang["user_phone"] = 'Phone number'; +$_lang["user_photo"] = 'User Photo'; +$_lang["user_photo_message"] = 'Enter the image url for the this User or use the insert button to selected or upload an image file on the server.'; +$_lang["user_prevlogin"] = 'Last login'; +$_lang["user_role"] = 'User\'s role'; +$_lang["user_state"] = 'State'; +$_lang["user_title"] = 'Create/Edit User'; +$_lang["user_upload_message"] = ' If you wish to stop this User uploading any filetypes in this category, make sure that the \'Use Main Configuration Setting\' checkbox is not ticked and leave the field blank.'; +$_lang["user_use_config"] = 'Use System Configuration Setting'; +$_lang["user_zip"] = 'Zip'; +$_lang["username"] = 'Username'; +$_lang["users"] = 'Security'; +$_lang["valid_hostnames_message"] = 'Help prevent XSS exploits misusing the site_url system setting by providing a comma separated list of valid hostnames for this installation. This is important for some types of shared hosts or hosts direct accessible via an IP address. First hostname in the list is used if the HTTP_HOST does not match any valid hostname.'; +$_lang["valid_hostnames_title"] = 'Valid hostnames'; +$_lang["validate_referer_message"] = 'Validate the HTTP_REFERER headers to reduce the risk of your content editors being tricked into performing unintended actions in the manager as victims of a CSRF (Cross Site Request Forgery) attack. Some configurations may not be able to use this option if the server is not sending HTTP_REFERER headers.'; +$_lang["validate_referer_title"] = 'Validate HTTP_REFERER headers?'; +$_lang["value"] = 'Value'; +$_lang["version"] = 'Version'; +$_lang["view"] = 'View'; +$_lang["view_child_resources_in_container"] = 'View children'; +$_lang["view_log"] = 'View log'; +$_lang["view_logging"] = 'Manager Actions'; +$_lang["view_sysinfo"] = 'System Info'; +$_lang["warning"] = 'Warning!'; +$_lang["warning_not_saved"] = 'The changes you have made have not been saved yet. You can choose to stay on the current page in order to save the changes (\'Cancel\'), or you can leave this page, losing any changes you have made (\'OK\').'; +$_lang["warning_visibility"] = 'Configuration Warnings visible to'; +$_lang["warning_visibility_message"] = 'Control the visibility of the configuration warnings shown on the Manager welcome page'; +$_lang["web_access_permissions"] = 'Web access permissions'; +$_lang["web_access_permissions_user_groups"] = 'Web User groups'; +$_lang["web_permissions"] = 'Web Permissions'; +$_lang["web_user_management_msg"] = 'Choose the web User you wish to edit. Web Users are those Users who are only allowed to log into the web site'; +$_lang["web_user_management_title"] = 'Web Users'; +$_lang["web_user_title"] = 'Create/edit Web User'; +$_lang["web_users"] = 'Web Users'; +$_lang["weblink"] = 'Weblink'; +$_lang["webpwdreminder_message"] = 'Enter a message to be sent to your Web Users whenever they request a new password via email. The Content Manager will send an e-mail containing their new password and activation information.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; +$_lang["webpwdreminder_title"] = 'Web Reminder Email'; +$_lang["websignupemail_message"] = 'Set the email message sent to Users when creating accounts including their username and password
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; +$_lang["websignupemail_title"] = 'Web Signup e-mail'; +$_lang["wednesday"] = 'Wednesday'; +$_lang["welcome_messages"] = 'Your Inbox contains %d message(s), of which %s are unread.'; +$_lang["welcome_title"] = 'Welcome to your EVO Content Manager'; +$_lang["which_editor_message"] = 'Select the rich text editor (RTE). You can download and install additional RTEs from the EVO download page.'; +$_lang["which_editor_title"] = 'Editor to use'; +$_lang["working"] = 'Working...'; +$_lang["wrap_lines"] = 'Wrap lines'; +$_lang["xhtml_urls_message"] = 'Replaces ampersand (&) characters in urls that are generated by EVO with the validating &amp; htmlentity'; +$_lang["xhtml_urls_title"] = 'XHTML URLs'; +$_lang["yes"] = 'Yes'; +$_lang["you_got_mail"] = 'You got mail'; +$_lang["yourinfo_message"] = 'This section shows some information about you:'; +$_lang["yourinfo_previous_login"] = 'Your last login:'; +$_lang["yourinfo_role"] = 'Your role is:'; +$_lang["yourinfo_title"] = 'Your info'; +$_lang["yourinfo_total_logins"] = 'Total number of logins:'; +$_lang["yourinfo_username"] = 'You are logged in as:'; + +$_lang["a17_error_reporting_title"] = 'Detection level of PHP errors'; +$_lang["a17_error_reporting_msg"] = 'Set the detection level of the PHP errors.'; +$_lang["a17_error_reporting_opt0"] = 'Ignore all'; +$_lang["a17_error_reporting_opt1"] = 'Ignore warnings of a slight notice level (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; +$_lang["a17_error_reporting_opt2"] = 'Detect all errors except E_NOTICE'; +$_lang["a17_error_reporting_opt99"] = 'Detect all'; + +$_lang["pwd_hash_algo_title"] = 'Hash algorithm'; +$_lang["pwd_hash_algo_message"] = 'Password hash algorithm.'; + +$_lang["enable_bindings_title"] = 'Enable @Bindings commands'; +$_lang["enable_bindings_message"] = 'Prevents the execution of PHP functions through TV @Bindings. Useful if you have Manager users who should not be able to create PHP code but need to be able to create or edit TVs. The output of any TV with an @Binding will be "@Bindings disabled".'; +$_lang["enable_filter_title"] = 'Enable filters'; +$_lang["enable_filter_message"] = 'Filters allow you to manipulate the way data is presented or parsed in a tag. They allow you to modify values from inside your templates. This is analogous to PHx. More info'; // todo: change link to documentation +$_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; + +$_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; + +$_lang["enable_at_syntax_title"] = 'Enable <@SYNTAX>'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) is simple and lightweight template syntax. This is designed to consider coexistence with HTML tags and content strings.'; + +$_lang["bkmgr_alert_mkdir"] = 'A file cannot be created in a directory. Please check the permission of [+snapshot_path+]'; +$_lang["bkmgr_restore_msg"] = '

          Database tables could be restored by SQL:

          '; +$_lang["bkmgr_restore_title"] = 'Restore'; +$_lang["bkmgr_import_ok"] = 'SQL recovery was performed normally.'; +$_lang["bkmgr_snapshot_ok"] = 'The snapshot was saved normally.'; +$_lang["bkmgr_run_sql_file_label"] = 'Execute by SQL file'; +$_lang["bkmgr_run_sql_direct_label"] = 'Direct execute SQL commands'; +$_lang["bkmgr_run_sql_submit"] = 'Execute restore'; +$_lang["bkmgr_run_sql_result"] = 'Result'; +$_lang["bkmgr_snapshot_title"] = 'Snapshot save and recovery'; +$_lang["bkmgr_snapshot_msg"] = '

          The contents of the database are saved in and restored from a server directory.
          Location: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; +$_lang["bkmgr_snapshot_submit"] = 'Add Snapshot'; +$_lang["bkmgr_snapshot_list_title"] = 'List of snapshots'; +$_lang["bkmgr_restore_submit"] = 'Revert this data'; +$_lang["bkmgr_restore_confirm"] = 'Are you sure you want to revert backup\n[+filename+] ?'; +$_lang["bkmgr_snapshot_nothing"] = 'No snapshots available'; + +$_lang["files.dynamic.php1"] = 'New Text File'; +$_lang["files.dynamic.php2"] = 'This directory cannot be displayed.'; +$_lang["files.dynamic.php3"] = 'There is a problem in a file name.'; +$_lang["files.dynamic.php4"] = 'The text file was created.'; +$_lang["files.dynamic.php5"] = 'File could not be duplicated.'; +$_lang["files.dynamic.php6"] = 'File or directory could not be renamed.'; +$_lang["files_dynamic_new_folder_name"] = 'Enter new directory name:'; +$_lang["files_dynamic_new_file_name"] = 'Enter new file name:'; +$_lang["not_readable_dir"] = 'Can not read this directory.'; +$_lang["confirm_delete_dir"] = 'Are you sure you want to delete the directory?'; +$_lang["confirm_delete_dir_recursive"] = 'Are you sure you want to delete this directory?\n\nAll files inside this directory will also be deleted.'; + +$_lang["make_folders_title"] = 'End Container URL with Slash'; +$_lang["make_folders_message"] = 'Append trailing slash to Resources that are set as containers when using Friendly URLs.'; + +$_lang["check_files_onlogin_title"] = 'Check core files on login'; +$_lang["check_files_onlogin_message"] = 'By enabling this option, important system files will be checked for modification typical of scripted website attacks. While not a foolproof guarantee, it may alert you to a compromised EVO system file and website.'; + +$_lang["configcheck_sysfiles_mod"] = 'Important System Files have been modified.'; +$_lang["configcheck_sysfiles_mod_msg"] = 'You have configured EVO to check important system files for possible website script attacks. This warning does not necessarily mean your site has been compromised, however, you should review the watched files in your installation (set in System configuration -> User -> Check core files on login). If you find your files unaltered or changes were made by site administrators, go to System Configuration and click to re-save settings to dismiss this message. Changes in the following files have been found:'; + +$_lang['email_method_title'] = 'Sendmail method'; +$_lang['email_method_mail'] = 'PHP mail() function'; +$_lang['email_method_smtp'] = 'SMTP Server'; +$_lang['smtp_auth_title'] = 'SMTP-AUTH'; +$_lang['smtp_host_title'] = 'SMTP host'; +$_lang['smtp_secure_title'] = 'Encrypted SMTP'; +$_lang['smtp_username_title'] = 'SMTP user name'; +$_lang['smtp_password_title'] = 'SMTP password'; +$_lang['smtp_port_title'] = 'SMTP port'; + +$_lang["setting_resource_tree_node_name"] = 'Display Name in Resource Tree'; +$_lang["setting_resource_tree_node_name_desc"] = 'Select the Resource field to show as the Resource name in the Resource Tree. The default setting is pagetitle.'; +$_lang["setting_resource_tree_node_name_desc_add"] = 'Note: Since EVO 1.1 you can change this Display Name within Resource-Tree´s sorting option. This setting is used when Display Name in Resource Tree is set to "Default".'; + +$_lang["resource_opt_alvisibled"] = 'Use current alias in alias path'; +$_lang["resource_opt_alvisibled_help"] = 'The alias of this Resource is inserted in Friendly URL alias path'; +$_lang['resource_opt_is_published'] = 'Published'; +$_lang["docid_incrmnt_method_title"] = 'Increment Resource ID method'; +$_lang["docid_incrmnt_method_0"] = 'DB auto increment'; +$_lang["docid_incrmnt_method_1"] = 'Minimum missed ID'; +$_lang["docid_incrmnt_method_2"] = 'Maximal ID + 1'; + +$_lang["enable_cache_title"] = 'Document caching'; +$_lang["disabled_at_login"] = 'Disabled at login'; + +$_lang["cache_type_title"] = 'Document caching type'; +$_lang["cache_type_1"] = 'Cache is based only on Resource ID (standard)'; +$_lang["cache_type_2"] = 'Cache is based on Resource ID and $_GET parameters'; +$_lang["seostrict_title"] = 'Use SEO Strict URLs'; +$_lang["seostrict_message"] = 'Enforces the use of strict URLs to prevent duplicate content (if needed)'; +$_lang["aliaslistingfolder_title"] = 'Use AliasListing only for Folders'; +$_lang["aliaslistingfolder_message"] = 'Reduces memory consumption when a large number of resources'; + +$_lang["settings_friendlyurls_alert"] = 'It is necessary to rename the ht.access file in the EVO installation directory at .htaccess to use the Friendly URL function.'; +$_lang["settings_friendlyurls_alert2"] = 'Since EVO was installed in a subdirectory, it is necessary to change the content of .htaccess.'; + +$_lang["user_street"] = 'Street'; +$_lang["user_city"] = 'City'; +$_lang["user_other"] = 'Other'; + +$_lang["import_site.static.php1"] = 'Reset resource tree'; +$_lang["import_site.static.php2"] = 'Reset resource tree and initialize all Resource IDs.'; +$_lang["import_site.static.php3"] = 'Target'; +$_lang["import_site.static.php4"] = 'Only <body></body> part'; +$_lang["import_site.static.php5"] = 'Whole file content'; + +$_lang["a83_ignore_ids_title"] = 'Ignore IDs (comma separated)'; +$_lang["export_site.static.php1"] = 'Target'; +$_lang["export_site.static.php2"] = 'Only edited Resources'; +$_lang["export_site.static.php3"] = 'All Resources'; +$_lang["export_site.static.php4"] = 'Search for'; +$_lang["export_site.static.php5"] = 'Replace with'; +$_lang["export_site.static.php6"] = 'Target'; +$_lang["export_site.static.php7"] = 'Files could not be saved to [+rb_base_url+]'; + +$_lang["mutate_settings.dynamic.php6"] = 'Send mail on EVO errors'; +$_lang["mutate_settings.dynamic.php7"] = 'not notify'; +$_lang["mutate_settings.dynamic.php8"] = 'A mail with the error source will be sent to [(emailsender)] ([+emailsender+]) if a EVO error occurs. The details of the error could be seen in the EVO system events log.'; + +$_lang["error_no_privileges"] = "You don't have enough privileges for this action!"; +$_lang["error_no_optimise_tablename"] = "Table to optimise not found in request!"; +$_lang["error_no_truncate_tablename"] = "Table to truncate not found in request!"; +$_lang["error_double_action"] = "Double action (GET & POST) posted!"; +$_lang["error_no_id"] = "ID not passed in request!"; +$_lang["error_id_nan"] = "ID passed in request is NaN!"; +$_lang["error_no_parent"] = "Couldn't find parent document's name!"; +$_lang["error_many_results"] = "Too many results returned from database!"; +$_lang["error_no_results"] = "Not enough/ no results returned from database!"; +$_lang["error_no_user_selected"] = "No user selected as recipient of this message!"; +$_lang["error_no_group_selected"] = "No group selected as recipient of this message!"; +$_lang["error_movedocument1"] = "Document cannot be it's own parent!"; +$_lang["error_movedocument2"] = "Document's ID not passed in request!"; +$_lang["error_movedocument3"] = "New parent not set in request!"; +$_lang["error_internet_connection"] = "Server isn't available. Check your internet connection!"; + +$_lang["login_processor_unknown_user"] = "Incorrect username or password entered!"; +$_lang["login_processor_wrong_password"] = "Incorrect username or password entered!"; +$_lang["login_processor_many_failed_logins"] = "Due to too many failed logins, you have been blocked!"; +$_lang["login_processor_blocked1"] = "You are blocked and cannot log in!"; +$_lang["login_processor_blocked2"] = "You are blocked and cannot log in! Please try again later."; +$_lang["login_processor_blocked3"] = "You are blocked automatic after a specified date and you cannot log in anymore!"; +$_lang["login_processor_bad_code"] = "The security code you entered didn't validate! Please try to login again!"; +$_lang["login_processor_remotehost_ip"] = "Your hostname doesn't point back to your IP!"; +$_lang["login_processor_remote_ip"] = "You are not allowed to login from this location."; +$_lang["login_processor_date"] = "You are not allowed to login at this time. Please try again later."; +$_lang["login_processor_captcha_config"] = "Captcha is not configured properly."; + +$_lang["dp_dayNames"] = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']"; +$_lang["dp_monthNames"] = "['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']"; +$_lang["dp_startDay"] = "1"; + +$_lang["check_all"] = "Select all"; +$_lang["check_none"] = "Select none"; +$_lang["check_toggle"] = "Toggle selection"; + +$_lang["version_notices"] = "Version Notices"; + +$_lang["em_button_shift"] = " (Shift-Mouseclick to open multiple windows)"; + +$_lang["reset_sysfiles_checksum_button"] = "Rebuild Checksums"; +$_lang["reset_sysfiles_checksum_alert"] = "Are you sure you want to reset the system files checksums?"; + +$_lang["file_browser_disabled_msg"] = "The File Browser Feature is not enabled."; +$_lang["which_browser_default_title"]= "Default File Browser"; +$_lang["which_browser_default_msg"]= "Choose the File Browser you prefer as default. In User-Settings you can choose a Custom Browser per User, or leave it on "default"."; +$_lang["which_browser_title"]= "File Browser"; +$_lang["which_browser_msg"]= "You can choose a custom File Browser for this user. To use the System´s default Browser, leave it on "Default"."; +$_lang["option_default"] = "Default"; +$_lang["position"] = "Position"; +$_lang["are_you_sure"] = "Are you sure?"; + +$_lang['evo_downloads_title'] = "Evolution Downloads"; +$_lang['help_translating_title'] = "Help translating Evolution"; +$_lang['download'] = "Download"; +$_lang['downloads'] = "Downloads"; +$_lang["previous_releases"] = "Previous Releases"; +$_lang["extras"] = "Extras"; + +$_lang["display_locks"] = "Display Locks"; +$_lang["role_display_locks"] = "Display Locks"; +$_lang["session_timeout"] = "Session Timeout"; +$_lang["session_timeout_msg"] = "EVO will ping the server as per setting "Mail Check Time Period". If the last ping exceeds this setting, the associated session will be considered invalid and all related locks will be removed automatically. Set value in minutes (>2min, default 15min)."; +$_lang["unlock_element_id_warning"] = "Are you sure you want to unlock this [+element_type+] (ID [+id+])?"; +$_lang["lock_element_type_1"] = "Template"; +$_lang["lock_element_type_2"] = "Template-Variable"; +$_lang["lock_element_type_3"] = "Chunk"; +$_lang["lock_element_type_4"] = "Snippet"; +$_lang["lock_element_type_5"] = "Plugin"; +$_lang["lock_element_type_6"] = "Module"; +$_lang["lock_element_type_7"] = "Resource"; +$_lang["lock_element_type_8"] = "Role"; +$_lang["lock_element_editing"] = "You are editing this [+element_type+] since\n[+lasthit_df+]"; +$_lang["lock_element_locked_by"] = "This [+element_type+] is locked by user\n[+username+] since [+lasthit_df+]"; + +$_lang["minifyphp_incache_title"] = 'Minify php code in site cache'; +$_lang["minifyphp_incache_message"] = 'Minify php code (snippets and plugins) and store in the site cache file, ref:#938'; + +$_lang["logout_reminder_msg"] = "Reminder: It seems on [+date+] you forgot to logout. Please pay attention in future to do so after your work is finished."; + +$_lang["allow_eval_title"] = "Eval php code in snippet call"; +$_lang["allow_eval_msg"] = "For developer : Please use \$modx->safeEval()."; +$_lang["allow_eval_with_scan"] = "Execute only permitted functions"; +$_lang["allow_eval_with_scan_at_post"] = "Execute all. However, at POST, only permitted functions"; +$_lang["allow_eval_everytime_eval"] = "Unlimited (Use only for debugging)"; +$_lang["allow_eval_dont_eval"] = "Do not allow all functions"; + +$_lang["safe_functions_at_eval_title"] = "Functions to allow eval"; +$_lang["safe_functions_at_eval_msg"] = "Comma separated list"; + +$_lang["multiple_sessions_msg"] = "Information: Multiple active user sessions (total [+total+]) found for user [+username+]."; +$_lang["iconv_not_available"] = "It is important to install/enable extension iconv. Please speak to your host if you don´t know how to enable it."; + +$_lang["cm_create_new_category"] = "Create the new category"; +$_lang["cm_category_name"] = "Category name"; +$_lang["cm_category_position"] = "Category position"; +$_lang["cm_no_x_assigned"] = "No %s assigned"; +$_lang["cm_save_categorization"] = "Save categorization"; +$_lang["cm_update_categories"] = "Update categories"; +$_lang["cm_assigned_elements"] = "Assigned elements"; +$_lang["cm_edit_name"] = "Edit name"; +$_lang["cm_mark_for_deletion"] = "Mark for deletion"; +$_lang["cm_delete_now"] = "Delete immediately"; +$_lang["cm_delete_element_x_now"] = "Delete "%s" immediately"; +$_lang["cm_select_element_group"] = "Select an element group"; +$_lang["cm_global_messages"] = "Global Messages"; +$_lang["cm_add_new_category"] = "Add a new category"; +$_lang["cm_edit_categories"] = "Edit categories"; +$_lang["cm_sort_categories"] = "Sort categories"; +$_lang["cm_categorize_elements"] = "Categorize elements"; +$_lang["cm_translation"] = "Translation"; +$_lang["cm_translations"] = "Translations"; +$_lang["cm_categorize_x"] = "Categorize %s"; +$_lang["cm_unknown_error"] = "Something went wrong."; +$_lang["cm_x_assigned_to_category_y"] = "%s(%s) has been assigned to category %s(%s)"; +$_lang["cm_no_categorization"] = "No categorization made."; +$_lang["cm_no_changes"] = "Nothing to change, so no changes made."; +$_lang["cm_x_changes_made"] = "%s changes made"; +$_lang["cm_enter_name_for_category"] = "Please enter a name for the new category."; +$_lang["cm_category_x_exists"] = "Category %s already exists."; +$_lang["cm_category_x_saved_at_position_y"] = "The new category %s was saved at position %s."; +$_lang["cm_category_x_moved_to_position_y"] = "Category %s was moved to position %s"; +$_lang["cm_category_x_deleted"] = "Category %s has been deleted"; +$_lang["cm_category_x_renamed_to_y"] = "Category %s was renamed to %s"; +$_lang["cm_translation_for_x_empty"] = "Translation for %s was empty"; +$_lang["cm_translation_for_x_to_y_success"] = "Translation for %s to %s successfully saved"; +$_lang["cm_save_new_sorting"] = "Save new sorting"; +$_lang["cm_translate_phrases"] = "Translate phrases"; +$_lang["cm_translate_module_phrases"] = "Translate module-phrases"; +$_lang["cm_native_phrase"] = "Native phrase"; + +$_lang["btn_view_options"] = 'View Options'; +$_lang["view_options_msg"] = 'The display & listing of elements can be customized via "View Options"-button. Settings are saved and restored per Browser using HTML5´s localStorage.'; +$_lang["viewopts_title"] = 'View Options'; +$_lang["viewopts_cb_buttons"] = 'Buttons'; +$_lang["viewopts_cb_descriptions"] = 'Descriptions'; +$_lang["viewopts_cb_icons"] = 'Icons'; +$_lang["viewopts_radio_list"] = 'List'; +$_lang["viewopts_radio_inline"] = 'Inline'; +$_lang["viewopts_radio_flex"] = 'Flex'; +$_lang["viewopts_fontsize"] = 'Font-Size'; +$_lang["viewopts_cb_alltabs"] = 'All Tabs'; From 9804e8e358e3689f839b901e61b4fbc56064370d Mon Sep 17 00:00:00 2001 From: Deesen Date: Tue, 17 Oct 2017 14:53:41 +0200 Subject: [PATCH 292/577] [F] #277 Fatal error when trying to install Evo on PHP <= v5.4 --- manager/includes/document.parser.class.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index d10e09a455..16608e1f6e 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1678,7 +1678,8 @@ private function _parseCTagCMD($cmd) } } if (!preg_match('@^[0-9]+$@', $cmd)) { - $cmd = empty(trim($cmd)) ? 0 : 1; + $cmd = trim($cmd); // Issue #277 + $cmd = empty($cmd) ? 0 : 1; } elseif ($cmd <= 0) { $cmd = 0; } From e96440f88a64bbce83c3bff805fe2c8feeeade3c Mon Sep 17 00:00:00 2001 From: Deesen Date: Wed, 18 Oct 2017 09:39:04 +0200 Subject: [PATCH 293/577] [I] Datepicker: Allow custom dateFormat via attribute data-format --- manager/media/calendar/datepicker.tpl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/media/calendar/datepicker.tpl b/manager/media/calendar/datepicker.tpl index b71f0ae9c4..34a2ba45d7 100644 --- a/manager/media/calendar/datepicker.tpl +++ b/manager/media/calendar/datepicker.tpl @@ -8,9 +8,10 @@ var DatePickers = document.querySelectorAll('input.DatePicker'); if(DatePickers) { for(var i = 0; i < DatePickers.length; i++) { + let format = DatePickers[i].getAttribute("data-format"); new DatePicker(DatePickers[i], { yearOffset: dpOffset, - format: dpformat, + format: format !== null ? format : dpformat, dayNames: dpdayNames, monthNames: dpmonthNames, startDay: dpstartDay From 62c956393faf08191a0ab810bbdc6286ca32b20b Mon Sep 17 00:00:00 2001 From: Nicola Date: Sun, 22 Oct 2017 18:46:06 +0200 Subject: [PATCH 294/577] #294 New Resource button --- manager/frames/1.php | 55 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/manager/frames/1.php b/manager/frames/1.php index 03363e7fe3..b2af32b173 100644 --- a/manager/frames/1.php +++ b/manager/frames/1.php @@ -239,6 +239,25 @@
          + config['show_newresource_btn'] != "0") { ?> + hasPermission('new_document')) { ?> + + +
        • @@ -326,6 +345,13 @@ ?>
        + config['show_fullscreen_btn'] != "0") { ?> +
      • + + + +
      • +
      @@ -512,7 +538,34 @@ function constructLink($action, $img, $text, $allowed) } - + config['show_fullscreen_btn'] != "0") { ?> + + invokeEvent('OnManagerFrameLoader', array('action' => $action)); From 6681a8113ea182062a618b7100fa847ab65b35bc Mon Sep 17 00:00:00 2001 From: Nicola Date: Sun, 22 Oct 2017 18:46:42 +0200 Subject: [PATCH 295/577] #294 New Resource button --- .../tab4_manager_settings.inc.php | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/manager/actions/mutate_settings/tab4_manager_settings.inc.php b/manager/actions/mutate_settings/tab4_manager_settings.inc.php index c8eb0baabc..64d22b9ccb 100644 --- a/manager/actions/mutate_settings/tab4_manager_settings.inc.php +++ b/manager/actions/mutate_settings/tab4_manager_settings.inc.php @@ -95,7 +95,7 @@
      - +
      [(warning_visibility)] @@ -230,6 +230,48 @@
      + +
      + [(show_newresource_btn)] + + + +
      + + + + +   + + + + +
      + + + +
      + [(show_fullscreen_btn)] + + + +
      + + + + +   + + + + +
      + +
      [(resource_tree_node_name)] From ca0f0bba5909fa423ffd3d5854b9cf9fed936c39 Mon Sep 17 00:00:00 2001 From: Nicola Date: Sun, 22 Oct 2017 18:47:13 +0200 Subject: [PATCH 296/577] #294 New Resource button --- install/setup.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install/setup.sql b/install/setup.sql index 3b2587c40c..61a1775ca1 100755 --- a/install/setup.sql +++ b/install/setup.sql @@ -950,7 +950,9 @@ INSERT IGNORE INTO `{PREFIX}system_settings` ('seostrict', '1'), ('number_of_results','30'), ('theme_refresher',''), -('show_picker', '0'); +('show_picker', '0'), +('show_newresource_btn', '0'), +('show_fullscreen_btn', '0'); REPLACE INTO `{PREFIX}user_roles` (id,name,description,frames,home,view_document,new_document,save_document,publish_document,delete_document,empty_trash,action_ok,logout,help,messages,new_user,edit_user,logs,edit_parser,save_parser,edit_template,settings,credits,new_template,save_template,delete_template,edit_snippet,new_snippet,save_snippet,delete_snippet,edit_chunk,new_chunk,save_chunk,delete_chunk,empty_cache,edit_document,change_password,error_dialog,about,file_manager,save_user,delete_user,save_password,edit_role,save_role,delete_role,new_role,access_permissions,bk_manager,new_plugin,edit_plugin,save_plugin,delete_plugin,new_module,edit_module,save_module,exec_module,delete_module,view_eventlog,delete_eventlog,new_web_user,edit_web_user,save_web_user,delete_web_user,web_access_permissions,view_unpublished,import_static,export_static,remove_locks,assets_images,assets_files,change_resourcetype,display_locks,category_manager) VALUES From 3a8b64082cdfc7748f510c63bad14fb1111ab419 Mon Sep 17 00:00:00 2001 From: Nicola Date: Sun, 22 Oct 2017 18:47:43 +0200 Subject: [PATCH 297/577] #294 New Resource button --- manager/includes/lang/english.inc.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/manager/includes/lang/english.inc.php b/manager/includes/lang/english.inc.php index 594b666654..5a3861c53f 100644 --- a/manager/includes/lang/english.inc.php +++ b/manager/includes/lang/english.inc.php @@ -943,7 +943,11 @@ $_lang["settings_page_settings"] = 'Settings'; $_lang["settings_photo"] = 'Photo'; $_lang["settings_properties"] = 'Properties'; +$_lang["show_fullscreen_btn_message"] = 'Show Menu toggle Fullscreen button'; +$_lang["show_newresource_btn_message"] = 'Show Menu New Resource button'; $_lang["settings_show_picker_message"] = 'Customize manager theme and save to localstorage'; +$_lang["show_fullscreen_btn"] = 'Toggle Fullscreen button'; +$_lang["show_newresource_btn"] = 'New Resource button'; $_lang["settings_site"] = 'Site'; $_lang["settings_strip_image_paths_message"] = 'If this is set to \'No\', EVO will write file browser src\'s (images, files, flash, etc.) as absolute URLs. Relative URLs are helpful should you wish to move your EVO install, e.g., from a staging site to a production site. If you have no idea what this means, it\'s best just to leave it set to \'Yes\'.'; $_lang["settings_strip_image_paths_title"] = 'Rewrite browser paths?'; @@ -1000,7 +1004,7 @@ $_lang["sysinfo_userid"] = 'User'; $_lang["system_email_signup"] = ' -Hello [+uid+] +Hello [+uid+] Here are your login details for [+sname+] Content Manager: @@ -1224,7 +1228,7 @@ $_lang["enable_bindings_title"] = 'Enable @Bindings commands'; $_lang["enable_bindings_message"] = 'Prevents the execution of PHP functions through TV @Bindings. Useful if you have Manager users who should not be able to create PHP code but need to be able to create or edit TVs. The output of any TV with an @Binding will be "@Bindings disabled".'; $_lang["enable_filter_title"] = 'Enable filters'; -$_lang["enable_filter_message"] = 'Filters allow you to manipulate the way data is presented or parsed in a tag. They allow you to modify values from inside your templates. This is analogous to PHx. More info'; // todo: change link to documentation +$_lang["enable_filter_message"] = 'Filters allow you to manipulate the way data is presented or parsed in a tag. They allow you to modify values from inside your templates. This is analogous to PHx. More info'; // todo: change link to documentation $_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; $_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; From b6a0c6af5c6256a4d576a23d082be391f57fc8c2 Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 23 Oct 2017 12:42:16 +0200 Subject: [PATCH 298/577] #299 Fix default jQuery settings in Quick Manager - 'Load jQuery in front-end' : false - 'jQuery noConflict mode in front-end' : false --- install/assets/plugins/qm.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/assets/plugins/qm.tpl b/install/assets/plugins/qm.tpl index 9cc22cb7e3..c4edb544b6 100644 --- a/install/assets/plugins/qm.tpl +++ b/install/assets/plugins/qm.tpl @@ -7,7 +7,7 @@ * @category plugin * @version 1.5.9 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL v3) - * @internal @properties &jqpath=Path to jQuery;text;assets/js/jquery.min.js &loadmanagerjq=Load jQuery in manager;list;true,false;false &loadfrontendjq=Load jQuery in front-end;list;true,false;true &noconflictjq=jQuery noConflict mode in front-end;list;true,false;true &loadfa=Load Font Awesome css in front-end;list;true,false;true &loadtb=Load modal box in front-end;list;true,false;true &tbwidth=Modal box window width;text;80% &tbheight=Modal box window height;text;90% &hidefields=Hide document fields from front-end editors;text;parent &hidetabs=Hide document tabs from front-end editors;text; &hidesections=Hide document sections from front-end editors;text; &addbutton=Show add document here button;list;true,false;true &tpltype=New document template type;list;parent,id,selected;parent &tplid=New document template id;int;3 &custombutton=Custom buttons;textarea; &managerbutton=Show go to manager button;list;true,false;true &logout=Logout to;list;manager,front-end;manager &disabled=Plugin disabled on documents;text; &autohide=Autohide toolbar;list;true,false;true &position= Toolbar position;list;top,right,bottom,left,before;top &editbuttons=Inline edit buttons;list;true,false;false &editbclass=Edit button CSS class;text;qm-edit &newbuttons=Inline new resource buttons;list;true,false;false &newbclass=New resource button CSS class;text;qm-new &tvbuttons=Inline template variable buttons;list;true,false;false &tvbclass=Template variable button CSS class;text;qm-tv &removeBg=Remove toolbar background;list;yes,no;no &buttonStyle=QuickManager buttons CSS stylesheet;list;actionButtons,navButtons;navButtons + * @internal @properties &jqpath=Path to jQuery;text;assets/js/jquery.min.js &loadmanagerjq=Load jQuery in manager;list;true,false;false &loadfrontendjq=Load jQuery in front-end;list;true,false;false &noconflictjq=jQuery noConflict mode in front-end;list;true,false;false &loadfa=Load Font Awesome css in front-end;list;true,false;true &loadtb=Load modal box in front-end;list;true,false;true &tbwidth=Modal box window width;text;80% &tbheight=Modal box window height;text;90% &hidefields=Hide document fields from front-end editors;text;parent &hidetabs=Hide document tabs from front-end editors;text; &hidesections=Hide document sections from front-end editors;text; &addbutton=Show add document here button;list;true,false;true &tpltype=New document template type;list;parent,id,selected;parent &tplid=New document template id;int;3 &custombutton=Custom buttons;textarea; &managerbutton=Show go to manager button;list;true,false;true &logout=Logout to;list;manager,front-end;manager &disabled=Plugin disabled on documents;text; &autohide=Autohide toolbar;list;true,false;true &position= Toolbar position;list;top,right,bottom,left,before;top &editbuttons=Inline edit buttons;list;true,false;false &editbclass=Edit button CSS class;text;qm-edit &newbuttons=Inline new resource buttons;list;true,false;false &newbclass=New resource button CSS class;text;qm-new &tvbuttons=Inline template variable buttons;list;true,false;false &tvbclass=Template variable button CSS class;text;qm-tv &removeBg=Remove toolbar background;list;yes,no;no &buttonStyle=QuickManager buttons CSS stylesheet;list;actionButtons,navButtons;navButtons * @internal @events OnParseDocument,OnWebPagePrerender,OnDocFormPrerender,OnDocFormSave,OnManagerLogout * @internal @modx_category Manager and Admin * @internal @legacy_names QM+,QuickEdit From 03cf14a15aaf1536079320570725b920fd859c6a Mon Sep 17 00:00:00 2001 From: Deesen Date: Wed, 25 Oct 2017 09:38:44 +0200 Subject: [PATCH 299/577] [I] Allow {{chunk?¶m=`xxx`}} with [*tv_name_[+param+]*] as content --- manager/includes/document.parser.class.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 16608e1f6e..b22ac05062 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1201,6 +1201,7 @@ function mergeDocumentContent($content, $ph = false) } foreach ($matches[1] as $i => $key) { + if(strpos($key,'[+')!==false) continue; // Allow chunk {{chunk?¶m=`xxx`}} with [*tv_name_[+param+]*] as content if (substr($key, 0, 1) == '#') { $key = substr($key, 1); } // remove # for QuickEdit format From f96528c2eaa0582f3d92061da2205ae8cd7b4e07 Mon Sep 17 00:00:00 2001 From: Deesen Date: Wed, 25 Oct 2017 09:42:31 +0200 Subject: [PATCH 300/577] [F] Show button images in vertical-mode Screenshot: https://user-images.githubusercontent.com/8569221/31986364-7e863fb0-b968-11e7-9469-bd4ce5cdf3ac.png --- manager/media/style/default/css/custom.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manager/media/style/default/css/custom.css b/manager/media/style/default/css/custom.css index 6a3bc8c4e0..2cf23dd6b4 100644 --- a/manager/media/style/default/css/custom.css +++ b/manager/media/style/default/css/custom.css @@ -269,8 +269,8 @@ ul.sortableList li.ghost { z-index: 2; box-shadow: 0 0.25rem 1.5rem rgba(0, 0, 0 .dark .tab-page, .dark .sectionBody .tab-page, .dark .tab-row .tab.selected, .dark .tab-row .tab.selected.hover, .dark .tab-row .tab.selected:before, .dark .tab-row .tab.selected span { background-color: #f9f9f9; } .dark, .dark .resourceTable .panel-heading { background: #ecf0f1 !important; } .dark .resourceTable .panel-heading:hover { background: #ecf0f1 !important; } -.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background: #f9f9f9 !important; } -.dark .multitv .list li.element { background: #fefefe !important; } +.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background-color: #f9f9f9 !important; } +.dark .multitv .list li.element { background-color: #fefefe !important; } .dark .split { border-color: rgba(0, 0, 0, .05) } .dark hr { background: transparent; } .dark .content-blocks .block { background: #fefefe; border: 1px solid #e3e3e3; } @@ -307,8 +307,8 @@ form#docfinder div.tab-page { height: auto !important } #SimpleGallery .pagination { display: block } #SimpleGallery .sg_image { width: auto } /* multiTV */ -.multitv .list li.element a.copy, .multitv .list li.element a.remove { width: 25px !important; text-align: center; background: #fff !important; top: -10px !important; } -.multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background: #fefefe !important; margin-bottom: 10px !important; } +.multitv .list li.element a.copy, .multitv .list li.element a.remove { text-align: center; background-color: #fff !important; top: -8px !important; } +.multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background-color: #fefefe !important; margin-bottom: 10px !important; } /* loginbox animation */ @keyframes anim-loginbox { From d4d9b6fca8fc24af0952205320473dd14c999741 Mon Sep 17 00:00:00 2001 From: Deesen Date: Wed, 25 Oct 2017 10:02:53 +0200 Subject: [PATCH 301/577] [I] Added new plugin-parameter "Force Paste as Text" --- assets/plugins/tinymce4/plugin.tinymce.php | 4 ++-- .../plugins/tinymce4/theme/theme.tinymce4.base.inc.php | 9 +++++++-- install/assets/plugins/tinymce4.tpl | 4 ++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/assets/plugins/tinymce4/plugin.tinymce.php b/assets/plugins/tinymce4/plugin.tinymce.php index f828dde9f8..10c0826217 100755 --- a/assets/plugins/tinymce4/plugin.tinymce.php +++ b/assets/plugins/tinymce4/plugin.tinymce.php @@ -7,7 +7,7 @@ * @category plugin * @version 4.6.3 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @internal @properties &styleFormats=Custom Style Formats RAW

      • leave empty to use below block/inline formats
      • allows simple-format: Title,cssClass|Title2,cssClass2
      • Also accepts full JSON-config as per TinyMCE4 docs / configure / content-formating / style_formats
      ;textarea; &styleFormats_inline=Custom Style Formats INLINE

      • will wrap selected text with span-tag + css-class
      • simple-format only
      ;textarea;InlineTitle,cssClass1|InlineTitle2,cssClass2 &styleFormats_block=Custom Style Formats BLOCK

      • will add css-class to selected block-element
      • simple-format only
      ;textarea;BlockTitle,cssClass3|BlockTitle2,cssClass4 &customParams=Custom Parameters
      (Be careful or leave empty!);textarea; &entityEncoding=Entity Encoding;list;named,numeric,raw;named &entities=Entities;text; &pathOptions=Path Options;list;Site config,Absolute path,Root relative,URL,No convert;Site config &resizing=Advanced Resizing;list;true,false;false &disabledButtons=Disabled Buttons;text; &webTheme=Web Theme;test;webuser &webPlugins=Web Plugins;text; &webButtons1=Web Buttons 1;text;bold italic underline strikethrough removeformat alignleft aligncenter alignright &webButtons2=Web Buttons 2;text;link unlink image undo redo &webButtons3=Web Buttons 3;text; &webButtons4=Web Buttons 4;text; &webAlign=Web Toolbar Alignment;list;ltr,rtl;ltr &width=Width;text;100% &height=Height;text;400px &introtextRte=Introtext RTE
      add richtext-features to "introtext";list;enabled,disabled;disabled &inlineMode=Inline-Mode;list;enabled,disabled;disabled &inlineTheme=Inline-Mode
      Theme;text;inline &browser_spellcheck=Browser Spellcheck
      At least one dictionary must be installed inside your browser;list;enabled,disabled;disabled + * @internal @properties &styleFormats=Custom Style Formats RAW

      • leave empty to use below block/inline formats
      • allows simple-format: Title,cssClass|Title2,cssClass2
      • Also accepts full JSON-config as per TinyMCE4 docs / configure / content-formating / style_formats
      ;textarea; &styleFormats_inline=Custom Style Formats INLINE

      • will wrap selected text with span-tag + css-class
      • simple-format only
      ;textarea;InlineTitle,cssClass1|InlineTitle2,cssClass2 &styleFormats_block=Custom Style Formats BLOCK

      • will add css-class to selected block-element
      • simple-format only
      ;textarea;BlockTitle,cssClass3|BlockTitle2,cssClass4 &customParams=Custom Parameters
      (Be careful or leave empty!);textarea; &entityEncoding=Entity Encoding;list;named,numeric,raw;named &entities=Entities;text; &pathOptions=Path Options;list;Site config,Absolute path,Root relative,URL,No convert;Site config &resizing=Advanced Resizing;list;true,false;false &disabledButtons=Disabled Buttons;text; &webTheme=Web Theme;test;webuser &webPlugins=Web Plugins;text; &webButtons1=Web Buttons 1;text;bold italic underline strikethrough removeformat alignleft aligncenter alignright &webButtons2=Web Buttons 2;text;link unlink image undo redo &webButtons3=Web Buttons 3;text; &webButtons4=Web Buttons 4;text; &webAlign=Web Toolbar Alignment;list;ltr,rtl;ltr &width=Width;text;100% &height=Height;text;400px &introtextRte=Introtext RTE
      add richtext-features to "introtext";list;enabled,disabled;disabled &inlineMode=Inline-Mode;list;enabled,disabled;disabled &inlineTheme=Inline-Mode
      Theme;text;inline &browser_spellcheck=Browser Spellcheck
      At least one dictionary must be installed inside your browser;list;enabled,disabled;disabled &paste_as_text=Force Paste as Text;list;enabled,disabled;disabled * @internal @events OnLoadWebDocument,OnParseDocument,OnWebPagePrerender,OnLoadWebPageCache,OnRichTextEditorRegister,OnRichTextEditorInit,OnInterfaceSettingsRender * @internal @modx_category Manager and Admin * @internal @legacy_names TinyMCE4 @@ -17,7 +17,7 @@ * @documentation Plugin docs https://github.com/extras-evolution/tinymce4-for-modx-evo * @documentation Official TinyMCE4-docs https://www.tinymce.com/docs/ * @author Deesen - * @lastupdate 2017-01-27 + * @lastupdate 2017-10-25 */ if (!defined('MODX_BASE_PATH')) { die('What are you doing? Get out of here!'); } diff --git a/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php b/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php index b940bfee89..d2c591f653 100755 --- a/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php +++ b/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php @@ -68,8 +68,13 @@ // https://github.com/extras-evolution/tinymce4-for-modx-evo/issues/26 $this->set('browser_spellcheck', ($this->pluginParams['browser_spellcheck'] == 'enabled' ? true : false), 'bool' ); -// https://www.tinymce.com/docs/plugins/paste/#paste_word_valid_elements -$this->set('paste_word_valid_elements', 'a[href|name],p,b,strong,i,em,h1,h2,h3,h4,h5,h6,table,th,td[colspan|rowspan],tr,thead,tfoot,tbody,br,hr,sub,sup,u', 'string'); +if($this->pluginParams['paste_as_text'] == 'enabled') { + // https://www.tinymce.com/docs/plugins/paste/#paste_as_text + $this->set('paste_as_text', true, 'bool' ); +} else { + // https://www.tinymce.com/docs/plugins/paste/#paste_word_valid_elements + $this->set('paste_word_valid_elements', 'a[href|name],p,b,strong,i,em,h1,h2,h3,h4,h5,h6,table,th,td[colspan|rowspan],tr,thead,tfoot,tbody,br,hr,sub,sup,u', 'string'); +} // @todo: final base-setup like tinymce3 "default"-theme? $this->set('plugins', 'anchor visualblocks autolink autosave save advlist fullscreen paste modxlink media contextmenu table youtube image imagetools code textcolor', 'string'); // https://www.tinymce.com/docs/get-started/basic-setup/#pluginconfiguration diff --git a/install/assets/plugins/tinymce4.tpl b/install/assets/plugins/tinymce4.tpl index f1e3467eb8..b0b4456283 100644 --- a/install/assets/plugins/tinymce4.tpl +++ b/install/assets/plugins/tinymce4.tpl @@ -7,7 +7,7 @@ * @category plugin * @version 4.6.3 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @internal @properties &styleFormats=Custom Style Formats RAW

      • leave empty to use below block/inline formats
      • allows simple-format: Title,cssClass|Title2,cssClass2
      • Also accepts full JSON-config as per TinyMCE4 docs / configure / content-formating / style_formats
      ;textarea; &styleFormats_inline=Custom Style Formats INLINE

      • will wrap selected text with span-tag + css-class
      • simple-format only
      ;textarea;InlineTitle,cssClass1|InlineTitle2,cssClass2 &styleFormats_block=Custom Style Formats BLOCK

      • will add css-class to selected block-element
      • simple-format only
      ;textarea;BlockTitle,cssClass3|BlockTitle2,cssClass4 &customParams=Custom Parameters
      (Be careful or leave empty!);textarea; &entityEncoding=Entity Encoding;list;named,numeric,raw;named &entities=Entities;text; &pathOptions=Path Options;list;Site config,Absolute path,Root relative,URL,No convert;Site config &resizing=Advanced Resizing;list;true,false;false &disabledButtons=Disabled Buttons;text; &webTheme=Web Theme;test;webuser &webPlugins=Web Plugins;text; &webButtons1=Web Buttons 1;text;bold italic underline strikethrough removeformat alignleft aligncenter alignright &webButtons2=Web Buttons 2;text;link unlink image undo redo &webButtons3=Web Buttons 3;text; &webButtons4=Web Buttons 4;text; &webAlign=Web Toolbar Alignment;list;ltr,rtl;ltr &width=Width;text;100% &height=Height;text;400px &introtextRte=Introtext RTE
      add richtext-features to "introtext";list;enabled,disabled;disabled &inlineMode=Inline-Mode;list;enabled,disabled;disabled &inlineTheme=Inline-Mode
      Theme;text;inline &browser_spellcheck=Browser Spellcheck
      At least one dictionary must be installed inside your browser;list;enabled,disabled;disabled + * @internal @properties &styleFormats=Custom Style Formats RAW

      • leave empty to use below block/inline formats
      • allows simple-format: Title,cssClass|Title2,cssClass2
      • Also accepts full JSON-config as per TinyMCE4 docs / configure / content-formating / style_formats
      ;textarea; &styleFormats_inline=Custom Style Formats INLINE

      • will wrap selected text with span-tag + css-class
      • simple-format only
      ;textarea;InlineTitle,cssClass1|InlineTitle2,cssClass2 &styleFormats_block=Custom Style Formats BLOCK

      • will add css-class to selected block-element
      • simple-format only
      ;textarea;BlockTitle,cssClass3|BlockTitle2,cssClass4 &customParams=Custom Parameters
      (Be careful or leave empty!);textarea; &entityEncoding=Entity Encoding;list;named,numeric,raw;named &entities=Entities;text; &pathOptions=Path Options;list;Site config,Absolute path,Root relative,URL,No convert;Site config &resizing=Advanced Resizing;list;true,false;false &disabledButtons=Disabled Buttons;text; &webTheme=Web Theme;test;webuser &webPlugins=Web Plugins;text; &webButtons1=Web Buttons 1;text;bold italic underline strikethrough removeformat alignleft aligncenter alignright &webButtons2=Web Buttons 2;text;link unlink image undo redo &webButtons3=Web Buttons 3;text; &webButtons4=Web Buttons 4;text; &webAlign=Web Toolbar Alignment;list;ltr,rtl;ltr &width=Width;text;100% &height=Height;text;400px &introtextRte=Introtext RTE
      add richtext-features to "introtext";list;enabled,disabled;disabled &inlineMode=Inline-Mode;list;enabled,disabled;disabled &inlineTheme=Inline-Mode
      Theme;text;inline &browser_spellcheck=Browser Spellcheck
      At least one dictionary must be installed inside your browser;list;enabled,disabled;disabled &paste_as_text=Force Paste as Text;list;enabled,disabled;disabled * @internal @events OnLoadWebDocument,OnParseDocument,OnWebPagePrerender,OnLoadWebPageCache,OnRichTextEditorRegister,OnRichTextEditorInit,OnInterfaceSettingsRender * @internal @modx_category Manager and Admin * @internal @installset base @@ -16,7 +16,7 @@ * @documentation Plugin docs https://github.com/extras-evolution/tinymce4-for-modx-evo * @documentation Official TinyMCE4-docs https://www.tinymce.com/docs/ * @author Deesen - * @lastupdate 2017-01-27 + * @lastupdate 2017-10-25 */ require MODX_BASE_PATH.'assets/plugins/tinymce4/plugin.tinymce.php'; \ No newline at end of file From c2cb5d8a629cca4c0957a07b1be723ceebb94f01 Mon Sep 17 00:00:00 2001 From: Deesen Date: Wed, 25 Oct 2017 12:58:51 +0200 Subject: [PATCH 302/577] Revert: [F] Show button images in vertical-mode https://github.com/evolution-cms/evolution/commit/f96528c2eaa0582f3d92061da2205ae8cd7b4e07#commitcomment-25178062 --- manager/media/style/default/css/custom.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manager/media/style/default/css/custom.css b/manager/media/style/default/css/custom.css index 2cf23dd6b4..6a3bc8c4e0 100644 --- a/manager/media/style/default/css/custom.css +++ b/manager/media/style/default/css/custom.css @@ -269,8 +269,8 @@ ul.sortableList li.ghost { z-index: 2; box-shadow: 0 0.25rem 1.5rem rgba(0, 0, 0 .dark .tab-page, .dark .sectionBody .tab-page, .dark .tab-row .tab.selected, .dark .tab-row .tab.selected.hover, .dark .tab-row .tab.selected:before, .dark .tab-row .tab.selected span { background-color: #f9f9f9; } .dark, .dark .resourceTable .panel-heading { background: #ecf0f1 !important; } .dark .resourceTable .panel-heading:hover { background: #ecf0f1 !important; } -.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background-color: #f9f9f9 !important; } -.dark .multitv .list li.element { background-color: #fefefe !important; } +.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background: #f9f9f9 !important; } +.dark .multitv .list li.element { background: #fefefe !important; } .dark .split { border-color: rgba(0, 0, 0, .05) } .dark hr { background: transparent; } .dark .content-blocks .block { background: #fefefe; border: 1px solid #e3e3e3; } @@ -307,8 +307,8 @@ form#docfinder div.tab-page { height: auto !important } #SimpleGallery .pagination { display: block } #SimpleGallery .sg_image { width: auto } /* multiTV */ -.multitv .list li.element a.copy, .multitv .list li.element a.remove { text-align: center; background-color: #fff !important; top: -8px !important; } -.multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background-color: #fefefe !important; margin-bottom: 10px !important; } +.multitv .list li.element a.copy, .multitv .list li.element a.remove { width: 25px !important; text-align: center; background: #fff !important; top: -10px !important; } +.multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background: #fefefe !important; margin-bottom: 10px !important; } /* loginbox animation */ @keyframes anim-loginbox { From 9dc548ece961cf69481221c0e4cf5a9de3795d53 Mon Sep 17 00:00:00 2001 From: Nicola Date: Fri, 27 Oct 2017 20:01:19 +0200 Subject: [PATCH 303/577] increased filemanager popup size --- .../tinymce4/tpl/tpl.tinymce4.config.html | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html b/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html index 0dc0a0afed..18ce03f25b 100644 --- a/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html +++ b/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html @@ -1,26 +1,26 @@ - \ No newline at end of file From ca857e7f9f63da7b9ecb0389933c2317880f0f53 Mon Sep 17 00:00:00 2001 From: Nicola Date: Fri, 27 Oct 2017 21:33:40 +0200 Subject: [PATCH 304/577] new evo mcpuk theme --- .../media/browser/mcpuk/themes/evo/about.txt | 10 + .../browser/mcpuk/themes/evo/img/alert.png | Bin 0 -> 2262 bytes .../mcpuk/themes/evo/img/bg_transparent.png | Bin 0 -> 2819 bytes .../browser/mcpuk/themes/evo/img/confirm.png | Bin 0 -> 3243 bytes .../mcpuk/themes/evo/img/files/big/..png | Bin 0 -> 772 bytes .../mcpuk/themes/evo/img/files/big/.image.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/avi.png | Bin 0 -> 1600 bytes .../mcpuk/themes/evo/img/files/big/bat.png | Bin 0 -> 1274 bytes .../mcpuk/themes/evo/img/files/big/bmp.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/bz2.png | Bin 0 -> 2115 bytes .../mcpuk/themes/evo/img/files/big/ccd.png | Bin 0 -> 2188 bytes .../mcpuk/themes/evo/img/files/big/cgi.png | Bin 0 -> 1274 bytes .../mcpuk/themes/evo/img/files/big/com.png | Bin 0 -> 1721 bytes .../mcpuk/themes/evo/img/files/big/csh.png | Bin 0 -> 1274 bytes .../mcpuk/themes/evo/img/files/big/cue.png | Bin 0 -> 2188 bytes .../mcpuk/themes/evo/img/files/big/deb.png | Bin 0 -> 2041 bytes .../mcpuk/themes/evo/img/files/big/dll.png | Bin 0 -> 1238 bytes .../mcpuk/themes/evo/img/files/big/doc.png | Bin 0 -> 1916 bytes .../mcpuk/themes/evo/img/files/big/docx.png | Bin 0 -> 1916 bytes .../mcpuk/themes/evo/img/files/big/exe.png | Bin 0 -> 1721 bytes .../mcpuk/themes/evo/img/files/big/fla.png | Bin 0 -> 1951 bytes .../mcpuk/themes/evo/img/files/big/flv.png | Bin 0 -> 1600 bytes .../mcpuk/themes/evo/img/files/big/fon.png | Bin 0 -> 1110 bytes .../mcpuk/themes/evo/img/files/big/gif.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/gz.png | Bin 0 -> 2115 bytes .../mcpuk/themes/evo/img/files/big/htm.png | Bin 0 -> 2092 bytes .../mcpuk/themes/evo/img/files/big/html.png | Bin 0 -> 2092 bytes .../mcpuk/themes/evo/img/files/big/image.png | Bin 0 -> 1532 bytes .../mcpuk/themes/evo/img/files/big/ini.png | Bin 0 -> 1050 bytes .../mcpuk/themes/evo/img/files/big/iso.png | Bin 0 -> 2188 bytes .../mcpuk/themes/evo/img/files/big/jar.png | Bin 0 -> 2064 bytes .../mcpuk/themes/evo/img/files/big/java.png | Bin 0 -> 2045 bytes .../mcpuk/themes/evo/img/files/big/jpeg.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/jpg.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/js.png | Bin 0 -> 1997 bytes .../mcpuk/themes/evo/img/files/big/mds.png | Bin 0 -> 2188 bytes .../mcpuk/themes/evo/img/files/big/mdx.png | Bin 0 -> 2188 bytes .../mcpuk/themes/evo/img/files/big/mid.png | Bin 0 -> 1498 bytes .../mcpuk/themes/evo/img/files/big/midi.png | Bin 0 -> 1498 bytes .../mcpuk/themes/evo/img/files/big/mkv.png | Bin 0 -> 1600 bytes .../mcpuk/themes/evo/img/files/big/mov.png | Bin 0 -> 1600 bytes .../mcpuk/themes/evo/img/files/big/mp3.png | Bin 0 -> 2316 bytes .../mcpuk/themes/evo/img/files/big/mpeg.png | Bin 0 -> 1600 bytes .../mcpuk/themes/evo/img/files/big/mpg.png | Bin 0 -> 1600 bytes .../mcpuk/themes/evo/img/files/big/nfo.png | Bin 0 -> 1050 bytes .../mcpuk/themes/evo/img/files/big/nrg.png | Bin 0 -> 2188 bytes .../mcpuk/themes/evo/img/files/big/ogg.png | Bin 0 -> 2316 bytes .../mcpuk/themes/evo/img/files/big/pdf.png | Bin 0 -> 1852 bytes .../mcpuk/themes/evo/img/files/big/php.png | Bin 0 -> 2141 bytes .../mcpuk/themes/evo/img/files/big/phps.png | Bin 0 -> 2141 bytes .../mcpuk/themes/evo/img/files/big/pl.png | Bin 0 -> 2118 bytes .../mcpuk/themes/evo/img/files/big/pm.png | Bin 0 -> 2118 bytes .../mcpuk/themes/evo/img/files/big/png.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/ppt.png | Bin 0 -> 1993 bytes .../mcpuk/themes/evo/img/files/big/pptx.png | Bin 0 -> 1993 bytes .../mcpuk/themes/evo/img/files/big/psd.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/qt.png | Bin 0 -> 1600 bytes .../mcpuk/themes/evo/img/files/big/rar.png | Bin 0 -> 2115 bytes .../mcpuk/themes/evo/img/files/big/rpm.png | Bin 0 -> 2070 bytes .../mcpuk/themes/evo/img/files/big/rtf.png | Bin 0 -> 1050 bytes .../mcpuk/themes/evo/img/files/big/sh.png | Bin 0 -> 1274 bytes .../mcpuk/themes/evo/img/files/big/srt.png | Bin 0 -> 1050 bytes .../mcpuk/themes/evo/img/files/big/sub.png | Bin 0 -> 1050 bytes .../mcpuk/themes/evo/img/files/big/swf.png | Bin 0 -> 1666 bytes .../mcpuk/themes/evo/img/files/big/tgz.png | Bin 0 -> 2030 bytes .../mcpuk/themes/evo/img/files/big/tif.png | Bin 0 -> 1790 bytes .../mcpuk/themes/evo/img/files/big/tiff.png | Bin 0 -> 1790 bytes .../themes/evo/img/files/big/torrent.png | Bin 0 -> 1709 bytes .../mcpuk/themes/evo/img/files/big/ttf.png | Bin 0 -> 1199 bytes .../mcpuk/themes/evo/img/files/big/txt.png | Bin 0 -> 1050 bytes .../mcpuk/themes/evo/img/files/big/wav.png | Bin 0 -> 2316 bytes .../mcpuk/themes/evo/img/files/big/wma.png | Bin 0 -> 2316 bytes .../mcpuk/themes/evo/img/files/big/xls.png | Bin 0 -> 1428 bytes .../mcpuk/themes/evo/img/files/big/xlsx.png | Bin 0 -> 1428 bytes .../mcpuk/themes/evo/img/files/big/zip.png | Bin 0 -> 2115 bytes .../mcpuk/themes/evo/img/files/small/..png | Bin 0 -> 429 bytes .../themes/evo/img/files/small/.image.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/avi.png | Bin 0 -> 703 bytes .../mcpuk/themes/evo/img/files/small/bat.png | Bin 0 -> 527 bytes .../mcpuk/themes/evo/img/files/small/bmp.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/bz2.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/files/small/ccd.png | Bin 0 -> 1943 bytes .../mcpuk/themes/evo/img/files/small/cgi.png | Bin 0 -> 527 bytes .../mcpuk/themes/evo/img/files/small/com.png | Bin 0 -> 498 bytes .../mcpuk/themes/evo/img/files/small/csh.png | Bin 0 -> 527 bytes .../mcpuk/themes/evo/img/files/small/cue.png | Bin 0 -> 1943 bytes .../mcpuk/themes/evo/img/files/small/deb.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/files/small/dll.png | Bin 0 -> 614 bytes .../mcpuk/themes/evo/img/files/small/doc.png | Bin 0 -> 692 bytes .../mcpuk/themes/evo/img/files/small/docx.png | Bin 0 -> 692 bytes .../mcpuk/themes/evo/img/files/small/exe.png | Bin 0 -> 498 bytes .../mcpuk/themes/evo/img/files/small/fla.png | Bin 0 -> 701 bytes .../mcpuk/themes/evo/img/files/small/flv.png | Bin 0 -> 703 bytes .../mcpuk/themes/evo/img/files/small/fon.png | Bin 0 -> 627 bytes .../mcpuk/themes/evo/img/files/small/gif.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/gz.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/files/small/htm.png | Bin 0 -> 722 bytes .../mcpuk/themes/evo/img/files/small/html.png | Bin 0 -> 722 bytes .../mcpuk/themes/evo/img/files/small/ini.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/iso.png | Bin 0 -> 1943 bytes .../mcpuk/themes/evo/img/files/small/jar.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/files/small/java.png | Bin 0 -> 695 bytes .../mcpuk/themes/evo/img/files/small/jpeg.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/jpg.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/js.png | Bin 0 -> 634 bytes .../mcpuk/themes/evo/img/files/small/mds.png | Bin 0 -> 1943 bytes .../mcpuk/themes/evo/img/files/small/mdx.png | Bin 0 -> 1943 bytes .../mcpuk/themes/evo/img/files/small/mid.png | Bin 0 -> 683 bytes .../mcpuk/themes/evo/img/files/small/midi.png | Bin 0 -> 683 bytes .../mcpuk/themes/evo/img/files/small/mkv.png | Bin 0 -> 703 bytes .../mcpuk/themes/evo/img/files/small/mov.png | Bin 0 -> 703 bytes .../mcpuk/themes/evo/img/files/small/mp3.png | Bin 0 -> 643 bytes .../mcpuk/themes/evo/img/files/small/mpeg.png | Bin 0 -> 703 bytes .../mcpuk/themes/evo/img/files/small/mpg.png | Bin 0 -> 703 bytes .../mcpuk/themes/evo/img/files/small/nfo.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/nrg.png | Bin 0 -> 1943 bytes .../mcpuk/themes/evo/img/files/small/ogg.png | Bin 0 -> 643 bytes .../mcpuk/themes/evo/img/files/small/pdf.png | Bin 0 -> 688 bytes .../mcpuk/themes/evo/img/files/small/php.png | Bin 0 -> 597 bytes .../mcpuk/themes/evo/img/files/small/phps.png | Bin 0 -> 597 bytes .../mcpuk/themes/evo/img/files/small/pl.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/pm.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/png.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/ppt.png | Bin 0 -> 683 bytes .../mcpuk/themes/evo/img/files/small/pptx.png | Bin 0 -> 683 bytes .../mcpuk/themes/evo/img/files/small/psd.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/qt.png | Bin 0 -> 703 bytes .../mcpuk/themes/evo/img/files/small/rar.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/files/small/rpm.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/files/small/rtf.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/sh.png | Bin 0 -> 527 bytes .../mcpuk/themes/evo/img/files/small/srt.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/sub.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/swf.png | Bin 0 -> 736 bytes .../mcpuk/themes/evo/img/files/small/tgz.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/files/small/tif.png | Bin 0 -> 680 bytes .../mcpuk/themes/evo/img/files/small/tiff.png | Bin 0 -> 680 bytes .../themes/evo/img/files/small/torrent.png | Bin 0 -> 659 bytes .../mcpuk/themes/evo/img/files/small/ttf.png | Bin 0 -> 637 bytes .../mcpuk/themes/evo/img/files/small/txt.png | Bin 0 -> 629 bytes .../mcpuk/themes/evo/img/files/small/wav.png | Bin 0 -> 643 bytes .../mcpuk/themes/evo/img/files/small/wma.png | Bin 0 -> 643 bytes .../mcpuk/themes/evo/img/files/small/xls.png | Bin 0 -> 673 bytes .../mcpuk/themes/evo/img/files/small/xlsx.png | Bin 0 -> 673 bytes .../mcpuk/themes/evo/img/files/small/zip.png | Bin 0 -> 657 bytes .../mcpuk/themes/evo/img/icons/close.png | Bin 0 -> 295 bytes .../browser/mcpuk/themes/evo/img/kcf_logo.png | Bin 0 -> 1900 bytes .../browser/mcpuk/themes/evo/img/loading.gif | Bin 0 -> 2355 bytes .../media/browser/mcpuk/themes/evo/init.js | 4 + .../media/browser/mcpuk/themes/evo/style.css | 666 ++++++++++++++++++ 150 files changed, 680 insertions(+) create mode 100644 manager/media/browser/mcpuk/themes/evo/about.txt create mode 100644 manager/media/browser/mcpuk/themes/evo/img/alert.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/bg_transparent.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/confirm.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/..png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/.image.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/avi.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/bat.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/bmp.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/bz2.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/ccd.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/cgi.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/com.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/csh.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/cue.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/deb.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/dll.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/doc.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/docx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/exe.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/fla.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/flv.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/fon.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/gif.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/gz.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/htm.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/html.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/image.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/ini.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/iso.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/jar.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/java.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/jpeg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/jpg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/js.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mds.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mdx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mid.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/midi.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mkv.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mov.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mp3.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mpeg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/mpg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/nfo.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/nrg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/ogg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/pdf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/php.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/phps.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/pl.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/pm.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/png.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/ppt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/pptx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/psd.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/qt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/rar.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/rpm.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/rtf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/sh.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/srt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/sub.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/swf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/tgz.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/tif.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/tiff.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/torrent.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/ttf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/txt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/wav.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/wma.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/xls.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/xlsx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/big/zip.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/..png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/.image.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/avi.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/bat.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/bmp.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/bz2.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/ccd.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/cgi.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/com.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/csh.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/cue.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/deb.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/dll.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/doc.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/docx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/exe.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/fla.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/flv.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/fon.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/gif.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/gz.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/htm.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/html.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/ini.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/iso.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/jar.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/java.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/jpeg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/jpg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/js.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mds.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mdx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mid.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/midi.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mkv.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mov.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mp3.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mpeg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/mpg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/nfo.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/nrg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/ogg.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/pdf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/php.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/phps.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/pl.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/pm.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/png.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/ppt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/pptx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/psd.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/qt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/rar.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/rpm.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/rtf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/sh.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/srt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/sub.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/swf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/tgz.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/tif.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/tiff.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/torrent.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/ttf.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/txt.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/wav.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/wma.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/xls.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/xlsx.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/files/small/zip.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/icons/close.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/kcf_logo.png create mode 100644 manager/media/browser/mcpuk/themes/evo/img/loading.gif create mode 100644 manager/media/browser/mcpuk/themes/evo/init.js create mode 100644 manager/media/browser/mcpuk/themes/evo/style.css diff --git a/manager/media/browser/mcpuk/themes/evo/about.txt b/manager/media/browser/mcpuk/themes/evo/about.txt new file mode 100644 index 0000000000..4725fe5e79 --- /dev/null +++ b/manager/media/browser/mcpuk/themes/evo/about.txt @@ -0,0 +1,10 @@ +This folder contains files for designing EVO visual theme for KCFinder customized for evolution cms + + +Theme Details: + +Project: KCFinder - http://kcfinder.sunhater.com +Version: 2.54 +Author: Evo team evo.im +Licenses: GPLv2 - http://www.opensource.org/licenses/gpl-2.0.php + LGPLv2 - http://www.opensource.org/licenses/lgpl-2.1.php diff --git a/manager/media/browser/mcpuk/themes/evo/img/alert.png b/manager/media/browser/mcpuk/themes/evo/img/alert.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e019da7045b8a7776c6038d3c7a0623cbfc933 GIT binary patch literal 2262 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 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/bg_transparent.png b/manager/media/browser/mcpuk/themes/evo/img/bg_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..320063208bea813887f961f240f795218fbdfa12 GIT binary patch literal 2819 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 Uj0}ke`St4q9%G9xvhY0hA7k64+yDRo literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/..png b/manager/media/browser/mcpuk/themes/evo/img/files/big/..png new file mode 100644 index 0000000000000000000000000000000000000000..3ce6fb0f1a98809ef6bbd2b632636aa67db78a66 GIT binary patch literal 772 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sO9OmDT!A!6V8@OfTefUjzkdCy zRjZaPSt2ej4%EJ8&6=f4muhNi{`vFg=g*(tzkmPz`}fyx-@bhL^6}HBfB*h{`0(NF z+qduDy?^uO&C8dsUcG+({{8#sFJ3%-_Uz7`JC7bcx_tTag^L%jT)Fb($&)i@&Kx>) zX!q{jH*em&e*OCKfxKE<~Ddl-DI(ZaVuiSG)ID&)a9JAjVSC0&t*2A8y z%RZdUZeP7I%<)6Wy#>mG0xJGHjzzIPT3MBnlFjk)#OaTW{QH@j;^JpVdna(It-l=o zb3wzNrsMH~0&n)T=rUcdIMlgMtU=u-fYI@}D}#GtPQnMqM~+!s2c#=b$qOji34Cy2 ze<>m2!hBL#FR|N!*ThcsmzP213P0~=24>A$pN_juYg9RxKet|pUSKLnn_Q0ugcq%{QH&FE(hU@4s*`W z{#5M?|3~we3Cn(l*rYG zlQylZpLOv&7fZ&4IsY~$|Nn99XEf9OgzIx}FRTCa`}9N`&T#8`zbo_l+n1X^&~1uQ zTyNiY_;ZfuAK!<6KU9Bq__`}qG(>}DrX>qLD}TK07Hb6Mw<&;$S{3Ty-b literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/.image.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/.image.png new file mode 100644 index 0000000000000000000000000000000000000000..785cd39fccafc95f5f73f9bb3c8ece3d12bfbfa8 GIT binary patch literal 1790 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 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/ccd.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/ccd.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaafeeaecfe943d942be06b8661443aec9b3377 GIT binary patch literal 2188 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 XmgTj`ir|C600000NkvXXu0mjf8VUGj literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/dll.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/dll.png new file mode 100644 index 0000000000000000000000000000000000000000..de365e73ca45e29d745339c6396528644e9b9825 GIT binary patch literal 1238 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 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/flv.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/flv.png new file mode 100644 index 0000000000000000000000000000000000000000..28f8a6240360486f444655fbdb76a5e432277c6a GIT binary patch literal 1600 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 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/htm.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/htm.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a88b5576fc882f92f65112ea11a0ea6cf2b77c GIT binary patch literal 2092 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 WCX>^3Uj6v>6I+-vws1s<|J1D literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/jpeg.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/jpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..785cd39fccafc95f5f73f9bb3c8ece3d12bfbfa8 GIT binary patch literal 1790 zcmVU3P#KgeB!H9^6XlQ6uR8;Ef z>xZGklcv3{uCBGUwU(Bam6er}l9H2?lVSi*G%oEN;{K`uaA1-!XRC zE^^l&TgLYH_ab4+^Yim4YSAWU&i?-Xp2YHsr` zaL0_T;Wl~Io5Alkbi|mw?2oYHD`2MF+}xudg_{Wk*RdIzuE)JZD5RAxJKm3@kq|9eX(pzs%q{f7gVY$1ZKc z(>AS$ex`rMnuKDKvK)}B9E)pNihCDlat>ZtURqcUSZfGZjA}sCwLerzJ`g24GcYr7 zGb|Gp9B)t?ENj7ckG19yu{mk2*$=1A5TH6so5T^B;B}Jv=ZJ}LdVOGa<oJF3yIsi;q=Jzt>Bcb$uBoZ!lkV{(j8 zVuW@ugD+8ier9}Ov3tg@cB40SOD$|6Eo^);Yh^rVD@JBmK4f1nVC~0SHAGuOE>sF4 zPmd-{t93w1R6KfoI&vd9f@n7;A1t0gDsBiWfGQoXlp2|X7g0VJlXMW4O%8@g4#nB< zMsCZoxxK5|xsI&3<88FYVzSuSu%fZ5@uaGwU#W&tpXFtpcW|4VZ<~Rfnu)iVx7?F| zhLh*8kDOSHhAfPmFN#)rhgNuo7AA&IM1-qvgL)=>W@&X!oN>jEXFyVCx|L&#Ut_^p zV*of|08d}JrCjFOR9_ZPGHy#WB1m3jMLrBem6ty)Xg&DfIE{KWZB{k9Of@!7FxI{; zTnsJRRV+yhEWm{%Q9~qZG$XyBBAYTCqhA%DSrY&N0Ggge*#H0l8+1}mQvexH4K_{+ z1{X#BP5ANVWI8JR-`TpjoS1xjDhrml000A(Nkli=;JOt9FNLZQ%#%#xldH8u+X1|swyb~H3JG$$u#>V;_$ z5fM|*M@D96&zzZk=2);TC4W(==HCTWKw~n4%D+6I=5(zhg_+w1+H_dx32yAVdc9q z1L>fi4g{=87@XjzRQk#>(5JiWg6hqiipygPF3+Fb2?oLB1V6c-pRc?7CmguBYSgPY zy@^?Jdj0JIb%J2IZxXh5m*Z!4o37EQpFYpcy1BA|3Y;KFNLm$}RO4PU2s=Vgx3eW0 z^~3vFQ(lx84Co4jAi%dq<5QEQRtzG}>=M4{S>B1P)t}3+PwEVVz}CA`k?*Zm;Ghox zVXCXMLh|xr?#&)a0Rj>@rmZSN^A(D+C<26sd5sGRjkp#wd;Cson81bv*3*1Y)CXMn znO(wFUO|V_56{XSn_^uzFtJ{UqERRbyn=%Ir%nhNd%%Pm6__Lw^ZZB47R`47Pozpu z9l3jt$uEEt__P4qN4;Nu=Wf}RFfUa`>Zo0#`E+0hfrW*|L~j(`u%YV7yo>ANxf zN9`Rw-hv(#fF3_Uwc58;rKRiQz58bb9h@>|#7_VrfTfc;NVF6!)K-;hwTS@i+n+mW zgt=Z22#6b*+qZ7nSXh`?a%;lLCBb5HC=!YI;GzN!k!M`u>&?~iv8O_gi#fHKi}?0f ze32daPeXtwTOJn|x7427g98J52P}KOpsg`e4~XY|Pn2;uJjz~-?E?dolLH-Ev|=txEa{ffF$;1bfg&%-$UTwIWc9p{}AU!O~GCV zxI{N9*A^FZY2hHn#zyGe(AdyGAH-H}iH`mWNMyso-lz$_CxDcP$L$4*#X(hjU3P#KgeB!H9^6XlQ6uR8;Ef z>xZGklcv3{uCBGUwU(Bam6er}l9H2?lVSi*G%oEN;{K`uaA1-!XRC zE^^l&TgLYH_ab4+^Yim4YSAWU&i?-Xp2YHsr` zaL0_T;Wl~Io5Alkbi|mw?2oYHD`2MF+}xudg_{Wk*RdIzuE)JZD5RAxJKm3@kq|9eX(pzs%q{f7gVY$1ZKc z(>AS$ex`rMnuKDKvK)}B9E)pNihCDlat>ZtURqcUSZfGZjA}sCwLerzJ`g24GcYr7 zGb|Gp9B)t?ENj7ckG19yu{mk2*$=1A5TH6so5T^B;B}Jv=ZJ}LdVOGa<oJF3yIsi;q=Jzt>Bcb$uBoZ!lkV{(j8 zVuW@ugD+8ier9}Ov3tg@cB40SOD$|6Eo^);Yh^rVD@JBmK4f1nVC~0SHAGuOE>sF4 zPmd-{t93w1R6KfoI&vd9f@n7;A1t0gDsBiWfGQoXlp2|X7g0VJlXMW4O%8@g4#nB< zMsCZoxxK5|xsI&3<88FYVzSuSu%fZ5@uaGwU#W&tpXFtpcW|4VZ<~Rfnu)iVx7?F| zhLh*8kDOSHhAfPmFN#)rhgNuo7AA&IM1-qvgL)=>W@&X!oN>jEXFyVCx|L&#Ut_^p zV*of|08d}JrCjFOR9_ZPGHy#WB1m3jMLrBem6ty)Xg&DfIE{KWZB{k9Of@!7FxI{; zTnsJRRV+yhEWm{%Q9~qZG$XyBBAYTCqhA%DSrY&N0Ggge*#H0l8+1}mQvexH4K_{+ z1{X#BP5ANVWI8JR-`TpjoS1xjDhrml000A(Nkli=;JOt9FNLZQ%#%#xldH8u+X1|swyb~H3JG$$u#>V;_$ z5fM|*M@D96&zzZk=2);TC4W(==HCTWKw~n4%D+6I=5(zhg_+w1+H_dx32yAVdc9q z1L>fi4g{=87@XjzRQk#>(5JiWg6hqiipygPF3+Fb2?oLB1V6c-pRc?7CmguBYSgPY zy@^?Jdj0JIb%J2IZxXh5m*Z!4o37EQpFYpcy1BA|3Y;KFNLm$}RO4PU2s=Vgx3eW0 z^~3vFQ(lx84Co4jAi%dq<5QEQRtzG}>=M4{S>B1P)t}3+PwEVVz}CA`k?*Zm;Ghox zVXCXMLh|xr?#&)a0Rj>@rmZSN^A(D+C<26sd5sGRjkp#wd;Cson81bv*3*1Y)CXMn znO(wFUO|V_56{XSn_^uzFtJ{UqERRbyn=%Ir%nhNd%%Pm6__Lw^ZZB47R`47Pozpu z9l3jt$uEEt__P4qN4;Nu=Wf}RFfUa`>Zo0#`E+0hfrW*|L~j(`u%YV7yo>ANxf zN9`Rw-hv(#fF3_Uwc58;rKRiQz58bb9h@>|#7_VrfTfc;NVF6!)K-;hwTS@i+n+mW zgt=Z22#6b*+qZ7nSXh`?a%;lLCBb5HC=!YI;GzN!k!M`u>&?~iv8O_gi#fHKi}?0f ze32daPeXtwTOJn|x7427g98J52P}KOpsg`e4~XY|Pn2;uJjz~-?E?dolLH-Ev|=txEa{ffF$;1bfg&%-$UTwIWc9p{}AU!O~GCV zxI{N9*A^FZY2hHn#zyGe(AdyGAH-H}iH`mWNMyso-lz$_CxDcP$L$4*#X(hjsi2^sDJd!Z{QUCr^Y-@k z_xSkq_4V`g^#1<-@$vHe`}^(f?eFjJ`uh6$`T6hg@#yI3?CkC8uVn+}hgO*Voth`TXqPwY_w5OS|jDnSOYJBVF@#x|1;MVBf(dE_A+RMAu!?e!8vC6{3 z!?>!#x2(UirM;Mkq@bXnl!l&vZjpX!i+FE>?CI~_)#upL+t13?y{^i|#>Tm*#j~Qp zrIWU@va+I(v8kx4rl+TsfToy?qmqE5l!>5xX_JI|j&x;+d~=3oRe(uDPUqt9+t%OD z#oW}>*wN0`wWY$ju)wXKxT=}BtD?5DuC=qYw5FJ}q?WLwmaUkGs-KgorlhBvkEfrN zrjUH1nvtN7gqn6}m5F?lg>aLCcaMgEi-C5EVorr>Uw~^`fKNJgU{Y&bRb=q*@$c>N z+0Nq9%izwy-Nn1u%*NBmx6{hP(#5pU$;isWyUDk$$+M`*!oS6%mczHSyPl7=k%p*@ zai5!j00?Ig9;a#k0xs8Ghf=@X{446br*X@2;>@Gs96#VIVM%4P*rc z6nM5visN{ofFR6-%qF8Jlwdk25`+aBHI#t90nCDf5MUi;WFK~rhK<;OGFYwk)&+kO z3$UQGFr+DT6xkh{cdwo~^N@OBk;Cq>ES0P63cFknZc7{sJa)U6o9@rc-T zM8zSC*%ee-+-4JQGk|N21rRenm`3(+Bc?2vmp^sX^yd|&QaBm}fyp=k`pop$oU7O8 zLWGVnC*G~1kZ9rnjvH(^PEl57S1p+V5ytVfskl&vF+dap1bC4nJh^C>&#r*zcVc|m zR`(p*ocj5z=KFjxNIW161R*g(5YvZ`ubW-|YG)Aj{-~+>_T>Ubk|aMCMCJ#5x(-iW zHM4B(>DlFL-+#S$vAq1#T`q{}&o3z{-FtA&(c>q3vwo&`RL1k;!9DSWna)HYuSLwU~sxa_iQUAONxr`|(9kplg{)4knaXf&* z%M+bv&Vs%p`}MCg+e#15M?`!+2hjHe`j-a{?=zw=+w7huAo=wGD`W>v{-2z_?*- zvtW-BMnPW~3rs7Vg$Mjj@1m@%tg&p9x6d0=sJI}yK(1D+%^AuvBe&~t0bd9b3y{bH zdFw}KWQ<{(#Q~JAa{+U}2yKrZy?e9GpkU?89X>M`<6~XBCsB!l$cVf#NarfDD*B{e7j$t z0Xe|X$6Q(ND+)Wox6|P@;@}&Br6jR{7=;n!&aBnT7UxDy_D+pkN+=1!Eu|=<+h*$4 zym0~xzyJ`cH|K!a0?fdid*{y`StwTpT_%-UBe%%Aq=Jdq00GMpI@6=G)w5PE*>bbr z zWYw`JI}R)_Ms1;Xty(l~@OQw3M5O_>LZR@PjiI*P={^St^auh$C{qV79Eo63%BCu| zsoS?|(U{$5{$+__g~kbmgXePr0)d(IV5AseR<}%P2KpQj z-9Z!&Or62~gMJ)HO5wBi6@oAV7U;V+NlZ@QrcLV<9*@^BK0IDZ>&OeoIigKcV!cU< fj?Wc;3%B|kGR&WlXj`bM00000NkvXXu0mjf7l|Ln literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/mds.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/mds.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaafeeaecfe943d942be06b8661443aec9b3377 GIT binary patch literal 2188 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 q6YoUM%db+4#9C1}~DV%_4} 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 T*kYnt00000NkvXXu0mjflW8tL literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/phps.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/phps.png new file mode 100644 index 0000000000000000000000000000000000000000..544cd2bbb7061f1f14f2f46452829d835308fb26 GIT binary patch literal 2141 zcmV-j2%`6iP)F4O^-rnACU#9Bo>(bKF>FVm;-rmsA&}dknUQLu*N|0Gd zj_2p+)X(G6&f(nL+|||9d~LOCT%+CE=;r3<<>lq#;^MKY&C1Kms-enTj~xNBOXY+amPOp<70dmbGo7ZxDEx!S_K*`=G*zPQt( znZ?7y!@$76nUcATfwOpOvaqnQg?X@XVW@a(rgUbaf_;@tM_o8JK_w$F2nPzy$KlAr z;LOI~#=zds&DzGo*U!(-xU$c_y3L%D#I~}-h<&$pX0C#Gt%-rDaAKaCnwn=>mt#_u zb8U}YQG`@Wdt6p{b8~Y|L~>tRa92`mQA}k>LS0KpRYO2h4h<3n1O>#s@!8kor=8)# zyWiB(-NnD%#J$_DrP;i+*TA~etD)4it2nq>F{2j)|Uzftq@9lWAa+ zetD5*T#apKj9pNSR78k`goIT{gKKAiR8e40OG!lLW=H|x3v#?`uiB7Np00i+#L_t(Y$BmYCaMMs6$B{t?!(Eg1 zwM{i`Qn%FwI?9wWXJf-%w&CvX?(XjH?(XjH4o4CwS;Fq%bN4R!dCY4GB1aMvuPLaGqq%Yo?cCE$W-*Gz43&Il2W|PTbRjL?qUS1S=gu;bj zv&n9^lG9UhIxYW$qEO+yg2`^RGUCCoIEaKH@a)z#cnX?gF!*iG6epULmYV8x+E7C* z9_vt#NFKWL)y2R z0SSddroe|`!GgBwgBJHlOiW1V+B;`L=gytGc1=h~OzhP`m);xtTad0Aq-!;&X`{xC zXU*)k8RT^7(xqFsnX?)2z?;Wa|1Pu7i88l2xIvE~9;)WfQ@emJc#P z!%WbUkaJps+_eKIf~;jXwHbYx0=(60)U@rB2?oxaoejo;NmHg=0pEs!?Ah}Mf=T@v zXpCE#+gtX`W7GutO`hDRNs~-47UY~dISh=;278(`83}Uh2Q;CNmF0K1h8$NTDBx3WX?0qMGJaPrX>-TTnx(>Q_o_!NGn8kdEEg-V^594+Y)p;_E zMy*z>A%@YI;nBSu|1r%+yjloLKok<5`uf|$FE(~aAL`MOc!s8Tcs1eu?IfR!I3wV& z&^!V}3XtB=yv?Yi#}17-xMRzfVGYL|I(GDV3mh|0l*-4@O65xwE0~|4X9x&SV2w^yN1+vKmZ9?u!6Bptsw0!5 zIfhm)UnYc+CqG%gTcQQ(5o9L3Ct8+6_rnm-d<3%^Ef-db&NBpceuBShg;Mk%0R3SP z;|3RqOcPKBB9>M!T7+ItnvjxV91f=t8xAL|OmM@oN`!<)QfrN))C3 T*kYnt00000NkvXXu0mjflW8tL literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/pl.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..89b9960fe39fa4f89328a00f41a9fcc5b1ee5589 GIT binary patch literal 2118 zcmV-M2)Xx(P)+AaZ`uOgwv}=;-C;FMF&;Mv*P($dlB>FL+l*45S1-{0Te-rd*N)aB;q+}+&T+uGXN z*U!(--q*R&(a*@p$iczEyu7^G(6H_4)aK&J<>AN0#l^|V#J|A6+|{<*)U?LBnz^cn zwWfZwo^Y*{XQP5k;Njub)z#P4&Cbru%gfBu(#hD=!NkPD;Mu*$#ksk;xz^6L*w3xT zzpBi?ow>7}(Zih0yp*}EkiD*px~_?)orbujda|2ou$X6yeO#4=Se<@JlyW|DTPtl* zBUwHZV?+>MKMv*P=IiIs*w@h1)6US)%gfBj(9g!z(Zb@~!QR@z+}FL!%DlnAx!2IR z)6KTm)3vj-w9?A3!oIJrudl4Ft=7t?y11s$#iP2iqqM4*v8t29vWugegrk;ushfD7 zkaVP$a*cy=l!$MZhiH$5WtWO%r;}r^nPIM!V3dPkl73#Bhg++USf_|pjCV89pc% zNG}jnIS)W42|XYJAqxQD;N0Kb&FACH+}Op?&Azm?wbanF&&RUCysWFNtkcM*#J;4) zx}mLv&(7 zeQZE%S3YxKHf>inWKJkfIwNID9aKCWS2zhR7X}C}G`#=-03dWyPE!CFPYgFs6$(cO zBm^-+SU)Hr5AN>f=H1-V(8j~Fuw&$;C@F=lfnB^0LYPjWj9$f;7MU)M?YF z`XlMnrv4e2GY~KgK@f&vk(3G&1PwxHuo=uhgXAW-dz4@9F7rI&m!fD-6b!>vVJHL^ zf-ofy52B)uSF2fUczti&=)_Sq6AmXTrGB}QD*6Bt1dqqVGYmt+00{zUDy4yk2Pq)I zBlA^Vu4;Z5_K1AYW>lA_!GdT6fTsu#Fb_YPsXx3_nWE8fnNbPFV%%klB~Zl@%an3S zF1OtU0!|+UXA_)`IywXfk3>SC+IEq;ATs1@n;ZFKXT$eZA5cGi3Xhg-^;;32yP5CztM#j!{QJ2sXZ>K z;ZVDu!5~IFP;$^oMXjW1ceMEtmN{f7i%T>G1Ef8B2S#AqHh1i+8!SE6|F_;O`S^e9<&V7ap8 z`X@E0QLAC4XB!^&En0-p2Lwb%Mb~Olx51GQQ%{U(+H6d-rVX1VB{eNSV#)m0tsC`; zwLzplfO)5{$+^bm%YRwles0@&l`6Gq-KKK$Nw=0hX$bL+Dpz?mzolJ8s26Zbl2ZxP zsMD$2)(NGT-<{B;m(zi9z}E+u=q){G-Od?4nSn6aAqNI;-}5-m8|{>Ay!swlEQU2e zviG)eb$?g(~8P8%34W+_Al77)-A&X z8G-{?O@=45oAPuraBwgf2TQX$EewblXSK2%PN3>_B~6Ak%$$5?YEeH!upq$1R?8Ly zLlVX-cd5#(<4s!vh?FXd$i`D%!JW z)c)U$fkPL7bue-%MYLxtlo|Mj0LKNeTI;XCN}}K`ERrDla%9X5HdG&&K;Y5^7B!$f zt~g&VlQth?Ap9l}VtjcbvS_|B;C>e<`7$L3`(wl$VIhO-4cUNTK_GB}R6*ZJ*7Ol3 wlPQG}lPMy-Ie5NC(q%O#|1IX!!2eIa1Cnos@?}{LC;$Ke07*qoM6N<$f^F6;K>z>% literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/pm.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/pm.png new file mode 100644 index 0000000000000000000000000000000000000000..89b9960fe39fa4f89328a00f41a9fcc5b1ee5589 GIT binary patch literal 2118 zcmV-M2)Xx(P)+AaZ`uOgwv}=;-C;FMF&;Mv*P($dlB>FL+l*45S1-{0Te-rd*N)aB;q+}+&T+uGXN z*U!(--q*R&(a*@p$iczEyu7^G(6H_4)aK&J<>AN0#l^|V#J|A6+|{<*)U?LBnz^cn zwWfZwo^Y*{XQP5k;Njub)z#P4&Cbru%gfBu(#hD=!NkPD;Mu*$#ksk;xz^6L*w3xT zzpBi?ow>7}(Zih0yp*}EkiD*px~_?)orbujda|2ou$X6yeO#4=Se<@JlyW|DTPtl* zBUwHZV?+>MKMv*P=IiIs*w@h1)6US)%gfBj(9g!z(Zb@~!QR@z+}FL!%DlnAx!2IR z)6KTm)3vj-w9?A3!oIJrudl4Ft=7t?y11s$#iP2iqqM4*v8t29vWugegrk;ushfD7 zkaVP$a*cy=l!$MZhiH$5WtWO%r;}r^nPIM!V3dPkl73#Bhg++USf_|pjCV89pc% zNG}jnIS)W42|XYJAqxQD;N0Kb&FACH+}Op?&Azm?wbanF&&RUCysWFNtkcM*#J;4) zx}mLv&(7 zeQZE%S3YxKHf>inWKJkfIwNID9aKCWS2zhR7X}C}G`#=-03dWyPE!CFPYgFs6$(cO zBm^-+SU)Hr5AN>f=H1-V(8j~Fuw&$;C@F=lfnB^0LYPjWj9$f;7MU)M?YF z`XlMnrv4e2GY~KgK@f&vk(3G&1PwxHuo=uhgXAW-dz4@9F7rI&m!fD-6b!>vVJHL^ zf-ofy52B)uSF2fUczti&=)_Sq6AmXTrGB}QD*6Bt1dqqVGYmt+00{zUDy4yk2Pq)I zBlA^Vu4;Z5_K1AYW>lA_!GdT6fTsu#Fb_YPsXx3_nWE8fnNbPFV%%klB~Zl@%an3S zF1OtU0!|+UXA_)`IywXfk3>SC+IEq;ATs1@n;ZFKXT$eZA5cGi3Xhg-^;;32yP5CztM#j!{QJ2sXZ>K z;ZVDu!5~IFP;$^oMXjW1ceMEtmN{f7i%T>G1Ef8B2S#AqHh1i+8!SE6|F_;O`S^e9<&V7ap8 z`X@E0QLAC4XB!^&En0-p2Lwb%Mb~Olx51GQQ%{U(+H6d-rVX1VB{eNSV#)m0tsC`; zwLzplfO)5{$+^bm%YRwles0@&l`6Gq-KKK$Nw=0hX$bL+Dpz?mzolJ8s26Zbl2ZxP zsMD$2)(NGT-<{B;m(zi9z}E+u=q){G-Od?4nSn6aAqNI;-}5-m8|{>Ay!swlEQU2e zviG)eb$?g(~8P8%34W+_Al77)-A&X z8G-{?O@=45oAPuraBwgf2TQX$EewblXSK2%PN3>_B~6Ak%$$5?YEeH!upq$1R?8Ly zLlVX-cd5#(<4s!vh?FXd$i`D%!JW z)c)U$fkPL7bue-%MYLxtlo|Mj0LKNeTI;XCN}}K`ERrDla%9X5HdG&&K;Y5^7B!$f zt~g&VlQth?Ap9l}VtjcbvS_|B;C>e<`7$L3`(wl$VIhO-4cUNTK_GB}R6*ZJ*7Ol3 wlPQG}lPMy-Ie5NC(q%O#|1IX!!2eIa1Cnos@?}{LC;$Ke07*qoM6N<$f^F6;K>z>% literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/png.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/png.png new file mode 100644 index 0000000000000000000000000000000000000000..785cd39fccafc95f5f73f9bb3c8ece3d12bfbfa8 GIT binary patch literal 1790 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 X;f8;IG&wI}EK7XF~oHzA~yE8~pQxO0FfG)Z? zdhT}9pQQlY<)EoOO#lE8aK+8bX?OfT(bCegtE{Z7R8v#?-%4w1E0szmlgY1Nza|g} zL?RJ~!x1lpCm`0;X@R!6dodsFuEEbDGp^$27wo@#{`QW*^IUdH6pKd-iH6NVnd1k!! zA`%L<`PfR72VPlOVK5kdeSJHfh1CcIuPR1@b6QWZ-Aq2S2D8~fTdxlcNN6QI_9RHcskN*D7&Q8|bx22_}LV7+wJG&tzr6wtfw`&+0 zDj|CBxVnCa+iazRe=ryW0|Q-MUGp6sqV{%vUEO>|1s;!Q;&8&^;+=wm_2I{b`uj5qobqq3_oLq75^G}(XJS=t! zi{+)Jaxj>31cDVGPm7D=*WMSCBL$I>pToo3!or%u!nSYSYV!6L;;&#Jkd4ci$u>5k zTvP7&__t4=X6STDceh}wlS8AeQmORj=I*8@35CL>P*{zPi*@xJ5^1Eel3no=W98*S zJbtXKtfQoKqo`;pE34t@Q^AubyyleUl$4Lj$#u!eB3hE5Eol;s?nNRI2m~AsXTx9< z@$o$m9`IvgTJPQac=zsnM8pUb`X~e{tPNRx5kw6N;^J-)0t0yg0UHE=v7g_!>(_IA ze8#-JKX`l3dU>%uJjx-El{nk4iRTdK&N0z8vluH;7I+>EE+)$x?H=pl7*F@B0BMK@ zNZo3`lDxCoc`cT1kFTSF9+x{e#vs>+Sl40T{{jFqeit3>yj*(Ib7KScd1$>)*Sk;Q z+03lYod3-wS<$IH?F9ZrGGGx4<{H8ds#=oT*6d8Qm*Vr{C20R)G=+sO}Ns*I(GEVw1OO>@$QU2w(H`&L5 zFR~o$?O$c;YzWm|f9aqsA@BGm>gfVuK3+N3mk#b<^7U)0?^Y^uc7%r3bj_(+SHZ;s z^FmUz&g*)Az!N#UgTC?LFR~wJFaZzwkp+A z>e`Cl%rA@91(VC!)$&rU?j>JchE;}T|Bh<%YmvPk8kQH(`mlGei;5)Djel90L4Rrz z+Mljz5rLJl7>II!T73n4kv|!@b}SaUu>DUf)&X6qLY`D!3Rm_SeBAiY>Tt(V?4dIc zPwWeKlgrjo(0Y9*{X#`{e@}3Om(gM?>ZR0CsdnRNOIi7Qk482VR7$k<_4MVcq|b!o z7>5)R6HXP=qtSXHdf7-MRaf;uzVuikP*<*(V^T`{Zt4sMRnF9<8j? z#QzEP^klS^ zXB}}i@jaW^{mp4q%X3u~$*J4FXN7g9S9z+z+~m>D%v;3ZwssNs7)-|kV$c6RoE3l~ zlA+rfCjRE;jbxhMpjKl1aMxt#XMz!&d7~D2s@Lwk*&!tEOG+-g|1;w>b7;9Gh}(0V zOy?P~hfI=XW)4_(d+6Q+8T25LhU~wDpw)a!Xy0R0|G~kp#%VQP)Bc)Vx^DOXtYO+WtLap>58fz({#Ekdy|F#74>Xc^kVo+NrB(9*@eWWORE0GSJB+8 ztOA}kP~FL1uFdx3UjCwMu8HCifOhJE^V6e$JND#N`^gEyb?6ntu`)Sb<5-A?o578$ zG^@EJ$U%kfKkcHH-T(*_dwQ%toec*#-2~!@-3mFW6{!?;*y?6n26xiQu6~R* X;f8;IGU3P#KgeB!H9^6XlQ6uR8;Ef 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 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/rpm.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/rpm.png new file mode 100644 index 0000000000000000000000000000000000000000..f647b1968c3092e36a717ee7cf1f769da938cce7 GIT binary patch literal 2070 zcmV+x2`V0J@}s0002PuZ*UqYUR$ScxOwFcvhK( zWSfU(n}c4%o_fo+l%r95j!&`0RaF2000000Jore00000000000Gf$xi+5PW zt%=>npml0fZemN4f@j*mm}y%>&9aHet%90~ZN;j9zomP)pLLmuY?y~=kbGUFk#dN4 zT6bqn#IA~}lW%fkO0=AMl!Ik`ZdXo2Fx+Mtc1g=g1)4A&$^e)wv@%LhQg_UyP$Njm1)_-pVYpZ+{U8Wz?Qq9 zch%(afju86jv zeY2i?ubg?UnRm9EakQClv6pY1i)^HhYK(heR!lohLo^#065!CK(72G;#gEs+jLNf& z*1?F?zl6f5fVZN6yrFoaiesOLW5=yx$gE(;s$73-Oi)HPJ~t~tI4V3fDLOMKCLtNz z%9z8eg}9`Dq>^%#gJze3UW#{DcWF^!Rzql6L19ulS4uP>8x!{4weQ!k-pHiPxRkc3 zfzi5oxS)BzsBx;6Z_TuB!m4Y_vT3T1WT%Z}sE%Wrf?Sb(T#$QMZ(>YqT0m4sGEhV@ zNIx+3?YqCMjI^MDzo~bZ^z`!a@$T#B z=i=hw;Nale(#*%by1BHkt*51+l#q*rdUphbZp2#ACYBcO!PQj?*HWe~&4nL$9qGPQEI_uhN&@#}vM!M(OW z^{MCc^PcxT_uL}?!BnbQv10kT^U7DOShLb^#a`D%+c*0M@q8l#S@Ab-(!xU7tPtM_ zUa)_yem_f&*|AI{TnB(3XJ3htrRZXQT<1MPUWCwLR=6M$YOiz zbnj0(D|r5!MZ(H8eh5^Cg6*gv5(+lG)9F4Oh6;9IWCW`4?fLzv=AxCTAlO+Ddi(C( z+lhz6V%V&ms6u#6^xdekSA0=H5bruJ2)lRx{=MXctuQJuBqG><`!e3u!lP>Ogw7kI zf=!`sj{y2aGzwMVQMGH52VLc%LHLtGK}_;7K${2^_})+9NP+_QA_!#6b_dFzT7!Vooxb?g z@#Du|e?&LH1$dF?nX<&o)m{#)#yaxjl5Qm5xDzgi8xRGaXF3ys?g5AmPF)z0}n@pzM-DuDYr9w&XK?)2L=a|lk#gaUwEmihPY2)*KvK0!eLTNN#5KyUE zs$7+VS%wrC9+$5=pI~{W%D2d5MwRiz$+KpaU8^=fQL8hl(dL&Iq~=0_k*P|lS|OF% zL*ceLQmIstYd3JM1!|9%1;&M!q!|}As#Q%%fo3v==DZ|asyTmx&o^oE()_&PgIYCG zN`~h0rORJDFJ4v`3bc@z9X3h4rNCiK@KHKU*ymfPgV`G&}`lVR)(h;PjqpoW=V1K6hB5ef4~on8q%)b|Gpdzz2P#aUrKNczXf7Ro2zW5EzpYvYmtVB& z#9K5Pa>2$rKA!9^Wo(Nc)wQTAP^{IR1ptz{UQQj)SpqutQNhE}#oU2%ldW8&f($m+ z@$qCoI&)k(SD<9+_L*QJ84zF{A5ZolJZ@FGq&qO}2?e_X0Y$I^lfGg_R8-WiloaMF z2KFDFokR-EI3u8>r>7%RfE%Ka4Wy)`>;@Q&=toc66M=Fa+O=(4;unT!Et9 zI(01mM>=-uR@D8{6}lArBV8(>0$0ahQRLt76%4+ut)m=49smFU07*qoM6N<$f&k0` AJ^%m! literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/rtf.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/rtf.png new file mode 100644 index 0000000000000000000000000000000000000000..8b9c0b1471dde54c5971873fba3058ed6964b53c GIT binary patch literal 1050 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 M07*qoM6N<$fU3P#KgeB!H9^6XlQ6uR8;Ef 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 D&OS+e literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/ttf.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/ttf.png new file mode 100644 index 0000000000000000000000000000000000000000..cb99d038538b3d6a569f0221a0fb1c25d7f7c642 GIT binary patch literal 1199 zcmV;g1W@~lP)SAJI=;-L(-QC2*#N*@R($doA=jYGQ&)?tQ)z#I<$H#1JY*kfN;o;$n zi;IDQf#v1p+S=O8%*~#jo|u@Jk&%&ldU`}eM8m_wl$4Z+h=_%Sg;M1&8gx=lQvetOPYpLt3nUc>M=@MN=H10V9`5ea(6g{vS2u|O z00T2gL_t(Y$DNi5Q>suDfYS;yeXVbW%caZqKu{2O(@f2+a&7Pb|B!c&h#}B2?~9pc zobQWskBqkUU&QwlJD-x+kFSHoUV8Ua(tC+@kUT)LEE9_0f__KuJ#2C4f&1#ya zs;Z(W5+GBEAH>A`0r=|D58Kl6#=!u5YpolERMsQvav+Guwh8!}>G?z_L>D}&(lXeN z#r;7=H#5DAN3YfDW%9u7ZEcdXRE)*V0H)8*|9V`*<>4rp!fphDs++gttE)nx&~=)_ zr`JN^x;bb%UHZaRw`E%b3IuT6qBC;NEm=|op*$Luv7};@y?+`#YKRgHBpN)8rtV^J zXE^Mv-m{4_)I?DX2CyA{*jV|vJs7kRK-F?HD^mE40K+!*=G1#GN}W!L+7y<3DOXrZ zAfP^}mL@A7HAhVI(vOOty9|tS>XV|K5Yr+0iUh+dUe<4 zIF7YAN+5v!8-nMv5BK-8r4I0FL;(Bre9HN3b`H9avv9ETflCTl9|hPA+}$+#{l?0J zA0QBH`h36L?z=kJ?+2pj`h2NeE`bk32fiD?a@x&i8)k8dI)i^80dbwj#}2o)`S2Sj zZrs4o%Z^hPU7e?|i4-0_X8eI~ATBqU&j*65iwI$W4Ft#^sPk^u0iWtv5D0)mfhc-D zC%w`S5E1@7RtS+LNl_${O8Np8dq*Y^yezJ-FIpUnuqDfis#Od_|C8SF2kVIx3*D5i z7SGR%?yO2|E2~%SoOxp&pTy$+;B6vuaksd*yI5Y&Mz%I?)%2qI>matjwHbh~>Shk8 zWoq=g&F3?d`q>#a%%jvP_@RJ>BfF0TJuwz!)gFU?$n1gtVE`v4N;a3L{*Q0){q}hv z$VxGzSIqC=M+f{{Kqn%ys<#aLFzCZqRw&>gkhE&fK4QTCa$x^Vor3?>KtDc#{Rc^= zIPbh*15h9=|K0^Z#7;WJFwAxkhDoK9@yLHpc9OA3k_pcbH&H~{{{X5J)bD~^)o1_! N002ovPDHLkV1hg@NfZD8 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/big/txt.png b/manager/media/browser/mcpuk/themes/evo/img/files/big/txt.png new file mode 100644 index 0000000000000000000000000000000000000000..8b9c0b1471dde54c5971873fba3058ed6964b53c GIT binary patch literal 1050 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 i>kn~L-s;%Jj{XgD3=dm|1gE0_0000FVm> z;_2Gk(CW<=EQc)7IY0%gVgH#l^+uYdS+0f5fE znultRePoh;U1?=qfpS`ea#T-5F-1HrRzxY6CoF#e000&o!}00iSnL_t(Y$EB5JSW{6LfCW^*Zehe^#5TqX+1Ny6Four7 z7-I@Zi*$o@gCZyr3U+tXAcEc9-QC^s!*lMC%aQ%?(Rcf|_dVY|-*ca5J^qbe8h=5r zE`Hyhe?eco(AFXt8cxvH*8%84^g1DQVxpzp8K|in3XLFERtA7kqliSJAv^*@M+re) zt!vOtpMblnf(c3=*Ku37gV9K!kNZj;cU1>EMk;jl{&r}9`#|5bc;9g-Bb%~BgWo>! z-r^_EXKa}5xg+%DzQqsr>;k%~Ko|P(_(MSsK@)=$HgDUx<8o^7M2Elw1j1+x6Ex`X z7d;DfmjD;B6moes8~%_4VTR1n^Kn2P`rE2(a}mad4=;R`s*(?%nqGwzePO8s~z80v|6j zfh<4+Y@MkWK3uu>x#io9s;t|$v#P7As;jfAZ?s%g5!~ln?={ldKCXl5Q)W$?G|jW7 zrlBD{J^hM_iKUg$2nohR8pCX6kDH#*>3i0srZ=QtsJL2}0e?n<<+jTY9xiOm$S5z% zpE7+42&PT*Or2V^rQ&@?M&0YexE0G*Ac4Y`tq`&DqYLUDUMgFo98g>Fs41ZFP0Z?i zH!5Ak5Fr8E7IG$e_0zC4`PGxDNBsge9tm5TR=WC?i}x0RKtNJ3kigy|x zZm&=%)~9%RfnuItK(y}em~~q#T|qF`X$=_z31|X=2ZOOT*~@Fpm`&$P!imIi19@fz z78tKF$3OzISWI&l9ZMbq+0?A3W3*6T_lv75d?wfR)>H@*nA2!vvc*wlU{k59v+ndL zgUYk8FfKb5DK-P30omM~OwLc9GiQ#CjZHJr;8v?Jd~V2D7=*5kgasOynNz_>G85`f zPV;sPTU#S!b3^aI)z9iqN8_+6qxz? ziY4)ho3IITnT*FJO?j&~Fs_5d4lA?Nh5``rK?`2+;oHs~Itv3>oNF*xPhYRsdDlgu6dh7L4 zb2Br#^GY@;B3wRDs~`07w-xyI_P*T75L0qyX6CKTCVvW>Mg#_+U=kwi_1v5sLo0h}?fj>I{`27d>0X`DA zLED|rr~5D=v8578Kpus{V&p{tedpgRYY!B(=rgSR|IsPBw?*vv+t;HQdM1 t7^11J63rpn!0%3P4K>wh_X7TZ@(V%F)GIpua>D=s002ovPDHLkV1o2dN?iZ| literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/..png b/manager/media/browser/mcpuk/themes/evo/img/files/small/..png new file mode 100644 index 0000000000000000000000000000000000000000..67f4c5f4bbca2e166a1ad99de736f1d137fcd9f5 GIT binary patch literal 429 zcmV;e0aE^nP)QMs5z&eMhf=hkAuTwyZTHgmotSAM2^C1U=_tc6 zq$rA>pC(QLs|zE1R7$G1mL{l*Fb3{!axl4!ka**CC1z{fIx&6A;xoO9o+d1 zehh+DytTlz(!pH=o4y$H*g!cZek$M_5cUPP27c{>2Fryb^bMGKw}JiIJn=M5Gz=ChWox}N#b!FS%jc5hRd?V%(Co@h#rLa zkF>pl3rR`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000P9jydKOofQP7)Zf~2)06qt*O3@TN&!%p__fA1@dqmUcG!x zLjJ<{{eAqX*I{ZM)T>nldE!^*ytSe>`5{SulE><=!GQ9 z-90X%Ng^7$j(c|(k}Bgg56cYFW<002ovPDHLkV1mOgG6Mhr literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/bat.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/bat.png new file mode 100644 index 0000000000000000000000000000000000000000..7b87884f9eb5332e64f62e0b9eeff3bfe64ffc41 GIT binary patch literal 527 zcmV+q0`UEbP)F;q@+d;wz2)PyJ(GL#gQ`7=q=06%syibtu+{iaRUH%@ISnu_T8e2 z#8DJKB}t5C3JGM&1Uf59%d()+Xgp$B7(g7y5PpTAlnJJ(NL-~DaV;ne3}v9uL<4mp z2~^2Qgf#{%=yp01!GbEpJP3ko4=QV|Rx7Z3J-GIHGrBXg)oM|%#sE2+&0sp6!g9HU ze!njwX1m>{&-Dfh>3JRuheJLc$0>~=dE=H7n42Z3$dwHt8Scs!PeMg~;VR+7y9^ZBfQ-C(=jvOtD~S(d@^c!a~@ zz;EGZvw6nxR~Bl`W)Ju#>eK0@lO)lUkfy0dAu|j^?fX8T>-G8r=ev|iT2;P61(ePK zXvVecx}Sr=;2r>cjrg%aib>VvJkR-zq9|W17G617D1YZ${_;=oo!=x`@C}q0!wex4 RM!^68002ovPDHLkV1mgY;MV{E literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/bmp.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/bmp.png new file mode 100644 index 0000000000000000000000000000000000000000..638dee693a112c51428482103ec42d40b3330272 GIT binary patch literal 680 zcmV;Z0$2TsP)`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000g>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/ccd.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/ccd.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8d91d6d8879fe38b2e3c3a0a96075096fb5190 GIT binary patch literal 1943 zcmV;I2Wa?-P)JVA_uYGEhL<9as0av(nX;&-$3X7MM`oMEF*SA}HAzCxhOT7@&v`96%jjGtAt%-~N6g>(5!!vZjM) zyk~-ELijT|cXOOMPd(~$Y;k<-C>2GPM>VT@c8f~Ru%AScE9yiY7SD@s#6cjPr^o;X zvWt&^cC|*WLUN6x9Ob4wDEG)c%=KsaGyR!rRayVC$g;?*_SloLKgIskeOw<~GxqLS z3+hJKh3dkGT%3CG#U(H9{oz5xpa?Uf!*PUJWDsY0^2phT|>Ku`p>xI-22@7#zvc}#RIH7J?7g#85a;|)ZzFKnlv501nx^18l1>&DL zhymWV?ptA?R{7F>>A(oyWC??`Z?x6gT8cu;%#dlSEBwlJuFKvsMGlk0__xjh4pRnV znRrFaq)b-H{<5DsCcY8xVSt#eH5nsRk(_6%Hin4JJx`n;eRc-^K&1Oyw->A?E6?f! zj?__cqudbHm|l>faHzOYS}08wiTBCoC4pQnhsYH5rnp8iMNATdMVd$hoyp<_F%igM z51%tgY!UOtYhtCg)3A&vs?q0|<%750azTtYD$QQCL*Kia2(xBq+JZn_KIA0Nx9%mT`tllmQnKIWWZukL|ROw`&a z3+z23=cPu0r{d_f@0UaU%bQM@=%8&AEutAjCLv*>uu;iT6e$P*UF`|^L#?1b@(2CD zgLXRnv+#3ZM%Es=IsiIfJg{{Clb|gcv^G8(I`bR)*N*^EoOma36v&1BK95ZT>+jk* zy#x|%h1(W(LT$tL-dp!V{F$7ub610LczAI5;}9C*tMmN|D%z|xkAUPKW`+4FsMMee zwt?(rd}7-RW?|!FjfcQ&3O*Msgq}cGWY>5w7N^ucvKsoPO}jn)Cm5Dq61!;ubTr-a z-?GE)Q-`1auK}G|o;$7m!CP^yq;>^pQ;k{13(%0G#+bcnet@2NDDu`Y7YI`H7!GRS$uR++n z#Qekxa4wl?o0SM{$IstCe-g|v%_$2ZP#*Xy-~oSn*R$O#prdc|q~?{VJAo4`PLx6X zBe^qj-=Rj^9X~z(Rq%$jHn!g8vF_u+t-;Nq%r^UjFCKgfIvsS-0er90l?x$1)~;%o z5mrW!pn}A!3%>l@E>O!HVN74hR$h@a~zO#(4p!W zKs@nkHY3Elq69+Qf-?eF)qv!I1=$6|MN-_o>;>6j_}l%pNwqdquq60IP!eG~m2@+y zfE(@iWRd(!Xt`rBce$h$|M*$;;p*+>JM&%nujem%<2wMb_8D7^5@S7Ebv)El4^-m8 zBl2aPW@@JJX(7E;Zw2MGCR>xmJ*8QHwdQfdJ|y~Z^hxNKkp74CQD7axh5_C}ueZHG zed*uORC{xWmV545_wVil<&<2R&(645JIVUvr!sTDy|7Gosb@$sJI35f(N9X;R_hViqt*%q9)2?$kBhE&g zi8zPh+3(r!*-!BQM06N9hV?&10000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH d)ypqR2LLwM23QbN%3J^d002ovPDHLkV1fh7xu*aC literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/cgi.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/cgi.png new file mode 100644 index 0000000000000000000000000000000000000000..7b87884f9eb5332e64f62e0b9eeff3bfe64ffc41 GIT binary patch literal 527 zcmV+q0`UEbP)F;q@+d;wz2)PyJ(GL#gQ`7=q=06%syibtu+{iaRUH%@ISnu_T8e2 z#8DJKB}t5C3JGM&1Uf59%d()+Xgp$B7(g7y5PpTAlnJJ(NL-~DaV;ne3}v9uL<4mp z2~^2Qgf#{%=yp01!GbEpJP3ko4=QV|Rx7Z3J-GIHGrBXg)oM|%#sE2+&0sp6!g9HU ze!njwX1m>{&-Dfh>3JRuheJLc$0>~=dE=H7n42Z3$dwHt8Scs!PeMg~;VR+7y9^ZBfQ-C(=jvOtD~S(d@^c!a~@ zz;EGZvw6nxR~Bl`W)Ju#>eK0@lO)lUkfy0dAu|j^?fX8T>-G8r=ev|iT2;P61(ePK zXvVecx}Sr=;2r>cjrg%aib>VvJkR-zq9|W17G617D1YZ${_;=oo!=x`@C}q0!wex4 RM!^68002ovPDHLkV1mgY;MV{E literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/com.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/com.png new file mode 100644 index 0000000000000000000000000000000000000000..2246f308547dbfa82a4b016ad54d66c844b57f23 GIT binary patch literal 498 zcmVMzCV_|S* zE^l&Yo9;Xs0004TNkl!ODrbWx@FqU@XM3R}@@9lXVN z+Dsvg4AO)GKGDH(Wpaco(L@eKJfnps8puP0jD2A&uow>_@sUK%MTMWOgeiejRGW;PzHCRdOW99WFewLJSXa`*#x=eak+b_3OJv7lRAoo+oEo3fr|u{ z9NOfH4V*_F|J^8#7wUJz+_6p5-wP&rw28_g10H!a(V^UtnoO~mPeMQgHIxWH&_fF% zoT4T$8=@>ljtU80@irc`jwi&K*`Rf>uHG}h=zri9i9~{OmOL-;%(gc5S<5pjI<9Jv o;R;R|O)v@jT%d4Su+2|%ze5Xb`(#gfY5)KL07*qoM6N<$f((_;!TF;q@+d;wz2)PyJ(GL#gQ`7=q=06%syibtu+{iaRUH%@ISnu_T8e2 z#8DJKB}t5C3JGM&1Uf59%d()+Xgp$B7(g7y5PpTAlnJJ(NL-~DaV;ne3}v9uL<4mp z2~^2Qgf#{%=yp01!GbEpJP3ko4=QV|Rx7Z3J-GIHGrBXg)oM|%#sE2+&0sp6!g9HU ze!njwX1m>{&-Dfh>3JRuheJLc$0>~=dE=H7n42Z3$dwHt8Scs!PeMg~;VR+7y9^ZBfQ-C(=jvOtD~S(d@^c!a~@ zz;EGZvw6nxR~Bl`W)Ju#>eK0@lO)lUkfy0dAu|j^?fX8T>-G8r=ev|iT2;P61(ePK zXvVecx}Sr=;2r>cjrg%aib>VvJkR-zq9|W17G617D1YZ${_;=oo!=x`@C}q0!wex4 RM!^68002ovPDHLkV1mgY;MV{E literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/cue.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/cue.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8d91d6d8879fe38b2e3c3a0a96075096fb5190 GIT binary patch literal 1943 zcmV;I2Wa?-P)JVA_uYGEhL<9as0av(nX;&-$3X7MM`oMEF*SA}HAzCxhOT7@&v`96%jjGtAt%-~N6g>(5!!vZjM) zyk~-ELijT|cXOOMPd(~$Y;k<-C>2GPM>VT@c8f~Ru%AScE9yiY7SD@s#6cjPr^o;X zvWt&^cC|*WLUN6x9Ob4wDEG)c%=KsaGyR!rRayVC$g;?*_SloLKgIskeOw<~GxqLS z3+hJKh3dkGT%3CG#U(H9{oz5xpa?Uf!*PUJWDsY0^2phT|>Ku`p>xI-22@7#zvc}#RIH7J?7g#85a;|)ZzFKnlv501nx^18l1>&DL zhymWV?ptA?R{7F>>A(oyWC??`Z?x6gT8cu;%#dlSEBwlJuFKvsMGlk0__xjh4pRnV znRrFaq)b-H{<5DsCcY8xVSt#eH5nsRk(_6%Hin4JJx`n;eRc-^K&1Oyw->A?E6?f! zj?__cqudbHm|l>faHzOYS}08wiTBCoC4pQnhsYH5rnp8iMNATdMVd$hoyp<_F%igM z51%tgY!UOtYhtCg)3A&vs?q0|<%750azTtYD$QQCL*Kia2(xBq+JZn_KIA0Nx9%mT`tllmQnKIWWZukL|ROw`&a z3+z23=cPu0r{d_f@0UaU%bQM@=%8&AEutAjCLv*>uu;iT6e$P*UF`|^L#?1b@(2CD zgLXRnv+#3ZM%Es=IsiIfJg{{Clb|gcv^G8(I`bR)*N*^EoOma36v&1BK95ZT>+jk* zy#x|%h1(W(LT$tL-dp!V{F$7ub610LczAI5;}9C*tMmN|D%z|xkAUPKW`+4FsMMee zwt?(rd}7-RW?|!FjfcQ&3O*Msgq}cGWY>5w7N^ucvKsoPO}jn)Cm5Dq61!;ubTr-a z-?GE)Q-`1auK}G|o;$7m!CP^yq;>^pQ;k{13(%0G#+bcnet@2NDDu`Y7YI`H7!GRS$uR++n z#Qekxa4wl?o0SM{$IstCe-g|v%_$2ZP#*Xy-~oSn*R$O#prdc|q~?{VJAo4`PLx6X zBe^qj-=Rj^9X~z(Rq%$jHn!g8vF_u+t-;Nq%r^UjFCKgfIvsS-0er90l?x$1)~;%o z5mrW!pn}A!3%>l@E>O!HVN74hR$h@a~zO#(4p!W zKs@nkHY3Elq69+Qf-?eF)qv!I1=$6|MN-_o>;>6j_}l%pNwqdquq60IP!eG~m2@+y zfE(@iWRd(!Xt`rBce$h$|M*$;;p*+>JM&%nujem%<2wMb_8D7^5@S7Ebv)El4^-m8 zBl2aPW@@JJX(7E;Zw2MGCR>xmJ*8QHwdQfdJ|y~Z^hxNKkp74CQD7axh5_C}ueZHG zed*uORC{xWmV545_wVil<&<2R&(645JIVUvr!sTDy|7Gosb@$sJI35f(N9X;R_hViqt*%q9)2?$kBhE&g zi8zPh+3(r!*-!BQM06N9hV?&10000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH d)ypqR2LLwM23QbN%3J^d002ovPDHLkV1fh7xu*aC literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/deb.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/deb.png new file mode 100644 index 0000000000000000000000000000000000000000..305f01b43a26ad908304486bffd2f7cdfb9ebe60 GIT binary patch literal 657 zcmV;C0&e|@P)g>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/dll.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/dll.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a2f1c45c81442ef9084bc1d0a41cdf958744ad GIT binary patch literal 614 zcmV-s0-61ZP)_x$Y2(oN0xkoeUVdcB58 z&zfeKW>|px-)uHQpgg2w+U$?j7a|skTpeQMe54) zJmveoqA4h9L-qT8)#-E;9Vqqq^yC0&@H8cKXk3p+k4$o?)oK!Cuh(GX-1KHsUxtvax4*&oF07*qoM6N<$f+{Qq AqW}N^ literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/doc.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..069059db9556f185ffb3b99b037800af128396e6 GIT binary patch literal 692 zcmV;l0!#ggP)sb*bz>1kp{@k2i;zUnMMEl86hTEa^Squr=?p_Ec!qDz zeVp$*kIST#VCDH1WH<+9jK2Sw1d-U9+sbU$gXfcy$bj<< z7#F)<2NyatA+WY`{X2lMfW{cp%^6&~Z~~^OL#KcntDECsA}TN;qCF?E4A&5wh!?uG z4=d{*;D#D*UOa}ZwVyH(nMi_jaE*~CC@&ad(-Hw9Tsdz?#BaYsWOFmHObb&+2DvQ9 zlu0ngm^M^i$x;=BzxCWK?rnUb77RSt_>5^HQDRkYl$DROCuflGKo-41sZ=`K>-C=h z8I8axLen%gm&mi-HA{icr4ZsYabG4gP#2$ec2Fo3aR1r6h}fDt3KEX)(s8zJ?;RrO z;vkV#*2_dBub_fsfwY&2KwA0Z_BKl8GWz{~Qto7SW%YU;dj$x^VlnEsR;#I5Oo}9) zdjEF|!{HE>N(J3+HzDQ^+i1REkYBfuH#}H6N83gSz@4l>y+%BwMBt~-aEQIdfms)~ zn#bWd4wjY{9|3rs7LWuC1_M;9RdhO?q}*yHkK&tUG>)8tGiso{*nWKH_VOiaBS`w8 z-p_cxFJ0G_p65xQ)>1s>9-&_wCt}fgKkWri%Ec!840HDB9z{K7syrOs) aDfsb*bz>1kp{@k2i;zUnMMEl86hTEa^Squr=?p_Ec!qDz zeVp$*kIST#VCDH1WH<+9jK2Sw1d-U9+sbU$gXfcy$bj<< z7#F)<2NyatA+WY`{X2lMfW{cp%^6&~Z~~^OL#KcntDECsA}TN;qCF?E4A&5wh!?uG z4=d{*;D#D*UOa}ZwVyH(nMi_jaE*~CC@&ad(-Hw9Tsdz?#BaYsWOFmHObb&+2DvQ9 zlu0ngm^M^i$x;=BzxCWK?rnUb77RSt_>5^HQDRkYl$DROCuflGKo-41sZ=`K>-C=h z8I8axLen%gm&mi-HA{icr4ZsYabG4gP#2$ec2Fo3aR1r6h}fDt3KEX)(s8zJ?;RrO z;vkV#*2_dBub_fsfwY&2KwA0Z_BKl8GWz{~Qto7SW%YU;dj$x^VlnEsR;#I5Oo}9) zdjEF|!{HE>N(J3+HzDQ^+i1REkYBfuH#}H6N83gSz@4l>y+%BwMBt~-aEQIdfms)~ zn#bWd4wjY{9|3rs7LWuC1_M;9RdhO?q}*yHkK&tUG>)8tGiso{*nWKH_VOiaBS`w8 z-p_cxFJ0G_p65xQ)>1s>9-&_wCt}fgKkWri%Ec!840HDB9z{K7syrOs) aDfMzCV_|S* zE^l&Yo9;Xs0004TNkl!ODrbWx@FqU@XM3R}@@9lXVN z+Dsvg4AO)GKGDH(Wpaco(L@eKJfnps8puP0jD2A&uow>_@sUK%MTMWOgeiejRGW;PzHCRdOW99WFewLJSXa`*#x=eak+b_3OJv7lRAoo+oEo3fr|u{ z9NOfH4V*_F|J^8#7wUJz+_6p5-wP&rw28_g10H!a(V^UtnoO~mPeMQgHIxWH&_fF% zoT4T$8=@>ljtU80@irc`jwi&K*`Rf>uHG}h=zri9i9~{OmOL-;%(gc5S<5pjI<9Jv o;R;R|O)v@jT%d4Su+2|%ze5Xb`(#gfY5)KL07*qoM6N<$f((_;!T(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;LrFwIRCwBylg~?3Q5?lT-}~l`Gltk0E_7o=V$csF7qw|6B(x~Z*+ddWZ33nI z52Amdjmx5lpv@Gcfh~l>h(RkVCmCnaE!y3SpXNKTspUaU84_3#AMU zLvj231!B*pC<8xxdl41=&~lIq&e;Oy%<)f??Q8F-(?G|kNk zln6>G3VRQ6Byo?WxoquF#&d}$6Wrakhl|BLN~v0}R*48thK6a1#o*&7^uhve;R9pY z3~h^FSenlhGee9FU9NLbM{x9MiWaMk@$CnV-+$4(Y>~_5xRZWE!`BimA(Qq8V_Re( zLPQh|+nQ11lMo5h_wq5vV>=jV?VxPW&=!f}_+DK$e})lZvbU$os+h{m@MxjHrPfZG z2-6Z6gthSb?3pb_0D4ERW7{j}@?$j$FNI_*ri1to<2eJRf>E* zPqA1enM}R_=2qFY1~}z7jxLwW+I3xBsZ_M*dD{1V?fbsAEK8@;X>D1S9vvOc0|x-n zTGxlT5h8-t8qf0(5hf-k3h{XSB=A;Om1_<>-~UTF2mUNF)-^*DJ3rseb3( j)#kr22V`r?Rs0?R+4>)*$)|GD00000NkvXXu0mjfnoT*x literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/flv.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/flv.png new file mode 100644 index 0000000000000000000000000000000000000000..bbff051d90e6dcdc295c9660373e18c57315baba GIT binary patch literal 703 zcmV;w0zmzVP)P9jydKOofQP7)Zf~2)06qt*O3@TN&!%p__fA1@dqmUcG!x zLjJ<{{eAqX*I{ZM)T>nldE!^*ytSe>`5{SulE><=!GQ9 z-90X%Ng^7$j(c|(k}Bgg56cYFW<002ovPDHLkV1mOgG6Mhr literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/fon.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/fon.png new file mode 100644 index 0000000000000000000000000000000000000000..2303efed9c5216379243ebc3ca06c66fb3c98d8e GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*<+yOoz zuK)l42dYN~tgNg+?&{U6*Q{ByapT4xKYslD`P0S4#ogWA)6>)2+uPUIHy|J&DJdy6 zH8njwJv%$QprD|%v=nGfeSLjX#fuj&UAlDn z^5rX6u3W!<{l<+Ow}9X_7~HvY=kDG6_wPS__Uzen5P0$O)yr3}UcG+(`VAPoef#zu z7`z9A4`A>S0zQ5G1O}fW;LGPPAn+9kzJbAaFaUZ31b%`%0|dW7;P>y}e}LdG2>ko^ zPpN9}DWK1JOM?7@85reNH1+g@PM&)3@1Jq1%T=JnK~ERQ5D7`vgS)+&9YtC%=D#mi zlMvPCI3&Mu({@gdeU0n2%gme{Hf#{SbR*(Mg=?VTnKSn5rtSc0-KzTZjkb>Wfm^QL zKmKfRmQz18LEz#2w;jtP1tv`RcK-2=a`|QLjGSGcY9H;Gne5oKIVUw`qk+nfJzIAN z)>^&+$~=4;5+mQN;5boqqmZn}hWX~}f9)vVX}`Cf`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000g>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/htm.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/htm.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2f1bf9f9c42945c816b3734aec5ce8da9268e7 GIT binary patch literal 722 zcmV;@0xkWCP)K$A943opIsP1QTNfLNtJhl_*LK0@C6%wYC}Vw4IOZOt2NDE_{GsGw(S$ zAt@!HP)GwJ{GUv}*3mdnk6{>_o|Gtx5;%bVVW9pD?xT@NKk%gnz?0OK&kI)GWY{wV zp6iiJws2#55WPt|0P$OOfT}70EWO$xU$F67brv=aV$m?`S(BHmS?=Ar$mmFSJqdsU z)MIUL{ovhNj^uC;dMZK3#2G|el#jw;%aq)IFppKXQB?IPAfV1K?a6jH*L%-=R{mDOnX<2@VQX=@IYg;)CB7jb0zXlM*;Y;W@pEk zyp%v!;Q7KQx>_}cd!jVCF3rbO?%o_^WaJd(a+#WHtK7FQ#HQjyf_M)fzhxz}&$aPh zwlhVt8H4Ey9gGdd2)@r|_ufxUO^*3zyABXOpti=M>ayVj=9kwg3zI9O1H{87Ljz}7 zTwF9}W@h^RIss7Yr%zax^rOjYwJL4fmagkc&-0|?II>hK$#gm`=jP_V#bU7&K~2rt zp+&0uuzn?^P$;bXf4=O$TfmVS=s<#hO9Ee|lrDeiCrn@|ouRk$7ytkO07*qoM6N<$ Ef?+91LjV8( literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/html.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/html.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2f1bf9f9c42945c816b3734aec5ce8da9268e7 GIT binary patch literal 722 zcmV;@0xkWCP)K$A943opIsP1QTNfLNtJhl_*LK0@C6%wYC}Vw4IOZOt2NDE_{GsGw(S$ zAt@!HP)GwJ{GUv}*3mdnk6{>_o|Gtx5;%bVVW9pD?xT@NKk%gnz?0OK&kI)GWY{wV zp6iiJws2#55WPt|0P$OOfT}70EWO$xU$F67brv=aV$m?`S(BHmS?=Ar$mmFSJqdsU z)MIUL{ovhNj^uC;dMZK3#2G|el#jw;%aq)IFppKXQB?IPAfV1K?a6jH*L%-=R{mDOnX<2@VQX=@IYg;)CB7jb0zXlM*;Y;W@pEk zyp%v!;Q7KQx>_}cd!jVCF3rbO?%o_^WaJd(a+#WHtK7FQ#HQjyf_M)fzhxz}&$aPh zwlhVt8H4Ey9gGdd2)@r|_ufxUO^*3zyABXOpti=M>ayVj=9kwg3zI9O1H{87Ljz}7 zTwF9}W@h^RIss7Yr%zax^rOjYwJL4fmagkc&-0|?II>hK$#gm`=jP_V#bU7&K~2rt zp+&0uuzn?^P$;bXf4=O$TfmVS=s<#hO9Ee|lrDeiCrn@|ouRk$7ytkO07*qoM6N<$ Ef?+91LjV8( literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/ini.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/ini.png new file mode 100644 index 0000000000000000000000000000000000000000..d904593ca54221a54df6c49bc57c980e367f238c GIT binary patch literal 629 zcmV-*0*d{KP)wPj5Q%XrubghVTmFL@0^n&fN!UDzud7k565FubuOSomDHMOjz zkb}nc&YBa9jKoo{>mD&_gi$mYjXf|VL?)@OZcr=3V`*1xE#ds{w zmDU>qVsWR@z|;VpP8Xi%B8s+=r76NFL{Sv5%o#VE*z%SR)T)CKZ{te4u2h<)LQMOq zoZs5pgUfTGA_5)EgV$(r|ITd@3z@eRpO1UY2yisrRz=`T9HT@yJ2?>oKOm!cjFBM- zd=c8+y~*CG5SVYYMnDJm@9l%A{2lxawK8bb>vg$hFc_?nCzFY+JePhr99aNnV+vW8 z;aaqVAIUHDlAkb~e^3iBo6XSw-N#jOg*cAUYPG%qI9hW+bCR17p<*=V_#)(4F5=%W zFY)xrW4!EN$B9bZU9CHOAN^N$gR(Z4cfYeg*J| zrN|R*De#N}hGP=)s=yo<7hQAs_T6Uy4@z=b<=?rvPJVA_uYGEhL<9as0av(nX;&-$3X7MM`oMEF*SA}HAzCxhOT7@&v`96%jjGtAt%-~N6g>(5!!vZjM) zyk~-ELijT|cXOOMPd(~$Y;k<-C>2GPM>VT@c8f~Ru%AScE9yiY7SD@s#6cjPr^o;X zvWt&^cC|*WLUN6x9Ob4wDEG)c%=KsaGyR!rRayVC$g;?*_SloLKgIskeOw<~GxqLS z3+hJKh3dkGT%3CG#U(H9{oz5xpa?Uf!*PUJWDsY0^2phT|>Ku`p>xI-22@7#zvc}#RIH7J?7g#85a;|)ZzFKnlv501nx^18l1>&DL zhymWV?ptA?R{7F>>A(oyWC??`Z?x6gT8cu;%#dlSEBwlJuFKvsMGlk0__xjh4pRnV znRrFaq)b-H{<5DsCcY8xVSt#eH5nsRk(_6%Hin4JJx`n;eRc-^K&1Oyw->A?E6?f! zj?__cqudbHm|l>faHzOYS}08wiTBCoC4pQnhsYH5rnp8iMNATdMVd$hoyp<_F%igM z51%tgY!UOtYhtCg)3A&vs?q0|<%750azTtYD$QQCL*Kia2(xBq+JZn_KIA0Nx9%mT`tllmQnKIWWZukL|ROw`&a z3+z23=cPu0r{d_f@0UaU%bQM@=%8&AEutAjCLv*>uu;iT6e$P*UF`|^L#?1b@(2CD zgLXRnv+#3ZM%Es=IsiIfJg{{Clb|gcv^G8(I`bR)*N*^EoOma36v&1BK95ZT>+jk* zy#x|%h1(W(LT$tL-dp!V{F$7ub610LczAI5;}9C*tMmN|D%z|xkAUPKW`+4FsMMee zwt?(rd}7-RW?|!FjfcQ&3O*Msgq}cGWY>5w7N^ucvKsoPO}jn)Cm5Dq61!;ubTr-a z-?GE)Q-`1auK}G|o;$7m!CP^yq;>^pQ;k{13(%0G#+bcnet@2NDDu`Y7YI`H7!GRS$uR++n z#Qekxa4wl?o0SM{$IstCe-g|v%_$2ZP#*Xy-~oSn*R$O#prdc|q~?{VJAo4`PLx6X zBe^qj-=Rj^9X~z(Rq%$jHn!g8vF_u+t-;Nq%r^UjFCKgfIvsS-0er90l?x$1)~;%o z5mrW!pn}A!3%>l@E>O!HVN74hR$h@a~zO#(4p!W zKs@nkHY3Elq69+Qf-?eF)qv!I1=$6|MN-_o>;>6j_}l%pNwqdquq60IP!eG~m2@+y zfE(@iWRd(!Xt`rBce$h$|M*$;;p*+>JM&%nujem%<2wMb_8D7^5@S7Ebv)El4^-m8 zBl2aPW@@JJX(7E;Zw2MGCR>xmJ*8QHwdQfdJ|y~Z^hxNKkp74CQD7axh5_C}ueZHG zed*uORC{xWmV545_wVil<&<2R&(645JIVUvr!sTDy|7Gosb@$sJI35f(N9X;R_hViqt*%q9)2?$kBhE&g zi8zPh+3(r!*-!BQM06N9hV?&10000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH d)ypqR2LLwM23QbN%3J^d002ovPDHLkV1fh7xu*aC literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/jar.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/jar.png new file mode 100644 index 0000000000000000000000000000000000000000..305f01b43a26ad908304486bffd2f7cdfb9ebe60 GIT binary patch literal 657 zcmV;C0&e|@P)g>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/java.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/java.png new file mode 100644 index 0000000000000000000000000000000000000000..58fa8d0d61e3a5fc430ee9faf4c174564adccdbe GIT binary patch literal 695 zcmV;o0!aOdP)#MQ9y0i1<9H*Opr z$GGwhOkB8f<;Hj588D6^5(ZHj82)E~(w1INZ|sDzF`ne)Htjv!2f5zSOpm89t{63HsR=N+d8pqCgRq9;vY+cqrA!fLgG<2VR{ z0J^TjG)k&37$u{BM_!NCC-3o$a83>$*~tO0Zm;v<`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000sr2?^-Q8-9dGC553XDXiYG8oS-&6+Cd5Mx{G|c;!f3{d&Ey(f;I>ZgGVdK z&dvy+)PXTzlyb4^^)WW#ADtvPbByupb9hq+0m=X}fVIvDQaixd1MO}7MKUz4bGik=UMmg-|7JC`N_F{1BwaY U{-Y8|;Q#;t07*qoM6N<$f>?|f{r~^~ literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mds.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mds.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8d91d6d8879fe38b2e3c3a0a96075096fb5190 GIT binary patch literal 1943 zcmV;I2Wa?-P)JVA_uYGEhL<9as0av(nX;&-$3X7MM`oMEF*SA}HAzCxhOT7@&v`96%jjGtAt%-~N6g>(5!!vZjM) zyk~-ELijT|cXOOMPd(~$Y;k<-C>2GPM>VT@c8f~Ru%AScE9yiY7SD@s#6cjPr^o;X zvWt&^cC|*WLUN6x9Ob4wDEG)c%=KsaGyR!rRayVC$g;?*_SloLKgIskeOw<~GxqLS z3+hJKh3dkGT%3CG#U(H9{oz5xpa?Uf!*PUJWDsY0^2phT|>Ku`p>xI-22@7#zvc}#RIH7J?7g#85a;|)ZzFKnlv501nx^18l1>&DL zhymWV?ptA?R{7F>>A(oyWC??`Z?x6gT8cu;%#dlSEBwlJuFKvsMGlk0__xjh4pRnV znRrFaq)b-H{<5DsCcY8xVSt#eH5nsRk(_6%Hin4JJx`n;eRc-^K&1Oyw->A?E6?f! zj?__cqudbHm|l>faHzOYS}08wiTBCoC4pQnhsYH5rnp8iMNATdMVd$hoyp<_F%igM z51%tgY!UOtYhtCg)3A&vs?q0|<%750azTtYD$QQCL*Kia2(xBq+JZn_KIA0Nx9%mT`tllmQnKIWWZukL|ROw`&a z3+z23=cPu0r{d_f@0UaU%bQM@=%8&AEutAjCLv*>uu;iT6e$P*UF`|^L#?1b@(2CD zgLXRnv+#3ZM%Es=IsiIfJg{{Clb|gcv^G8(I`bR)*N*^EoOma36v&1BK95ZT>+jk* zy#x|%h1(W(LT$tL-dp!V{F$7ub610LczAI5;}9C*tMmN|D%z|xkAUPKW`+4FsMMee zwt?(rd}7-RW?|!FjfcQ&3O*Msgq}cGWY>5w7N^ucvKsoPO}jn)Cm5Dq61!;ubTr-a z-?GE)Q-`1auK}G|o;$7m!CP^yq;>^pQ;k{13(%0G#+bcnet@2NDDu`Y7YI`H7!GRS$uR++n z#Qekxa4wl?o0SM{$IstCe-g|v%_$2ZP#*Xy-~oSn*R$O#prdc|q~?{VJAo4`PLx6X zBe^qj-=Rj^9X~z(Rq%$jHn!g8vF_u+t-;Nq%r^UjFCKgfIvsS-0er90l?x$1)~;%o z5mrW!pn}A!3%>l@E>O!HVN74hR$h@a~zO#(4p!W zKs@nkHY3Elq69+Qf-?eF)qv!I1=$6|MN-_o>;>6j_}l%pNwqdquq60IP!eG~m2@+y zfE(@iWRd(!Xt`rBce$h$|M*$;;p*+>JM&%nujem%<2wMb_8D7^5@S7Ebv)El4^-m8 zBl2aPW@@JJX(7E;Zw2MGCR>xmJ*8QHwdQfdJ|y~Z^hxNKkp74CQD7axh5_C}ueZHG zed*uORC{xWmV545_wVil<&<2R&(645JIVUvr!sTDy|7Gosb@$sJI35f(N9X;R_hViqt*%q9)2?$kBhE&g zi8zPh+3(r!*-!BQM06N9hV?&10000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH d)ypqR2LLwM23QbN%3J^d002ovPDHLkV1fh7xu*aC literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mdx.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mdx.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8d91d6d8879fe38b2e3c3a0a96075096fb5190 GIT binary patch literal 1943 zcmV;I2Wa?-P)JVA_uYGEhL<9as0av(nX;&-$3X7MM`oMEF*SA}HAzCxhOT7@&v`96%jjGtAt%-~N6g>(5!!vZjM) zyk~-ELijT|cXOOMPd(~$Y;k<-C>2GPM>VT@c8f~Ru%AScE9yiY7SD@s#6cjPr^o;X zvWt&^cC|*WLUN6x9Ob4wDEG)c%=KsaGyR!rRayVC$g;?*_SloLKgIskeOw<~GxqLS z3+hJKh3dkGT%3CG#U(H9{oz5xpa?Uf!*PUJWDsY0^2phT|>Ku`p>xI-22@7#zvc}#RIH7J?7g#85a;|)ZzFKnlv501nx^18l1>&DL zhymWV?ptA?R{7F>>A(oyWC??`Z?x6gT8cu;%#dlSEBwlJuFKvsMGlk0__xjh4pRnV znRrFaq)b-H{<5DsCcY8xVSt#eH5nsRk(_6%Hin4JJx`n;eRc-^K&1Oyw->A?E6?f! zj?__cqudbHm|l>faHzOYS}08wiTBCoC4pQnhsYH5rnp8iMNATdMVd$hoyp<_F%igM z51%tgY!UOtYhtCg)3A&vs?q0|<%750azTtYD$QQCL*Kia2(xBq+JZn_KIA0Nx9%mT`tllmQnKIWWZukL|ROw`&a z3+z23=cPu0r{d_f@0UaU%bQM@=%8&AEutAjCLv*>uu;iT6e$P*UF`|^L#?1b@(2CD zgLXRnv+#3ZM%Es=IsiIfJg{{Clb|gcv^G8(I`bR)*N*^EoOma36v&1BK95ZT>+jk* zy#x|%h1(W(LT$tL-dp!V{F$7ub610LczAI5;}9C*tMmN|D%z|xkAUPKW`+4FsMMee zwt?(rd}7-RW?|!FjfcQ&3O*Msgq}cGWY>5w7N^ucvKsoPO}jn)Cm5Dq61!;ubTr-a z-?GE)Q-`1auK}G|o;$7m!CP^yq;>^pQ;k{13(%0G#+bcnet@2NDDu`Y7YI`H7!GRS$uR++n z#Qekxa4wl?o0SM{$IstCe-g|v%_$2ZP#*Xy-~oSn*R$O#prdc|q~?{VJAo4`PLx6X zBe^qj-=Rj^9X~z(Rq%$jHn!g8vF_u+t-;Nq%r^UjFCKgfIvsS-0er90l?x$1)~;%o z5mrW!pn}A!3%>l@E>O!HVN74hR$h@a~zO#(4p!W zKs@nkHY3Elq69+Qf-?eF)qv!I1=$6|MN-_o>;>6j_}l%pNwqdquq60IP!eG~m2@+y zfE(@iWRd(!Xt`rBce$h$|M*$;;p*+>JM&%nujem%<2wMb_8D7^5@S7Ebv)El4^-m8 zBl2aPW@@JJX(7E;Zw2MGCR>xmJ*8QHwdQfdJ|y~Z^hxNKkp74CQD7axh5_C}ueZHG zed*uORC{xWmV545_wVil<&<2R&(645JIVUvr!sTDy|7Gosb@$sJI35f(N9X;R_hViqt*%q9)2?$kBhE&g zi8zPh+3(r!*-!BQM06N9hV?&10000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH d)ypqR2LLwM23QbN%3J^d002ovPDHLkV1fh7xu*aC literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mid.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mid.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ed4bd2d5e7f84153bc7328ab11487f4c950157 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*<$^kwh zuK)l42dXC$u&}W3^73+Wata9viHV6xNlD4c$xWIvY39rsOO`A;ckcYB&!4}4|9l&MynOj&|S^}MKZ9R4UMu_Tv_x4ADqUxNdi(`m{B`i$CihhfRSt|ec0-i7t_mi@#lE- ziY4w{->9E1{!z^N*WuZj2Nf1He0W~Q)v;=l!-ik1KiKbx`5kF4?EC{tCZ4W- JF6*2UngESTHX{H4 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/midi.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/midi.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ed4bd2d5e7f84153bc7328ab11487f4c950157 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJbFq_W2nPqp?T7vkfLzW3kH}&M z2FBeW%xLxI@gtz1WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~*<$^kwh zuK)l42dXC$u&}W3^73+Wata9viHV6xNlD4c$xWIvY39rsOO`A;ckcYB&!4}4|9l&MynOj&|S^}MKZ9R4UMu_Tv_x4ADqUxNdi(`m{B`i$CihhfRSt|ec0-i7t_mi@#lE- ziY4w{->9E1{!z^N*WuZj2Nf1He0W~Q)v;=l!-ik1KiKbx`5kF4?EC{tCZ4W- JF6*2UngESTHX{H4 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mkv.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mkv.png new file mode 100644 index 0000000000000000000000000000000000000000..bbff051d90e6dcdc295c9660373e18c57315baba GIT binary patch literal 703 zcmV;w0zmzVP)P9jydKOofQP7)Zf~2)06qt*O3@TN&!%p__fA1@dqmUcG!x zLjJ<{{eAqX*I{ZM)T>nldE!^*ytSe>`5{SulE><=!GQ9 z-90X%Ng^7$j(c|(k}Bgg56cYFW<002ovPDHLkV1mOgG6Mhr literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mov.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mov.png new file mode 100644 index 0000000000000000000000000000000000000000..bbff051d90e6dcdc295c9660373e18c57315baba GIT binary patch literal 703 zcmV;w0zmzVP)P9jydKOofQP7)Zf~2)06qt*O3@TN&!%p__fA1@dqmUcG!x zLjJ<{{eAqX*I{ZM)T>nldE!^*ytSe>`5{SulE><=!GQ9 z-90X%Ng^7$j(c|(k}Bgg56cYFW<002ovPDHLkV1mOgG6Mhr literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mp3.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mp3.png new file mode 100644 index 0000000000000000000000000000000000000000..017b00da90f5f743e448303e13a74aed5f27494f GIT binary patch literal 643 zcmV-}0(||6P)#_p*zkRy zNrnOp1DdGG>^V}+I4~yliNsLEFp@8BW4pS|aU`@pF&%N2FgYl;IDZpQKRtmoFjZJ7 zkl_MM9u9~2U9C=Sw9FV*bE_zQ-$JEQf$O^5Y<2{m?fB>jsZ$qL^&b))c zV1Ps-!8y9}OC#j-dDQE5#9}cb1qFKSm+mZ~rj!*51^U(_m|+FcXcU=D2A{hh@#^?F zetbJY`|zA|bCEeXjzjN-RO(wWG4s;?_y>6Q^C311U+~s@4fF3;%JTU%n@w~&|6tpe zPv+W!2QL0DE@kkYvLB(JbK4n8;u5Xxg6-VmP%Xi0qiqDN>;M0WJ%BSB+W+h z6p5h-vfuB^ot<6IZEUQ6pnk+7=mM0yg3RdkdU9`Xe_VW7TxVhklixW-S51`}+NR>Z d+Ixr@y8u>P6SCqpiBbRn002ovPDHLkV1kEiA;16t literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mpeg.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..bbff051d90e6dcdc295c9660373e18c57315baba GIT binary patch literal 703 zcmV;w0zmzVP)P9jydKOofQP7)Zf~2)06qt*O3@TN&!%p__fA1@dqmUcG!x zLjJ<{{eAqX*I{ZM)T>nldE!^*ytSe>`5{SulE><=!GQ9 z-90X%Ng^7$j(c|(k}Bgg56cYFW<002ovPDHLkV1mOgG6Mhr literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/mpg.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/mpg.png new file mode 100644 index 0000000000000000000000000000000000000000..bbff051d90e6dcdc295c9660373e18c57315baba GIT binary patch literal 703 zcmV;w0zmzVP)P9jydKOofQP7)Zf~2)06qt*O3@TN&!%p__fA1@dqmUcG!x zLjJ<{{eAqX*I{ZM)T>nldE!^*ytSe>`5{SulE><=!GQ9 z-90X%Ng^7$j(c|(k}Bgg56cYFW<002ovPDHLkV1mOgG6Mhr literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/nfo.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/nfo.png new file mode 100644 index 0000000000000000000000000000000000000000..d904593ca54221a54df6c49bc57c980e367f238c GIT binary patch literal 629 zcmV-*0*d{KP)wPj5Q%XrubghVTmFL@0^n&fN!UDzud7k565FubuOSomDHMOjz zkb}nc&YBa9jKoo{>mD&_gi$mYjXf|VL?)@OZcr=3V`*1xE#ds{w zmDU>qVsWR@z|;VpP8Xi%B8s+=r76NFL{Sv5%o#VE*z%SR)T)CKZ{te4u2h<)LQMOq zoZs5pgUfTGA_5)EgV$(r|ITd@3z@eRpO1UY2yisrRz=`T9HT@yJ2?>oKOm!cjFBM- zd=c8+y~*CG5SVYYMnDJm@9l%A{2lxawK8bb>vg$hFc_?nCzFY+JePhr99aNnV+vW8 z;aaqVAIUHDlAkb~e^3iBo6XSw-N#jOg*cAUYPG%qI9hW+bCR17p<*=V_#)(4F5=%W zFY)xrW4!EN$B9bZU9CHOAN^N$gR(Z4cfYeg*J| zrN|R*De#N}hGP=)s=yo<7hQAs_T6Uy4@z=b<=?rvPJVA_uYGEhL<9as0av(nX;&-$3X7MM`oMEF*SA}HAzCxhOT7@&v`96%jjGtAt%-~N6g>(5!!vZjM) zyk~-ELijT|cXOOMPd(~$Y;k<-C>2GPM>VT@c8f~Ru%AScE9yiY7SD@s#6cjPr^o;X zvWt&^cC|*WLUN6x9Ob4wDEG)c%=KsaGyR!rRayVC$g;?*_SloLKgIskeOw<~GxqLS z3+hJKh3dkGT%3CG#U(H9{oz5xpa?Uf!*PUJWDsY0^2phT|>Ku`p>xI-22@7#zvc}#RIH7J?7g#85a;|)ZzFKnlv501nx^18l1>&DL zhymWV?ptA?R{7F>>A(oyWC??`Z?x6gT8cu;%#dlSEBwlJuFKvsMGlk0__xjh4pRnV znRrFaq)b-H{<5DsCcY8xVSt#eH5nsRk(_6%Hin4JJx`n;eRc-^K&1Oyw->A?E6?f! zj?__cqudbHm|l>faHzOYS}08wiTBCoC4pQnhsYH5rnp8iMNATdMVd$hoyp<_F%igM z51%tgY!UOtYhtCg)3A&vs?q0|<%750azTtYD$QQCL*Kia2(xBq+JZn_KIA0Nx9%mT`tllmQnKIWWZukL|ROw`&a z3+z23=cPu0r{d_f@0UaU%bQM@=%8&AEutAjCLv*>uu;iT6e$P*UF`|^L#?1b@(2CD zgLXRnv+#3ZM%Es=IsiIfJg{{Clb|gcv^G8(I`bR)*N*^EoOma36v&1BK95ZT>+jk* zy#x|%h1(W(LT$tL-dp!V{F$7ub610LczAI5;}9C*tMmN|D%z|xkAUPKW`+4FsMMee zwt?(rd}7-RW?|!FjfcQ&3O*Msgq}cGWY>5w7N^ucvKsoPO}jn)Cm5Dq61!;ubTr-a z-?GE)Q-`1auK}G|o;$7m!CP^yq;>^pQ;k{13(%0G#+bcnet@2NDDu`Y7YI`H7!GRS$uR++n z#Qekxa4wl?o0SM{$IstCe-g|v%_$2ZP#*Xy-~oSn*R$O#prdc|q~?{VJAo4`PLx6X zBe^qj-=Rj^9X~z(Rq%$jHn!g8vF_u+t-;Nq%r^UjFCKgfIvsS-0er90l?x$1)~;%o z5mrW!pn}A!3%>l@E>O!HVN74hR$h@a~zO#(4p!W zKs@nkHY3Elq69+Qf-?eF)qv!I1=$6|MN-_o>;>6j_}l%pNwqdquq60IP!eG~m2@+y zfE(@iWRd(!Xt`rBce$h$|M*$;;p*+>JM&%nujem%<2wMb_8D7^5@S7Ebv)El4^-m8 zBl2aPW@@JJX(7E;Zw2MGCR>xmJ*8QHwdQfdJ|y~Z^hxNKkp74CQD7axh5_C}ueZHG zed*uORC{xWmV545_wVil<&<2R&(645JIVUvr!sTDy|7Gosb@$sJI35f(N9X;R_hViqt*%q9)2?$kBhE&g zi8zPh+3(r!*-!BQM06N9hV?&10000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH d)ypqR2LLwM23QbN%3J^d002ovPDHLkV1fh7xu*aC literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/ogg.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/ogg.png new file mode 100644 index 0000000000000000000000000000000000000000..017b00da90f5f743e448303e13a74aed5f27494f GIT binary patch literal 643 zcmV-}0(||6P)#_p*zkRy zNrnOp1DdGG>^V}+I4~yliNsLEFp@8BW4pS|aU`@pF&%N2FgYl;IDZpQKRtmoFjZJ7 zkl_MM9u9~2U9C=Sw9FV*bE_zQ-$JEQf$O^5Y<2{m?fB>jsZ$qL^&b))c zV1Ps-!8y9}OC#j-dDQE5#9}cb1qFKSm+mZ~rj!*51^U(_m|+FcXcU=D2A{hh@#^?F zetbJY`|zA|bCEeXjzjN-RO(wWG4s;?_y>6Q^C311U+~s@4fF3;%JTU%n@w~&|6tpe zPv+W!2QL0DE@kkYvLB(JbK4n8;u5Xxg6-VmP%Xi0qiqDN>;M0WJ%BSB+W+h z6p5h-vfuB^ot<6IZEUQ6pnk+7=mM0yg3RdkdU9`Xe_VW7TxVhklixW-S51`}+NR>Z d+Ixr@y8u>P6SCqpiBbRn002ovPDHLkV1kEiA;16t literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/pdf.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..9498f0ffdba67b6960afdf662653a8432f615e4a GIT binary patch literal 688 zcmV;h0#E&kP)xjkU5C9ymSw>(jDCVpAk4(f3{vy+a1Rb(udM+W7f2?Pq0rw6 z#JvCre_&z)>c$5A^K;y7Z2^OWNUg6UJ~q}*fUZE8Bp_=ws8s0F+;O5w6A6f*xw?wa zv$Ic(@JPXDaB~BUjzSRb-R>@$*(}85Br?axczJTtHv$ug-;X(660okXVICbJwz7g} z`}+|0Mj}Va{vGsCc(gF{@DSS464J#YG;(FT-NtRb&MqvM%kKev~uQv zd$A}R%gge1Z%>l@B<(<&rYS3x3ZI2Sp$gzNC4Wb~OJuV+trqmfMI>ovG7UHIJdepr zrBW@I%e?_mkraOrc+{y&VOFcM-E4Aa66BN26Xf&x)85WuhM)5*{_~%~GhcD%p7;ex WLIk?6j(Oq$0000IqP) zKTwc@o`wR7O#?wFk=7BU0z?JK#x~%|%v-(nE|wx?q^o%t-E(Ii*dQVphLHzgUO)uZ`Vb{>l}|q)Eo!5I98_p zeh>Hg8Rzpky@CeRA0AMtR4^Wo(P%W}nSvCHMa<`O*tU(yWP(nolb#@oA{-6}e0_XG zp-{kdI#rN%yN%6egVkz5CJcr7B5R_*nA)M~YecO(W8Pej-2RjJ?aQ?uEmIF9LdyQwZ7_9lRUO`h*l z5CqE16Np(G)Mrko)9EAuu?8fUsAU)_F$8SHZnu+vp{(^Cz|VIpFjdA+rHgofS}Yc- z4~N4wfRB8>PQ1u#sVN2Adn$8kOZSP<8{39g)Um#i;M?j;@!22XF3we;)! jL4En}lAV9)WLIqP) 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 R0BQgL002ovPDHLkV1krZF?s+1 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/pptx.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/pptx.png new file mode 100644 index 0000000000000000000000000000000000000000..bdccbb63e23b97469ac8895fb48f7ccad21bd1d6 GIT binary patch literal 683 zcmV;c0#yBpP)(XSXirhy<}2iJ9D#cq)THMJ##4@}XVIVDjOqYyi^^fP@Gl zlG2c*JSJw);y?uC{()ipupc&{EfI9vgl44xD+AaWkhKh2%BX$FK(YhY?GWMT=g>?8 z{A~+lrd3ta4Yf)z??N{LhJyMPa=Bc!-EMy!I}UVRkG=^sBDK=Lm}07PHVosgXj=xR zP>KG@3G(?oP6q=lqF5}(_mVI$cR)_WQPs(00(X5Kr$K;$(A?fesZ@%^vht#VO8!1R zMo})hu8XUytLP1fxU;jP^4)G1GgK-STr?0C3WaE1)xi}pxGW=ynd)W+Yi}>^2wIdRXS!yHk++Fj>DtTh{xkGivfF{ z$G-1#tJUI3z0QY?28Us&@|&A4qPcX@#(yM+;MdU+7NENME+h2U)*wZ&_4?JvX7kNs z5eLZ*?s-xzSvd#-MX9RT>2%!Mv)X$AW~7;s)QjjkfQXbJ7WTgICo{W9;4j5q4P!;U R0BQgL002ovPDHLkV1krZF?s+1 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/psd.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/psd.png new file mode 100644 index 0000000000000000000000000000000000000000..638dee693a112c51428482103ec42d40b3330272 GIT binary patch literal 680 zcmV;Z0$2TsP)`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000P9jydKOofQP7)Zf~2)06qt*O3@TN&!%p__fA1@dqmUcG!x zLjJ<{{eAqX*I{ZM)T>nldE!^*ytSe>`5{SulE><=!GQ9 z-90X%Ng^7$j(c|(k}Bgg56cYFW<002ovPDHLkV1mOgG6Mhr literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/rar.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/rar.png new file mode 100644 index 0000000000000000000000000000000000000000..305f01b43a26ad908304486bffd2f7cdfb9ebe60 GIT binary patch literal 657 zcmV;C0&e|@P)g>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/rpm.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/rpm.png new file mode 100644 index 0000000000000000000000000000000000000000..305f01b43a26ad908304486bffd2f7cdfb9ebe60 GIT binary patch literal 657 zcmV;C0&e|@P)g>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/rtf.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/rtf.png new file mode 100644 index 0000000000000000000000000000000000000000..d904593ca54221a54df6c49bc57c980e367f238c GIT binary patch literal 629 zcmV-*0*d{KP)wPj5Q%XrubghVTmFL@0^n&fN!UDzud7k565FubuOSomDHMOjz zkb}nc&YBa9jKoo{>mD&_gi$mYjXf|VL?)@OZcr=3V`*1xE#ds{w zmDU>qVsWR@z|;VpP8Xi%B8s+=r76NFL{Sv5%o#VE*z%SR)T)CKZ{te4u2h<)LQMOq zoZs5pgUfTGA_5)EgV$(r|ITd@3z@eRpO1UY2yisrRz=`T9HT@yJ2?>oKOm!cjFBM- zd=c8+y~*CG5SVYYMnDJm@9l%A{2lxawK8bb>vg$hFc_?nCzFY+JePhr99aNnV+vW8 z;aaqVAIUHDlAkb~e^3iBo6XSw-N#jOg*cAUYPG%qI9hW+bCR17p<*=V_#)(4F5=%W zFY)xrW4!EN$B9bZU9CHOAN^N$gR(Z4cfYeg*J| zrN|R*De#N}hGP=)s=yo<7hQAs_T6Uy4@z=b<=?rvPF;q@+d;wz2)PyJ(GL#gQ`7=q=06%syibtu+{iaRUH%@ISnu_T8e2 z#8DJKB}t5C3JGM&1Uf59%d()+Xgp$B7(g7y5PpTAlnJJ(NL-~DaV;ne3}v9uL<4mp z2~^2Qgf#{%=yp01!GbEpJP3ko4=QV|Rx7Z3J-GIHGrBXg)oM|%#sE2+&0sp6!g9HU ze!njwX1m>{&-Dfh>3JRuheJLc$0>~=dE=H7n42Z3$dwHt8Scs!PeMg~;VR+7y9^ZBfQ-C(=jvOtD~S(d@^c!a~@ zz;EGZvw6nxR~Bl`W)Ju#>eK0@lO)lUkfy0dAu|j^?fX8T>-G8r=ev|iT2;P61(ePK zXvVecx}Sr=;2r>cjrg%aib>VvJkR-zq9|W17G617D1YZ${_;=oo!=x`@C}q0!wex4 RM!^68002ovPDHLkV1mgY;MV{E literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/srt.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/srt.png new file mode 100644 index 0000000000000000000000000000000000000000..d904593ca54221a54df6c49bc57c980e367f238c GIT binary patch literal 629 zcmV-*0*d{KP)wPj5Q%XrubghVTmFL@0^n&fN!UDzud7k565FubuOSomDHMOjz zkb}nc&YBa9jKoo{>mD&_gi$mYjXf|VL?)@OZcr=3V`*1xE#ds{w zmDU>qVsWR@z|;VpP8Xi%B8s+=r76NFL{Sv5%o#VE*z%SR)T)CKZ{te4u2h<)LQMOq zoZs5pgUfTGA_5)EgV$(r|ITd@3z@eRpO1UY2yisrRz=`T9HT@yJ2?>oKOm!cjFBM- zd=c8+y~*CG5SVYYMnDJm@9l%A{2lxawK8bb>vg$hFc_?nCzFY+JePhr99aNnV+vW8 z;aaqVAIUHDlAkb~e^3iBo6XSw-N#jOg*cAUYPG%qI9hW+bCR17p<*=V_#)(4F5=%W zFY)xrW4!EN$B9bZU9CHOAN^N$gR(Z4cfYeg*J| zrN|R*De#N}hGP=)s=yo<7hQAs_T6Uy4@z=b<=?rvPwPj5Q%XrubghVTmFL@0^n&fN!UDzud7k565FubuOSomDHMOjz zkb}nc&YBa9jKoo{>mD&_gi$mYjXf|VL?)@OZcr=3V`*1xE#ds{w zmDU>qVsWR@z|;VpP8Xi%B8s+=r76NFL{Sv5%o#VE*z%SR)T)CKZ{te4u2h<)LQMOq zoZs5pgUfTGA_5)EgV$(r|ITd@3z@eRpO1UY2yisrRz=`T9HT@yJ2?>oKOm!cjFBM- zd=c8+y~*CG5SVYYMnDJm@9l%A{2lxawK8bb>vg$hFc_?nCzFY+JePhr99aNnV+vW8 z;aaqVAIUHDlAkb~e^3iBo6XSw-N#jOg*cAUYPG%qI9hW+bCR17p<*=V_#)(4F5=%W zFY)xrW4!EN$B9bZU9CHOAN^N$gR(Z4cfYeg*J| zrN|R*De#N}hGP=)s=yo<7hQAs_T6Uy4@z=b<=?rvP(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;W=TXrRCwBylFdt0Q5eR5=gv$sI!?GK>ZdaX1{UKn8$e80f1ynr7qW zM2O+nlT1dY0jMa>r=hBxrlV^imHLIu0FHEH_=a@84rdz*5KVbK|@tJb}{JeenOtdMc2)1n5N0IVL$i#2KceGKy^hC$z)P8 zZRxMvVi-oZWm(v4Hb(p*-h@8#VP+nHqWnD^E-z%~b|;#q;rIJT+uPeOibx0%0cbG{ zLt?R*BoYZpCX-^CrdXCGmSu^q>k?-`_vo z*4B0g2uj*HlfbmBKb%vklvtJ}@pwGt^Z7=9cV1uXZ%~{*{Fg$&yNq*MKL-GdIw}G< SoI&CM0000g>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/tif.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/tif.png new file mode 100644 index 0000000000000000000000000000000000000000..638dee693a112c51428482103ec42d40b3330272 GIT binary patch literal 680 zcmV;Z0$2TsP)`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000`F@!(wAO3|!4@$91;oPj|Dyp%0k!?lKh3_m`zMm!H z3d(`fg687KGYtRG?23;tolPPgMSze30JSz$?!olhs2X`qNp1zNay!a5Ip$duuE&|V zRmb4FI4U9ukV=FR5K@wDK2Ak3PnG$d2}|<8eub4bNnA=W^sJ1cC_$PkRQ!pcMNo)u zm-FG&S=^&(&c~*pVwtI{f*T7C<8F13J=74!-w09|NK^8&v7IO43c11{drw~G_E!sE zz3=W04i0c**m145cPx0i$rsa^*|&2=gb)~p z0kCQIJP+4(i8wR!>4|~Po}Qj@Hn0syuG{c$*Y@hWySq!Y)@*dk-}x8s6T|NAO&72L O0000P)mzf$l^)8)D=V!5j-e8 zt?WTOdGIQD5kc@@*n=Y8J;)yR4=B`wKfsIbVWI4zWrb3tCT?j{o3u@nad;%ruuH)& z4D*tC?=v&W8-<9VD9RZCHT<7;iKwk54>iYewqu5=sw$14Ib)?>#!p(-9RL{sF=3%3 zC|%>PGJp_jwviCy@{8-Jlr5-=fa8wv`QZnsq5vh?lLMq>fd~rwSrp-H)xx!NHRyck z-PbRO0O)Fxgnb^6QrYA;AQctc!Y}_2nyR5vG9mcA5CT|GLFNSmiYJ!fB!FVU;8v8} z!J~jA_&e|r#&Z-R1FruALJ_ddDhB=#dKh5YDjf?*dY@r)=P}B*0eiW?v4TjId2l?QOcKK2IRamvzBv<$TR2RK9@_tzewAaoGX(F&0C zcy;v(Iy)U`l`Zs!19?AA7j2x6H?UT%VKSK<+d}Tv-Me%buRi?*N^d~~tPF49_Juk+ zosP`j?RLKb*aIsqXWjRGVmi%cGYZ3y=JPpizJEf`KR%@(2&mO+(Re(jMx)^XxX32w zC>^GCKM1z@Ph@kz0C=8<(P#wIG~v1~dcB@ouh(yKf?Zoc5!lIL8@MUQTpt6Hc~*yTLaX*cJ0=!TX*c(v1`|^-Me@1 z*|TT={{2Ue965IE*zx1XPno;%SynXxj9T>a^gAX4*e1w2cA3uS?X9)Q6`3neq1%huN@Er(% zo&kZMATI&IFA(_s`}ZFp_zMF6{{8Dq_}2#v0=|+UzhDMNc@<4P{h*Vl9z6W_FZ28K zBS4vho-U3d6}Mb_ck(d?O0@pZ6_ZrlC@#e{wL(z;HD?J|zJgVcliEg~V;(!M|9F4r z(93hvH!B1%)Jtj$=y0no>AG@Un{~qTBOTlAlr%yP)cgqwy{8>zaHZ$eL7kpwhnE-3 zb$G?=`smmf$wXd{Ta4{O4&o=(RT8g7zEP++aJKm8#phxgitH&y+EZ41m0tBjc2VVC z^LwPj5Q%XrubghVTmFL@0^n&fN!UDzud7k565FubuOSomDHMOjz zkb}nc&YBa9jKoo{>mD&_gi$mYjXf|VL?)@OZcr=3V`*1xE#ds{w zmDU>qVsWR@z|;VpP8Xi%B8s+=r76NFL{Sv5%o#VE*z%SR)T)CKZ{te4u2h<)LQMOq zoZs5pgUfTGA_5)EgV$(r|ITd@3z@eRpO1UY2yisrRz=`T9HT@yJ2?>oKOm!cjFBM- zd=c8+y~*CG5SVYYMnDJm@9l%A{2lxawK8bb>vg$hFc_?nCzFY+JePhr99aNnV+vW8 z;aaqVAIUHDlAkb~e^3iBo6XSw-N#jOg*cAUYPG%qI9hW+bCR17p<*=V_#)(4F5=%W zFY)xrW4!EN$B9bZU9CHOAN^N$gR(Z4cfYeg*J| zrN|R*De#N}hGP=)s=yo<7hQAs_T6Uy4@z=b<=?rvP#_p*zkRy zNrnOp1DdGG>^V}+I4~yliNsLEFp@8BW4pS|aU`@pF&%N2FgYl;IDZpQKRtmoFjZJ7 zkl_MM9u9~2U9C=Sw9FV*bE_zQ-$JEQf$O^5Y<2{m?fB>jsZ$qL^&b))c zV1Ps-!8y9}OC#j-dDQE5#9}cb1qFKSm+mZ~rj!*51^U(_m|+FcXcU=D2A{hh@#^?F zetbJY`|zA|bCEeXjzjN-RO(wWG4s;?_y>6Q^C311U+~s@4fF3;%JTU%n@w~&|6tpe zPv+W!2QL0DE@kkYvLB(JbK4n8;u5Xxg6-VmP%Xi0qiqDN>;M0WJ%BSB+W+h z6p5h-vfuB^ot<6IZEUQ6pnk+7=mM0yg3RdkdU9`Xe_VW7TxVhklixW-S51`}+NR>Z d+Ixr@y8u>P6SCqpiBbRn002ovPDHLkV1kEiA;16t literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/wma.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/wma.png new file mode 100644 index 0000000000000000000000000000000000000000..017b00da90f5f743e448303e13a74aed5f27494f GIT binary patch literal 643 zcmV-}0(||6P)#_p*zkRy zNrnOp1DdGG>^V}+I4~yliNsLEFp@8BW4pS|aU`@pF&%N2FgYl;IDZpQKRtmoFjZJ7 zkl_MM9u9~2U9C=Sw9FV*bE_zQ-$JEQf$O^5Y<2{m?fB>jsZ$qL^&b))c zV1Ps-!8y9}OC#j-dDQE5#9}cb1qFKSm+mZ~rj!*51^U(_m|+FcXcU=D2A{hh@#^?F zetbJY`|zA|bCEeXjzjN-RO(wWG4s;?_y>6Q^C311U+~s@4fF3;%JTU%n@w~&|6tpe zPv+W!2QL0DE@kkYvLB(JbK4n8;u5Xxg6-VmP%Xi0qiqDN>;M0WJ%BSB+W+h z6p5h-vfuB^ot<6IZEUQ6pnk+7=mM0yg3RdkdU9`Xe_VW7TxVhklixW-S51`}+NR>Z d+Ixr@y8u>P6SCqpiBbRn002ovPDHLkV1kEiA;16t literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/files/small/xls.png b/manager/media/browser/mcpuk/themes/evo/img/files/small/xls.png new file mode 100644 index 0000000000000000000000000000000000000000..573d141430ea557def4abfd472e56393573973ed GIT binary patch literal 673 zcmV;S0$%-zP)6HydB?_)C`tNsE_LIM^^XJ_HAZn+8~h?SLv zm8)PS3ohG=B7!J_-ByeH11!Q8u8ns2APHE7tZYad5|Yf<_1%|boVD@5nfva0@7#0m z%m^ZaxPAE{!gvFa0z?A;gP;ToHTpU@(wzI+xqof*#$6%Jz9J~Sqyi-8hEiLm`-dOD zO8`d_U|%6zFT&oP$8b#C-+qFe8zJX~h9>$8I(`h-P2f5LAOb^U31>aV`=1}+ttYtX z`5c$7fR=y~ijAO!w1kl2Tmjcl@cjBS_&E>rWMXnFG8BfA*DSO})_4X=G93_N_dU?C>Tfe*V(KfxdW-Ng8d4`VsWe8ZXZu)Gbk2F>tv%?u0=|_Pg?7nMthQu zzz2h~GvxDmygRvsEbir-$lj||Drqh=C%9t7?8?}@YRO=M6;`X&RS`-HWGnwZJ+&<} zzWrLTeeeL?ZWoMBr(+|J%}A3%p|CZbPH8k6(PT2Adc96T5KtI~)ND2>j$<2>B%xNT z#d!>1gS9$4LciZfsZ`=_*wsdcdBGSA1{e;9cF*O%2?)-0Fq_S2JRTEw(r7fSdlW^f zbFEh6XwP?dUmO5X*$(Vby6HydB?_)C`tNsE_LIM^^XJ_HAZn+8~h?SLv zm8)PS3ohG=B7!J_-ByeH11!Q8u8ns2APHE7tZYad5|Yf<_1%|boVD@5nfva0@7#0m z%m^ZaxPAE{!gvFa0z?A;gP;ToHTpU@(wzI+xqof*#$6%Jz9J~Sqyi-8hEiLm`-dOD zO8`d_U|%6zFT&oP$8b#C-+qFe8zJX~h9>$8I(`h-P2f5LAOb^U31>aV`=1}+ttYtX z`5c$7fR=y~ijAO!w1kl2Tmjcl@cjBS_&E>rWMXnFG8BfA*DSO})_4X=G93_N_dU?C>Tfe*V(KfxdW-Ng8d4`VsWe8ZXZu)Gbk2F>tv%?u0=|_Pg?7nMthQu zzz2h~GvxDmygRvsEbir-$lj||Drqh=C%9t7?8?}@YRO=M6;`X&RS`-HWGnwZJ+&<} zzWrLTeeeL?ZWoMBr(+|J%}A3%p|CZbPH8k6(PT2Adc96T5KtI~)ND2>j$<2>B%xNT z#d!>1gS9$4LciZfsZ`=_*wsdcdBGSA1{e;9cF*O%2?)-0Fq_S2JRTEw(r7fSdlW^f zbFEh6XwP?dUmO5X*$(Vbyg>o!RXzU9YTcHi$~9*k$L zh39!K02fe{hyRx)42k9qM!uuydqTt7U;rD}HsZ?yc-M$B)6o68Buop$} zeUA|Acc0JkOaIPQ>QnAaJCByAT4kS`9%VQVRGS3zGsInMeVwHQ4<07CPR> z+4(v?Y<$LzYfES>T*Unc4-tkT&uXo~rlo-IvFqzs&vAEo5lfd_*cxtQ>-!E?u3y5P zD`)WXMTbo&>7gTVtnqk^=CNI@eO$+npCjz00j)0rh$vagsr611S{|6?c;pbPgdD&rtCW zrV{|1;P;;xjrs{_W00$yqDp8bps7ox%O%e4fD`zHC`yo~DJ%&XlM`7I*?|%XUB*AW zgZ(`WX?X#1SeQaYyCWEkb~8x-H2VEMs@19iAed+^3$4(iY!pS7+^v+-Dy6J*p|g^X zvAtf8yAYY}JnO7EbK;f)w=*GZ6vsyjxaxMh{BL#j=>~v`<4p;;VKGfC-5mylfqeYr r(YpyUWA-|GjH9o$CVZuNiHZ6PI{ai^lyLx000000NkvXXu0mjfCleZK literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/icons/close.png b/manager/media/browser/mcpuk/themes/evo/img/icons/close.png new file mode 100644 index 0000000000000000000000000000000000000000..44197a49d15b45694ebef2152d10ca915e36b28b GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Yk*IPE0AuOHitqKeQSyY&>*pr zAirRS57ka$0^iR1Kf1of^xXChzTPTKj5^PE=FI}CsP=Sm43W5;+kczykO7bL+-2X( zq@@r4|G&~f#Dw$h9+yIqo5yqwMJ5U<&CxP>^3dASL^akkc#**Yjwu<*53Vl%#=Lqi z*VmgGGi6UPIn3CQZlo=Al=Ux%QEbE;)p-3z>9osxWhHp*Zwp(Tz1Ez2KcRU|{l(Xz ec^`|+_b^tmvQ6u&{xJ%3=?%R| zB9gcl(ejd{D3@?k7&hPjAJ)h6#`}%uMnx9~~iIKGt z4u>=0d2@u=YNdPe`q;OwJYq4n%s{yTs6QNvMvK)D&Ql79Kmbo64ugb{SQ-;q54q!T zlZbLr02;veWlCTLNvy+=Gzt~Q#^KyOG%B$q972H*C`_(o5&NraiGWyQ^O*D)@5RQ-7%R6e1@RmEaI1- z0{DIa8&*RAjRZPNKvxiOrI08ti|BOvLVyZVKr%=rQ>e}qI@5*91VLc*A!6Rt(om+5 z<2C9FvsgqKimI4oa&&YwDcXeutHa0?H#aw(29@fJA)JvIB`Vf9E0H;43LFTLsO2hD z4l4njqBsPOLRmyC(l03}R9|J4$Y`0cf{`_16`4W;bt#Pj`TYNfDimMQ2r7iW#rvPa zh$uz{k%bTfN2w)P<3i`?T&b9BH6%u1wFrhI#;WKigHaff!7705PXqX3iCn3(KjZm) zCQpf=Vx`IkR-Tb}SZo+3?4`HlqNRS@B7ZGYV3fyw<{ zL4B({Nr73xdAXAVSB4A9Z`JK;7|d+^cqBsH(A{=1ztsCqLXO#KuiCua(;rnXj=2%? zg9`h~EqlJB>sPl2Ge|=Z&h8xUY(rw36y}X<9(FVrzUXE3FX4N{@ zk9Ha6kDt|;WR}e=Fi^}aKTugrh;vnNm#K)e4KIPd47qV>*plS_GZYbQcI5KGlDeE6 zZ|~*(!bQja#AhDGD+^|}(zTaT&fELVm7aP*TkI3+bG&+^Me*kJEGy0;o1{$~)$7+` zgjf8cm^fqeO~I613r^`7IE6d)T`1{FerYhVD8A}^gS)1@LchPzksCb!=bXWy-jXtI zs;R(zTGIZ4`AtzzwintMzx8@~+rn(gke=gSVMe`W_Vv`*QP z=Iy1x>UsWB%9W;VL%WMVG=py{s$T{?T0?ker+3GC*$kuY)~WM0-Hfq6dQTXCFUn-Y z1Fu)zHBaL^Pgo8NoXnp!Usk;INMr34gGn&UW2OoR!xvr=#L?JWp&UYK`TTHHu%OMRN8|MdMj==|+j7uzq9de;cIUbCLv^BBKB zT17|+x(nL8GcfI*=ZoK8ypZ!yXz(K1yIb)5KD1RWKr8f5NHQ(D9M-;telowhF7w0l zD7q()!5wzKO?A9lvrkw*m_Rtk+oGacyDwFa3}_5{=hc7urGdSV_Wp9JhaLfE>lpgI TacTE4-T#lr6>zl6f)oD%_u>Ap literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/img/loading.gif b/manager/media/browser/mcpuk/themes/evo/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f5cedca13c26dca85ee2c61267579b27a7eaca5 GIT binary patch literal 2355 zcmZ?wbhEHb)L_tHn8?KN|NsAGr#=Bm1_lPj|J;7AA;Hd$0j@@R2F#2gp`R?QTntPM zIzTp1g9ZZwQ(RB~g41_7l8dgKv|i1&sTQ79Fxb_Usyw@`F zAO2Q2C0t0?VVdglN2gHcOu?#^9KUzy-#Nh^dt2n*%bNV( zj3rVsh3P8)`n*;9f0n4#2EH9hPD7wzzE#*5t1Ky68Z3 z^wl}8?K|TQJMX0S-&LrH30rdg>1XVA0;97Mx1HQ?P8grPAvNzcIBXdeFTVIKJJs{v zrJqX#yDuy=;hJrG&-{p@qB(HYy*KNE+Q z+|r<+Wqf->>f8%+{tt}JyA}#mJW(z5juQTs;u^S5zL;y3(niI+le3xPkLVVi-KMK` z*0SvQ-Dcsd;k$y@#okV2#TuC`O)Gal<5!$*e9NPF*PWMlO65h1l0&1^C$Cz4De1kK zy>YCx`K0RV^}iX*86P;_P?nnNoYFV5Nf| zQ`+W#Ece7=r##rsj47w!c7pQea$w%P?DQU(H-pm4Cn#6v-}us0G9_s6Hmt$PfPhUB{;LMYU?$iojt$5Zaa`% z-;l;Uz}^#-OcrnEir!@`W1k6sHMUWhsMNl60;vl}IpYtG*MbIHqi=blcb^@cb61SbmMG$KV1C@%Pmj0PI ztb`On43Hv7o_a-)PXp0K5CgS}pdMzTiy#JS6+u1xAUl)s6+!0IE`oaUK}{0eMUXM1 L2$CnW2(ktMC>-$3 literal 0 HcmV?d00001 diff --git a/manager/media/browser/mcpuk/themes/evo/init.js b/manager/media/browser/mcpuk/themes/evo/init.js new file mode 100644 index 0000000000..a5072312e4 --- /dev/null +++ b/manager/media/browser/mcpuk/themes/evo/init.js @@ -0,0 +1,4 @@ +// If this file exists in theme directory, it will be loaded in section + +var imgLoading = new Image(); +imgLoading.src = 'themes/oxygen/img/loading.gif'; diff --git a/manager/media/browser/mcpuk/themes/evo/style.css b/manager/media/browser/mcpuk/themes/evo/style.css new file mode 100644 index 0000000000..08c0f4dbf0 --- /dev/null +++ b/manager/media/browser/mcpuk/themes/evo/style.css @@ -0,0 +1,666 @@ +@import "../../../../style/common/font-awesome/css/font-awesome.min.css?v=4.7.0"; +body { + background: #FFF; +} + +input { + margin: 0; +} + +input[type="radio"], input[type="checkbox"], label { + cursor: pointer; +} +input[name="newName"] { +width:98%!important; +} +input[type="text"] { + border: 1px solid #d3d3d3; + background: #fff; + padding: 2px; + font-size:1.5rem; + margin: 0; + outline-width: 0; + +} + +input[type="text"]:hover { + box-shadow: 0 -1px 0 rgba(0,0,0,0.2); + -moz-box-shadow: 0 -1px 0 rgba(0,0,0,0.2); + -webkit-box-shadow: 0 -1px 0 rgba(0,0,0,0.2); +} + +input[type="text"]:focus { + border-color: #3687e2; + box-shadow: 0 0 3px rgba(54,135,226,1); + -moz-box-shadow: 0 0 3px rgba(54,135,226,1); + -webkit-box-shadow: 0 0 3px rgba(54,135,226,1); +} + +input[type="button"], input[type="submit"], input[type="reset"], button { + font-size:1.1rem; + line-height:2rem; + color: #292b2c; + background-color: #fff; + border: 1px solid #d4d4d4; + padding: 0.3rem 0.6rem; + margin-left: 2px; + display: inline-block; + cursor:pointer; +} + +input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover, button:hover { + {color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +} + +input[type="button"]:focus, input[type="submit"]:focus, input[type="reset"]:focus, button:focus { + {color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +} + +fieldset { + margin: 0 5px 5px 0px; + padding: 5px; + border: 1px solid #dedede; + cursor: default; +} + +fieldset td { + white-space: nowrap; +} + +legend { + margin: 0; + padding:0 3px; + font-weight: bold; +} + +#folders { + margin: 0; + background: #fafafa; + border:0; + border-right: 1px solid #dedede; + border-bottom: 1px solid #dedede; +} + +#files { + float: left; + margin: 0 4px 0 0; + background: #fafafa; + border: 1px solid #dedede; + border-left:0; +} + +#files.drag { + background: #ddebf8; +} + +#topic { + padding-left: 12px; +} + + +div.folder { + padding-top: 2px; + margin-top: 4px; + white-space: nowrap; +} + +div.folder a { + text-decoration: none; + cursor: default; + outline: none; + color: #000; +} + +span.folder { + font-size:1.1rem; + line-height:1.2rem; + padding: 2px 3px 2px 3px; + outline: none; + background: no-repeat 3px center; + cursor: pointer; + border: 1px solid transparent; +} + +span.brace { + width: 16px; + height: 16px; + outline: none; +} + +span.current { + background-color: #e4f0fa; + border-color: #e4f0fa; + color: #0e80cb; +} +span.current:before { + font-family: FontAwesome; + font-size:1.3rem; + content: "\f07c"; + display: inline-block; + padding-right: 4px; + vertical-align: middle; + color: #565656; +} + +span.regular { + background-color: #f8f7f6; +} +span.regular:before { + font-family: FontAwesome; + font-size:1.3rem; + content: "\f07b"; + display: inline-block; + padding-right: 4px; + vertical-align: top; + color: #565656; +} +span.regular:hover, span.context { + background-color: #ddebf8; + border-color: #cee0f4; + color: #000; +} + +span.opened:before { + font-family: FontAwesome; + font-size:1.3rem; + content: "\f107";/*fa-angle-down*/ + display: inline-block; + padding-right: 2px; + margin-top: -1px; + vertical-align: top; + color: #565656; +} + +span.closed:before { + font-family: FontAwesome; + font-size:1.3rem; + content: "\f105";/*fa-angle-right*/ + display: inline-block; + padding-right: 1px; + margin-top: -1px; + vertical-align: top; + color: #565656; +} + +span.denied:before { + font-family: FontAwesome; + font-size:1.3rem; + content: "\f05e"; + display: inline-block; + padding-right: 1px; + vertical-align: top; + color: #565656; +} + +div.file { + padding: 4px; + margin: 3px; + border: 1px solid #aaa; + background: #fff; +} + +div.file:hover { + background: #ddebf8; + border-color: #a7bed7; +} + +div.file .name { + margin-top: 4px; + font-weight: bold; + height: 16px; + overflow: hidden; +} + +div.file .time { + font-size: 10px; +} + +div.file .size { + font-size: 10px; +} + +#files div.selected, +#files div.selected:hover { + background-color: #5b9bda; + border-color: #2973bd; + color: #fff; +} + +tr.file > td { + padding: 3px 4px; + background-color: #f8f7f6 +} + +tr.file:hover > td { + background-color: #ddebf8; +} + +tr.selected > td, +tr.selected:hover > td { + background-color: #5b9bda; + color: #fff; +} +#collapseSide {padding: 5px 0;display: inline-block;float:left;margin: 0 0 0 5px;} +#hide-side { + display:inline-block; + width:20px; + text-align:center; + font-size:1.3rem; + color: #5a5a5a; + background-color: trasparent; + border: none; + padding: 0.7rem 0.6rem 0.4rem 0.6rem; + margin: 0px; +} +#hide-side i.fa:hover {color:#292b2c;} +#toolbar { + min-width:500px; + padding: 5px 0 5px 0; + display: inline-block; + float:left; + margin-top:2px; +} + +#toolbar a { + font-size:1.1rem; + line-height:2rem; + color: #292b2c; + background-color: #fff; + border: 1px solid #d4d4d4; + padding: 0.3rem 0.6rem; + margin-left: 5px; + display: block; + float: left; +} +#toolbar a:before { + font-family: FontAwesome; + font-size:1.3rem; + display: inline-block; + padding-right:3px; + margin-top:0px; + vertical-align: top; + color: #404040; +} + +#toolbar a:hover, +#toolbar a.hover { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } + +#toolbar a.selected, #toolbar a.selected:before { + background-color: #3687e2; border-color: #3687e2; color:#FFF; +} +#toolbar a[href="kcact:upload"] { color: #fff; background-color: #5cb85c; border-color: #56ac56 } +#toolbar a[href="kcact:upload"]:hover { color: #fff; background-color: #449d44; border-color: #419641 } + +#toolbar a[href="kcact:upload"]:before { + content: "\f093"; + color: #fff; +} + +#toolbar a[href="kcact:refresh"]:before { + content: "\f021"; +} +#toolbar a[href="kcact:settings"]:before { + content: "\f0ad"; +} +#toolbar a[href="kcact:about"], #toolbar a:hover[href="kcact:about"] { + border:none;padding:none;background:transparent; +} + +#toolbar a[href="kcact:about"]:before { + content: "\f05a"; +} +#toolbar a[href="kcact:maximize"]:before { + content: "\f2d0"; +} +/*try to hide Maximize button except in popup*/ +@media screen and (min-width: 840px) { + #toolbar a[href="kcact:maximize"], #toolbar a[href="kcact:maximize"]:before { + display: none; + } +} +@media screen and (max-width: 780px) { + #toolbar a[href="kcact:maximize"], #toolbar a[href="kcact:maximize"]:before { + display: none; + } +} +/*fake btn*/ +#viewThumbs, #viewList {display:none;float:left;margin:0 0px 0 -30px;} +label.radio-thumbs:before { + display:block; + float:left; + font-family: FontAwesome; + font-size:1.4rem; + line-height:1.6rem; + vertical-align: middle; + content: "\f00a"; + color: #292b2c; + background-color: #fff; + border: 1px solid #d4d4d4; + padding: 0.5rem 0.6rem; + margin-left: 5px; +} + +label.radio-list:hover:before, label.radio-thumbs:hover:before { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +label.radio-list.labelchecked:before, label.radio-thumbs.labelchecked:before { + background-color: #3687e2; border-color: #3687e2; color:#FFF; +} +label.radio-list:before { + display:block; + float:left; + font-family: FontAwesome; + font-size:1.4rem; + line-height:1.6rem; + vertical-align: middle; + content: "\f03a"; + color: #292b2c; + background-color: #fff; + border: 1px solid #d4d4d4; + padding: 0.5rem 0.6rem; + margin-left: 5px; +} +input[type=checkbox] + label { + color: #ccc; + font-style: italic; +} +input[type=checkbox]:checked + label { + color: #f00; + font-style: normal; +} + +#settings { + background: #fff; + padding:5px; +} +.box { + width:500px; +} +.box, #loading, #alert { + padding: 5px; + border: 1px solid #3687e2; + background: #FFF; +} + +.box, #alert { + padding: 8px; + border-color: #fff; + -moz-box-shadow: 0 0 4px rgba(255,255,255,1); + -webkit-box-shadow: 0 0 4px rgba(255,255,255,1); + box-shadow: 0 0 4px rgba(255,255,255,1); +} + +#loading { + background-image: url(img/loading.gif); + font-weight: bold; + margin-right: 4px; + box-shadow: 0 0 3px rgba(54,135,226,1); + -moz-box-shadow: 0 0 3px rgba(54,135,226,1); + -webkit-box-shadow: 0 0 3px rgba(54,135,226,1); +} + +#alert div.message, #dialog div.question { + padding: 0 0 0 40px; +} + +#alert { + background: #ff6347 url(img/alert.png) no-repeat 8px 29px; +} + +#dialog div.question { + background: transparent url(img/confirm.png) no-repeat 0 0; +} + +#alert div.ok, #dialog div.buttons { + padding-top: 5px; + text-align: right; +} + +.menu { + min-width:180px; + padding: 3px; + border: 1px solid #dedede; + background: #FFF; + opacity: 0.95; +} + +.menu a { + font-size:1.2rem; + text-decoration: none; + padding: 4px 4px 4px 4px; + color: #000; + margin: 0; + outline: none; + border: 1px solid transparent; +} +.menu a:before { + font-family: FontAwesome; + font-size:1.4rem; + display: inline-block; + padding-right:4px; + margin-top:0px; + vertical-align: top; + color: #404040; +} +.menu .delimiter { + border-top: 1px solid #acaaa7; + padding-bottom: 3px; + margin: 3px 2px 0 2px; +} + +.menu a:hover { + background-color: #0e80cb; + color:#FFF; +} +.menu a:hover:before { + color:#FFF; +} +.menu a[href="kcact:refresh"]:before { + content: "\f021"; +} +.menu a[href="kcact:mkdir"]:before { + content: "\f114"; +} + +.menu a[href="kcact:mvdir"]:before, .menu a[href="kcact:mv"]:before { + content: "\f246"; +} + +.menu a[href="kcact:rmdir"]:before, .menu a[href="kcact:rm"]:before, .menu a[href="kcact:rmcbd"]:before { + content: "\f1f8"; +} + +.menu a[href="kcact:clpbrdadd"]:before { + content: "\f0ea"; +} + +.menu a[href="kcact:pick"]:before, .menu a[href="kcact:pick_thumb"]:before { + content: "\f00c"; +} + +.menu a[href="kcact:download"]:before { + content: "\f019"; +} + +.menu a[href="kcact:view"]:before { + content: "\f06e"; +} + +.menu a[href="kcact:cpcbd"]:before { + content: "\f24d"; +} + +.menu a[href="kcact:mvcbd"]:before { + content: "\f047"; +} + +.menu a[href="kcact:clrcbd"]:before { + content: "\f12d"; +} + +a.denied { + color: #666; + opacity: 0.5; + filter: alpha(opacity:50); + cursor: default; +} + +a.denied:hover { + background-color: #e4e3e2; + border-color: transparent; + box-shadow: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; +} + +#dialog { + -moz-box-shadow: 0 0 5px rgba(0,0,0,0.5); + -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.5); + box-shadow: 0 0 5px rgba(0,0,0,0.5); +} + +#dialog input[type="text"] { + margin: 5px 0; + width: 200px; +} + +#dialog div.slideshow { + border: 1px solid #000; + padding: 5px 5px 3px 5px; + background: #000; + -moz-box-shadow: 0 0 8px rgba(255,255,255,1); + -webkit-box-shadow: 0 0 8px rgba(255,255,255,1); + box-shadow: 0 0 8px rgba(255,255,255,1); +} + +#dialog img { + padding: 0; + margin: 0; + background: url(img/bg_transparent.png); +} + +#loadingDirs { + padding: 5px 0 1px 24px; +} + +.about { + text-align: center; +} + +.about div.head { + font-weight: bold; + font-size: 12px; + padding: 3px 0 8px 0; +} + +.about div.head a { + background: url(img/kcf_logo.png) no-repeat left center; + padding: 0 0 0 27px; + font-size: 17px; +} + +.about a { + text-decoration: none; + color: #0055ff; +} + +.about a:hover { + text-decoration: underline; +} + +.about button { + margin-top: 8px; +} + +#clipboard { + padding: 0 4px 1px 0; +} + +#clipboard div { + background: url(img/icons/clipboard.png) no-repeat center center; + border: 1px solid transparent; + padding: 1px; + cursor: pointer; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +#clipboard div:hover { + background-color: #bfbdbb; + border-color: #a9a59f; +} + +#clipboard.selected div, #clipboard.selected div:hover { + background-color: #c9c7c4; + border-color: #3687e2; +} + +#checkver { + padding-bottom: 8px; +} +#checkver > span { + padding: 2px; + border: 1px solid transparent; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +#checkver > span.loading { + background: url(img/loading.gif); + border: 1px solid #3687e2; + box-shadow: 0 0 3px rgba(54,135,226,1); + -moz-box-shadow: 0 0 3px rgba(54,135,226,1); + -webkit-box-shadow: 0 0 3px rgba(54,135,226,1); +} + +#checkver span { + padding: 3px; +} + +#checkver a { + font-weight: normal; + padding: 3px 3px 3px 20px; + background: url(img/icons/download.png) no-repeat left center; +} + +div.title { + overflow: auto; + text-align: center; + margin: -3px -5px 5px -5px; + padding-left: 19px; + padding-bottom: 2px; + border-bottom: 1px solid #bbb; + font-size: 2rem; + cursor: move; +} + +.about div.title { + cursor: default; +} + +span.close, span.clicked { + float: right; + width: 19px; + height: 19px; + background: url(img/icons/close.png) no-repeat; + margin-top: 0px; + cursor: pointer; +} +.selectThis { + padding: 6px 0; + border-radius: 2px; + background: #EEE; + color: #4EA94E; + cursor: pointer; + text-transform: uppercase; +} +.selectThis:hover { + background-color: #fff; +} + +.pull-right { + position:absolute; +} +.pull-right a { + color:#bbb!important; +} \ No newline at end of file From 7c0e73babf711dd08a87f7d9f1ab659b387ab233 Mon Sep 17 00:00:00 2001 From: Nicola Date: Fri, 27 Oct 2017 21:34:37 +0200 Subject: [PATCH 305/577] update mcpuck template --- .../media/browser/mcpuk/tpl/tpl_browser.php | 60 ++++++++++++++----- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/manager/media/browser/mcpuk/tpl/tpl_browser.php b/manager/media/browser/mcpuk/tpl/tpl_browser.php index 2838e4e480..46fa003482 100644 --- a/manager/media/browser/mcpuk/tpl/tpl_browser.php +++ b/manager/media/browser/mcpuk/tpl/tpl_browser.php @@ -19,30 +19,26 @@
      -
      - - - + + +
      From 82985c89e0c2fa93a3dd10e26f44cae66ee920f7 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 31 Oct 2017 13:04:48 +0100 Subject: [PATCH 314/577] not needed bg color --- assets/modules/store/css/style.css | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/modules/store/css/style.css b/assets/modules/store/css/style.css index a0afe499d4..345e13abab 100644 --- a/assets/modules/store/css/style.css +++ b/assets/modules/store/css/style.css @@ -125,7 +125,6 @@ body {padding:0;margin:0;overflow-x:hidden;} } .item_list .catalog_item .item_content:hover { - background: #fff; border: 1px solid #3697cd; } .row-category H3 { From ae3617e82bb56c5ee0d3edeb1b6a89833da575b2 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 31 Oct 2017 17:16:24 +0100 Subject: [PATCH 315/577] [i] added head and body attributes to widget array Improvement: added head and body attributes to widget array, to allow customize widget header and body ``` $widgets['test'] = array( 'menuindex' =>'1', 'id' => 'test', 'cols' => 'col-sm-6', 'icon' => 'fa-rss', 'title' => 'test', 'headAttr' => 'style="background-color:#2ECC71; color:#FFFFFF;"', 'bodyAttr' => ''style="background-color:#58D68D; color:#FFFFFF;"',', 'body' => '
      [+modx_news_content+]
      ', 'hide'=>'0' ); $e->output(serialize($widgets)); ``` --- manager/actions/welcome.static.php | 1242 ++++++++++++++-------------- 1 file changed, 621 insertions(+), 621 deletions(-) diff --git a/manager/actions/welcome.static.php b/manager/actions/welcome.static.php index 7b2756b026..362c923f7d 100644 --- a/manager/actions/welcome.static.php +++ b/manager/actions/welcome.static.php @@ -1,622 +1,622 @@ -INCLUDE_ORDERING_ERROR


      Please use the MODX Content Manager instead of accessing this file directly.'); -} - -unset($_SESSION['itemname']); // clear this, because it's only set for logging purposes - -if($modx->hasPermission('settings') && (!isset($settings_version) || $settings_version != $modx->getVersionData('version'))) { - // seems to be a new install - send the user to the configuration page - exit(''); -} - -// set placeholders -$ph = $_lang; - -// setup message info -if($modx->hasPermission('messages')) { - include_once(MODX_MANAGER_PATH . 'includes/messageCount.inc.php'); - $_SESSION['nrtotalmessages'] = $nrtotalmessages; - $_SESSION['nrnewmessages'] = $nrnewmessages; - - $msg = array(); - $msg[] = sprintf('', $_style['icons_mail_large']); - $nrnewmessages = $_SESSION['nrnewmessages'] > 0 ? ' (' . $_SESSION['nrnewmessages'] . ')' : ''; - $msg[] = sprintf(' [%%inbox%%]%s
      ', $nrnewmessages); - $nrnewmessages = $_SESSION['nrnewmessages'] > 0 ? '' . $_SESSION['nrnewmessages'] . '' : '0'; - $welcome_messages = sprintf($_lang['welcome_messages'], $_SESSION['nrtotalmessages'], $nrnewmessages); - $msg[] = sprintf('%s', $welcome_messages); - $ph['MessageInfo'] = join("\n", $msg); -} - -// setup icons -if($modx->hasPermission('new_user') || $modx->hasPermission('edit_user')) { - $icon = ' [%security%]'; - $ph['SecurityIcon'] = wrapIcon($icon, 75); -} -if($modx->hasPermission('new_web_user') || $modx->hasPermission('edit_web_user')) { - $icon = ' [%web_users%]'; - $ph['WebUserIcon'] = wrapIcon($icon, 99); -} -if($modx->hasPermission('new_module') || $modx->hasPermission('edit_module')) { - $icon = ' [%modules%]'; - $ph['ModulesIcon'] = wrapIcon($icon, 106); -} -if($modx->hasPermission('new_template') || $modx->hasPermission('edit_template') || $modx->hasPermission('new_snippet') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('new_plugin') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('manage_metatags')) { - $icon = ' [%elements%]'; - $ph['ResourcesIcon'] = wrapIcon($icon, 76); -} -if($modx->hasPermission('bk_manager')) { - $icon = ' [%backup%]'; - $ph['BackupIcon'] = wrapIcon($icon, 93); -} -if($modx->hasPermission('help')) { - $icon = ' [%help%]'; - $ph['HelpIcon'] = wrapIcon($icon, 9); -} -// do some config checks -if(($modx->config['warning_visibility'] == 0 && $_SESSION['mgrRole'] == 1) || $modx->config['warning_visibility'] == 1) { - include_once(MODX_MANAGER_PATH . 'includes/config_check.inc.php'); - if($config_check_results != $_lang['configcheck_ok']) { - $ph['config_check_results'] = $config_check_results; - $ph['config_display'] = 'block'; - } else { - $ph['config_display'] = 'none'; - } -} else { - $ph['config_display'] = 'none'; -} - -// Check logout-reminder -if(isset($_SESSION['show_logout_reminder'])) { - switch($_SESSION['show_logout_reminder']['type']) { - case 'logout_reminder': - $date = $modx->toDateFormat($_SESSION['show_logout_reminder']['lastHit'], 'dateOnly'); - $ph['logout_reminder_msg'] = str_replace('[+date+]', $date, $_lang['logout_reminder_msg']); - break; - } - $ph['show_logout_reminder'] = 'block'; - unset($_SESSION['show_logout_reminder']); -} else { - $ph['show_logout_reminder'] = 'none'; -} - -// Check multiple sessions -$where = sprintf("internalKey='%s'", $modx->db->escape($_SESSION['mgrInternalKey'])); -$rs = $modx->db->select('count(*) AS count', '[+prefix+]active_user_sessions', $where); -$count = $modx->db->getValue($rs); -if($count > 1) { - $ph['multiple_sessions_msg'] = $modx->parseText($_lang['multiple_sessions_msg'], array( - 'username' => $_SESSION['mgrShortname'], - 'total' => $count - )); - $ph['show_multiple_sessions'] = 'block'; -} else { - $ph['show_multiple_sessions'] = 'none'; -} - -$ph['RecentInfo'] = getRecentInfo(); - -$tpl = ' - - - - - - - - - - - - - - - - - - - - - -
      [%yourinfo_username%][+username+]
      [%yourinfo_role%][+role+]
      [%yourinfo_previous_login%][+lastlogin+]
      [%yourinfo_total_logins%][+logincount+]
      [%inbox%][+msginfo+]
      '; - -$nrnewmessages = '' . $_SESSION['nrnewmessages'] . ''; - -$ph['UserInfo'] = $modx->parseText($tpl, array( - 'username' => $modx->getLoginUserName(), - 'role' => $_SESSION['mgrPermissions']['name'], - 'lastlogin' => $modx->toDateFormat($_SESSION['mgrLastlogin'] + $server_offset_time), - 'logincount' => $_SESSION['mgrLogincount'] + 1, - 'msginfo' => sprintf($_lang['welcome_messages'], $_SESSION['nrtotalmessages'], $nrnewmessages) -)); - -$from = array(); -$from[] = '[+prefix+]active_user_sessions'; -$from[] = " us LEFT JOIN [+prefix+]active_users au ON au.sid=us.sid WHERE au.action <> '8'"; -$rs = $modx->db->select('*', $from, '', 'username ASC, au.sid ASC'); - -if($modx->db->getRecordCount($rs) < 1) { - $html = '

      [%no_active_users_found%]

      '; -} else { - include_once(MODX_MANAGER_PATH . 'includes/actionlist.inc.php'); - $now = $_SERVER['REQUEST_TIME'] + $server_offset_time; - $ph['now'] = strftime('%H:%M:%S', $now); - $timetocheck = ($now - (60 * 20)); //+$server_offset_time; - $html = ' -
      - [%onlineusers_message%] - [+now+]): -
      -
      - - - - - - - - - - - '; - - $userList = array(); - $userCount = array(); - // Create userlist with session-count first before output - while($activeusers = $modx->db->getRow($rs)) { - $userCount[$activeusers['internalKey']] = isset($userCount[$activeusers['internalKey']]) ? $userCount[$activeusers['internalKey']] + 1 : 1; - - $idle = $activeusers['lasthit'] < $timetocheck ? ' class="userIdle"' : ''; - $webicon = $activeusers['internalKey'] < 0 ? 'Web user ' : ''; - $ip = $activeusers['ip'] === '::1' ? '127.0.0.1' : $activeusers['ip']; - $currentaction = getAction($activeusers['action'], $activeusers['id']); - $userList[] = array( - $idle, - '', - $activeusers['username'], - $webicon, - abs($activeusers['internalKey']), - $ip, - strftime('%H:%M:%S', $activeusers['lasthit'] + $server_offset_time), - $currentaction - ); - } - foreach($userList as $params) { - $params[1] = $userCount[$params[4]] > 1 ? ' class="userMultipleSessions"' : ''; - $html .= "\n\t\t" . vsprintf('', $params); - } - - $html .= ' - -
      [%onlineusers_user%]ID[%onlineusers_ipaddress%][%onlineusers_lasthit%][%onlineusers_action%]                   
      %s%s%s%s%s%s
      -
      -'; -} -$ph['OnlineInfo'] = $html; - -// include rss feeds for important forum topics -include_once(MODX_MANAGER_PATH . 'includes/rss.inc.php'); -$ph['modx_security_notices_content'] = $feedData['modx_security_notices_content']; -$ph['modx_news_content'] = $feedData['modx_news_content']; - -$ph['theme'] = $modx->config['manager_theme']; -$ph['site_name'] = $modx->config['site_name']; -$ph['home'] = $_lang['home']; -$ph['logo_slogan'] = $_lang['logo_slogan']; -$ph['welcome_title'] = $_lang['welcome_title']; -$ph['search'] = $_lang['search']; -$ph['settings_config'] = $_lang['settings_config']; -$ph['configcheck_title'] = $_lang['configcheck_title']; -$ph['online'] = $_lang['online']; -$ph['onlineusers_title'] = $_lang['onlineusers_title']; -$ph['recent_docs'] = $_lang['recent_docs']; -$ph['activity_title'] = $_lang['activity_title']; -$ph['info'] = $_lang['info']; -$ph['yourinfo_title'] = $_lang['yourinfo_title']; - -$ph['modx_security_notices'] = $_lang['security_notices_tab']; -$ph['modx_security_notices_title'] = $_lang['security_notices_title']; -$ph['modx_news'] = $_lang['modx_news_tab']; -$ph['modx_news_title'] = $_lang['modx_news_title']; - -$modx->toPlaceholders($ph); - -$script = getStartUpScript(); -$modx->regClientScript($script); - -// invoke event OnManagerWelcomePrerender -$evtOut = $modx->invokeEvent('OnManagerWelcomePrerender'); -if(is_array($evtOut)) { - $output = implode('', $evtOut); - $ph['OnManagerWelcomePrerender'] = $output; -} - -$widgets['welcome'] = array( - 'menuindex' => '10', - 'id' => 'welcome', - 'cols' => 'col-sm-6', - 'icon' => 'fa-home', - 'title' => '[%welcome_title%]', - 'body' => ' - -
      - - - - - - - - - - - - - - - - - - - - - - - -
      [%yourinfo_username%][[#getLoginUserName]]
      [%yourinfo_role%][[$_SESSION[\'mgrPermissions\'][\'name\'] ]]
      [%yourinfo_previous_login%][[$_SESSION[\'mgrLastlogin\']:math(\'%s+[(server_offset_time)]\'):dateFormat]]
      [%yourinfo_total_logins%][[$_SESSION[\'mgrLogincount\']:math(\'%s+1\')]]
      [%inbox%][[#getMessageCount]]
      -
      - ', - 'hide'=>'0' -); -$widgets['onlineinfo'] = array( - 'menuindex' => '20', - 'id' => 'onlineinfo', - 'cols' => 'col-sm-6', - 'icon' => 'fa-user', - 'title' => '[%onlineusers_title%]', - 'body' => '
      [+OnlineInfo+]
      ', - 'hide'=>'0' -); -$widgets['recentinfo'] = array( - 'menuindex' => '30', - 'id' => 'modxrecent_widget', - 'cols' => 'col-sm-12', - 'icon' => 'fa-pencil-square-o', - 'title' => '[%activity_title%]', - 'body' => '
      [+RecentInfo+]
      ', - 'hide'=>'0' -); -if ($modx->config['rss_url_news']) { - $widgets['news'] = array( - 'menuindex' => '40', - 'id' => 'news', - 'cols' => 'col-sm-6', - 'icon' => 'fa-rss', - 'title' => '[%modx_news_title%]', - 'body' => '
      [+modx_news_content+]
      ', - 'hide'=>'0' - ); -} -if ($modx->config['rss_url_security']) { - $widgets['security'] = array( - 'menuindex' => '50', - 'id' => 'security', - 'cols' => 'col-sm-6', - 'icon' => 'fa-exclamation-triangle', - 'title' => '[%security_notices_title%]', - 'body' => '
      [+modx_security_notices_content+]
      ', - 'hide'=>'0' - ); -} - -// invoke OnManagerWelcomeHome event -$sitewidgets = $modx->invokeEvent("OnManagerWelcomeHome", array('widgets' => $widgets)); -if(is_array($sitewidgets)) { - $newwidgets = array(); - foreach($sitewidgets as $widget){ - $newwidgets = array_merge($newwidgets, unserialize($widget)); - } - $widgets = (count($newwidgets) > 0) ? $newwidgets : $widgets; -} - -usort($widgets, function ($a, $b) { - return $a['menuindex'] - $b['menuindex']; -}); - -$tpl = getTplWidget(); -$output = ''; -foreach($widgets as $widget) { - if ($widget['hide'] != '1'){ - $output .= $modx->parseText($tpl, $widget); - } -} -$ph['widgets'] = $output; - -// load template -if(!isset($modx->config['manager_welcome_tpl']) || empty($modx->config['manager_welcome_tpl'])) { - $modx->config['manager_welcome_tpl'] = MODX_MANAGER_PATH . 'media/style/common/welcome.tpl'; -} - -$target = $modx->config['manager_welcome_tpl']; -$target = str_replace('[+base_path+]', MODX_BASE_PATH, $target); -$target = $modx->mergeSettingsContent($target); - -if(substr($target, 0, 1) === '@') { - if(substr($target, 0, 6) === '@CHUNK') { - $content = $modx->getChunk(trim(substr($target, 7))); - } elseif(substr($target, 0, 5) === '@FILE') { - $content = file_get_contents(trim(substr($target, 6))); - } else { - $content = ''; - } -} else { - $chunk = $modx->getChunk($target); - if($chunk !== false && !empty($chunk)) { - $content = $chunk; - } elseif(is_file(MODX_BASE_PATH . $target)) { - $content = file_get_contents(MODX_BASE_PATH . $target); - } elseif(is_file(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/welcome.tpl')) { - $content = file_get_contents(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/welcome.tpl'); - } elseif(is_file(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/html/welcome.html')) // ClipperCMS compatible - { - $content = file_get_contents(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/html/welcome.html'); - } else { - $content = file_get_contents(MODX_MANAGER_PATH . 'media/style/common/welcome.tpl'); - } -} - -// merge placeholders -$content = $modx->mergeConditionalTagsContent($content); -$content = $modx->mergeSettingsContent($content); -$content = $modx->parseText($content, $ph); -if(strpos($content, '[+') !== false) { - $modx->toPlaceholders($ph); - $content = $modx->mergePlaceholderContent($content); -} -$content = $modx->parseDocumentSource($content); -$content = $modx->parseText($content, $_lang, '[%', '%]'); -$content = $modx->parseText($content, $_style, '[&', '&]'); -$content = $modx->cleanUpMODXTags($content); //cleanup - -if($js = $modx->getRegisteredClientScripts()) { - $content .= $js; -} - -echo $content; - -// -// -// -// -function getTplWidget() { // recent document info - return ' -
      -
      -
      [+title+]
      -
      [+body+]
      -
      -
      -'; -} - -function getRecentInfo() { // recent document info - global $modx; - - $modx->addSnippet('recentInfoList', 'getRecentInfoList'); - - $html = ' -
      - - - - - - - - - - - - [[#recentInfoList]] - -
      [%id%][%resource_title%][%page_data_edited%][%user%][%mgrlog_action%]
      -
      -'; - return $html; -} - -function getRecentInfoList() { - global $modx; - - $rs = $modx->db->select('*', '[+prefix+]site_content', '', 'editedon DESC', 10); - - if($modx->db->getRecordCount($rs) < 1) { - return '[%no_activity_message%]'; - } - - $tpl = getRecentInfoRowTpl(); - - $btntpl['edit'] = ' '; - $btntpl['preview_btn'] = ' '; - - $output = array(); - while($ph = $modx->db->getRow($rs)) { - $docid = $ph['id']; - $_ = $modx->getUserInfo($ph['editedby']); - $ph['username'] = $_['username']; - - if($ph['deleted'] == 1) { - $ph['status'] = 'deleted text-danger'; - } elseif($ph['published'] == 0) { - $ph['status'] = 'unpublished font-italic text-muted'; - } else { - $ph['status'] = 'published'; - } - - if($modx->hasPermission('edit_document')) { - $ph['edit_btn'] = str_replace('[+id+]', $docid, $btntpl['edit']); - } else { - $ph['edit_btn'] = ''; - } - - $preview_disabled = ($ph['deleted'] == 1) ? 'disabled' : ''; - $ph['preview_btn'] = str_replace(array( - '[+id+]', - '[+preview_disabled+]' - ), array( - $docid, - $preview_disabled - ), $btntpl['preview_btn']); - - if($modx->hasPermission('delete_document')) { - if($ph['deleted'] == 0) { - $delete_btn = ' '; - } else { - $delete_btn = ' '; - } - $ph['delete_btn'] = str_replace('[+id+]', $docid, $delete_btn); - } else { - $ph['delete_btn'] = ''; - } - - if($ph['deleted'] == 1 && $ph['published'] == 0) { - $publish_btn = ' '; - } elseif($ph['deleted'] == 1 && $ph['published'] == 1) { - $publish_btn = ' '; - } elseif($ph['deleted'] == 0 && $ph['published'] == 0) { - $publish_btn = ' '; - } else { - $publish_btn = ' '; - } - $ph['publish_btn'] = str_replace('[+id+]', $docid, $publish_btn); - - $ph['info_btn'] = str_replace('[+id+]', $docid, ''); - - if($ph['longtitle'] == '') { - $ph['longtitle'] = '([%not_set%])'; - } - if($ph['description'] == '') { - $ph['description'] = '([%not_set%])'; - } - if($ph['introtext'] == '') { - $ph['introtext'] = '([%not_set%])'; - } - if($ph['alias'] == '') { - $ph['alias'] = '([%not_set%])'; - } - - $output[] = $modx->parseText($tpl, $ph); - } - return join("\n", $output); -} - -function getRecentInfoRowTpl() { - $tpl = ' - - [+id+] - [+pagetitle+] - [+editedon:math("%s+[(server_offset_time)]"):dateFormat+] - [+username+] - [+edit_btn+][+preview_btn+][+delete_btn+][+publish_btn+][+info_btn+] - - - -
      -
        -
      • [%long_title%]: [+longtitle+]
      • -
      • [%description%]: [+description+]
      • -
      • [%resource_summary%]: [+longtitle+]
      • -
      • [%type%]: [+type:is(reference):then([%weblink%]):else([%resource%])+]
      • -
      • [%resource_alias%]: [+alias+]
      • -
      • [%page_data_cacheable%]: [+cacheable:is(1):then([%yes%]):else([%no%])+]
      • -
      • [%resource_opt_show_menu%]: [+hidemenu:is(0):then([%yes%]):else([%no%])+]
      • -
      • [%page_data_template%]: [+template:templatename+]
      • -
      -
      - - '; - return $tpl; -} - -// setup icons -function wrapIcon($i, $action) { - return sprintf('%s', $action, $i); -} - -function getStartUpScript() { - $script = ' - -'; - return $script; +INCLUDE_ORDERING_ERROR


      Please use the MODX Content Manager instead of accessing this file directly.'); +} + +unset($_SESSION['itemname']); // clear this, because it's only set for logging purposes + +if($modx->hasPermission('settings') && (!isset($settings_version) || $settings_version != $modx->getVersionData('version'))) { + // seems to be a new install - send the user to the configuration page + exit(''); +} + +// set placeholders +$ph = $_lang; + +// setup message info +if($modx->hasPermission('messages')) { + include_once(MODX_MANAGER_PATH . 'includes/messageCount.inc.php'); + $_SESSION['nrtotalmessages'] = $nrtotalmessages; + $_SESSION['nrnewmessages'] = $nrnewmessages; + + $msg = array(); + $msg[] = sprintf('', $_style['icons_mail_large']); + $nrnewmessages = $_SESSION['nrnewmessages'] > 0 ? ' (' . $_SESSION['nrnewmessages'] . ')' : ''; + $msg[] = sprintf(' [%%inbox%%]%s
      ', $nrnewmessages); + $nrnewmessages = $_SESSION['nrnewmessages'] > 0 ? '' . $_SESSION['nrnewmessages'] . '' : '0'; + $welcome_messages = sprintf($_lang['welcome_messages'], $_SESSION['nrtotalmessages'], $nrnewmessages); + $msg[] = sprintf('%s', $welcome_messages); + $ph['MessageInfo'] = join("\n", $msg); +} + +// setup icons +if($modx->hasPermission('new_user') || $modx->hasPermission('edit_user')) { + $icon = ' [%security%]'; + $ph['SecurityIcon'] = wrapIcon($icon, 75); +} +if($modx->hasPermission('new_web_user') || $modx->hasPermission('edit_web_user')) { + $icon = ' [%web_users%]'; + $ph['WebUserIcon'] = wrapIcon($icon, 99); +} +if($modx->hasPermission('new_module') || $modx->hasPermission('edit_module')) { + $icon = ' [%modules%]'; + $ph['ModulesIcon'] = wrapIcon($icon, 106); +} +if($modx->hasPermission('new_template') || $modx->hasPermission('edit_template') || $modx->hasPermission('new_snippet') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('new_plugin') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('manage_metatags')) { + $icon = ' [%elements%]'; + $ph['ResourcesIcon'] = wrapIcon($icon, 76); +} +if($modx->hasPermission('bk_manager')) { + $icon = ' [%backup%]'; + $ph['BackupIcon'] = wrapIcon($icon, 93); +} +if($modx->hasPermission('help')) { + $icon = ' [%help%]'; + $ph['HelpIcon'] = wrapIcon($icon, 9); +} +// do some config checks +if(($modx->config['warning_visibility'] == 0 && $_SESSION['mgrRole'] == 1) || $modx->config['warning_visibility'] == 1) { + include_once(MODX_MANAGER_PATH . 'includes/config_check.inc.php'); + if($config_check_results != $_lang['configcheck_ok']) { + $ph['config_check_results'] = $config_check_results; + $ph['config_display'] = 'block'; + } else { + $ph['config_display'] = 'none'; + } +} else { + $ph['config_display'] = 'none'; +} + +// Check logout-reminder +if(isset($_SESSION['show_logout_reminder'])) { + switch($_SESSION['show_logout_reminder']['type']) { + case 'logout_reminder': + $date = $modx->toDateFormat($_SESSION['show_logout_reminder']['lastHit'], 'dateOnly'); + $ph['logout_reminder_msg'] = str_replace('[+date+]', $date, $_lang['logout_reminder_msg']); + break; + } + $ph['show_logout_reminder'] = 'block'; + unset($_SESSION['show_logout_reminder']); +} else { + $ph['show_logout_reminder'] = 'none'; +} + +// Check multiple sessions +$where = sprintf("internalKey='%s'", $modx->db->escape($_SESSION['mgrInternalKey'])); +$rs = $modx->db->select('count(*) AS count', '[+prefix+]active_user_sessions', $where); +$count = $modx->db->getValue($rs); +if($count > 1) { + $ph['multiple_sessions_msg'] = $modx->parseText($_lang['multiple_sessions_msg'], array( + 'username' => $_SESSION['mgrShortname'], + 'total' => $count + )); + $ph['show_multiple_sessions'] = 'block'; +} else { + $ph['show_multiple_sessions'] = 'none'; +} + +$ph['RecentInfo'] = getRecentInfo(); + +$tpl = ' + + + + + + + + + + + + + + + + + + + + + +
      [%yourinfo_username%][+username+]
      [%yourinfo_role%][+role+]
      [%yourinfo_previous_login%][+lastlogin+]
      [%yourinfo_total_logins%][+logincount+]
      [%inbox%][+msginfo+]
      '; + +$nrnewmessages = '' . $_SESSION['nrnewmessages'] . ''; + +$ph['UserInfo'] = $modx->parseText($tpl, array( + 'username' => $modx->getLoginUserName(), + 'role' => $_SESSION['mgrPermissions']['name'], + 'lastlogin' => $modx->toDateFormat($_SESSION['mgrLastlogin'] + $server_offset_time), + 'logincount' => $_SESSION['mgrLogincount'] + 1, + 'msginfo' => sprintf($_lang['welcome_messages'], $_SESSION['nrtotalmessages'], $nrnewmessages) +)); + +$from = array(); +$from[] = '[+prefix+]active_user_sessions'; +$from[] = " us LEFT JOIN [+prefix+]active_users au ON au.sid=us.sid WHERE au.action <> '8'"; +$rs = $modx->db->select('*', $from, '', 'username ASC, au.sid ASC'); + +if($modx->db->getRecordCount($rs) < 1) { + $html = '

      [%no_active_users_found%]

      '; +} else { + include_once(MODX_MANAGER_PATH . 'includes/actionlist.inc.php'); + $now = $_SERVER['REQUEST_TIME'] + $server_offset_time; + $ph['now'] = strftime('%H:%M:%S', $now); + $timetocheck = ($now - (60 * 20)); //+$server_offset_time; + $html = ' +
      + [%onlineusers_message%] + [+now+]): +
      +
      + + + + + + + + + + + '; + + $userList = array(); + $userCount = array(); + // Create userlist with session-count first before output + while($activeusers = $modx->db->getRow($rs)) { + $userCount[$activeusers['internalKey']] = isset($userCount[$activeusers['internalKey']]) ? $userCount[$activeusers['internalKey']] + 1 : 1; + + $idle = $activeusers['lasthit'] < $timetocheck ? ' class="userIdle"' : ''; + $webicon = $activeusers['internalKey'] < 0 ? 'Web user ' : ''; + $ip = $activeusers['ip'] === '::1' ? '127.0.0.1' : $activeusers['ip']; + $currentaction = getAction($activeusers['action'], $activeusers['id']); + $userList[] = array( + $idle, + '', + $activeusers['username'], + $webicon, + abs($activeusers['internalKey']), + $ip, + strftime('%H:%M:%S', $activeusers['lasthit'] + $server_offset_time), + $currentaction + ); + } + foreach($userList as $params) { + $params[1] = $userCount[$params[4]] > 1 ? ' class="userMultipleSessions"' : ''; + $html .= "\n\t\t" . vsprintf('', $params); + } + + $html .= ' + +
      [%onlineusers_user%]ID[%onlineusers_ipaddress%][%onlineusers_lasthit%][%onlineusers_action%]                   
      %s%s%s%s%s%s
      +
      +'; +} +$ph['OnlineInfo'] = $html; + +// include rss feeds for important forum topics +include_once(MODX_MANAGER_PATH . 'includes/rss.inc.php'); +$ph['modx_security_notices_content'] = $feedData['modx_security_notices_content']; +$ph['modx_news_content'] = $feedData['modx_news_content']; + +$ph['theme'] = $modx->config['manager_theme']; +$ph['site_name'] = $modx->config['site_name']; +$ph['home'] = $_lang['home']; +$ph['logo_slogan'] = $_lang['logo_slogan']; +$ph['welcome_title'] = $_lang['welcome_title']; +$ph['search'] = $_lang['search']; +$ph['settings_config'] = $_lang['settings_config']; +$ph['configcheck_title'] = $_lang['configcheck_title']; +$ph['online'] = $_lang['online']; +$ph['onlineusers_title'] = $_lang['onlineusers_title']; +$ph['recent_docs'] = $_lang['recent_docs']; +$ph['activity_title'] = $_lang['activity_title']; +$ph['info'] = $_lang['info']; +$ph['yourinfo_title'] = $_lang['yourinfo_title']; + +$ph['modx_security_notices'] = $_lang['security_notices_tab']; +$ph['modx_security_notices_title'] = $_lang['security_notices_title']; +$ph['modx_news'] = $_lang['modx_news_tab']; +$ph['modx_news_title'] = $_lang['modx_news_title']; + +$modx->toPlaceholders($ph); + +$script = getStartUpScript(); +$modx->regClientScript($script); + +// invoke event OnManagerWelcomePrerender +$evtOut = $modx->invokeEvent('OnManagerWelcomePrerender'); +if(is_array($evtOut)) { + $output = implode('', $evtOut); + $ph['OnManagerWelcomePrerender'] = $output; +} + +$widgets['welcome'] = array( + 'menuindex' => '10', + 'id' => 'welcome', + 'cols' => 'col-sm-6', + 'icon' => 'fa-home', + 'title' => '[%welcome_title%]', + 'body' => ' + +
      + + + + + + + + + + + + + + + + + + + + + + + +
      [%yourinfo_username%][[#getLoginUserName]]
      [%yourinfo_role%][[$_SESSION[\'mgrPermissions\'][\'name\'] ]]
      [%yourinfo_previous_login%][[$_SESSION[\'mgrLastlogin\']:math(\'%s+[(server_offset_time)]\'):dateFormat]]
      [%yourinfo_total_logins%][[$_SESSION[\'mgrLogincount\']:math(\'%s+1\')]]
      [%inbox%][[#getMessageCount]]
      +
      + ', + 'hide'=>'0' +); +$widgets['onlineinfo'] = array( + 'menuindex' => '20', + 'id' => 'onlineinfo', + 'cols' => 'col-sm-6', + 'icon' => 'fa-user', + 'title' => '[%onlineusers_title%]', + 'body' => '
      [+OnlineInfo+]
      ', + 'hide'=>'0' +); +$widgets['recentinfo'] = array( + 'menuindex' => '30', + 'id' => 'modxrecent_widget', + 'cols' => 'col-sm-12', + 'icon' => 'fa-pencil-square-o', + 'title' => '[%activity_title%]', + 'body' => '
      [+RecentInfo+]
      ', + 'hide'=>'0' +); +if ($modx->config['rss_url_news']) { + $widgets['news'] = array( + 'menuindex' => '40', + 'id' => 'news', + 'cols' => 'col-sm-6', + 'icon' => 'fa-rss', + 'title' => '[%modx_news_title%]', + 'body' => '
      [+modx_news_content+]
      ', + 'hide'=>'0' + ); +} +if ($modx->config['rss_url_security']) { + $widgets['security'] = array( + 'menuindex' => '50', + 'id' => 'security', + 'cols' => 'col-sm-6', + 'icon' => 'fa-exclamation-triangle', + 'title' => '[%security_notices_title%]', + 'body' => '
      [+modx_security_notices_content+]
      ', + 'hide'=>'0' + ); +} + +// invoke OnManagerWelcomeHome event +$sitewidgets = $modx->invokeEvent("OnManagerWelcomeHome", array('widgets' => $widgets)); +if(is_array($sitewidgets)) { + $newwidgets = array(); + foreach($sitewidgets as $widget){ + $newwidgets = array_merge($newwidgets, unserialize($widget)); + } + $widgets = (count($newwidgets) > 0) ? $newwidgets : $widgets; +} + +usort($widgets, function ($a, $b) { + return $a['menuindex'] - $b['menuindex']; +}); + +$tpl = getTplWidget(); +$output = ''; +foreach($widgets as $widget) { + if ($widget['hide'] != '1'){ + $output .= $modx->parseText($tpl, $widget); + } +} +$ph['widgets'] = $output; + +// load template +if(!isset($modx->config['manager_welcome_tpl']) || empty($modx->config['manager_welcome_tpl'])) { + $modx->config['manager_welcome_tpl'] = MODX_MANAGER_PATH . 'media/style/common/welcome.tpl'; +} + +$target = $modx->config['manager_welcome_tpl']; +$target = str_replace('[+base_path+]', MODX_BASE_PATH, $target); +$target = $modx->mergeSettingsContent($target); + +if(substr($target, 0, 1) === '@') { + if(substr($target, 0, 6) === '@CHUNK') { + $content = $modx->getChunk(trim(substr($target, 7))); + } elseif(substr($target, 0, 5) === '@FILE') { + $content = file_get_contents(trim(substr($target, 6))); + } else { + $content = ''; + } +} else { + $chunk = $modx->getChunk($target); + if($chunk !== false && !empty($chunk)) { + $content = $chunk; + } elseif(is_file(MODX_BASE_PATH . $target)) { + $content = file_get_contents(MODX_BASE_PATH . $target); + } elseif(is_file(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/welcome.tpl')) { + $content = file_get_contents(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/welcome.tpl'); + } elseif(is_file(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/html/welcome.html')) // ClipperCMS compatible + { + $content = file_get_contents(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/html/welcome.html'); + } else { + $content = file_get_contents(MODX_MANAGER_PATH . 'media/style/common/welcome.tpl'); + } +} + +// merge placeholders +$content = $modx->mergeConditionalTagsContent($content); +$content = $modx->mergeSettingsContent($content); +$content = $modx->parseText($content, $ph); +if(strpos($content, '[+') !== false) { + $modx->toPlaceholders($ph); + $content = $modx->mergePlaceholderContent($content); +} +$content = $modx->parseDocumentSource($content); +$content = $modx->parseText($content, $_lang, '[%', '%]'); +$content = $modx->parseText($content, $_style, '[&', '&]'); +$content = $modx->cleanUpMODXTags($content); //cleanup + +if($js = $modx->getRegisteredClientScripts()) { + $content .= $js; +} + +echo $content; + +// +// +// +// +function getTplWidget() { // recent document info + return ' +
      +
      +
      [+title+]
      +
      [+body+]
      +
      +
      +'; +} + +function getRecentInfo() { // recent document info + global $modx; + + $modx->addSnippet('recentInfoList', 'getRecentInfoList'); + + $html = ' +
      + + + + + + + + + + + + [[#recentInfoList]] + +
      [%id%][%resource_title%][%page_data_edited%][%user%][%mgrlog_action%]
      +
      +'; + return $html; +} + +function getRecentInfoList() { + global $modx; + + $rs = $modx->db->select('*', '[+prefix+]site_content', '', 'editedon DESC', 10); + + if($modx->db->getRecordCount($rs) < 1) { + return '[%no_activity_message%]'; + } + + $tpl = getRecentInfoRowTpl(); + + $btntpl['edit'] = ' '; + $btntpl['preview_btn'] = ' '; + + $output = array(); + while($ph = $modx->db->getRow($rs)) { + $docid = $ph['id']; + $_ = $modx->getUserInfo($ph['editedby']); + $ph['username'] = $_['username']; + + if($ph['deleted'] == 1) { + $ph['status'] = 'deleted text-danger'; + } elseif($ph['published'] == 0) { + $ph['status'] = 'unpublished font-italic text-muted'; + } else { + $ph['status'] = 'published'; + } + + if($modx->hasPermission('edit_document')) { + $ph['edit_btn'] = str_replace('[+id+]', $docid, $btntpl['edit']); + } else { + $ph['edit_btn'] = ''; + } + + $preview_disabled = ($ph['deleted'] == 1) ? 'disabled' : ''; + $ph['preview_btn'] = str_replace(array( + '[+id+]', + '[+preview_disabled+]' + ), array( + $docid, + $preview_disabled + ), $btntpl['preview_btn']); + + if($modx->hasPermission('delete_document')) { + if($ph['deleted'] == 0) { + $delete_btn = ' '; + } else { + $delete_btn = ' '; + } + $ph['delete_btn'] = str_replace('[+id+]', $docid, $delete_btn); + } else { + $ph['delete_btn'] = ''; + } + + if($ph['deleted'] == 1 && $ph['published'] == 0) { + $publish_btn = ' '; + } elseif($ph['deleted'] == 1 && $ph['published'] == 1) { + $publish_btn = ' '; + } elseif($ph['deleted'] == 0 && $ph['published'] == 0) { + $publish_btn = ' '; + } else { + $publish_btn = ' '; + } + $ph['publish_btn'] = str_replace('[+id+]', $docid, $publish_btn); + + $ph['info_btn'] = str_replace('[+id+]', $docid, ''); + + if($ph['longtitle'] == '') { + $ph['longtitle'] = '([%not_set%])'; + } + if($ph['description'] == '') { + $ph['description'] = '([%not_set%])'; + } + if($ph['introtext'] == '') { + $ph['introtext'] = '([%not_set%])'; + } + if($ph['alias'] == '') { + $ph['alias'] = '([%not_set%])'; + } + + $output[] = $modx->parseText($tpl, $ph); + } + return join("\n", $output); +} + +function getRecentInfoRowTpl() { + $tpl = ' + + [+id+] + [+pagetitle+] + [+editedon:math("%s+[(server_offset_time)]"):dateFormat+] + [+username+] + [+edit_btn+][+preview_btn+][+delete_btn+][+publish_btn+][+info_btn+] + + + +
      +
        +
      • [%long_title%]: [+longtitle+]
      • +
      • [%description%]: [+description+]
      • +
      • [%resource_summary%]: [+longtitle+]
      • +
      • [%type%]: [+type:is(reference):then([%weblink%]):else([%resource%])+]
      • +
      • [%resource_alias%]: [+alias+]
      • +
      • [%page_data_cacheable%]: [+cacheable:is(1):then([%yes%]):else([%no%])+]
      • +
      • [%resource_opt_show_menu%]: [+hidemenu:is(0):then([%yes%]):else([%no%])+]
      • +
      • [%page_data_template%]: [+template:templatename+]
      • +
      +
      + + '; + return $tpl; +} + +// setup icons +function wrapIcon($i, $action) { + return sprintf('%s', $action, $i); +} + +function getStartUpScript() { + $script = ' + +'; + return $script; } \ No newline at end of file From 9415fd0d9014f5f9c94c320624f318b109274ab2 Mon Sep 17 00:00:00 2001 From: Nicola Date: Tue, 31 Oct 2017 19:18:47 +0100 Subject: [PATCH 316/577] removed card-header color from color switcher removed card-header color from color switcher to avoid conflicts (now can be styled with widget arrays) --- manager/media/style/default/js/color.switcher.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/manager/media/style/default/js/color.switcher.js b/manager/media/style/default/js/color.switcher.js index e07c2166f6..65b250c4d9 100644 --- a/manager/media/style/default/js/color.switcher.js +++ b/manager/media/style/default/js/color.switcher.js @@ -223,8 +223,7 @@ jQuery(document).ready(function($) { function setColor(color) { $('[data-evocp="color"]').css('color', color); $('[data-evocp="borderColor"]').css('border-color', color); - $('h1 .fa:not(.help)').css('color', color); - $('.widgets .card-header').css('color', color); + $('h1 .fa:not(.help)').css('color', color); } //store the color value in a variable $('.evocp-color').each(function(i) { From 95a703cec6f1de59200c90f75de13565dfdac70d Mon Sep 17 00:00:00 2001 From: Dmytro Lukianenko Date: Wed, 1 Nov 2017 17:53:04 +0300 Subject: [PATCH 317/577] fix correct sort in mm_moveCategoryToTab --- .../widgets/mm_movecategorytotab/mm_movecategorytotab.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/plugins/managermanager/widgets/mm_movecategorytotab/mm_movecategorytotab.php b/assets/plugins/managermanager/widgets/mm_movecategorytotab/mm_movecategorytotab.php index 31268eb140..99d76be852 100644 --- a/assets/plugins/managermanager/widgets/mm_movecategorytotab/mm_movecategorytotab.php +++ b/assets/plugins/managermanager/widgets/mm_movecategorytotab/mm_movecategorytotab.php @@ -20,7 +20,7 @@ function mm_moveCategoryToTab($categoryId, $tabId, $roles = '', $templates = ''){ global $modx; $e = &$modx->Event; - $res = $modx->db->select("name", $modx->getFullTableName('site_tmplvars'), "category='" . $categoryId ."'"); + $res = $modx->db->select("name", $modx->getFullTableName('site_tmplvars'), "category='" . $categoryId ."'", "rank ASC"); $fieldsArr = array(); while( $row = $modx->db->getRow( $res ) ) { $fieldsArr[] = $row['name']; @@ -37,4 +37,4 @@ function mm_moveCategoryToTab($categoryId, $tabId, $roles = '', $templates = '') $e->output($output); } } -?> \ No newline at end of file +?> From 7d4acbf38472b7cf498b2ccb3a2f1f235dac552f Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sat, 4 Nov 2017 21:45:25 +0300 Subject: [PATCH 318/577] [C] move ajaxSearch to Extras (https://github.com/extras-evolution/ajaxSearch) --- assets/snippets/ajaxSearch/HISTORY.md | 158 -- assets/snippets/ajaxSearch/README.md | 320 ---- .../snippets/ajaxSearch/ajaxSearchPopup.php | 72 - .../classes/ajaxSearch.class.inc.php | 170 -- .../classes/ajaxSearchConfig.class.inc.php | 205 -- .../classes/ajaxSearchCtrl.class.inc.php | 196 -- .../classes/ajaxSearchInput.class.inc.php | 376 ---- .../classes/ajaxSearchLog.class.inc.php | 172 -- .../classes/ajaxSearchOutput.class.inc.php | 1089 ----------- .../classes/ajaxSearchRequest.class.inc.php | 793 -------- .../classes/ajaxSearchResults.class.inc.php | 1322 ------------- .../classes/ajaxSearchUtil.class.inc.php | 116 -- .../classes/asPhxParser.class.inc.php | 445 ----- .../ajaxSearch/configs/default.config.php | 81 - .../documentation/AjaxSearch193_v1.pdf | Bin 122853 -> 0 bytes .../documentation/ajaxSearch_readme.txt | 1700 ----------------- .../ajaxSearch_version_1.10.2.txt | 475 ----- .../documentation/migrationFrom185To190.txt | 202 -- .../ajaxSearch/documentation/readme.txt | 14 - .../someConfigsExamples/custom1.config.php | 35 - .../someConfigsExamples/custom2.config.php | 35 - .../documentation/someCssExamples/search.css | 298 --- .../imgAjaxResult.tpl.html | 10 - .../someTemplatesExamples/imgResult.tpl.html | 10 - .../someTemplatesExamples/rankResult.tpl.html | 18 - assets/snippets/ajaxSearch/images/asnext.png | Bin 656 -> 0 bytes assets/snippets/ajaxSearch/images/asprev.png | Bin 650 -> 0 bytes assets/snippets/ajaxSearch/images/close.png | Bin 634 -> 0 bytes assets/snippets/ajaxSearch/images/cross.png | Bin 655 -> 0 bytes .../ajaxSearch/images/indicator.black.gif | Bin 1553 -> 0 bytes .../ajaxSearch/images/indicator.white.gif | Bin 1542 -> 0 bytes assets/snippets/ajaxSearch/images/readme.txt | 33 - .../js/ajaxSearch1/ajaxSearch-jquery.js | 40 - .../js/ajaxSearch1/ajaxSearch-mootools2.js | 43 - .../ajaxSearch/js/ajaxSearch1/ajaxSearch.js | 43 - .../js/clearDefault/clearDefault.js | 13 - .../ajaxSearch/js/comment/ajaxSearchCmt.js | 17 - .../js/mootools2/mootools-1.2.4-core.js.txt | 277 --- .../js/mootools2/mootools-1.2.4.4-more.js.txt | 5 - .../ajaxSearch/js/mootools2/mootools-1.2.4.js | 280 --- .../ajaxSearch/js/mootools2/readme.txt | 27 - .../ajaxSearch/lang/arabic-utf8.inc.php | 35 - .../snippets/ajaxSearch/lang/chinese.inc.php | 36 - .../lang/chinese_simplified-utf8.inc.php | 36 - .../lang/chinese_simplified.inc.php | 5 - .../lang/chinese_traditional-utf8.inc.php | 36 - .../lang/chinese_traditional.inc.php | 5 - assets/snippets/ajaxSearch/lang/czech.inc.php | 36 - .../snippets/ajaxSearch/lang/danish.inc.php | 36 - .../ajaxSearch/lang/english-utf8.inc.php | 36 - .../snippets/ajaxSearch/lang/english.inc.php | 36 - .../ajaxSearch/lang/estonian-utf8.inc.php | 36 - .../snippets/ajaxSearch/lang/estonian.inc.php | 5 - .../snippets/ajaxSearch/lang/finnish.inc.php | 36 - .../ajaxSearch/lang/francais-utf8.inc.php | 36 - .../snippets/ajaxSearch/lang/francais.inc.php | 5 - .../snippets/ajaxSearch/lang/german.inc.php | 36 - .../snippets/ajaxSearch/lang/hebrew.inc.php | 36 - .../ajaxSearch/lang/icelandic-utf8.inc.php | 36 - .../ajaxSearch/lang/indonesia.inc.php | 30 - .../snippets/ajaxSearch/lang/italian.inc.php | 36 - .../ajaxSearch/lang/japanese-utf8.inc.php | 36 - .../ajaxSearch/lang/nederlands-utf8.inc.php | 36 - .../ajaxSearch/lang/nederlands.inc.php | 5 - .../ajaxSearch/lang/norsk-utf8.inc.php | 36 - assets/snippets/ajaxSearch/lang/norsk.inc.php | 5 - .../snippets/ajaxSearch/lang/persian.inc.php | 36 - .../ajaxSearch/lang/polish-utf8.inc.php | 36 - .../ajaxSearch/lang/portuguese-br.inc.php | 36 - .../ajaxSearch/lang/portuguese.inc.php | 36 - .../ajaxSearch/lang/russian-UTF8.inc.php | 36 - .../snippets/ajaxSearch/lang/russian.inc.php | 5 - .../ajaxSearch/lang/slovak-utf8.inc.php | 36 - .../snippets/ajaxSearch/lang/slovak.inc.php | 5 - .../ajaxSearch/lang/spanish-utf8.inc.php | 36 - .../snippets/ajaxSearch/lang/spanish.inc.php | 5 - .../ajaxSearch/lang/svenska-utf8.inc.php | 36 - .../snippets/ajaxSearch/lang/svenska.inc.php | 5 - .../snippets/ajaxSearch/lang/ukranian.inc.php | 35 - .../module.ajaxSearchLogManager.tpl | 119 -- .../ajaxSearch/plugin.advSearchHighlight.tpl | 154 -- .../ajaxSearch/plugin.searchHighlight.tpl | 143 -- .../ajaxSearch/snippet.ajaxSearch.php | 438 ----- .../ajaxSearch/snippet.ajaxSearch.tpl | 18 - .../templates/ajaxGrpResult.tpl.html | 10 - .../ajaxSearch/templates/ajaxResult.tpl.html | 12 - .../ajaxSearch/templates/ajaxResults.tpl.html | 16 - .../ajaxSearch/templates/comment.tpl.html | 19 - .../ajaxSearch/templates/grpResult.tpl.html | 11 - .../ajaxSearch/templates/input.tpl.html | 18 - .../templates/inputTemplates/input1.tpl.html | 18 - .../templates/inputTemplates/input2.tpl.html | 23 - .../templates/inputTemplates/input3.tpl.html | 21 - .../templates/inputTemplates/readme.txt | 30 - .../ajaxSearch/templates/paging0.tpl.html | 12 - .../ajaxSearch/templates/paging1.tpl.html | 5 - .../ajaxSearch/templates/paging2.tpl.html | 3 - .../ajaxSearch/templates/result.tpl.html | 12 - .../ajaxSearch/templates/results.tpl.html | 11 - install/assets/plugins/searchhighlight.tpl | 146 -- install/assets/snippets/ajaxSearch.tpl | 18 - 101 files changed, 11397 deletions(-) delete mode 100644 assets/snippets/ajaxSearch/HISTORY.md delete mode 100644 assets/snippets/ajaxSearch/README.md delete mode 100644 assets/snippets/ajaxSearch/ajaxSearchPopup.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearch.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchConfig.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchCtrl.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchInput.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchLog.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchOutput.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchRequest.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchResults.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/ajaxSearchUtil.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/classes/asPhxParser.class.inc.php delete mode 100644 assets/snippets/ajaxSearch/configs/default.config.php delete mode 100644 assets/snippets/ajaxSearch/documentation/AjaxSearch193_v1.pdf delete mode 100644 assets/snippets/ajaxSearch/documentation/ajaxSearch_readme.txt delete mode 100644 assets/snippets/ajaxSearch/documentation/ajaxSearch_version_1.10.2.txt delete mode 100644 assets/snippets/ajaxSearch/documentation/migrationFrom185To190.txt delete mode 100644 assets/snippets/ajaxSearch/documentation/readme.txt delete mode 100644 assets/snippets/ajaxSearch/documentation/someConfigsExamples/custom1.config.php delete mode 100644 assets/snippets/ajaxSearch/documentation/someConfigsExamples/custom2.config.php delete mode 100644 assets/snippets/ajaxSearch/documentation/someCssExamples/search.css delete mode 100644 assets/snippets/ajaxSearch/documentation/someTemplatesExamples/imgAjaxResult.tpl.html delete mode 100644 assets/snippets/ajaxSearch/documentation/someTemplatesExamples/imgResult.tpl.html delete mode 100644 assets/snippets/ajaxSearch/documentation/someTemplatesExamples/rankResult.tpl.html delete mode 100644 assets/snippets/ajaxSearch/images/asnext.png delete mode 100644 assets/snippets/ajaxSearch/images/asprev.png delete mode 100644 assets/snippets/ajaxSearch/images/close.png delete mode 100644 assets/snippets/ajaxSearch/images/cross.png delete mode 100644 assets/snippets/ajaxSearch/images/indicator.black.gif delete mode 100644 assets/snippets/ajaxSearch/images/indicator.white.gif delete mode 100644 assets/snippets/ajaxSearch/images/readme.txt delete mode 100644 assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-jquery.js delete mode 100644 assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-mootools2.js delete mode 100644 assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch.js delete mode 100644 assets/snippets/ajaxSearch/js/clearDefault/clearDefault.js delete mode 100644 assets/snippets/ajaxSearch/js/comment/ajaxSearchCmt.js delete mode 100644 assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4-core.js.txt delete mode 100644 assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.4-more.js.txt delete mode 100644 assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.js delete mode 100644 assets/snippets/ajaxSearch/js/mootools2/readme.txt delete mode 100755 assets/snippets/ajaxSearch/lang/arabic-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/chinese.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/chinese_simplified-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/chinese_simplified.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/chinese_traditional-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/chinese_traditional.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/czech.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/danish.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/english-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/english.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/estonian-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/estonian.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/finnish.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/francais-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/francais.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/german.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/hebrew.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/icelandic-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/indonesia.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/italian.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/japanese-utf8.inc.php delete mode 100644 assets/snippets/ajaxSearch/lang/nederlands-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/nederlands.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/norsk-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/norsk.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/persian.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/polish-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/portuguese-br.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/portuguese.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/russian-UTF8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/russian.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/slovak-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/slovak.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/spanish-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/spanish.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/svenska-utf8.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/svenska.inc.php delete mode 100755 assets/snippets/ajaxSearch/lang/ukranian.inc.php delete mode 100644 assets/snippets/ajaxSearch/module.ajaxSearchLogManager.tpl delete mode 100644 assets/snippets/ajaxSearch/plugin.advSearchHighlight.tpl delete mode 100644 assets/snippets/ajaxSearch/plugin.searchHighlight.tpl delete mode 100755 assets/snippets/ajaxSearch/snippet.ajaxSearch.php delete mode 100644 assets/snippets/ajaxSearch/snippet.ajaxSearch.tpl delete mode 100644 assets/snippets/ajaxSearch/templates/ajaxGrpResult.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/ajaxResult.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/ajaxResults.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/comment.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/grpResult.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/input.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/inputTemplates/input1.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/inputTemplates/input2.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/inputTemplates/input3.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/inputTemplates/readme.txt delete mode 100644 assets/snippets/ajaxSearch/templates/paging0.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/paging1.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/paging2.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/result.tpl.html delete mode 100644 assets/snippets/ajaxSearch/templates/results.tpl.html delete mode 100644 install/assets/plugins/searchhighlight.tpl delete mode 100755 install/assets/snippets/ajaxSearch.tpl diff --git a/assets/snippets/ajaxSearch/HISTORY.md b/assets/snippets/ajaxSearch/HISTORY.md deleted file mode 100644 index 45a8b1def7..0000000000 --- a/assets/snippets/ajaxSearch/HISTORY.md +++ /dev/null @@ -1,158 +0,0 @@ -#Changelog: -11-jul-17 (1.11.0) -- Refactor, no more use index-ajax.php - -12-apr-16 (1.10.2) - -- Bug fixes -- see Github 05.06.14 - 12.04.16: https://github.com/modxcms/evolution/commits/develop/assets/snippets/ajaxSearch - -05-jun-14 (1.10.1) - -- Security/Bug fixes - -27-mar-13 (1.10.0) - -- Security/Bug fixes - -26-sep-12 (1.9.3) - -- Bug fixing -- Removed ajaxsearch's own striptags functions and substituted the use of $modx->stripTags -- minimum chars allowed to 2 - -05-dec-10 (1.9.2) - -- Bug fixing - -30-aug-10 (1.9.2) - -- Bug fixing - -18-may-10 (1.9.0) - -- Completely refactored - MVC model implemented -- Defines categories and display of group of results -- Several AS call on same page -- parents (in / not in), documents (in / not in) -- Custom output -- Filtering search results by tv name -- Filter features (allow to set up specific search forms) -- Bug fixing - -20-oct-09 (1.8.4) - -- Sites and subsites notions -- Defines categories and display of group of results -- Several AS call on same page -- Bug fixing - -14-jun-09 (1.8.4) - -- Sites and subsites notions -- Defines categories and display of group of results -- Several AS call on same page -- Bug fixing - -08-jun-09 (1.8.3) - -- Bug fixing -- The number of results is available with the [+as.resultNumber+] placeholder - -01-mar-09 (1.8.2) - -- liveSearch parameter renamed -- Initialisation of configuration parameters is modified -- mbstring parameter added -- Limit the amount of keywords that will be queried by a search -- Capturing failed search criteria and search logs -- Compatibility with mootools 1.2.1 library -- Compatibility with jquery library -- Always display paging parameter added -- Bug fixing - -02-oct-08 (1.8.1) - -- subSearch added. -- mysql query redesigned. -- whereSearch parameter improved. Fields definition added -- withTvs parameter added. specify the search in Tvs -- metacharacter for filter -- improvement of the searchword list parameter -- debug - file and firebug console -- Bug fixing - -21 -July-08 (1.8.0) - -- define where to do the search (&whereSearch parameter) -- define which fields to use for the extracts (&extract parameter) -- use AjaxSearch with non MOdx tables -- order the results with the &order parameter -- define the ranking value and sort the results with it -- filter the unwanted documents of the search -- define the extract eliipsis -- define the extract separator -- Extended place holder templating and template parameters -- Improvement of the extract algorithm -- Define the number of extracts displayed in the search results -- Use of &advSearch parameter available from the front-end by the end user -- Choose your search term from a predefined search word list -- stripInput user function -- stripOutput user function -- Configuration file and $__ global parameters -- snippet code completely refactored and objectified -- Bugfixes regarding Quoted searchstring - -06-Mar-08 (1.7.1) - -- Advanced search (partial & relevance) -- Search in hidden documents from menu -- List of Ids limited to parent-documents ids in javascript -- Code cleaning - -06-Jan-08 (1.7) - -- Added custom config file -- Added list of parent-documents where to search -- Added opacity parameter (between 0 (transparent) and 1 (opaque) -- Added bugfixes regarding opacity with IE -- Using of DBAPI function instead of deprecated function -- Charset troubles corrected - -22-Jan-07 (1.6) - -- Added templating support (includes/templates.inc.php) -- Added language support -- Switched from prototype/scriptaculous to Mootools - -03-Jan-07 - -- Added many bugfixes/additions from AjaxSearch forum - -18-Sep-06 - -- Added code to only show results for allowed pages - -05-May-06 - -- Added liveSearch functionality and new parameter - -21-Apr-06 - -- Added code to make it compatible with tagcloud snippet - -20-Apr-06 - -- Added code from eastbind & japanese community for other language searching - -04-Apr-06 - -- Added search term highlighting - -01-Apr-06 - -- initial commit into SVN - -30-Mar-06 - -- initial work based on FSF_ajax from KyleJ \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/README.md b/assets/snippets/ajaxSearch/README.md deleted file mode 100644 index e0fb1c38a1..0000000000 --- a/assets/snippets/ajaxSearch/README.md +++ /dev/null @@ -1,320 +0,0 @@ -#AjaxSearch 1.11.0 - -Ajax and non-Ajax search that supports results highlighting - -Authors: Coroico
      Jason Coward
      KyleJaebker
      Ryan Thrash - -Basic usage: -[!AjaxSearch!] - -#Parameters - -Name | Description | Default value ------|-------------|-------------- -config | Load a custom configuration from *`config`.config.php* in the folder *assets/snippets/ajaxSearch/configs/*
      With @FILE a file relative to MODX base path could be specified. See **Configuration Files** section for further explanation. | `default` -debug | Output debugging information.
      `0` debug not active.
      `1` Parameters, search context and sql query logged.
      `2` Parameters, search context, sql query and templates logged.
      `3` Parameters, search context, sql query, templates and results logged. | `0` -language | Sets the ajaxSearch language.
      Available language files could be found in the folder *assets/snippets/ajaxSearch/lang/*:
      `arabic-utf8`, `Chinese`, `chinese_simplified-utf8`, `chinese_simplified`, `chinese_traditional-utf8`, `chinese_traditional`, `czech`, `danish`, `english-utf8`, `english`, `finnish`, `francais-utf8`, `francais`, `german`, `hebrew`, `icelandic`, `indonesian`, `italian`, `japanese-utf8`, `nederlands`, `norsk-utf8`, `norsk`, `persian`, `portuguese-br`, `portuguese`, `russian-UTF8`, `russian`, `slovak-utf8`, `slovak`, `spanish-utf8`, `spanish`, `svenska-utf8`, `svenska` | MODX manager language -ajaxSearch | Use the ajax mode.
      `0` off, `1` on, `>1` custom usage | `1` -advSearch | Set the advanced search options.
      `exactphrase` provides the documents which contain the exact phrase
      `allwords` provides the documents which contain all the words
      `nowords` provides the documents which do not contain the words
      `oneword` provides the document which contain at least one word | `oneword` -subSearch | Define sub-domains or sites where to search for each site. A custom search function has to be defined in the configuration file.
      Example: ``&subSearch=`products,employee` `` -asId | Unique id for AjaxSearch instance to distinguish several AjaxSearch instances on the same page. The id is used to link the snippet calls between them. Choose a short name. For example: ``&asId=`as2` ``. In ajax mode, the first AjaxSearch snippet call shouldn’t use the parameter `&asId` -timeLimit | Max execution time in seconds for the AjaxSearch script. 0 for an unlimited execution time | 60 -whereSearch | Set in which tables & fields the search occurs. A separated list of keywords describing the tables where to search in the form `keyword:table fields`. If you want to exclude all content table fields from search you could use `content:null`
      The following keyword are predefined:
      `content` searches in `pagetitle`, `longtitle`, `description`, `alias`, `introtext`, `menutitle` and `content` in `site_content` table
      `tv` searches in `value` in `site_tmplvar_contentvalues` table, `jot` searches in `content` in `jot_content` table , `maxigallery` searches in `gal_title` and `gal_descr` of `maxi gallery` table | `content|tv` -withTvs | Add template variables als placeholder values to the search results. Could cause performances issues, so use it wisely.
      Format: `[[+-][:tvlist]]`
      Examples:
      `tvl,tv2,tv3` the content of tvl, tv2 and tv3 are added as placeholder values
      `+:tvl,tv2,tv3` the content of tvl, tv2 and tv3 are added as placeholder values
      `+` the content of all template variables of the site are added as placeholder values
      `:` the content of all template variables of the site are added as placeholder values
      `-:tvl,tv2,tv3` the content of all template variables of the site except of tvl, tv2 and tv3 are added as placeholder values | -tvPhx | Add template variables als PHx placeholder values to the search results. Could cause performances issues, so use it wisely. Same usage as `&withTvs` | -category | Define categories.
      Should contain the name of a template variable that is contains the category of each search result item. The displayed title of category could be renamed in the categConfig function. See grpLabel parameter. | -display | If the results comes from different sites, subsites or categories, the display could be set to mixed or unmixed. Possible values:
      `mixed` mixes all the results coming from the different areas.
      `unmixed` displays the results grouped by site, subsite or category. Each group of results can be paginated.
      In unmixed mode the results are ordered by the first field of the order parameter | `unmixed` -order | Sort order of results. Comma separated list of fields defined as searchable in the table definition. To suppress sorting, use ``&order=` ` ``
      Example: `pagetitle DESC, pub_date` | `publishedon,pagetitle` -rank | Define the rank of search results. Results are sorted by rank value.
      Comma separated list of fields (extract excluded) with optionally user defined weight.
      To suppress the rank sorting, use ``&rank=` ` ``
      `&rank` sort occurs after the `&order` sort. | -maxWords | Maximum number of words for searching.
      Could contain values between 1 and 10. | `5` -minChars | Minimum number of characters to require for a word to be valid for searching.
      Could contain values between 1 and 100.
      Contains the minimal length of each word with `&advSearch` set to `allwords`, `oneword` or `nowords`. Contains the minimal length of the search string with possible spaces with `&advSearch` set to `exactphrase` | `3` -showInputForm | Hide/show the search form when showing results.
      `0` off, `1` on | `1` -showIntro | Show/hide the introduction message displayed in the search form.
      `0` off, `1` on | `1` -extract | Maximum number of extracts that will be displayed per document and define which fields will be used to set up extracts.
      Format `n:searchable fields list` with *n = maximum number of extracts displayed*
      Example: ``&extract=`99:content` `` | One extract searched in `content`, `description`, `introtext` and `tv_content` -extractLength | Length of one extract.
      Could contain values between 50 and 800. | `200` -extractEllips | String to mark the start and the end of an extract inside of a sentence. | `...` -extractSeparator | String to mark the separation between each extract. | `
      ` -formatDate | Format of outputted dates (See date function in [PHP manual](http://www.php.net/manual/en/function.date.php)) | `d/m/y : H:i:s` -highlightResult | Create links that way that search terms will be highlighted when linked page is clicked.
      Requires Highlight plugin.
      `0` off, `1` on | `1` -pagingType | Type of pagination.
      `0` Results Pages 1 | 2 | 3, `1` Previous - X-Y/Z - Next, `2` X-Y/Z - Show 10 more results
      `0` or `1` could be used in non ajax mode, `1` or `2` could be used in ajax mode | `1` -pageLinkSeparator | Symbol between the page link numbers. | `|` -showResults | Show the search results.
      `0` off, `1` on | `1` -parents | Comma separated list of document IDs which children are searched/not searched until the depth of `&depth` parameter is reached.
      Could be prefixed with `in:` or `not in:`
      See examples in `&documents` parameter. | -depth | Depth of the search starting with parents parameter or MODX root | `10` -documents | Comma separated list of document IDs that are searched/not searched.
      Could be prefixed with `in:` or `not in:`
      Examples:
      `in:28,29,30,31` searches in the documents 28, 29, 30, 31
      `not in:28,29,30,31` searches in all documents except in the documents 28, 29, 30, 31
      `in:28,29,30,31` could be shortened to `28,29,30,31` -hideMenu | Search in hidden documents from menu.
      `0` Search only in documents visible from menu.
      `1` Search only in documents hidden from menu.
      `2` Search in hidden or visible documents from menu. | `2` -hideLink | Search in weblinks.
      `0` Search in resources with resource type *Web page* and *Weblink*.
      `1` Search only in resources with resource type *Web page*. | `1` -filter | Exclude unwanted documents. Same usage as the filter parameter in Ditto 2.1
      The metacharacter `#` is replaced by the search string. The advSearch parameter is also taken into account, if advSearch is `oneword`, `nowords` or `allwords` then `#` is replaced by as many filters as search terms. Filtering by template variable name is possible this way.
      Examples:
      ``&filter=`pagetitle,#,8` `` with search string *school child* and ``&advSearch=`oneword` `` is equivalent to ``&filter=`pagetitle,school,81 pagetitle,child,8` ``
      ``&filter=`articleTags,volcano,7` `` displays only documents tagged with volcano. -output | Custom layout.
      `0` Snippet output at the place of the snippet call
      `1` Snippet output in the placeholders `[+as.inputForm+]` and `[+as.results+]` | `0` -stripInput | Transform the search input extract on fly by a php function. The parameter value contains the name of the function. The function itself is defined in a configuration file. | `defaultStripInput` – function is defined in *ajaxSearchInput.class.inc.php* -stripOutput | Transform the search output extract on fly by a php function. The parameter value contains the name of the function. The function itself is defined in a configuration file. The document is parsed before the relevant piece of text around the search term is extracted. | `defaultStripOutput` – function is defined in *ajaxSearchResults.class.inc.php* -breadcrumbs | Display the breadcrumb path to the found document.
      `0` disallow the breadcrumbs link
      `name,parameters` the name/parameters of a function or the name/parameters of a snippet.
      The function itself is defined in a configuration file and it is called with the following parameters.
      `$main` (array) main table definition
      `$row` (array) search result row
      `$params` (array) breadcrumbs parameters passed with `&breadcrumbs` parameter. The parameters are divided by `,`, the parameter name is divided from the parameter value by `:`.
      The function returns the breadcrumbs link as a string.
      Example:
      `Breadcrumbs,showHomeCrumb:0,showCrumbsAtHome:1` calls the Breadcrumbs snippet or a function named *Breadcrumbs* with the parameter array `showHomeCrumb => 0, showCrumbsAtHome => 1` -clearDefault | Clearing default text.
      `0` off
      `1` on. Include the clear default javascript function in the head. Add the class *cleardefault* to the input in the search form and set this parameter to `1` | `0` -jsClearDefault | Location of the clearDefault javascript library. | AjaxSearch path + `js/clearDefault/clearDefault.js` -mbstring | Use the php_mbstring extension.
      `0` off, `1` on | `1` -asLog | Log failed and successful search requests.
      Format: `level[:comment[:purge]]`
      *level*
      `0` disallow the ajaxSearch log (default)
      `1` failed search requests are logged
      `2` all ajaxSearch requests are logged
      *comment*
      `0` user comment not allowed (default)
      `1` user comment allowed
      *purge* – number of logs allowed before the log table is purged
      `0` no Purge allowed (= illimited number of logs)
      ``&aslog=`x` `` is equivalent to ``&asLog=`x:0:200` ``
      ``&aslog=`x:y` `` is equivalent to ``&asLog=`x:y:200` ``
      ``&asLog=`1:1:500` `` means that 500 failed search requests possibly commented by the end user could be stored in the ajaxSearchLog table. See the AjaxSearch Log Manager module | `0:0:200` - -##Ajax - -Used in ajaxSearch mode - -Name | Description | Default value ------|-------------|-------------- -liveSearch | Use the live search (Show results during typing).
      `0` off, `1` on. | `0` -ajaxMax | Maximum number of results showed in a group of results. | `6` -showMoreResults | Display a link to show all search results.
      `0` off, `1` on. | `0` -moreResultsPage | Document ID of the target page for the more results link. This page should contain another AjaxSearch snippet call to display the results. | `0` -opacity | Opacity of the *ajaxSearch_output* div. | `1` -jscript | Select the javascript framework used by AjaxSearch javascript.
      `jquery` jQuery Framework
      `mootools2` MooTools 1.2 Framework
      `mootools` MooTools 1.1 Framework | `mootools2` -addJscript | Add the MooTools library to the head section of web pages automatically.
      `0` off, `1` on. | `1` -jsMooTools | Location of the MooTools 1.1 javascript library. | `manager/media/script/mootools/mootools.js` -jsMooTools2 | Location of the MooTools 1.2 javascript library. | AjaxSearch path + ` js/mootools2/mootools1.2.js` -jsJquery | Location of the jQuery javascript library. | `assets/js/jquery.min.js` - -##Non Ajax - -Used in non-ajaxSearch mode - -Name | Description | Default value ------|-------------|-------------- -landingPage | Document ID of the target page for the search result (non Ajax search) | -grabMax | Maximum number of results showed in a group of results. | `6` -showPagingAlways | Always display paging, even if the result is only one page. If ``&showMoreResults=`1` `` and `&moreResultsPage` is defined, then it could happen that ajaxsearch result will only have one page and pagination is not shown.
      `0` off, `1` on. | `0` - -#Templates -To use another template, define the template name and location with `@FILE:assets/snippets/ajaxSearch/templates/folderName/templateName.tpl.html` or create a new chunk, copy/paste the content of an existing template and edit it. - -##Input Templates - -Name | Description | Default value ------|-------------|-------------- -tplInput | Style the AjaxSearch input form. Could contain the following form elements:
      A set of check boxes to select the value of the advanced Search parameter (name=advSearch)
      An input or a dropdown select field (name=search), to catch the search terms | AjaxSearch path + `templates/input.tpl.html` - -To demonstrate the possibilities, there are several demos in `templates/inputTemplates` folder: - -- `input1.tpl.html` Simple search with a simple input field. -- `input2.tpl.html` Simple search with a multiple input list. -- `input3.tpl.html` Advanced search. An input field with the selection of the advanced Search parameter. - -The advanced search parameter can be mixed with the input list (2 & 3). - -In liveSearch mode (ajax) the submit button is not displayed. A search is done after each character is typed. - -##Non-Ajax Output Templates - -Name | Description | Default value ------|-------------|-------------- -tplGrpResult | Style the non-ajax output group result outer | AjaxSearch path + `templates/grpResult.tpl.html` -tplResults | Style the non-ajax output results outer | AjaxSearch path + `templates/results.tpl.html` -tplResult | Style each output result | AjaxSearch path + `templates/result.tpl.html` -tplComment | Style the comment form (also used with the ajax mode) | AjaxSearch path + `templates/comment.tpl.html` -tplPaging0 | Style the paging links – type 0 | AjaxSearch path + `templates/Paging0.tpl.html` -tplPaging1 | Style the paging links – type 1 | AjaxSearch path + `templates/Paging1.tpl.html` - -##Ajax Output Templates - -Name | Description | Default value ------|-------------|-------------- -tplAjaxGrpResult | Style the ajax output group result outer | AjaxSearch path + `templates/ajaxGrpResult.tpl.html` -tplAjaxResults | Style the ajax output results outer | AjaxSearch path + `templates/ajaxResults.tpl.html` -tplAjaxResult | Style each output result | AjaxSearch path + `templates/ajaxResult.tpl.html` -tplPaging1 | Style the paging links - type 1 | AjaxSearch path + `templates/Paging1.tpl.html` -tplPaging2 | Style the paging links - type 2 | AjaxSearch path + `templates/Paging2.tpl.html` - -##Placeholders - -These placeholders are used in the templates. - -Name | Description ------|------------ -`[+as.searchString+]` | The search string used for the search. E.g.: "Search results for [+as.searchString+]" as pagetitle for the landing page. -`[+as.****+]` | The field with the column name **** of the main table and of the joined table could be displayed in tplResult and tplAjaxResult templates. All TVs could be displayed with `&withTvs` or `&tvPhx` -`[+as.****Show+]` | Boolean value which is equal to 0 when the placeholder **** is empty, otherwise 1 -`[+as.****Class+]` | Class name equal to: ajaxSearch_result**** for the non ajax results and AS_ajax_result**** for ajax results - -### Placeholder Examples - -With ``&whereSearch=`content,tv` ``, there are these placeholders: - -Name | Value ------|------------ -`[+as.id+]` | Table `content`, field `id` -`[+as.publishon+]` | Table `content`, field `publishon` -`[+as.pagetitle+]` | Table `content`, field `pagetitle` -`[+as.longtitle+]` | Table `content`, field `longtitle` -`[+as.description+]` | Table `content`, field `description` -`[+as.alias+]` | Table `content`, field `alias` -`[+as.introtext+]` | Table `content`, field `introtext` -`[+as.menutitle+]` | Table `content`, field `menutitle` -`[+as.content+]` | Table `content`, field `content` -`[+as.tv_value+]` | Table `tv`, concatened values of TVs -`[+as.breadcrumbs+]` | With `` `&breadcrumbs=`1` `` -`[+as.extract+]` | Extracts defined with `&extract` - -With ``&whereSearch=`jot` ``, there are these placeholders: - -Name | Value ------|------------ -`[+as.jot_content]` | Jot content - -With ``&whereSearch=`maxi gallery` ``, there are these placeholders: - -Name | Value ------|------------ -`[+as.gal_title]` | Image title -`[+as.gal_descr]` | Image description - -All the placeholder above have the according `[+as.****Show+]` and `[+as.****Class+]` placeholder set. - -##Configuration Files - -###Default Values - -The default configuration file contains all the required default values. - -In a configuration file a global parameter could be initialized with the following syntax: `$__param = value;`. This value could be later overwritten by a snippet call parameter. Example: `$__hideLink = 0;` - -A not overwritable global parameter could be initialized with the following syntax: `$param = 'value';` This value could not be overwritten by a snippet call parameter. E.g: `$hideLink = 0;` - -###Custom stripInput Function - -A custom stripInput function could be defines with the following code: - -``` -if (!function_exists(myStripInput)) { - function myStripInput($searchString) { - ... // change the searchString - return $searchString; - } -} -``` - -CAUTION: Use the functions stripslashes, stripTags and stripHtml provided by AjaxSearch - -###Custom stripOutput Function - -A custom stripOutput function could be defines with the following code: - -``` -if (!function_exists(myStripOutput)) { - function myStripOutput($text) { - ... // change the output text - return $text; - } -} -``` - -###Custom categConfig Function - -A custom categConfig function could be defines with the following code: - -``` -if (!function_exists('categConfig')) { - function categConfig($site = 'defsite', $category = '') { - $config = array(); - // set up config depending $site & $category - .... - return $config; - } -} -``` - -Look in the someConfigsExamples folder to see an example for a custom categories function. - -In this function a label could be defined that is linked with the group of results. This variable should not contain a comma `,`. - -##Custom PHx Modifiers - -If you want to use images in the AjaxSearch templates you could use the possible following PHx modifier on the imgTag placeholder: - -Modifier | Value ----------|------------ -imgwidth | Image width -imgheigth | Image height -imgattr | Image attributes in the form `height="xxx" width="yyy"` -imgmaxwidth | Limit the width of the image to a maximum. Under this limit, keep the true width -imgmaxheight | Limit the height of the image to a maximum. Under this limit, keep the true height - -###Examples - -Show an image with its original height and width: -`` -`` - -Show an image with limited height and width: -```` - -These modifiers are useful in ajax mode to to determine the size of the AjaxSearch pop-up before the images are retrieved from the server. - -##AjaxSearch Log Manager Module - -A module provided to display the search logs from the MODx manager - -##Highlight Plugins - -Authors: Coroico , Kyle Jaebker , Susan Ottwell - -When a user clicks on the link from the AjaxSearch results the target page will have the terms highlighted. - -###searchHighlight Plugin - -Highlight the containing terms between `` and `` - -###advSearchHighlight Plugin - -Highlight the containing terms between `` and ``. Several distinct blocks are allowed. - -To create show the searchterms and a link on the page that removes the highlighting and insert the following code on the page where this should appear: `` - -The following variables in the plugin code could be used to change the text: - -Name | Description ------|------------ -`$termText` | The text before the search terms -`$removeText` | The text for the remove link - -##AjaxSearch Glossary - -###ajaxSearch Mode - -Search results displayed in current page through AJAX request. - -###Non ajaxSearch Mode - -Search results displayed in a new page. - -###Search Term - -The entry term in the search form. - -###Extract - -Part of a document extracted and added in the results page. - -###Search Result - -Title (as a link to the document), description and extract. - -###Rank - -Value of ranking depending of number of search results and where the results have been found. - -###Search Results Page - -All the search results with optionaly a more results link to a showMoreResult page or all the search results paginated with the grabMax parameter. - -###Highlighted Term - -In the search results page, the search terms found could be (or not) highlighted. This needs the plugin searchHighlight. - -###Category - -A group of search results tagged with the same TV. - -##AjaxSearch Resources Links - -Forum board: MODx: http://forums.modx.com/board/94/ajaxsearch - -ClipperCMS: http://www.clippercms.com/forum/extras-%28core%29/ - -Bugs and new feature requests: https://github.com/modxcms/ajaxsearch \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/ajaxSearchPopup.php b/assets/snippets/ajaxSearch/ajaxSearchPopup.php deleted file mode 100644 index 5593513be3..0000000000 --- a/assets/snippets/ajaxSearch/ajaxSearchPopup.php +++ /dev/null @@ -1,72 +0,0 @@ -db->connect(); -if (empty ($modx->config)) { - $modx->getSettings(); -} -if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') || strpos($_SERVER['HTTP_REFERER'],$modx->config['site_url']) !== 0){ - $modx->sendErrorPage(); -} - -if (isset($_POST['search'])) { - - define('AS_VERSION', '1.11.0'); - define('AS_SPATH', 'assets/snippets/ajaxSearch/'); - define('AS_PATH', MODX_BASE_PATH . AS_SPATH); - - if (!isset($_POST['as_version']) || (strip_tags($_POST['as_version']) != AS_VERSION)) { - $output = "AjaxSearch version obsolete.
      Please check the snippet code in MODX manager."; - } - else { - include_once AS_PATH . "classes/ajaxSearch.class.inc.php"; - $tstart = $modx->getMicroTime(); - $default = AS_PATH . 'configs/default.config.php'; - if (file_exists($default)) include $default; - else return "

      AjaxSearch error: $default not found !
      Check the existing of this file!

      "; - if (!isset($dcfg)) return "

      AjaxSearch error: default configuration array not defined in $default!
      Check the content of this file!

      "; - $config = getUserConfigName((strip_tags($_POST['ucfg']))); - - // Load the custom functions of the custom configuration file if needed - if ($config) { - if (substr($config, 0, 6) != "@FILE:") { - // remove all not alphanumeric chars exept underscore and minus in the filename - $config = preg_replace('/[^a-zA-Z0-9_-]/i','', $config); - $lconfig = AS_PATH . "configs/{$config}.config.php"; - if (file_exists($lconfig)) { - include $lconfig; - } else { - return "

      AjaxSearch error: " . $lconfig . " not found !
      Check your config parameter or your config file name!

      "; - } - } else { - return "

      AjaxSearch error: @FILE: prefix not allowed !
      Check your config parameter or your config file name!

      "; - } - } - if ($dcfg['version'] != AS_VERSION) return "

      AjaxSearch error: Version number mismatch. Check the content of the default configuration file!

      "; - $as = new AjaxSearch(); - $output = $as->run($tstart, $dcfg); - header("Content-type: text/html; charset=".$modx->getConfig('modx_charset')); - } - echo $output; -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearch.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearch.class.inc.php deleted file mode 100644 index d48255bd5b..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearch.class.inc.php +++ /dev/null @@ -1,170 +0,0 @@ -error: AjaxSearchConfig classe not found"; - $asCfg = new AjaxSearchConfig($dcfg,$cfg); - if (!$asCfg->initConfig($msgErr)) return $msgErr; - - include_once AS_PATH . "classes/ajaxSearchUtil.class.inc.php"; - if (!class_exists('AjaxSearchUtil')) return "

      error: AjaxSearchUtil classe not found

      "; - $asUtil = new AjaxSearchUtil($asCfg->cfg['debug'],$asCfg->cfg['version'],$tstart,$msgErr); - if ($msgErr) return $msgErr; - - $dbg = $asUtil->dbg; // first level of debug log - @set_time_limit($asCfg->cfg['timeLimit']); - - include_once AS_PATH . "classes/ajaxSearchCtrl.class.inc.php"; - include_once AS_PATH . "classes/ajaxSearchInput.class.inc.php"; - include_once AS_PATH . "classes/ajaxSearchResults.class.inc.php"; - include_once AS_PATH . "classes/ajaxSearchOutput.class.inc.php"; - - if (class_exists('AjaxSearchCtrl') && class_exists('AjaxSearchInput') && class_exists('AjaxSearchResults') && class_exists('AjaxSearchOutput')) { - if ($asCfg->cfg['asLog']) { - include_once AS_PATH . "classes/ajaxSearchLog.class.inc.php"; - $asLog = new AjaxSearchLog($asCfg->cfg['asLog']); - } - if ($dbg) $asCfg->displayConfig($asUtil); - - $asCtrl = new AjaxSearchCtrl(); - $asInput = new AjaxSearchInput(); - $asResults = new AjaxSearchResults(); - $asOutput = new AjaxSearchOutput(); - - $asCtrl->init($asCfg,$asInput,$asResults,$asOutput,$asUtil,$asLog); - - $asUtil->setBacktrackLimit(PCRE_BACKTRACK_LIMIT); - - $output = $asCtrl->run(); - - $asUtil->restoreBacktrackLimit(); - - $etime = $asUtil->getElapsedTime(); - if ($dbg) $asUtil->dbgRecord($etime, "AjaxSearch - Elapsed Time"); - } else { - $output = "

      error: AjaxSearch classes not found

      "; - } - return $output; - } -} -// - -// -// Below functions could be used in end-user fonctions -/* -* stripTags : Remove modx sensitive tags -*/ -if (!function_exists('stripTags')) { - function stripTags($text) { - - $modRegExArray[] = '~\[\[(.*?)\]\]~s'; - $modRegExArray[] = '~\[\!(.*?)\!\]~s'; - $modRegExArray[] = '#\[\~(.*?)\~\]#s'; - $modRegExArray[] = '~\[\((.*?)\)\]~s'; - $modRegExArray[] = '~{{(.*?)}}~s'; - $modRegExArray[] = '~\[\*(.*?)\*\]~s'; - $modRegExArray[] = '~\[\+(.*?)\+\]~s'; - - foreach ($modRegExArray as $mReg) $text = preg_replace($mReg, '', $text); - return $text; - } -} -/* -* stripHtml : Remove HTML sensitive tags -*/ -if (!function_exists('stripHtml')) { - function stripHtml($text) { - return strip_tags($text); - } -} -/* -* stripHtmlExceptImage : Remove HTML sensitive tags except image tag -*/ -if (!function_exists('stripHtmlExceptImage')) { - function stripHtmlExceptImage($text) { - $text = strip_tags($text, ''); - return $text; - } -} -/* -* stripJscript : Remove jscript -*/ -if (!function_exists('stripJscripts')) { - function stripJscripts($text) { - - $text = preg_replace("']*>.*?'si", "", $text); - $text = preg_replace('/{.+?}/', '', $text); - return $text; - } -} -/* -* stripLineBreaking : replace line breaking tags with whitespace -*/ -if (!function_exists('stripLineBreaking')) { - function stripLineBreaking($text) { - - $text = preg_replace("'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si", ' ', $text); - return $text; - } -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchConfig.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchConfig.class.inc.php deleted file mode 100644 index b96cc95979..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchConfig.class.inc.php +++ /dev/null @@ -1,205 +0,0 @@ - 'UTF-8', 'latin1' => 'ISO-8859-1', 'latin2' => 'ISO-8859-2', 'cp1251' => 'windows-1251'); - - function __construct($dcfg, $cfg) { - global $modx; - $this->dbCharset = $modx->db->config['charset']; - if($this->dbCharset=='utf8mb4') $this->dbCharset = 'utf8'; - $this->pcreModifier = ($this->dbCharset == "utf8") ? 'iu' : 'i'; - $this->dcfg = $dcfg; - $this->cfg = $cfg; - } - /* - * Init the configuration - */ - function initConfig(&$msgErr) { - $msgErr = ''; - if (!isset($_POST['ucfg'])) { - - $this->isAjax = false; - - $this->ucfg = $this->getUserConfig(); - - $this->bcfg = array_merge($this->dcfg, (array)$this->ucfg); - - $this->scfg[DEFAULT_SITE][DEFAULT_SUBSITE] = array(); - } else { - - $this->isAjax = true; - - $this->ucfg = $this->parseUserConfig(strip_tags($_POST['ucfg'])); - - $this->bcfg = array_merge($this->dcfg, (array)$this->ucfg); - - $this->cfg = $this->bcfg; - - $this->scfg[DEFAULT_SITE][DEFAULT_SUBSITE] = array(); - } - - $this->_loadLang(); - - $valid = $this->_setCharset($msgErr); - return $valid; - } - /* - * Load the language file - */ - function _loadLang() { - $_lang = array(); - - $language = 'english'; - include AS_PATH . "lang/{$language}.inc.php"; - - if (($this->cfg['language'] != '') && ($this->cfg['language'] != $language)) { - if (file_exists(AS_PATH . "lang/{$this->cfg['language']}.inc.php")) include AS_PATH . "lang/" . $this->cfg['language'] . ".inc.php"; - } - $this->lang = $_lang; - } - /* - * Display config arrays - */ - function displayConfig(& $asUtil) { - if ($asUtil->dbg) { - if ($this->cfg['config']) $asUtil->dbgRecord($this->readConfigFile($this->cfg['config']), __FUNCTION__ . ' - ' . $this->cfg['config']); - $asUtil->dbgRecord($this->cfg, __FUNCTION__ . ' - Config before parameter checking'); - } - } - /* - * Set the Page charset - */ - function _setCharset(&$msgErr) { - $valid = false; - $msgErr = ''; - - $this->pgCharset = array_key_exists($this->dbCharset, $this->_pageCharset) ? $this->_pageCharset[$this->dbCharset] : $this->dbCharset; - - if (isset($this->dbCharset) && isset($this->_pageCharset[$this->dbCharset])) { - - if ($this->dbCharset == 'utf8' && !extension_loaded('mbstring')) { - $msgErr = "AjaxSearch error: php_mbstring extension required"; - } else { - if ($this->dbCharset == 'utf8' && $this->cfg['mbstring']) mb_internal_encoding("UTF-8"); - $this->pgCharset = $this->_pageCharset[$this->dbCharset]; - $valid = true; - } - } elseif (!isset($this->dbCharset)) { - $msgErr = "AjaxSearch error: database_connection_charset not set. Check your MODX config file"; - } elseif (!strlen($this->dbCharset)) { - $msgErr = "AjaxSearch error: database_connection_charset is null. Check your MODX config file"; - } else { - // if you get this message, simply update the $pageCharset array in search.class.inc.php file - // with the appropriate mapping between Mysql Charset and Html charset - // eg: 'latin2' => 'ISO-8859-2' - $msgErr = "AjaxSearch error: unknown database_connection_charset = {$this->dbCharset}
      Add the appropriate Html charset mapping in the ajaxSearchConfig.class.inc.php file"; - } - return $valid; - } - /* - * Save the current configuration - */ - function saveConfig($site, $subsite) { - if (!isset($this->scfg[$site][$subsite])) $this->scfg[$site][$subsite] = array(); - foreach ($this->cfg as $key => $value) { - if (!isset($this->bcfg[$key]) || ($this->bcfg[$key] != $value)) $this->scfg[$site][$subsite][$key] = $value; - } - } - /* - * Restore a named configuration - */ - function restoreConfig($site, $subsite) { - if (isset($this->scfg[$site][$subsite])) $this->cfg = array_merge($this->bcfg, $this->scfg[$site][$subsite]); - else $this->cfg = array_merge($this->bcfg, $this->scfg[DEFAULT_SITE][DEFAULT_SUBSITE]); - } - /* - * Choose the appropriate configuration for displaying results - */ - function chooseConfig($site, $subsite, $display) { - $s = ($display != MIXED) ? $site : DEFAULT_SITE; - $ss = ($display != MIXED) ? $subsite : DEFAULT_SUBSITE; - $this->restoreConfig($s, $ss); - } - /* - * Create a config by merging site and category config - */ - function addConfigFromCateg($site, $categ, $ctg) { - if (($site) && ($categ) && (!isset($this->scfg[$site][$categ]))) { - if (isset($this->scfg[$site][$DEFAULT_SUBSITE])) $s = $this->scfg[$site][$DEFAULT_SUBSITE]; - else $s = array(); - $this->scfg[$site][$categ] = array_merge((array)$s, (array)$ctg); - } - } - /* - * Get the non default configuration (advSearch and subSearch excepted) - */ - function getUserConfig() { - $ucfg = array(); - foreach ($this->cfg as $key => $value) { - if ($key != 'subSearch' && $value != $this->dcfg[$key]) $ucfg[$key] = $this->cfg[$key]; - } - return $ucfg; - } - /* - * Parse the non default configuration from string - */ - function parseUserConfig($strUcfg) { - $ucfg = array(); - $pattern = '/&([^=]*)=`([^`]*)`/'; - preg_match_all($pattern, $strUcfg, $out); - foreach ($out[1] as $key => $values) { - // remove any @BINDINGS in posted user config for security reasons - $ucfg[$out[1][$key]] = preg_replace('/@(#|FILE|DIRECTORY|DOCUMENT|CHUNK|INHERIT|SELECT|EVAL|CHUNK)[: ]/i', '', $out[2][$key]); - - } - return $ucfg; - } - /* - * Set the AjaxSearch snippet call - */ - function setAsCall($ucfg) { - $tpl = "&%s=`%s` "; - $asCall = ''; - foreach ($ucfg as $key => $value) $asCall.= sprintf($tpl, $key, $value); - return $asCall; - } - /* - * Read config file - */ - function readConfigFile($config) { - global $modx; - $configFile = (substr($config, 0, 6) != "@FILE:") ? AS_PATH . "configs/$config.config.php" : $modx->config['base_path'] . trim(substr($config, 6, strlen($config)-6)); - $fh = fopen($configFile, 'r'); - $output = fread($fh, filesize($configFile)); - fclose($fh); - return "\n" . $output; - } -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchCtrl.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchCtrl.class.inc.php deleted file mode 100644 index 1ef778450c..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchCtrl.class.inc.php +++ /dev/null @@ -1,196 +0,0 @@ -asCfg =& $asCfg; - $this->asInput =& $asInput; - $this->asResults =& $asResults; - $this->asOutput =& $asOutput; - $this->asUtil =& $asUtil; - $this->dbg = $asUtil->dbg; - $this->dbgTpl = $asUtil->dbgTpl; - $this->dbgRes = $asUtil->dbgRes; - $this->asLog =& $asLog; - $asLog_array = explode(':', $asCfg->cfg['asLog']); - $this->log = ($asLog_array[0]) ? true : false; - - - $this->asInput->init($asCfg, $this, $asUtil); - $this->asResults->init($asCfg, $this, $asOutput, $asUtil); - $this->asOutput->init($asCfg, $this, $asInput, $asResults, $asUtil, $asLog, $this->log); - } - /* - * run : run the search - */ - function run() { - $this->setforThisAs(); - $this->getEvents(); // get $_POST and _GET variables - $valid = $this->asInput->display($msg); - if ($valid) { - $valid2 = $this->asResults->getSearchResults($msg); - if (!$valid2) return $msg; - } - $this->asOutput->setAjaxSearchHeader(); - if (!$this->pagination) $output = $this->asOutput->display($valid, $msg); - else $output = $this->asOutput->paginate($valid, $msg); - return $output; - } - /* - * setforThisAs : Check if this instance is concerned - */ - function setforThisAs() { - if ($this->asCfg->isAjax) $this->forThisAs = true; - else { - $id = ''; - if (isset($_POST['asid']) || isset($_GET['asid'])) { - - if (isset($_POST['asid'])) $id = strip_tags($_POST['asid']); - else $id = strip_tags(urldecode($_GET['asid'])); - } - $this->forThisAs = ($this->asCfg->cfg['asId'] != $id) ? false : true; - } - } - function getEvents() { - - $this->getSearchString(); - $this->subSearch = $this->asCfg->cfg['subSearch']; - if (isset($_POST['subsearch']) || isset($_GET['subsearch'])) { - - if (isset($_POST['subsearch'])) { - $ssc = isset($_POST['ssc']) ? ':' : ','; - if (is_array($_POST['subsearch'])) { - foreach($_POST['subsearch'] as $key => $value) $_POST['subsearch'][$key] = strip_tags($value); - $this->subSearch = implode($ssc,$_POST['subsearch']); - } - else $this->subSearch = strip_tags($_POST['subsearch']); - } - else { - $ssc = isset($_GET['ssc']) ? ':' : ','; - if (is_array($_GET['subsearch'])) { - foreach($_GET['subsearch'] as $key => $value) $_GET['subsearch'][$key] = strip_tags($value); - $this->subSearch = implode($ssc,$_GET['subsearch']); - } - else $this->subSearch = strip_tags($_GET['subsearch']); - } - } - if ($this->dbg) $this->asUtil->dbgRecord($this->subSearch , "getEvents - subsearch"); - - - $asfConfig = 'asfConfig'; - if ((isset($_POST['asf']) || isset($_GET['asf'])) && function_exists($asfConfig)) { - $this->asf = isset($_POST['asf']) ? strip_tags($_POST['asf']) : strip_tags(urldecode($_GET['asf'])); - $this->fClause = $asfConfig($this->asf, $this->fParams); - if ($this->dbg) $this->asUtil->dbgRecord($this->fParams , "getEvents - fParams"); - if ($this->dbg) $this->asUtil->dbgRecord($this->fClause , "getEvents - fClause"); - } - else $this->asf = ''; - if ($this->dbg) $this->asUtil->dbgRecord($this->asf , "getEvents - asf"); - - $this->offset = (isset($_GET['aso'])) ? strip_tags(urldecode($_GET['aso'])) : '0,0'; - if ($this->dbg) $this->asUtil->dbgRecord($this->offset , "getEvents - offset"); - - $this->pagination = (isset($_POST['pgn'])) ? strip_tags($_POST['pgn']) : ''; - if ($this->dbg) $this->asUtil->dbgRecord($this->pagination , "getEvents - pgn"); - } - function getSearchString() { - $this->searchString = ''; - $this->advSearch = $this->asCfg->cfg['advSearch']; - - if ($this->forThisAs) { - if (!$this->asCfg->isAjax) { - - if (isset($_POST['search']) || (isset($_GET['search']) && (!$this->asCfg->cfg['ajaxSearch']))) { - if (isset($_POST['search'])) { - if (is_array($_POST['search'])) { - foreach($_POST['search'] as $key => $value) $_POST['search'][$key] = strip_tags($value); - $this->searchString = implode(' ', $_POST['search']); - } - else $this->searchString = strip_tags($_POST['search']); - } else { - $this->searchString = strip_tags(urldecode($_GET['search'])); - } - if (isset($_POST['advsearch'])) $this->advSearch = strip_tags($_POST['advsearch']); - else if (isset($_GET['advsearch'])) $this->advSearch = strip_tags(urldecode($_GET['advsearch'])); - } - } - else { - if (isset($_POST['search'])) { - if (is_array($_POST['search'])) { - foreach($_POST['search'] as $key => $value) $_POST['search'][$key] = strip_tags($value); - $this->searchString = implode(' ', $_POST['search']); - } - else $this->searchString = strip_tags($_POST['search']); - - if (($this->asCfg->pgCharset != 'UTF-8') && (ini_get('mbstring.encoding_translation') == '' || strtolower(ini_get('mbstring.http_input')) == 'pass')) { - $this->searchString = mb_convert_encoding($this->searchString, $this->asCfg->pgCharset, "UTF-8"); - $this->asOutput->setNeedsConvert(true); - } else { - $this->asOutput->setNeedsConvert(false); - } - if (isset($_POST['advsearch'])) $this->advSearch = strip_tags($_POST['advsearch']); - } - } - } - if ($this->dbg) $this->asUtil->dbgRecord($this->searchString, "getSearchString - searchString"); - if ($this->dbg) $this->asUtil->dbgRecord($this->advSearch, "getSearchString - advSearch"); - } - /* - * getSearchWords : depending advSearch, get the search words - */ - function getSearchWords($search, $advSearch) { - $searchList = array(); - if (($advSearch == NOWORDS) || (!$search)) return $searchList; - if ($advSearch == EXACTPHRASE) $searchList[] = $search; - else $searchList = explode(' ', $search); - return $searchList; - } - function setSearchString($searchString) { - $this->searchString = $searchString; - } - function setAdvSearch($advSearch) { - $this->advSearch = $advSearch; - } - function setSubSearch($subSearch) { - $this->subSearch = $subSearch; - } -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchInput.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchInput.class.inc.php deleted file mode 100644 index 1c2d7480bf..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchInput.class.inc.php +++ /dev/null @@ -1,376 +0,0 @@ -asCfg =& $asCfg; - $this->asCtrl =& $asCtrl; - $this->asUtil =& $asUtil; - $this->dbg = $asUtil->dbg; - $this->dbgTpl = $asUtil->dbgTpl; - } - /* - * Set up the input form - * - * @access public - * @param string &$msgErr message error - */ - function display(&$msgErr) { - $msgErr = ''; - $this->_checkParams(); - $valid = $this->_validSearchString($msgErr); - $this->_displayInputForm($msgErr); - $this->_setClearDefaultHeader(); - - return $valid; - } - /* - * Check input field params - */ - function _checkParams() { - if ($this->asCtrl->forThisAs) { - if (isset($this->asCfg->cfg['maxWords'])) { - if ($this->asCfg->cfg['maxWords'] < MIN_WORDS) $this->asCfg->cfg['maxWords'] = MIN_WORDS; - if ($this->asCfg->cfg['maxWords'] > MAX_WORDS) $this->asCfg->cfg['maxWords'] = MAX_WORDS; - } - if (isset($this->asCfg->cfg['minChars'])) { - if ($this->asCfg->cfg['minChars'] < MIN_CHARS) $this->asCfg->cfg['minChars'] = MIN_CHARS; - if ($this->asCfg->cfg['minChars'] > MAX_CHARS) $this->asCfg->cfg['minChars'] = MAX_CHARS; - } - } - } - /* - * Valid the input search term and the advSearch parameter - */ - function _validSearchString(&$msgErr) { - global $modx; - $msgErr = ''; - $searchString = $this->asCtrl->searchString; - $advSearch = $this->asCtrl->advSearch; - - $advSearch = (in_array($advSearch, $this->_advSearchType)) ? $advSearch : $this->_advSearchType[0]; - - $valid = $this->_checkSearchString($searchString, $advSearch, $msgErr); - if (!$valid) return false; - - $valid = $this->_stripSearchString($searchString, $this->asCfg->cfg['stripInput'], $advSearch, $msgErr); - if (!$valid) return false; - - $modx->setPlaceholder("as.searchString", $searchString); - - $this->asCtrl->setSearchString($searchString); - $this->asCtrl->setAdvSearch($advSearch); - return true; - } - /* - * Check search string - */ - function _checkSearchString(&$searchString, $advSearch, &$msgErr) { - if (!$this->asCtrl->forThisAs) { - $msgErr = ''; - return false; - } - if ($this->dbg) $this->asUtil->dbgRecord($searchString, "checkSearchString - searchString"); - - $searchSubmitted = (isset($_POST['search']) || isset($_GET['search'])); - if ($this->dbg) $this->asUtil->dbgRecord($searchSubmitted,"checkSearchString - searchSubmitted"); - $asfSubmitted = (isset($_POST['asf']) || isset($_GET['asf'])); - if ($this->dbg) $this->asUtil->dbgRecord($asfSubmitted,"checkSearchString - asfSubmitted"); - $checkString = true; - - if ($searchSubmitted) { - if ($searchString == $this->asCfg->lang['as_boxText']) { // "search here ..." - if ($this->asCfg->cfg['init'] == 'all') { // display all - $checkString = false; - $searchString = ''; - } - else { // check the empty input field => error message (At least 3 characters) - $searchString = ''; - if ($asfSubmitted) $checkString = false; // no check if a filter is submitted - } - } - else if (($searchString == '') && ($this->asCfg->cfg['init'] == 'all')) { - $checkString = false; - } - else if (($searchString == '') && ($this->asCfg->cfg['init'] == 'none') && $asfSubmitted) { - $checkString = false; - } - } - else { - if ($searchString == '') { - if (($this->asCfg->cfg['init'] == 'none') && (!$asfSubmitted)) { - $msgErr = ''; - return false; - } - else { - $checkString = false; - } - } - } - if ($this->dbg) $this->asUtil->dbgRecord($checkString,"checkSearchString - checkString"); - if ($this->dbg) $this->asUtil->dbgRecord($searchString,"checkSearchString - searchString used"); - - if ($checkString) { - - $words_array = explode(' ', preg_replace('/\s\s+/', ' ', trim($searchString))); - $mbStrlen = $this->asCfg->cfg['mbstring'] ? 'mb_strlen' : 'strlen'; - if (($this->asCfg->dbCharset == 'utf8') && ($this->asCfg->cfg['mbstring'])) mb_internal_encoding("UTF-8"); - - - if (count($words_array) > $this->asCfg->cfg['maxWords']) { - $msgErr = sprintf($this->asCfg->lang['as_maxWords'], $this->asCfg->cfg['maxWords']); - return false; - } - - if ($advSearch == EXACTPHRASE) { - - if ($mbStrlen($searchString) < $this->asCfg->cfg['minChars']) { - $msgErr = sprintf($this->asCfg->lang['as_minChars'], $this->asCfg->cfg['minChars']); - return false; - } - if ($mbStrlen($searchString) > MAX_CHARS) { - $msgErr = sprintf($this->asCfg->lang['as_maxChars'], MAX_CHARS); - return false; - } - } else { - //oneword, allwords or nowords - foreach ($words_array as $word) { - if ($mbStrlen($word) < $this->asCfg->cfg['minChars']) { - $msgErr = sprintf($this->asCfg->lang['as_minChars'], $this->asCfg->cfg['minChars']); - return false; - } - if ($mbStrlen($searchString) > MAX_CHARS) { - $msgErr = sprintf($this->asCfg->lang['as_maxChars'], MAX_CHARS); - return false; - } - } - } - } - return true; - } - /* - * Strip the searchString with the user StripInput function - */ - function _stripSearchString(&$searchString, $stripInput, &$advSearch, &$msgErr) { - $msgErr = ''; - if ($searchString != '') { - $searchString = preg_replace('/\s\s+/', ' ', trim($searchString)); - if ($stripInput != 'defaultStripInput') { - if (function_exists($stripInput)) $searchString = $stripInput($searchString, $advSearch); - else { - $msgErr = "

      AjaxSearch error: strip input function $stripInput not defined in the configuration file: " . $this->asCfg->cfg['config'] . " !


      "; - return false; - } - } else $searchString = $this->_defaultStripInput($searchString, $this->asCfg->pgCharset); - $valid = (($searchString !== '') || ($this->asCfg->cfg['init'] == 'all')); - return $valid; - } - return true; - } - /* - * Default user StripInput function - */ - function _defaultStripInput($searchString, $pgCharset = 'UTF-8') { - global $modx; - if ($searchString !== '') { - - $searchString = stripslashes($searchString); - - $searchString = $this->_stripJscripts($searchString); - - $searchString = $modx->stripTags($searchString); - - $searchString = $this->_stripHtml($searchString); - - $searchString = $this->_htmlspecialchars($searchString, ENT_COMPAT, $pgCharset, False); - - if(function_exists('mb_convert_kana')) $searchString = mb_convert_kana($searchString, 's', $pgCharset); - } - return $searchString; - } - /* - * Display the input form - */ - function _displayInputForm($msgErr) { - global $modx; - $varInputForm = array(); - if ($this->asCfg->cfg['showInputForm']) { - if (!class_exists('AsPhxParser')) include_once AS_PATH . "classes/asPhxParser.class.inc.php"; - - $tplInputForm = $this->asCfg->cfg['tplInput']; - $chkInputForm = new AsPhxParser($tplInputForm); - if ($this->dbgTpl) { - $this->asUtil->dbgRecord($chkInputForm->getTemplate($tplInputForm), "tplInputForm template" . $tplInputForm); - } - - if (isset($this->asCfg->cfg['landingPage']) && !is_bool($this->asCfg->cfg['landingPage'])) { - $searchAction = "[~" . $this->asCfg->cfg['landingPage'] . "~]"; - } else { - $searchAction = "[~" . $modx->documentIdentifier . "~]"; - } - $varInputForm['showInputForm'] = '1'; - $varInputForm['formId'] = ($this->asCfg->cfg['asId'] != '') ? $this->asCfg->cfg['asId'] . '_ajaxSearch_form' : 'ajaxSearch_form'; - $varInputForm['formAction'] = $searchAction; - - if ($this->dbg) $this->asUtil->dbgRecord($this->asCtrl->searchString, "displayInputForm - searchString"); - - $varInputForm['inputId'] = ($this->asCfg->cfg['asId'] != '') ? $this->asCfg->cfg['asId'] . '_ajaxSearch_input' : 'ajaxSearch_input'; - // simple input field - Not used if a multiple input list is used - $varInputForm['inputValue'] = ($this->asCtrl->searchString == '' && $this->asCfg->lang['as_boxText'] != 'init' ) ? $this->asCfg->lang['as_boxText'] : $this->asCtrl->searchString; - $varInputForm['inputOptions'] = ($this->asCfg->lang['as_boxText']) ? ' onfocus="this.value=(this.value==\'' . $this->asCfg->lang['as_boxText'] . '\')? \'\' : this.value ;"' : ''; - $varInputForm['asfId'] = ($this->asCfg->cfg['asId'] != '') ? $this->asCfg->cfg['asId'] . '_asf_form' : 'asf_form'; - - //if (($this->asCtrl->searchString == 'init')) $this->asCtrl->setSearchString(''); - if ($this->dbg) $this->asUtil->dbgRecord($this->asCtrl->searchString, "displayInputForm - searchString"); - - - // Submit button - if ($this->asCfg->cfg['liveSearch']) $varInputForm['liveSearch'] = 1; - else { - $varInputForm['liveSearch'] = 0; - $varInputForm['submitId'] = ($this->asCfg->cfg['asId'] != '') ? $this->asCfg->cfg['asId'] . '_ajaxSearch_submit' : 'ajaxSearch_submit'; - $varInputForm['submitText'] = $this->asCfg->lang['as_searchButtonText']; - } - - - $varInputForm['advSearch'] = $this->asCtrl->advSearch; - - $varInputForm['radioId'] = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . '_ajaxSearch_radio' : 'ajaxSearch_radio'; - $varInputForm['onewordId'] = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . '_radio_oneword' : 'radio_oneword'; - $varInputForm['oneword'] = ONEWORD; - $varInputForm['onewordText'] = $this->asCfg->lang[ONEWORD]; - $varInputForm['onewordChecked'] = ($this->asCtrl->advSearch == ONEWORD ? 'checked ="checked"' : ''); - $varInputForm['allwordsId'] = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . '_radio_allwords' : 'radio_allwords'; - $varInputForm['allwords'] = ALLWORDS; - $varInputForm['allwordsText'] = $this->asCfg->lang[ALLWORDS]; - $varInputForm['allwordsChecked'] = ($this->asCtrl->advSearch == ALLWORDS ? 'checked ="checked"' : ''); - $varInputForm['exactphraseId'] = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . '_radio_exactphrase' : 'radio_exactphrase'; - $varInputForm['exactphrase'] = EXACTPHRASE; - $varInputForm['exactphraseText'] = $this->asCfg->lang[EXACTPHRASE]; - $varInputForm['exactphraseChecked'] = ($this->asCtrl->advSearch == EXACTPHRASE ? 'checked ="checked"' : ''); - $varInputForm['nowordsId'] = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . '_radio_nowords' : 'radio_nowords'; - $varInputForm['nowords'] = NOWORDS; - $varInputForm['nowordsText'] = $this->asCfg->lang[NOWORDS]; - $varInputForm['nowordsChecked'] = ($this->asCtrl->advSearch == NOWORDS ? 'checked ="checked"' : ''); - - - if (!$this->asCtrl->searchString) { - if ($this->asCfg->cfg['showIntro']) { - $varInputForm['showIntro'] = 1; - $varInputForm['introMessage'] = $this->asCfg->lang['as_introMessage']; - } else $varInputForm['showIntro'] = 0; - } - - - if ($this->asCfg->cfg['asId']) { - $varInputForm['showAsId'] = '1'; - $varInputForm['asName'] = 'asid'; - $varInputForm['asId'] = $this->asCfg->cfg['asId']; - } else { - $varInputForm['showAsId'] = '0'; - } - - $chkInputForm->AddVar("as", $varInputForm); - $this->inputForm = $chkInputForm->Render() . "\n"; - - if (isset($this->asCfg->cfg['tplAsf']) && $this->asCfg->cfg['tplAsf']) { - $tplAsfForm = $this->asCfg->cfg['tplAsf']; - $chkAsfForm = new AsPhxParser($tplAsfForm); - if ($this->dbgTpl) { - $this->asUtil->dbgRecord($chkAsfForm->getTemplate($tplAsfForm), "tplAsfForm template" . $tplAsfForm); - } - $varAsfForm = array(); - $varAsfForm['asfId'] = ($this->asCfg->cfg['asId'] != '') ? $this->asCfg->cfg['asId'] . '_asf_form' : 'asf_form'; - $chkAsfForm->AddVar("as", $varAsfForm); - $this->asfForm = $chkAsfForm->Render() . "\n"; - } - } - } - /* - * setClearDefaultHeader : set the clearDefault header - */ - function _setClearDefaultHeader() { - global $modx; - - if ($this->asCfg->cfg['showInputForm'] && $this->asCfg->cfg['clearDefault']) $modx->regClientStartupScript($this->asCfg->cfg['jsClearDefault']); - } - /* - * Manage the double_encode parameter added with version 5.2.3 - */ - function _htmlspecialchars($string, $quote_style = ENT_COMPAT, $charset = 'UTF-8', $double_encode = true) { - // The double_encode parameter was added with version 5.2.3 - if (version_compare(PHP_VERSION, '5.2.3', '>=')) $string = htmlspecialchars($string, $quote_style, $charset, $double_encode); - else { - if ($double_encode === true) { - $string = str_replace('&', '&', $string); - } - $tf = array('&' => '&', '<' => '<', '>' => '>'); - if ($quote_style & ENT_NOQUOTES) { - $tf['"'] = '"'; - } - if ($quote_style & ENT_QUOTES) { - $tf["'"] = '''; - } - $searchString = str_replace(array_keys($tf), array_values($tf), $string); - } - return $string; - } - /* - * stripJscript : Remove jscript - */ - function _stripJscripts($text) { - - $text = preg_replace("']*>.*?'si", "", $text); - $text = preg_replace('/{.+?}/', '', $text); - return $text; - } - /* - * stripHtml : Remove HTML sensitive tags - */ - function _stripHtml($text) { - return strip_tags($text); - } -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchLog.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchLog.class.inc.php deleted file mode 100644 index f2a54ef053..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchLog.class.inc.php +++ /dev/null @@ -1,172 +0,0 @@ -_tbName = $modx->getFullTableName(LOG_TABLE_NAME); - $asLog_array = explode(':', $log); - $this->log = (int)$asLog_array[0]; - if ($this->log > 0 && $this->log < 3) { - $this->_purge = isset($asLog_array[2]) ? (int)$asLog_array[2] : PURGE; - if ($this->_purge < 0) $this->_purge = PURGE; - $this->_initLogTable(); - - $this->logcmt = isset($asLog_array[1]) ? (int)$asLog_array[1] : 0; - if ($this->logcmt) { - $jsInclude = AS_SPATH . COMMENT_JSDIR . '/ajaxSearchCmt.js'; - $modx->regClientStartupScript($jsInclude); - } - } else { - $this->log = 0; - } - } - /* - * Create the ajaxSearch log table if needed - */ - function _initLogTable() { - global $modx; - $db = $modx->db->config['dbase']; - $tbn = $modx->db->config['table_prefix'] . LOG_TABLE_NAME; - if (!$this->_existLogTable($db, $tbn)) { - - $SQL_CREATE_TABLE = "CREATE TABLE " . $this->_tbName . " ( - `id` smallint(5) NOT NULL auto_increment, - `searchstring` varchar(128) NOT NULL, - `nb_results` smallint(5) NOT NULL, - `results` mediumtext, - `comment` mediumtext, - `as_call` mediumtext, - `as_select` mediumtext, - `date` timestamp(12) NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, - `ip` varchar(255) NOT NULL, - PRIMARY KEY (`id`) - ) ENGINE=MyISAM;"; - if (!$modx->db->query($SQL_CREATE_TABLE)) { - return false; - } - return true; - } - } - /* - * Check if the table exists or not - */ - function _existLogTable($db, $tbName) { - global $modx; - $SHOW_TABLES = "SHOW TABLES FROM $db LIKE '$tbName';"; - $exec = $modx->db->query($SHOW_TABLES); - return $modx->db->getRecordCount($exec); - } - /* - * Write a log record in database - * - * @access public - * @param array $rs record set - * return the id of the record logged - */ - function setLogRecord($rs) { - global $modx; - if ($this->_purge) $this->_purgeLogs(); - $lastid = $modx->db->insert( - array( - 'searchstring' => $modx->db->escape($rs['searchString']), - 'nb_results' => $rs['nbResults'], - 'results' => trim($rs['results']), - 'comment' => '', - 'as_call' => $rs['asCall'], - 'as_select' => $rs['asSelect'], - 'ip' => $_SERVER['REMOTE_ADDR'], - ), $this->_tbName); - return $lastid; - } - /* - * Purge the log table - */ - function _purgeLogs() { - global $modx; - - $rs = $modx->db->select('count(*) AS count', $this->_tbName); - $nbLogs = $modx->db->getValue($rs); - - if ($nbLogs + 1 > $this->_purge) { - $modx->db->delete($this->_tbName); - } - } - /* - * Update a comment of a search record in database - * - * @access public - * @param int $logid id of the log - * @param string $ascmt comment - */ - function updateComment($logid, $ascmt) { - global $modx; - $fields['comment'] = $modx->db->escape($ascmt); - $where = "id='" . $logid . "'"; - $modx->db->update($fields, $this->_tbName, $where); - return true; - } -} -//============================================================================== -/* The code below handles comment sent if the $_POST variables are set. -Used when the user post comment from the ajaxSearch results window */ -if (!empty($_POST['logid']) && !empty($_POST['ascmt'])) { - $ascmt = strip_tags($_POST['ascmt']); - $logid = intval($_POST['logid']); - $safeCmt = (strlen($ascmt) < CMT_MAX_LENGTH) && (substr_count($ascmt, 'http') < CMT_MAX_LINKS); - if (($ascmt != '') && ($logid > 0) && $safeCmt) { - - define('MODX_API_MODE', true); - include_once(__DIR__."/../../../../index.php"); - $modx->db->connect(); - if (empty ($modx->config)) { - $modx->getSettings(); - } - if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') || strpos($_SERVER['HTTP_REFERER'],$modx->config['site_url']) !== 0){ - $modx->sendErrorPage(); - } - - $asLog = new AjaxSearchLog(); - $asLog->updateComment($logid, $ascmt); - echo "comment about record " . $logid . " registered"; - } else { - echo "ERROR: comment rejected"; - } -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchOutput.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchOutput.class.inc.php deleted file mode 100644 index 61e7406de9..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchOutput.class.inc.php +++ /dev/null @@ -1,1089 +0,0 @@ -
      '); - -define('AJAXSEARCH_JSDIR','js/ajaxSearch'); - -define('ASPHX','||-AJAXSEARCH-||'); - -define('NB_MORE_RESULTS',10); - -class AjaxSearchOutput { - - // public variables - var $asCfg = null; - var $asCtrl = null; - var $asInput = null; - var $asResults = null; - var $asUtil = null; - var $asLog = null; - - var $dbg = false; - var $dbgTpl = false; - var $dbgRes = false; - var $log = false; - - var $output; - // class variables - var $asClass = array(); - // chunkie variables - var $chkResults; - var $varResults = array(); - var $chkGrpResult; - var $varGrpResult = array(); - var $tplGrpRes; - var $chkResult; - var $varResult = array(); - var $tplRes; - var $scMain = array(); - var $scJoined = array(); - var $scTvs = array(); - var $logIds = array(); - - // private variables - var $_needsConvert; - - function __construct() { - } - function init(&$asCfg, &$asCtrl, &$asInput, &$asResults, &$asUtil, &$asLog, $log) { - // initialize the output instance - $this->asCfg =& $asCfg; - $this->asCtrl =& $asCtrl; - $this->asInput =& $asInput; - $this->asResults =& $asResults; - $this->asUtil =& $asUtil; - $this->dbg = $asUtil->dbg; - $this->dbgTpl = $asUtil->dbgTpl; - $this->dbgRes = $asUtil->dbgRes; - $this->asLog =& $asLog; - $this->log = $log; - } - /* - * display : display final output - */ - function display($validSearch, &$msgErr) { - global $modx; - - $this->_checkParams(); - if ($this->asCfg->isAjax) { - $jsonPairs = array(); - $output = $this->_displayResults($validSearch, $msgErr, $nbResultsInfos); - $output .= $this->_displayComment(); - $jsonPairs[] = $this->_getJsonPair('res',$output); - $jsonPairs[] = $this->_getJsonPair('resnb',$nbResultsInfos); - if ($validSearch) $this->_updateAsf($jsonPairs); - $output = $this->_getJson($jsonPairs); - } - else { - $outputInputForm = $this->asInput->inputForm; // - $outputAsfForm = $this->asInput->asfForm; - if ($this->asCfg->cfg['ajaxSearch']) { - $outputResults = $this->_initDisplayResults(); - } - else { - $outputResults = $this->_displayResults($validSearch, $msgErr, $nbResultsInfos); // non ajax results output - $outputResults .= $this->_displayComment(); - } - if (!$this->asCfg->cfg['output']) { - $output = $outputInputForm; - $output .= $outputAsfForm; - $output .= $outputResults; - } - else { - $output = ''; - $modx->setPlaceholder("as.inputForm", $outputInputForm); - $modx->setPlaceholder("as.asfForm", $outputAsfForm); - $modx->setPlaceholder("as.results", $outputResults); - } - } - return $output; - } - /* - * checkParams : Check output field params - */ - function _checkParams() { - if (($this->asCfg->cfg['pagingType'] < 0) || ($this->asCfg->cfg['pagingType'] > 2)) $this->asCfg->cfg['pagingType'] = 1; - } - /* - * Init display results - */ - function _initDisplayResults(){ - $prefix = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . "_" : ''; - $outputResults = sprintf(RESULTS_DIV, $prefix); - return $outputResults; - } - /* - * displayResults : display results - */ - function _displayResults($validSearch, &$msgErr, &$nbResultsInfos) { - $this->_initCommonChunks(); - $outputResults = ''; - $nbFoundResults = 0; - $nbDisplayedResults = 0; - $logIds = array(); - $asCall = $this->_getAsCall($this->asCfg->setAsCall($this->asCfg->getUserConfig())); - $select = $this->asResults->_asRequest->asSelect; - if ($this->asCfg->cfg['showResults']) { - if ($validSearch) { - if (!$this->asCfg->isAjax) $this->_setOffset(); - $listGrpResults = ''; - $ig = 0; - if ($this->asResults->nbResults > 0) { - $this->_getSearchContext(); - $nbDisplayedResults = 0; - for ($ig = 0;$ig < $this->asResults->nbGroups;$ig++) { - - $found = ''; - $site = $this->asResults->groupResults[$ig]['site']; - $subsite = $this->asResults->groupResults[$ig]['subsite']; - $display = $this->asResults->groupResults[$ig]['display']; - $offset = intval($this->asResults->groupResults[$ig]['offset']); - $nbrs = intval($this->asResults->groupResults[$ig]['length']); - $nbFoundResults += $nbrs; - // nb results displayed - if ($this->asCfg->isAjax) $nbMax = ($this->asCfg->cfg['ajaxMax'] > 0) ? $this->asCfg->cfg['ajaxMax'] : $nbrs; - else $nbMax = ($this->asCfg->cfg['grabMax'] > 0) ? $this->asCfg->cfg['grabMax'] : $nbrs; - - $searchResults = array_slice($this->asResults->groupResults[$ig]['results'], $offset, $nbMax); - $nbDisplayedResults += count($searchResults); - - $this->asCfg->chooseConfig($site, $subsite, $display); - $this->_initDisplayVariables(); - - $listGrpResults .= $this->_displayGrpResult($ig, $site, $subsite, $display, $nbrs, $searchResults, $offset, $nbMax); - - $lid = $this->_setSuccessfullSearches($ig); - if ($lid) $logIds[] = $lid; - } - - $this->asCfg->restoreConfig(DEFAULT_SITE, DEFAULT_SUBSITE); - - if ($nbFoundResults) { - - if ($this->asCtrl->searchString && ($this->asCtrl->advSearch != NOWORDS)) { - $resultsFoundText = ($nbFoundResults > 1) ? $this->asCfg->lang['as_resultsFoundTextMultiple'] : $this->asCfg->lang['as_resultsFoundTextSingle']; - if ($this->asResults->withExtract) { - $searchList = $this->asCtrl->getSearchWords($this->asCtrl->searchString, $this->asCtrl->advSearch); - $hits = 1; - $searchwords = ''; - foreach ($searchList as $words) { - $searchwords.= '' . $words . ' '; - $hits++; - } - $searchwords = substr($searchwords, 0, strlen($searchwords) - 6); - $this->varResults['resultsFoundText'] = sprintf($resultsFoundText, $nbFoundResults, $searchwords); - } else { - $this->varResults['resultsFoundText'] = sprintf($resultsFoundText, $nbFoundResults, $this->asCtrl->searchString); - } - } - else { - $resultsFoundText = ($nbFoundResults > 1) ? $this->asCfg->lang['as_resultsTextMultiple'] : $this->asCfg->lang['as_resultsTextSingle']; - $this->varResults['resultsFoundText'] = sprintf($resultsFoundText, $nbFoundResults); - } - - $resultsDisplayedText = $this->asCfg->lang['as_resultsDisplayed']; - $this->varResults['resultsDisplayedText'] = sprintf($resultsDisplayedText, $nbDisplayedResults); - - - $this->varResults['noResults'] = 0; - $this->varResults['listGrpResults'] = ASPHX; - - if ($this->asCfg->isAjax) $this->_setMoreResultsLink($this->asResults->nbResults); - } - else { - $this->varResults['noResults'] = 1; - $this->varResults['noResultClass'] = INTROFAILURE_CLASS; - $this->varResults['noResultText'] = $this->asCfg->lang['as_resultsIntroFailure']; - $this->_setFailedSearches($asCall,$select); - } - } else { - $this->varResults['noResults'] = 1; - $this->varResults['noResultClass'] = INTROFAILURE_CLASS; - $this->varResults['noResultText'] = $this->asCfg->lang['as_resultsIntroFailure']; - $this->_setFailedSearches($asCall,$select); - } - } - else { - $this->varResults['showCmt'] = 0; - $this->varResults['noResults'] = 1; - $this->varResults['noResultClass'] = 'AS_ajax_resultsIntroFailure'; - $this->varResults['noResultText'] = $msgErr; - } - $this->chkResults->AddVar("as", $this->varResults); - $outputResults = $this->chkResults->Render(); - $outputResults = str_replace(ASPHX, $listGrpResults, $outputResults); - unset($this->varResults); - unset($this->chkResults); - - // UTF-8 conversion is required if mysql character set is different of 'utf8' - if ($this->_needsConvert) $outputResults = mb_convert_encoding($outputResults,"UTF-8",$this->asCfg->pgCharset); - - $this->logIds = $logIds; - } - - $nbResultsInfos = $nbFoundResults . ',' . $nbDisplayedResults; - return $outputResults; - } - /* - * Display a group of results - */ - function _displayGrpResult($ig, $site, $subsite, $display, $nbrs, $searchResults, $offset, $nbMax) { - $found = array(); - $this->chkGrpResult = new AsPhxParser($this->tplGrpRes); - $this->varGrpResult = array(); - - $this->varGrpResult['headerGrpResult'] = $this->_displayHeaderGrpResult($site, $subsite, $display, $nbrs, $searchResults, $offset, $nbMax); - - $this->varGrpResult['grpResultsDef'] = 1; - $prefix = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . "_" : ''; - $this->varGrpResult['grpResultId'] = $prefix . 'grpResult_' . $this->_getCleanCssId($subsite); - - $listResults = $this->_displayListResults($site, $subsite, $display, $nbrs, $searchResults, $found, $offset); - $this->varGrpResult['listResults'] = ASPHX; - - $this->varGrpResult['footerGrpResult'] = $this->_displayFooterGrpResult($ig, $nbrs, $offset, $nbMax); - - $this->asResults->groupResults[$ig]['found'] = implode(' ',$found); - - $this->chkGrpResult->AddVar("as", $this->varGrpResult); - $grpResult = $this->chkGrpResult->Render(); - $grpResult = str_replace(ASPHX, $listResults, $grpResult); - unset($this->varGrpResult); - unset($this->chkGrpResult); - - return $grpResult; - } - /* - * Display the header of a group of results - */ - function _displayHeaderGrpResult($site, $subsite, $display, $nbrs, $searchResults, $offset, $nbMax) { - $varHeader = array(); - - $varHeader['grpResultsDef'] = 0; - $label = (isset($this->asCfg->scfg[$site][$subsite]['grpLabel'])) ? $this->asCfg->scfg[$site][$subsite]['grpLabel'] : $subsite; - $varHeader['grpResultNameShow'] = ($label != DEFAULT_SUBSITE) ? 1 : 0; - $varHeader['grpResultName'] = $label; - $grpResultsDisplayedText = $this->asCfg->lang['as_grpResultsDisplayedText']; - $grpResultNb = $nbrs; - $grpResultStart = $offset + 1; - $grpResultEnd = ($offset + $nbMax > $nbrs) ? $nbrs : $offset + $nbMax; - $varHeader['grpResultsDisplayedText'] = sprintf($grpResultsDisplayedText, $grpResultStart, $grpResultEnd, $grpResultNb); - - $this->chkGrpResult->AddVar("as", $varHeader); - $header = $this->chkGrpResult->Render(); - $this->chkGrpResult->CleanVars(); - return $header; - } - /* - * Display the list of results - */ - function _displayListResults($site, $subsite, $display, $nbrs, $searchResults, & $found, $offset) { - $nb = count($searchResults); - $listResults = ''; - - for ($i = 0;$i < $nb;$i++) { - $this->varResult = array(); - - $found[] = $this->_setResultDisplayed($searchResults[$i]); - - $this->_setResultLink($searchResults[$i]); - - $this->_setResultExtract($searchResults[$i]); - - $this->_setResultBreadcrumbs($searchResults[$i]); - - $this->_setResultNumber($offset + $i + 1); - - - $this->chkResult->AddVar("as", $this->varResult); - $listResults .= $this->chkResult->Render(); - unset($this->varResult); - $this->chkResult->CleanVars(); - } - return $listResults; - } - /* - * Display the footer of group results (paging) - */ - function _displayFooterGrpResult($ig, $nbrs, $offset, $nbMax) { - global $modx; - $footer = ''; - $showPagingAlways = (int)$this->asCfg->cfg['showPagingAlways']; - $pagingType = $this->asCfg->cfg['pagingType']; - if ($nbMax > 0) { - $numResultPages = ceil($nbrs / $nbMax); - $maxOffset = ($numResultPages - 1) * $nbMax; - $offset = ($offset > $maxOffset) ? $maxOffset : $offset; - $offset = ($offset < 0) ? 0 : $offset; - if (($pagingType == 0) && (!$this->asCfg->isAjax)) { - - $tplPaging = $this->asCfg->cfg['tplPaging0']; - if ($tplPaging == '') $tplPaging = "@FILE:" . AS_SPATH . 'templates/paging0.tpl.html'; - $chkPaging = new AsPhxParser($tplPaging); - if ($this->dbgTpl) $this->asUtil->dbgRecord($chkPaging->getTemplate($tplPaging), "tplPaging template " . $tplPaging); - $resultPagingText = (($nbrs > $nbMax) || $showPagingAlways) ? $this->asCfg->lang['as_paginationTextMultiplePages'] : $this->asCfg->lang['as_paginationTextSinglePage']; - $resultPageLinkNumber = 1; - $resultPageLinks = ''; - $url = $this->_getParamsUrl(); - $otherOffset = $this->_getOtherOffset($ig); - for ($nrp = 0;$nrp < $nbrs && (($nbrs > $nbMax) || $showPagingAlways);$nrp+= $nbMax) { - $varLink = array(); - if ($offset == ($resultPageLinkNumber - 1) * $nbMax) { - $varLink['tpl'] = 'pagingLinksCurrent'; - } else { - $varLink['tpl'] = 'pagingLinks'; - $ofst = (string)$ig . ',' . (string)$nrp; - $asOffset = ($otherOffset) ? $otherOffset . ',' . $ofst : $ofst; - $asOffset = '&aso=' . $asOffset; - $paramsUrl = $url . $asOffset; - $varLink['pagingLink'] = $modx->makeUrl($modx->documentIdentifier, '', $paramsUrl); - } - $varLink['pagingSeparator'] = ($nrp + $nbMax < $nbrs) ? $this->asCfg->cfg['pageLinkSeparator'] : ''; - $varLink['pagingText'] = $resultPageLinkNumber; - $resultPageLinkNumber++; - - $chkPaging->AddVar("as", $varLink); - $resultPageLinks.= $chkPaging->Render(); - unset($varLink); - $chkPaging->CleanVars(); - } - $varPaging = array(); - $varPaging['tpl'] = 'paging'; - $varPaging['pagingText'] = $resultPagingText; - $varPaging['pagingLinks'] = $resultPageLinks; - - $chkPaging->AddVar("as", $varPaging); - $footer = $chkPaging->Render(); - unset($varPaging); - $chkPaging->CleanVars(); - } - else if (($pagingType == 1) && (($nbrs >= $nbMax) || $showPagingAlways)) { - - $tplPaging = $this->asCfg->cfg['tplPaging1']; - if ($tplPaging == '') $tplPaging = "@FILE:" . AS_SPATH . 'templates/paging1.tpl.html'; - if (!$this->asCfg->isAjax) { - $url = $this->_getParamsUrl(); - $otherOffset = $this->_getOtherOffset($ig); - } - - $chkPaging = new AsPhxParser($tplPaging); - if ($this->dbgTpl) $this->asUtil->dbgRecord($chkPaging->getTemplate($tplPaging), "tplPaging template " . $tplPaging); - $varPaging1 = array(); - if ($offset - $nbMax >= 0) { - $varPaging1['showPrev'] = 1; - $prevOffset = $offset - $nbMax; - $prefix = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . "_" : ''; - $varPaging1['prev_grpResultId'] = $prefix . 'prev_' . $this->_getCleanCssId($this->asResults->groupResults[$ig]['subsite']); - if ($this->asCfg->isAjax) $varPaging1['pagingPrev'] = 'javascript:void(0);'; - else { - $ofst = (string)$ig . ',' . (string)$prevOffset; - $asOffset = ($otherOffset) ? $otherOffset . ',' . $ofst : $ofst; - $asOffset = '&aso=' . $asOffset; - $paramsUrl = $url . $asOffset; - $varPaging1['pagingPrev'] = $modx->makeUrl($modx->documentIdentifier, '', $paramsUrl); - } - } - else $varPaging1['showPrev'] = 0; - $varPaging1['pagingStart'] = $offset+1; - $varPaging1['pagingEnd'] = ($offset + $nbMax > $nbrs) ? $nbrs : $offset + $nbMax; - $varPaging1['pagingNb'] = $nbrs; - - if ($offset + $nbMax < $nbrs) { - $varPaging1['showNext'] = 1; - $nextOffset = $offset + $nbMax; - $prefix = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . "_" : ''; - $varPaging1['next_grpResultId'] = $prefix . 'next_' . $this->_getCleanCssId($this->asResults->groupResults[$ig]['subsite']); - if ($this->asCfg->isAjax) $varPaging1['pagingNext'] = 'javascript:void(0);'; - else { - $ofst = (string)$ig . ',' . (string)$nextOffset; - $asOffset = ($otherOffset) ? $otherOffset . ',' . $ofst : $ofst; - $asOffset = '&aso=' . $asOffset; - $paramsUrl = $url . $asOffset; - $varPaging1['pagingNext'] = $modx->makeUrl($modx->documentIdentifier, '', $paramsUrl); - } - } - else $varPaging1['showNext'] = 0; - - $chkPaging->AddVar("as", $varPaging1); - $footer = $chkPaging->Render(); - unset($varPaging1); - $chkPaging->CleanVars(); - } - elseif (($pagingType == 2) && ($nbrs >= $nbMax) && ($this->asCfg->isAjax)) { - - $tplPaging = $this->asCfg->cfg['tplPaging2']; - if ($tplPaging == '') $tplPaging = "@FILE:" . AS_SPATH . 'templates/paging2.tpl.html'; - - $chkPaging = new AsPhxParser($tplPaging); - if ($this->dbgTpl) $this->asUtil->dbgRecord($chkPaging->getTemplate($tplPaging), "tplPaging template " . $tplPaging); - $varPaging2 = array(); - $varPaging2['pagingStart'] = $offset+1; - $varPaging2['pagingEnd'] = ($offset + $nbMax > $nbrs) ? $nbrs : $offset + $nbMax; - $varPaging2['pagingNb'] = $nbrs; - - if ($offset + $nbMax < $nbrs) { - $varPaging2['showMore'] = 1; - $nextOffset = $offset + $nbMax; - $prefix = ($this->asCfg->cfg['asId']) ? $this->asCfg->cfg['asId'] . "_" : ''; - $varPaging2['more_grpResultId'] = $prefix . 'more_' . $this->_getCleanCssId($this->asResults->groupResults[$ig]['subsite']); - $varPaging2['pagingMore'] = 'javascript:void(0);'; - $paging2Text = $this->asCfg->lang['as_paging2Text']; - $varPaging2['pagingText'] = sprintf($paging2Text, NB_MORE_RESULTS); - } - else $varPaging2['showMore'] = 0; - - $chkPaging->AddVar("as", $varPaging2); - $footer = $chkPaging->Render(); - unset($varPaging2); - $chkPaging->CleanVars(); - } - } - return $footer; - } - /* - * Set the more results link - */ - function _setMoreResultsLink($nbrs) { - global $modx; - $ajaxMax = $this->asCfg->cfg['ajaxMax']; - - if (($this->asCfg->cfg['moreResultsPage'] || $this->asCfg->cfg['showMoreResults']) && ($ajaxMax < $nbrs)) { - $this->varResults['moreResults'] = 1; - $this->varResults['moreClass'] = 'AS_ajax_more'; - $url = $this->_getParamsUrl(); - $this->varResults['moreLink'] = $modx->makeUrl($this->asCfg->cfg['moreResultsPage'], '', $url); - $this->varResults['moreTitle'] = $this->asCfg->lang['as_moreResultsTitle']; - $this->varResults['moreText'] = $this->asCfg->lang['as_moreResultsText']; - } - } - /* - * Get a clean css Id - */ - function _getCleanCssId($name) { - $name = preg_replace('/\s+\|\|\s+/','_',trim($name)); - $name = preg_replace('/\s+/','_',$name); - return $name; - } - /* - * Get the parameters to set up an URL - */ - function _getParamsUrl() { - global $modx; - $firstarg = $modx->config['friendly_urls'] ? '?' : '&'; - $url = ''; - - if ($this->asCfg->cfg['asId']) $url = $firstarg . 'asid=' . urlencode($this->asCfg->cfg['asId']); - - if ($this->asCtrl->searchString) { - if ($url) $url .= '&search=' . urlencode($this->asCtrl->searchString) . '&advsearch=' . urlencode($this->asCtrl->advSearch); - else $url = $firstarg . 'search=' . urlencode($this->asCtrl->searchString) . '&advsearch=' . urlencode($this->asCtrl->advSearch); - } - if ($this->asCtrl->subSearch) { - if (is_array($this->asCtrl->subSearch)) { - foreach($this->asCtrl->subSearch as $k => $v) { - if ($url) $url .= '&subsearch=' . urlencode($v); - else $url = $firstarg . 'subsearch=' . urlencode($v); - } - } - else { - if ($url) $url .= '&subsearch=' . urlencode($this->asCtrl->subSearch); - else $url = $firstarg . 'subsearch=' . urlencode($this->asCtrl->subSearch); - } - } - if ($this->asCtrl->asf) { - if ($url) $url .= '&asf=' . urlencode($this->asCtrl->asf); - else $url = $firstarg . 'asf=' . urlencode($this->asCtrl->asf); - foreach($this->asCtrl->fParams as $key =>$value) { - if (is_array($value)) { - foreach($value as $k => $v) $url .= '&' . $key . '[]=' . urlencode($v); - } - else $url .= '&' . $key . '=' . urlencode($value); - } - } - return $url; - } - /* - * Initialize common chunks variables - */ - function _initCommonChunks() { - global $modx; - - if (!class_exists('AsPhxParser')) include_once AS_PATH . "classes/asPhxParser.class.inc.php"; - if (!$this->asCfg->isAjax) { - - $tplResults = $this->asCfg->cfg['tplResults']; - if ($tplResults == '') $tplResults = "@FILE:" . AS_SPATH . 'templates/results.tpl.html'; - } else { - - $tplResults = $this->asCfg->cfg['tplAjaxResults']; - // if @FILE binding was passed in via ajax processor, verify the path is safe - if(stristr($tplResults, '@FILE:') !== false) { - $path = substr($tplResults, 6); - $frombase = $modx->config['base_path'] . $path; - $dirname = dirname($frombase); - $as_expected_dirname = $modx->config['base_path'] . AS_SPATH . 'templates'; - if(strpos($dirname, $as_expected_dirname) === false) { - $path = str_replace('..', '', $path); - $path = str_replace('\\', '/', $path); - if(substr($path, 0, 1) == '/') $path = substr($path, 1); - $tplResults = '@FILE:templates/' . $path; - } - if(!file_exists($as_expected_dirname . '/' . $path)) { - $tplResults = ''; - } - } - if ($tplResults == '') $tplResults = "@FILE:" . AS_SPATH . 'templates/ajaxResults.tpl.html'; - } - - $this->chkResults = new AsPhxParser($tplResults); - if ($this->dbgTpl) { - $this->asUtil->dbgRecord($this->chkResults->getTemplate($tplResults), "tplResults template" . $tplResults); - } - } - /* - * Initialize chunks variables - config dependent - */ - function _initChunks() { - if (!$this->asCfg->isAjax) { - - $tplGrpResult = $this->asCfg->cfg['tplGrpResult']; - if ($tplGrpResult == '') $tplGrpResult = "@FILE:" . AS_SPATH . 'templates/grpResult.tpl.html'; - - $tplResult = $this->asCfg->cfg['tplResult']; - if ($tplResult == '') $tplResult = "@FILE:" . AS_SPATH . 'templates/result.tpl.html'; - } else { - - $tplGrpResult = $this->asCfg->cfg['tplAjaxGrpResult']; - if ($tplGrpResult == '') $tplGrpResult = "@FILE:" . AS_SPATH . 'templates/ajaxGrpResult.tpl.html'; - - $tplResult = $this->asCfg->cfg['tplAjaxResult']; - if ($tplResult == '') $tplResult = "@FILE:" . AS_SPATH . 'templates/ajaxResult.tpl.html'; - } - $this->chkGrpResult = new AsPhxParser($tplGrpResult); - $this->tplGrpRes = "@CODE:" . $this->chkGrpResult->template; - $this->chkResult = new AsPhxParser($tplResult); - $this->tplRes = "@CODE:" . $this->chkResult->template; - if ($this->dbgTpl) { - $this->asUtil->dbgRecord($this->chkGrpResult->getTemplate($tplGrpResult), "tplGrpResult template" . $tplGrpResult); - if ($this->chkResults) $this->asUtil->dbgRecord($this->chkResults->getTemplate($tplResult), "tplResult template " . $tplResult); - } - } - /* - * Set the offset of groups (used only for non-ajax mode) - */ - function _setOffset() { - $offset_array = explode(',', $this->asCtrl->offset); - $io = count($offset_array); - for ($i = 0;$i < $io;$i = $i + 2) { - $ig = intval($offset_array[$i]); - $ig = (($ig >= 0) && ($ig < $this->asResults->nbGroups)) ? $ig : 0; - $val = intval($offset_array[$i + 1]); - $val = (($val > 0) && ($val < $this->asResults->groupResults[$ig]['length'])) ? $val : 0; - $this->asResults->groupResults[$ig]['offset'] = $val; - } - } - /* - * Get the search context - */ - function _getSearchContext() { - $searchContext = $this->asResults->getSearchContext(); - $this->scMain = $searchContext['main']; - $this->scJoined = $searchContext['joined']; - $this->scTvs = $searchContext['tvs']; - } - /* - * Initialize variables used for the display - config context dependent - */ - function _initDisplayVariables() { - $this->_initChunks(); - $this->_initBreadcrumbs(); - } - /* - * Set log infos into DB for failed searches - */ - function _setFailedSearches($asCall = '', $select = '') { - global $modx; - $logid = ''; - if ($this->log >= 1 ) { - $logInfo = array(); - $logInfo['searchString'] = $this->asCtrl->searchString; - $logInfo['nbResults'] = 0; - $logInfo['results'] = ''; - $logInfo['asCall'] = $asCall; - $logInfo['asSelect'] = $modx->db->escape($select); - $logid = $this->asLog->setLogRecord($logInfo); - } - return $logid; - } - /* - * Set log infos into DB for successfull searches - */ - function _setSuccessfullSearches($ig) { - global $modx; - $logid = ''; - if ($this->log == 2) { - $logInfo = array(); - $logInfo['searchString'] = $this->asCtrl->searchString; - $logInfo['nbResults'] = $this->asResults->groupResults[$ig]['length']; - $logInfo['results'] = $this->asResults->groupResults[$ig]['found']; - $logInfo['asCall'] = $this->_getAsCall($this->asResults->groupResults[$ig]['ucfg']); - $logInfo['asSelect'] = $modx->db->escape($this->asResults->groupResults[$ig]['select']); - $logid = $this->asLog->setLogRecord($logInfo); - } - return $logid; - } - /* - * Get the AjaxSearch snippet call - */ - function _getAsCall($ucfg) { - $call_array = explode(' ', $ucfg); - $tpl = "&%s=`%s`"; - if ($this->asCtrl->advSearch != ONEWORD) $call_array[] = sprintf($tpl, 'advSearch', $this->asCtrl->advSearch); - $asCall = "[!AjaxSearch"; - if (count($call_array)) { - $asCall.= "? "; - $asCall.= implode(' ', $call_array); - } - $asCall.= "!]"; - return $asCall; - } - /* - * Set all the displayed fields as PHx - */ - function _setResultDisplayed($row) { - - $id = $this->scMain['id']; - $this->varResult[$id] = $row[$id]; - - if (isset($this->scMain['date'])) { - foreach ($this->scMain['date'] as $field) $this->_setPhxField($field, $row, 'date'); - } - - foreach ($this->scMain['displayed'] as $field) $this->_setPhxField($field, $row, 'string'); - - if (isset($this->scTvs['names'])) foreach ($this->scTvs['names'] as $field) { - if (isset($row[$field])) $this->_setPhxField($field, $row, 'string'); - } - - if ($this->scMain['append']) foreach ($this->scMain['append'] as $field) { - if (isset($row[$field])) $this->_setPhxField($field, $row, 'string'); - } - - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) { - $f = $joined['tb_alias'] . '_' . $id; - $this->_setPhxField($f, $row, 'string'); - } - - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) { - foreach ($joined['displayed'] as $field) { - $f = $joined['tb_alias'] . '_' . $field; - $this->_setPhxField($f, $row, 'string'); - } - } - - if ($this->asCfg->cfg['rank']) $this->_setPhxField('rank', $row, 'int'); - return $row[$id]; - } - /* - * Set a field as PHx - */ - function _setPhxField($field, $row, $type = 'string') { - $showField = $field . "Show"; - $classField = $field . "Class"; - $contentField = $row[$field]; - if ($contentField != '') { - $this->varResult[$showField] = 1; - $this->varResult[$classField] = $this->asClass['prefix'] . ucfirst($field); - if ($type == 'string') { - $this->varResult[$field] = $this->asResults->cleanText($contentField, $this->asCfg->cfg['stripOutput']); - } elseif ($type == 'date') { - $this->varResult[$field] = date($this->asCfg->cfg['formatDate'], $contentField); - } else { - $this->varResult[$field] = $contentField; - } - } else { - $this->varResult[$showField] = 0; - } - } - /* - * Set the ResultLink PHx - */ - function _setResultLink($row) { - global $modx; - $id = $this->scMain['id']; - if (!$row[$id]) { - return; - } - $hClass = $this->asClass['highlight']; - if ($this->asCfg->cfg['highlightResult'] && $hClass) { - $resultLink = $modx->makeUrl($row[$id], '', 'searched=' . urlencode($this->asCtrl->searchString) . '&advsearch=' . urlencode($this->asCtrl->advSearch) . '&highlight=' . urlencode($hClass)); - } else { - $resultLink = $modx->makeUrl($row[$id]); - } - $this->varResult['resultClass'] = $this->asClass['prefix']; - $this->varResult['resultLinkClass'] = $this->asClass['prefix'] . 'Link'; - $this->varResult['resultLink'] = $resultLink; - } - /* - * Set the ResultExtract PHx - */ - function _setResultExtract($row) { - if ($this->asResults->extractNb) { - $this->varResult['extractShow'] = 1; - $this->varResult['extractClass'] = $this->asClass['prefix'] . 'Extract'; - $this->varResult['extract'] = $this->asResults->getExtractRow($row); - } else { - $this->varResult['extractShow'] = 0; - } - } - /* - * Set the ResultBreadcrumbs PHx - */ - function _setResultBreadcrumbs($row) { - global $modx; - if ($this->asCfg->cfg['breadcrumbs']) { - if ($this->asCfg->cfg['bCrumbsInfo']['type'] == 'function') { - - $bc = $this->asCfg->cfg['bCrumbsInfo']['name']($this->scMain, $row, $this->asCfg->cfg['bCrumbsInfo']['params']); - } elseif ($this->asResults->getWithContent()) { - - - $current_id = $modx->documentObject['id']; - $current_parent = $modx->documentObject['parent']; - $current_pagetitle = $modx->documentObject['pagetitle']; - $current_longtitle = $modx->documentObject['longtitle']; - $current_menutitle = $modx->documentObject['menutitle']; - $current_description = $modx->documentObject['description']; - - $id = $this->scMain['id']; - $modx->documentObject['id'] = $row[$id]; - $parentIds = $modx->getParentIds($row[$id], 1); - $pid = array_pop($parentIds); - $modx->documentObject['parent'] = $pid; - $modx->documentObject['pagetitle'] = $row['pagetitle']; - $modx->documentObject['longtitle'] = $row['longtitle']; - $modx->documentObject['menutitle'] = $row['menutitle']; - $modx->documentObject['description'] = $row['description']; - - $bc = $modx->runSnippet($this->asCfg->cfg['bCrumbsInfo']['name'], $this->asCfg->cfg['bCrumbsInfo']['params']); - - $modx->documentObject['id'] = $current_id; - $modx->documentObject['parent'] = $current_parent; - $modx->documentObject['pagetitle'] = $current_pagetitle; - $modx->documentObject['longtitle'] = $current_longtitle; - $modx->documentObject['menutitle'] = $current_menutitle; - $modx->documentObject['description'] = $current_description; - } - - $this->varResult['breadcrumbsShow'] = 1; - $this->varResult['breadcrumbsClass'] = $this->asClass['prefix'] . 'Breadcrumbs'; - $this->varResult['breadcrumbs'] = $bc; - } else { - $this->varResult['breadcrumbsShow'] = 0; - } - } - /* - * Set number of result as PHx - */ - function _setResultNumber($no) { - $this->varResult['resultNumber'] = $no; - } - /* - * Initialize the breadcrumbs variables - */ - function _initBreadcrumbs() { - if ($this->asCfg->cfg['breadcrumbs']) { - $bc = explode(',', $this->asCfg->cfg['breadcrumbs']); - if (function_exists($bc[0])) { - $this->asCfg->cfg['bCrumbsInfo']['type'] = 'function'; - } elseif ($this->_snippet_exists($bc[0])) { - $this->asCfg->cfg['bCrumbsInfo']['type'] = 'snippet'; - } else { - $this->asCfg->cfg['breadcrumbs'] = false; - } - if ($this->asCfg->cfg['breadcrumbs']) { - $this->asCfg->cfg['bCrumbsInfo']['name'] = array_shift($bc); - $this->asCfg->cfg['bCrumbsInfo']['params'] = array(); - foreach ($bc as $prm) { - $param = explode(':', $prm); - $this->asCfg->cfg['bCrumbsInfo']['params'][$param[0]] = (isset($param[1]) ? $param[1] : 0); - } - } - } - } - /* - * Check the existing of a snippet - */ - function _snippet_exists($snippetName) { - global $modx; - $tbl = $modx->getFullTableName('site_snippets'); - $rs = $modx->db->select('count(*)', $tbl, "name='" . $modx->db->escape($snippetName) . "'"); - return ($modx->db->getValue($rs)>0); - } - /* - * Get offset of other groups - */ - function _getOtherOffset($ig) { - $otherOffset = array(); - for ($i = 0;$i < $this->asResults->nbGroups;$i++) { - if (($i != $ig) && ($this->asResults->groupResults[$i]['offset'] != 0)) { - $otherOffset[] = (string)$i . ',' . (string)$this->asResults->groupResults[$i]['offset']; - } - } - $output = implode(',', $otherOffset); - return $output; - } - /* - * Set the needsConvert flag value - */ - function setNeedsConvert($flag) { - $this->_needsConvert = $flag; - } - /* - * initClassVariables : initialize the required Class values - */ - function initClassVariables() { - - if ($this->asCfg->cfg['ajaxSearch']) $this->asClass['prefix'] = PREFIX_AJAX_RESULT_CLASS; - else $this->asClass['prefix'] = PREFIX_RESULT_CLASS; - - $this->asClass['highlight'] = $this->_getHighlightClass($this->asCtrl->searchString, $this->asCtrl->advSearch); - } - /* - * Depending the search words, set up the highlight classes - */ - function _getHighlightClass($search, $advSearch) { - $hClass = ''; - $searchList = $this->asCtrl->getSearchWords($search, $advSearch); - if (count($searchList)) { - $hClass = HIGHLIGHT_CLASS; - $count = 1; - foreach ($searchList as $searchTerm) { - $hClass.= ' ' . HIGHLIGHT_CLASS . $count; - $count++; - } - } - return $hClass; - } - function getHClass() { - return HIGHLIGHT_CLASS; - } - /* - * Set the ajax header with the appropriate variables - */ - function setAjaxSearchHeader() { - global $modx; - $typeAs = $this->asCfg->cfg['ajaxSearch']; - if ($typeAs) { - - if ($this->asCfg->cfg['jscript'] == 'jquery') { - if ($this->asCfg->cfg['addJscript']) $modx->regClientStartupScript($this->asCfg->cfg['jsJquery']); - $jsInclude = AS_SPATH . AJAXSEARCH_JSDIR . $typeAs . '/ajaxSearch-jquery.js'; - } elseif ($this->asCfg->cfg['jscript'] == 'mootools2') { - if ($this->asCfg->cfg['addJscript']) $modx->regClientStartupScript($this->asCfg->cfg['jsMooTools2']); - $jsInclude = AS_SPATH . AJAXSEARCH_JSDIR . $typeAs . '/ajaxSearch-mootools2.js'; - } else { - if ($this->asCfg->cfg['addJscript']) $modx->regClientStartupScript($this->asCfg->cfg['jsMooTools']); - $jsInclude = MODX_BASE_URL . AS_SPATH . AJAXSEARCH_JSDIR . $typeAs . '/ajaxSearch.js'; - } - $modx->regClientStartupScript($jsInclude); - - $json = '{"vsn":"' . AS_VERSION . '"'; - $json.= ',"adv":"' . $this->asCtrl->advSearch . '"'; - $json.= ',"sub":"' . $this->asCtrl->subSearch . '"'; - $json.= ',"bxt":"' . addslashes($this->asCfg->lang['as_boxText']) . '"'; - $json.= ',"cfg":"' . addslashes($this->asCfg->setAsCall($this->asCfg->ucfg)) . '"}'; - $line = (!$this->asCfg->cfg['asId']) ? "asvar=new Array();asvar[0]='{$json}';" : "asvar[asvar.length]='{$json}';"; - $jsVars = << - - -EOD; - $modx->regClientStartupScript($jsVars); - } - } - /* - * Display Comment form - */ - function _displayComment() { - $outputComment = ''; - if ($this->asLog->logcmt && count($this->logIds)) { - $chkCmt = new AsPhxParser($this->asCfg->cfg['tplComment']); - if ($this->dbgTpl) $this->asUtil->dbgRecord($chkCmt->getTemplate($this->asCfg->cfg['tplComment']), "tplComment template " . $this->asCfg->cfg['tplComment']); - $varCmt = array(); - $varCmt['hiddenFieldIntro'] = $this->asCfg->lang['as_cmtHiddenFieldIntro']; - $varCmt['hiddenField'] = 'ajaxSearch_cmtHField'; - $varCmt['logid'] = array_pop($this->logIds); - $varCmt['cmtIntroMessage'] = $this->asCfg->lang['as_cmtIntroMessage']; - $varCmt['cmtSubmitText'] = $this->asCfg->lang['as_cmtSubmitText']; - $varCmt['cmtResetText'] = $this->asCfg->lang['as_cmtResetText']; - $varCmt['cmtThksMessage'] = $this->asCfg->lang['as_cmtThksMessage']; - - $chkCmt->AddVar("as", $varCmt); - $outputComment = $chkCmt->Render(); - } - return $outputComment; - } - /* - * paginate : display the previous / next page of results - */ - function paginate($validSearch, &$msgErr) { - $ouputResults = null; - if ($validSearch) { - list($ig, $currentOffset, $sens) = explode(',',$this->asCtrl->pagination); - $this->_getSearchContext(); - $site = $this->asResults->groupResults[$ig]['site']; - $subsite = $this->asResults->groupResults[$ig]['subsite']; - $display = $this->asResults->groupResults[$ig]['display']; - $nbrs = intval($this->asResults->groupResults[$ig]['length']); - $ajaxMax = ($this->asCfg->cfg['ajaxMax'] > 0) ? $this->asCfg->cfg['ajaxMax'] : $nbrs; - $pagingType = $this->asCfg->cfg['pagingType']; - - // nb results displayed - if ($pagingType == 1) { - if ($sens == 1) { - $offset = $currentOffset + $ajaxMax; - $nbRes = ($offset + $ajaxMax > $nbrs) ? $nbrs - $offset : $ajaxMax; - } - else { - $offset = $currentOffset - $ajaxMax; - $offset = ($offset >= 0) ? $offset : 0; - $nbRes = $ajaxMax; - } - } - elseif ($pagingType == 2) { - if ($sens > 0) { - if ($currentOffset == 0) $currentNbRes = $ajaxMax; - else $currentNbRes = NB_MORE_RESULTS; - $offset = $currentOffset + $currentNbRes; - $nbRes = ($offset + NB_MORE_RESULTS > $nbrs) ? $nbrs - $offset : NB_MORE_RESULTS; - } - else { - if ($currentOffset == $ajaxMax) $previousNbRes = $ajaxMax; - else $previousNbRes = NB_MORE_RESULTS; - $offset = $currentOffset - $previousNbRes; - $offset = ($offset >= 0) ? $offset : 0; - $nbRes = $previousNbRes; - } - } - - $searchResults = array_slice($this->asResults->groupResults[$ig]['results'], $offset, $nbRes); - - $this->asCfg->chooseConfig($site, $subsite, $display); - $this->_initDisplayVariables(); - - $jsonPairs = array(); - if ($pagingType == 1) { // Prev / Next links - $grpResult = $this->_displayGrpResult($ig, $site, $subsite, $display, $nbrs, $searchResults, $offset, $nbRes); - $jsonPairs[] = $this->_getJsonPair('res',$grpResult); - } - elseif ($pagingType == 2) { - $found = array(); - $this->chkGrpResult = new AsPhxParser($this->tplGrpRes); - - $moreOffset = 0; - $moreNbMax = $offset + $nbRes; - $header = $this->_displayHeaderGrpResult($site, $subsite, $display, $nbrs, $searchResults, $moreOffset, $moreNbMax); - $listResults = $this->_displayListResults($site, $subsite, $display, $nbrs, $searchResults, $found, $offset); - $footer = $this->_displayFooterGrpResult($ig, $nbrs, $moreOffset, $moreNbMax); - - $this->asResults->groupResults[$ig]['found'] = implode(' ',$found); - $jsonPairs[] = $this->_getJsonPair('hdr',$header); - $jsonPairs[] = $this->_getJsonPair('res',$listResults); - $jsonPairs[] = $this->_getJsonPair('ftr',$footer); - } - $pgn = (string)$ig . ',' . (string)$offset; - $jsonPairs[] = $this->_getJsonPair('pgn',$pgn); - - $this->_updateAsfPaginate($ig, $jsonPairs); - - $outputResults = $this->_getJson($jsonPairs); - - $this->asCfg->restoreConfig(DEFAULT_SITE, DEFAULT_SUBSITE); - } - return $outputResults; - } - /* - * Send back categories & tags - */ - function _updateAsfPaginate($ig, & $jsonPairs) { - - $resultsCateg = array(); - $resultsCateg = $this->asResults->getResultsCateg(); - - $ctgnm = array(); - $ctgnm[] = $resultsCateg['name'][$ig]; - if ($this->dbgRes) $this->asUtil->dbgRecord($resultsCateg, "getResultsCateg"); - $sctgnm = $this->_getJsonArray($ctgnm); - $jsonPairs[] = $this->_getJsonPair('ctgnm',$sctgnm); - - return; - } - /* - * Send back categories - */ - function _updateAsf( & $jsonPairs) { - - $resultsCateg = array(); - $resultsCateg = $this->asResults->getResultsCateg(); - if ($this->dbgRes) $this->asUtil->dbgRecord($resultsCateg, "getResultsCateg"); - - $ctgnm = $this->_getJsonArray($resultsCateg['name']); - $jsonPairs[] = $this->_getJsonPair('ctgnm',$ctgnm); - $ctgnb = $this->_getJsonArray($resultsCateg['nb']); - $jsonPairs[] = $this->_getJsonPair('ctgnb',$ctgnb); - - return; - } - /* - * Prepare json array of String - * ["art","music","geography"] - */ - function _getJsonArray($array) { - $nbr = count($array); - if ($nbr) $jsonArray = '[' . implode(',',$array) . ']'; - else $jsonArray = ''; - return $jsonArray; - } - /* - * Prepare json pair key : value - */ - function _getJsonPair($key,$value) { - $value = addslashes($value); - $value = str_replace(array("\r\n", "\r", "\n"), ' ', $value); - $jsonPair = '"' . $key . '":"' . $value . '"'; - return $jsonPair; - } - /* - * Prepare json string - */ - function _getJson($pairs) { - $json = '{' . implode(',',$pairs) . '}'; - return $json; - } -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchRequest.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchRequest.class.inc.php deleted file mode 100644 index e20bea2b95..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchRequest.class.inc.php +++ /dev/null @@ -1,793 +0,0 @@ -asUtil =& $asUtil; - $this->dbg = $asUtil->dbg; - $this->pgCharset = $pgCharset; - if ($this->dbg) $this->asUtil->dbgRecord($this->pgCharset, "pgCharset"); - } - /* - * doSearch : Do the search - */ - function doSearch($searchString, $advSearch, $cfg, $bsf, $fClause) { - global $modx; - $searchString = $modx->db->escape($searchString); - $this->cfg = $cfg; - $records = NULL; - $results = array(); - $this->asSelect = ''; - if ($this->_initSearchContext($bsf)) { - $fields = $this->_getFields(); - $from = $this->_getFrom($searchString, $advSearch); - $where = $this->_getWhere(); - $groupBy = $this->_getGroupBy(); - $having = $this->_getHaving($searchString, $advSearch, $fClause); - $orderBy = $this->_getOrderBy(); - $this->asSelect = "SELECT $fields FROM $from WHERE $where"; - $this->asSelect.= " GROUP BY $groupBy HAVING $having ORDER BY $orderBy"; - if (isset($this->scJoined)) { - $modx->db->query("SET group_concat_max_len = " . GROUP_CONCAT_LENGTH . ";"); - } - if ($this->dbg) $this->asUtil->dbgRecord($this->_printSelect($this->asSelect), "Select"); - $records = $modx->db->query($this->asSelect); - if ($this->dbg) $this->asUtil->dbgRecord("End of select"); - $results = $this->_appendTvs($records); - } - $modx->db->freeResult($records); - return $results; - } - /* - * Check and initialize the description of the tables & content fields - */ - function _initSearchContext($bsf) { - global $modx; - - unset($this->scMain); - unset($this->scJoined); - unset($this->scTvs); - unset($this->scCateg); - unset($this->scTags); - $mainDefined = false; - $this->withContent = false; - $part = explode('|', $this->cfg['whereSearch']); - foreach ($part as $p) { - list($ptable,$pfields) = explode(':', $p); - switch ($ptable) { - - - case 'content': - $this->scMain = array( - 'tb_name' => $this->_getShortTableName('site_content'), - 'tb_alias' => 'sc', - 'id' => 'id', - 'searchable' => array('pagetitle', 'longtitle', 'description', 'alias', 'introtext', 'menutitle', 'content'), - 'displayed' => array('pagetitle', 'longtitle', 'description', 'alias', 'introtext', 'template', 'menutitle', 'content'), - 'date' => array('publishedon'), - 'filters' => array(), - 'jfilters' => array(), - 'append' => array() - ); - if ($pfields != '') { - unset($this->scMain['searchable']); - if ($pfields == 'null' or $pfields == 'NULL') $this->scMain['searchable'] = array(); - else $this->scMain['searchable'] = explode(',', $pfields); - } - $this->withContent = true; - $mainDefined = true; - - if ($this->_validListIDs($bsf['listIds'])) { - $this->scMain['filters'][] = array('field' => 'id', 'oper' => $bsf['oper'], 'value' => $bsf['listIds']); - } - - $this->scMain['filters'][] = array('field' => 'published', 'oper' => '=', 'value' => '1'); - - $this->scMain['filters'][] = array('field' => 'searchable', 'oper' => '=', 'value' => '1'); - - $this->scMain['filters'][] = array('field' => 'deleted', 'oper' => '=', 'value' => '0'); - - if (($this->cfg['hideMenu'] == 0) || ($this->cfg['hideMenu'] == 1)) $this->scMain['filters'][] = array('field' => 'hidemenu', 'oper' => '=', 'value' => $this->cfg['hideMenu']); - - if ($this->cfg['hideLink'] == 1) $this->scMain['filters'][] = array('field' => 'type', 'oper' => '=', 'value' => '\'document\''); - - if ($this->_validListIDs($this->cfg['docgrp'])) { - $this->scMain['jfilters'][] = array( - 'tb_name' => $this->_getShortTableName('document_groups'), - 'tb_alias' => 'dg', - 'main' => 'id', - 'join' => 'document', - 'field' => 'document_group', - 'oper' => 'in', - 'value' => $this->cfg['docgrp'], - 'or' => array('field' => 'privateweb', 'oper' => '=', 'value' => '0') - ); - } else { - - $this->scMain['filters'][] = array('field' => 'privateweb', 'oper' => '=', 'value' => '0'); - } - break; - - - - case 'tv': - $this->scJoined[] = array( - 'tb_name' => $this->_getShortTableName('site_tmplvar_contentvalues'), - 'tb_alias' => 'tv', - 'id' => 'id', - 'main' => 'id', - 'join' => 'contentid', - 'searchable' => array('value'), - 'displayed' => array('value'), - 'concat_separator' => ',', - 'filters' => array(), - 'jfilters' => array() - ); - $j = count($this->scJoined) - 1; - if ($pfields != '') { - unset($this->scJoined[$j]['searchable']); - if ($pfields == 'null' or $pfields == 'NULL') $this->scJoined[$j]['searchable'] = array(); - else $this->scJoined[$j]['searchable'] = explode(',', $pfields); - } - break; - - - case 'jot': - $this->scJoined[] = array( - 'tb_name' => $this->_getShortTableName('jot_content'), - 'tb_alias' => 'jot', - 'id' => 'id', - 'main' => 'id', - 'join' => 'uparent', - 'searchable' => array('content'), - 'displayed' => array('content'), - 'concat_separator' => ', ', - 'filters' => array() - ); - $j = count($this->scJoined) - 1; - if ($pfields != '') { - unset($this->scJoined[$j]['searchable']); - if ($pfields == 'null' or $pfields == 'NULL') $this->scJoined[$j]['searchable'] = array(); - else $this->scJoined[$j]['searchable'] = explode(',', $pfields); - } - - $j = count($this->scJoined) - 1; - $this->scJoined[$j]['filters'][] = array('field' => 'published', 'oper' => '=', 'value' => '1'); - break; - - - case 'maxigallery': - $this->scJoined[] = array( - 'tb_name' => $this->_getShortTableName('maxigallery'), - 'tb_alias' => 'gal', - 'id' => 'id', - 'main' => 'id', - 'join' => 'gal_id', - 'searchable' => array('title', 'descr'), - 'displayed' => array('title', 'descr', 'filename'), - 'concat_separator' => ', ', - 'filters' => array() - ); - $j = count($this->scJoined) - 1; - if ($pfields != '') { - unset($this->scJoined[$j]['searchable']); - if ($pfields == 'null' or $pfields == 'NULL') $this->scJoined[$j]['searchable'] = array(); - else $this->scJoined[$j]['searchable'] = explode(',', $pfields); - } - - $j = count($this->scJoined) - 1; - $this->scJoined[$j]['filters'][] = array('field' => 'hide', 'oper' => '=', 'value' => '0'); - break; - - - default: - - if (function_exists($ptable)) { - $ptable($main, $joined, $bsf, $pfields); - if ($main) { - $this->scMain = $main; - $mainDefined = true; - } - if ($joined) { - - if (count($joined['displayed']) > 0) $this->scJoined[] = $joined; - } - } - break; - } - } - - - if (isset($this->cfg['withTvs']) && ($this->cfg['withTvs'])) { - $this->scTvs = array( - 'names' => array(), - 'tvs' => array(), - ); - $this->scTvs['names'] = $this->_getTvsArray($this->cfg['withTvs']); - if ($this->dbg) $this->asUtil->dbgRecord($this->scTvs['names'], "initSearchContext - withTvs"); - $this->scTvs['tvs'] = $this->_getTvSubSelect($this->scTvs['names'],'','tv','simple'); - } - - - $categ_array = explode(':', $this->cfg['category']); - if (isset($categ_array[0]) && ($categ_array[0])) { - if (!isset($categ_array[1])) { - $ctvs_array = $this->_getTvsArray($categ_array[0]); - if ($this->dbg) $this->asUtil->dbgRecord($ctvs_array, "initSearchContext - category"); - $stv = $this->_getTvSubSelect($ctvs_array,'category','cg','simple'); - $this->scCateg = $stv[0]; - } - else { - $fCateg = $categ_array[1]; - $this->scCateg = $fCateg($categ_array[0]); // fCateg returns an array with 'tb_alias,id,value,sql fields - } - } - - - $tags_array = explode(':', $this->cfg['tags']); - if (isset($tags_array[0]) && ($tags_array[0])) { - if (!isset($tags_array[1])) { - $ttvs_array = $this->_getTvsArray($tags_array[0]); - if ($this->dbg) $this->asUtil->dbgRecord($ttvs_array, "initSearchContext - tags"); - $stv = $this->_getTvSubSelect($ttvs_array,'tags','tg','concat'); - $this->scTags = $stv[0]; - } - else { - $fTags = $tags_array[1]; - $this->scTags = $fTags($tags_array[0]); // fTags returns an array with 'tb_alias,id,value,sql fields - } - } - - if ($this->dbgRes) { - $this->asUtil->dbgRecord($this->scMain, "Search context main " . $this->scMain['tb_name']); - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) $this->asUtil->dbgRecord($joined, "Search context joined " . $joined['tb_name']); - } - - return $mainDefined; - } - /* - * Get the fields clause of the AS query - */ - function _getFields() { - $fields = array(); - $mpref = $this->scMain['tb_alias']; - - $fields[] = $mpref . '.' . $this->scMain['id']; - - if (isset($this->scMain['displayed'])) foreach ($this->scMain['displayed'] as $displayed) $fields[] = $mpref . '.' . $displayed; - - if (isset($this->scMain['date'])) foreach ($this->scMain['date'] as $date) $fields[] = $mpref . '.' . $date; - - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) { - $jpref = $joined['tb_alias']; - $f = 'GROUP_CONCAT( DISTINCT CAST(n' . $jpref . '.' . $joined['id'] . ' AS CHAR)'; - $f.= ' SEPARATOR "," ) AS ' . $jpref . '_' . $joined['id']; - $fields[] = $f; - } - - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) { - $jpref = $joined['tb_alias']; - $nbd = count($joined['displayed']); - for ($d = 0;$d < $nbd;$d++) { - $f = 'GROUP_CONCAT( DISTINCT n' . $jpref . '.' . $joined['displayed'][$d]; - $f.= ' SEPARATOR "' . $joined['concat_separator'] . '" ) AS ' . $jpref . '_' . $joined['displayed'][$d]; - $fields[] = $f; - } - } - - if (isset($this->scTvs['tvs'])) foreach($this->scTvs['tvs'] as $scTv) { - $f = $scTv['tb_alias'] . '.' . $scTv['displayed'] . ' AS `' . $scTv['name'] . '`'; - $fields[] = $f; - } - - if (isset($this->scCateg)) { - $f = $this->scCateg['tb_alias'] . '.' . $this->scCateg['displayed'] . ' AS category'; - $fields[] = $f; - } - - - if (isset($this->scTags)) { - $f = 'REPLACE( GROUP_CONCAT( DISTINCT ' . $this->scTags['tb_alias'] . '.' . $this->scTags['displayed']; - $f.= ' SEPARATOR "," ), "||", ",") AS tags'; - $fields[] = $f; - } - - if (count($fields) > 0) $fieldsClause = implode(', ', $fields); - else $fieldsClause = '*'; - return $fieldsClause; - } - /* - * Get the "FROM" clause of the AS query - */ - function _getFrom($searchString, $advSearch) { - - $from[] = $this->scMain['tb_name'] . ' ' . $this->scMain['tb_alias']; - //left join with jfilter tables - if (isset($this->scMain['jfilters'])) foreach ($this->scMain['jfilters'] as $filter) { - $f = 'LEFT JOIN ' . $filter['tb_name'] . ' ' . $filter['tb_alias']; - $f.= ' ON ' . $this->scMain['tb_alias'] . '.' . $filter['main'] . ' = ' . $filter['tb_alias'] . '.' . $filter['join']; - $from[] = $f; - } - //left join with joined table - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) { - $jpref = 'n' . $joined['tb_alias']; - $f = 'LEFT JOIN( ' . $this->_getSubSelect($joined, $searchString, $advSearch) . ' )' . ' AS ' . $jpref . ' ON '; - $f.= $this->scMain['tb_alias'] . '.' . $joined['main'] . ' = ' . $jpref . '.' . $joined['join']; - $from[] = $f; - } - //left join with Tv defined as table field - if (isset($this->scTvs['tvs'])) foreach($this->scTvs['tvs'] as $scTv) { - $f = 'LEFT JOIN( ' . $scTv['sql'] . ' ) AS ' . $scTv['tb_alias']; - $f.= ' ON ' . $this->scMain['tb_alias'] . '.' . $scTv['main'] . ' = '; - $f.= $scTv['tb_alias'] . '.' . $scTv['join']; - $from[] = $f; - } - //left join with categories - if (isset($this->scCateg)) { - $f = 'LEFT JOIN( ' . $this->scCateg['sql'] . ' ) AS ' . $this->scCateg['tb_alias']; - $f.= ' ON ' . $this->scMain['tb_alias'] . '.' . $this->scCateg['main'] . ' = '; - $f.= $this->scCateg['tb_alias'] . '.' . $this->scCateg['join']; - $from[] = $f; - } - //left join with tags - if (isset($this->scTags)) { - $f = 'LEFT JOIN( ' . $this->scTags['sql'] . ' ) AS ' . $this->scTags['tb_alias']; - $f.= ' ON ' . $this->scMain['tb_alias'] . '.' . $this->scTags['main'] . ' = '; - $f.= $this->scTags['tb_alias'] . '.' . $this->scTags['join']; - $from[] = $f; - } - $fromClause = implode(' ', $from); - return $fromClause; - } - /* - * Get the "WHERE" clause of the AS query - */ - function _getWhere() { - - if (isset($this->scMain['filters'])) foreach ($this->scMain['filters'] as $filter) $where[] = $this->_getFilter($this->scMain['tb_alias'], $filter); - - if (isset($this->scMain['jfilters'])) foreach ($this->scMain['jfilters'] as $filter) $where[] = $this->_getFilter($filter['tb_alias'], $filter); - if (count($where) > 0) $whereClause = '(' . implode(' AND ', $where) . ')'; - else $whereClause = '1'; - return $whereClause; - } - /* - * Get the "GROUP BY" clause of the AS query - */ - function _getGroupBy() { - $groupByClause = $this->scMain['tb_alias'] . '.' . $this->scMain['id']; - return $groupByClause; - } - /* - * Get the "HAVING" clause of the AS query - */ - function _getHaving($searchString, $advSearch, $fClause) { - $havingClause_array = array(); - if ($searchString != '') { - $like = $this->_getWhereForm($advSearch); - $whereOper = $this->_getWhereOper($advSearch); - $whereStringOper = $this->_getWhereStringOper($advSearch); - if (isset($this->scMain['searchable'])) foreach ($this->scMain['searchable'] as $searchable) $hvg[] = '(' . $this->scMain['tb_alias'] . '.' . $searchable . $like . ')'; - - if ($advSearch != NOWORDS) { - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) { - $jpref = $joined['tb_alias']; - if (isset($joined['searchable'])) foreach ($joined['searchable'] as $searchable) $hvg[] = '(' . $jpref . '_' . $searchable . $like . ')'; - } - if (isset($this->scTvs['tvs'])) foreach ($this->scTvs['tvs'] as $scTv) { - $jpref = $scTv['tb_alias']; - $hvg[] = '(`' . $scTv['name'] . '`' . $like . ')'; - } - } else { - - if (isset($this->scJoined)) foreach ($this->scJoined as $joined) { - $jpref = $joined['tb_alias']; - if (isset($joined['searchable'])) foreach ($joined['searchable'] as $searchable) { - $hvg[] = '((' . $jpref . '_' . $searchable . $like . ') OR (' . $jpref . '_' . $searchable . ' IS NULL))'; - } - } - if (isset($this->scTvs['tvs'])) foreach ($this->scTvs['tvs'] as $scTv) { - $jpref = $scTv['tb_alias']; - $hvg[] = '((`' . $scTv['name'] . '`' . $like . ') OR (`' . $scTv['name'] . '` IS NULL))'; - } - } - if (count($hvg) > 0) { - $havingSubClause = '(' . implode($whereOper, $hvg) . ')'; - - $search = $this->_getSearchTerms($searchString, $advSearch); - foreach ($search as $searchTerm) { - $_having = array(); - $_having[0] = preg_replace('/word/', $searchTerm, $havingSubClause); - $namedSearchTerm = $this->_getNamedSearchTerm($searchTerm); - if ($namedSearchTerm != $searchTerm) { - $_having[1] = preg_replace('/word/', $namedSearchTerm, $havingSubClause); - $having[] = '(' . implode(' OR ', $_having) . ')'; - } - else $having[] = $_having[0]; - } - $havingClause = '(' . implode($whereStringOper, $having) . ')'; - } - $havingClause_array[] = $havingClause; - } - - if ($fClause) { - $havingClause_array[] = '(' . $fClause . ')';; - } - $havingClause = implode(' AND ',$havingClause_array); - $havingClause = ($havingClause) ? $havingClause : '1'; - return $havingClause; - } - /* - * Get the "GROUP BY" clause of the AS query - */ - function _getOrderBy() { - if (isset($this->scCateg)) $orderFields[] = 'category ASC'; - if ($this->cfg['order']) { - $order = array_map('trim',explode(',', $this->cfg['order'])); - foreach ($order as $ord) { - $ordElt = explode(' ',$ord); - $ordby = '`' . $ordElt[0] . '`'; - if (isset($ordElt[1]) && ($ordElt[1] == 'ASC' || $ordElt[1] == 'DESC')) $ordby .= ' ' . $ordElt[1]; - $orderBy[] = $ordby; - } - $orderFields[] = implode(',', $orderBy); - } - if (count($orderFields) > 0) $orderByClause = implode(', ', $orderFields); - else $orderByClause = '1'; - return $orderByClause; - } - /* - * Get select statement for a joined table - */ - function _getSubSelect($joined, $searchString, $advSearch) { - $fields = array(); - $from = array(); - $where = array(); - $whl = array(); - - $fields[] = $joined['tb_alias'] . '.' . $joined['id']; - - if (isset($joined['displayed'])) foreach ($joined['displayed'] as $displayed) $fields[] = $joined['tb_alias'] . '.' . $displayed; - - if ($joined['join'] != $joined['id']) $fields[] = $joined['tb_alias'] . '.' . $joined['join']; - $fieldsClause = implode(', ', $fields); - - $from[] = $joined['tb_name'] . ' ' . $joined['tb_alias']; - - if (isset($joined['jfilters'])) foreach ($joined['jfilters'] as $jfilter) { - $f = 'INNER JOIN ' . $jfilter['tb_name'] . ' ' . $jfilter['tb_alias']; - $f.= ' ON ' . $joined['tb_alias'] . '.' . $jfilter['main'] . ' = ' . $jfilter['tb_alias'] . '.' . $jfilter['join']; - $from[] = $f; - } - $fromClause = implode(' ', $from); - - if (isset($joined['filters'])) foreach ($joined['filters'] as $filter) { - $where[] = $this->_getFilter($joined['tb_alias'], $filter); - } - if (isset($joined['jfilters'])) foreach ($joined['jfilters'] as $jfilter) { - $where[] = $this->_getFilter($jfilter['tb_alias'], $jfilter); - } - if (count($where) > 0) { - for ($i = 0;$i < count($where);$i++) $where[$i] = '(' . $where[$i] . ')'; - $whl[] = implode(' AND ', $where); - } - - if (($joined['tb_alias'] != 'tv')) { - if ($searchString) { - $stw = $this->_getSearchTermsWhere($joined,$searchString,$advSearch); - if (!empty($stw)) $whl[] = '(' . $stw . ')'; - } - if (count($whl)) { - $whereClause = '(' . implode(' AND ',$whl). ')'; - $subSelect = 'SELECT DISTINCT ' . $fieldsClause . ' FROM ' . $fromClause . ' WHERE ' . $whereClause; - } - else $subSelect = 'SELECT DISTINCT ' . $fieldsClause . ' FROM ' . $fromClause; - } - else { - $subSelect = 'SELECT DISTINCT ' . $fieldsClause . ' FROM ' . $fromClause; - } - return $subSelect; - } - function _getFilter($alias, $filter) { - $where = $this->_getSubFilter($alias, $filter); - if (isset($filter['or'])) { - $or = $filter['or']; - if (isset($or['tb_alias'])) $alias = $or['tb_alias']; - else $alias = $this->scMain['tb_alias']; - $where = '(' . $where . ' OR ' . $this->_getFilter($alias, $or) . ')'; - } - return $where; - } - function _getSubFilter($alias, $filter) { - $where = ''; - - if (($filter['oper'] == '=') || ($filter['oper'] == 'EQUAL')) { - $where.= $alias . '.' . $filter['field'] . '=' . $filter['value']; - } - - else if (($filter['oper'] == '>') || ($filter['oper'] == 'GREAT THAN')) { - $where.= $alias . '.' . $filter['field'] . '>' . $filter['value']; - } - - else if (($filter['oper'] == '<') || ($filter['oper'] == 'LESS THAN')) { - $where.= $alias . '.' . $filter['field'] . '<' . $filter['value']; - } - - else if (($filter['oper'] == 'in') || ($filter['oper'] == 'IN')) { - $where.= $alias . '.' . $filter['field'] . ' IN (' . $filter['value'] . ')'; - } - - else if (($filter['oper'] == 'not in') || ($filter['oper'] == 'NOT IN')) { - $where.= $alias . '.' . $filter['field'] . ' NOT IN (' . $filter['value'] . ')'; - } - if ($where != '') $where = '(' . $where . ')'; - return $where; - } - function _getSearchTermsWhere($joined,$searchString,$advSearch){ - $whereClause = ''; - if (!empty($joined['searchable'])) { - $like = $this->_getWhereForm($advSearch); - $whereOper = $this->_getWhereOper($advSearch); - $type = ($advSearch == 'allwords') ? 'oneword' : $advSearch; - $whereStringOper = $this->_getWhereStringOper($type); - - foreach($joined['searchable'] as $searchable) $whsc[] = '(' . $joined['tb_alias'] . '.' . $searchable . $like .')'; - if (count($whsc)) { - $whereSubClause = implode($whereOper,$whsc); - - $search = array(); - if ($advSearch == 'exactphrase') $search[] = $searchString; - else $search = explode(' ',$searchString); - - foreach($search as $searchTerm) $where[]= preg_replace('/word/', preg_quote($searchTerm), $whereSubClause); - - $whereClause = implode($whereStringOper,$where); - } - } - return $whereClause; - } - function _getWhereForm($advSearch) { - $whereForm = array('like' => " LIKE '%word%'", 'notlike' => " NOT LIKE '%word%'", 'regexp' => " REGEXP '[[:<:]]word[[:>:]]'"); - if ($advSearch == NOWORDS) return $whereForm['notlike']; - else if ($advSearch == EXACTPHRASE) return $whereForm['regexp']; - else return $whereForm['like']; - } - function _getWhereOper($advSearch) { - $whereOper = array('or' => " OR ", 'and' => " AND "); - if ($advSearch == NOWORDS) return $whereOper['and']; - else return $whereOper['or']; - } - function _getWhereStringOper($advSearch) { - $whereStringOper = array('or' => " OR ", 'and' => " AND "); - if ($advSearch == NOWORDS || $advSearch == ALLWORDS) return $whereStringOper['and']; - else return $whereStringOper['or']; - } - function _getSearchTerms($searchString, $advSearch) { - $search = array(); - if ($advSearch == EXACTPHRASE) $search[] = $searchString; - else $search = explode(' ', $searchString); - return $search; - } - /* - * Get named html entities version of the search term. - */ - function _getNamedSearchTerm($searchString) { - $named = $this->_htmlentities($searchString, ENT_COMPAT, $this->pgCharset, false); - return $named; - } - /* - * Get the subselect query related to the Tvs - */ - function _getTvSubSelect($tvs_array,$name,$abrev,$mode) { - global $modx; - $scTvs = array(); - - if ($mode == 'simple') { - $i = 1; - foreach($tvs_array as $tv) { - $rs = $modx->db->select("DISTINCT id", $this->_getShortTableName('site_tmplvars'), "name='{$tv}'"); - $id = $modx->db->getValue($rs); - - $alias = $abrev . $i; - $nm = ($name) ? $name : $tv; - $subselect = "SELECT DISTINCT ".$alias.".contentid , ".$alias.".value "; - $subselect.= "FROM " . $this->_getShortTableName('site_tmplvar_contentvalues') . " ".$alias." "; - $subselect.= "WHERE ".$alias.".tmplvarid = '{$id}'"; - - $scTvs[] = array( - 'tb_alias' => 'n'.$alias, - 'main' => 'id', - 'join' => 'contentid', - 'displayed' => 'value', - 'searchable' => 'value', - 'sql' => $subselect, - 'name' => $nm - ); - $i++; - } - } - else { // mode = concat - $lstTvs = "'" . implode("','",$tvs_array) . "'"; - $rs = $modx->db->select("GROUP_CONCAT( DISTINCT CAST(id AS CHAR) SEPARATOR \",\" ) AS ids", $this->_getShortTableName('site_tmplvars'), "name in ({$lstTvs})"); - $ids = $modx->db->getValue($rs); - - $subselect = "SELECT DISTINCT " . $abrev . ".contentid , " . $abrev . ".value "; - $subselect.= "FROM " . $this->_getShortTableName('site_tmplvar_contentvalues') . " " . $abrev . " "; - $subselect.= "WHERE " . $abrev . ".tmplvarid in (" . $ids . ")"; - - $scTvs[] = array( - 'tb_alias' => 'n'.$abrev, - 'main' => 'id', - 'join' => 'contentid', - 'displayed' => 'value', - 'searchable' => 'value', - 'sql' => $subselect, - 'name' => $name - ); - } - return $scTvs; - } - /* - * Return the array of tv - */ - function _getTvsArray($ltv) { - $tvs_array = array(); - - $tvs_array = explode(':',$ltv); - $tvSign = $tvs_array[0]; - if (($tvSign != '+') && ($tvSign != '-')) { - $tvList = $tvSign; - $tvSign = '+'; - } - else { - if (isset($tvs_array[1])) $tvList = $tvs_array[1]; - else $tvList = ''; - } - - $tvs_array = array(); - if ($tvSign == '+') { - if ($tvList) $tvs_array = explode(',',$tvList); - else $tvs_array = $this->_getSiteTvs(); - } - else { - $allTvs_array = $this->_getSiteTvs(); - $minusTvs_array = explode(',',$tvList); - $tvs_array = array_diff($allTvs_array, $minusTvs_array); - } - return $tvs_array; - } - - /* - * Return the list of TVs of a site - */ - function _getSiteTvs() { - global $modx; - $tvs_array = array(); - $tblName = $modx->getFullTableName('site_tmplvars'); - $rs = $modx->db->select("GROUP_CONCAT( DISTINCT name SEPARATOR ',' ) AS list", $tblName, "type='text'"); - $list = $modx->db->getValue($rs); - if ($list) $tvs_array = explode(',',$list); - return $tvs_array; - } - /* - * Check the validity of a value separated list of Ids - */ - function _validListIDs($ids) { - $groups = explode(',', $ids); - $nbg = count($groups); - for ($i = 0;$i < $nbg;$i++) if (preg_match('/^[0-9]+$/', $groups[$i]) == 0) return false; - return true; - } - /* - * Append the search results with the TVs fields - */ - function _appendTvs($rs) { - global $modx; - $tvNames_array = array(); - $tvs_array = array(); - - if (!$this->cfg['tvPhx']) { - $records = $modx->db->makeArray($rs); - } - else { - if (isset($this->cfg['withTvs']) && ($this->cfg['withTvs'])) { - $tvNames_array = array_unique(array_diff($this->_getTvsArray($this->cfg['tvPhx']),$this->scTvs['names'])); - } - else $tvNames_array = array_unique($this->_getTvsArray($this->cfg['tvPhx'])); - if ($this->dbg) $this->asUtil->dbgRecord($tvNames_array, "AppendTvs - tvPhx"); - - $i = 0; - while($row = $modx->db->getRow($rs)){ - $records[] = $row; - $tv_array = $this->_getDocTvs($row['id'],$tvNames_array); - foreach ($tv_array as $name => $output) { - $records[$i][$name] = $output; - $this->scMain['append'][] = $name; - } - $i++; - } - } - return $records; - } - /* - * Get the user defined tvs of a document - */ - function _getDocTvs($docid, $tvNames_array) { - global $modx; - $results = array(); - - if (count($tvNames_array)) $where = " AND name in ('" . implode("','",$tvNames_array) . "')"; - else $where = ''; - - $rs= $modx->db->select( - "DISTINCT tv.id AS id", - $modx->getFullTableName('site_tmplvars')." AS tv - INNER JOIN " . $modx->getFullTableName('site_tmplvar_templates')." AS tvtpl ON tvtpl.tmplvarid = tv.id - LEFT JOIN " . $modx->getFullTableName('site_tmplvar_contentvalues')." AS tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$docid}'", - "tvc.contentid = '{$docid}' {$where}" - ); - $idnames = $modx->db->getColumn('id', $rs); - if ($idnames) { - $results = $modx->getTemplateVarOutput($idnames,$docid); - if (!$results) $results = array(); - } - return $results; - } - /* - * Returns a short table name based on db settings - */ - function _getShortTableName($tbl) { - global $modx; - return "`" . $modx->db->config['table_prefix'] . $tbl . "`"; - } - /* - * print Select - */ - function _printSelect($query) { - - $searched = array(" SELECT", " GROUP_CONCAT", " LEFT JOIN", " INNER JOIN", " SELECT", " FROM", " WHERE", " GROUP BY", " HAVING", " ORDER BY"); - $replace = array(" \r\nSELECT", " \r\nGROUP_CONCAT", " \r\nLEFT JOIN", " \r\nINNER JOIN", " \r\nSELECT", " \r\nFROM", " \r\nWHERE", " \r\nGROUP BY", " \r\nHAVING", " \r\nORDER BY"); - $query = str_replace($searched, $replace, " " . $query); - return $query; - } - /* - * htmlentities - */ - function _htmlentities($string, $quote_style = ENT_COMPAT, $charset = 'UTF-8', $double_encode = false) { - - if (version_compare(PHP_VERSION, '5.2.3', '>=')) $string = htmlentities($string, $quote_style, $charset, $double_encode); - else $string = htmlentities($string, $quote_style, $charset); - return $string; - } -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchResults.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchResults.class.inc.php deleted file mode 100644 index 57466bbd49..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchResults.class.inc.php +++ /dev/null @@ -1,1322 +0,0 @@ -asCfg =& $asCfg; - $this->asCtrl =& $asCtrl; - $this->asOutput =& $asOutput; - $this->asUtil =& $asUtil; - $this->dbg = $asUtil->dbg; - $this->dbgRes = $asUtil->dbgRes; - } - /* - * Get search results - * - * @access public - * @param string &$msgErr message error - * @return boolean true if ok - */ - function getSearchResults(&$msgErr) { - global $modx; - $results = array(); - include_once AS_PATH . "classes/ajaxSearchRequest.class.inc.php"; - if (class_exists('AjaxSearchRequest')) { - $this->_asRequest = new AjaxSearchRequest($this->asUtil,$this->asCfg->pgCharset); - } - if (!$this->_getSiteList($msgErr)) return false; - foreach ($this->_siteList as $site) { - if (!$this->_getSubsiteList($site,$msgErr)) return false; - foreach ($this->_subsiteList as $subsite) { - if (!$this->_getSubsiteParams($site, $subsite,$msgErr)) return false; - if (!$this->_checkParams($msgErr)) return false; - $this->asCfg->saveConfig($site, $subsite); - if ($this->asCfg->cfg['showResults']) { - $this->asOutput->initClassVariables(); - $bsf = $this->_doBeforeSearchFilter(); - $results = $this->_asRequest->doSearch($this->asCtrl->searchString, $this->asCtrl->advSearch, $this->asCfg->cfg, $bsf, $this->asCtrl->fClause); - $results = $this->_doFilter($results, $this->asCtrl->searchString, $this->asCtrl->advSearch); - $this->_setSearchResults($site, $subsite, $results); - } - } - } - $this->asCfg->restoreConfig(DEFAULT_SITE, DEFAULT_SUBSITE); - $this->_sortMixedResults(); - if ($this->dbgRes) $this->asUtil->dbgRecord($this->asCfg->scfg, "AjaxSearch - scfg"); - if ($this->dbgRes) $this->asUtil->dbgRecord($this->groupResults, "AjaxSearch - group results"); - if ($this->dbgRes) $this->asUtil->dbgRecord($this->_groupMixedResults, "AjaxSearch - group mixed results"); - - return true; - } - /* - * Get the list of sites from snippet call - */ - function _getSiteList(&$msgErr) { - $siteList = array(); - if ($this->asCtrl->forThisAs) { - if ($this->asCfg->cfg['sites']) $siteList = explode(',', $this->asCfg->cfg['sites']); - else $siteList[0] = DEFAULT_SITE; - } - if ($this->dbgRes) $this->asUtil->dbgRecord($siteList, "getSiteList - siteList"); - $this->_siteList = $siteList; - return true; - } - /* - * Get the list of subsites from subsearch parameter - */ - function _getSubsiteList($site, &$msgErr) { - $subsiteList = array(); - if ($this->asCtrl->forThisAs) { - if ($this->asCtrl->subSearch) $subsiteList = explode(',', $this->asCtrl->subSearch); - else $subsiteList[0] = DEFAULT_SUBSITE; - } - if ($this->dbgRes) $this->asUtil->dbgRecord($subsiteList, "getSubsiteList - subsiteList"); - $this->_subsiteList = $subsiteList; - return true; - } - /* - * Get the parameters for each subsite - */ - function _getSubsiteParams($site, $subsite, &$msgErr) { - $msgErr = ''; - - if ($site != DEFAULT_SITE) { - $siteConfigFunction = SITE_CONFIG; - if (!function_exists($siteConfigFunction)) { - $msgErr = '

      AjaxSearch error: search function ' . $siteConfigFunction . ' not defined in the configuration file: ' . $this->asCfg->cfg['config'] . ' !


      '; - return false; - } - else { - $sitecfg = $siteConfigFunction($site); - if (!count($sitecfg)) { - $msgErr = '

      AjaxSearch error: Site ' .$site . ' not defined in the configuration file: ' . $this->asCfg->cfg['config'] . ' !


      '; - return false; - } - } - } - - if ($subsite != DEFAULT_SUBSITE) { - $subsiteConfigFunction = SUBSITE_CONFIG; - if (!function_exists($subsiteConfigFunction)) { - $msgErr = '

      AjaxSearch error: search function ' . $subsiteConfigFunction . ' not defined in the configuration file: ' . $this->asCfg->cfg['config'] . ' !


      '; - return false; - } - else { - $subsitecfg = $subsiteConfigFunction($site,$subsite); - if (!count($subsitecfg)) { - $msgErr = '

      AjaxSearch error: Subsite ' .$subsite . ' of ' . $site . 'not defined in the configuration file: ' . $this->asCfg->cfg['config'] . ' !


      '; - return false; - } - } - } - $this->asCfg->cfg = array_merge($this->asCfg->bcfg, (array)$sitecfg, (array)$subsitecfg); - return true; - } - /* - * Check or not search params - */ - function _checkParams(&$msgErr) { - global $modx; - - $msgErr = ''; - if ($this->asCtrl->forThisAs) { - if (isset($this->asCfg->cfg['extractLength'])) { - if ($this->asCfg->cfg['extractLength'] == 0) $this->asCfg->cfg['extract'] = 0; - if ($this->asCfg->cfg['extractLength'] < EXTRACT_MIN) $this->asCfg->cfg['extractLength'] = EXTRACT_MIN; - if ($this->asCfg->cfg['extractLength'] > EXTRACT_MAX) $this->asCfg->cfg['extractLength'] = EXTRACT_MAX; - } - if (isset($this->asCfg->cfg['extract'])) { - $extr = explode(':', $this->asCfg->cfg['extract']); - if (($extr[0] == '') || (!is_numeric($extr[0]))) $extr[0] = 0; - if (($extr[1] == '') || (is_numeric($extr[1]))) $extr[1] = 'content'; - $this->asCfg->cfg['extract'] = $extr[0] . ":" . $extr[1]; - } - if (isset($this->asCfg->cfg['opacity'])) { - if ($this->asCfg->cfg['opacity'] < 0.) $this->asCfg->cfg['opacity'] = 0.; - if ($this->asCfg->cfg['opacity'] > 1.) $this->asCfg->cfg['opacity'] = 1.; - } - - // check that the tables where to do the search exist - if (isset($this->asCfg->cfg['whereSearch'])) { - $tables_array = explode('|', $this->asCfg->cfg['whereSearch']); - foreach ($tables_array as $table) { - $fields_array = explode(':', $table); - $tbcode = $fields_array[0]; - if (($tbcode != 'content') && ($tbcode != 'tv') && ($tbcode != 'jot') && ($tbcode != 'maxigallery') && !function_exists($tbcode)) { - $msgErr = "

      AjaxSearch error: table $tbcode not defined in the configuration file: " . $this->asCfg->cfg['config'] . " !


      "; - return false; - } - } - } - - // check the list of tvs enabled with "withTvs" - if ((isset($this->asCfg->cfg['withTvs'])) && ($this->asCfg->cfg['withTvs'])){ - $tv_array = explode(':', $this->asCfg->cfg['withTvs']); - $tvSign = $tv_array[0]; - if (($tvSign != '+') && ($tvSign != '-')) { - $tvList = $tvSign; - $tvSign = '+'; - } - else { - if (isset($tv_array[1])) $tvList = $tv_array[1]; - else $tvList = ''; - } - if (!$this->_validListTvs($tvList, $msgErr)) return False; - $this->asCfg->cfg['withTvs'] = ($tvList) ? $tvSign . ':' . $tvList : $tvSign; - } - - // check the list of tvs enabled with "phxTvs" - filter the tv already enabled by withTvs - if ((isset($this->asCfg->cfg['withTvs'])) && ($this->asCfg->cfg['phxTvs'])){ - unset($tv_array); - $tv_array = explode(':', $this->asCfg->cfg['phxTvs']); - $tvSign = $tv_array[0]; - if (($tvSign != '+') && ($tvSign != '-')) { - $tvList = $tvSign; - $tvSign = '+'; - } - else { - if (isset($tv_array[1])) $tvList = $tv_array[1]; - else $tvList = ''; - } - if (!$this->_validListTvs($tvList, $msgErr)) return False; - $this->asCfg->cfg['phxTvs'] = ($tvList) ? $tvSign . ':' . $tvList : $tvSign; - } - - if (isset($this->asCfg->cfg['hideMenu'])) { - $this->asCfg->cfg['hideMenu'] = (($this->asCfg->cfg['hideMenu'] < 0) || ($this->asCfg->cfg['hideMenu'] > 2)) ? 2 : $this->asCfg->cfg['hideMenu']; - } - - if (isset($this->asCfg->cfg['hideLink'])) { - $this->asCfg->cfg['hideLink'] = (($this->asCfg->cfg['hideLink'] < 0) || ($this->asCfg->cfg['hideLink'] > 1)) ? 1 : $this->asCfg->cfg['hideLink']; - } - - $this->_idType = ($this->asCfg->cfg['documents'] != "") ? "documents" : "parents"; - $this->_pardoc = ($this->_idType == "parents") ? $this->asCfg->cfg['parents'] : $this->asCfg->cfg['documents']; - $this->_depth = $this->asCfg->cfg['depth']; - - $this->asCfg->cfg['docgrp'] = ''; - if ($docgrp = $modx->getUserDocGroups()) $this->asCfg->cfg['docgrp'] = implode(",", $docgrp); - - if (isset($this->asCfg->cfg['filter'])) { - } - - } else { - $this->asCfg->cfg['showResults'] = false; - } - return true; - } - /* - * Set up search results - */ - function _setSearchResults($site, $subsite, $rs) { - global $modx; - $nbrs = count($rs); - if (!$nbrs) return false; - $categConfigFunction = CATEG_CONFIG; - $this->_initExtractVariables(); - $display = $this->asCfg->cfg['display']; - $select = $this->_asRequest->asSelect; - - if (($display == MIXED)) { - $this->asCfg->chooseConfig(DEFAULT_SITE, $DEFAULT_SUBSITE, $display); - if (!isset($this->_groupMixedResults['length'])) { - $this->_groupMixedResults = $this->_setHeaderGroupResults(MIXED_SITES, $subsite, $display, 'N/A', $select, $nbrs); - } else $this->_groupMixedResults['length']+= $nbrs; - - $order_array = explode(',', $this->asCfg->cfg['order']); - $order = $order_array[0]; - for($i=0;$i<$nbrs;$i++){ - $rs[$i]['order'] = $rs[$i][$order]; - $this->_groupMixedResults['results'][] = $rs[$i]; - } - if ($this->dbgRes) $this->asUtil->dbgRecord($this->_groupMixedResults, "AjaxSearch - group mixed results"); - - } - else { - - if ($this->asCfg->cfg['category']) { - - - $categ = '---'; - $cfunc = function_exists($categConfigFunction); - $ic = 0; - for ($i = 0;$i < $nbrs;$i++) { - $newCateg = trim($rs[$i]['category']); - if ($newCateg != $categ) { - $display = UNMIXED; - $cfg = NULL; - if ($cfunc){ - $cfg = $categConfigFunction($site,$newCateg); - if (isset($cfg['display'])) $display = $cfg['display']; - } - if ($ic>0) $ctg[$ic-1]['end'] = $i-1; - $ctg[] = array('categ' => $newCateg, 'start' => $i, 'end' => 0, 'display' => $display, 'cfg' => $cfg); - $ic++; - } - $categ = $newCateg; - } - - if ($ic>0) $ctg[$ic-1]['end'] = $i-1; - $nbc = count($ctg); - - $ig0 = count($this->groupResults); - - for ($i = 0;$i < $nbc;$i++) { - $categ = $ctg[$i]['categ']; - $categ = ($categ) ? $categ : UNCATEGORIZED; - $display = $ctg[$i]['display']; - $start = $ctg[$i]['start']; - $nbrsg = $ctg[$i]['end'] - $ctg[$i]['start'] + 1; - $cfg = $ctg[$i]['cfg']; - - if ($display == UNMIXED) { - $ig = count($this->groupResults); - $this->asCfg->addConfigFromCateg($site, $categ, $cfg); - $this->asCfg->chooseConfig($site, $categ, $display); - $ucfg = $this->asCfg->setAsCall($this->asCfg->getUserConfig()); - $this->groupResults[$ig] = $this->_setHeaderGroupResults($site, $categ, $display, $ucfg, $select, $nbrsg); - $grpresults = array_slice($rs,$start,$nbrsg); - $this->groupResults[$ig]['results'] = $this->_sortResultsByRank($this->asCtrl->searchString, $this->asCtrl->advSearch, $grpresults, $nbrsg); - $this->nbGroups = $ig + 1; - $this->asCfg->restoreConfig($site, DEFAULT_SUBSITE); - - if ($this->dbgRes) $this->asUtil->dbgRecord($this->groupResults[$ig], "AjaxSearch - group results"); - - } - else { - if (!isset($this->_groupMixedResults['length'])) { - $this->_groupMixedResults = $this->_setHeaderGroupResults(NO_NAME, $subsite, $display, 'N/A', 'N/A', $nbrsg); - } else $this->_groupMixedResults['length']+= $nbrsg; - $order_array = explode(',', $this->asCfg->cfg['order']); - $order = $order_array[0]; - for($j=0;$j<$nbrsg;$j++) { - $grpresults[$j]['order'] = $grpresults[$j][$order]; - $this->_groupMixedResults['results'][] = $rs[$j]; - } - - if ($this->dbgRes) $this->asUtil->dbgRecord($this->groupResults, "AjaxSearch - group results"); - } - } - } - else { - $ig = count($this->groupResults); - $ucfg = $this->asCfg->setAsCall($this->asCfg->getUserConfig()); - $this->groupResults[$ig] = $this->_setHeaderGroupResults($site, $subsite, $display, $ucfg, $select, $nbrs); - $row = array(); - if ($this->dbgRes) $this->asUtil->dbgRecord($rs, "AjaxSearch - rs"); - $rs = $this->_sortResultsByRank($this->asCtrl->searchString, $this->asCtrl->advSearch, $rs, $nbrs); - $this->groupResults[$ig]['results'] = $rs; - $this->nbGroups = $ig + 1; - } - unset($ctg); - unset($rs); - } - $this->nbResults+= $nbrs; - } - /* - * Initialize the Extract variables - */ - function _initExtractVariables() { - list($nbExtr,$lstFlds) = explode(':', $this->asCfg->cfg['extract']); - $this->extractNb = $nbExtr; - $this->_extractFields = explode(',', $lstFlds); - $this->withExtract+= $this->extractNb; - } - /* - * Set the header of group of results - */ - function _setHeaderGroupResults($site, $subsite, $display, $ucfg, $select, $length) { - $headerGroupResults = array(); - $headerGroupResults['site'] = $site; - $headerGroupResults['subsite'] = $subsite; - $headerGroupResults['display'] = $display; - $headerGroupResults['offset'] = 0; - $headerGroupResults['ucfg'] = $ucfg; - $headerGroupResults['select'] = $select; - $headerGroupResults['length'] = $length; - $headerGroupResults['found'] = ''; - return $headerGroupResults; - } - /* - * Sort results by rank value - */ - function _sortResultsByRank($searchString, $advSearch, $results, $nbrs) { - $rkFields = array(); - if ($this->asCfg->cfg['rank']) { - $searchString = strtolower($searchString); - - $rkParam = explode(',', $this->asCfg->cfg['rank']); - foreach ($rkParam as $rk) { - $rankParam = explode(':', $rk); - $name = $rankParam[0]; - $weight = (isset($rankParam[1]) ? $rankParam[1] : 1); - $rkFields[] = array('name' => $name, 'weight' => $weight); - } - - for ($i = 0;$i < $nbrs;$i++) { - $results[$i]['rank'] = 0; - foreach ($rkFields as $rf) { - $results[$i]['rank']+= $this->_getRank($searchString, $advSearch, $results[$i][$rf['name']], $rf['weight']); - } - } - if ($nbrs >1) { - - $i = 0; - foreach ($results as $key => $row) { - $category[$key] = $row['category']; - $rank[$key] = $row['rank']; - $ascOrder[$key] = $i++; - } - array_multisort($category, SORT_ASC, $rank, SORT_DESC, $ascOrder, SORT_ASC, $results); - } - } - return $results; - } - /* - * Get the rank value - */ - function _getRank($searchString, $advSearch, $field, $weight) { - $search = array(); - $rank = 0; - if ($searchString && ($advSearch != NOWORDS)) { - switch ($advSearch) { - case EXACTPHRASE: - $search[0] = $searchString; - break; - case ALLWORDS: - case ONEWORD: - $search = explode(" ", $searchString); - } - $field = $this->cleanText($field, $this->asCfg->cfg['stripOutput']); - if (($this->asCfg->dbCharset == 'utf8') && ($this->asCfg->cfg['mbstring'])) { - $field = mb_strtolower($field); - foreach ($search as $srch) $rank+= mb_substr_count($field, $srch); - } else { - $field = strtolower($field); - foreach ($search as $srch) $rank+= substr_count($field, $srch); - } - $rank = $rank * $weight; - } - return $rank; - } - /* - * Sort noName results by order - */ - function _sortMixedResults() { - if (isset($this->_groupMixedResults['results'])) { - foreach ($this->_groupMixedResults['results'] as $key => $row) { - $order[$key] = $row['order']; - } - array_multisort($order, SORT_ASC, $this->_groupMixedResults['results']); - $this->groupResults[] = $this->_groupMixedResults; - $this->nbGroups++; - if ($this->dbgRes) $this->asUtil->dbgRecord($this->_groupMixedResults['results'], "AjaxSearch - sorted noName results"); - } - } - /* - * Check the validity of a value separated list of TVs name - */ - function _validListTvs($listTvs, &$msgErr) { - global $modx; - if ($listTvs) { - $tvs = explode(',', $listTvs); - $tblName = $modx->getFullTableName('site_tmplvars'); - foreach ($tvs as $tv) { - $tplRS = $modx->db->select('count(id)', $tblName, "name='{$tv}'"); - if (!$modx->db->getValue($tplRS)) { - $msgErr = "

      AjaxSearch error: tv $tv not defined - Check your withTvs parameter !


      "; - return false; - } - } - } - return true; - } - /* - * Returns extracts with highlighted searchterms - */ - function _getExtract($text, $searchString, $advSearch, $highlightClass, &$nbExtr) { - $finalExtract = ''; - if (($text !== '') && ($searchString !== '') && ($this->extractNb > 0) && ($advSearch !== NOWORDS)) { - $extracts = array(); - if (($this->asCfg->dbCharset == 'utf8') && ($this->asCfg->cfg['mbstring'])) { - $text = $this->_html_entity_decode($text, ENT_QUOTES, 'UTF-8'); - $mbStrpos = 'mb_strpos'; - $mbStrlen = 'mb_strlen'; - $mbStrtolower = 'mb_strtolower'; - $mbSubstr = 'mb_substr'; - $mbStrrpos = 'mb_strrpos'; - mb_internal_encoding('UTF-8'); - } else { - - $text = html_entity_decode($text, ENT_QUOTES); - $mbStrpos = 'strpos'; - $mbStrlen = 'strlen'; - $mbStrtolower = 'strtolower'; - $mbSubstr = 'substr'; - $mbStrrpos = 'strrpos'; - } - $rank = 0; - // $lookAhead = '(?![^<]+>)'; - $pcreModifier = $this->asCfg->pcreModifier; - $textLength = $mbStrlen($text); - $extractLength = $this->asCfg->cfg['extractLength']; - $extractLength2 = $extractLength / 2; - $searchList = $this->asCtrl->getSearchWords($searchString, $advSearch); - foreach ($searchList as $searchTerm) { - $rank++; - $wordLength = $mbStrlen($searchTerm); - $wordLength2 = $wordLength / 2; - // $pattern = '/' . preg_quote($searchTerm, '/') . $lookAhead . '/' . $pcreModifier; - if ($advSearch == EXACTPHRASE) $pattern = '/(\b|\W)' . preg_quote($searchTerm, '/') . '(\b|\W)/' . $pcreModifier; - else $pattern = '/' . preg_quote($searchTerm, '/') . '/' . $pcreModifier; - $matches = array(); - $nbr = preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE); - - for($i=0;$i<$nbr && $i<$this->extractNb;$i++) { - $wordLeft = $mbStrlen(substr($text,0,$matches[0][$i][1])); - $wordRight = $wordLeft + $wordLength - 1; - $left = intval($wordLeft - $extractLength2 + $wordLength2); - $right = $left + $extractLength - 1; - if ($left < 0) $left = 0; - if ($right > $textLength) $right = $textLength; - $extracts[] = array('word' => $searchTerm, - 'wordLeft' => $wordLeft, - 'wordRight' => $wordRight, - 'rank' => $rank, - 'left' => $left, - 'right' => $right, - 'etcLeft' => $this->asCfg->cfg['extractEllips'], - 'etcRight' => $this->asCfg->cfg['extractEllips'] - ); - } - } - - $nbExtr = count($extracts); - if ($nbExtr > 1) { - for ($i = 0;$i < $nbExtr;$i++) { - $lft[$i] = $extracts[$i]['left']; - $rght[$i] = $extracts[$i]['right']; - } - array_multisort($lft, SORT_ASC, $rght, SORT_ASC, $extracts); - - for ($i = 0;$i < $nbExtr;$i++) { - - $begin = $mbSubstr($text, 0, $extracts[$i]['left']); - if ($begin != '') $extracts[$i]['left'] = (int)$mbStrrpos($begin, ' '); - - $end = $mbSubstr($text, $extracts[$i]['right'] + 1, $textLength - $extracts[$i]['right']); - if ($end != '') $dr = (int)$mbStrpos($end, ' '); - if (is_int($dr)) $extracts[$i]['right']+= $dr + 1; - } - - if ($extracts[0]['left'] == 0) $extracts[0]['etcLeft'] = ''; - for ($i = 1;$i < $nbExtr;$i++) { - - if ($extracts[$i]['left'] < $extracts[$i - 1]['wordRight']) { - $extracts[$i - 1]['right'] = $extracts[$i - 1]['wordRight']; - $extracts[$i]['left'] = $extracts[$i - 1]['right'] + 1; - $extracts[$i - 1]['etcRight'] = $extracts[$i]['etcLeft'] = ''; - } else if ($extracts[$i]['left'] < $extracts[$i - 1]['right']) { - $extracts[$i - 1]['right'] = $extracts[$i]['left']; - $extracts[$i - 1]['etcRight'] = $extracts[$i]['etcLeft'] = ''; - } - } - } - - for ($i = 0;$i < $nbExtr;$i++) { - $separation = ($extracts[$i]['etcRight'] != '') ? $this->asCfg->cfg['extractSeparator'] : ''; - $extract = $mbSubstr($text, $extracts[$i]['left'], $extracts[$i]['right'] - $extracts[$i]['left'] + 1); - - if ($this->asCfg->cfg['highlightResult']) { - $rank = $extracts[$i]['rank']; - $searchTerm = $searchList[$rank - 1]; - if ($advSearch == EXACTPHRASE) $pattern = '/(\b|\W)' . preg_quote($searchTerm, '/') . '(\b|\W)/' . $pcreModifier; - else $pattern = '/' . preg_quote($searchTerm, '/') . '/' . $pcreModifier; - $subject = '\0'; - $extract = preg_replace($pattern, $subject, $extract); - } - $finalExtract.= $extracts[$i]['etcLeft'] . $extract . $extracts[$i]['etcRight'] . $separation; - } - $finalExtract = $mbSubstr($finalExtract, 0, $mbStrlen($finalExtract) - $mbStrlen($this->asCfg->cfg['extractSeparator'])); - } - else if ((($text !== '') && ($searchString !== '') && ($this->extractNb > 0) && ($advSearch == NOWORDS)) || - (($text !== '') && ($searchString == '') && ($this->extractNb > 0))) { - - if (($this->asCfg->dbCharset == 'utf8') && ($this->asCfg->cfg['mbstring'])) { - $mbSubstr = 'mb_substr'; - $mbStrrpos = 'mb_strrpos'; - mb_internal_encoding('UTF-8'); - } else { - $mbSubstr = 'substr'; - $mbStrrpos = 'strrpos'; - } - $introLength = $this->asCfg->cfg['extractLength']; - $intro = $mbSubstr($text,0,$introLength); - - $right = (int) $mbStrrpos($intro, ' '); - $intro = $mbSubstr($intro,0,$right); - if ($intro) $intro .= ' ' . $this->asCfg->cfg['extractEllips']; - $finalExtract = $intro; - } - - return $finalExtract; - } - /* - * Get the extract result from each row - * - * @access public - * @param row $row mysql row - * @return string extract - */ - function getExtractRow($row) { - $text = ''; - $nbExtr = 0; - if ($this->extractNb) { - - foreach ($this->_extractFields as $f) if ($row[$f]) $text.= $row[$f] . ' '; - - $text = $this->cleanText($text, $this->asCfg->cfg['stripOutput']); - - $highlightClass = $this->asOutput->getHClass(); - $text = $this->_getExtract($text, $this->asCtrl->searchString, $this->asCtrl->advSearch, $highlightClass, $nbExtr); - } - return $text; - } - /* - * Strip function to clean outputted results - */ - function cleanText($text, $stripOutput) { - global $modx; - if (($stripOutput) && function_exists($stripOutput)) $text = $stripOutput($text); - else $text = $this->defaultStripOutput($text); - - return $text; - } - /* - * Return the sign and the list of Ids used for the search (parents & documents) - */ - function _doBeforeSearchFilter() { - global $modx; - $beforeFilter = array(); - - list($fsign,$listIds) = explode(':',$this->_pardoc); - if (($fsign != 'in') && ($fsign != 'not in')) { - $listIds = $fsign; - $fsign = 'in'; - } - $beforeFilter['oper'] = ($fsign == 'in') ? 'in' : 'not in'; - if ($listIds != '') $listIds = $this->_cleanIds($listIds); - if (strlen($listIds)) { - switch ($this->_idType) { - case "parents": - $arrayIds = explode(",", $listIds); - $listIds = implode(',', $this->_getChildIds($arrayIds, $this->_depth)); - break; - case "documents": - break; - } - } - $beforeFilter['listIds'] = $listIds; - return $beforeFilter; - } - /* - * Filter the search results - */ - function _doFilter($results, $searchString, $advSearch) { - - $globalDelimiter = '|'; - $localDelimiter = ','; - - $results = $this->_doFilterTags($results, $searchString, $advSearch); - - $filter = $this->asCfg->cfg['filter']; - if ($filter) { - - $searchString_array = array(); - if ($advSearch == EXACTPHRASE) $searchString_array[] = $searchString; - else $searchString_array = explode(' ', $searchString); - $nbs = count($searchString_array); - $filter_array = explode('|', $filter); - $nbf = count($filter_array); - for ($i = 0;$i < $nbf;$i++) { - if (preg_match('/#/', $filter_array[$i])) { - $terms_array = explode(',', $filter_array[$i]); - if ($searchString == EXACTPHRASE) $filter_array[$i] = preg_replace('/#/i', $searchString, $filter_array[$i]); - else { - $filter_array[$i] = preg_replace('/#/i', $searchString_array[0], $filter_array[$i]); - for ($j = 1;$j < $nbs;$j++) { - $filter_array[] = $terms_array[0] . ',' . $searchString_array[$j] . ',' . $terms_array[2]; - } - } - } - } - $filter = implode('|', $filter_array); - - $parsedFilters = array(); - $filters = explode($globalDelimiter, $filter); - if ($filter && count($filters) > 0) { - foreach ($filters AS $filter) { - if (!empty($filter)) { - $filterArray = explode($localDelimiter, $filter); - $this->_array_key = $filterArray[0]; - if (substr($filterArray[1], 0, 5) != "@EVAL") { - $this->_filterValue = $filterArray[1]; - } else { - $this->_filterValue = eval(substr($filterArray[1], 5)); - } - $this->_filtertype = (isset($filterArray[2])) ? $filterArray[2] : 1; - $results = array_filter($results, array($this, "_basicFilter")); - } - } - } - $results = array_values($results); - } - return $results; - } - /* - * Do basic comparison filtering - */ - function _basicFilter($value) { - $unset = 1; - switch ($this->_filtertype) { - case "!=": - case 1: - if (!isset($value[$this->_array_key]) || $value[$this->_array_key] != $this->_filterValue) $unset = 0; - break; - case "==": - case 2: - if ($value[$this->_array_key] == $this->_filterValue) $unset = 0; - break; - case "<": - case 3: - if ($value[$this->_array_key] < $this->_filterValue) $unset = 0; - break; - case ">": - case 4: - if ($value[$this->_array_key] > $this->_filterValue) $unset = 0; - break; - case "<=": - case 5: - if (!($value[$this->_array_key] < $this->_filterValue)) $unset = 0; - break; - case ">=": - case 6: - if (!($value[$this->_array_key] > $this->_filterValue)) $unset = 0; - break; - case "not like": - case 7: // does not contain the text of the criterion (like) - if (strpos($value[$this->_array_key], $this->_filterValue) === FALSE) $unset = 0; - break; - case "like": - case 8: // does contain the text of the criterion (not like) - if (strpos($value[$this->_array_key], $this->_filterValue) !== FALSE) $unset = 0; - break; - case 9: // case insenstive version of #7 - exclude records that do not contain the text of the criterion - if (strpos(strtolower($value[$this->_array_key]), strtolower($this->_filterValue)) === FALSE) $unset = 0; - break; - case 10: // case insenstive version of #8 - exclude records that do contain the text of the criterion - if (strpos(strtolower($value[$this->_array_key]), strtolower($this->_filterValue)) !== FALSE) $unset = 0; - break; - case "in": - case 11: // in list - $filter_list = explode(':',$this->_filterValue); - if (in_array($value[$this->_array_key] , $filter_list)) $unset = 0; - break; - case "not in": - case 12: // not in list - $filter_list = explode(':',$this->_filterValue); - if (!in_array($value[$this->_array_key] , $filter_list)) $unset = 0; - break; - case "custom": - case 13: // custom - $custom_list = explode(':',$this->_filterValue); - $custom = array_shift($custom_list); - if (function_exists($custom)) { - if ($custom($value[$this->_array_key], $custom_list)) $unset = 0; - } - break; - } - return $unset; - } - /* - * Get the Ids ready to be processed - */ - function _getChildIds($Ids, $depth) { - global $modx; - $depth = intval($depth); - $kids = array(); - $docIds = array(); - if ($depth == 0 && $Ids[0] == 0 && count($Ids) == 1) { - foreach ($modx->documentMap as $null => $document) { - foreach ($document as $parent => $id) { - $kids[] = $id; - } - } - return $kids; - } else if ($depth == 0) { - $depth = 10000; - - - } - foreach ($modx->documentMap as $null => $document) { - foreach ($document as $parent => $id) { - $kids[$parent][] = $id; - } - } - foreach ($Ids AS $seed) { - if (!empty($kids[intval($seed) ])) { - $docIds = array_merge($docIds, $kids[intval($seed) ]); - unset($kids[intval($seed) ]); - } - } - $depth--; - while ($depth != 0) { - $valid = $docIds; - foreach ($docIds as $child => $id) { - if (!empty($kids[intval($id) ])) { - $docIds = array_merge($docIds, $kids[intval($id) ]); - unset($kids[intval($id) ]); - } - } - $depth--; - if ($valid == $docIds) $depth = 0; - } - return array_unique($docIds); - } - /* - * Clean Ids list of unwanted characters - */ - function _cleanIds($Ids) { - - $pattern = array('`(,)+`', - '`^(,)`', - '`(,)$`' - ); - $replace = array(',', '', ''); - $Ids = preg_replace($pattern, $replace, $Ids); - return $Ids; - } - /* - * Filter the search results when the search terms are found inside HTML or MODX tags - */ - function _doFilterTags($results, $searchString, $advSearch) { - $filteredResults = array(); - $nbr = count($results); - for($i=0;$i<$nbr;$i++) { - if ($advSearch === NOWORDS) $found = true; - else { - $text = implode(' ',$results[$i]); - $text = $this->defaultStripOutput($text); - $found = true; - if ($searchString !== '') { - if (($this->asCfg->dbCharset == 'utf8') && ($this->asCfg->cfg['mbstring'])) { - $text = $this->_html_entity_decode($text, ENT_QUOTES, 'UTF-8'); - } - else { - $text = html_entity_decode($text, ENT_QUOTES); - } - - $searchList = $this->asCtrl->getSearchWords($searchString, $advSearch); - $pcreModifier = $this->asCfg->pcreModifier; - foreach ($searchList as $searchTerm) { - if ($advSearch == EXACTPHRASE) $pattern = '/(\b|\W)' . preg_quote($searchTerm, '/') . '(\b|\W)/' . $pcreModifier; - else $pattern = '/' . preg_quote($searchTerm, '/') . '/' . $pcreModifier; - $matches = array(); - $found = preg_match($pattern, $text, $matches, PREG_OFFSET_CAPTURE); - if ($found) break; - } - } - } - if ($found) $filteredResults[] = $results[$i]; - } - return $filteredResults; - } - /* - * Get the array of categories found - */ - function getResultsCateg() { - $resCategName = array(); - $resCategNb = array(); - for ($i = 0;$i < $this->nbGroups;$i++) { - $resCategName[$i] = "'" . $this->groupResults[$i]['subsite'] . "'"; - $resCategNb[$i] = $this->groupResults[$i]['length']; - } - return array("name" => $resCategName, "nb" => $resCategNb); - } - /* - * Get the array of tags found - */ - function getResultsTag() { - $tags = array(); - $resResTag = array(); - $resTagName = array(); - $resTagNb = array(); - $indTag = array(); - - for ($i = 0;$i < $this->nbGroups;$i++) { - $categ = $this->groupResults[$i]['subsite']; - $nbr = $this->groupResults[$i]['length']; - $results = $this->groupResults[$i]['results']; - for ($j = 0;$j < $nbr; $j++) { - $tags_array = explode(',',$results[$j]['tags']); - foreach($tags_array as $tagv) { - $tv = ($tagv) ? (string) (trim($tagv)) : UNTAGGED; - $tags[$tv][]= $i . ',' . $j; - $resResTag[$i][$j][] = $tv; - } - } - } - $itag = 0; - foreach($tags as $key => $value) { - $resTagName[] = "'" . $key . "'"; - $resTagNb[] = count($tags[$key]); - $indTag[$key] = $itag; - $itag++; - } - for ($i = 0;$i < $this->nbGroups;$i++) { - $nbr = $this->groupResults[$i]['length']; - for ($j = 0;$j < $nbr; $j++) { - $nbt = count($resResTag[$i][$j]); - for ($t = 0;$t < $nbt; $t++) { - $resResTag[$i][$j][$t] = $indTag[$resResTag[$i][$j][$t]]; - } - } - } - return array("name" => $resTagName, "nb" => $resTagNb, "restag" => $resResTag); - } - /* - * Default ouput strip function - */ - function defaultStripOutput($text) { - global $modx; - - if ($text !== '') { - // $text = $modx->parseDocumentSource($text); // parse document - - $text = $this->stripLineBreaking($text); - - $text = $modx->stripTags($text); - - $text = $this->stripJscripts($text); - - $text = $this->stripHtml($text); - } - return $text; - } - /* - * stripLineBreaking : replace line breaking tags with whitespace - */ - function stripLineBreaking($text) { - - $text = preg_replace("'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si", ' ', $text); - return $text; - } - /* - * stripTags : Remove MODX sensitive tags - */ - function stripTags($text) { - - $modRegExArray[] = '~\[\[(.*?)\]\]~s'; - $modRegExArray[] = '~\[\!(.*?)\!\]~s'; - $modRegExArray[] = '#\[\~(.*?)\~\]#s'; - $modRegExArray[] = '~\[\((.*?)\)\]~s'; - $modRegExArray[] = '~{{(.*?)}}~s'; - $modRegExArray[] = '~\[\*(.*?)\*\]~s'; - $modRegExArray[] = '~\[\+(.*?)\+\]~s'; - - foreach ($modRegExArray as $mReg) $text = preg_replace($mReg, '', $text); - return $text; - } - /* - * stripJscript : Remove jscript - */ - function stripJscripts($text) { - - $text = preg_replace("']*>.*?'si", "", $text); - $text = preg_replace('/{.+?}/', '', $text); - return $text; - } - /* - * stripHtml : Remove HTML sensitive tags - */ - function stripHtml($text) { - return strip_tags($text); - } - /* - * stripHtmlExceptImage : Remove HTML sensitive tags except image tag - */ - function stripHtmlExceptImage($text) { - $text = strip_tags($text, ''); - return $text; - } - function getSearchContext() { - // return the search context - $searchContext['main'] = $this->_asRequest->scMain; - $searchContext['joined'] = $this->_asRequest->scJoined; - $searchContext['tvs'] = $this->_asRequest->scTvs; - $searchContext['category'] = $this->_asRequest->scCategory; - $searchContext['tags'] = $this->_asRequest->scTags; - return $searchContext; - } - function getWithContent() { - // return the withContent boolean value - return $this->_asRequest->withContent; - } - function _html_entity_decode($text, $quote_style = ENT_COMPAT, $charset) { - - if (version_compare(PHP_VERSION, '5.0.0', '>=')) $text = html_entity_decode($text, ENT_QUOTES, $charset); - else $text = $this->_html_entity_decode_php4($text); - return $text; - } - - // Author : Nicola Asuni - // License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html) - // - // Description : This is a PHP4 function that redefine the - // standard html_entity_decode function to support - // UTF-8 encoding. - - /** - * Reverse function for htmlentities. - * Convert entities in UTF-8. - */ - function _html_entity_decode_php4($text_to_convert) { - $htmlentities_table = array ( - "Á" => "".chr(195).chr(129)."", - "á" => "".chr(195).chr(161)."", - "Â" => "".chr(195).chr(130)."", - "â" => "".chr(195).chr(162)."", - "´" => "".chr(194).chr(180)."", - "Æ" => "".chr(195).chr(134)."", - "æ" => "".chr(195).chr(166)."", - "À" => "".chr(195).chr(128)."", - "à" => "".chr(195).chr(160)."", - "ℵ" => "".chr(226).chr(132).chr(181)."", - "Α" => "".chr(206).chr(145)."", - "α" => "".chr(206).chr(177)."", - "&" => "".chr(38)."", - "∧" => "".chr(226).chr(136).chr(167)."", - "∠" => "".chr(226).chr(136).chr(160)."", - "Å" => "".chr(195).chr(133)."", - "å" => "".chr(195).chr(165)."", - "≈" => "".chr(226).chr(137).chr(136)."", - "Ã" => "".chr(195).chr(131)."", - "ã" => "".chr(195).chr(163)."", - "Ä" => "".chr(195).chr(132)."", - "ä" => "".chr(195).chr(164)."", - "„" => "".chr(226).chr(128).chr(158)."", - "Β" => "".chr(206).chr(146)."", - "β" => "".chr(206).chr(178)."", - "¦" => "".chr(194).chr(166)."", - "•" => "".chr(226).chr(128).chr(162)."", - "∩" => "".chr(226).chr(136).chr(169)."", - "Ç" => "".chr(195).chr(135)."", - "ç" => "".chr(195).chr(167)."", - "¸" => "".chr(194).chr(184)."", - "¢" => "".chr(194).chr(162)."", - "Χ" => "".chr(206).chr(167)."", - "χ" => "".chr(207).chr(135)."", - "ˆ" => "".chr(203).chr(134)."", - "♣" => "".chr(226).chr(153).chr(163)."", - "≅" => "".chr(226).chr(137).chr(133)."", - "©" => "".chr(194).chr(169)."", - "↵" => "".chr(226).chr(134).chr(181)."", - "∪" => "".chr(226).chr(136).chr(170)."", - "¤" => "".chr(194).chr(164)."", - "†" => "".chr(226).chr(128).chr(160)."", - "‡" => "".chr(226).chr(128).chr(161)."", - "↓" => "".chr(226).chr(134).chr(147)."", - "⇓" => "".chr(226).chr(135).chr(147)."", - "°" => "".chr(194).chr(176)."", - "Δ" => "".chr(206).chr(148)."", - "δ" => "".chr(206).chr(180)."", - "♦" => "".chr(226).chr(153).chr(166)."", - "÷" => "".chr(195).chr(183)."", - "É" => "".chr(195).chr(137)."", - "é" => "".chr(195).chr(169)."", - "Ê" => "".chr(195).chr(138)."", - "ê" => "".chr(195).chr(170)."", - "È" => "".chr(195).chr(136)."", - "è" => "".chr(195).chr(168)."", - "∅" => "".chr(226).chr(136).chr(133)."", - " " => "".chr(226).chr(128).chr(131)."", - " " => "".chr(226).chr(128).chr(130)."", - "Ε" => "".chr(206).chr(149)."", - "ε" => "".chr(206).chr(181)."", - "≡" => "".chr(226).chr(137).chr(161)."", - "Η" => "".chr(206).chr(151)."", - "η" => "".chr(206).chr(183)."", - "Ð" => "".chr(195).chr(144)."", - "ð" => "".chr(195).chr(176)."", - "Ë" => "".chr(195).chr(139)."", - "ë" => "".chr(195).chr(171)."", - "€" => "".chr(226).chr(130).chr(172)."", - "∃" => "".chr(226).chr(136).chr(131)."", - "ƒ" => "".chr(198).chr(146)."", - "∀" => "".chr(226).chr(136).chr(128)."", - "½" => "".chr(194).chr(189)."", - "¼" => "".chr(194).chr(188)."", - "¾" => "".chr(194).chr(190)."", - "⁄" => "".chr(226).chr(129).chr(132)."", - "Γ" => "".chr(206).chr(147)."", - "γ" => "".chr(206).chr(179)."", - "≥" => "".chr(226).chr(137).chr(165)."", - "↔" => "".chr(226).chr(134).chr(148)."", - "⇔" => "".chr(226).chr(135).chr(148)."", - "♥" => "".chr(226).chr(153).chr(165)."", - "…" => "".chr(226).chr(128).chr(166)."", - "Í" => "".chr(195).chr(141)."", - "í" => "".chr(195).chr(173)."", - "Î" => "".chr(195).chr(142)."", - "î" => "".chr(195).chr(174)."", - "¡" => "".chr(194).chr(161)."", - "Ì" => "".chr(195).chr(140)."", - "ì" => "".chr(195).chr(172)."", - "ℑ" => "".chr(226).chr(132).chr(145)."", - "∞" => "".chr(226).chr(136).chr(158)."", - "∫" => "".chr(226).chr(136).chr(171)."", - "Ι" => "".chr(206).chr(153)."", - "ι" => "".chr(206).chr(185)."", - "¿" => "".chr(194).chr(191)."", - "∈" => "".chr(226).chr(136).chr(136)."", - "Ï" => "".chr(195).chr(143)."", - "ï" => "".chr(195).chr(175)."", - "Κ" => "".chr(206).chr(154)."", - "κ" => "".chr(206).chr(186)."", - "Λ" => "".chr(206).chr(155)."", - "λ" => "".chr(206).chr(187)."", - "⟨" => "".chr(226).chr(140).chr(169)."", - "«" => "".chr(194).chr(171)."", - "←" => "".chr(226).chr(134).chr(144)."", - "⇐" => "".chr(226).chr(135).chr(144)."", - "⌈" => "".chr(226).chr(140).chr(136)."", - "“" => "".chr(226).chr(128).chr(156)."", - "≤" => "".chr(226).chr(137).chr(164)."", - "⌊" => "".chr(226).chr(140).chr(138)."", - "∗" => "".chr(226).chr(136).chr(151)."", - "◊" => "".chr(226).chr(151).chr(138)."", - "‎" => "".chr(226).chr(128).chr(142)."", - "‹" => "".chr(226).chr(128).chr(185)."", - "‘" => "".chr(226).chr(128).chr(152)."", - "¯" => "".chr(194).chr(175)."", - "—" => "".chr(226).chr(128).chr(148)."", - "µ" => "".chr(194).chr(181)."", - "·" => "".chr(194).chr(183)."", - "−" => "".chr(226).chr(136).chr(146)."", - "Μ" => "".chr(206).chr(156)."", - "μ" => "".chr(206).chr(188)."", - "∇" => "".chr(226).chr(136).chr(135)."", - " " => "".chr(194).chr(160)."", - "–" => "".chr(226).chr(128).chr(147)."", - "≠" => "".chr(226).chr(137).chr(160)."", - "∋" => "".chr(226).chr(136).chr(139)."", - "¬" => "".chr(194).chr(172)."", - "∉" => "".chr(226).chr(136).chr(137)."", - "⊄" => "".chr(226).chr(138).chr(132)."", - "Ñ" => "".chr(195).chr(145)."", - "ñ" => "".chr(195).chr(177)."", - "Ν" => "".chr(206).chr(157)."", - "ν" => "".chr(206).chr(189)."", - "Ó" => "".chr(195).chr(147)."", - "ó" => "".chr(195).chr(179)."", - "Ô" => "".chr(195).chr(148)."", - "ô" => "".chr(195).chr(180)."", - "Œ" => "".chr(197).chr(146)."", - "œ" => "".chr(197).chr(147)."", - "Ò" => "".chr(195).chr(146)."", - "ò" => "".chr(195).chr(178)."", - "‾" => "".chr(226).chr(128).chr(190)."", - "Ω" => "".chr(206).chr(169)."", - "ω" => "".chr(207).chr(137)."", - "Ο" => "".chr(206).chr(159)."", - "ο" => "".chr(206).chr(191)."", - "⊕" => "".chr(226).chr(138).chr(149)."", - "∨" => "".chr(226).chr(136).chr(168)."", - "ª" => "".chr(194).chr(170)."", - "º" => "".chr(194).chr(186)."", - "Ø" => "".chr(195).chr(152)."", - "ø" => "".chr(195).chr(184)."", - "Õ" => "".chr(195).chr(149)."", - "õ" => "".chr(195).chr(181)."", - "⊗" => "".chr(226).chr(138).chr(151)."", - "Ö" => "".chr(195).chr(150)."", - "ö" => "".chr(195).chr(182)."", - "¶" => "".chr(194).chr(182)."", - "∂" => "".chr(226).chr(136).chr(130)."", - "‰" => "".chr(226).chr(128).chr(176)."", - "⊥" => "".chr(226).chr(138).chr(165)."", - "Φ" => "".chr(206).chr(166)."", - "φ" => "".chr(207).chr(134)."", - "Π" => "".chr(206).chr(160)."", - "π" => "".chr(207).chr(128)."", - "ϖ" => "".chr(207).chr(150)."", - "±" => "".chr(194).chr(177)."", - "£" => "".chr(194).chr(163)."", - "′" => "".chr(226).chr(128).chr(178)."", - "″" => "".chr(226).chr(128).chr(179)."", - "∏" => "".chr(226).chr(136).chr(143)."", - "∝" => "".chr(226).chr(136).chr(157)."", - "Ψ" => "".chr(206).chr(168)."", - "ψ" => "".chr(207).chr(136)."", - "√" => "".chr(226).chr(136).chr(154)."", - "⟩" => "".chr(226).chr(140).chr(170)."", - "»" => "".chr(194).chr(187)."", - "→" => "".chr(226).chr(134).chr(146)."", - "⇒" => "".chr(226).chr(135).chr(146)."", - "⌉" => "".chr(226).chr(140).chr(137)."", - "”" => "".chr(226).chr(128).chr(157)."", - "ℜ" => "".chr(226).chr(132).chr(156)."", - "®" => "".chr(194).chr(174)."", - "⌋" => "".chr(226).chr(140).chr(139)."", - "Ρ" => "".chr(206).chr(161)."", - "ρ" => "".chr(207).chr(129)."", - "‏" => "".chr(226).chr(128).chr(143)."", - "›" => "".chr(226).chr(128).chr(186)."", - "’" => "".chr(226).chr(128).chr(153)."", - "‚" => "".chr(226).chr(128).chr(154)."", - "Š" => "".chr(197).chr(160)."", - "š" => "".chr(197).chr(161)."", - "⋅" => "".chr(226).chr(139).chr(133)."", - "§" => "".chr(194).chr(167)."", - "­" => "".chr(194).chr(173)."", - "Σ" => "".chr(206).chr(163)."", - "σ" => "".chr(207).chr(131)."", - "ς" => "".chr(207).chr(130)."", - "∼" => "".chr(226).chr(136).chr(188)."", - "♠" => "".chr(226).chr(153).chr(160)."", - "⊂" => "".chr(226).chr(138).chr(130)."", - "⊆" => "".chr(226).chr(138).chr(134)."", - "∑" => "".chr(226).chr(136).chr(145)."", - "¹" => "".chr(194).chr(185)."", - "²" => "".chr(194).chr(178)."", - "³" => "".chr(194).chr(179)."", - "⊃" => "".chr(226).chr(138).chr(131)."", - "⊇" => "".chr(226).chr(138).chr(135)."", - "ß" => "".chr(195).chr(159)."", - "Τ" => "".chr(206).chr(164)."", - "τ" => "".chr(207).chr(132)."", - "∴" => "".chr(226).chr(136).chr(180)."", - "Θ" => "".chr(206).chr(152)."", - "θ" => "".chr(206).chr(184)."", - "ϑ" => "".chr(207).chr(145)."", - " " => "".chr(226).chr(128).chr(137)."", - "Þ" => "".chr(195).chr(158)."", - "þ" => "".chr(195).chr(190)."", - "˜" => "".chr(203).chr(156)."", - "×" => "".chr(195).chr(151)."", - "™" => "".chr(226).chr(132).chr(162)."", - "Ú" => "".chr(195).chr(154)."", - "ú" => "".chr(195).chr(186)."", - "↑" => "".chr(226).chr(134).chr(145)."", - "⇑" => "".chr(226).chr(135).chr(145)."", - "Û" => "".chr(195).chr(155)."", - "û" => "".chr(195).chr(187)."", - "Ù" => "".chr(195).chr(153)."", - "ù" => "".chr(195).chr(185)."", - "¨" => "".chr(194).chr(168)."", - "ϒ" => "".chr(207).chr(146)."", - "Υ" => "".chr(206).chr(165)."", - "υ" => "".chr(207).chr(133)."", - "Ü" => "".chr(195).chr(156)."", - "ü" => "".chr(195).chr(188)."", - "℘" => "".chr(226).chr(132).chr(152)."", - "Ξ" => "".chr(206).chr(158)."", - "ξ" => "".chr(206).chr(190)."", - "Ý" => "".chr(195).chr(157)."", - "ý" => "".chr(195).chr(189)."", - "¥" => "".chr(194).chr(165)."", - "ÿ" => "".chr(195).chr(191)."", - "Ÿ" => "".chr(197).chr(184)."", - "Ζ" => "".chr(206).chr(150)."", - "ζ" => "".chr(206).chr(182)."", - "‍" => "".chr(226).chr(128).chr(141)."", - "‌" => "".chr(226).chr(128).chr(140)."", - ">" => ">", - "<" => "<" - ); - $return_text = strtr($text_to_convert, $htmlentities_table); - $return_text = preg_replace('~&#x([0-9a-f]+);~ei', 'code_to_utf8(hexdec("\\1"))', $return_text); - $return_text = preg_replace('~&#([0-9]+);~e', 'code_to_utf8(\\1)', $return_text); - return $return_text; - } -} - -/** -* Returns the UTF-8 string corresponding to unicode value. -* @param $num unicode value to convert. -* @return string converted -*/ -function code_to_utf8($num) { - if ($num <= 0x7F) { - return chr($num); - } elseif ($num <= 0x7FF) { - return chr(($num >> 0x06) + 0xC0).chr(($num & 0x3F) + 128); - } elseif ($num <= 0xFFFF) { - return chr(($num >> 0x0C) + 0xE0).chr((($num >> 0x06) & 0x3F) + 0x80).chr(($num & 0x3F) + 0x80); - } elseif ($num <= 0x1FFFFF) { - return chr(($num >> 0x12) + 0xF0).chr((($num >> 0x0C) & 0x3F) + 0x80).chr((($num >> 0x06) & 0x3F) + 0x80).chr(($num & 0x3F) + 0x80); - } - return ' '; // default value -} diff --git a/assets/snippets/ajaxSearch/classes/ajaxSearchUtil.class.inc.php b/assets/snippets/ajaxSearch/classes/ajaxSearchUtil.class.inc.php deleted file mode 100644 index 1c0e8c9ddf..0000000000 --- a/assets/snippets/ajaxSearch/classes/ajaxSearchUtil.class.inc.php +++ /dev/null @@ -1,116 +0,0 @@ -level = (abs($level) > 0 && abs($level) < 4) ? $level : 0; - $this->dbg = ($this->level > 0); - $this->dbgRes = ($this->level > 1); - $this->dbgTpl = ($this->level > 2); - $this->tstart = $tstart; - - $msgErr = ''; - $header = 'AjaxSearch ' . $version . ' - Php' . phpversion() . ' - MySql ' . (method_exists($modx->db, 'getVersion') ? $modx->db->getVersion() : mysql_get_server_info()); - if ($this->level > 0 && $level < 4) { // debug trace in a file - $isWriteable = is_writeable(AS_DBGDIR); - if ($isWriteable) { - $dbgFile = AS_DBGDIR . '/' . AS_DBGFILE; - $this->_dbgFd = fopen($dbgFile, 'w+'); - $this->dbgRecord($header); - fclose($this->_dbgFd); - $this->_dbgFd = fopen($dbgFile, 'a+'); - } - else { - $msgErr = "

      AjaxSearch error: to use the debug mode, " . AS_DBGDIR . " should be a writable directory."; - $msgErr .= " Change the permissions of this directory.


      "; - } - } - } - /* - * Set Debug log record - * - * @access public - */ - function dbgRecord() { - $args = func_get_args(); - if ($this->level > 0) { - // write trace in a file - $when = date('[j-M-y h:i:s] '); - $etime = $this->getElapsedTime(); - $memory = sprintf("%.2fMb",memory_get_usage()/(1024*1024))." > "; - $nba = count($args); - $result = $when . " " . $etime . " " . $memory; - if ($nba > 1) { - $result.= $args[1] . " : "; - } - if (is_array($args[0])) { - $result.= print_r($args[0], true) . "\n"; - } else $result.= $args[0] . "\n"; - fwrite($this->_dbgFd, $result); - return true; - } - return; - } - /* - * Returns the elapsed time between the current time and tstart - * - * @access public - * @param timestamp $start starting time - * @return string Returns the elapsed time - */ - function getElapsedTime($start=0) { - list($usec, $sec)= explode(' ', microtime()); - $tend= (float) $usec + (float) $sec; - if ($start) $eTime= ($tend - $start); - else $eTime= ($tend - $this->tstart); - $etime = sprintf("%.4fs",$eTime); - return $etime; - } - /* - * Change the current PCRE Backtrack limit - * - * @access public - * @param int $backtrackLimit PCRE backtrack limit - */ - function setBacktrackLimit($backtrackLimit) { - $this->_current_pcre_backtrack = ini_get('pcre.backtrack_limit'); - if (isset($dbg)) $this->dbgRecord($current_pcre_backtrack, "AjaxSearch - pcre.backtrack_limit"); - ini_set( 'pcre.backtrack_limit', $backtrackLimit); - } - /* - * Restore the initial PCRE Backtrack limit - * - * @access public - */ - function restoreBacktrackLimit() { - ini_set( 'pcre.backtrack_limit', $this->_current_pcre_backtrack ); - } -} diff --git a/assets/snippets/ajaxSearch/classes/asPhxParser.class.inc.php b/assets/snippets/ajaxSearch/classes/asPhxParser.class.inc.php deleted file mode 100644 index a3f587b65e..0000000000 --- a/assets/snippets/ajaxSearch/classes/asPhxParser.class.inc.php +++ /dev/null @@ -1,445 +0,0 @@ - AsPHxParser -* Merge of the chunkie and PHxParser classes -* cleanVars and unsetPHxVariable functions added -* -*/ - -class asPHxParser { - var $placeholders = array(); - - function __construct($template='',$maxpass=500) { - global $modx; - $this->name = "PHx"; - $this->version = "2.1.3"; - $this->template = $this->getTemplate($template); - $this->user["mgrid"] = !empty($_SESSION['mgrInternalKey']) ? intval($_SESSION['mgrInternalKey']) : ''; - $this->user["usrid"] = !empty($_SESSION['webInternalKey']) ? intval($_SESSION['webInternalKey']) : ''; - $this->user["id"] = ($this->user["usrid"] > 0 ) ? (-$this->user["usrid"]) : $this->user["mgrid"]; - $this->cache["cm"] = array(); - $this->cache["ui"] = array(); - $this->cache["mo"] = array(); - $this->safetags[0][0] = '~(?safetags[0][1] = '~(?<=[^\+\*\)\]]|^)\](?=[^\]]|$)~s'; - $this->safetags[1][0] = '&_PHX_INTERNAL_091_&'; - $this->safetags[1][1] = '&_PHX_INTERNAL_093_&'; - $this->safetags[2][0] = '['; - $this->safetags[2][1] = ']'; - $this->console = array(); - $this->curPass = 0; - $this->maxPasses = ($maxpass!='') ? $maxpass : 500; - $this->swapSnippetCache = array(); - $modx->setPlaceholder("phx", "&_PHX_INTERNAL_&"); - } - - // ====================================================================== parser part - - // Plugin event hook for MODX - function OnParseDocument() { - global $modx; - // Get document output from MODX - $template = $modx->documentOutput; - // To the parse cave .. let's go! *insert batman tune here* - $template = $this->Parse($template); - // Set processed document output in MODX - $modx->documentOutput = $template; - } - - // Parser: Preparation, cleaning and checkup - function Parse($template='') { - global $modx; - // If we already reached max passes don't get at it again. - if ($this->curPass == $this->maxPasses) return $template; - // Set template pre-process hash - $st = md5($template); - // Replace non-call characters in the template: [, ] - $template = preg_replace($this->safetags[0],$this->safetags[1],$template); - // To the parse mobile.. let's go! *insert batman tune here* - $template = $this->ParseValues($template); - // clean up unused placeholders that have modifiers attached (MODX can't clean them) - preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s', $template, $matches); - if ($matches[0]) $template = str_replace($matches[0], '', $template); - // Restore non-call characters in the template: [, ] - $template = str_replace($this->safetags[1],$this->safetags[2],$template); - // Set template post-process hash - $et = md5($template); - // If template has changed, parse it once more... - if ($st!=$et) $template = $this->Parse($template); - // Return the processed template - return $template; - } - - // Parser: Tag detection and replacements - function ParseValues($template='') { - global $modx; - - $this->curPass = $this->curPass + 1; - $st = md5($template); - - // MODX Chunks - $template = $modx->mergeChunkContent($template); - - // MODX Snippets - if ( preg_match_all('~\[(\[)([^\[]*?)(\])\]~s',$template, $matches)) { - $count = count($matches[0]); - $var_search = array(); - $var_replace = array(); - - // for each detected snippet - for($i=0; $i<$count; $i++) { - $snippet = $matches[2][$i]; // snippet call - - // Let MODX evaluate snippet - $replace = $modx->evalSnippets("[[".$snippet."]]"); - - // Replace values - $var_search[] = $matches[0][$i]; - $var_replace[] = $replace; - - } - $template = str_replace($var_search, $var_replace, $template); - } - - // PHx / MODX Tags - if ( preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s',$template, $matches)) { - - //$matches[0] // Complete string that's need to be replaced - //$matches[1] // Type - //$matches[2] // The placeholder(s) - //$matches[3] // The modifiers - //$matches[4] // Type (end character) - - $count = count($matches[0]); - $var_search = array(); - $var_replace = array(); - for($i=0; $i<$count; $i++) { - $replace = NULL; - $match = $matches[0][$i]; - $type = $matches[1][$i]; - $type_end = $matches[4][$i]; - $input = $matches[2][$i]; - $modifiers = $matches[3][$i]; - $var_search[] = $match; - switch($type) { - // Document / Template Variable eXtended - case "*": - $input = $modx->mergeDocumentContent("[*".$input."*]"); - $replace = $this->Filter($input,$modifiers); - break; - // MODX Setting eXtended - case "(": - $input = $modx->mergeSettingsContent("[(".$input.")]"); - $replace = $this->Filter($input,$modifiers); - break; - // MODX Placeholder eXtended - default: - // Check if placeholder is set - if ( !array_key_exists($input, $this->placeholders) && !array_key_exists($input, $modx->placeholders) ) { - // not set so try again later. - $replace = $match; - } - else { - // is set, get value and run filter - $input = $this->getPHxVariable($input); - $replace = $this->Filter($input,$modifiers); - } - break; - } - $var_replace[] = $replace; - } - $template = str_replace($var_search, $var_replace, $template); - } - $et = md5($template); // Post-process template hash - - // If this pass is not at maximum passes and the template hash is not the same, get at it again. - if (($this->curPass < $this->maxPasses) && ($st!=$et)) $template = $this->ParseValues($template); - - return $template; - } - - // Parser: modifier detection and eXtended processing if needed - function Filter($input, $modifiers) { - global $modx; - $output = $input; - if (preg_match_all('~:([^:=]+)(?:=`(.*?)`(?=:[^:=]+|$))?~s',$modifiers, $matches)) { - $modifier_cmd = $matches[1]; // modifier command - $modifier_value = $matches[2]; // modifier value - $count = count($modifier_cmd); - $condition = array(); - for($i=0; $i<$count; $i++) { - $output = trim($output); - switch ($modifier_cmd[$i]) { - ##### Conditional Modifiers - case "input": case "if": $output = $modifier_value[$i]; break; - case "equals": case "is": case "eq": $condition[] = intval(($output==$modifier_value[$i])); break; - case "notequals": case "isnot": case "isnt": case "ne":$condition[] = intval(($output!=$modifier_value[$i]));break; - case "isgreaterthan": case "isgt": case "eg": $condition[] = intval(($output>=$modifier_value[$i]));break; - case "islowerthan": case "islt": case "el": $condition[] = intval(($output<=$modifier_value[$i]));break; - case "greaterthan": case "gt": $condition[] = intval(($output>$modifier_value[$i]));break; - case "lowerthan": case "lt":$condition[] = intval(($output<$modifier_value[$i]));break; - case "isinrole": case "ir": case "memberof": case "mo": // Is Member Of (same as inrole but this one can be stringed as a conditional) - if ($output == "&_PHX_INTERNAL_&") $output = $this->user["id"]; - $grps = (strlen($modifier_value[$i]) > 0 ) ? array_filter(array_map('trim', explode(',', $modifier_value[$i]))) :array(); - $condition[] = intval($this->isMemberOfWebGroupByUserId($output,$grps)); - break; - case "or":$condition[] = "||";break; - case "and": $condition[] = "&&";break; - case "show": - $conditional = implode(' ',$condition); - $isvalid = intval(eval("return (". $conditional. ");")); - if (!$isvalid) { $output = NULL;} - case "then": - $conditional = implode(' ',$condition); - $isvalid = intval(eval("return (". $conditional. ");")); - if ($isvalid) { $output = $modifier_value[$i]; } - else { $output = NULL; } - break; - case "else": - $conditional = implode(' ',$condition); - $isvalid = intval(eval("return (". $conditional. ");")); - if (!$isvalid) { $output = $modifier_value[$i]; } - break; - case "select": - $raw = explode("&",$modifier_value[$i]); - $map = array(); - for($m=0; $m<(count($raw)); $m++) { - $mi = explode("=",$raw[$m]); - $map[$mi[0]] = $mi[1]; - } - $output = $map[$output]; - break; - ##### End of Conditional Modifiers - - ##### String Modifiers - case "lcase": $output = strtolower($output); break; - case "ucase": $output = strtoupper($output); break; - case "ucfirst": $output = ucfirst($output); break; - case "htmlent": $output = htmlentities($output,ENT_QUOTES,$modx->config['modx_charset']); break; - case "esc": - $output = preg_replace("/&(#[0-9]+|[a-z]+);/i", "&$1;", htmlspecialchars($output)); - $output = str_replace(array("[","]","`"),array("[","]","`"),$output); - break; - case "strip": $output = preg_replace("~([\n\r\t\s]+)~"," ",$output); break; - case "notags": $output = strip_tags($output); break; - case "length": case "len": $output = strlen($output); break; - case "reverse": $output = strrev($output); break; - case "wordwrap": // default: 70 - $wrapat = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 70; - $output = preg_replace_callback("@(\b\w+\b)@",function($m) use($wrapat) {return wordwrap($m[1],$wrapat,' ',1);},$output); - break; - case "limit": // default: 100 - $limit = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 100; - $output = substr($output,0,$limit); - break; - - ##### Special functions - // img modifiers added by coroico - case "imgwidth": - if (@file_exists($output)) { - list($width, $height, $type, $attr) = getimagesize($output); - $output = $width; - } - else $output = 0; - break; - case "imgheight": - if (@file_exists($output)) { - list($width, $height, $type, $attr) = getimagesize($output); - $output = $height; - } - else $output = 0; - break; - case "imgattr": - if (@file_exists($output)) { - list($width, $height, $type, $attr) = getimagesize($output); - $output = $attr; - } - else $output = ''; - break; - case "imgmaxwidth": - if (@file_exists($output)) { - list($width, $height, $type, $attr) = getimagesize($output); - $output = ($width < intval($modifier_value[$i])) ? $width : intval($modifier_value[$i]); - } - else $output = intval($modifier_value[$i]); - break; - case "imgmaxheight": - if (@file_exists($output)) { - list($width, $height, $type, $attr) = getimagesize($output); - $output = ($height < intval($modifier_value[$i])) ? $height : intval($modifier_value[$i]); - } - else $output = intval($modifier_value[$i]); - break; - case "math": - $filter = preg_replace("~([a-zA-Z\n\r\t\s])~","",$modifier_value[$i]); - $filter = str_replace("?",$output,$filter); - $output = eval("return ".$filter.";"); - break; - case "ifempty": if (empty($output)) $output = $modifier_value[$i]; break; - case "nl2br": $output = nl2br($output); break; - case "date": $output = strftime($modifier_value[$i],0+$output); break; - case "set": - $c = $i+1; - if ($count>$c&&$modifier_cmd[$c]=="value") $output = preg_replace("~([^a-zA-Z0-9])~","",$modifier_value[$i]); - break; - case "value": - if ($i>0&&$modifier_cmd[$i-1]=="set") { $modx->SetPlaceholder("phx.".$output,$modifier_value[$i]); } - $output = NULL; - break; - case "md5": $output = md5($output); break; - case "userinfo": - if ($output == "&_PHX_INTERNAL_&") $output = $this->user["id"]; - $output = $this->ModUser($output,$modifier_value[$i]); - break; - case "inrole": // deprecated - if ($output == "&_PHX_INTERNAL_&") $output = $this->user["id"]; - $grps = (strlen($modifier_value[$i]) > 0 ) ? array_filter(array_map('trim', explode(',', $modifier_value[$i]))) :array(); - $output = intval($this->isMemberOfWebGroupByUserId($output,$grps)); - break; - default: - if (!array_key_exists($modifier_cmd[$i], $this->cache["cm"])) { - $phx_snippet_name = 'phx:' . $modx->db->escape($modifier_cmd[$i]); - $result = $modx->db->select('snippet', $modx->getFullTableName("site_snippets"), "name='{$phx_snippet_name}'"); - if ($snippet = $modx->db->getValue($result)) { - $cm = $this->cache["cm"][$modifier_cmd[$i]] = $snippet; - } else if ($modx->db->getRecordCount($result) == 0){ // If snippet not found, look in the modifiers folder - $filename = MODX_BASE_PATH . 'assets/plugins/phx/modifiers/'.$modifier_cmd[$i].'.phx.php'; - if (@file_exists($filename)) { - $file_contents = @file_get_contents($filename); - $file_contents = str_replace('', '', $file_contents); - $file_contents = str_replace('cache["cm"][$modifier_cmd[$i]] = $file_contents; - } - } - } else { - $cm = $this->cache["cm"][$modifier_cmd[$i]]; - } - ob_start(); - $options = $modifier_value[$i]; - $custom = eval($cm); - $msg = ob_get_contents(); - $output = $msg.$custom; - ob_end_clean(); - break; - } - } - } - return $output; - } - - // Returns the specified field from the user record - // positive userid = manager, negative integer = webuser - function ModUser($userid,$field) { - global $modx; - if (!array_key_exists($userid, $this->cache["ui"])) { - if (intval($userid) < 0) { - $user = $modx->getWebUserInfo(-($userid)); - } else { - $user = $modx->getUserInfo($userid); - } - $this->cache["ui"][$userid] = $user; - } else { - $user = $this->cache["ui"][$userid]; - } - return $user[$field]; - } - - // Returns true if the user id is in one the specified webgroups - function isMemberOfWebGroupByUserId($userid=0,$groupNames=array()) { - global $modx; - - // if $groupNames is not an array return false - if(!is_array($groupNames)) return false; - - // if the user id is a negative number make it positive - if (intval($userid) < 0) { $userid = -($userid); } - - // Creates an array with all webgroups the user id is in - if (!array_key_exists($userid, $this->cache["mo"])) { - $tbl = $modx->getFullTableName("webgroup_names"); - $tbl2 = $modx->getFullTableName("web_groups"); - $rs = $modx->db->select('wgn.name', "$tbl AS wgn INNER JOIN $tbl2 AS wg ON wg.webgroup=wgn.id AND wg.webuser='{$userid}'"); - $this->cache["mo"][$userid] = $grpNames = $modx->db->getColumn("name",$rs); - } else { - $grpNames = $this->cache["mo"][$userid]; - } - // Check if a supplied group matches a webgroup from the array we just created - foreach($groupNames as $k=>$v) - if(in_array(trim($v),$grpNames)) return true; - - // If we get here the above logic did not find a match, so return false - return false; - } - - // Returns the value of a PHx/MODX placeholder. - function getPHxVariable($name) { - global $modx; - // Check if this variable is created by PHx - if (array_key_exists($name, $this->placeholders)) { - // Return the value from PHx - return $this->placeholders[$name]; - } else { - // Return the value from MODX - return $modx->getPlaceholder($name); - } - } - - // Sets a placeholder variable which can only be access by PHx - function setPHxVariable($name, $value) { - if ($name != "phx") $this->placeholders[$name] = $value; - } - - // unset all the placeholders - Added by coroico - function unsetPHxVariable() { - unset($this->placeholders); - } - - // ====================================================================== chunkie part - - function CreateVars($value = '', $key = '', $path = '') { - $keypath = !empty($path) ? $path . "." . $key : $key; - if (is_array($value)) { - foreach ($value as $subkey => $subval) { - $this->CreateVars($subval, $subkey, $keypath); - } - } else { - $this->setPHxVariable($keypath, $value); - } - } - function AddVar($name, $value) { - $this->CreateVars($value, $name); - } - - // Added by coroico - function CleanVars() { - $this->unsetPHxVariable(); - } - - function Render() { - $template = $this->Parse($this->template); - return $template; - } - - function getTemplate($tpl) { - global $modx; - $template = ""; - if ($modx->getChunk($tpl) != "") { - $template = $modx->getChunk($tpl); - } else if (substr($tpl, 0, 6) == "@FILE:") { - $template = file_get_contents($modx->config['base_path'] . substr($tpl, 6)); - } else if (substr($tpl, 0, 6) == "@CODE:") { - $template = substr($tpl, 6); - } else { - $template = FALSE; - } - return $template; - } -} diff --git a/assets/snippets/ajaxSearch/configs/default.config.php b/assets/snippets/ajaxSearch/configs/default.config.php deleted file mode 100644 index 1a280a0fde..0000000000 --- a/assets/snippets/ajaxSearch/configs/default.config.php +++ /dev/null @@ -1,81 +0,0 @@ -config['manager_language']; -$dcfg['asId'] = ''; -$dcfg['ajaxSearch'] = 1; -$dcfg['advSearch'] = 'oneword'; -$dcfg['whereSearch'] = 'content|tv'; -$dcfg['sites'] = ''; -$dcfg['subSearch'] = ''; -$dcfg['category'] = ''; -$dcfg['display'] = 'unmixed'; -$dcfg['tags'] = ''; -$dcfg['init'] = 'none'; -$dcfg['withTvs'] = ''; -$dcfg['tvPhx'] = ''; -$dcfg['order'] = 'publishedon,pagetitle'; -$dcfg['rank'] = ''; -$dcfg['maxWords'] = 5; -$dcfg['minChars'] = 3; -$dcfg['showInputForm'] = 1; -$dcfg['showIntro'] = 1; -$dcfg['resultsPage'] = 0; -$dcfg['grabMax'] = 6; -$dcfg['extract'] = '1:content,description,introtext,tv_value'; -$dcfg['extractLength'] = 200; -$dcfg['extractEllips'] = '...'; -$dcfg['extractSeparator'] = '
      '; -$dcfg['formatDate'] = str_replace('%','',$modx->toDateFormat(null,'formatOnly')) . ' : H:i:s'; -$dcfg['highlightResult'] = 1; -$dcfg['pagingType'] = 1; -$dcfg['showPagingAlways'] = 0; -$dcfg['pageLinkSeparator'] = ' | '; -$dcfg['landingPage'] = false; -$dcfg['showResults'] = true; -$dcfg['parents'] = ''; -$dcfg['documents'] = ''; -$dcfg['depth'] = 10; -$dcfg['hideMenu'] = 2; -$dcfg['hideLink'] = 0; -$dcfg['filter'] = ''; -$dcfg['output'] = 0; -$dcfg['tplInput'] = '@FILE:' . AS_SPATH . 'templates/input.tpl.html'; -$dcfg['tplResults'] = '@FILE:' . AS_SPATH . 'templates/results.tpl.html'; -$dcfg['tplGrpResult'] = '@FILE:' . AS_SPATH . 'templates/grpResult.tpl.html'; -$dcfg['tplResult'] = '@FILE:' . AS_SPATH . 'templates/result.tpl.html'; -$dcfg['tplPaging0'] = '@FILE:' . AS_SPATH . 'templates/paging0.tpl.html'; -$dcfg['tplPaging1'] = '@FILE:' . AS_SPATH . 'templates/paging1.tpl.html'; -$dcfg['tplComment'] = '@FILE:' . AS_SPATH . 'templates/comment.tpl.html'; -$dcfg['stripInput'] = 'defaultStripInput'; -$dcfg['stripOutput'] = 'defaultStripOutput'; -$dcfg['searchWordList'] = ''; -$dcfg['breadcrumbs'] = ''; -$dcfg['clearDefault'] = 0; -$dcfg['jsClearDefault'] = MODX_BASE_URL . AS_SPATH . 'js/clearDefault/clearDefault.js'; -$dcfg['mbstring'] = 1; -$dcfg['asLog'] = '0:0:200'; - -$dcfg['liveSearch'] = 0; -$dcfg['ajaxMax'] = 5; -$dcfg['showMoreResults'] = 0; -$dcfg['moreResultsPage'] = 0; -$dcfg['opacity'] = 1.; -$dcfg['tplAjaxResults'] = '@FILE:' . AS_SPATH . 'templates/ajaxResults.tpl.html'; -$dcfg['tplAjaxGrpResult'] = '@FILE:' . AS_SPATH . 'templates/ajaxGrpResult.tpl.html'; -$dcfg['tplAjaxResult'] = '@FILE:' . AS_SPATH . 'templates/ajaxResult.tpl.html'; -$dcfg['tplPaging2'] = '@FILE:' . AS_SPATH . 'templates/paging2.tpl.html'; -$dcfg['jscript'] = 'mootools'; -$dcfg['addJscript'] = 1; -$dcfg['jsMooTools'] = MODX_MANAGER_URL.'media/script/mootools/mootools.js'; -$dcfg['jsMooTools2'] = MODX_BASE_URL . AS_SPATH . 'js/mootools2/mootools-1.2.4.js'; -$dcfg['jsJquery'] = 'assets/js/jquery.min.js'; - -// For a global parameter initialisation use the following syntax $__param = 'value'; -// To overwrite parameter snippet call use $param = 'value'; diff --git a/assets/snippets/ajaxSearch/documentation/AjaxSearch193_v1.pdf b/assets/snippets/ajaxSearch/documentation/AjaxSearch193_v1.pdf deleted file mode 100644 index 57d00a92417403c3978b8bfda46d4eefdfaeeecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122853 zcmaf)Q*15_u&!&{w(YLkw%xAct8I7Hwr$(CZQHhe{(Z8Ob9s_CnaP{X)nq1_$bi+}h9?APO+H zGXe1P!#FuR0t{_n+_SEIE*r@u;timH2ldh1pRg>%LC+9S&ItPXE-EfOvFp04m^rN_MT4ps+zj}emKmWJDHh?!&uCyx~-DZ?xrU{pKe~5U)c=* zz6ktWD{wAf+nx3PdOV(HIy-+UJPQ8)v;K%JtTNjDr0+!MgzgEnL?xU`)Jqr#5S$oTWO=#Cj)=Lv zMi25;(|%M;xY-d7Fdx%|cG@{w;nSWDY_}q?)AMe4zuMTkJXM5Gce(&BJ0-TTJA2P_{hoUfUo^onFFJ1@D%UqUINWaWZl>!?G`6=j{Q9qVRi-OafBU9W zfE2y3!R4f2ZZ}q4K+5N0An;b8WM# zk86J~PYlj3X*AH~VtX2bRAW{=o%_{l-o4N74O;pa)J6VwAfz#Djfm!5?n$EkwFJ>l z4gH@HN;Ns&*c`2?WC2kw6 z=0o`_60cnkCURca zC6MHXR-x34jLhe3wGvSV7Z(WgV@|LRsvX96l`ntW-UkWVCif89Jx2B@2>!;d505oT z_7%*7Fas5^8S{!X^M@o^n_N%^kt^RTv; zjKB116PR37am_*&-;ehbT3tfx`sj3g-q|ax;p;eOPLXZ;k|c+s=KttWNTV6U3QV<3 z#fDsq38Bj}!X!-MkK)U{)NgEtkjY{>-JG18e1(Mjsgf&+EBD% zGXTA#1!hpl@}A?uyWkY|sLPh%Q>GR5E&qFx5;;prAt9@kd;v9to|Tv&5KtEoC?4e} zGcw99Ny!@3dDj|5aXMC}2zxDC0LB~m9F>)%n4{SKF7gjUEUJC(D%{T>^3a20c<~a+ z$he9&tMu;|$ zq}1MMLO)SJ76#=)pbWWDQ4&Wk==pn~Lx_a!T90Z#h6FT^w6FW10xyu5hOHo82@a2y zc*k?aD=v=f#3vx;lhT!7Q57Za&zDU|dizw)J6b9`WdO)BWtaOZ`8Q;|q@ z6b15vluo1|*<_e+@AALEyMR{;yzv*-j%WeO5(3RGau&WzaSTkabXf)#ccP@{B{)G?kL=NPvs`PBH8p4s2$?24CCe@teaZIjv!zdV3pU&+O18%eqcRAzFmX zRO;u7nYDBRxTaN%2-z*I5jaKk`0@y;jp_|PC}?2YDKFtXqwo}-m>g!~hsFHz~Z)ai*n;Yur@|wKZxF}!!vf@Av#}39OXD4x_JV^vmox{FE zj+psZigw;uZ_)C@Zit~vO_5Q*8l=;gKw9aCc)G6xsh}iWK@)2ZuBnfLVGsX%I0IS= z3HQE6pA5SHqnBFHwm!cmaDZB<9TRXLV76dzst<4SSrrfW2@K!OCBu4!YaRX1RGXz= zf`u_SqqUHlWg{}w8W54opea$c(1<5)V%BjL(B~?vuEj1H95EOQbAvaS$V*Hxml!PYwXVw+m~+S7a-}Pk zHIq|5&h{LQ=x_&1TdHo!p>p}N?zt@1Ov2+l!&X*a^HyH4XH)BXV*=X;T@X0xyFSk8 zdWn~bKNCwjl_o1L&uWSQ^F4S@SXNqta?*oWol*ON8nh*+7qwJ1!~ge=rBiB5~F+Ud%5%?MzXwp*@|RT58TEPlK`x^k8j z@A7_F@3VPe%_u3w#zjxij#g>bg1M6A007m|C&LbIrgrl!RB{XFL%v6KY&} zB`;Ze=T||wZFVfE&x|n@N~y^SX(A{eozP*S=(Ub-2DZWNtFd(WrTPdLWoxeYN|@c; z96v3+s;^|J91UnBFG;#7!LdhxNkn$7tR2?>)*{^!u42<0H-5*NDIo7mO3Gh+F-p*5 zc9@4Fq(^P{j-0&@e3M3L(IBLZW493oyDgWE;br2mG7qLDEe zB?`V7SwKL{QFA|c6A%)+o42pdc6FM34Ob#3H^W@gyihYb1}^(3RoEEu$4}}YlHbBb zX$BIyT147D!2!8i)MjFh+qAun4jz!sQi-V&X+=9ALusYigW6iXllOiZaWZ(X4@{s? z7FlJIZ9{ICfpUTOy2i~4;OI^iI$=@}5&;!%cU_*17B$I>=s59mym~34V1R5;6vnTc z%%@CwmEh9HwQ-lgxJ$Nn|L~GZN5v)RU{f6vUB8~-P>&x<&!ae{cYW}*KI){faI!pF z+}NHG_nr1=Ty1>lB`twJaDr-7;!g7BQ9T1WzfBp;>c%G~`#R$}@Y^0jN@S0`1P+W!*PyN!-aDIWi>JAV&!~b~w&Y@EA6Qftm zfnTrktvJ7NB4{l!te=$y(noYo@j{i%N*ES^(n?YXgE_($DX?$5&kQ|3=5egrH~hfb zid|Ynd5^bMKlt-N0uwDy4!9D!fe`KxWpfU5ft`YU$vs-0y6ub8oP~h5JBoN9WrV?z z!gaMp-v4lJ^6fg5v$~aoRl}mIoNjM^k8+`IYupSLOuLYNJT4ukO4ZxGa9;K&@MJUv zS(>^*gs$229!!_W7kJB`{$!3lmb-Q{-n+mM_}BGk2mbKniUeU%H0Rfz^J8Ul%)1Sn ztU^4K`52(kPj!(=h(=_$7B!=~)+MYUSjdi5{oSJA#0J`FRyu)=-eiwS~&Hj3Gu$h_*yY zu89fs3N5y$W2H5Uiq!EGq|WftMi#6*Ti-;F>q*L7c68E+n&J zgPI7zbNPI&Rrhcoy{=mU!*rj=pdeojg76c7$bW_`inr;Mvyj|W%Lx_VgU$}qu$yW9 zWU9}Uw%Q?gy?$V^wE|g5|AH5>!k96=@E(UE{C;{-LEHBx#&!;uhR-%AUXv78f$4B) z9W~Aj8)*UAvALxjh}v>xWx>et^r0L(oY@3v`Y9`2UI7xZbA6pD9Y5EG+wgpH%Tua# zbF3OzWW(6jAuj=);%kO$^A}v@cHZAM2mqL5`^%&0v{g-IaOI2H)g#i?P#GZU<|W0D}mW`eP^Z!HUDiQt(CR;f|XI^ z_tTn5lzN&R+lSreD1!LvxarB~0eionDG50S;Y3J)?g0Y|ZeOTUXX!B1hMDe1SJ9eF zzm}C2rf@f6(>Rpu5CR278jh$_#1L2dN%3b>YK=9ZD$3H?S{0W%Qi35q6*U-@2{rAc zVB9NH$+V%LtE`4{Or*h#V{GU87!)8N58@y%krR+qCd5yB4V^4G$n|D`hg(fgumyeQ z=Xfw-d)AwDGL&~1;2tQr487(DUL_%cKMW?ICu%zwgBRla;EEgNMFj`Ra1$zVSuLwK ziYmVaAH7`t$6=q_+=pAmAdUyMXxF{Wiq!^9V9hn&9%Ug`S6t-?8QEqv-j`6#jCrOF z`Eyncz;WR1kgbGH?XLbK-Tc(KYI2q$!tUm@P`o}HHP$% zK~07@EqI;Dp>+p+DF{X7g-(xTTxhD_4ySz=(NaGdV=q54>Z|4Re= zIN#XZ5aP21RC3Vai+F$|=1=DX1qiPv%3&vD$0C_JdkbsyhdL<0dr9{`IR?E7o2lO{ z*w12EV;|iHEvi!>vC3MZSobXqRLY4`$QGah@~1325{-b_^a1i|8qLx_w;_sPLrvdg8p=JNnsV2w8j!kdYM~YX$aj=Z_-q} zA>Ygj6|-4Bkj3YM{pDCNmG)3)pcwg7_#V?Fo0l0VJ?z&u=2wYO~Q1mBKbdUOPE#W>%g@#rmJd`FmtEE&CnK}c|q z((c+38MI=vwcz~mnP&pgCd)^%otAJ6`HcEVtVSs`t8(BNbb0>;(*b|wp!c_e&L=Qi z3CH(uAf}Sj`5T)smohCW#{z(7#Mm!e=r_4&U;+q@8NWZ{Ax*KUqMZmGy(>(uSp{r0 zEw#Cbe+zH&b1+&TQv@-YD4~9G!lwvW!RNz4n&o^1og;aEc>iY*e7mc_Hc6nqoVY61O~Ga5@?N^`_p6_rc}KZ*y`V z`;@g5E3HdX?zE1m7+jTB5byFBg2}kHlW^sr8bG{V3ppC z8dvCH=&F~};FAi&LWB+83`uoqf>q`e>b_X;fm{nwRUlh zL$9HVhjaOTK-vElxgzK4*;J30o||#$k{!{`&;FX%UK5;MG|_KOB2**spknTvWXHA8 z9Smi*+&hm+Yl*K6KqeGa5lh7W41ZKCRHjVHOXG`VCq*TAqhjE7=1Z+3x=eaqia@%& zA(>)lNGkQ19764HYd3)f(Fhumiz5=R?gf$3fMQ0%{OuGm$n~>9i_hrR*d*(E9kUg7 z6v?ra!~e^#Z1>-~DCvhwZ;>x{CQf(V%sn}GRw-DYYqoAn$~>5)kii zvmtcmzv&UCEt*TNTosPwla|O8R*RTlvC+!}NucyT2A=K$nkdG~&}G{oEqC2$YKb`= zTNQO_H*dcucVx(bkACgOCT(k1ZNh*n`VnkD8SHs)r&|?%dW7!4j9?#Qj1P$HYSB4R zfXAkL)IQQyTB)%2$KI7*jb2zo^7;TigRtnB2z2QP2HQ5E)D)zBKrH^32SviBljmP? zl>z`aY{ZB`v&AwL+0y&mgyF%5{7M6z?3q}+*)mw-p?hveix4IUh>Z%ZoSKpw>PiE4 z4!NyjtzAG0-p13?#KFahMnob)D9{Q5(J{BQ2sZf}-lY<&j*Qp~&BDccTXV=mE5O{9 zl^*fHXalo`K)u+FRJYBijw2|VCQb;7<{m7TzqCsaCGjIc>fm!O>p=zEy^4{gFpt$d z>&w2&ff;d6z-|_@uwFbyz=X7|lqLZOmgYzN3AOQ@%05-?>8({6vN8k%ml|`f0tx4p z#ChekwEZ-n=R9@RK(rP?^G=o@dYnp%d#jMETVd(Wh@S<^Hhb#{;r#pzyjz~xmUBe% z*UX`7l*m)1752I|3#76Zwk1(6RoS4o8w`@EELQ&-bi3+(*g!34*Vy#sTx(urBLYk5 z38CAmX9B-_RZKJr%2p#R`_tDEoFu`-{3#EZGs~?XsVG^8g6v?^<<>XmYkq2@H7blA z9Rs5_|5;z~yIG($T#vxg4Tjw@}4w5zGxFTow)JSxlfG>X~%riFn%bU;~tdO+#otgsGu}_7l3xve3SWZ z(zotBvvKhB@iD{jc;S5tBfgasqB^BzBMv>v`n+C_;4$NgC@O$ADrJCY4Xk*>y<>&T zjvMO8rw8QBpk_JwY{B_MctRE1HSz9`jPbY_xxNPX^n`Mq*oa;5Bu#)(v}A2`as>p) z%iBadhN;eDE#&AeLL870F}q^g@e6h#HvQ^20lcdcA(*Yd;KQ;Jo2c5q>d8(gGyQtG z<$vFGjb0@gbzqa94Ep?K4rM>Sx4?0Ew8vnk>4lxRT8Uy@iaCidLADu#1VIj&=e#W| z*X#B&4Y{UC+!oc4z3Ri0R`|Aqe&>Lg?QK%ZN9PbM@4n!UpT{d>TYD=QsV^w@AhfAX zT2;=;vJlow9^Eoy$v4^7_0FVv1gXEM6i}p$%b03JHDAo^EE|LUgi7x&TYn8c^=^Gg zzR|8Kx1JW-urJ2ov{R&@RwnP?Sre%2BUTfnE9cGJsowVI%rwtmtp?eSNUWCMG7e^) zt>SU&5{Tcp>vDI3K7K*`A{e@Im(CZ_YH6HWjBZ(WHzJNFrla0MRbeE0wvNXIW49Yf z5q!7waMb3+lJw2*%0AZX20%z4!+L0cq|apd_R&rftU%(K12Ex)t@&!8eE7#oa7}K} zM!8u$A#fcdj2DpWbtjq6|M0o~yh$0bESO%;s>F=H9+RynU@pWLLv_bBwOHCQ7Ri)k zm9KBZhBFikHZ^z~JgLh!V;F8^pb~o*gT2M=iGwve27pfkdxFKOX3wLiI$0^9`wR~# zg8wdeO;`xkP^V(+D|9OK0Y+Z6xqFA+J*NZd?6PY9lb?VML>batto|M9za`;K0G{!do7Y+i@XKL1zWmrflm9`*lIttPLb^InPmUGG9+iRY!K zW&^7BCFothvEd!6MDtMm>^56eAq?s$1ElFXqJ8L4O{o2N)9g#P`|eb&EpP$B%N(ub z!GtCzq`v}KEn*2J1}>NY_ac*I!N|HP%oNc5Q-#H&lWOJt49A{5R z2$~yezy^wBpeJlnMz{l94PN2m^=KdNhV?0d+0q~OPT{6F>diNCFqs0G>QXzsW6f9= zqntb2+b3UIWo|uUy3jS_vHMg-n2bp+oqijeN;Tchp*<8}qacr-xLZ!BIf*mZEs<`Y z80)>Ra`wDQ0qhnSS(sCNxv3BWrBlLf+N%TBWF2%hrO>aN2l$$=g>?zpHBk@t$_R!C z``i1Yo>L;FRznyaQ;ErRc-mweB|J{Tp%!UB|2+9hg|}nzhr_!~mR$I=$fugIVUqB9W>&Rg zw>gn?4h-UnO;Kf=!+-87jd9$zE1?a4H1g85XPh5EDE2(ZrZ{gT?Df4pF)p>&VXhAE`yEKLJ?S|$z z98QrL7&d9{7ab90w$XdEokVRQ7sTVGPwOfEayeAFe{zBRr6y45Ttml6D2xo zWCa9E3)Lkm*KnpTi}B(sXLnE`Z^yKB?XynOMVWkpq$}&qbphg5S)zsIDi9vcgM2jm2r{=o+PQXvCwCfcf_ ztdW1~AZTk!Ldy%uhJ_{cWA`S=+ZQhtG_naUQUt0UL>D;V=Xs~-wPW0GT#>3D29SkZT>iDGo45_&&OD;t8YiEOlP2ftr35{ zao~V+y2M%3wtgq2cqS$NpjKoxBU+5RF`x&B_VJV?_jvQ?CGd|P3u#B(?ca^Hq^o

      C*EQ-rmwX`ZEJ5qh!QyK7ih@buM>jk{P!~Yx9C8`lMfrNZ z4yXCbg{Vuqvg$#w_a^3Huedd(IoI~MusU(-PxHuzZfk6*wAT-0)8M0W_GGBQ*c>S8 zrh(e`&Ee}w)H|+(>PUyda$C=^OC3$Kzz1Qw*8f{2=<7_1L04+%h&kaYbOva>&R1Wm z8i+dmtq zha?hZ3MG-C+pM_+9FAGyTn*cEg4{pQ6=H()Ed$;q8{7$S+U!^ELDFsFSxVDTA`$BMp`X5ukLww6P)-Cuq)cCjka$G7fRkT z4@@@SQfCPs8A;l<-%|^tH`4u|d7>O|a}c5LpG{02?+1|s`_<3R6i+0_26a0D(bye% zH~xX@>pM>C@{<6G*^c~c=bu=);DR&j8C5-3nDROx9M4B>#>&7BYj|CIpRZNL6Is8` z#h8Cr)c-2tfw&JtvYn!g(OR|I1zp}TM27m2au_Ikaz(m8H87$2^BsIwuezj|t#W9( zVWr&qX$0>6+O0gA4DDKW>DEx>>GDjTub-B6R5+c1D$b_T9@-J&byTRgWq*i6q}t6G zw3kn8UvIqs5Iy}HR3tj_GhBiSi*myAF!M+(jn{D=b5hh&Y66cl{g+Vm-zXJ<<^NsL zaiRp7(LB6Oq7w@Kq|i0d?A(jO|E7<#jZjq;^k@5>AiKQFC)G+7R2&K9XE(o-H@B?( zJ~HxYF51~pQ1*-*CvBN$bs@hxh1Aw=Qd56PI^*13&Ok_{L2lj;KGpOX0VM3D!%j6`SBDIi%|3h>;Y$oaAqJ12929w7^GwW7Mimx%hwfWAPHKZ>9@^nwL_NdmeW}r3 zmtsk+H0HYp%ORc;wWk)ygQ_WyB54?6nUH6lWJp$GI4Ml0e{#}#6IL_Ti2(nHLWTJ#oGB9+UV9Fpz{9nLIY^>Ftt_O z<@#{;XC~g>u9y0T{2Nm;F@KTM#^!J`Frp`PfR^PuT+Rr?buN9Vx1YEmiXa~^=jxV);iryZeg?~_ckXBo*l z(NkMx9Ksy;Uvg&ZZ)SoO?X>;q(j?B><1Am-MZ60`JKv@GZ1K_hR=G+N8Md{N&rkkq zHUb>*feC{9v72?PpD=M1os3z|KAA8Kgef(@bc9#FDVpik;M1XjY7APqI;os=Ij|>y z?B<6fa3u%wrJc~SGXp)~S74>7NA>}xwHT^^h<6ln$a@-OZQK=uB@rpCYOPReY}SzaEI z-WxG~z*d~gN%IZ4zDlzG3}y2zAZBe0$3wzO^)GVFa$HiuHi_D)S#dJQws`|4QMA$oiul`U~h)2D<`trOO`yfZwag)1X7gRxk z550L4Mea+k7@@-Y!x5suMdb=Ev9%`bV$!Fn5drJL@F3$&qGj{**I4u_)2Nx3@kH)V z8x3A`>tVT;gm~~}Btq{pI=TA73?PBwrei^V+wo0d$qj$)u+e_kFcXMXZU1l2yyHCI zQ4dm6hA1cJq)v^qZ}D0|xs~F!xq|;EFf7$2uVL$rI#V`Q6eWGn_#ff!iLzOa6(;~8 z62=IH?9Fh8CKgZUYx+(x6;cH#Gqoo&go|;?<{_kuOrr_XcaaW zBnFA3tNjU~I#K#~R98u#UQLA8@Lh~1AB^%GzcO}xFIWl66mk3xF=S7b(@^UEcucZv zy~l+#YdHi_@5ORHV)KwNcR>93#uSIx9R$0d|a7rZW37Jt6MkiVBN@8e#s z-4CJl+FL!q*5rR-(*Lsm0Z{)3JN=)?%=Cwu3+8`KX0HEr{~w;p!t|f@|L0TnE*r_D z)M5d1TBe*UhJ=0FF2^wp_PA|w$Bi`0b8$dIOp1S(5IcQ^i35;Gk0Sjtesd@LN&Ip3>|H|7U^-|+9B z8oiz0Ka*y=pJFl^xc@<@tFsx#Q2iA(z16nW7BS+x9rkcN^R0}2uU9wGgOj`bpZk+$ z0;Og;m;%VZ8xP5fKN0*i$H!*;#kX6T#-*}WH$C=kr7q1i76aRffda1i&_6ek_Z2p{ z#$Vfncy#n#%lkKohiW3R6)k=%92+})(U>~RLF&8R9&M$y*tcKXsU@Ge-={)^xOQFL zUbOr;O)cu%-9Bv^5;CzFowL5NwY{VakxD;Q`YT{Smv6N8mb0IP|52@sgc-&XkxdZ2 zB!01W%@3ImKb?y}j?j~06*chk{P#Qk>|lDIwTyl&H+RQaN7jDE_01EDDmJ)o>V$fW zS_+t@>wK7vUWZ7Og-c3qJG(oO8Qa&Bez^5_I~Gn)8^f2?CzpdNeuTfz)rQ1Bk_z9i ztS&Of+dmuyRo6J1J0}9Z_l0IFsKPv_F*|Opy}>*DE8Ef-;V!mFe` zd^nqJ@pm0LRW|ge7A#3nQt4fE7k)cvtsrZMGEkLI*JHR#D;}o&4v;jj3V;)hy z;oO6ZWvN=d-N0{?`>weQENFv#e?l9v9{YH{Qa;si?6kTOvW`LLR#A#h5!J*7g_OYD z<9;k#6bLZW|A@_6_*rXXhW6x+WK#bu@(_-~33;fzy+8X8HVgfGxqinq$joVMDJ|Y7 zQ3%R^z40%ZZ*F=-!spKrn#CP+GeBZMt~@76q@c0Evq^n}@$=}qz6ufvS~3##y{itB z%fAjtI~e`eP~D7fTUjI8!P3}Zz9CZ)btlm;7pfQ2WV=61-ThIm%S>;il2c)&k)}hW zTG826yFZ0gQel$Y)T+m6lK?3ig~BMXpf#r;%x3tZn^ATtNo*C!;Z)K!;l*Gz(t54_ zgLoMoUuXstv-V0EnlcoxAYm{uDs<{j;u~Ap*iA+Wyc8#|=KGIP=bi^N1e4aCKXxNb z;{@_J?Y0o|Xvm|AQ!~LjuBu{Du;GS8t@_fgRQZ{9>Trjw;jV|dd&VTD8ZqeR;3x9^ zXCsl$M<9GnOgq(vlrOHzS@cB7fSdqVaxl>-di3NamJ%7bTk&|FP5CCS}|1DWTB{m$v8AH8~sMQ0p{r%2g;;{)>vTY{%3=qJ*dNEFhKt9P;w z8(vHScN{ZUuzxt$mr{7bLhgwIYZMX)`KO_j02NL>z^V8V#&Rk#Sab^Q-WNMSF4)I;d;g^Rk31MWd^OnF9H?xl% z0)1mhnc2SDF5XCxsg8#hqNi9&Uyf05Dv%t?fEHI0+1S*dL8;VoMB|v>==uvU6Tg*p zRNSs^d8EZat3x!0rU({AR}!Dt8CpUHj^$~>!f7e{9vd7T9|V=rn<(Bf07`J+pHRF_ z8<9bE=S{Dp@J|?AU;BHigA`MLepRvn;Uz$Swm66BDQ<&=0e-8vw z7@=pmljhySgyT%oTuubSg)rzen3kee)K`A9D9{e7%}?u-TDbhn3#qH5F9aZeWx@ z30%3})t*}6vVu-r!<0d*?M4l5&de!b%sr049L5=pw{_h8LRz;;J%JWXVnR?k1yi*L zU$gN2so$xlu~{r2T4JD~zyCaOPUZ+F$2Tp8v+Nj!>Y77J@9`s2waqxgK)yXCjC7zy zehcWY$sFqx_V#NEu)g7RstC@f3pm}$r`r`ZY0vQG{jiiag!BKUx(jG3tcI}@6Os#B zv6yL>m)YreOZN@p2E}BAx<>{z7;MZ!FpTNHlELapTSP%D?{CC-pwM{MWFEuv+q*9~%eGHQu#j{n!c=dO zAkCm?#rua{YQ4oI9Fr>?B171Ctc-wT>a| zjQlYV3J^*t$G3o}dlf;t8}isdybmh%I-2nk$Y3{MKY*qh;k)0O{ljj<{U9b6Hc&Mo zjKJQF1hBY?^}{xySt2zcTrP>`K?H0zz#_nfO$eiDZO3y4RytTv3jE73Yk-@Up9P8? zbuL1kxm<9y88;t#JcKxokxnfrepK2xI|jL@&bW{t28Ms4DQ0One|$kx3L9+)VTey+ zu!R{KV+y4-27(qF8P6(RRD>9Je^^Mz?J0Wlr9J=nLplQZ`cUgY99cF>-F@d!LWa2j zWs?M~ayID|d0v3TGzdNuSvjmH*1ugv0X=cRQ4;4;aIUPCNpz)lIMuIyd;c4xOaTsY zKlXFMT2KMG!~qh+g}}|pXS74iFsnU1Rp#jH5W+<@E zk}q-&{Q#)lk{FFHX3W>c9-;xFs2yR8x(TLpVpX;RnCic)SU_8N>=pV?2HAQBe<&Ln zT2z`fmofvx&52u6V*0(N|2y2E8<8fhII}p4^|-Ny5y`R_G;a7 z`ch_o9vK8bx=UKWqs6lBS#?eLk$X?f_#mrYy`1#yz_VpHY;%Y{+LQkXutR=L)C&FW z`~lo*Po;vT2+Ue(7>8WCaft;*$^h^$o`B}9L6@%vK=B6AoQ|UUd2=ZzLh?aFFXVK! zqg^vHU7ph8r`k%ovdjG?um*%sg=4q`m4L=5bEa;`z4PijrB+WvJ7_EC@9fQx@i&i;{{EJakGebh&t zYZJES+%0;HO<>S_h!t=UD&0s8LdoP$=Og+!&<;q z$S27ZB*qpwbF~4M1L$CrB55{%W2SJfd5m8RMsC#d#0j2EeeXiDhrjkj;*DgZ73cl; z5^iJ;R1U&x=T(Kfa5(kfTHNnZg{OC8-L&iy9K@Ua*I`J3`cOXMjer<2*KdzqeGkX} z>K}66r@LvgJfnoLX{a1X*iB1zPuS|at?Qql@}Zh9KZ%0jCG13_@aBz?sTXsWqSCSc zqE2#OUMQvNV7RjwuA-wUk&0hR zzPPm{uQ**SCjHDhI?Hix5cg74Z(m)lF0mb;e`jp!I>@z-qiZ}M(4#Ia2m(c{6e^`m zF_)aEwH4mjtLtoge2gl6*9D-j46j z9f2b*oClOmW1kkLd*qI@9o#YoSy;g`NpM+2@`%xx!$6Bcj;OekV7CIm*`{mfQcRv= z4LErYr%Hk=knvw%)N;pVi7Vexo;|#XU5i)ql&eE08mokMB|OwKWQ$jI+#v23JX=sY zGDB%xa&nP$;0x?Ey5EsxDUlvb$nXDo;4`B6ghczH8NzN zp?DzHy5;&eF7oGwG$K>8X362|X2&!hH;u9e<05{G@rVE8sYQZa9{u~JIOe}>ch+o( z65L+BIZjnO_@?V2ka`QDwAqQzOdW{FYVlY~LDdr>Nyo=VEf^oF{9nE}12>L%2T4l;GFI3P&w!Ivs$?Dk3cF~#*Q{+EXf#!rpDc`PBkAx&ot`+a z=RqnCGX`OVo~6PFua@&T@a452mF%%0@)e7ioA6x8WC;_^8Op0y$bE=I^jqT;1uU=Z zmC*g~6T>uWIM?9ThiGYGLp*K!Se-sr2%*~!wpZs7^Bk~RJ8v!ybZyg`G73ES>x;Zx zWD*mbi~{DZv@VFDxjs&I2G9yY-htYovH5J``SwC-><@9jj{NSjQAOfK(>hjxgK0h2 zgIG6k`g{!->yb4EPaf8YN8|+t*+}FYE<6OqOm<*U;RiG3)t&^7>-Q2a zoL$x2>39{zY)1`{btVu=f)S*`?%$$TQjvHwqu3BkTT;ClilKK~P5@0;+mn**aHf!>dVpGv$EMb`4n$47vm+ z&E+PjkQvP!K!sw!AQBW)X%yJyGWw}R`D%U3v4`tX`HaGnD{R%+xrOc|{AZPadRNM*~c^FQ1R-NT*nFZ3{fdcUiMY4flu0*qveD_I8tb*Cg1lx*c^Lp6% z+iFU>AV8oKx&+~lOvV3Uyzp;{jt~K>Q-}op`4Sp>c!Ou&n`HM09`mV}6Fhhh=YzPTTh81loh8)@SAi)!1lv{d_C z&sZItE49y_7szF>LY6R^W>*Vb2iGaF9j!~n-X$@37c8rU&IYz;BQEwcz=X3j-1oSH^Iw{O zgc5Xzvl$&rS2_nDDHr?5HK^$Eb|Z{@S;ogk4Om0v$<`DPWBSe2`xg!Ee&%@@47P$mW zg1uVMppf$U zdl)?bD3z9Ua1~Mu=n!#Kt)K;Q!zQ@*O)&v_=2^-##W(ius97zQ-a{pySCtH3A+=Z& zOY2&l?YHa{m4m*jY3#zSyLY8P>kld+@n*1A;G<8ufR~FXMmpK8abpP6oR+c=Lj$GU z@fYiDCxcR4MLAyl{psnyKDpwtI-4}B$P_@mN&pXH%lOny7&-|SeP5VVYhR-3>O zJ^K}@X$=AKvj9h(m_WB6rabDVIb&!7x%5G?G&gj=!3oE4UlprWkb3D!yhTr4a{63Q z{j2uR-+vbuOZQK8l)OCVDV0hQG2JUmnE0Gcn4WTb5RPA2ZO6B(%S%si14}E)>od%svDD0*uZFnUk~`Ee7%m0{y^0;G(>jh>7O{5g+r6%jbMtZ~|c zim-<`Lv&!caEAJ)CSA-)d<4^iYt3m`vbQLn=2x0ulA?p}DKQv;iMDOdgy@(~RtGK^ z{2PHPFGnx{)DcvCX&l)>s8}f>PX*Z)MvD)4_u%BA-K}+AbA7%7g=F-^*`P}7%*hL_fGoEks@ce` zCPJm^F1VAPfm4872ad6>dGb0yNBL#u?Ug5xALj%K#!{7Kasu4KNdqfI=8Wu z7>UJROs@tp4X)!V1m39Q%wjJCM0#La;KTm$^T;LlRV2YzP;1H zOK9#H4t<(RI`PWU9*>A!>QcAP`|+z_u^!ZTQ{}gzimc@vJmSK`b0(1X4Yx`Z8`wBS zJf!}rFi;eX89)ftJV zoO~^!|I*ytZy1>pPjl63WG%>Zg|1CiQ+?K=v@8ecnsnQPDjp1?yoVsMEVljuja#sO zs!C(w{udQ_x4(E{7^rV6^K;NS{FK*Bx09Jd?CZ+j#|up?s$!9ZkzeFX(!55MP5DCc z*HL{R&!-#C&({Q%9O_&d;aWpmYz;LZ!pxR7^-7R5(sJtKlki^bbSvgz`{>k+#Qo1^ zN0%M_qzRcS*9X5%i>_LsMY@>EPF^J2)VPF;$c3hdz!Su{^!4q;RFym*FN=m+=lMg* zC5@$dv2zfZv%od2Hz4Busj5w4d~U;&z8cG_|57B5k_tP;W*Coh0wvy#Vws=*H`K2k zlkOfwqvg=8I-W-!_L!h?weMy9s2-oeq!Os&;sNb`lOliWmfxl*q%)7 zqlc~3l=Ai(rdsaTalQu$VA%JuY&T3f?o7`lzZcFV4G&4SR8wdp17RXri@aRl>7U}C zc9tnB^8p}HQQIyo{)&dwPHfe3mqeqW(+yUq8}pN9lAC>G{vb(lDJQTS+OJ^D$2$Ov zfuo0&YdtE|-fnJx1v$wAkTW!ByYVfB-?@doa~+3PL8vCvCnpzj>URvCfhg27ETj#m zzkCTxXv|{8Zx~#X&zz8k!bBPNxhbIovC|{^t`~LI-^h?p&`4p-6XSl+n%d!;=y>}- zbBXO^r@Tu}55H#~FGVyD0!ieZr6*zU)Sv$zj_d zDWYWZ)1s(W*wy6PfSvB{NK zt1`MYTS>}|FI#7R9wU_ik?eJIBbSvIieo7+VmNlww+~SUn-Sxh?M6ok^~p>|tmM{1 zAs-yEF(ZEJHrWNLtPROJpo&G@*P>T|28{Z@Jx=!DFKfqOq^4RWu%|}nCbMru@M+>; z)waHF|K5ko5w}TW$EGKgHDSd=syvLUa6Nvv6u7RZv}w@PmEva1YeJ+^GD&J*4mtIo zH9MGe+l@$-CE8n5X!cOvQ2{2<2XF)wZ#A7Jd}~2TvRuZvj%ajcYA3NW_rU4e)n|Qv zGKUyOmgZ|E4nVvZxE3Da;oyc><`a0Y!X>*74Jk~`>{zykyn8VKV0FH(l zh^`nOobI4@pDN9$%}C9|SjbKoF4BBEaq}aUnt;XLdjp203@qOi)Y#9fB$2F(#L=Y; z-tcdBm%oF%SbEi+3pKwPK$V(+yhxf%c!a&ap5C!fnmC?^>B-K2h9Vy#l{v{&7}t#s z{fjM0q7&9UyORZNh{-XeihV!t*+3sjV_nKyDPLPM-NQ#44mqz78i#tsT>&AI`srpl z+f_T^x&f!jwFo|mZpdCr-6QyQ^`nPW<2pN^upI<*u*6i9=vsZx%NeOewrNc&ZTF=H z*TBEE+aHDuzfw^B@_qQx(TD+2>ApSS6|sxiJPkcJrHqW4+w6{Yx!r)KjK{N6R0eH6 zDXk_ZRz~2^{$ejgL4HN1G{S^4+dX+EG zHoCLg(TXr^gVZjfVKFYg6Ki;Jbxm=6=UEYJjwAYdu{(Bm!Ie<&u|M5yKI`= zOz>4I>95TP+VJwbnO{fDlh88##)a|rZiLruwsscjBXt5gIPdM>Oq+NGJ0p|-VYWW3 z?$Atgj4Fh-ikirhgK8ZN7vf>tyrnCdIa2&-E_{3(^@@hoh49Al2gFj*ZHmm;5n$sg z2I~iX+1SDQ(urO;+v$#x&hO(*{X@bw&_E)=!9G&hvvr!H?`V}RPo*_iv0LA~ zM-HNQ%6cZHPyHMBO4EV+1X{dNKpDZ8tx|{ZqU41IroRHeAch+ltoZc&!X{nUDf2Gc zaZ#E=2CcZ;7;Jt_;aE?Cc-oHf1=(ZWTJOgm^&~Y*GF#uZpnzB69Qkh7&}$c;d9dT} zO^6Q4bR$%u5&MN$^$bO^@Z!3%q;%buCjyljEKaYxsT{^0MSx^%HGtwA3v;}S6yb(NjlPes9BiHo-xL!I!lp~RFreS z=g9b7ceO7YUe20i_-Ln%TF`IW`3Li_+Lti-*)hU-595m?sXr);93#hLitmU0dP&2x zJo9__B#xHYrUIORadRody zj-GHtOHLye`h}(?4ORb7rQRcCieVv1R#G zHAAn5{mFuf5*EWzt{GLyQe(EjjDQa-`JOJzj*iAGt!Zh_4GLD}iqekjYDrUxt|6kH z6H=A(2?h(vsiVT03sUf^3{50Y&^%4?r&~h93UY&vl0F;K-aZYt2C{8Lsr>mVC-Kw1 z=Uc#+Y4Yld0@9;6txVCr!0Q=GOH1$V@2S&faDkEVR43Zb)m7C(vut=7p8Dj4hmPSLZ&V@yAY#5Id2+zlVsBvth*2aTEfQb8zP-{noPrw8 z;oyWRc25qJuh^-@ZK=t9wT%dr#!)4)Ryi`DRd9EOiGMfaPq5MJD}-IM{+u+tMqJJ^ zJF8M=5f!-pF`zrgG>`u$wvsiVgQl-M=%I)JqCp_gnbgP93wJW0)yzT%c{VFot*d9#+>G#tx!y=u#qfk(Qmp&~=YM+m2h|ZXhYsrp` zdi_bZz|)xF)e=2HG`;zm)K@orsLZ!-nC%g0S(G%2Yw?2R$^r9B!R}bkAaqR6x1SU_p2 zeIvDz)=TnX!Rh!LqgrFr;q}b$41_c5E2SjSbBmqtx) z+(uO2jRs0QpC5r%$E48397aM-F!bOM>k-_!K-?sLm(`vI&@H@ypVdPlNVLW zlEYRoo3?YB_Ppmw+tiZD0v2RR!6(;j%LUTn89|{xnCUNU(qgGT-}@3cKiolHE@u8I z#`w)0s$8}S+|y7A=>9d>_vwK021rZffRbmG>~L*x7$L+pK0~N?Ix!Tvk{NFsZjvJi zODn(ZN)GlQ1kOLXPw{@64}f;)@de8GNYFN~Kqp3J5l<)-UdQQg*t zowted>JL4qWeGQJ?NZx<1ICGPT4s9b{IDb98TV)j1Q)}r`V_7GtCplOprxEuCO$tt zs61ZP%w_DaO&tt${1=Fc1iI+LwPX&S<%tT3Zkwhmn+)arcU(Q+xnc~fiN##)#zxv8 zyb!Ls#w^UnbKXiQb9Q6N3$H&O@-*tS<|4%wT?=c|h zfb&KSD$DMS9y1BcHY{aY@^jUB!R@(|a^`a!rADEc1S+a}A(@?a|&V| zY%xUJnn6zbIBR4h48k`^WWq9|Sml^Z|4-`QAZp}e0yyRfl;_swyf3^j+Mieo*uHR# zwXDq*mC0l}0-Sk|56Ud4cT0b~J7HX`a+RoTZ2P<)?jDfalyzr62fsdNdX}l4XRW%= zI9Ljof%te!8rD6LE8o=1#gsKkRhMnsN_LOW+v4v8(?LEC*UM}18#|sA@IWY^vm10i zFnTju_b$*qe8aJ{L58Ai9>G@T2~=K5)d4UvY#3KvFXuzj7*df)z01SdMrfP{@?mM9 zZBSWx(<#Tzs|x0!B{n*M7xxo33L{ug20$AdZ$~0F)OoNKd}uaz3do^%^z!X?^M|8%7tRz}eN5k8;s1{86$uMVf9&jCf5TQ`m|h0noVvp;%V)p1NzY@GK7?F>b=6XhQ!$qY*2KkV%bjwW3^dy*UUc~`uVRM9ktomzNZ?SFXw z=>;t-8vC2(+E7R-!51&&e8r;147)hJ|uJrCYnngZ!(~l?Zwu5fQh3;qX^Wm6!kB39DA@G zVm6VkiQ~%v;?+SE!c-JS*pKL@*I!3l%BPnen!J!; zcq*Z;IW>=Demy*-3P%rt!^^!YYqt%l51MXAr=YP^-)rpJ8Jk}N+Q=LI)s^N6aB6pF zLGFfOOf?R#A={M!yVm$j(P!;|waBAPjdf0d(JNa8;O&^_29Cc9>?a&b*o!p^3;l1K+2KqzxF~9-A-oi?U#)+qA=@3(?ZfaVj!9=c*4F zJ+ptzTSwK~gm%~({a|Pnv7{6pII909oBc{u8z;{{n%|&BHcO`AFiP?^H^K6&-UD*$8$LX?Aqp%VLn{&#_&AvE%UavMO0h4Ut#s3=N|C zo7q;Njt`w2NruCc9?u4*WfBEbt`6LVeYYgWLTWOPvx?k;KlCrk+Q*#)+7WUmzD##k z?^m(=tb_PwkGzdm!HRZlG7$!OfCU!9SiuAn=t`{SI!*l}gu*d`m^!7bA%r3bm_+ud zv@?CKH#$xPNE2rld$cBXb+d`()s9M#?Z|lt0(4db^b>W;)UO;+d9RKQ0whLkD|1>K zfX;@xjgHwvU|=se_HJ~q!Zvgo|&bE+*;^X z>{m@n#Tvb4HqM5xn)cBhI^V36?tH>^$snUEWOpLjV4{tr)+=oM)QV%TNxEr&&3-q? zIge{Log_G)rr;@)A4V`Ybo*Sh;e&bqTX^#C8S=R`O=NOaQ6;gZw=LWSIc!jAmN4~` z9_4{HoVA!qnwG*@6&Z-s71xpxdVO$c2|GnMP@KjzBV(T5+&lHR|3j|n*HPd}EVoI^ zH6w-lssGU^dAy4`j{rxGMcMj?&Xt#&a?bw&!a&(=4z0A6)9G0F(Mv zY|>FkYC)PX4YZGuEtN7%njb(PWCm99HXjT^!)^*jdwtd?3(KF=cW|4V4ZK9ENzcZ$qodreVS8IH!g_6W7k=t(eEB_)Nk&dId@%lO* z&;QdinWaHnZ0AcftEO5Q^Z^EWx@dS}rR(mmbe7C6MVr}bdBlyW1{lrMtF^uP7Q>)F zFU-e_?0}Waa|g?nYFq3;{8er%zF@kDr66^-^M)|`<7EnEXLzD%+9$u(+X^80sKdb) z5`VI5WQY1od)?Ho1IA<|?9N+p)C zr2(Gn=THMYsFVLmk|5OfnA;^0DRW@_3P%DTL^r?oEYbX%5GXZPp2@A3y&6-mS<%1E zx@Z%JZNI{q(9+QLypAzL--Z!j4r`d!1Tk?v!h!!>SMWB}i9H=E@x^%(%Sl%(Il51? zb_4j8UoX=1D!D7Dfvy5>15xTzo+B=E0EZPu6VYhNE7V&C%6`>kxsT;qkNhSdF7Hsy zwEBoa*{}xC)@t$ReEm??(}=@(%xekN@zw@38GdMgysw#1OgnnJ zb@bR6Yg&+BrojPSmM+<{O-F}7RfcbDH*7W`V)^7p0`cRQP6KCs=R29(K>eF?_i?lqMROX&%)?zTynAZW1pZSuLSW zt)2D@J|E7ySkfc3;l&uOqPK0Wc`a=tFaLoC2?H1yJ~w0KHt5vGoZzc7RFr$AzKQ0N z+Jm;-(Tgick!jo+?Or+h)R|{ULVNDyjRd7t`v}7A#5Ejwrh&Uo2 zGJhlCD!yii`kJp>+Ix&vP$~XUWBFbhOTtHMts>^y0M2CWqERjx6-LX^U9Wq&V@mO; zITP6Y8Sl`rOrj3=Uz*fK!aTn!Q!R`kJk6}=@sriuWoMC(T z{;=qH55)vK#+-x%%wv41bs}xBDQ08znKGT}-2gC{!Sq?0A#)2mGyQ4Tu)7mlbTob~ zXZrnM&{lRNMY=-EgRuWx1`&v5DIjFoq@WWq7d=~A3=l%ccfq~u8O4}8{n{B5Ync|P zY_e9AJ!4`wv`h^FblNB-l$GGQ2sfD)F@#>7%Mvs$pO_QUm>F7QZXmc5(+EnwRqFXu zWktRSjo@h-u1AhC9-6j(nT)1PF7qR+i+SX%s>mF*{kGG+%7pwr5U^>$C)7}TL|u>; zGia?;#{dRjwpR&3ofhqzHx(nM^*S$I)1{yfNl@f0Iq430YI_jX-wk4O-8x}^!4n`> zkN?8<{T;0V@x9a;DFxO_ol=+@?3R1HVSQiAXw~gxc&(*{k!h{8yYy)h_36As#m7DI zHW}v-SZu)9BoDa}#`bwp3h|I=ZPhZa29~0#+E|wzk1vIIP#myT6#o z9j%)$TlVHES36FoRj;*);&9nU`gK9UTs(8L?7h+UJ&{N&D%kHF`e>@S+zeByx_kx4 zx!;EC8xi-dxuG&i&qfKbCNBK=K};Dt2TydsTejM@(Yg_YyS#^I=zp1VK@#Ghhb0&>Q6PJCKQ6=F$&4_znR3DY9`G+ zxJR_?4XUuZDVyJ%ycmlqD6LUC3L3^4uwQ!nuk?P9=h0<+-8N;__g5^PFE~G@0PgEc z*0W7xipU81G$>3*<8}p#;Nghk?@#^nWv<`H8_CHUwZYm7T3vQ2mwY=FczJqV8ZJF- zfH|&NQIuNW9kmBLt=eSSxtczZx!OC(n?`L-PYm(5jzDC2{uKq>5H{STTM{@ai{l{k z+FrRnZ31mvM|-dV`SV&-RR$jRliNgU9h?E#)AQyt?|!49co$YK`+`>eO!nqJCNXqW zTEEWnZpS+63k6dEyygt_geT=--nX^7?4rmc+|ToH)9S&pqOz91@*J)1QrTCA#wH(c zG9M()Qrxl!$hg%F{;Wij8P0GpXrjx+u#-%IrM6;`JYy^6y@Q3bLT|XSk9HY4ZVG3q zQH0bQB@!Cj*2oK#d06#xyz-!z;^%?7AByYzk&D8Sh3UPIL{K<_5T1NdFrtfU+oWg( zHg}{{vw5?(0Dp{YUVrqNTn3i}a~)kH%TD-`$-|`=~by2xM zjSR|YiCq(_O0sCxZsjUrk#~ed8_llQ!#L!w?N9z(wt$nwcrHGzsi92U;P=*Rux;h) zQ0Br#>)YE6DXqcA~F)I?>2sirv`*rf^2?yKp{ju{c~(FZxH-_pRmL)X)M zqL{5g{3|!&=j)dg2=Vn7%$FKB9dy2#8oj@hBi(-l=wP6Jw9$}Ij1v9*TTaB|s3xcK zeHsNnCGWt)8EpF+OwIQ8QXk7FkiyY(;FtNcGnvWsi)zHJigX9J)Q$Vb+XmqN-3|XO zQS*Jq)W-!pTrqI*Isq*prU#9bODd#1698pTA^>xj!- zl!P`ga0!Y$y$wMDp0h5JJ5qP(-a5SJ9=g)L)cR!5@=@Hs*i_fP99?@7V`BsDkE*#G zg{UwHV0d0>wA*!^tdrN~HmKJ=>_^IG;P4!=WGQQk$q?0)lA_ZX$SNnVUmwMT^m*C3Pm#rcI2lJ%d#f5OW6tZuq znmRIvJ_AkghqckAdWYi%tHTZU5UXqcXij&-RjSW?6<29@Qv(ikLcUBrw@3D`uz$> z4z8b*GV6xS$q(159@o{15t132;BCF;JLds+6nYg%rlch$kd8_>8WF}jwoj8!_lCij zWC)eig%IcZ*%*!l7dx@Auw zmA#7VvXvP_?xp?+T=67=Ee zp_^EUVO%v02`X!dYca+Oy9kw|rqAqBS`a5uWQddvh7|l9d!c zYZzWsO*I-X%?amtz>$X?zGk_Cl^Z<_3NidsEyOLVuQK_fD@tl zOZ@K3)2p6i}~ zcWqNSB-50p>+N>u`cawCYw-O3)CiJBz&A*}O_Z7xgJx^{pgaj7MbS@W!f z)s3QhY}8|PdNZ%56rR1!`X04BV}t9fBBv7h(6YhY;$u|VT8mw!n!QK+sOy`!y?a5T z5|PzF7xRrptJA5g$J$s|2&TSh4<~1XsjgsdYdZ>7$)=qk$x7LYg8nu$^3L=s2ft@n zXD0ek)!|iV2G)`8(eMBi+JqUv?1xlx)bL8q@k|%{jlW0xAIgl7WIW^;$NQ%}>_SF0)dyf44eiqbC39^*3i!{@Ws<}SMaB6$j+_$Q1fk7R~agB zej};PgK<>CKFCFr!=Cdl&;LuakMN)_JRW_UxM{x3KQuabFx`b=euoxK;9jZcRX85L zT-0=E;pvaLme^co1Q;iniK|vZW=1)12&_-fYEApSJL*80-Rs;0m6pe&``&ZqI6Q%S zwwQT3M>H?93RA!SM_jf?pg3W2sd{S(0#H)T#n-wEK;*6&pP|aiS@AY#__7^LD#_$6 zV=gCwt|IOV2TwmNb8nnQidB;4JW^E}cUMx}MMvB=`r|O!V();5yQ{o3rDeH~ECrEn zZ!_fc0ky5e!q$wTuB_+pfO4u@e1hMTc^8Ns@&^lwVM93M={K5lnGfrakZLNW6>JG3 z!}++|xP{vO)1%Iwr7cE!)kH8j0o0mLXZE9IHap`N_0UROIyW*P57J`BA+{An1n`gEetgN;_*_ELW7`znpsZ_A(_-?Q{Ms!_A&J>x6XJ zip08fa8&JsJ?(iJ{6Tx%Qak|foU}l@_pLTGewrrH3EZq!TOSxPzI1}JCQh>_yVOUR zX+;^i|68D5YEca|Z<@hje`&B;x&6n4REVCQ^Sh+g0wWz_BEGoclBU&KWF!P(A_ctO zGs_0Vxvjtj|7o>aX@`2^*;CMDZfz*&+QjN;6-1PTWepMhP^2$z9gEzE(lh^U$L7Gx zy`!;X=G}MU@D~4hb8FV^@zZh!Bnp~wPLfOnZr1z4!DK{49c!fwtnyMm$BDs4PpBh4 zN0O1iF)0(2WHd7u&*&GFZ(|p;lrEF;%RS2XkMCz8^-Q|Q+y2#M?VCbqb0esKyJ8|KlFslncYW?Xy{Z2YBPXgJIVuI1ZS$|TbC zy}^pC>Tx8*ZR{5dJU#lLf{GI6wWVdc${S=ZqlsNF6c#fN6CHn<2vP3#x{e+U4@&v? z{?=LDWpXLlI1>;w?2ODolEATDvbHn#oE&<(xh37%Yhjrca{P1VhQ|c@wG7WRkM{Fl zJW<4Czio}ot# zovBtABdT0E*RzwnE%s{>-};$LLAl?C7~`!a9MKO5rl)qzM)Ua%m$HE)YVpU&8&m=M zH;kUKz#u{b)Jyt=8eaOnl-D*sszklG=BLnW4sFMFHCJG z!j=mznj!P^H18|yYD5bnmM}Upx-isBwKS!IAt}zG7#^-=^7^65qf7Hnet~ePDCj>K z;*V*?(rl%)S^3u_Qgq~8Z=Px*-zIV!LH1JvuqTxV#SRP}-na|W_4-r2&e4Y8F#9!Q zgwxiOR+77ehwl5p?WaFSf}p-23a=5}!US7L8Ff|Xt3u_7c(|5Rs*$M89=Ybgm=>C) zWn)Qhs_t3o6MQ!5D7hjO$xI;8Ug};FzBpuzRq{2fk-dMFICYGXU~DI6pI~W%O6NBT zD~!VB>~|C4fcy5XwqC-5Pf^vDL8UgPIqK{*N-DjDI>h+k>ZD*70QGWRuzVFai#z^L z#QCUN{IIF(r(?6vyXwWouh&&-PkN)UJ1AriSOC5@QjpY_`s(XS4B@H1G@O~Q$KNWR z3yg}Gk#0;8QZV#EM70C(uqgzKhK^g;M<~~SefqVnn_3-r?A+s1mwU_tcv;2DsKD67 z%g*!cP)We#U8ky7eC>-k?SmDT(cEiCU!>|e_#$Z!S?Da(_992#-C}bZB1n1(Aj)cC zh|N4PpkFxu+2 zFdm_@y=zVA6p!H&eW1B7bhB@fK4%%x<)Np(acID2g?wUkJWk2_&ij%H(Vn zx-eA%T`QcOSGYXLH{20p0IdXnKMOyRiq*7mpk}LXl^WF7x8vnroXxvaONaEDj#UWo zsulWWho-rTY+To+<+ktH5+tT^G`j86`Z(J^6{TVS8a6&=HSErf@NrSu*uT?l!LQxR zzEk^QBO%G*t*g;lGH`39kwO}({-cPCB%+1x4m8Z1Im_p{mQ|{{xqFP&?b+f+tE~_S zwjPp9-$ov$>nVI>@xL~gCwa;;mP5aBl$^d3aCx6F(GjDY6V`VxD3QV99Bds-aG>BA zim(wI*p;|AHV7N57-|aP!XG_qcFuLqpm17L&aU|k zN(xS791-}`BitM6I#we^$XT8+o8|R>67KGXa%=N8L#dmFQcE5BMu4vYIZ38>cr01N zZAgP%1ywFt<52-d*J6v*Vyo`EGwrWa&pknWU-a|SVCUk8j&=20U1Uf0GAwm-lQj`{ zT$XT>+2@5}*lRI?iuX=r_r^Sp_pML9N8HF$_+Mux+9>Le7da(PFxPZ!tXo)BE*44+ zPaXq%Rz@nc7XWh09U#v|z&N4(7RV~E=UVKGyS;p2hFuL$@a8AY^H9A9`dHeKsLNVr z&c@@cupUuJI|$F1%OH_sOj!z&%#+q)CYRGp}? z!c;^>I`_O6^E%>^XsHlIiW8R@2|eQX(>yt4s)(Xca3Es;mV=G)XgLE*nI&>OSnGHi zN=x$F(asSCa8}+i4olOjFolzoqGQSj~=>_P~3V)Ql}I~&K!q5mj9-lZSzP0u;`a2-%>R} zDozbgRR~u_nKVU~FdtfN3?svO*a`K^c0MTBT{d_Zpi^~F8$T6%*4|<#g)#C9!?2_d zy8^?sbi_^8EYmo)w9kwCFc&FflMb?5U)T)3(GXs*J(AboseJ{;*#jWN<;E!Wx}}Zy z&kRjLRg}HuJ?Q7v>;qpD)wHo^F-+tLe3Boh|LXYhk2x|hrrcmJf=>5N+ee8iqkSt9 zTnrk|xS!A4XiQO(nhL-)rs&U_11(*QvH{aSghx{ADAmSu?(9a~>#hODzYgrah?#O& zu9^E*MTv+8WOO;egQYabY2kI;B#)N7;Y{;90#D-BZQ)FRkvZSHpKdvAOw$;mjXN0| z-aMu+!HW7BTUigs*wPqM3z=l_s?uu{BMhhvxyNxyMZD#a+2L>BS1K*eS*O6*NNvYd(?-_%k$UIg14uwGudn zMib!G^Ydo#s$|(MVwsYzM!`Xy#2KTs{F{a2tx)1PYK6k^TYKSQU%()1_VHcut_j<> zye~;NX(atKQsB@6jTC|oD0MuMyDF$9Ldqbdnr`)r5tm7Pq#6Po6vr-z8qsQM1h|+? z`BfB%8Um&^o{M0f^mY92gToSsj#TG@HA*B;YYwIzk7{<6W_bW5mETu`ApRgTxv=eR z<*ID?F78`nwDMVbMPbX2jgxqoBwQ;doY#&5q^`y0M_vz(dsvR6>|6Vl9*Z5FpfM{) zU;_MuMbGC7;c|pIE%SUA{~0j@Z1D=P6sb~{$h8$1Q&In#Nl5{J_~01GkQ)^odPKc& ze8xuoc zlK+h*&4P!QW=$|+i#N5p%H=$=UX3DKc)41>;$-_=xjoV5eI>nEc@rig*t`JmPN$R` z$w-R}w;^7mfxp{nuzx#Dj4z)d{!Y?fV|vfJyf14ad7A)FB|VYkXSA`7O0-Z&bdGJU zK$KGqkP&828QVLEHXf#iQ)DdJ>FF8P;WspfeDF%U6S)lLaQ-7$H?^hrI9*3-p^G39 zS)oS0u(8eS&ht>`!jST52r6{YmVEf(E4ex!X{`wX$u!$WF!59hvwh72uWNlknuno6 zc8}cM=;^(oTEm0&#HtZT>-AdHvX?2l@T1#+=)_Z-Ln!OTg@dI!!EYahY+ z9MJRG-(^(gd#D4f3mmH|-OUMz8FwiTdd9b9JSDIm9mzYDQ17xQN|*Of`xc z2YS}0G%MA8a&h?Y?QVoem_o*) z3GH%|{lT{1GPgc$;xQaPr5*(<#6#4?Eiw2+TPmZ{J=*y+>SiO_x$_!p(O`V}V%~@k|=v)8QuY=#+7&&miUjORgExZbA|s1c~3w4Pu;Z z1EsJB!S!~&^E7!SPZi7Ik;imYCwa!7U75XF=5e}J{88R%=-_fU+l>njR;eD#OA(D1 zpX?Kp2KbJf?sno}D=S<;jMjzTEh@UbB8QS#dZD~4m`MavS=v54>+G(3HSpO{bVKXh z4rf$MyuC#@NlY0|-0DIUr)zPOSA*AJ$wybq=DNdh(vE%V$Af*Nx+eUPvn>4el`S=o z$Fs&A)CW4qZ>ZCt(`AAdbX0A%AQ)v-$yTk+&yP}*Hwxy4>3#%()vCt?>FIBlnzdo@6STzToXv1*YMx>aQWSNke)$C-Wb_`y} zw|ihLDx9(_uN%Gy>0~0AetYZwgvtz;lIehG_zkT?6 zS;X*E5y2-A8S9J#L?*l|l?`kH;+T4s(k)}F(n>R!u(~&=h$B3xM%r^5+2`zeeauY3rw9&{qd#Yy+ zyrWV7=wJpykJxE*8(TF$o1qV!Robi@ua8+xSB>=@n8E6yy$&e}FgDsa-EVl`o}0rq zaVt!zzU;hgzw@fH)XS<#s~#V03}B)_5IGXDMhz$OMhbbDC?v4SDjb|M`?~x2J>!P+ zt^V*y8hMkDK-18*qfWeeTRV6oA|iDepd@OGMS4A%uW2t1#!Fi5f+6yXt@46w?3X0z zJ%txb{g^Urd?D7g5O3&pIDO&S!?a+HZXQ?IvT50PQq5*N6~D}fWdD%guP)g$nI@uu z&Zl=EBx~aw_*Luj(^=L*dpnop7tsOp1jkCTer}w+P_7AaDdUZA3ij5 z>-C=k3~iLy0V@)@H3uAUh8k%FpDL6aU?EkZax0SUA$ngVblJoW=y=PH=nQMDZY6L~ zL**qtU;36%3df=fGD~XuhGJC~_CxBl@0jf=tmS(9Pu}O{W+nCXI@FSKv9{L2$7}M$ z&vBJsK?=E>lAqBH=S`T>jD+gLQV;VObGRxE0s2y4V)sNt-Kdu%mdM15VP|I{B{bm$ zWe4=~d=8H>`QsIFqHNC=PQ_6;C(H|c1KjfnT_Id>-SL5ASli#o1#%T+dze}t)@Crs zfZ7hLJl^VoddVg}oYt)yGSCz1${-qJhgZ;0<7zGU?l%70&XDi8C)i56Lqg*l%~3U7 zuj*doI&5EUYZ(~Ad5May9|!EWpl6?#Evkg?o~Ij744OxA=e>D7lppNl4$GxdL)_xe zGP2(x{Sa3_d86EuRcE1= zWp(D|bFe-{ZJV+Bw2yG!`c$DRbN*_#Cv)!QDNOFF^Yq5nb9dsZyEcp5#AzW|dZse}Gziwx_;)uvHe&v@WolEkR++4_6cr00XaQ{rdvheV- z@OU!tO8jbxmF-+eAWTK$J~n}-qTRK`TTAjgOH-RmQ`<{ZTT4g?#!v{x%=p7*+zC@| z6nR&2B0D(|{eoDL!Hn4d73km0iRco<@(*VGhF}bfKa9zpz~DwN2n?gV=`ik*)`ZRJG#3vl%Td>rcI zss;qHqJtUn5sbOIZcWc+V87ZPqR3vMoKZY~XOE>3Q)?Ht$-L;qWr{VV-2 z|0kCHEAa1G_Am7NA6fRVz`tSHztYc+Vg~g@B;MC#piqr1UpxQUS&(ce^7?ZTwH4CSi#&JFc`A- zRpXp!V`U4Mw=8CVxD_8qM9|`+`+XG0PQVzwd52z){+oz@{)OJZgY@4;{1JW5uN5Rr7!ay$pyfr|paF1_2m{^lb*>tcD&Q~q z_)|o-SN63UK_dVVKD*ob%e-@RFVQD7#DE`;{)?}_;L4vs_TSp*KSb-lx6yxy)_-H8 ze~H$AZ=?SZt^dkK{~=m{&_wiDVvOw1sB^%^LjZyyVe%*{e+vR+eUuYAf?rV0Wd*An zA|N@x$Nb{zD4smje_^2iq9^SC!)6-H&9VDi?5INNnZn$Y@cB>2g@-JyueTO=6C0^L z7OTGZgMd$oW~=KS350K+N`$o=AQ;uyax64^{Fu5qA1s>nmQyTitsd2-mDrfh{vKBP z^o#1=JYl`t82#thuU+VB@*_3&wyq?tVB7{d3|@GbZsG`ICE~n zRmG|EV|-`pYyBWyXRCoi)XwCR;@K-V7g_njbLYFKt%Yp;BNF32be~FHI}XUNJ`Wbn z#f{IEmv;+}Z>1eOAJNl)&8DimTr9lXKJ-xhnWVjX=%IAjQkOvM#q&;DmEiMhGIxVq za{Y6`7e64>hiaEDfz@RO5Z=eVJa)A`p6bZ2j(Y=S;7NEm5RgqqDOe(d!J4xiD+cx= zCOq9a9{*K&y1RP1pE}S3f3^`Ka>7S2l#3o|K!mA1BY4v(V_hZ z4*!Eg`*#livqSq29R7EQ_8&OBqFlh#g+dKE80|)8&jG+y4R=)%tU!McawB-U2Z^ON zJmms3CZPz)sZ++kG7oS}evfIZd`{Fq5nMM)0l4+Qd$WHj%YSfl|KDSR;T5y{s1*xl>C;l&sU=(lVFrM zEln^#X^Z(Aq)Dqb9%HZ7L533_P({D?=eTfL>JLWsa@sS)XUScAtBGDhn zrYq+xl0$OiY=~GpQm-uS7^63Q{8TvDopf=LP;)d9F?## zcG$y?)WGx}kB9jokH_Y>{ry9R58PN}j-DQyg2T6N4{n9gbNg8L_$2o$1Gm2i{FYu}YlXfLyJ*K%-Z%LKK5-{7^E z-$T#JM(g*7%H+!j#KkC*(6-j8$ha*jR;g0xXPdPwLzx0pc6keaYmRVx5e7v~51V8} zY8pKI4-mTg>Qf2PpJF;qvb!KF9`lb@UR5}a;*X7H-}NB5U_zqeb0t}6U|uI}DG z_^?P}+dAHQ98cOtx_Cbx^6Di!YIRZm z`sA&v#(j{`)*c-wSY zSNqcPH2YvIiOer~(iaHfG9ss>;zef`%u*H(H-s*fJ-4C+VAnni5Lh2A-k{v?#oLpu zz&qTv-g?9N9^Au-Oi^yE+TR>sTU_cx_+KnO6O(RaKGI#=&VJasf0?XbZ!Bdy)147L z-Uap!ZjUOn#z zQ68L;02daNH$7+LPwo*prOkYQQ`wox$7|9&+v@LRbWR(wHl`-jT5|bdmQqEm*t;Ck z`tz)|lV|r;U%#byHclie=-}Za)7m&RQEik=rGe$4(k{8v3Yo~#SmfY+jMD~4`~&`o z0(JWNs%a*sIicpD##f4=3q}gBib8)pwB6wabo%5=NU0%hiOQxj+Z!?390%38V8fjF zx;H#mnX`9?eoGI9He}o(CUtoJ%nNn(CW|;paGM4CP!uq^M7bdf;%WI+XpKvEF11Bd zdksZAZjBAmI@SWih%s~r#>c(x0~h!31-4%xO{GYl!0ji1ZkaDa8{s2a(klF-Z$Bl} z;%lIN#lW&%t$mlCvK}z#3x8Ww8I$CFj4<0S9PAgum(#@lvzS^stx`?}S`V@LUYGzI zc4T*(oqrJ+C)Mye4Y^pCIdtX)gNoDpT0BN@W*8jr3KuNe_Aj5g`SNfp+#kk6SG+}* zf>ZPFd$JtQ{RW3DW8i#W&%<>gwSn8d6+?v|!V~XmF)1H?`J63dr)4IHlnVGi@4#)N z7YjrJZ9CU4-{VLLpjk)+0^3QSkv85CWOQ{;40Pn*Zrp4SZ&l?3=G5na7fzW z$zXp@lM&Z0ddCWD0{cpGuB{j1c0V&3vF*_D$K{*3xwTuYc{f$^n&K2tk9%Ish?Dls zu+wTq&vp&^jFw-}2cZxp{-0&DZ=dkKBr=o>@YO;MYFQ!9wiAjvUOS?$B$FeMO4*-Y)8WENE+Q6 zOHdM{$d`Z(y^>(`-lgZ8?aS#cRL6z54#hezxoXq z!WIxy+-;!ou9aN2R2G_JouoXCJcZ(gAlOK6J^&GdW_|o!m?)n?-AYpQRN>{;RQ1EOY&mmm-;$4PFo1${h%o+oho7gtd-qSKI=e?)U z6uOMgG&RCHQ_%UE2(IglAY6~FlELP2%WKqv*@YsO%K-mmG2QQefyk3E^XLbsN-Mf7 zC=klfC1E%+LgNOp^7WCjg9xjAqd#{#MUXAUuM6Rb17!CcsfIzkc0-l177#991ctZ0 zm>FU|+Yc3_rcIsl9T7}jT|tbLBv|1W*h&~jrbV5c%I3WefI~^&x=OF`IZQ$4&Kl+V zA|m%{CHXi3(uc@~ewiqf3;%V9z9M9TTbYXcX$)ivAEx-?r;tLp89cF}@K)K7B3w9S zXx|HW(_}i`Sg~QlNVGQp*IsxOolAg7z72Z&+5gi$xl^w!t^MMXxSRoPb1;o1yx~C z0^57jl8qKqOEYnf^$c_3PByS|WR;NOTpM}hgoD0C{2Ztxo{%dhm&%3(k6Z<7&N1P5h0hBRURhrcVM+zxn#I==Y;z zR&MCAwp+8efzEi+&@!(X=R% zj04&BVpP%otXhTdRi4eXO7PCSv(3&7Piw*GbkC0ETJ6SE%i4F&z>1|7e*0GPkH|)g zSBu=?QldsSJdnyh6U`+m8Yagv5mzI72B=*pgtKxYG*Ac?Z<>i^uXFTfB}YZy(*!bU zWuD~V;8c6Bf^Y{j^*oFT(9dNHW<{bPebdjG($ z;QIw^xT3Q`Aiy%>aRTerEb|Yck6a5Z8*B+&&YxdE!FPj4oy@l}4lKksIqf zvfwtK@}&`u?eONycYB(4Pc~Ry&LV&HhsJ%$@I=F;_LHE_pq)%cS2E z7+L(WiXq{ezvSQ(pftVpReISx9Fjllrn~P5`B66{FRFo;wGO%cya!`HUP1Z0qtvEh zpO!onMDu09F@2?A>*#O*x(d>%9A*CXh7eSlf#|~6^#n?5_IrDzpfdJ5WF_J4cl{8v z_zopXZJv7i|>8(^a4$JKb@un;vWAC_pKLc-@JiloOY%_>}_^ zHD2Q#nXu7n3S{<~xav>@#n#CNk|NklAYBW7n8DpOqi&*3i%&Hsm}# z*~W!jJdKVB+~ijo*P&;L0e#GV$05rsyC6OFOy@q{dVJ?*Aj&O!kuO}MROZI#%G;f3 zB)sWkS47rs3}!1D3C3V@beg&No{%wf#mbkc(9|uTW7yT_yF#tBDnF;7CgB8(E3Dp0 zwu^k2J4=-W1t*#p10QFz*debf=>PW0@DSJxNIJ~T6oZ6>g_IDa`$JGVoe>`~3u$-c zE!~rm@6&(h1M;VK8Pk*M+$$t8!mB z5%^cBYyo>;bLEGO=98EvHY0a)3pHi0cbB z2W$Kd#RX0lClGd}(G%MTWAJO;cpyRPuCFEZHIo$jTk?|GP|I;-7{eZ;pR?Di%S8zM z&}q1N6A8G`S%fyOE8XUp8sEaCBotR$tHVWQB|ME>Gpc2=BszvFMZ949@klPRq5I1M z&AM#ylWbz*n7v4nK8ty$Z8dVI!o0pAge6EO{mF)VqlVR40)^or(#vvtG$v1!@)=*bg}8e(O?fyj}M$9Sys5Y21o zj>fVuZ4hvZda3Yp+v_Ebt%18HwyT{F-X<1?jna&K|IIQjPHg{jRS7FnkhLNNTgjE`sP$?KYi3&VD&BtECUIgU(nKqqI ztLu7SYH7@OvaB%i z==Ka*ret-5sM&p`au{9<90{0~NqzwXlWli1)bh$&7g-f8Fed1lbA^0@p!Hls6?dl|wi*l00^WXP*B4x;rOSb2`2&UmYJ^~woY)SCvMU`;H>9I{T{`-3Z*$h97vFoF*bt24pse!qZemTv)pT=dQ2mDa zV&o%ML7_C_I-B%4rsz?0$(H8u0G+;)MV`a+6apLT0NB7lxfl1NUYG>%lJ`+)ve2K2 z%+r~9X=v$Vikai)E&X+}#RrDy=uxF#?t&t+S=Bw)5n=QPE~4jYx3PnUgoZ~ADK$+t z>%2*@lA@_@2zS;cx7X*M#iM=M%KT8Jn4z#r73}%Ebe5DkV=3Y8CvibYH&Ed}e%O!JlO=IjOH(VxX8{%~(kuGgrPXC#WZm$%6=iG`9&%?pKm#X1xS zzie9k5i4}aQChZRb3}vYB~;kTGAMdc@7q{14a}&a%4!x`kWdk^99A||hE)_pdZyr^ z2wx)kmRen0$?Y09U%bUD0`|t2;}A*BC93Afm_>x-=9o{!V0?MDRhU>SrEpGqQsc!*_9K#;Zh48c?E+c~0`3ukI~bqy)pVPWIN%T4cc9seezG~#uRtyT|a zo`qP~x3x;q2g5rnT!<2orf|e4*@1DyWW|CNG1ayRHqE)w`X|nkq)5?HVV;6w2r2qc zvi*`wLhSC?%Wsb+9Exy3dG-XK)ei|QoZZp8#G*vXLS1ihwTRo(>UBX=ddkvnMoOF- zc$br^T$2)dEAKLy*b)PD^@D_CKIkaqDSplW;E9Sbu)Xy;4BOQdOH-CN_maYAQ0s}+ z(yhJR_Z!!5WOkMwmMLP_)ztQF(Y!qqvpV!>1oRxG>SOQSX%xq!-=v0HAyD^HJl}l> z^LpHLhcN9TUvWTvHr5xGxGr_Qrp5{D-RXORqA*+3MvCNx%sLcahkl+2nOVxYuFp$t zo}Cx(QqL$nbMkU)79HLlwCO?d8#oS?M9^m2(eqW&w6&O?qLDWy(c z?|R|)bmlcEEc96{CuwpC>Sirs(8q%XEf_-i62%f-sE#jGPJtiliu80xZEm9C$X~N6aZ7=EI7jF8b3l`H}oRxP0|1Qj%Q~~;UD454% zB(=r^7iU}DDKp3UUTuqS+R7A#Fns@q_1eXulpdqy4i@z1Hkd)a*k>6-1~waGqI@{BB@h&JkHI8|_=&xw^_TT^3dza$z8QYB{d z)E^gV;Gg46oRr)SE;dln7fBWu>$yg@_igDps=dy1HsAyhFls)qytLXb!@z1VvyQFgq( zd}+hkxLL?dBh}mX?DVpz2LZBo4M91<={%bR)`42*5LlXny2Q8N;EeiGB`RelBL@{TiIRT3{hA@*%F#=2dOwZIm z#fq37Z%!_z^7uNxL1{E+(K6@tbFj35xS03!l|MeHZu*h)jrkY?+RxSTT&GHvBKX{K zrNn&j%Ak@%$G+#%@ttn^32V14D0iEPzQwRHo2r9j$m{=Lqp(#h1CY?tTKfQE{nbVo3Q;aFIQx|q@sW_yKjhT@LGuc0;w4ut63Mm(u>odUk5+b57uRbm@fRQvDC)chb( z;XAy+7HD|38bv{1S{mhrTpwvhHNI3qIFH*!+rnieU=+IqG1F^rLV7cQN@z$`eywm? zJyC1v?#a@#A0JtWd1=6&H66Jn-}Ah)rY%qd`iS00@;c?ttf`kR)yD)I?(DArZ3u?3 z#xU!1R`Q}XUaCsnPiMu;yzzZG1Y%12{R{;AaEW(Kop_^doY%q&z9XJqoe9)DT%GaD z>W6kM-q1ap6uxtpv}2(VG*)*8DiNCLxd>4ydFJNnfGfYu2uQMx|Ft!{o1-J0Wn_I?M<`*)EUk z;-hHEa_@;BZ}~pfJp1ldC-=vT#{1Wh%Lpvyxl6zWtTR8yNx^aN3 zSCv>f0|5mMpm!ub{Zqu#V5qXf zGl>hNJ+11YD7zh04g4{UFWB0J%$%k#Da=vWQ)|7{Z?9Gr)}Hh1iB`U<4v92l+SBGR ze(qAg&6Qj)+;UpW*3*iSx<^;sMmaW3Zgc00)e5_Muk&+G@@E6Q@omoM>9`pinf;{z zih^iaYLf%xl1u99{b?+5wzu5|snQ`v9R!}1&)?bYDXE@lF$eC$d}(~|qw-EDZqa_<6TcG=XG;7jb5q|G;Y#L>{>6c$0Mym*DU=;kS(W@>e|iV%rc5N zGZR-SGY?B)15Sfc5dy4qDW+tQd1#f44%zpE4zU;0ydVTYGg(0OLJIDakZ<+iWsJiaB8@H5*awT8MOHjaXIs#)P4Lgo@>%kyft z2Cp?B`};ix`^BoePwPZ6AGST(DnA7;N9F3#PQPfgWheOZg;ow9g|pH$u2^J;Ta2Ll z9YTj1p%#;}U#9mU3~iUF{Ewn2UnXgE7#dxPZ_LI#cw$RSw831j7!suW8+KZ+j8d6N zGfwtgeAC)3#_V_DwbY*&wqFOZJ$d#~Z3=xb8b{kjqeq*6p+zk>yy=MF>_ejIMkGo9 z8bNu(@DTpyjT}WO1jx%lE(#|Yrs#FB>!@eSY6NmxgAk{X1&`0$n$N(RZ0%Qud-PXf z^eyIVE()EmoM1iu9zkzGF zXL|3LllWmdzA`$N&XVR^4qxHU`41~#^ecM2Jz70RN6vRG4^+Wz8=o?n_j0U@) zm|ny>6v(M1k>98)gqN*75cS>Q8yv~Ia=fB6EK3@9@99e+{l4$@ZSwq-^qSG1|a!D;OY_S&nV=X;elX2(`=#Y5Q_fE@s9rcHgj&6Mb;O^Fhy5Bs~a_{aA&@2`_fqkW2_yXZItats!$1>jqVbvlBs&`IS^FmmgrEC zktDE#3==k=i-tWTr;R{08~dtdB||$RG5z$T&P`fxxO`3sUM2l@d@GqR)O(2nC0Qls z*|G*Wno#|3S~<4Sf-sF_UTKBAtsd(Li5bxp^9XL%={IJZoA(O{P90+-NL}G{Qfrvh ziqyppXcGvDtQxCnUW+q%>aV?f=!FCd(?vSJ+xqF?Qdv2%UkY9xohXdXr0jpA8EcUf zi1w;R`MFP9x7B@I{B!QxoB+9<@7e0y*OCaEnX~lm*+dHO&)0-u=Pe%4UjE?TU6@;Lw# z#>D0$2`m%ZiC8XAEy33U9HAY?(Q=B(hUb|1`}Y{sos0^3A`S@WnkJ#@HE^H z-rTa2?@wmw`0bZE^-J6vJec^tmGqT78lHGdcu^aDuEig^QTHD6wY>TB5*MuEdHpIE zdZNU0WkSu3aH!y)e5eqeo;9qbl?ZoujDg$0o{p#mWJ7w-J;DmwqDqi)X4YO!3I`=h zkme}Wzt?fp7)}h=d!gnuOWa>@>Z^ERI$RW1GC=rEf9LzTUh=gT!Cpp3d?yGbb+_^@ zi4z`PKX-SsRYtc4Vv5eVKLpRx-wgM}cy0)XN7MbJRsnQm7PD@5bxwMLEnxA^W@fFs zm)Fxnu$1UnucZ6-)r%>1Odplg0&yY!$|kZsEXs5n4n($KG|ewN6lro2pAG2_#Anq- zI+AICWnTMReRk%(78^+3Q^88I?k;0);=Up4Bn6@0j_fX1GipLw7xQ{N5R`O`+`}3S z+o!jS)Hp$DO9bB%ypmkcpBzB*)Pq#+rC2y;SohLAwArRhxXp+C%LnO;BTEVL;%UhilL?wgTjnKwWm~ow6)ou!5`*s~(m>)gh z=@*SBEIVxOQW0+Jka>$x;$ zN;qj?)eI($vR(gCKEQ^68BfuOz-kD+VQX@OeTtSaRv^oc%9f&O!qLQ z6DefEaihb6)V^>Gl-)abKZA`Ogg0itrpC~=U?(dR)@4dFl>)X=fnJz@@KEPG{-m*Z zl^pyD@>QtXmanFdAGsr6AC*9jYjl4aR5^+j)5&3KkTE=TP9?rT=rs2CQ4<)ouKgI4 zFr7UTSS99 zla<-QKc_W>llX6p*#wmk6Z7}d#Hs0NRINhgpe{E#7(`ntIZ71wW4t$qy38S;E3L{{ z=3zjU-m{lp^+PB(wcJd04#&Wn9OEAjZj3!sJ^PrDNMpuSX`&UPiBNXLYEA3CPXR}G zsl^yuYZgP@EcLqF3Fq)T9-A*VIkYC}06v3cZ&#AmH~i0uTe*Wt;yNIcGZnwAZcpWj z2)xA~yG1qX@xfP|hYr#e#QW0Q8Y=boM;PQ0*v17$BQEuulkc1aiMJ?n+$$qs!*oPU zH9tjA+ESe5=@Zy9InYRScP)5wXzAZMQIRxD%v87I=6<&3Jkg19d2{x_YM-d7zbn_x zuKFaJyE1`qV}CMY)=y(~f%Atr>xJ-G*whaSCn@TlYML$Brv6)#`Q?u%xyr9%*KN_g z2uwUV_1~rvu&-5-3NVM+6~idx=_T<@=%|~}g^3rL^FvK*zuBu9{^Zp+RH{U?rfA#~ zNtUY1Pje^d`j$cJN>;-;t-fh=Yb>`M<)OSh+^Ni_U!he;wohJe0H1z(PYZK`WM(rF zHac;va9hkk7u%b9Vp4m3^;^D{liFCwtj`1u4h9BeMrBf;g6bE7F(;9+`D;pSt92)X z3mW8Qp~PJnmC$!Hv1ZZJudnUq64?qh>}(-%ci!}^8kcGCjSkDiLvN+p38pPlNJ;YLBy3y05g zqt?#kaLcx>?FT=WbUJsXFnn5LQQQgL^_U#`d$?X0IP?c8^-hlyyxB_)d&=6<|0Jl6 zba%yOV>3RMgMMf1`aOqtL|1ZHt6E{<8RJ32S!v2AYVFsGEKz9ITxaBV$l8jYLp{gc z&TKtiJcR6LSH-5astRI#kTpbHb&>twPkRpKaFG!Q1mlXOJ6@84cGus`o=L;VIpEsI z$1P~@DIoB&S{IiHq_cWeAn~g7Dyv&uV=>LHH3c|j6w34bTyyp{a5(eDPBM@&Op&=L*{2Zk~=nOT=f? zVz=9KUHtB769vrNerP#0#Gq+a1K&bVF4`-2R`QgWrW$Z}7s`Q&DVwEgwbj=O^W`52 zG_T&s!i2XZKxNlsyN15AW~ZF-=;0&r>QWE2#-yMuFyb&U8ts<($w%iZ{&T~%tBgrR zyKO7`9IaJX&CbyM8Bru5hQECo3^#>JWL8-D1nrkNr2SZxdH>mVh);uVBJy$Zs+K+m zW^BOrKtp$XVj3)KPvkWVxU`klOa0?3nT+6ULxps;yN%pmHjjR=Hd~lR?V5q?sBe#3 z7^*AFLImEwKr166Y=_@=dsg5JRl^zghA445s_GPVp=zA27rHaoCp3G^O{nBe3~I|d zuDtQp!6?M39t|JpNzo-UTdk0`fT1dhbb{3$RvN-H9X5snDZTDm6h00rw&=F z&LcK3<~+l05vx$2j(Z`qC2T~4wq)}=C3MQi+Ahm-g2+v%t>JeY+=f^>Rr5zrN`*NN zKEH;a)_S^^bcG#}GR8c)*_&+b)(myf4jC4s04p(+tLHXGJ#r0?@r=Rp3V#!pnj}${ zQia15S?INT%ZXqf7g@)SQTMen7FIm5&27a5Z&jI=(P70LlC8dGAUY;?7H+e6JKYG^ z6Yu((EVO%&D7$oNy;dXxd;yv6A|}-qLFk9etla!(#%C^XP>a%sD#|To^zZPW>7SbS zox&{c=pXjWxU=u`hSe{{2jL9AE)$t=5wC>K^tYqcZL57slCbwF?K^%>Wt~kn7CsH_ z2 zx=>(^cEVIWb13p{3#DvlbecAa!nVSXEj9OXmf*#A3qP&Y7-TowaPrkMPm7Z{1_Bd{ zlA*tgeoG*k?n`BSmf4%CAK5EC#GsM#Im1f!!%1w$EG`srFGKqM4+$cM;^cD~pHpGd z{Rbpc2x-q62D&Kk{Pe7rzLb;B&DmmzHV?>x!SuDJ)83}-pH6({j*MN3;T%Jmp*90k z!a0M@oE6W~O=i+Jpy;PZ_jO`z;b-6F@^|5Jk3yfzH&w-vvH9QzkQUf(cIZgQQb0DN z81A%MZ}vCom*{Fz-$rwHHtgCfr#n5jRot#f!y1Ro)IibnXyzj`hb{I?H>l4fxeLLP zl&Z?jk}{HR;uog~G=hh_-zV79$ge5RPUlYW5>T*yn!t_XLrd#3tjoGyDL;JhE0l%p{`-5o;MZ{< z-`izn;o<)Cz1=@w=H=&SR`+r=V^%h@Fk@CQGqo}jb?_wBWdZVV@^F%JbFk?nGOIec z8o8R0vH+=^&Fo!C!Fv>`0?}qJ4sOmSW-dS>%FYfZYG$sw%*x`Dq|EAOo~}SXNe3V? zE7xOcK|w@jF(3@&cOm8cGYV+!W7B?ni}-)IIc%(d*8Q*Mus*)Aj0iOGkM^*!0g1p3 z`=99^89Si2#r|VAv4Q^HuE))wRDW+5xG(?b+V%TmV+V`CW8MGiCpPe7`n^5>+N=t= z89p@<$8^l9tgMKvkIx@CWk+Ov zEDkv3L}Y!GNZ=HN$olvoev^gY8ukBIk>D!+^H#EPBC`G2p8tymKR&tty!8K@K41qo z=Z_*Kt!!P*oS7wU0VIfJM$l^!$ z5qHpX`Bmucczw@pVfXq`+D!a=sp`V?p5!{>&xVD>Q?J_1A6KAP=5hQctdc1`*Z42 zsChS?$RcT=sP*O6ho#Mf>LXOz>Q3NOl}m~bi~eyb1SQqVX*fC#@7Ggn zs+8%zR0of7k4G~mNR}!xCKSNUh2qFgT0PUHiAr?0f6sw`@Hu$w#gRJ76_FY3Y2ACz8MP`Q>^{Kg;p7O7K`|jY8pq)~@<3GMJ8Js}SNHo5 zKoO-%!s_8Hiw7as5s6dljI5KY66Exe6Sy&3ehKRd$KlWxpE4SyL5Q7YgN_QfG$nu~ zSA(OE=V(iXcng9a%6-!`4PgPr@ayk7ClDRQL%1yOFA)oAF)D&H1z|ZVA^}?*Ub|~h zk>;r&6FAw$=cMjW*-nQ7gps_6OGt=KDOtlY$WIMi&zFPbQ!7{ePq%Xzmic*mjf96O zwQ!~&x1fk(s{Bv!R8~!%P-ua$#wp0?H98@;MDpJXuaP@%AQRxKs0`(tY?Hc3(o=|= z6I`*%XqoLGhDGphmtaFlLzvP;HU$mxBGr+%eX8`Qhbp0<^QRvLoYF)H3Mg+T$ZP>1 z4CPu1Rq^r7khNhCWsotaGIXDy3#<)-fd(|R^T*NWIvld1G+Euyq-0p(%K8Y!6ru+} zvQmFaqeOU`l%U=WqM+o8)VtE0qLaLF^O1=Z8I1Q77@$4!kqOcpomQb8Oc0vi5iPgLI;F zy#!l;KScNsTksolMU7m{z&4FpQ$|KcR-InV$kxi(+3L~GiJQ5YI9oZoIyjR);*MF} z;f1{wSUpG|wMX@rodstH45O8^i>sKWkuxbPv%JwCr#xKDnpUQ+mM*%aY=AZ300AbL zg^QGvi-(jA038Q#*udqplCp8KA%d?zhJiY`c{m>H1L8?JxPdxZ zK%^iL+haZsAdVB@EgR>rGC4TeNkJT-U-fgaKgK^^1GfcmCAfe#a&Q7|2{=oOc3BETLRzz+d7E%y5kOqhY|JVSF%?Sd^0Lpp1Z{WxVwEr;=_}+jY2%HDp z7py#p;IcVDKzV-I03!2TP+|8pL4a&rF8!-Qu0@50DIw?2r??FVsV{jiaC89fq# zqbkz^ZfZ@X6v)sYl}vYJvZIxi`Tc@ zn^XF8dv1JYdr5n*9`?@oS`}`0e*Scu^SfKr4TZ5od9d@g*?MMhrW7r3YG-wH%Ta4G zXE47*`{Aal?0lkTqg9#q^V*l!OoN;WH+n{;A*!jC%^|8PRpswF1V>Og6JQG&ITQMY z`KFW!qAuQtsE)3FC6JYnQs7Kr7&Wk_sXxrLq0!FMx2Cy%Zdd$%o!6`M{lvKWM4%{v z002TyDT(&9H<~IH<|n-4y@rDTwYZ>}fOj%<+BP649Kaa-*z7+5$vqB`vVvs`xsIWY z4NT3EYCM3K&CyWc6x{$c85kH4soH^jsSufuv=bn-_OG2*JU?*HUO|&Nbvb ziT*a*X1z-6$_zw6%UOV9WT8u_7L7i@07TTpD#1Z9yHrs`(0JQ!y~??Oq=8wE37Hw| zhy{5fOrh7s#H}UZsV&n4kB~&or={OiK%*rbit(EiJ7^ygsU-i7pg%o$z#IJ+ zf>hPD)aCy~5Q7ZhCs~>NJBfg;Y`{zLenZitbMxP#2=p%${fQq=KxKa62T)BeFn$1a z1$-rNJQ!DCH3MVfQQg35$;O5VMiM(WfEggoV?6i>cwJzOJjOld1@H#o=dt`hkONjh zAdJWkpy^TN0hI-#g9}i5P5@yX96*58Qoo0<79hyr5&ohTC`_VX-HVMdyj-V>&1SZ{&O3^Gwl0UX89Nk@Y(mlj_TD0ijd<6~qW>3|= z_EanqV3y-MJO8nir@9t(`oofrF;1R9)-E=GLCz-DRLNiyN5jql_|>defHafsO$I5Hrw`YLIHVHy~l6_H^< z`hXYPgA7L4-fvs!D-fH{*C|UxkGA8nw1O9R4FXQzl;in4g{qj?6jSpNddf;fjk3ibzUxQ!lla0+(dG>o4ae5DWj2LoyPXg}TXfaSjo(Bb_M&9%*4g4v2hm$hL z2>hnKy-2iJksVxd3o*vV(mJAPj~SI{+r&90bnK!G#C{#z^2gKmatr@th#QcL0tYKsn$xaRZP7 z`&L{4KsW&31zbPa|KZ?fA?0BKd>pX91kU>>NPxWDKpHl%4+Fr69q=o_*FfO1f#V~f zfOyVdehUCLpnlF@J_-Pv{}L>~ZTtn6|C|i$Tx`FSVNAgOjqp>Lg3R%_4r>C~q7wQspzKMKFM-=4jm?*!Z}?47&;Y)iTRW@&o4UIxTA zN3{Ae|IbEsDWTDrVcl5%5hxjy^#IuFsr3MmrCl%dU`{n98b|4rG>Ii)X*mDLln&Z@ zfFT-h9Gr1s^>Z|FAA2PdX}Ho<{&%*K0sK$xkg3qb2~8-_D2Smq^eyvu@n|$S96EKn zBQ~S*G(P8g<>_P7H*nbie=a}1D6w43C&!{s-yLySUDO5S*p&e1 zKnG6k_RT-%`ur+Ek_Gj4Bp2eE2da4HLhS*^k zhEtPy&qX^sJ4QF+!qf+lkG_V$3)zTg)$U!G|Dam`njHC;)fRj4LPbOpu-bOOxWS0w zA64tucHh6*>_5g6U|00N7(TFr{u(}j0J{YOY%$nX=LW=_6R_7HUde^9`0%Jmn!{xy_)>~BRQJF|Zp@reR6rMis3?J}|g{mTvX8y5$= zK6qlp!UdSsVis{R0Z*24v2p=3pGJ<-W>yxKe+0obfUkjbA~OH--9+pyY=Jpeps!rb z>@-MO*?=nwRxU19_7;!BLI5P7UsI|81s_Rhki3q31s{gD z?y^fNmyW(M^0{n&OJ!%j?1z6I6lsaJI$BaT3)3xqgD(L4%q6*ucush{^N2Laujwq8 zv3;d6rWFdmRZ2SbvvFsCb@r<BPUp< zN#%jaYcUK_@Tqq1hIFdk2i(2yA#p`>H#^SdLM?Bm9LUxk4EU;i#Xbf+P-VPCNNsl$ zvq>J<@Odiuop8!wQFQ$4oAs*@g#j+TW4z>$)7#|>DA8RXblIhlg8OfxHY4UAk4Rjx z8z2`#vP2wmC@q;Q_(t!x$qyjQ9*iX!f$$qk_}y0IQqf`&cHA7KQJpG9+0r*A^eZkf`8b{0aw`lS zO4-#Ub`Y~cH94i*_cj9h~rqD~%x zk+(M4jwAH8A@zjgQ38hAon89G6w^n(qItpkf_busAGDf!6nn85^|(X%9`6r?51n_k z)9Ubdg|BxAMkl!PZ?cCnKPCDl51cs-V-0?1`~c6#ce!^(ygfex-3py8UL53$%WZZk z^UC_ZIeu%A`NK0|wA>>RU491E5RNUfWwg8_v8C5f4y1&F{0gttB~Mh&o)>L|jKUL0 zz>SDl_I({S;-K1iXf)Xx5F*`*QQRaFQOe0PBvZ;WS+;tO{Gc_Y_UIr;{wGt<`z;ux;6umn*}`~H#P5a9Bas@eoy;a}yo#Usb$O?UU zM5v+~r>R@WaBv^S11+*r1KBk*+{`1gQq%Y`k=k|C(~}8p5#d6WI6~f-c)s>{c1%dn zdDp(8hH;coM@~l>`3^pKIl?gB=7otP9vW z?QIDZgI3HB1ma)%hbE$v5q-a8eiDq9eY2O!Bjy}UNB$EDUG@`q5f%3kci6XFmJMTA`a3%lzh3T`kb@@n7x9Sj&DfkTtOQ=vnw$98Fv2?Uoqs)2&b#-88| zoB4pkF$r%uA4`R3P{Il2VO_itL#h;8TO};33*y z?yG3v*XH0MXjNRtMC1qG!|>gw&=q_BysB||r0C!zoMLI%Ui8!W_x53r@ zIS5W=uT07zEv8JQw;;AR3k!N>+kRMn1yA(fpeUhxqN{3S+Yxuv%qj!)8u7by+B~R; zumUGuLx(6H=$1JXq|aBU+1mciy2;i$Yz=<78B}Y~*eGlkZ^(c(v=n*mb5(Lvk$Osf zzk_Ozze;V}m``2uLP6SJWpMix5*-l0oxc8P*wWm@KnPJ$X87SOMIi+v6}VOok4bRs zeTfl1`Y8DWTRAjIpC>dvsno~=kDhqfGUxXV7g%MwD=F!RZ(h7^rO@D(eP-a8k+QFHPS66%>0#10IjiLSFEu1qwz}}e;7GlOu5yY+ zi-^ivV|6QIni$UE8_hU_RkXvJ9pS6J;kgR6IzrRPbephN;0P2ue9^v#KHi}{Qi4+- zsxMN`MKF7+a%rUO{1X^a z`tyr}gr{4e=(ABuI^aBPom-xPriZ8Bj%cy9);@F5LFr}pGsJDjm^)wa=W4{nx4&`cl@=4 zXGIKks8IV?RK6`iuZmPagmH71YeFqCgHY(w+jMeipnp3`RK@qkx!=?g7#h*_<9D6X zXHO$*DDL+gXLgH2g5oouSGJ*B1EKq3X8CU;$Q*ylASwH@G(%<)NdB&W?&BJ))xOh? zq`wrFk#Qf$5{W?#m|GvALD2{?@nSpVr1>xYDbyC=8q#x8Jngd+dSG$pCQD^*2#a3_ zof+>bOSrK#1jWnXwWr0OgKSOqzDcyOG=#)YfNV`op~+71wT8jk5)7t$P!fww4H@xj zpej>SSh6vEts$_oL<$qj02oLXg|9ULh9E=2*ZK|imUzKGHZlE5=7N80W{OJIh<|KU zlo_uDa%E;ojF*?-!Lza`ijG&8(8f#uBgsl82V!HH{VmB)His|8oM2iM6K@5YXHo8# zWG7Ptsj?{lk>n;b10}I2_enC7iG#3Mlz&SKka>XiSP~4shsAS|ErSN|B3LkuzDLC~ zk)?xz@eo-s4F{&eW8;w}x~UvRtMcMv0FR zupr(uFBu8z4F;K?$)2c$JoAl)#77?(9`u$T|A_Aq8!yOw^F!j}H`tHmh6L0#2Id8I zO@MVkT_fO2e2<{`P39XN3EzJ3DX41*TnWlD-TMpb>I08~x(2|tcpmZbUqEjO@&DF! zkCB^T8-h$)*txHEXjOP&=UyAP$8BdANJqrE;A~G@s#rK2wCc&f< zs4UL@@k$aBc=+af%o1PC_I`lg;^N;ye0^Xvyk`M2G}aq*vQ3jcVTrGXdz~Qfu=rQ} z_SkqY{AUibMK5Owqunyopm4+?NgeW!9%$Q0Z6Fa8SaKru}&KTL!(L<_5fYP@J#DnCesH>5?$ zfmVn%Bt^-A@HaAGqHx2_zeLFaUWhCN4sd_Bauoivk~tW1^fPF0ho_}C&V5|rnEFDyIq|7vJ z;tAjZXnV?v3d;$zpX9*i5&d+BrlPuHODv?8g_QEAq$(;_x#E)Z5#N>p7)+bw&dpn3 z2^3!;hWJHy96-Fe%(D}2k+9vn14vY!!oR)}%K1ocV}XO+e_B^u#ILwT5QorT&5n}oNP9-=|jCA&@TIa*8ACCRFw_(UFJp!meizYhzTnj1f)dIR+-P!pA2eepbqwK~xP z3{&xm#`4Q;Q)fJX4=KdT$#V?u!{fhYlH-@(Mh^+XLIv?8Kol0nz(SB=g;MiLY%2i- z3$8=~uhe`jClG$oenOWwJ^-{i6Evl#uOaZ%d_vouSUsZKzJSM>%ypT|8#}<`w28Y) zTU1{*R*yL26NTKm@HQcqed(}$p?iCBAN}3Z1eSe)BUuO`m9D~6S4_!+Qd>$NJ627J z<3gDa!q%wLE2cj!)fsVfEks*ZpIPC9zCVAVo8!>0$FgoBL);LV<9*)apS)DMEY=2a zj?CTOydid23&3<7&>CF;3+rCTjygUCxFrF~19a2oklfkP%AA!d-_NmilZ$ zbzUlCX&or1J*f{9Ac_S?O;=JEuI}ldVoMqV+cbN7T>W~Cd#{xCBZ@cGSBbHEj0n(3 zeW!TzwYeC=JbDGp=^DKf?lDEwd=7g=)VvSrI<2xo-4wk7WcXdpwjg2zH(~p=`5elU zpji)Pn#+0>Wtz!)6ZJvD&Kw{YL_=hLZ!LTSWpNhlVsOHwRDvBmi)pB{@0eh3VP=0)RDu#ks>#9#T#0XgJ1 ztJ~S%Z5~=%v|9#&-jFxkdp>X;xq;qLH;i$9A|HZ6AE?6up?5!ke$db8dsus)*n5nQ zXV8+L_*65yrC2Cu(EP#5eCMUfxc6CC(b$QS8`a2Gb< zZ?t&8UkC$seLOBJ5S%Z{4d5y@I^wqsuoub$BPQ3s%Yfi7oG;|t;co+ok1i*<3zbX1z8TR^WY+=Na_vO;qncR+ETsKeP$`!G6oUu^$Q_Wte&YkT0%#&KDi;|>3-H*^tiKO*S-4aaOxA-38>zxkzIJuZ}PLL zHLkQfO{snpY~6X+aoSbaZNql4tgK^iOXjpaUZ3yu_$<+HvRW+R&kW_Hwhra&Zj2Dk zth2Y>SqhNT_hU7*KBOp|?y7h9xeR?j_4-?_x!MT_XzOq`yR3Mp_0mvfIMwU%)4H4; zCGQqZ4(g7gh4;igCpps71=)} z3%;zfy*yvq+*nm#o?Y$eEq0gqXF>d;`qc~p{|~Z05H>9xl3Z9{*WgIbWAoZ~PYrlk z_n4O2n#K=_hRfOMB$`TC>wf9Bxpy#8W6<7~M4Pi}>-I7F+;Zz6AHu#5I^-k^+d|;^ z#ao_P=px@3JR%V(ZlvcxCOYg_*P+GQSN@mr37t zZKO8b0S^a9D5OWyWK0bC$CHtKk=Tf55kYM?8E3MQZ`2~0cIlS#NzIWtPDGiY_R%+D z-El%U35JEx7nKe;4=_La3s0mOVZ=w0&dM8aNivt0^I$Yl1>66Wu?@DpNk7REtm-hw zyPq_e<_x@!ekV(_Nn^Do>+Df}86~tAy6<@~+C1yoe)V}j@AvXALP&=Q^d>`9-OSZ& z@;E&ZGamc)^iRo%yo6wFNGl^INcnO)1h74~s!10P^uFhpLegy@3+iYdr1<$Qd~W(( zeY!z@Tz-OpH+g+`h!=n+&?=HMH`om5CFB-#2Gx#bN(n}dlM!NoTSjd_+4~k(4b&0h z2(pD)hG_U|N(|PHLlS0y(1LCtFvSK-$6*7E?C3t zR2)y76|niAlXL;7222KG1NVVuz+xada1baC3<1IdpMf60b|7LLQ5=^fha~cM04C%J z6k?ERV6adi5E5N59PK;w0MZVmQ&5{w77!JkHymXEU<`>N41>-ZjyQl|3^5aQB-8{X zKxYpJh#?lF2|(uZA;1R;qictfqLm5{3HLxfW9}ivO$iG?KV$8EiSrA1`?5y@^n-uK z+artX4e&;A2JF=W{UDzq_NIWBL0#}SlyQQAZ;*R}!XMCkdU5VT8*m;-dvbA`L0ynH zym6a>Z*Y4*BD&-?r8uS1G6BW$-#_5zNj});9KBSz#H;jDR5ZW z7wX0&&O$gQfDihH4XgrG2qc2_fZ9U<wD z2>C+X_{4>!6{>-4hugD`s}!mc8!Nf|GyTbY=ZE}GBKkS}eslYaeD*2Z}ggi-k$p zVW2EWBMsL!Sj2gmE}h@$?`G$vTn*qx>PZuhiYeWllTq31ya&NSx(5%NViIRQ9p!xu z&%sDj@kzQt$H4%XD!s5t=9b$Mk%qb4x3SU^MZeAEakjDe7-eJdV!@fBBd?ikTlDn; zZjD5j46pAsJ(Ihs(q*+PDgXdDI5CT41XVf=dF&|iyz2o7JNxiOGSo0>We*VAHHAPH zesqe4VTDC0&v+P?4!dSJ3=~GCdcE(Pg3YgN_N?uww0gK$8qh_WVA?J-wcA$fb!;hj z7X@rBhozI;3v9JgrD8@G>R{PM(Y8mlmS6u9Dh$WHXfPID)mSWM876=34U8_-1u}y9 zjZrXKDx^T5qDBK+!sx@2isM>N;I3PzKx$T&jQk`yf3<z(8HjKqm~|9XU{O`w z=+~DreCP3Fd7WIx&Sj#ABaXSvkTM(Qc5_Cb?FxqpJxAAB$ygbVe6OQ2dP1o-`0UIS z^kVqYRdl~1?M=29vHDGdq@!x8EQrI9ct%-fp|>+?t~o1Tt)Y)cL6KjBXQl^!0D@-G zx_^xXAgdk=zr)I5 zoRuJM{lo>6dNa-D`asP&wW*7>>-mf0nZPpXJ5jXn>TX{&(_vw!Tap;@`_zrO{{!Lt zvULDJM^91bRLPhdEc$ad{vY&1WICW9i_wQv11;Lq(MI$0=fwRp805{EB~gjv-{8W3 z@b-V7S3%w?Y2SQ3%D)R!zWvej`O(^mmR#evS1~N%CeTnG*?IbE;9DEUan}XE(d%-b zPrK5CdHTR7lk*guam|}=-hNbop&)BNlcsy}-&w+=ENRlVnI;JC^BSt7FkAaFI9%{l zOcf)cX5WBdbru5&Dx;|OHQc2rQxDjafLVSib~~7?zjKu2i@M>(<|#CP<4_j04;d;` zqS+>^?kgm4L;=uWr4udU{fxxNsTCKssjUBHhf`Z7RXYQ~SC9IkSQ^Dvpi%KSfcr*N z=8jBHq@=U&`9G1r5e5?2do0hlhObg@wMMoe0iU^jfv1j@gdHBN7+KkNq3M?(RM+!G zRh7+#J1@__!c?%b6^^ByD+#FJkZB*T##fBOY2Iqq=`L`4i?uG)E)PZ^chBql+G6cn@@4saJhaB4!uLiA} z-gG`lEyYL~JrhlLCf3G^ybG$uKX|qM*E1E%EzDWG%1o(EoOkB&6`~I=l<;sd3Oqbo zj23qXH-LCe$m8>b7O@>jg-5>-<4zG1MM4_f^K8FAWVqy+49|aVR*21x6AQ|w`|zAv zH;iVqDsUOJ)Ln-SNYZ$(f>bzL^?JHS3RUPDUaB%IeO(WFO8;K+xrrA}g)vT!L$O=4 ziG-5d-HZ98GxYyP6YO}eVGIr9+is&wTnRJA0ky+go*6bEgrPJX+m zeRHnHJF!>K0w4aFo*YX9g}0y_5QcnGL;vrDh6FU>;9ml;!|{o9<9{FnWBZvcAk8)A{n`%pd~F2yL@O-t~I8Z;2%w3nyiNn?%1BMrsl0fcFts*mmLl z+ava^Y||Os!6n-~+2oCOZ{ z;;TfySE7&5h&2HI$vc=QvGsxa{yfC&X)-n33hrYBvO`t4$9iX*bJ9{TYb%A+xFl)* zYtj$sBpSkd;(+bc$IS`Wwa z?v7Jk$$TfWY4xbqzG{qRf%SVPu1+Iu?WTe3X~ubHB1c}dE87KygiHoP>Gh25xXsW)oeDD32u-X5({;$WWk}wMXT&sVlp5E}aRGbj6=5gxuWoQhz2D z{R?ZwETf8Q0$O8Jq-(NQ=M@DH)T^A)fTYda(#l`Sq}ClW}VO z#WKIT*DV@f?K~Oyp+#$*Is?^z*0`(HF^v@ut|mRvbW@`LtY!DA4xKw_zZqLy;9;-z zuY;igxXT|1CMB9(nR@kR3=8f}Ih{7E=juI3cP4$y2(95mXU(*0U?FE4vrM`oE0E2s zlFclV?PU<`O`~dDGNT}IG_E%UBFj@#lp=r)mJ7!?hq3HgN-&V(=YJ%*$6NrUO%wAo zA|*_W!uox``aFABNV!I;QM=)ve>DlA#6ex1s|=iD<%*fpgl5qAT`+Qg_hby28(!(N zKPb+CEZV`o#UoX%sx$MoTSJo_ggu;yKF zZH~#ozYL-S;9+62leFVwhQMQod@k!@D+bSDtjK}cu`GFH?xMt=T+}42O7*UX&|9V3 zYg_K?p?EhIRA8W9^GOxl%Ci?rI?cx`>zU$wkxshyTdT*&xq@2UQDsMK@YSxh`{!$Q zt^VI7w^yCkP1l>y6483t&6T=sov7WJ=gqaI>l*RpHR8<=Yt!qlFoE{ZNye`_e2-qA zPk%Z}YcjbHUkYhCi92gtCgl_oEU}F<5A#0F^0-z65{eUO3;siAmh^=)P5U<*V<`EV zAM?9pC)bE@WEWTQ&vCJQhM@xppjUWR8faA&zuy~nX_ya+&=`{-?>>t#-biX;+D~2U z)!3HJlIGC0fy%vKb^N6+_bV|^`57M2?T_pHE@mz`eyh{`r`B`NiSJMu+UK$iUBC4I zW+=}+9WJw`%;MzKbP;HCg<4NXQ|B_6j!-m%|3h?^907MGn={A!_hQjMpgs^kzPChu zRhF?9_n027Tz+ZQRnl-BRyIfc`~FgbW7EY@`cqG)MK1AUds(7>1Rq^3 zfA3A(?_w=Xp!>6CD#GmTeRaLnpq{k0g>=pq#pSZf>!u^U(czczLWxBUJgWyliC5|9 zkNl_-SqJ$(?#&=(PoZk+PsAqC4ETVzuTM5#*fgP+*R*<@e+DW+gV{(B6dDraOY?K{6x#E z&bv_I`lHMo=jjOlOX*XwVN~@|H<{(jz$^R&)I}OYrDaD|$8keg4nw8&3tnobG*)R9 z$C^@Bpd?u(SLM>y&v=_|)1_Mg)U&@#R}puYf}^d@#FKD5s=$S zLOf5$RC6L|S^JAv7QuYQiKNrZD(=|5O-8Hka3!_58oTqNT!qZZ<10(*+|zMtYmJ`k z6*&nR3$5c)Ivz7O-(a;O~jne#sjeo0jSUX`1>b8c82V)FNXfYk1=uXDZ z>UxdUr3S|{3KBZF2|GL7rzTiCq1C&O8ng{1axosB0jFg9tTs_HB@-J6cBXJ>&pevG z6xzN^$=@2u;w{gCh@T&;7YV^6I|KEi12<|oEEsnqU+eMu7GlZw-`Gfr6lCS072x;A zzeqwZp3dIgyW#XhC6>0nVbAWVXT1A(To#cs%!K2s)9L}gUoVm|_2?nj8$zw8-=G|9 z1CN`9XQP4!Tm!!w128K|FHMRE%3aXv*!JRR&;Cb#1%8p#l{cr_%a2aNvCofsK;Yk) zb0d?JG!;zavik=8w1yvkezv9Q-@@)JIq@;^pd`{t{$M?Fx`>F7{%3cMt4SvcfVyz8AISy zLwMLx=Ouelgh^^YHRy~Wr6rlNy6+}V7VtH7R>b0aN=1?7pC+<6f`R}@J|?C(JV~*l zEhS-*f}0y^Qj_}rd}Ws~Yzp`BLxgs*pbUjan>un{Rx;BWnk#dV#w~%PUH~0g?R8>^ ze3fD!mM}97eTX%vgE3d>yOe+yfc$3`T>JyC;;?qpjZhO#zu~=BMS$xWLRwyE+!+)R zMo|{Rq$>vI)Ibf8)I*%B7X8p{yNjvjXyh0X_vE?!i){F7!nE_1Xv(jBzxWYwn#I|f zb&i(NzJ5p?#v?o?K85&;$pzBJUIe^oJHENVdpIC!#t=AGao~t&LRi}@{)SJQnKJBz z`uZ!G{p>ajwhELXhB*;I@v&bEz|%N$_Y7B;ePN8Ht++S;=jcD}eM>KpfY-IU;fe?a zG=g2bGTcE^dp<=;P*1Zuveew%wMt`{hd&nM7QAFxu|74g&H%3@^e#c z=1=&-S%+SZrXxd|^%#Y>Z+&WfM^x(00g zV@{J6sbh+fO}D?z?y6~dsy5K?mVdl874qom;hANV@9$$TO3Bz4-wJn9_*Cj!#e}?J zgz0K_iA0j-|6t=^*1FDIyOeCCo|n*jd1;_$S0kjo66ZQCC%!;_r> z{pk1lSrNR2#J4FWMCtr()oERlGRCsQdu@wyNH#s`H(P3_`eLYS!eW!Bxg^9vWAk8? z@L$HN^s!G1H$>Ii_F2{kHWkBMa-$SHev#54$~6a?)Dp#QO>BOilXwp$L$v7);91H}8Ut)G6#G%!005;4p%29^qGRXJ`hGr^((+Mox4@oXq z325qb!Yjf!drw7i+xIZC?5(a-OKaI0t^2Q)?mUs^>T-nE^emQ!fyEDtQ+i4~t`k{D zL7Z$1m1uWU89lxkV}}0tfkwU!+_PQAp2MLnk}k(pEVYbha|rg0tA~iMRqfrK2Sn}% zFw7WU2_nkFfRE7RWB z0-|`hIXqONP{Y`=J(^9AC!ix14-V3XcAA4w%I6pJ#!y`To;{?boRR;X81tRi=i$Vz zl3^btaOar6S8KcW(uvidp_8cGJ}YGtxaN+#$SFU0>e>0+T9U*qj+KE5%VqvO6G zJm$5Ss?_U%ei`we){OImOwPCY!BPZ{-qCSb_;8!eL^V`J+vL- zg}ghBMQ%h(p8Kq+^9VVzsUs&115o*A)7w7|&(CE{$@>T@WAEmKr^on5o2eozrhk?T zHNc&As};Gc$5WL>ip{7E@Kl7?s}c|9k_7|G76GPa*x*r`I4|3PswyaBMIM_nEd%UZ z8d>hWKUNxqu0IDMRZ1IzV0;s}$){F2*CM1 z@ZA|SJ>R>|cF0@lE><#?SD^+<{$=0kuB5>rK}BVJ%}BA1X-|i=JIz{ccQ+kLDbyIZ zwBEY2O*ZX9w6z$SRNdVl`;$Tt8QuaXq~ji_A(N+kXGv3<$EVfPlhvBAVTzIvjc!Ag zI?nAJ(Q<@SzPI@sM?i2s?HALZ_=#T8qSj;@(_IxX2SxEcrZRjf@C7NvId`?NP3sS_ z%2q0tWT}e&2<&WKpoIyu)qxUFNU13DYI%$Bx|`&Z3z! z5iU}*LvE(S!2k&;hlYI^F>0vObbzaRk_pcy3gX6!_=jwzVOg4cmQ`zZS)*H zfS&LtLJ_ny@f58WJ>#vq{&Kd5naNFp#sI+Oo5>f(VmecJU;(e1K>rthwI$3mbnT*L zCuS{CX(Gnww1@hHU5oR~C97^V6^mgb547Uo^Grt#VdQe<)psX{A~s7;$O4q&!M8v- z-9%c;g)l82Dg}W> zYrPPg9$7@v6`lSiAakUPqZ^v>5bp?WxvC#=cR%UOU=lP69y}MwJpcu}s?D=$79DEw>_jpQoo0t*2D$sh>tXqNTL_DD^m@ROaBi7x%tE8$pWQ{>|O(t ze3Kg5-sU=c3$pLUA-_1VrrO$ne#FGYWiGQ?T+rRR&*Xu@{!G9u=-hBn6xqwDOZx&ZAm;>f!>Y z%HmRsQ9DA^r37oUrNJADU$rKC3C+p-8JH#NM0DL-psL#07ZATC(rnclzDl>%@lfi+ zLb2!kV)r4`hhv`<2|22O)*IX_C#BYec;lsZ59W5e;ld~v3hv^}VFEsPQO}`k*N!|R zJoO|^o=Xfq7sWg)4nr>os1t&U$fV0tMdSt(Fma}4S48xZE$G;|Cw2L`3Rl)Y<{R+; z@Zri5eO6%y$(Dr`n{+#x$`|=`8 z{UR|MM>l-^O*g4wOCBLsKY>Q$JDQ(((E}V}@pkPI6|QJH(|ZBW(~FPE5y96V`d`1% z+L>?lY;DF}ra+WfP=jdh|0i z()bK6KLi|F(%Gl|HCt(xaCt%Onk-9A5i{bc81z#hoI0m4=!RnDDohCzRpS+-)7W5QN4DQY68Zs#Um zdfe7BwX;)SZ;zdvUd_1;pHOZuG0YUV5I_c;zU?CigF592pf5VxZ|tLaeiSB@rZ zyFS7E9G0t2evb|j(RY6ZRe9hx!^yucIWA}kJggCY01#w<=~w=>Jw3m{lAU6(9$)I!xo6gkY!f?Ei8Buc-TANn!#W#>~VP6P3?!M0cQ)9B0FZ@x5S_`}OM zM7Sda7W4jv1Vn1PL{@6&e4QDWS?(H%FsC0-#EWvv3@AD6dM_}gWM1fD6J;*YY>Am& z^w#!B{o_hG`ib}jRSkh7a?_9xw+82-Hx6nJA2TKQn>rf$&Cg+(khEX#7psr0_15uj zDE_)OS6LzN2-fgAt9iZG1Z6_3Lb$i+_Y_sQUhikyrJ|`NGjwEC(HA)!8o;i{HHYw< z+L5Z(Bvy-2>O{nNkYww6Wn&F29XA9v{RW;7Ok;=M*3dQq^b9&{9DB?{ZkND+8EMx# zs5+fIX>20vm(KK~cs6F1vs+C`wA88MQ?N5kqEp%C?=^m1vSrnn^eA3i z)Zyn;ap-5M;I_K!UN0?{jHN7S@1lqwcbY#gFsxEf%0d_F;d*-XYE!Ve&xh z7{_Pn299UDC?c|FQY#Gk0tNBMa?;EchWgf)zgjIQ$iQHU2&D6Rto|!eLBll*L?Y8e4vd^ zg~KpBnG|hF_j|Eilla7gVP!Y;$b~+^)tAKjt9it&XQF6RF`5e_`Qio3tRA|~&blfd z@0QF6+1i>Ld{Hfdpupib%rJv_>t+HS-yefdSM4$84jv}s<2J55)l!~r4PHA~kKg9o zu)EV(u$m}WJ6GIW1s7|w8b+QYy4tDn2VEQZ%=m3?RaWi>dKF-gJylz7t!VUbB9ZBMJ3BGV0+vQ z0bVC&d(k@BkZ*Iji*A3_tR-%JTt+MJ;j0#JOWI~-+V=QpomG-{v2g&S3X_#u{KEt* z_ZK~*U(x)1w*-1YlBaMuHb1qCN5oHjc(o39bA!{i7F8j>LHd9+75~H8_273(>@P)e zNPZt&=T?wfwEytWmGVi9gPxUva<)JLa}WSsu&dc?*-JD!bV!+0a`ey0-V>iIr4o5A zjW@M2bM~=IQ{OL?biCb46;yw2kfOX>6J{53A!!3n-Pp?QAdlK{&P~PYs@=`cM{QCa z)2rNLJ{xVEM2l)uS4W-q))jo=k0^294>7QE{AWNg9gtQEOqjoYrQeoF|IRTKp1VHL z=9}GU#YDs^WA6#0htr4=eQ|8Tv@jPPYLd-Ljt~u|5apr`4pO#9w}5pT2QdP+(Y5ww zBOg)}(LL?L&&sX;V2PTB#1~1*1cTpE9F3?t*^3^VPI%=nWyryuYCN%2tkkZEry=WsB9dA}^deF=Ma?e< zx>+(Y`S7>I*VnGcWL$~d5aFgZJrt_Lh)*_TS zNu6ceU+y=8(&kV;1`;cr<_Yf(r8dH*mFtPpOt7tr&Hc0plM3;pW%IO%gk#sjH)m&cGXO;va)((VA#~tzL&%4mlFI)At#2^UXEm35m{A2s zK0dkd%j3l!Lf@(`Pa3tlXMS6EQ1>=5BbL~l%T z>T#zHx3g%Z5$T8AJ_SR`;8&LK8eVms2~?BO(ADi3`=RRD zQ4JB3YE9Uj#qq7LXy3nckSLLY@%%=fbpSy5`x30uRZcjmqOWR5ILUO-T{D};wp+X0 zJ@EA!<#;_X`Apaa&~2%h*mbA=7B^I;#{O^O%R`oA<;=AP)k=X?FQjee94?$Vc8oD} zsfeVH8BO-V%EpLt`Dr#nwYczF66P(ET4g^$x5&i>#S%4z#It?A-S2#DG}g^dQ&u&&*e zJh=4s1ujasoFzPzu~G!FR{v5iSj5A=dn22&y2ZC|DkveT00&Dhy`ce0dlj;{L2*@6 zPQsK=c}W&3nRCP|ch*{fetQooSDAYM=sb)6qVX{Mt!wAGlV@Q&ZQWs}tZp&E$Vt{f zb04uJ^rZ5zc!!4_xtm5u?NRX<)}5YKmLzQDDM*p9Om7;kd3W=o)4WdixqewT3ng@B zts;h#fv!e-4eRHt9?i_5V|z7Ztl3J%X>SF0XA9nb(Pm%f3@%gj0QFHN+1tD5Uc-HvoO?bz<5^N9l>>EN*4K=qU@VXS|VecHF)RvN-a_!Dbj88mWP6?lVUCWu)b?f_6Pp-*|5qM{Bo#{S>zQ zDS+{o=-p=xOyQcmVX$QYJMhH{P1GE=?j(+$8@jJ3C7Zy_!#8;j<*36FyV+W=89AD@ zM`SC#vTCm5M5)v&vRyvFi6=`Vd%hPxKiA+EQzYm99t(JNNV%+aAAS5J$!KOFprQu5 zbeC~RininExO)ZSB#(YuzGr{q5HNTN1(@=cjk;p>xB5d(>7WU=9pCRg%ZEq>8YR!U1QH;D0`aGK@>Y>PajEz zLDNU(iI*?)8Ms5Npp|a!{v0he;+qB`NUK8VFH+-5Y$z%E85lJ^pIyX>=kLH_NmOp4 ze&GwbF)7q4R3xmHSU@e*Lb`9o#~6B@ZFR!f*K-s+FB8J?Dd|G^^)Dq_d>*HFZo9P% zl34!t9VCZ!Sx&AuEMW9+Fq-r88k?y^NswfJdXmXu$Tk2B@sAL;7>91x!RDR4@Yx~nWyCA zuxr7jzX7pe*<}yR$Qx6P;M6|sjjz)Nh|~ zijWg%9W-IT+UHNk52(n&tiom?nnVszVelYb|6Dmee(q%o_arZ!rPAnn%jD#=e|vW@ z&?;9f2hw4M$1nz9cEghc@)O9wB8TBP9?=0?q{=K&ci?t??ZEk>XY5q6PsOKBIQa>(g=CJ zF(kh4>~B{{+L)bXs*zug8K^c{k4>^P+EHME#!i9`4}3pXYPPUcxLK>F_b@}|gSyP; zU|6{5Ji7;teoMkacP-!jhK89l2mzmImK+YJQrT;zNt>WunovcvAMEp>mduTMpEG91c7e-rs;d7J-`9^6EJ~ApE z*ktWH?GeriIl&2bn#VkbJsJE&sm)vU%96Wi%T+>xW5Qy=Z%onmBp%5DFudb{(Xp|m zAcV7Zljgf|1RtwDhU(-5QQblj8%3?I#nARa9A;gNIfC!8#dbE$DR+xOxf)}Pn!|eO zZr$h(bo6#0BpxqtdLjFtE)Nk$0(L;w(R$;-;1Ksn8kF{$6%LU(cIk5WEpO%HxSS!Z zDPobQCSAs=pUvrL4ncQ~`9ow&>FWWGR$bM4wc_Ev;-S6r;jgY+3+ZCT7m4mqlSAd|N&)Ut7TX5wscifEC1A0#@Whub`k%&b zDpFD^Es`f`)tskT(g-`^vCY2r^~sju!L_;}TTJEk1*VI$IOQ=!walYGo3KQPS6k?8 zW=@?6UsiH1E{lIQA;>3YSXEGOR?nvu`^TeG{fVuh z=VxJo-J(C2uEul2B$;({$DCQF&$R^J@{|@YX?~j6F=jeV?xnprtK z?C5yIbSs^8%Ko``sqVtQY*qTu`#muR0hLKQ6BB2bM3RK~;vwqG=u^M8qudv-%}O=ot@Ndw+V31O^kniK&d$ztaOG`cd(bVCpx3L-A?0MEy zn(jY0UwQgpv7O^|e&OZ;vuSp&5YHkb%>EZ@&GpAI} zS~tERuqB2tLJviftsaEduxjy@~8dnxVyPpXglZ+ug=rbO+Lo{4lKkYD{V)sT=W~~LA z1uMk;J)!#U74!kzW!EeQaEnO{xUlt95OmYFVlSemyXBhP&MJ} z=q;|kpkdIhu3OktmE%*X#(oqNLP9aKkI|{2T>lP%gZO8OUFHkzRfm=rt{RPBWuU)S zIfu1xVFQougKRJK!COzAU%#Q8h8ka~_u>IJiq3&rnJ+3SEE;sxfyajJPXL9Z*dns< z?zI;m?0x-;R`PPhtX3u^#We8fSa@HsF49jkN^uB-jm_!IKmC;Go0kQ;4F(Z=p?m|* zWIo;TJ3HaY59l(Q{mcbcckR>F+cDK!nFXYchr{rX=PSm_e9Fqd9xn=<5#)Oc9N1%V z|An=CjL{?t)CAnNIcTbAN44rE)5%)UR`@ zQU}j#RC5~75u3%xx&S3pKgK^yCC4Up2(H6L5TBO5$qy|-5w~2rozXR9rD7g=PVG<& zxC6klRM(UAJbzqK7(SF?Zu=oQlq|iadbbcVqu9Et%Q1 zW`##EHvEkHO+06;T7vk_MCKVt^G6ak-J!&ufTO$*?^}O0rbH-NFmJhHUQX`FukTS{ zQ(!n979e{kM;S1Wy^tj)zcE;sh>FI$8jPxy;3|T`M*7zr#gy!?eWa!M8XOi@u+;c% zI^(8paK*ovI=GZRzY#VaoRQyb9PoqpK#`ck!0dtFWCy=mH-YIPsZ%qM9 z5f=@S)4oUbVrnPo&h+FLcs#iqip`)47rnnjped10D=iMUE)tyg8H;_y4EaSt{rTWGb?xs0VY{1_4ES9*0QV|H+# zKgRTgY9$D~GxXFbvy>#7D=&FBH7Io`Oygmxb9S-yjW{JZPZC9QJRelO5f4&76E_&n z{@%LR>*bQXl+p)gEH?zE1=cDQE)mG_@wwqf!%)I6_DhWOiN2FVyoCi+Y zKnCLvfI)Y_kMI5BP`yI{O1I-ZExf54$J@Z4OO7M^@38eKM4j5pZKtKRtBZ6C%wjnZ1S1QvKoz`tFmKx``AdWN{YMg|K67cHIKQp?U45l}qpPAWL zSqrL@)-!O-PV_Xko6Bm7vt4u=^=7h`zc-gVQnfM{)K7KiaV$%#U=pvfe{8%z9?kRk zb-XOEXVYOv*U47r9p?3H#d8rAuN&~K!fPQj?nl2>1J%Xwv+qYy++=4&orA0k@2n0H zJJ+J^4}G}c=i%>it+WN+#*%V7S>RrIHO?kr{@nX;6gP6-hY%@-rhGSNCwCI$U(Ej% zU*AalW`|}8HB^id<1Cz*c#7xivCWqGwgCAkKq}e6!V`z%7t49)PFpnkIXar~EgKF+9s&~fKJiO<9!pTP!N5lqVVnn-n$-W=U8%^JW^66Wj>$aEcgMWo7~f=ys`V{uM{bDW5F{v=m-h zfyi(n5F11?tD^7c&XQhU-nDI^_!f?sxbe0Ri2FskR~UGRtg5UE5cb2x6CVMLiEG~A z5#zQ8a#>*o5zOLIQTl!<$Qmv_4#Tk)z*t7LJ2RCUpMmo>w!$RQJEjJ}t z*mm@ET%-=uxDo2eIrgg(_q2s_LD32u(NWc7D3=2SDU0BHl;gE1leEkcQKigkEMRn; zk_P-uNK1bNLOscZQ-)9vx8y-^GA;hSEJ*Rr9wh}h?US5P#%@xQ-HS#!*Sp~*|H(m3 zTl}!og5iBgB?y~$fsMVt!~n*hfD`Rp+hLi%30?V+(1Y1lRG*s{N7!cj;0A=s~PP|8}0;!Wic!t>IgIcUp{ZJd^T)Q zCIum7DL3T!gdh`w>$yddRVBVq-r4t&Vyf)6S@?quTiU(pwz+EYP?x@gF2Ny z>prST)eUwPuCa`!4hNp!gf0;B&_Fmqg_DX0vANd(2OIm4WtMp^x4OOn=zg!I>bPob zQ>lyGF+bZd6gl9#UxPacU$0DT)1vXXk=Y9lo*NN$ zF2tM>f1R%X-v^v?VmW26{?R-bf#FC|xnn-%I^_=$4bS3O>M*tjE;=(oc6IGBEPYhS zF$@l#P`c~}<+@`&GAX{2=44#6%i%ByY>FhCbvUaV6xy%&(0Ihx#9rdgF7JWvXlhOq zm0xa@wi%LIzuUaVlc;eb9&lEs@Y(*QfE~7{{k14aZb<*w^b3xk?#fy^4Lg!^UQVsY zgUF&Bv9eEJT)W1#-Fi~8tij2tm>4sR&Uo zg480J4<4Yd*6%hNdzT;YedaOew^VXJOk6FBNm_IuxF#Q2WmiI^awjTL_$3}n>@=oG zDU7yLRS3J1`;vV49DlCk*TGP-_YuxvsQP<^fRTZlbM7N{sNWnO`#7=>aC?c|u#slX z{!%<$+Sj?AZ(0%@fH7ZlYl0b9{3i^_yc>A&yrAYKKDz)6&`*Gp%rI2yD`ZH@SLu%g zW3GUwg0Abn;Z(>qNA7|0vaYDCvo61`8%|PGnpk`>=i9d%l+-(F;%kM_DQ;<%`HXWo z%Z^tgekQa$s36kG+f5T4@E7gIfEZec8S#j0+O?}ZoE|1!oL2QlX-bv>hRi`8rpiW% zroVoXlV<6Ub8CaeQ7oy_rF_ggOy`Q`yz7Roswg%&nr2unSQ8Syi_Ba9lml$qYBM+< zBFjn2*QuILR7(rsUS{h%40c$~EUKfvLK7gn(T|({ba{}GG6FtlH9b{#@{7G-jr}UR ztE!Fc&R8qmf+cOHFDbyYOC8R;!!{tE!AGIfqGIN3}z#*TNIiw3fq~wFIGJ z2|Eg=;t2z#`pkO*HZrFsZ@q8W67G>1G_7koJ51gLOx?twY^vL z`4MD<)a*H;+nU)Tyf|F|&!S;Lkm)p@rz`m2a8lT049A?eyuafw=xHDHHD+IKJ#>$l zrhcC=J|4f2g@UrijI7QLGrU`niz$|elW51%pr=7|@wFlD^b|bg*LOF^q6pK>O^T{p z9{i2I&@RLltj4evrwYZ#NG!6){9P@I%BnFRjqordmwJ@~yN_bU02O?Uj0T``{=$8Q z0q0Sa#hZ~!O|Eg&OPhkCebODm8W~riCC4njTkS(v4Z0cV>PnyY+Q3Wr3R4Ri*$Uqe)diM+ zxpOp-O^(Wto1U=RdS(LV%qG5D1u(4_ex-zY5ty7{cehE2G!!e493A} zX7-1v{>Q$c-}K41-tOucQl~|=00@JJwQRW{p1;VrEd(=~X-{ErVlP3X(Vn!OnFt&@ z(`BHq6_%es_#IZA83GV|!m$Y9`+Wwl2_t(NyKM^&iwhZAGzNy(J9H5AV)BLhfWCAz zE45oc`g5)0jiZ(~0_g}PA>>*}%>Wzdud}!p`R#=iL9_QzJ61>5%P#3o9up-2fkD(a zvAyYj^6+6y8M@$!{zl|K2Wo#h{9}xSyHGUqxtK-?1K=3{U#C}ZKROanP;vL>d2yNN@jhuuK3>|U494!20~i{pIl&Px|4;tSoI?T zFuUVHcvlha>ql}xJV3am21XmTH(9|8Uqail7cjNK0{JbY5BN}#>9n^rT9B{{_oQz$ zL9YkM_bs`>&W7*_A1+fNVeI5cylAEH_alxN|?YI3S>^N!g;WhZ$WCd-I*K(wu zmBg=Y?KQtqBg+myZy&|SY(RR(K@Wlxrb1BewX$JfVFsBd<@Y;gIW_AI_mDe7&4!U< zJzWH-?l{bFpwm=hU%UXkAa!xE<5UukaIDecj_A3#Fmx7LVjK7RTA)uc;$|aD zD&)REpG^4;olNCmg1K|*3H_oz)4k(F&_3-tloCrTSKIkno*tlD+wzfLD zFwG-WwF*^kESoB}tJ<3nsoFML$61HBlmpHfkf6vM1>ppAabg*u$^5xV8EC=c$^Bxt zk%*v4^<)1H_BB)l11B7QbbI!!aPfZRaJZOU|09r1rzg9pNnnTyMIn&_IM+KG9%3Ik zT%kRuw7L!SnI!Z~ghDNJy}wy!P(O4(@qc?qBbjP8xjhAUd@Fw;4ekhu8)$cVpHRi` zEQHH{@hw;4s^4W$5Br4A(gO4`s(^#v1wKBY%r(SIs@H0-{9nIvdAp3iijP1^yV@~` zRw{5H=vJ+M$Q+0c5%(n75UkX(W_mzM*lgF^qY7=k^&}CiH#;9YP;G_2MN4BuLwi8; z?gq@>OF*lHwDNi&XN^xS9Dnfyc?T!wMG!f|wxe#v;0p_#Vm*SmgMLBs9dNb5iw|)} z8;yp}4xWY0-F^54b4)Q$8;E0R%%GVHvfW+NYFoG&d8ZSLo^nP)%u>MW2 z{&zodW-+3mHg(b~wa>^a$pPY|nJklq2oFX0ao$@gVpBmIKVB(nQ{IpnB{u)W984q1 zKM;8iyAk8i312gYH8+aCViwSdWi1duIACqY#YwQgv5yi&&5`t5&qQGPh;-RgC3!*Hre|Qou#Hl66Wq>V{}G z1KM!EpQ$G%mv0*&%M;TLy8etdm@Pt1_)YT;?vC>X@rC~d{1peIB%%!Zj^j?y1vak- zt~kQDL*rEwbhDIzvIAT%BkoKfZdHss9ivBb-zgriw7-rp>V_nGkZ*2`AaRgb3VR~E z$fBd$D%UEe#63SSkdRsCJwqdMFO#w+4ec$nKiSEt^-qa#@j6cOnDyd+>1V?aSt}F1 z#Q8nI;Dw4OfG7~@DOZGA7c$o}OQH`Ooo{%m@c7Fe7hbM7M#$paU3#DNJ~QnHjFZy5 zPwCX${Ie%QlyqAOi3_>sUHNkyRq<2fk*8LWkDpJtWY!^FCtMs2o2zsWm# zJKS>iA|B$c^tU@!S3kt896S6FgIs~>S=%Xyc#psi2#H_o4q=pfkK@?B2rTB~lc+~~ z2PfD1Npn*(GaC!*;>yypvRYUY`jK&w12Nfa)zvInNlOjeYP&^eFBy>Vnw0mn_$sj5UO2LrxW89)R?I>HW!Pg52 zRX8Wd=jA2Nu5I415R1b0U?UcxPURF+S{tVJc?af$Ga)tji`n|`T8kjtq2By$A`>7O zyg%m%c%1Boh=@gR79sP_U&9bOx*Umn6;(JeAG!6()nhpFLYaCe54i6@0ta3NHYRbtz} zaH;uvSKmK!b_x9<2(6h}>8MAHiI-zbd}iI8rruJZ0{6;D;)=t1$$XjM>1s?k8z=yW zljHGxE1%f)M+laZ+()jWdw5ioO&o=A2|MYn!+PTPzguD6mx80yTsVDvb{ji!NI#5h z341^sD_JT69X84s_2O+XCuOsdPcN}CzG{S+E=`PJ`>nf?wjp7tF=z`%cIe8EgPQV- zZ&G`APCja|zrgGPE)PMj#va2OV(TRb=}VI%L4VT6J~}btB;jcz%`CH>aabNu zu?delo8Fi2Ou@q<0rszK_S(x?1qJTLwrZa#Td-4i-bYEX+j zP4{vprru{|f+vL(7ku=xi4M%i>{-7G4>vj6$l}xV@AK}0GP|mmKu98m{rS|0H1@qd zXl*4-(nCe>6KLc-(0LWrKjLRc18DKC_h2!C6CvjP3uLa$x9a_0 zZGLgqdIGh8ig^6h*xqUEL|kN5ATlz?R^*2dcZH8F(4`7kLWZFYsq+I)94GJ{ob~I@ z>;BzsezVRik>w;*I>!bXoV7Rxej8Q)fq>=dHoqBImitIBnCsh|cdgt1R}jT!SuAj{ zBKK&*%g)@b2eNP~|7a`sd@z|RE3g4Ynixl&GHxELC)BRxS5K}g0%d)!;A_Z%AVzk4 zX3ot8NmPm=(z%L3O`LfYOy1gNU?AvbV% z)H}kI2^=k)smZ9R!xGBJEK%G0BzS1&;kg7Dz{(ogDrFd%CBO5*vCmwSFrVG;P@WGBj-v`Ye7b zV5%tU0{R@3wUKDQ2xsN0X~}9yla(QBQ+tU)V4-OUXT@?;dOblNpoF0xkxq$cC2|A! zx%}Gd3N?LM<1NT$1#{E*QT;?g;K9zJ7m-V&I5L1N{!E+rT7am44W>4L=f?AkOs>Jm z%jQP%Q~Gg$wL=SwXOV%0OBjoQ!9b(May~#G#@V-l*+UtjjuOX8P)!gH4HRl~wk3-a z3KNRkLqNSs_$h<%D$)fVKBC+r*`eAYi$`-DgODQI4dY$`A%Hl8u-Z>a_6nw&fB-;5 z?Wg$pmi2fJP0UWr4DNBZ0(x$uxe&=R?bb#eyw@`TYek zR0KXpjek$=H3uO;evR$rgZ?Bjxqx`}?fqcTLhRjv{*3C?gYFco{|xHw2;`95#RKsH z+>*y1#ejYD@4g(a-#~pP_u4{zrW?JX`{|(^Z-99V?9zhR4p%+^dCTsaGF*82{*c`& z^?yS9u|YjJf$#xtvHb|*XlmjYsY#z0{ZgPFL_kWQK4W_kp*(XAJ^gxrkd9xVxaD>^ zKu8#1SIN#h7^KL08^E%|G%!H8Wp*h+c8G4RLF7=_C3c||ufhBb`aLsy4Z-lq>@s^9 zKo~&8B-)7Plf}f(wZQNJ8u-L^fxT?d+~T`9g`1#-ygVt!ce#(3`@$q9ANY?9#i`3=crPPleML z;#n*4oHaytEM@Ohio22^A>z~2;>i<+#}vH+ifhJ&^-|Egfq&hy+p8W)r1EC2D@H?~vr2$=7+A}as zbQ&FmI@-TP$lBi~fg-7zNKEZO?@*7!k&?b|V8=s|wUbJ7smRMNrjm-Ca``c{Z_=Y;<-d7zD^0{1eCFY_U;l1+=a+C z_I#LrM)6Exz6oe9NVTZ7aha+h81wv0z^LXWahs$6+Wq($lo_-cRH+08x&$=C)*m2a z=@u}4&DkTpkFc_n_p^IFfShbKEUpnW@xWBKwntZU(oYDVDF%_H-6rbpF1F55c@q4 zpXjsnL^~U?-{7-a{I(!pxTmK4KNT8R-(@CIALRVDKwSurhPz!5uOzu@e!6~-6TbAo zT~LlNry=}&K<~V>u>3y-yfa@sPwp=d=Z-H9z9i>xFD`yBG=n(`wssMyauq9WIf^w- zK4M+NU)HVng`6v1D5uc5sO7ZR21~ggf0tBW49l&r#r&c{@d6y-ZYd72K-|GjwfGT1 zdB7aOPBZusVLmo@keu5Hkeu6ZAUow&54zP>FS;RLT|l?M9m!``{H}r8@lIKDwfwpP zM(wu1?HX^s9~I*tn{2?_P>!Ip2Dvp9E3GwZx`*AeZWSMzM_1RDiFz)2@ShdFbjF|8 zQmH5}L&{+v`KNxTL1GBPFJdpEFL-M>=+BD%x+mMoT^%p@Yab0=`2xk8s9We;UPfw; zrjBBd{v=%aa%45>QDJ4d>qZk_D|zUA_^iTF@!PkHIS~T&!VP7J|86A z^XEu-=C0$X%~s;3%{<07PqlYjk{X4zVj6`rq_7KQ#IOtC$)4soPq`)M$=u?9;o0LfdYBm-bFIra7 zYxo#^MI^C=FE>`Y8_j8OV+==rn3!LbrPS6Z>)YfluCPYX%h#|dX*O&~ue42}&G%IK z$jzkY%y$(QG-*m!WX;a!W7J!+*uY2i0GK07$7rip%C{`AePl|pB1$0;su@bpPs>(d zZ2Y2CVXi=EVUk#$@?+DKVt$PaDTK}g|F++R8NaL!ar2rK{EJq3BIeOPu$OG$onK)r zzFlV*+U_~J6V)>`4K7qaVQ|u|Z*Zd!-d=n|A+quamv$SLkl6irUZLP*KOt}LaxneF+#ln7;PdU`7FQMXGN06+D>m_|<)K}SbNH9j*_kqZl3Z>ARxK_Ra$FMz4` z`^}9`b6nD1QhPMAZSu#vKGvKdVXkA#3FoAE-lk-@aGwJ4q5( zNK@AB>!XZDI7Ujnlo$k0gl=r0OeJKWLNqQSWT0hiTtpNfl}x9B+bjyVEZ$vU%`BHA zXB=}Va=G^Q_SW77DJJ@;+>HQKi0>S}?bEfsnaSG&jwpqJXVe)P><0{khOT7fS=kwL zUtb1i2v?-e?aqA|u5E$QO?o8%I%i_)U;Spfb(4)aG{T90`4pf z+dj3Mg^w!qU`L<3lvLpU4-9`k6$e|KemliH3DQ*r3LDXy#!hgO3hj9Hx4w*HvC@s^F%!ye}Fy(x2&} z>Ov;b%f4%S?mH`N+N!z@Z#v=hR!bKAh&d`nm1a%pcm6tF%wu*xM19F@cM|$bEJq-H z;7*F*z~rMdk=cP%V@AMqj8rY0H^Ph|vN*f<&hP@L+yNfoO3~xqy!1a!3P`C#7uJQR8n^hb_Q) zvjIY{Q(35)VH!jb`YseI;vk13P~o?gBgg|MIUg2GhG$ZzWH~PB@zIsIvV=|Z5TUE0 zgyG^8Qo-Y_wjSQx=1G0KbNIu3itve1mrsm4;}Ld$Eq_TsYoxkR$|5XybFWJARH2x~ zmukvEAER|_S;o%Y+;OP3%NFSG#HC##M7Vb<)Ffq8Atbn8w%DW3{MGkewFTc2jU68j zb6JC)4mh7fWh%1g=E?NS99Y!DpW??yWJFjPiV^8&&2A}^RTLo2Cmaf0Cp8sC$&Zhx z7(@%*VqGo9Lxlx6;hH!&JF`->+bBc6XIqEHw&i(PJKhLHkrs>nTv4H-WH1DUhezp- zNT1@Trzz$>z;dm1-qi ze!{5Isxe!)*FWW-&{xdpINrvoxh&nB*EEl-Smm9jnP?z z=#FSvvlbxTMp{Oy2KA?$S9090ENT`x5uJstZQGyDaL$ zWKWM1lTkpYn6}4OLmKs;Ij!&uBC&9}SjDMnDOp1x(Vm1Pjqld2bwS0dinUhc{YA!y z=bW=kDdp6nc@jb!_~ZtMdHtQZ@yX*0Wdlg3N^O!!n@mV4ra%i_DPQ6d1fY%u+=z*6O`rELwb+u&KF66L4{{8+&+o(C6^sM% zuPI}?b3M7bs<2ud5d#Kux9%lzUZivP{}!eX(nec>srGW5u2y2GnYzlHSJD^)6w_t0 zrHd3#+E^3D#|j(M5_^qIrpHwKAlh=7sFkdRB_qg{j9HD1JWk9qfz?MH6GTB;v~v&x zvIy|=?rXK60ETyeyx9Lt37DB-99cg)%WFhChYv+<&Mpws2$(9<*n=j&SWUpysd9Q_N`Po$_RGDOIpk+0EJE9`oouWTaY*mY*m0ngpHBRVw%m$T&bbj_2T^DmtEyuaz2|EVNIM zqQs`dPMwdHJ;9Kv&Zn!QV@gEE&UU>?rEWqlFjGp$apDv|b3|I$O@$cgzmrB0eT?xTsq7TjI0&Kv`;xMzog81F0C}R*PL1{z8H8j>cuV5|I-aI(B$}c`yu}4 z%JZ|Q(CMy^T+5H2@HAk_vt3Czc>7P?F($gqG&*YlgF4FVQHrBEG@PvGUE%VPz}JFkQmq zc1k{cKJFN+qN2UD-Lf>|yIC8^16psF4^cMK9%4G8vbKCCrwmxm?*|ungfr<{lqyjg z+;I4s*?jv!$pgeLhIHg@(9}5f_>xqbPw%(kO|N}$;W@m^_h))vNb~gHCF}MJay4s? zdZ+2y5^t@Q^o^EgBkZjxtq!#v*41=lBa9|5)5F20t~lBk+tim&hZvnLo%W|bou>_t z`i=~2nR$;eMd{nh}C(XTdhdqi9 zU36=&qO0U%DMCPlVMyQxbFQ_Hau4OpZLa{{?o-T--=KL&MHd)+hOdx?8BW?ENmv-v zI{I5AEWHsZ&qQnvOK;>n~mzH=> zBH&`NH7-KwFi(3>#c@SlOKVInnx>^s$5IfNHt&UUcIK%Z7JeF9>Z~lt@9m{fy1eBW z-yb4ghK9m|6}ocQ7{15!8mW!$jjgqbZHH)6@%@gbke z)g%uLypjqA0gy>Mq?&px*}#a5Ye4^|phKr3EvEkw&(Ki>)n?!LbawT){#Q_pHJ#oD z(@5W_t3cK45i?Ci_0B2^jIyJ%i!vBB#EotoQxES9p(#Q9!ByCJ+~uvBb0AZBg#A4+ zE$E-eVHp*ZmKB2(4P57j^@A5MON>L)Wi;cx36-mm<;1f}*#P92KAzkIErAiG*~=$s zzeD>B34_Fp!mmmXi}>iMUW@zpGS9In9{1u4C6CRqt${_|sIBmp7Wbo9_@2TdJlf~> z9sC}Nf}4_h8KfvEWpjqVDKFjp7_=FVKRqSCdDNZH zh+A^`m-30IRUn&6+hf#?*b%Mh_=NiC{ocE{mPD*^ja`h-fe>7$%q#76@wX6OUK9|^ zCEX!hflMhGFb0fuU@iGGI;Z`ZS88skiHgy}cwHC$XJvOvK|T7enaf|~4@ZQ*>zOQW ztL#pldgUF7N;ae+&(&c?>X^RLf(!zlaz(WcxB7ZrbHBy3jfRVg-p)5S2@X_RCTH@y z!gKI?{u@i1P1P|bhxnDT4eYq^(rI&=A}YK;@7mGxYq%7#L>#G*ur0s3u7rlW zaUp5Y(E}e0EBU{9)rz`hOU(&hw72F!R`K)SRAX07b5@tv=Y=kAXJ`w-6O>{TsmaxuLl+aUleBUOWs4Rtdxkt%PB#qt; zBXtk6aY}|ez;`E)JIWbY8wv$CbkkJ*8Q6P!Sy4H0tlVaVVyZ!YvTx4`X=dEdx$}*zqo9Sugj2)_-=(8)=h}U6{RKu`R!Iq1@KzSzZktb#Zar*%rVC zADCVNli+4jO|;uYTG9?vaKToMP^o(&@nFV6RWoBOC&Rk!;qvwrf|x~KPOBS2#4EK1 z)dFnXd(R?8mp`AOkp_Z^MmeO;jo=^&fm#V!EEsK+o*5ILelnSDpe|4dsz#IY**Tb& zZpL?!pOc>GllT6LbzZH2i*^ZfOxER~EHs$wrhAXCX zJ7?fL>m1Y!Fw;gZAGIXMe(KNcWq zRRlKI-N&80+CQq27Ic>ZPr< z*AK>N1eb>0-wjC9xd4afTbfMq21woTN_=6cLi0Rn&8;XeQ?Mq5%V0<)sE_A6F4df{ zwvK!2oXfH>vtoQ{N?Xf0dV)0?TY=dsh!&EloAb#b7=%rBx1Q3_hn_qfh;0u340?Y| zK2#14PR8&hHE7aE(@l*YN@Cf{!l(}%VbKZv_~)7!!w3xc{DgYT&J4FtLe12}!M3^T zRmttC}LXx{6hB5w^~rfSI@7BoI-^t?5f=dg(?N;7Tf z4-GJUR1#NyVy_h_jolFS|Lu#t9AmSe&}8$3j5Bq6)D_ zk&xq@UYnIMpSjVd_%gbrO@{6^AUVu`{>naW)7+|DhfA7;dpN92=J^%mK^4c!qjpx; z$68rV)}7$TzjGn;i_ph@*HKJXmFDWU>n$tZx@+(t1Y;kZD-_LL6 zGj4h+^r5o^@u6KMESyy-oY^rE@WJ{xluwwd9Z&N7G%`q!?xCh_r$KbFDP&5g;M%wG z6Ce029yeCo%2ET8<;wQmipEQyFu)Q5OZd||Su0MY?K!?;+Byo-sH~3INhX=mW#)z} zkBN`RC@B?6K}_ZuQYFB1?ltD`lz;|nrP;Sa2|!Xe^NB7c*~%T#rRhL1olEYX7u`K7 z+}8(Vag*baAvsoO#UbGMP(%5UfBP7m&3IAqPq|a|;x25AxF}i_Y1=$=#B=}a@ZZn& z5~R6QjOi%FfO(!p9s7g<(+0OF`(xRp0Zwnn&PDwbbPEnhRZ)R2Yi-&yWGGV$1h0Fl zCZ)V%tYFO0rMz#Ldd7lajr#etI6|tpd79eHYF-qzft37YTi+RDv-pXfT3nr!pVpXYd7n^axMkE^q4?$yz@Y$_OL@!cSmJ}mDXwhV8 zBICWy^-w@hK4lM!`TX!uROX{2awG}+hWjs3AtSKeH&1(C8uuP6orWu8{opokRBF1U z*0)Ak4Fww(7LIX!5r>I~=?mLoR^>nEMvH*#3F-+wu~g_dUP;QxF+hXTgd*j7y9f@k z@k2OXWSRHedwe=LSu@r!OIt5db8?Q0>-Os~WwB*+SEo53p$!c!xbI?7h_aUBNp!uz zt19Wt?|d6X&zefIQsuX#!|b(20ote&dnT~z03ogMpGNGSH5eD=cD`O z5M^B3iTbz}ubPoLOII!3R1i-uH6fX2`!<)7>?_zhEmf?HX+cyZEjpKmKh+zkp~HGj ziFKLS0VLL|ot(1w`@IHk4O0!Nh`WoY)88NTuCr;5haz>o_m;`FD>CDWbz<)TG8Y?( zH=yV_t&AS$t8TI(jV?&ef7PjPvZ1vu$bYM}&^r2MCRnZM$1W)T24$pJZ$nVeg&eT` zrWe|oH!yuoTKg_&sTD7xQ^s6hRK?*4gwj$G3DQlTd83%MQrY0H>{~N3i^-fK0!!5z z3*q>HDV88(|0;A%XUyDt6|jF~%%Fy$QP2dYZa{YqT>M3AjW2-5%u?%Sr9%tgfwR%G zyFbmd^OmVrlhR{6dB>^N)-%2h#5=%)_89(#?&O(`AlXhXfAoLjS|5l4moVPF+EUX? zS!uAbW7;+dz^x<54jYuqI#pL}U>uT6%AFh+mLwaWH}&{$!3D7}r)wyM7?_Mzr!OU#y2379C^ zBP(e)a7x<9-0Hk82XDwakMB;$O=-_lwJ#fqAukkPlHk>oloFw^+>S2Zw?x!ysKfA> z*GzVu59-2!Tmer(lzy9g+~LoEGyA$kjfmCFu@V;?lPEVB2b>R1nh3@7CgLV)D5X~> zSpKS$SR+ZW{Ddxi_rGj#3C}UUqMc~@2He@??U*nD@bN}9?N=$bK3 z8cW?!ub4PszLo5DoMPEJ$l$ehyq2+yDzxhq1Pm-|Ffd5|V3Eql;Ad0%k@r!=_+6;; zTMpJ1p@H0+!wQ>jNf9BY420nhQ0k#%@DK#ax6@^*GMug1hD|f&$e+PC&`Klkr1>1o7n=_C{+KQv0a zUoaQ7R&=&@_3F-cmv+_apA}{K1=qs~=r2=u;YZAw)Q3dqteXFWKuV3bH! ztBujR9$Y$dWu+N!KlarR zQDV>JKQ1N=&+wk4ahK(i%TX0Jz`t{77NaqT?^GEX@8OzKtP!VBv&+-Bk@IY5&a3Pf zaztyismYHii#~P#CQBvt2`cFCS)fWAfN2=YSBs{e0)PLs3Q{C8Te3-sI$`mjOx{r~ zlzet&UNmn~ICxRlJyC&4Rw;d5p(Pxds#W|BcSA|ayJ|R0C0>=c(a^1?U$PPMr)62W zrk+r;8nEIFB7*ugxul3lX$zpVNoCr5dYZy#t`E278YD}jx9cn;Y*z-4*pc}3fkr* z(1}eQF|6T~jMr%^E53hXdsbW_T_w!p+5Ni(iZVWAdo%e++PT=5+K0j^(Sa<8e{QIN zM4KiaHTKT1zSpmI)ek6-hy($#w))F>BY0?aWEbIc>Atv&Pe%rn_ zfNhlr!=<+}m#&DSt?$atwRgJaL^9>65ey6XnT|Cj+w?jBuRmC?^X=fsKfFYvO>|5c zoTp~kmf^u-C{>8;!h?|2zPpiN4{dhFvhT+S<9*GaE^TW@`aEMqhf-8%TH+k_mRqV! zDhB8HmtwixyymGZ1PcIrFfq8ezqpc-#1N5nYBQ8f__rI(uauzc2C2zpNumVT2?KJuh zVwI+}m-F4M@imQQ|N3ssFuXvkzQG~Svqf5iB#cPzXV%P4C~JZvm&oMh{t&7e?v)=J z%C>dh#hG^V#Ujz=19Ty1+u;i{cs?F?B@RI;*W>s-L|B3pRajT^1Zv;q=CMbsi@owi z8;jYB%HgU3LKQSbCF0sG^1dyTLIY7vJrSFS7PfbEwQvls(9eni&FB`-baCnHy0>tenC8`o;2;aVHw3FtnFL zFF!G2djgI%Q3i*7E^)5A+Yl)|7K5mO2LxBaY{7ppx$C!=mK3l&$?5T&7HLjyjz^&e z!{R(?G9dP>4mVs0$k|NXG_sg$oIx27C-pcF)o>d2RMKQw^EiO>8jrb%4QdNH>U3Dq zUgP5hFtL9+m(1|P-t34kaIfl=Xw4{XoQ0$Fz}sm4F5zU-ne6gcX}fJ>`*z%WT`~AT z#A7org=&y6-UpWuVIHqbd>fJT^Z?>Qq`Kvmll=_X9-#Hx@?oVymoe$vN6qAw3We_g zV^XZ=q~n%$!gFalI~Ri93#6tV(OuLcIUJ1a{Pk9LGHUwGF&?nm$DoC)nd}{^u%?JN zjYcx@34&oKkg(_Q8p&O1EFuwM?> z5dFxMK&fOPSbX|cPLm^RE63;s`v_5_Ik~e`#lb#{A8W?N-H}n&8f?uv^_Bby!hwV_ zpK!d-R;o%&(kP#e5c6JPi@}3B#D}EHIup=Z##U^Sojc@1tN6btd+V4=qHgVzhQlld~qPO5fNmHKB@)!KWl z-}A&;jE=JyJ1w69a6o!y5`h{sqP}3(_I^9}Ug`wg_<7yz+yFD)Y{U|&y@^W?R%Wy4 zBEyimxU_$yh^GZ?B0TdHqpdl?YRKO(S(IjRw!U{60{sMcbDEM0=eUa&ljGtOt>T>n z7t^sM?$aK%*#Z=P$x?8BziT(>wN|B#LblOvj{L~>OnN~+R2oYdk;#aKa5s(tx$00~ z$%$w@*NvVy(4ItY4QtR*ZjPVW+A$?*Nlo#NoKz7tkco|ds8%I4bgq^rpQ!}_ZfFwl z9?Igr%l$ZXYE8LQB**ci&pAf$<97pmmC+N=@{tXSR$ys^*c>%#0tl$j0{-yf1<1vx zRjMV78T^e@%TQzz6iALFHk-<*720SX&OO&3Su+P5BPOvPY}2rh$&W2aG0j49iAv1BxyBl>KV(3dc7*Z5W>w9e}BPrbO$rls&(eR+Q1mErn7 z>6J&*y(~t5OiZr9r zvKSJkb7NfPD%rLfOpXYqFbQIenGEygo>>VI>tM*4*~vtg%&D%6B3I;r*9GCFyM zwQA%dIxEkQ3SrKaPt(%DRi)=ZKdA78QA&2&oOGXD2_l=Dl|}eM)LyD!jtyDp3oOBn zT;DPHB+YT=5)p+7AAH1}Dm^j0%^3WHGmV4&_;brl4fLrhg6 zsVDiFg6$k=0v!r`4e+8G)l}ewrm|OaGyJBDU3Q;UBG70s+6 zUNyrl03bix=H^#Xh8iWpil@BJ6>m*gKL zG}p9J!rf-g`6wL=FuVN-{x2aERzp8mkx*%pQRd6?MWQ(pgOeYf{!9Xj57h7brsn2d zZLQx&8z%{N$Cku*sF;@}=YIUNL$A!Avo3tMl-~P;?>1LFIjBKvGUJT#i11iC);}D@ zhBNhhhua3*;FqkOay`zkHlNRg*>{PK5pj~Il?}8&y#z~xb#|sxUo(lX<@UiZ-=={< zZ71~)NZGG zSkvL@* z(-16zJ>`o0*_b0~TBCKUXNdUdIjb2*HTR#Cg+y~xoio0TcLUGjwbELXCC0V+g>RwW=;1>ZtvM}`2FI-vGo1Nqt=dXSJ<~d z)AEX`Bt4Dv_#W@AXfX;c`{)*VsGO^Nc4>qc827V@inSh_=+^TwZM!b3nS>S_A?x49 zOh-*xs!H*yQyG!v3Ip|3FBPmP8xMyq-Q5Lweitor>T01U&sg_f6=U^0)3haZ?txnw zhM1YyZHiw7x-y;?-Hv|G=L<`>^li$I=TaRK?4~^qI2w4cgdSz?Xvr7Pg?{vhHSoax zO)bsz8cynTyT$Ws0OauY5owg~-bnW@3!5DYnvP|dV*H?dbcA}m%4E|J8^k22Kt0Xl zK6@%cvC(r{=|m-$I@s^X$bS=)W{iL#)@(0!v7}as+hL}CQBR>qf}wTpG=p~jTssc9 zue*5aX&S#@pJ0ppyRRXda6j-wf*!BYulHBiVsd%MTq0iI9hm(aOad^+@E;3 zUrCM7!^f>G#Z5wipR9!J!n6V8@RAY7aDqGXYg=KHVJE(E2S+{Hv&y^&n%fjQohA}} ztUB(h=rr75I4Q+jb=TVHsJ-J>$Dt*&);EFfshVLtjOXdQ@GEe%OXvRSGaM%-?sx3; zET#P+pz1ZNN>C1RHgG?|Jy!RhgR3wxqkUAQR zF$LN51xMI`ih-7XP9H3kam}E9AEY$uECujbv22x5aabl`uu4F+Z}K(3UwExHrT=Dm z>D0&s&?LvLR?0!my)2ei*4(DOT2J6q)zeH;UrhClTD5jb8Lm^I$--Ilqr2E7sm5uq zXSv_ig*r z0e$JLyZOMCC%M|*DDjCw!u`whk+0nx*^Y|5m`eDvD z_mganwP~MYnU~^M<_S2T=L;qY%8gT_RH*y>^D|ER$rI}uCyNC(1Y=5dla}i0qm>Ob znQEOChax#fq{7;w&n6?i19Y4=r6l1|nno!hoyMk4-{Exwvj+p)yMNrs$M@^1Z?jT8 zW0{re%dU^6P7SMP?$|C2(?|;k9k=3}M$I^hX=m0_`0YNHWnNY5N&gf9emNWZEuEcy z?*3WH`_B0L1K-o3jk#cqQ$xlS4@%4>-Hix3gbJalENNNt0N=62=ZVW^8)8{VRi7nS zVU(-lrqCwKhkoI82`I%f95j6Fp4z?4-)?=N)*MV~hKl^IUoO)25jxTg`WEhGW$=#y zoplneUQJ^3Z=%5Ob=&caWhalTUiJtU=VXFo?M3TJJ1tMcgRzKJos|uqbQ-S+!mJ?& z5urE0Y>`|Qs9J9WRl{oZB$94p{PXk^m4qe82FnBhuP>Ra}0n==oqZd@&2 zmz-A$57N-KE>5WMpI_A(d;n)dpo#}@-$*+tNhb)pT3C$4VOgyrUiu?5DPz0@N%_yt zzUN)Rw=KRm)waj!7Yr&z(RG@#YDOBIlom&+-g;JW)XuV7KrJ^T@Q?I=3s4g z*JoN58>@_A)(?)omz4&>W==v9xKKGrg$?CLXuBhK2_S_nW{`@HP{A)crV3Y%Nev3!on8zA ztVV9$X?St=hTcMROKG(kdVGJwSLiC;GbipS-XFRHcu3_c`t_0R!lZ9BoY3?}dZt}7 zQ>&spF&Q(bAy__!B3HnmWGrd=g2KM~A$_iYAWaf6c%-5nT<?j)hN z(KpHgB5Ab|ih^HdVXJvg(q{x){dlf3aw#^iKH&7%fWP*!f(!m~9)2`4&^Z{{M)%~9 zCrSP3tRdJd*ll8{L|K4()z{n0)wCcVG-QA(ZzmUK;?b4EblatAkiu2k_H_A;0O6k@ zkH`IzAhRcb4hz;PRJ~py^()+MOoH2rqRSB#CLI&DX*ld0?$kh3Jr4JHgSaeGpBsJn z#W~iHA2!mI1H`8lQ())qkLSxER%qCFR<*9^iYXRe9{NsBR<4aJrb8bF$&|*+%7G-w z9(g}>*d?-$vp(G&ztM*2wH!E58A#yS9=SW${-Mo*Ars-C|9^AvQH#yCoPYf21joSl z=mT=R;}CU2FP)$8ek)mn(!Gf2^K|~GCPr)h#4$@eGUYdT4@CU4RC+=UdxPxC-;{z| zNK{mv%b^%ihTNRomgE&Or$pL}JejwsyrzhI$JYo^m78tmmIu)gqd9$QzF+XY5k@r^ zi*k&>fWc(bbkp2!$Ug|%l!-Hs2bg75@%`%@(Xo9cwn@~=Y{vxYu4Qo8c6# z`|s(4O_A&{M~3v7s)aD`>s6og?FIVj{MyfCNY9@>=DBpajn20`QkR_jq>vj|!X&OYF$_|C4W?#LDO;qm)h}AK+R(DDU{7jZg`SwaNMn64`(m^3 ze1GJ}uKkGE_4KM4#*I+bZsYax_Qd>83-tfn*1$eFr&3Z2b`Y3%*IMVgb z-Atrx4`oFR@>c+9oXOKFW<}47&?J<@JA<&&+ph)=#*(L?ns0x64#rHOq_;4N@KK-7 zePcB`(a{rmT-xBuK9H|^#}@FXCV4Mdf*TJj*`;ADe9oTW+VIp+GCLOYOxIB7xJYJi zngSNaS)SM(9IA91{Gg)zA6T4x&)Q9`b9mZGVV-EwSo~l~ug>6#YQ!*lYD6B9SHVO= zF?qzf#04p{`n8C61rf8#hn$B{x8^PcWOPH~r=QJ~v@b1&r=$|dQj{8bZ zQ(KNIKHksUw^N`6&4|Uks6(Cq(ESH_Rfmu+q|Y$zUv+;mh@?O7vkr+|1iTtzUlI0pp{4SgTi6+8PZ#kTRJb~H#k0&_$x>+G(vF!A%Qm~ zbw93bVIu*Nk03orO`br%Xg#4G!5-0?0?t|OL)%;H*me~8_IH|H52WkPxY0Z0-Di3) zVy9?9x%8O*Crtml2Osz!e>YoZJ2V3M`w+iJ5B-h2-9++1*_e1BJK~$;ali4Qe7j=$ zEs3(hv&o498ABZWPR{J)Ctb`*6xi7j5TyB@m2NFCdW*dGuoD}48K}dZxjpEdmQAw9 z%k6i8@Y+QB-d!>*o%NU6c6*x2@jyMn<5ByTXc~8n&&xH?n|!z0YZ>VO*ZUvJq5IB3&$te;kiRH#p8VsE;w{w-mA??N$ZJik z6VQmNBs=w*6VCs~hv0B7tbkZSf>8mL4z8Hxp>Z&?8B@d@hB-zVFMKU(gkXteEpWUR zlC};|Q3s<`tQQxfKb!3$=J?B6iC--AZW-cvE|PvZwmZk^17>=&AzMaex{oFot2G+ zt<*&0(-FaeUwWo(nJw5q%i@$tVPe8x#tjnHFYFH=5JR3}p-KIXjrqf0U`Y%Ol!QNW zVdL?N_i=A;Z&rAfotz(UszR!OC-m$bcUXrKPT`8n^mYd2r-tg-W zuJ3pQ&&A(++7NaNM}L*NKRqr6LenHX5S+H=CoT3pE(-XB6IV+}`!=3Skg|FlsRuO` z#F5W=waL*}uz!UN6?PtMKE4X=y^#^i$>NR_h6Sd}qjFQo5}0G?OlOmo;{QQiJ-CZ+ z_pweDi6CWZt?CLL;$^JxFDIAuO^t#V|GiRU8`3gvcGunmQ-JOFn`Z#m}63d3?HUKf2CgQA#NKCe7lGG<0$z(ZzeW_HtqYEvfl_pZ!D8 z>hx>_O!Sfsq!H~ZBnm3lI!sh}yU#8fhuwI)FCxhq=i_s`AX!2>T|(UN zM2fk&mfyVyY|e`1$w+I|AxQM_!r@ty_Ci4CMRK@YQt5|Aa=|91;L}n*I_h&voP?1d z-6b(s9t(iOue2pk(QvZ1E!bE)DeCc8qVO)3>;Ic;qNIr@fm4IwJ7umGwNHsTcJ+s` zB15GQ1O~8TP9(Y=d$9y#r@;;oqR(YTtw`ITiZc{4DdB6}8PK`e5;|AvOuK zJ|VRw>)d~7DVpD!vZ78H?$Ih!Oy?9X}P|__3`0d_2}O# zJ~f?o3-2j%<^iqefKWXRz6uqHAgQ>oD0 z!=|!g*n63O?gUy<8-lIITmcVygAtKKq#HN*nbdRWZ!-l{AyH{Z=sGPj2mKLr-6R&A zW;#rfLLi$mlUGSUn|_5@XhsSWaC_bqQMyqmHE(4Ki)7``bjGWJB8oSnzs(TzM_(07+EvU- zK;wcG0O4_u_!U-cG)pY}L|W6JIUFF|$4DEmct{}=_4!#*(t&Y`8B1>idyrG9q6IoF zD<_2eUnPt(gx3yWxm5l8PvAU%qcR%+&JTgckc0 zYI$F%y%bUI=vcUOUXL>antvkoJkdRFr|3ta3h?q7&hQ}=F#=y*c-7hS@GV~(17W|nh6ui^cQ0Aj^QvPo{? zZISdxSOBqtM^66*=ry|E8|Wv!y+N7+{L9I9ZwQ@wSj^ZN-oHHXuP<;6fj7|NT%75>fe)9vE zU2sVUCRXAS-NpsTD?fe#2LZG5P5C9a;nN?vz)(PajcT5t&m?gHK`;N;hO zkHme&DZIRlC4;_11;c`P1r4#m7bx5Si1QK$;;sulz=Ogg5x4`iF19V__2Ld%7c!&* zuYuOZw|N>5wL$B`_C0C+vOv2+2Pp8#k?)dXYjQt3uv>Q93ZSmo8jsZ#wCM*8wpU!1 z+jat^%;GZ?IlzM>Kt2imoYXpOCX8Pnzk_Xo422F~z*WGh5(gqMJ&;40E2W6ZW%O$StV3+XAoL4r)B81nQ-uyNU{#=+l7^5WH`o-ItfV1q$PE4hcmrZ7 zYDnb8^g{w}KobQsJSOyC4)d5&`UwCVz;Wq^^l@G#F``DFhn&M3_&C@3o^Dkv!^#45)s#?G-&0DrS7iV8^x z2?iAPD)a(TQ9L4r)BCBx@*si|hsb^b>esCPt;gYiJ=gU8IWxawK(FBb{}F&-Gyt*E zBNP~gx>J7p0qFN5=V3E;6y;JIaDkjA*n4SD{pvNM0=Ps5w}i?xea2wgF~nx!B@9^q z^X!WrF$+6Hr}%aXP_IbrBe0*gu{LMEKU%>ftzWva_9O4%EwW!8^cvi62w+t52-tiu z*1Ej``iath5P;2(Zv41R%D-@l+IxiXA6jai5YO}@D|!6tPXK1;UjBDPiU~+X5EYAE zl!#sYS5V#xc~c`QF3S@0NNgJdP-gRq3ojwSy1;Jv?RQeLLtUS(SjX?ZUBGi(mS#vF z`w=dLzvrYoHa|N;A_*bfk#V_yUd++C&(QH$Ca-;t!={Uw%$B)jdbWc}pj|%ay2N$} zsWE=<-R=DewT|>Qo>r0le5U&6P;7M?Sw^l6+V2ePZ=tp!X1RsX;Ws&iZnYVyh4?#1 zDni^#ArfNtGa?l6=1aF^jqm4`VP;R?ADI3sx^}&gsTRE04$?i$e}ews;cgRsqP^iP zIA=&^1_V*Q@WI_e%rN9$Ky9G75YKc8K0x@Q9NOh}{5=2q%rHavsWf7jQsuG*>B2fA zE654C0pY?o<0`lWsS9;$n_E#tyP^I?7rqhd5RiMMw6DC6lOD7_;n8 z7aJY62m?3?Z4_<%Ki?E;pQwH-fVm=9LO(8$2Bd;$374o$U7#S97c9&S{ssU8m4NXg zR^LjXf#^UNU?Y$X_y?#0Oca>`4QL1n$q9)INeKxH@fMQn(*N6sdPlSPdMJ`B0O1R9 z%kOgVAMt~(FSoS0O96UN&lE1>6@onwUjI=l7!E*&;Dd3&cNuj58FIxjc0@0t_3b(X z?QgF(@!7GRT``Q)Y5(fsBUq1-K9#;>-x-27Mska_06x{+ASley;il;w@F~)|W2W zTkTx;06(Z(>s1+mm%QPJFMN=V*cK== zRfP{}ieo$f`DE2vNgx!X>PZ?xn~pmH#;NIwYJ>ZY08qeZ5M6$4tS~Vc8n~~V`Xetz z7zNx0+*dd(o)IIJBNf-ok|&K3P84PU69CWvh5%B4&?@H_fFD2@012Rj4uLEtLw9tC zjQ&y-;D-|F3w?MX_~WM@j2HZ&|4%=dTjkswhyr5h_Ee1rd2*xm#Qzk`Eeqt$T76+cEW@bNs#o0DjD1UZIq*9Bji7O&a1(~Hdb z=LzC!*aG=VhhnwW@=R;>r}wSvMxZPBB=uL!()K4HL|KR2Qgxy~ELhEV0vQJr-(it8 zx|pk(qA^@$JZ+~l-{rQHe!gP8SlQ+kWNUYoVp!}apqxoJnT8)G>AIZ@c1 zJL9iASH|^)r7jYV8t?aN&yB9S?DMu*f4Rzv4sUgJck{}w4r6uihtuWCbIsUIJnN(E zwu+(-?#1Pe#)`U*Dzxb^c9*4wLAz9;ScLZ~S6gR7SNPqxsU|tIs!!nuMXHWP$3J~K z7Q7w8W8^c< zo!s4km0Pn{+%wr-s@7#KoldH5C{Z3=pa>r)G?>ycx7Y_H$h;~63(V3Bb@J{C(dFh*n{df3FHCw2< z#9*kI{=3+EL$cSMF9T=}J1|bB172S>^K-7qxEC>&N6fW)9B0L;p%?_Oz4+69V_j?V zS44gsUa)Fk=R9tIjE8=FyqIe?qQav|)tKvJm!n4fE=6q0*DU>{r+&APveFDQo>o;P z>_+4SQwQ-rLX!*OYz-YjN6y*R++&AV8>}_SF8rfSWl-UJ-p8Nr->$8u^TQe5!tpc} zWqqz}rsH=qDI^JK(xaD$!6d_q5cSiK1OY;SDVLdGDy!gJzo;PQsA=dZ4Hm~Ugs__^ zm*b!hpPuAQnVtNAnlQ5$GY>%h5oFe)_swvF!IWuFv8C}jf{Y_i@S71B-LbWGXsfGi z5g^N-BAci^;2j-XeK)LMVewVhj+i2JvIUc=+oy9MVXr@F8KoTe~-rSU}y@ zMN-9;%*W;O1vfS~0!^Y{1bSNS7%+bPl^^#S?p5Oi1=^72Kqr#`R2!{I-9Pnn>mnW` zJ95zw<~oI}+fs|KSzb}$x?itkD}|7$+gQtJYE39^GwH;Yw(511C$j8hVMxqJ zFY(i(}`ymWa1X^;&IGmL#mgF&#kP zdSjJHt_zl!F&HKeQlDb(u|f$G$*}6svXi(*lVF4$pjjp!4qZUgr9<-B+6;YQ9p#jq zlyN&9-3@cy3Pmc!EK!UgrU+V1+pEcFyGP4dw@4(bPtL%Wid&Fvqeq09%npQfG~k-Q zguoHXRGHVaAgvQNVsQM&U_ru0t;L59-j7P$ew1M0hZHWSg(7Xbc#j_hl6wi&Li^P) zsua@G$$17)h<`g`z``EF>Cu<|ts~$_Lyf#}U)ANH_RMeZ*Nweo|Gc@9l&oRfSXjd! z@7Eh|k?wZYWa|10*TM1q|gVmSI|>Ho6PmK`pPDmyuFmdy zKIfiQNaGp*q|$`Hahcp{yYBy7`s27X?CytB5W0VqN!l@m=G5wB3-JG=-*uIpbaKvD zF@k?3L8th2CskrqD3*=Tsh|OrlP&DEuNE8|)dnLOM=>vfu)LS4vS4?xW=_SyLzPL6 zm`cNgLXdEMfvg%NpHiyiGw?M`QJ`ox_^Bu^I)PvqUcfg z?gz2S7biz&i+Bv^d{Z3_7DoN$g04@an&8~T)`i<6I;GzGm88TbUUPsU6=wHH#EDhr z(@dStw`v`o(%5u(nb{5Afi9A0(m|$@*sOX-MvBUbdk~G?4pSQ_#j9KyH*jR^!7vv? zxB+|M)uqbDdw)+fLi$g;qMudl@0asEpEEVRl6XopJRAxgo3-6XUfdz3Fpt16D*!lCO}6(4fwsxZfpf`;$UHeAejX2Ej1fbt8)YY&&0KoaDO zyQi^#s;~|Obf}u*{3bIja$1X)fAo;FMoW`eSHxMQ_W68u!)f`AQNE~nHPhW9LATcK3 z31Xps+8Ruq!Cgkef3C7nLxBdraU^uA9B6T%mywj|pf^Rst}_R&$jBs-nlMMErzCq^ zG&L!D5zb9;i{}H;=IToV5t6D+s56~t=8?e>V|8;$0B`~Ww4eHs3|K@mg@t5(MD!aM z)Ag);{Xw94gZUAOAD_2e+pikfYCJ`|0->m3OtuZl+n}^=lJ2|gSy^^slQo^C}hZFkb37vXGvlz)6kOjI@RGxp5 zy>PskrgM5r$8g2ia#uqOy^AXFD-a!R;8zk$*&t@!n)4}5Q3DfDsy)fWbUK;>tdt~P z#`0p*-Ktxy0$S)RhjeR*Jl5`}H`zQ2Y+hE7Zl)Jk$af-Fb;o%+#vPSfA)k!d36&&k zot|KFmBPXPl0VTtV*G>ne&4)ZC)}Pq=_#FdxEccNZ=5_nED*2lY%%?73WiWW+)vVa zcr+QOZ`2P+ZP!Axn+(N8Y{JRm=29~>JwXR?*6%rzrYRCF z<;6CP0nHr8Gk1PYgl%E;BOyQ#@z5kb8pT#h1bMaI@=8T2BhXCXdV$~c7s)d-^L(Gd z@H^-R!oF??ShwM+_iHMd2cu80KhIz;1;OP!csj-5Wcd~;avd|&rKFSVBS1s8zn~ZE z%ROj=yQpvDzScFKmnWvD;?I}{X&M>9us>_|`<+VNs($jz5p{&~IFuFUdQzG-^nfs7 zdI(Y8TPOg4HReYG#FzO zOLrZuFd`6CP&XYwtJ6l9cCaaNLquOFO_NA@F+|v~XVio@tp6 ztUMdW{#ID9J^}aD$(!zP%!&y`9ARF6=FfL!Wj6FV!(>%1qc8dsG};C*gyjG=sK$vf!V34W{CmWyNPdU;-o+t!78Rw+f&~>RUA>TT8p77 zEvOr|&w3x%SgdP5lQu*_&AfdcG8wLKKX*yJmB0mIg4tAM_jc5(otLSosv{J>sNmUmbo!)P0VHGdv~!t<8p*ybTX6D>F6VTPw+8o1wD0o)`J- zOnSq8=JB}^toPON%c6R5N@Pqv?LWu5Hmg~1#EF;F-Vx{wo8i#$4xh9wY;ts2vXA}5Z@o(HwkX7k;7hb+K^ zq^ve!0k$v*MX47pWAb7?$3!YcQC@VOU=|!k zcp)8iIpumvOXFrl4k(^@1@9#HhEKJGbs6o8q0pDQJ{l`(K!3~_x7Sp(aC)(UW_GWZJ&*F3 zY*WqaJPx!l(s~HF?|IkBVgxeC8((!fX(C}O72isC`3Y(#!*&Wbc*{8Q7ItC*maM|u?*z`|R zVx2mMxspQ(>u@<2KMRA57nptcXsl^0-1ut~XJ2b4EL|?d@kC`C32iD?)l2Koh0k5W zaCy){qMCcCSn2q3OnbeRO_X-DAd;&o$0R-ngvIDP#&vAnZ}}rgmWxYks+DkFOP288 zm1?E%Dima)K)sXk8=dN~r- zQh}zr3yUa#A2aeQ8X*rQhaeBlEErc?5-$a$VEQfZ=Tlo!f-21fmg&re`eR7i2{)m+ zVxr5g8~Ll#eelBXW67w7q46;nQ>;m}cO7+cSA>%H3GLxE#N&Z!Go(Mboq?9#fx? zXq|yWHvpN+#>Ias2w#M-5>vBQ~d?)MB#urqer&>cPV2v z0Jzu!)#Vy-2Iru*M-cRTJ5%ODdJ;S^@!CaAAig&s!&fp}Z}y7K%7H=)xGDj+#-55w zjY0|<8rpcBGc`NhxA>-R9ItH~bLnT)Yz>$D+7TC^KKejXJ=$hUeW^cdv~Z}n(Wp$b zFq8wtSzb8(Qu|W>yWz$m@w=+8Z^W}l4achcy~Nf^?h;B;96SEl)5p&0^s-5jIYNAKLZCQ<1XH81oz#8*J+M+1aIfEUZOw z)_dR53JkZ?f2l4#9K2QeuVxyZL>}jFrfL_VMX;CSVzT!YH{h99*~0@5)DG|n_(R9A zSURBOdZcsaeMbYATmlkX5@{L8X@jvNyBG!go2aqr7V%l$Xl}5G4W9cXBU!e-vJOzw zGF$_K!z+&^5qGfUaIKm-EzFXy(%U0DYy04}8`9g;>Acd$Szus~B7OCnBPC(fmp$q` zWPV62e#NksrSx+X14q=P=LlGf`$DLsjAt1qfj)I|DKi23y1K?DqxWrbw~n@UwqxlM zm>s`hegTfJksb$R<@M%Dk&+G&FK;Sj=&_$0C@r;6vV*MdDZDw7vt|`@uQ7kj)htd* zG}FWS&T-v;IWg5264SIc9SP`{XTg7Lvfy-zvDf@MLJN8}>oaae!~DrMw%6K35@YX2 z!TGh91Pkj%iW8U7i1f-q3%ORH)0Ba^Nw`G_Zp{Og87!(NRG=lPyX~^lwVyVXuY)e-f57vK`JD&>}pH1zB$E-X> zptJr{gCUOCOS+T&lrrA%!`X1*E1y42ABjA@%R$I z|9;7@pZ1&&uV@t?gPt|{LEe#{F;@MLg%h5fB~HWoF73=P;~#_3Bkrv`h+tGOw-=;e zv4lWsDVyu6?A=P59}oEI@AiCWR3}=Aq$bK^vLDt!&W|_F5XsCqD4mJcP-*(UcVjHo zG>0cnS6@lqgDH21Qeet_m&gSTM zmj8E~-)3au;!$ym_)%{~rvfzi&U~KiF-uIPFiQjswrbPEcy8|zndTf>)Pfx4Kc1g^ zgLlpKSl~q(FEEK7p9ZE}<^AeAaX(H%<#{{m_XqLB6@nH%Zl4gSteA=*eOGW1zYm(^ z->6g5LHb&=n0F3TjwJs~QqY(nF6;gRi;f*KR0UZ-jt2-;wV@o^w4AGCIYNMCxcD{2 zLUUWT%xG?B6_af5;jz8sj$RBrh@lJ zolWhcuI(=06k*Ja0@23*n_1d^R#O|Rl?n)o(mXb@j#EySJ4y9us*HTYz$uS+R zju`wFkztm#l*O2^U-U7%Y!;Q=c4DUOBrSfhONEoSdEsao58hYEd_=_lIede@j4j#t z{ls!CO-y7|XMkzG2R1WewA!7PYVSG&3TZJ-h1tBz_P8cNta>`d|2UsrU?5z+Zcz@& zmh2_IUlA1!iwpQHs7YPdN^MPR;`m%7d(+bV?4y}CTri&zk%`n)fMTvpxdyM}x;JJ| zPx}33qR!YO)By`eNlzt5w}gdRo)nfP(3e8Q&S#S>Q*~a{`U9ZiXC!vKYh9xAYbk*{ zQvx{*ans3Y@=jHE19QH;gJ$?-$}YeY)(TK1F+s;@o35!Cl3KSkzx0nMxA;qPT$?PVfkwE@HWK_mO_)a)ib=W)B46zC`Uj zwUU^fRN-@Ic|B^9nzYXN=uA3r&O1D#;^Cu8+iHn?Px=%mm*vY9mPHSms(E9*mgR2) z-Z4{+@LC;+t_}I-AUq3YmNlVH`+4)N1X=#O;u*=g1D-acM&xfG4HjDqbu*+wA^Cmj z6j~6O{!o)DIQ$__G+h$Px3tLfI)b)phHpNj0`FQnc)3&&Ta+m`W?YD6gp(S zM|HVphAOAXAQD%ee}3T`2yH{5AGGuw5%`4gD?t8BKUGx?7pgW>wVO#ZK?~IqoppC} zRbdH#SyW?lW3YEiqsP$GsKt%Ef*@5%?Sc8UT4PgMK~kTEs)l}>k@rcfS_r>HevSDv ziMo91`M)GqC(98v)>dF=y{bu46+xnH^{4IT6dB>3f|)7z_#vay!NL5WA^)PXVNEyZ zgPxf`%FB?aI1qdraQw9pt&aVE{o;NChC6@WzT#7iUBb5VL%=G5g}%3nMZyud>W z?ImyDa3I-HXEmFCcpe~EGs?!`C1foW=?=On3#qGWs@Ea)^qgOfr&}}N@SAU7q;Sah z7(AY^TYop=ZdjUtn3zs$3h{V8I)R4M;$E45z#6a5ejogpn75yscyHl*^H&`*k^caG zyVT6)=h8+Pm@iTF8Zzxm-*F2VCbmmkz}1)GeKYGAvqhQ9L@=dC{~lg3*( zPvz+{@R>fEtTd?nB{R<4sK?S+W~2HeAl>7+W`ToZEd}F(-IwphC?r(#Vu3ye{em64 zC=A66kz=$(Yy(o3Zu}?Ch39Iz^wUtvb#_T{QVy2Dxc6JVsZ25@y{^K9R8rev!^YA? zBn?Vz6Iy>=f6>w{?8$NZ_3mQWaFTIc)^2|>irG`h#SPXa0$C@11q_uT$@s`^1+KvT zM06zaxHZu}L{D@pM}eoXRjM-=bbXnrou_E*q z^sp6^-`oI|{U{=C&CyCpIg~QZI+bFkIroT7^LNB5d*KWD(~jRm54y)(wW42{3A|gr zQktw>G*S>K7ExrQhwO1m|4C|%x4B+@LP~HSHIredrAwy51iLp(=LHd zKwvx@%bMIfqJT`sq$QtI(3I{^xwQ~hZCEo`2iIEfhiDo$tr$&AJ3mJmRg4$ci`i6{ z4sVa|?5jF|T5_o#Mp`w^+BUx+8Wjwd);}Sg>%wuP?b||8gYuKNs{@{mcWRtqjdEQ#$UVI2(R4{o|YSl?F zpxcc`ob`37( zylM|kvp?U7)QcH8AvSyFf)3@~lt@swvyPw6Tt;rt+~jf;I1QFbb0j13pEixBT*{DU z;So6{ngBo_#ei2GY#kMCC1_>*5#NK?6;UThwZ|F5L78zUU$t|cUt zq)*lwVAzcCC!joVmo3bf8Z*%6E16_y=Efw`L#>oHFHYpj-YM$1PtNwiSgY>PCh0>f zrN?M%;oPjgyu;#AQcx%*>Ij@MCZJ!V->k{zmd=xsGPXQmoG3P*uy>EEJ<#dNao4z+ z3<1E@mdR!o@N>dxkcqXojQhF>+B)9*-^fKuP{S>p=Ra?c(s5bm?Qq!dz8loJOks#GwY`}g+9^Swgq z_pikITUsvl{8+fJG!>-2l(^;w&S%ib&@*Eb_^KK-s-*Z6DeRwn29snBnjvX-y?~_2 z4U?p!3={gml~Rh6!K}^?neH9ZDD_Mhp2p2_r6Q$#6mUP63YX=NWID}MM5BFtbICO= zGI#{C%|bT7d}vZ~y$9QoLb$#W%CB2bidmKpa^DdvbZa^-0!&R+n>+!F#9BawrwcZ# z!MqfCac)v2I_W*h0AL!HY&{t91&wOS1|uC$@h+oz;IE&E*wy0!Xgj>h@m0M{5dWS> zL}3oaB(jZbf71Pk;wS^!IuWKQY?-Mi1^*9vfC`y>j#&21=5h`WxeomFsL=UvTsW>c zk%>w5Iu$m|SyeiWitgKxJPVPG+F32e2@91^!!2^MW`O~!rs;CA1Gd;Vuw9YD5&hIC z=!!b&(>*BDs0Mv2r3rn7R-)>+RM++6X{J(+)*0>ODE&>vf}fx6Q06;kH>`IYA+Edi z43qQT|54jpK-JMKjiO0#O>hey+%_BCxVt2{yF-wTy9Ef4-~@MfcMBE>?ry=|UEe0h zzLRtAfA4zlzFAQ8R99EkRChJAW>r@ar7Y|VB$9vki!?<-7kpeREPfZJx=Iv0q~9!3 zTyt$T0OaF8Fw-yBE`r}Yc(Z zUn$@7&Bbeqq4$C9>EKl&YHb2;7yQX3!m@=GoG6uitDVPyGrZ$XjrBW=DGQUHT8_g) zrHKoUnzy96VlFgb^1C-cji7{PPvD-r#k~6~Oyc11mFsPSAVhSbN^u|`w_DFws3rRR zQS)&oGeX#aj+K#BvS2CN5p$d7$d%=2w1jp;bc(M;SxOe?vkJcqRV8KkPS+cDf@~AL zEB!sHVumHz6#O@Ni*9*8Y>oyk;gW_AHP7^EQY-2*^q5od03QrXlX7V@MJuB$*?k? zr}Q)TTaM64{79L@xGa}sXSvseplrMVs3T*85lylWoL1~;L~${nMb}%3qoQo{>$B@; ztSFZcDFoG|LS#)aNVu23bETjS+N0^~xVokSPLsJ-!N6Po#}C7tDWKh82ichoBNXy| zMmw^EYFcL^jzpOsYuvHy5tJu>Fz+UF=Uf-`*a^aplxA;~#!3hG6`Gam5yW!CniZ3q z#2F_B1VrA5Q+B<{WutXA;88R=o!|G0#!RXhi#$5n1YyRvpa&*IG}rm3tq!trlDrf$ zB!=Je&6){N$vhiXaUjaG*6?N=IB|3gVBF&oRKAKHxR40MhMe<(I%T0j^#BO-SVvSS z7X>D0g0T927FcTNZgWj@$@5t504|R{*nE7#ztOT%p{qaDZraoMz&4XN39wHJwx$Se zH;FgAmK0;jWQ)tG=GnS1N+SOerdgEWyjD1qi2(I2Hz!KctLc*k>8-&V_G4-D**L11 z;wOAVQmDh@DP&t;vNm?tAB%gci`ATwg7`<~Oyr4w+NampL>_dY1!B#-i00 zrU|RzzMw0ACmvv<-T*t(u1elG1SS_AP7c_7y@8=1lDDHZu3K+(bo2J8W|&jkj@dg% z6mS=J|BfmDZnos}6|wQYaEJT|nZqwdGe&#D5K=TRH1qeQj|h4BA?Ahn1VyaOz7+7< zbvO()di}>UJ?@h-MLCBrP_tCZNyzS!OWt@8cB<8TTfbM+{$_C%c{tG*K<&lJrr^mL z>&n1+_e!@q{Am8#B~78??Q|~%^RG|Ns>zOrQo!XV{BFh*$+A^m){h4V4`TFF?j@<^ zk^{I|EJde-z;a&WzV%`@27+lUhhk1kQE@@=uMK;Yh+#wft#}bwab-KAnS3K*fnphU z23k6+u!N|TB9*dTiPiosD_sp5SC|2~42ja{Hj=RZJeW9lQP(zD1qzH|Z5d=NL|tAO8sk(lSDcTg`#h)`vf}?dOPy^FCC=-*fj`;iPp3#oA&NSHc5Z6+IS z7CN~nFV!lsB>E)qQ9ONq;cI?7cDSYD`o*0Q?Dv#RsE8vbTyLtkK&fu|FP!AO{cK`-kuD`vztNAhN-&%LS55g`JOnj8(G&y<6 z2WLVaKOsfKD9umx!FX8M4vfVud?Er5NAh}`FX!C@7pjEP?AbBLcw4(%SEl(&$)gPJ zr-nA@!SAK}v@+u}?Vcl$N-tEX080T3v3R!Rft<@Gi0FeFi)NYB zh$Eo$QCI7nDW3q|$(5|0m8(Aj)*w-{p`kxHzRxc17+ji;v!j$g&GA}Fw~WITDiUs# zMol`WIc^Syt{skrb(lY}J)S28nmJY%b;eIem?a)mV%K1G;~PK{9^<@Tx#6A1!CH5; z`N)K~ZFS0(TgOP9>Zq>^oT{-CYp(kkI6gkp5RtISghHUP$I~4g&(P@NplhpPH)bOH zP3CNPcbn|e8ge>^?q2oPhjT4REkc%ui^o*lgiyJ9$yC*%>{ZCAiEL5?Tgm=9_*YInFp3E`d8@zonMDE0BA zaJ?j7uD{OM02NdbH*Bv4#fgu3N8>HJ=Cp=Pd8E)RY2lVaa|jM-+3i)d2b?)S9B|jY z-8y-M;Z|Yy6DhuXoSi2Iu~^6sX}P@|;F$Jx22!(jvPRz|1}I9|m$Uj&=znqKY;RLQ zxL-q$7X@_=u(@ktH#oWM4~mm~D1y7Fjg7wL22bE4v!mRw@UJbW3S>o1X6dboye5{4 ztV_bV5Jh8haTHudGlF#Xck|%vHVc8&Vus$9fsXvA3(>5PMl1QcVMC z=zMn6J{G+CKnT{@8dLPJHS_MvC0^81)c{Alr2=SIwHLy*Z>9UolL>};$%14%2Z*n7 z{NB8uH5?$0^w@`@{RVzR;Ccwqsgc*z*gT0zk@}=!*B2v+xi|6UsPtU!_6NOWoN?B@ z?kj5lhGd-4P6unMC@ENeN||Z-0>TNYL9bZ()c0)HU16kw9SBEVAwMp@#CtnF*a1w9 zv#^g*vdO+q9y@&$m$4iu=qriWC06u1A~6yLS{|(0*Bf&%GL#Q2v>u8je>2C*WJv+B zH*_U$UHQE<`k?t;Gt$%%W)V?*!PF_K=3Dx5RAO6Ag?VdNkK?~30t6z;-L|GMpjFe&xXpEJ@Hq9IrphEni8T*c5B=p zU?2fO#NX}T!$hqH+*M<}k?F<@#5Tp#kO}lsG+hE<+iHZ1&xr8(e=k{E78*#%#JO%8 zO8+&>ZJirg%8NdzW}%@yD*`tUGR}SZ-j40AO*bKUDfQgbqR_MA)W5j@E>ZnPm!6VkP5!sdBP5pG{&9W=SX(qnQ*< zFCsd56n-Ig>U90_ytG2;X@jw&X^qISD-;Jk(-^lFzCUkI0{q;flV&qJRU7lho1_kF z(-D#iDpQdbtPe%p+h_zrj78Jgqd~8xnui8i=)Tp(7OF{pm{iER*%!D7012n%fe-aTq zoxQZbL`;tz)o-?9+B%3ZZaaR#m?xGM6qOFte-SMj^6tq(jFrW6zG1Z-Kgf{tZ8s?# zs->-3fUuND2-k`7&Aohf3usa*ovG$)Te}J?U;N1@6E=PR%gQ5s$33i4kqwpT`R32n7$lQACdaDQU>+_Zjd&c$At{7^hHFcIZ!z;=s@fBB# zZ{+T#KwLJA0DA?6#?4QWm-57dX=pjx0#CU82ubD?(aVZM9?={p%KUdRl-`$9yqcMd zC@_?GNMDrJmFut^KAN2~SA;gIXz?=Tc`RN{4>dXHxxG)}vzBC~Ty?ym^pulr_JBD% z-@iL*Het&f!TS>F!(o74=B9a;qkT=y~sRodS$vUquU?G;6%#K4fGnVE+y_>;&vC?d(m>a1kieU=lxf1BaNus z*c@WNhPOs}7)i74Gb|D4vyt{p3c+7bd)hP6NEqHSQ1hMk!57f9(Nbp?Y24#@&CxJl z5>?qLnXwWK4%l(ZaG7q1y1I%MG&eh_+gV%N(ekG~QbE;?`)KmBcywv8(s)Qfxu5(L zTzS(Ri_&r6;c}}ai23uAEQX*KDNzD^)Z;L`O$13x6s-DLw(S!?5;*66Y5Z4}-|E~j zVjtNC5*6GeBK|~y;wP%sxpddf_4JgXAObl;2Oyu-R%a-Npm$C?Cxw>NuHHbvv0p&~ zY}Fa2{!tvlw=SAa!l|K?&pk)(AyttAfY<6t_$3OSZ zuwKLoKktt&V7pFTIM6eS&}M_mjKyb&E-^02v%8U7@vrnz3{J@FQJQ8N_StLk5RPf@ z=`}u=eLtHitK#@oa{czLp#8~4KFqQoy$ecV5Burd8@|u0F64zB`~uP^_PxHtLIe@0 z0W;yVS=XBRVJ*Ik;eE6GnSi?tJ$!cx4W{@o@fqt&zL+5BZKC|}7q2GH%?@U8-!g-Q zw0uUqB^l6ki3yLReOb^HNR+s3rwY6GR5m7yL6$V$Sig!Q-$;&Z-K9hvQFC#zQ}|vI zphIHJo-mK&dhY{vJgSA?2b-jYd;(V+0xR0?lFwhP*Jb8LOT65{Gw{&$ITYMCGQjC% zkrT{hjnRI>t46HxL_?o=p<8)=QPA}WubdY37=o$$4H_;&av)>doJ&?WW~MD2Pd5gd zVf$4r4x1O`NH&9_#Fs?=*UWLGd)_P+OeA+(q#Z@{zuGcb+TfW_D|C&6A7GAogl!LE z-Zh%7s^?{^Y=<)mVO-S$$}*8CF*JP=`Cc;*lbv~oq^BnFGgSi8g}Vr2tFHThABr!U7z zW-O$?wBbF~{lJOenGUWip|7}GE&RZF55$UikfSra0*eB^7@yY*K(cAFBjEuFBMItt zxBJBERA@_l&F;s)daw)V_ytuO%fTzJx1!6uM_zk!lyE=JZKLi4tr83A(6o6$wLQUs z-~yfhOHvBfe}A{J#BXP727#|5Z*3Af!ju+}_^Y+Emrt$ia++oehF{PKE)=IAIJVVR=^nuQ@6H z@;LufP6{9!3kdknoD={63&&q`Qg|SEXm;0J4YbTn7ioVpQa_zEkghb=Tq2+6sBG?5 zx9X8A<|K8>d_x5t^+pJR6seswI2s!sdf+tOA^2{z6)fx<_^1KzX}&GgDvp%Hjl!^) z9uqUIAock^rJ?au41VP5!E5=n>c`eX1B<=s%`gb^IXpH1AS4lbNrvypppIW6&|%tb z`Tbi-i<_DBCEo>y-jn^o#k8vm>t)M}6J0V9hE{O@ZIQ0sm3H_WLP3e~Ca>`@x~dI^ ztv9r-mM)9$Z#j}SkHpLdnb4!o5XgMM`~DFrV!Od)d)Lw6Ne;^1X14jDasMGPE$W_Ox^(_DrQQMJ_#O$; zTp&J>pM4EW8tsV{+vNTIiz?z(Pf(P>6gDT z-}Q&j??^eCM(DPigif`6t^is+Bl;6Qu%lD`DyLWB<6{G_t-B`cq3=evMoF~-TV}$- zKJQ@F!+Sbbu2@$Sw)hZm4_jAh3{YnIj_y_C*GLsa^k<_(PEGn9G`BRg8Iz|?^YmKIyz6&y8C*RJ&Ex@c zwG_8wgyu?hDKxVVkSkKz9PaY_*3V%wAq_KD#^*f@%yWGjX(MCNh>YJ57w{0j3EgE+6*_g`|`PB!r!b>TknCF=w!2ZdBZS zBua9zQis+~orQMY*E*m8m`U0gX^s)R7(HLX%-yQ`?8cjwI-2SwjGQTy$9;3;bd~nL zC~E97V?lc44T~$q|5heU`ePDxljT)n0kw#B4%KDH%;9CULP25jCWWEwync+Eq@LoJj*v>?&g zZ1)+t$~epP{FqBWU;I;sZ?l^QJ0(ISoZ#&TVxE@FHskn@2^Mc)QPJl3@6^lUhLNJ- z#KkowaDv80?yTZS4GW({sFL-OAIvu!bbk4{1%Q088#0WfWYCd{Nx~zO+l^>928XyY zH#Q!j#uTPlq%30YT*`EhN{P?nFCw=}UJ z&rQQD1~Nxi3}}z(cGXmKiO_q6Z6Bl0%T&&Tv6(aYke7TC6U6LO(D^=>SB4dyeiv!~ z3Q&>NJ8;Z7WJo6|uBQrfCO24e-y0aX>V_MtX-W!F+ z#}v;oYH_C-tOIJ9MMqL-4x2I2xia+?^iCOkASxG0Z&(!S8eheuj2?7{jrNn20Oe7o zC3AAbzoUH9C=-S;;T0joG`} za{Jqlcg6c*TI})R+Cv0CfkGKw2-w8?eC@ydrB%=QVM;5u^lY9CF>@2)FbXjEdiT8h zpyVPVq#_}SC#-qaVI2+f516G$W1RWANvlfAOsWMT!vcBHgW{LbBlA&6>wBQUK@d)?`G-)Fx42Bc>2~!I}fRvYc2c+S|FMXpFUe)T3&7 z$xi{34QcR{V87QtGbXn8p}k%p=NUK^sz?wKDw{Dq2w*b>IGswN^D+5i6U@%2XurlP=2DWcgfp*C7DnWcLyao%AV<8e#Q04D4iHNglxuqoIf$% z$CKL&(Y5@}E{BlmIJxVl;WHgh#Rl1wR#$u|E*Q;|F>_ENp9eRdvN3x>a+f33`d)n9fmJ~$~I}bxNqvqTX_;TS|4o}%zOkhgb|DMK>>FkYbZDP?GNduJ`;dQ zdS|G|3sBME#aOuSLG#bu1y{wT*WS=4d;Bo_yA0piKf*dqvZ-t-PwzKO*)2L%b=P>2 zm(y{)(B!akDkWHIn~ba*bThP1b%u+$2hH105I=tIoc2VSPyNvz2bZ>VdcKrLakV5K z&~SIW%Y8y9UI4g8dwUkh(k9n1)q2@bQ*BzJqAQM0{t@PpYctZZX^-fwA!N6K7IM7$ z^2_!PxAhJe%Os4=&XJ!xaI!g?_}9*j27Qmhn+3qPVAWukSTJE0wFfTbkodNj`t>F+ zXR~D;YqNWH`O1pdTfP^pmAd$?Fum%A6{?!_%GicEqQq5ZwDf)8(Bc6hafbW}FuHqv z%iz}~f%mGI6MMq-+l#@+O-~bTXRjBRA4}=n^Y*oO@0&O=r$jq$g;cf-FAiU&Ng6M98D-%u)e0)p^Kd!g^SS@>xpd}p_`PDExI@x;V}*& zdaom|o7YCXSk|oi6mz;IafNxgDm0Yuyy{V+eK?|ln>0nuY>BkFS00zoU<*r)I01bQ zIr~1-4`USRLal@Oy36yVqn_$8jC<{}p2GUe-dbNhyFUef({H-xE`Xh(1L)ee;723OIeXg8cfmIgb2B+6s>jWd#-sa8Y@H$M3BbWSp-RRGgRiQgj5k$f@r z@x=)7R`hLLs^8?j`KNbvQtltnLehbd;-H*J_@i5k7S2RffGbRkAKBPN6UzDGva+%R zM+wvM)3)b>+m;)~^@Wv@h345sv`|(VVNq4elam#Q9LCI@U&CtEtgvel37TPrl)et& zpU%FLd$<>qPhgS<;qp%`G}eyhTy>MD`iNRL6SjGO5PRLC8~UVIb1SUe-fUJJcCgQU zN4s#hkaJTpwJKmJY#GdfP7nTB>U#Zaz%uHNQH$oL$6eQVNfG0S>>Wc)sfhKu=-SFp zwyO(!=GT4?0x!S0<$NK!Y*3-2Q+A8JeImV2?GYT>dne8 zDAbTRL{}##eauIWa(47`hl^NHO>ggOa!~I9Dr+z*&g$2z@^o|#GA3_cdt--}G43Ll zL{gzg^>(oTJVi=7utKE8Ku|Z&*VBKH&&O56tM*!LHfnVs)H@rb2X?6AtL9WylZ!Zh z@W(94riqi5k`4zm2K)LV`|E@|Rxeq>LOD-ZWtOKJ;)WZ<5$d^M{rJUsH>N&uZh||T zFb>FVw2d~LlXXpCnHO6(tZPq@?d8jgQfJF8_eJq3{s8*}wpo z$s%X;D0pXkTz zcujcOWOp9U-+9(%L4k|nM?@cSnW0epQ$IU}vztN5Vy*@;&>yK&4HJ6~9HSWHh9%zL z_a;DJBqs-~;Z+?&#{f#D&so$di>)QP055f{NtS&Z-7CR#vWI~&M%+6j@huhlez;L( z3)1w>)L$=Wnbl{P4egBhg+KVpmJ;7&$cU6eJLJi^Q6&2WgH;m1l%qC9@+!5-JZ7TH zEJCBP@4dPdOwqdqQX87O?Je?1#4@iv6>WW1u2Ys;`tMweKZJ9yLLc-)Wh@ZjvON=Q z%B)dMcw8?~624xbgoT#TmH0}yD{c;b>Qh-z64OQ72su?k_+YUNTktjARK!ySWaTt} zlD#-Yw(9c9v`>YTKFe6Vp}ecJl1sxmhV8>!rz2)uDdnbDnG=r}6g}A!LvNUR$u$s3 zhON8ZZ&Wy)5@&Q8rO>*B@Mgraup){J(FM*l9AdgjUiYcJ1}fnP-^A>58YR^g8Xl-U zH4_#*>cr*%WHJ!bE-%;f4*TzcXS=cT_fE@9*~SUeZg5ggMvo`{;w%_xv*irswyizI zvhU7)a~lU))0s!#z`7dr@(yYsO{Z~~W;azmM6;rhAQdns1 zd{vPV0~XDJo@i{1TqWvoDlD@)xve1%TsuONfKRT&VNolYY1%VcYEP+I1%(xzd0fI5M z_)mY^$zi*@9r&S`R)U_&g1-iH{CF^Yz1Xl>qAuRbmW=v|;2Xe_ z%NVQSa^Ep0#<%tjmy!kq&uqR+@_Db_*=GbESQUt<85%$rAuueX*Tx#Lym!Q*A`76* z`BH0^{5Y_DJ#cg;BNof3l+Z9qTq{-Mt8uSt)sA*=SRgq(wCC}Z5y&p+@b%^_>iXhP z_Zv2YhI>T}YTdiGYl~d4An)kQ*p~c?FGLz@dxq#oPd=sSk+F?0W`XDCXtM@2ly73x znm_E*oVoFqyNn=){9;pd?AidR0}zk9s5$tB^b!4sE^t< zD<2Fz|0N+PM6cJ2uT)UfYdLNN{0gO?BSl9E@w!Lsmgt|+&vymC_k0!F zW=G3N?-zFeo@AG>vH6CO%L0~o(`8IX8VlTglD*J6zZHs^zBreBlU#|c?ntV$l6~Qz z+geGJb>eFp{4&D?KLW9+TP8V64@v*cBl*HKVDSGRzxj=UlMHgU@`eZPi}~q zUIOxxO#~qce%eYT8yc-*X^v!$t&9ku@GV~MR3eb!z{A2!2f>pt#Ix!z3v2U2Vq~?S zx_|Ut>h)i;AqD!$X5=^~@Lmvx&W02wx@mv7$gR=tM5%3QiW?M}*4*BmpKI9cEi{PT zDopip)g>M5 zA7>!!s_p9Ux{|Y=FnHs@S3eO2Ts4i`>2DuqWTMG1zcmY{8MbD+JT#84Tx|inBHJ06 zu92Xcs|2?*KiKx9s!7ND6$FwKH|dwISE72=ZpQqy7!0;5$7GM|qN|(}fkR}Mo?2Kh z5AaR@rRq9gH`J6_dfw;T-K4m|@u*LK(eO(+*Y#o0k&afHy>$L&XVcQ#Yd*FOzhg0N zPAA5~`t3Fi%4KO&hW(bR0;T(AEJYESsIUU=3H6H` ziM)gaegFD+juOlBQn8@;iwVd43QR?g0$D_t^LK9H4JUQys-y*#fZrV`geOUFMKIiP}#CheFr1vl(+k ziPt$D;}YjGe^}Ir*wB>kSB%iktvUc%S$=>LGQV@udvc12e~1ZIFbRGqC4Tfx4NV0{ zl83xPEw*Doo$L-vq`&=w{msj&Zs-#~!N^H;t)LyDmoO?Hu^0?G+m>KZZzD=Bvl1n5 z{Qc-*3TZtbi!-3ROa96Ivx8gB;P9=$-z`5YPV$!WO<=dZz$`CO(x39U>q_er7 zz#1iVuI{hiyw4m!yL;$~IvGo?)XdgCkk#ZmyeFQTESkb{SCCGn4_mjapT9D)mZ`47 zE}`}Hrk!P7;B0Ho!_2mRaelX~N3^i5VTZl&#jR{kBoC7Y(3Scsk{(i+W z84k|UOn;RV8wu+$1~db)hX-OpLV)57~m^}EFyv%zVOhy5DuvgPpy z+tn|8I(s%@4dj-MyVL$hfO?13w$|e*xulyiRr<5n3r(JPo&9vZTra_Fw1mP$n4-EE z;z}Ds#PW@ia7mukHeXm+fG{O4B9zf#RK~y@TB)EKeJ+nL;~H2}1YgB6M^7^~hm#+hHj6j&;F5V zwt0`5)B2DRMwM2-X?i7gyK9^)08_i)ci)&-#;javMY5n8?un!+ET>#`>aExs_0E63S16>=6My5)OCMsr`Zo;{b21HoklbQh>xj z<71SXd9$9+&@1e8h-j54b&q*9Z$_WS~X;9^Pdu}*iJ?wlXEL#BCnti3x1FnVEt@7Ss zFU?#sNV-pFzTAjTQjyWRULfEWN>P?wlrHmL?RPw=KU-=duE%i5LnGxP@qBSJYKNAG zhyfyF-nrV%2r^72YT8(nENJ>_zpGBoo_fBug%i(d=vyU_OM@FJ;rDXXt!D_=V4%Mv ziqp7*4%{I~U+EKZMNSZJ(r?P2T1e`yWngLnPmdmL=^Td$CUa-m02u)@v;l5pvzY z=ym^dpRsg`8M@V|Ri03PT2ZAB!qZ>us)f*u0fqTKrysQf_~rySzSw;TRF~Pq!J!Xh z%>8(7AZKc&JHULY(&#vFxC@X@I%A`c8x9003kF3vczb#}Z%9x(_kv-yoHx(S;q0-6 z4&&cweX+g#BB{juLFCg%1??dmDDkfX+)r)O;zNghY>;I4vcJ+7q~4lBzK6(@WB1>T z=ByklPeViRU@?Bhtbo>`-)>z&?4z89*T>RFqPWrhR)5cwsy(k1iBsn4e19FbywG;B z-dcNklObU1wXs^ddGNaA3&Z6a3XWh?42Y~rzZLW!TUN4o~_kCCA2 z9Chr4QA#SHlkrSrCM}TqLSIQ+nk7I2OZ(Io11M8IsU$#=mRFzm9c~_05GHVwhf19d zo{9(&YLw$kk0%iE9`!z+@BD=e33$^VxtpB!i}t+^xl$r(k+ZGCArb8-svm?Xyti z5jskr`R4h=)axlc1FSN&nhTB5iEo}`w|O67O{ZZAOl+_iglNCViDEth&f>mqc$EN| zv_8u=iEQtW4SGM_xieV^9~7Ou?qB1J<|(LGi}U}ylF?tivIWCqwVnOBr#XDL>;Nsa zn(x6jBe~b_&?mb^*M1sc{-8#G$-gJa zsIc~#M@>aVRa=oawRlt-%W00rnG;f22o9(^RbccL?d&s0-3~7bBKz4kjWagwfb~=c zf_D`Aeq0$tfc;T?FCC@6wB^r~0-146@ONEhNmR0SoZK^jva0s_(2Uf~3|Ua#cjerZ z9uu>a3rZ$UOq~yX^gZ54sHJ&)v9r@XAidzFXMm#V4!JoW)Se_tc zj12e9ev5-{Ftm?jM2bJ8=(yLr%P__3i4`*3G)6pCIWfJ>G`)C zv4mp*70p9K0c$_yIzMZo;T1SePc_0R!%~!=e#Hk) zahMit0i!q+S$<@PSKg_+`X`K@2X{N&t zycJg&s@zV*(gfkGF(4}s^?Q)d68)sgTgeC$ES5x`2z=W(mTG1)jg_MBNJbi8cZX9Q zkV5<3NFSS`M-O{%gxL-!Qjx@1M@*iX!IKh3Nw=6MGgqJF9(Dth6x2P9~FH5$Si z#$n4fs&-wVzokDZm!-_wT)bH$!2aU#P*}IzaKe$$qxxEXw}YABbCJWAm&|C@9?8)lhVXb9u{qA6 zgmdFsba4c2@E3c)5((kkwdSdNO`(kV?p^wX0a)0Yz6`8W+w zwTH2!?#1+{6ua`B{r^mbl)P;KcyDDAxLnU+FShG8`OtzN} zQeEX!K9dsd)YKFu5wcwQe4yTo|T(K(=U(uxxjhDLJ=F&R=A?mStj_Is zmA3|rQm9IuupOVuPzS6hA>U3KK0D3@UI-Ur$y=HdPH9vI)kK@taD_B~z7F<;|-C8Rd1!Q(LF>}se^>hMs?TB zq0_5uM&VIaU7z3obV1)S7oE8HESz$byP*RB^?aTMCx}n%QnRfN zp51N-S>$XTQKHQl3VoqKCD0#Zd(&n3}xQ$3p_UwB?rbtQ-|Y z<9T#nPc29$m`sks5L``kSa+>Ej&3nNy4WfzdhLu+FHMiCtWUgSq_h_|KCfJla(7;_ zv{=)j+LwKSc1qktB#`ZOYE?nBb0+=H$-BHV@KQNgx>QL&=WN}noi&C;-L6$}CA zQPQiSrCE$3x;xa9^0Xv(#{3r@Y95{5C&zK~Z$YS$3k0&m;%uDr#AzPv0kVo=oGz;! zIPJx=Hr|sHBQNmmS|y`ODDOPWi&^9rFB&;iQqz7~#+ZN6GvU~M!|2&TS@0zb6-q#-F3%E>(gTI+18mg7W7zG6AE zORug2wry{S_t2myH0OJyg$62o5-=qSTW~WK3oUH^LA07e&jDL3yWF2xUgN^LYkMP| z2wdK$Ry3rls6I|_=hsq4!Ykag_^l%|e_RM)GNj~lP>#@JnZHx4m#AtyjGR>wf4$4I zCm8E-U&|RB-MejEC@oo~LQPpn5?ZBO{ifC16eufHoV78rdNY4nc97gAN?-(q5^Avr z#L-$Z;CL)E>$1BOHnCTSJ{mSfBJ+*nZk;i_)s8{=*!0cK@@MlaJfGdOScX1_RbFF4 zt9-FkGZii&Y4_kq>kj!3B@_BH;wy5PL#R`}@o5`lM@2UR`fp7Z67>UF3Bi zv%3+5ub^3=eQFyM-{FrUQD=;mIEq@LuorMq_fivl@Wvma9-@|xeJYSDdd&2awtwGm zb~IJ9cR0G-tCnDif(_qn7kff6PK!Rkb+%@&&v>tk)5?#t*`XDW1i2dsXaM~8oBOoa z9pO?RR?B1{Cw8^UM1Ue*JvijVKvINC5?GoD6m`-k_(qt;phKa$45)2u2V}ev!fmH) zaeN2NMSnhj@9@j44-Rw_wr>cMjp1u-y_|8HAH|m+iSKlc*RNi_VDLxvZo^p z@#{!>qfg8q)_Z(1cr1t--3Dt20?C30lg5M?JL<@HCTwuLyG&IY&bIHn2GZ91bh0JS z9m0;izk3dL@gqncitWL;!K0u@iH*4J;IT^Z@{304vr^xoYEUdDQ~XRLL6Mk4P^H?9 z-OTEG`_LvF<%CHkk|qQdwWWueH1gu&g+&Y|dD=R1VV>A~I7h58Nl2iEe1@Cr%iV}( z=ySXbkK{L=uN+5o1s5mMB8d+hBnw55CrlHwK)-+bF)ncD-rcehKayJ3pC3Kh`FWoc z6kVLOkvlq#dhcEtqO9L)?H%{>BQo-(H>Q(3Ri$HkAYI=x@!$!@{AXYx3+Ru)LRn)6 zeItDbNOE;WM*{~}TVp0QS($%^;IXl?|1$!Qhu_6k-_X+7fyBVr)ZChv>ZqxWip1QA zmr9jQ79eXYY;0yO;RZHVbdysubh9)B8By``A@cC+8`&5bGq~v6GMJcKIT(ZONg!3P zc*%qnWW>mx30$~bKH7eSs6pcL(aPGM%Y~Qf_Yf{f`x(tdMe>`(!IGCsP4+#BgN==q zrMUwMkP*bl%)rb-PhtYr|7h%N1GXe#W@M*=uml^Ka4Cq0{hcA?j+e^J!NHb`iOJd7 znbDbr(FSbF#0&y~m;gW~Admq!d?V#_%U~Nwhk@s5>bG3gCv$kjatrMdmdD;F#m6#2Qs1m-E@#u@ORts zKxnvRZH&xKTt)O9jQM~7W{8163_vy|AdriVg^P`o4gll=0C<@GpoFX#$WURhF=W{P z$06ufQn@e~ z8Jp-kS~*bh30mm8C>ra74b7NAEV@pRiFsbNR_1(vYy2M1^e>)}mf`ctumS&#t)j8r zKlt+r+kkD%4Q>A5@SEb9!#~GC+D8BK>Hp;OZz}z-xcwW4|Ke%CQII_fGB-^B+yVIz zN&YWg|MwXEYuh)rhV1pu&zm}=W$yqn^T+4bbFIO@)KL7#9!34%_9z-ixcT$+K$gR^ z>r#twJ^MWX1Y`q3V!wa8JQV;y1tEiM4gVVorRP;dt;NE@4*BKKg6yq=&%ojt=syFO zXQ22DjQ@!PKer5@f!Q-)eg>dt!14@qpMldeVE%`uHsF5~@&36}K~ix9ER~ z`Q7@>^7qr(KnDF|tEYyvA^+Shj13+B?OFamnTv*x@9%T(0yZ{51dy--5Fr}>{em0_ zfJ`Te3CZ7ZtemVM$cxAGMPmIo95axa1qAqa8~{Sc{0AL?m4lOo;}1FrA7-{caLfP@ z0CLRWuQC9vAa)MsKX7a;K;VDi0GvSfKj=8vAuHn#92+x;^-rBaKo$_B=(y>6W|AAv>`%@QIPB!*G=~y{H9DnKuu>tT;y8xL1oPXMnm6M(IKXJ^! zKc5504B_~Pek|8=3Y|M~}`@=45Ko-a`n}1se%*-GT z_P_9R0P91J$AA%ecu1HO&E1S4K10H!U}NJz0#S}cfrLrY+Qf$Bc`sFfoV*bs(c}RF z*a1KxW_A#WjYW`!O^`)Y1SH1JCMqJt$ss5#%)$4+r_e@()P}Wp&<8vGc2tPpae_Dz LDJVqc#Ss4=mR;*j diff --git a/assets/snippets/ajaxSearch/documentation/ajaxSearch_readme.txt b/assets/snippets/ajaxSearch/documentation/ajaxSearch_readme.txt deleted file mode 100644 index b4d11958e5..0000000000 --- a/assets/snippets/ajaxSearch/documentation/ajaxSearch_readme.txt +++ /dev/null @@ -1,1700 +0,0 @@ - -AjaxSearch Readme version 1.11.0 - ---------------------------------------------------------------- -:: Snippet: AjaxSearch ----------------------------------------------------------------- - Short Description: - Ajax-driven & Flexible Search form - - Version: - 1.11.0 - 11/07/2017 - - Created by: Coroico - (coroico@wangba.fr) - - Jason Coward (opengeek - jason@opengeek.com) - Kyle Jaebker (kylej - kjaebker@muddydogpaws.com) - Ryan Thrash (rthrash - ryan@vertexworks.com) - ----------------------------------------------------------------- -:: Credits ----------------------------------------------------------------- - - Based on Flex Search Form by jardc@honeydewdsign.com - as modified by KyleJ (kjaebker@muddydogpaws.com) - and then refactored by Coroico (coroico@wangba.fr) - -The document subset selection is based off of the ditto code by Mark Kaplan - -The javascript code is based off of the example by Steve Smith of orderlist.com -http://orderedlist.com/articles/howto-animated-live-search/ - -The search highlighting is based off of the code by Marc (MadeMyDay | http://www.modxcms.de) -The search highlighting plugin is based off of code from sottwell (www.sottwell.com) -The live Search functionality is from Thomas (shadock) -http://www.gizax.it/experiments/AHAH/degradabile/test/liveSearch.html - -Many fixes/additions were contributed by mikkelwe/identity/Perrine - - Copyright & Licencing: - ---------------------- - GNU General Public License (GPL) (http://www.gnu.org/copyleft/gpl.html) - - Originally based on the FlexSearchForm snippet created by jaredc (jaredc@honeydewdesign.com) - ----------------------------------------------------------------- -:: Changelog: ----------------------------------------------------------------- - 12-april-16 (1.10.2) - -- Bug fixes - - 05-june-14 (1.10.1) - -- Security/Bug fixes - - 27-march-13 (1.10.0) - -- Security/Bug fixes - - 26-september-12 (1.9.3) - -- Bug fixing - -- Removed ajaxsearch's own striptags functions and substituted the use of $modx->stripTags - -- minimum chars allowed to 2 - - 05-december-10 (1.9.2) - -- Bug fixing - - 30-august-10 (1.9.2) - -- Bug fixing - - 18-may-10 (1.9.0) - -- Completely refactored - MVC model implemented - -- Defines categories and display of group of results - -- Several AS call on same page - -- parents (in / not in), documents (in / not in) - -- Custom output - -- Filtering search results by tv name - -- Filter features (allow to set up specific search forms) - -- Bug fixing - - 20-october-09 (1.8.4) - -- Sites and subsites notions - -- Defines categories and display of group of results - -- Several AS call on same page - -- Bug fixing - - 14-june-09 (1.8.4) - -- Sites and subsites notions - -- Defines categories and display of group of results - -- Several AS call on same page - -- Bug fixing - - 08-june-09 (1.8.3) - -- Bug fixing - -- The number of results is available with the [+as.resultNumber+] placeholder - - 01-mar-09 (1.8.2) - -- liveSearch parameter renamed - -- Initialisation of configuration parameters is modified - -- mbstring parameter added - -- Limit the amount of keywords that will be queried by a search - -- Capturing failed search criteria and search logs - -- Compatibility with mootools 1.2.1 library - -- Compatibility with jquery library - -- Always display paging parameter added - -- Bug fixing - - 02-oct-08 (1.8.1) - -- subSearch added. - -- mysql query redesigned. - -- whereSearch parameter improved. Fields definition added - -- withTvs parameter added. specify the search in Tvs - -- # metacharacter for filter - -- improvement of the searchword list parameter - -- debug - file and firebug console - -- Bug fixing - - 21 -July-08 (1.8.0) - -- define where to do the search (&whereSearch parameter) - -- define which fields to use for the extracts (&extract parameter) - -- use AjaxSearch with non MOdx tables - -- order the results with the &order parameter - -- define the ranking value and sort the results with it - -- filter the unwanted documents of the search - -- define the extract eliipsis - -- define the extract separator - -- Extended place holder templating and template parameters - -- Improvement of the extract algorithm - -- Define the number of extracts displayed in the search results - -- Use of &advSearch parameter available from the front-end by the end user - -- Choose your search term from a predefined search word list - -- stripInput user function - -- stripOutput user function - -- Configuration file and $__ global parameters - -- snippet code completely refactored and objectified - -- Bugfixes regarding Quoted searchstring - - 06-Mar-08 (1.7.1) - -- Advanced search (partial & relevance) - -- Search in hidden documents from menu - -- List of Ids limited to parent-documents ids in javascript - -- Code cleaning - 06-Jan-08 (1.7) - -- Added custom config file - -- Added list of parent-documents where to search - -- Added opacity parameter (between 0 (transparent) and 1 (opaque) - -- Added bugfixes regarding opacity with IE - -- Using of DBAPI function instead of deprecated function - -- Charset troubles corrected - 22-Jan-07 (1.6) - -- Added templating support (includes/templates.inc.php) - -- Added language support - -- Switched from prototype/scriptaculous to Mootools - 03-Jan-07 -- Added many bugfixes/additions from AjaxSearch forum - 18-Sep-06 -- Added code to only show results for allowed pages - 05-May-06 -- Added liveSearch functionality and new parameter - 21-Apr-06 -- Added code to make it compatible with tagcloud snippet - 20-Apr-06 -- Added code from eastbind & japanese community for other language searching - 04-Apr-06 -- Added search term highlighting - 01-Apr-06 -- initial commit into SVN - 30-Mar-06 -- initial work based on FSF_ajax from KyleJ - ----------------------------------------------------------------- -:: Description ----------------------------------------------------------------- - - Ajax and non-Ajax search that supports results highlighting. - -This snippet adds AJAX functionality on top of the robust content searching. - -What AjaxSearch do: -- search in fields of the content an TV MODX tables -- several customizable input forms available -- search in a subset of documents -- highlighting of searchword in the results returned -- allow a filtering of search results -- displaying of search results customizable thru templates -- group the search results by categories -- filter features (allow to set up specific search forms) - -It could works in two modes: - -ajax mode : -- search results displayed in current page through AJAX request -- multiple search options including live search -- available link to view all results in a new page when only a subset is returned -- customize the number of results returned -- offer two types for paginating the results -- uses the MooTools or JQuery js library for AJAX and visual effects - -non-ajax mode : -- search results displayed in a new page or below on the same page -- offer two types for paginating the results -- works without JS enabled - -What AjaxSearch don't : -- search in dynamic content. AjaxSearch could retreive only data stored in -database. It can't find something stored in a chunk or generated by a snippet. - -MORE : See the ajaxSearch.readme.txt file for more informations. - ----------------------------------------------------------------- -:: General Parameters (all are optional parameters) ----------------------------------------------------------------- - -Keep in mind that all parameters are optional. -If not used, the default value of each parameter will be applied -The simplest snippet call is [!Ajaxsearch!] without any parameters. - ----- &config [config_name | "default"] (optional) - - Load a custom configuration - config_name - Other config installed in the configs folder or in any folder within the MODX base path via @FILE: - Configuration files are named in the form: .config.php - - To limit the number of javascript variables, the default parameters are stored in the default.config.inc.php file. - This file is read by the ajaxSearch class and by the ajaxSearchPopup class. - The only parameters transmitted by JavaScript to the ajaxSearchPopup class are: - - the subSearch and the advSearch parameters - - the parameters used in the snippet call - Keep care that all the default values defined in the default.config.php should be defined in your own config file - - Parameters in the config file should be defined as php variables. e.g: - $ajaxMax = 4; - - To avoid to overwrite the parameters used in the snippet call use $__ instead of $ e.g: - $__ajaxMax = 4; - - For instance, in a AjaxSearch call if we have [!AjaxSearch? &landingPage=`25`] and - in the config file $__landingPage = `12`; that means that by default the page #12 - will be used as a landing page, except in the document where &landingPage=`25` - is set in the snippet call. - - - ----- &debug = [ 0 | 1 | 2 | 3 ] (optional) - Output debugging information - - 0 : debug not activated (Default) - - 1, 2, 3 : File mode - debug activated. Trace is by default logged into a file named ajaxSearch_log.txt - in the ajaxSearch/debug/ directory. - - 1 : Parameters, search context and sql query logged. - 2 : Parameters, search context, sql query AND templates logged - 3 : Parameters, search context, sql query, templates AND Results logged - - To avoid an increasing of the file, only one transaction is logged. Overwritted - by the log of the following one. - - IMPORTANT: the ajaxSearch/debug directory should exist and be writable - - ----- &language [ language_name | manager_language ] (optional) - with manager_language = $modx->config['manager_language'] by default - See in the lang folder the languages available - - ----- &timeLimit = [ int | 60 ] (optional) - &timeLimit = [ int | 60 ] - Max execution time in seconds for the AjaxSearch script - 0 - If set to zero, no time limit is imposed - Default: 60 - 1 minute. - - ----- &asId [ string | ''] - Unique id for AjaxSearch instance (optional) - - Any combination of characters a-z, underscores, and numbers 0-9 - This is case sensitive. Default = empty string - - This parameter allow distinguish several Ajaxsearch instances on the same page - The id is used to link the snippet calls between them. - Choose a short name. eg: "as2" - - ----- &ajaxSearch [1 | 0] (optional) - Use the ajaxSearch mode. Default is 1 (true) - The AjaxSearch mode use an Ajax call to get the results without full page reloading - - ----- &advSearch [ 'exactphrase' | 'allwords' | 'nowords' | 'oneword' ] (optional) - Advanced search - - exactphrase : provides the documents which contain the exact phrase - - allwords : provides the documents which contain all the words - - nowords : provides the documents which do not contain the words - - oneword : provides the document which contain at least one word [default] - - ----- &subSearch : [comma separated list of sites] (optional) - subSearch allow to define sub-domains or sites where to do the search - for each site, a search function should be defined in the configuration file - e.g: &subSearch=`products,employee` - - ----- &category [ tv_name | ''] - - Any combination of characters a-z, underscores, and numbers 0-9 - This is case sensitive. Default = empty string - Name of a TV. The category of a MODX document is provided by this TV content - - e.g: &category=`category` - And the "category" tv value of a document could contain for instance Music, Arts, ... - Then the categConfig function should be defined like that: - - /* - * categConfig : To define the display of categories (output) - * Add a category as a switch item. 'uncategorized' item describe the results outside of any category - * Add a switch for a new site. The default site is named 'defsite'. - * Allowed config parameters : grpLabel, tplResult, tplAjaxResult, display, extract, rank ... - */ - if(!function_exists('categConfig')) { - function categConfig($site='defsite',$category){ - $config = array(); - $site = strtolower($site); - $category = strtolower($category); - switch($site) { - case 'defsite': - switch($category){ - case 'arts': - $config['grpLabel'] = 'Arts'; - $config['tplAjaxResult'] = 'imgResult'; // allow the display of an image - break; - case 'music': - $config['grpLabel'] = 'Music'; - $config['tplAjaxResult'] = 'imgAjaxResult'; // allow the display of an image - break; - case 'geography': - $config['grpLabel'] = 'Geography'; - $config['tplAjaxResult'] = 'imgAjaxResult'; - break; - case '': - $config['grpLabel'] = 'Site wide'; - break; - } - } - return $config; - } - } - - ----- &display [ 'mixed' | 'unmixed' ] (optional) - - When results comes from differents sites or categories, you choose to display the results - mixed or unmixed. Unmixed mode display the results grouped by site or category. - Mixed mode mixe all the results from all the site. Results are ordered by each field - provided by the first field choosen for the order parameter - Default: unmixed - - ----- Label for a group of results - - in the configuration file a label could be defined to be be linked with the group of results. - This isn't a snippet parameter. Only a variable of configuration file. - This variable shouldn't contain a comma (",") - - $config['grpLabel'] = 'Arts (Painting)'; - - ----- &whereSearch : [comma separated list of key | content,tv] (optional) - - define in which tables the search occurs - by default in documents and TVs - other predefined key: jot, maxigallery - by default all the text fields are searchable but you could specify the fields like this: - whereSearch=`content:pagetitle,introtext,content|tv:tv_value|maxigallery:gal_title` - - You could also add your own tables where to do a search by defining your own keys. - - ----- &withTvs : [ [ + | - ] [ : tvlist] ] (optional) - - The parameter withTvs define which Tv will be added as field result for displaying - and in which tv the search will occur. Only text type TV are enabled - - e.g: - - &withTvs=`tv1,tv2,tv3` - tv1, tv2, Tv3 are added - &withTvs=`+:tv1,tv2,tv3` - tv1, tv2, Tv3 are added - &withTvs=`+` - all tvs of the site are added - - &withTvs=`-` - all tvs of the site are added - &withTvs=`-:tv1,tv2,tv3` - all tvs of the site except tv1, tv2, Tv3 are added - - &withTvs=`` - no tv added - - If &whereSearch contains 'tv' then a tv_value field which contain the concatened - values of all tv of the document is added - - So the tv added could be used for filtering with the filter parameter (see &filter) - - - Like the default site content parameters (pagetitle, longtitle, ...) the - Tvs enabled as results are available with the following placeholders: - - [+as.tvname+], [+as.tvnameShow+], [+as.tvnameClass+] - - Where tvname is the MODX name of a TV - - [+as.tvname+] is the HTML output of your TV - [+as.tvnameShow+] = 1 if the TV is not NULL - [+as.tvnameClass+] : - - ajaxSearch_resultTvname for the non ajax results (&tplResult) - - AS_ajax_resultTvname for the ajax window (&tplAjaxResult) - - ----- &tvPhx : [ [ + | - ] [ : tvlist] ] (optional) - - append the content of some Tvs to your search results with the "tvPhx" parameter - by default '' - - The parameter tvPhx define which additional tv will be added as placeholder. - - e.g: - - &tvPhx=`tv1,tv2,tv3` - tv1, tv2, Tv3 are added as placeholders - &tvPhx=`+:tv1,tv2,tv3` - tv1, tv2, Tv3 are added as placeholders - &tvPhx=`+` - all tvs of the site are added as placeholders - - &tvPhx=`-` - all tvs of the site are added as placeholders - &tvPhx=`-:tv1,tv2,tv3` - all tvs of the site except tv1, tv2, Tv3 are added as placeholders - - &tvPhx=`` - no tv defined as placeholders. - - The following placeholders are anabled with the tv: - - [+as.tvname+], [+as.tvnameShow+], [+as.tvnameClass+] - - Where tvname is the MODX name of a TV - - [+as.tvname+] is the HTML output of your TV - [+as.tvnameShow+] = 1 if the TV is not NULL - [+as.tvnameClass+] : - - ajaxSearch_resultTvname for the non ajax results (&tplResult) - - AS_ajax_resultTvname for the ajax window (&tplAjaxResult) - - The tv value could be used with the filter parameter (see &filter) - - As withTvs includes the TV as a new field in the select clause of the mysql query, - tvPhx append the content of the selected tv after the search and before filer. - - ----- &order (optional) - Define in which order are sorted the displayed search results - `comma separated list of fields` - by default: 'publishedon,pagetitle' (sorted by published date and then pagetitle) - - The fields should come from the tables used and defined from the whereSearch parameter - You could add DESC to sort by decreasing order. By default increasing order (ASC) is used. - - e.g : &order=`longtitle DESC,introtext` - - ----- &rank (optional) - define the ranking of search results - &rank=`comma separarted list of fields with optionaly user defined weight` - by default: pagetitle:100,extract - - The rank is a calculated value used to sort the results. This value is function of - number of search term found and optionaly of a specified user weight. - - e.g: &rank=`pagetitle:100,extract` - rank['pagetitle'] = nb_search_terms_found * 100 - rank['extract'] = nb_search_terms_found * 1 - - Results are sorted with the rank values. - For instance, a document with a search term found in the pagetitle, and 6 terms found - in the extract will have a rank of 106. - - e.g: &rank=`pagetitle,extract` - rank['pagetitle'] = nb_search_terms_found * 1 - rank['extract'] = nb_search_terms_found * 1 - - ----- &maxWords [ 1 < int < 10 ] (optional) - Maximum number of words for searching - Default: 5 - - ----- &minChars [ 1 < int < 100 ] (optional) - Minimum number of characters to require for a word to be valid for searching. - Length of each word with $advSearch = 'allwords', 'oneword' or 'nowords' - Length of the search string with possible spaces with $advSearch = 'exactphrase' - Default is 3. - - ----- &showInputForm [1 | 0] (optional) - Show the search input form. Default is 1 (true) - - ----- &showResults [1 | 0] (optional) - Show the results with the snippet. (For non-ajax search) - - - ----- &extract [int : Comma separated list of displayable fields | '1:content,description,introtext,tv_value] (optional) - - Define the maximum number of extracts that will be displayed per - document and define which fields will be used to set up extracts - - An extract is a bit of text where search term have been found (and may be highlighted). - &extract is different of &whereSearch. - &extract define which fields will be used to set up the text where to extract the search term. - &whereSearch define which tables use for the search (and then provides a list of displayable - fields where to search and possibly used by &extract) - - &extract : `int : Comma separated list of searchable fields` - - int: - 0 - no extract - n - n extracts allowed per document. - - Comma separated list of displayable fields: - The field names used for the extract come from the "displayed" fields of - tables defined by the &whereSearch parameter (main and joined tables) - - Searchable fields are string type fields that can could contain the search terms. - - For "content", the searcheable fields available are: - pagetitle, longtitle, description, alias, introtext, menutitle, content - - For "tv", the fields available are : - tv_value which is a concatenation of all the tv "values" field - - For "jot", the fields available are : - jot_content which a concatenation of all the "content" fields of jot table - - For "maxigallery", the fields available are : - gal_title, gal_descr which are a concatenation of title & descr fields of maxigallery table - - e.g: &extract=`5:description,introtext,content,tv_value` - allows a maximum of 5 extracts per document found by search. - Extracts display content from description,introtext,content of document AND - tv_value from all the TV linked with the document - - e.g: &whereSearch=`content,maxigallery` &extract=`10:galtitle,galdescr` - allows a maximum of 10 extracts per document found by search. - Extract are built by parsing ONLY the fields title and descr of maxigallery - - e.g: &whereSearch=`content,tv,jot` &extract=`tv_value,jot_content` - allows a maximum of 1 extract per document found by search (by default) - Extracts display content from tv_value (TV values) and jot_content (comment) - - ----- &extractEllips : define your ellipsis in extract (optional) - string used as ellipsis to start/end an extract - by default : " ... " - - ----- &extractSeparator : Define how separate extracts (optional) - html tag like
      or


      or any other html tag - Default : "
      " - - ----- &extractLength [50 < int < 800] (optional) - Length of extract around the search words found - between 50 and 800 characters - - ----- &formatDate [ string ] (optional) - The format of outputted dates. See http://www.php.net/manual/en/function.date.php - by default : "d/m/y : H:i:s" e.g: 21/01/08 : 23:09:22 - - ----- &hideMenu [ 0 | 1 | 2 ] (optional) - Search in hidden documents from menu - - 0 : search only in documents visible from menu - - 1 : search only in documents hidden from menu - - 2 : search in hidden or visible documents from menu [default] - - ----- &hideLink [0 | 1] : Search in content of type reference (optional) - - - 0 : search in content of document AND reference type - - 1 : search only in content of document type (default) - - ----- &parents [ [ in | not in ] : comma separated list of Ids | '' ] (optional) - A list of parent-documents whose descendants you want searched to &depth depth when searching. - All parent-documents by default - e.g: - &parents=`in:24,25` - do the search in the children documents of documents 24 and 25 - - &parents=`not in:24,10` - do the search in all documents except in the children documents of documents 24 and 10 documents - - &parents=`24,25` means &parents=`in:24,25` (compatible with the 1.8.4 release) - &depth [ 0 < int ] Number of levels deep to retrieve documents - - ----- &depth [int] (optional) - Number of levels deep to go. - Any number greater than or equal to 1. 10 levels by default - - ----- &documents [ [ in | not in ] : comma separated list of Ids | '' ] (optional) - A list of documents where to search - e.g: - &documents=`in:28,29,30,31` - do the search in the documents 28,29,30,31 - - &documents=`not in:28,29,30,31` - do the search in all documents except in documents 28,29,30,31 - - &documents=`28,29,30,31` means &documents=`in:28,29,30,31` (compatible with the 1.8.4 release) - - ----- &filter : exclude unwanted documents (optional) - &filter runs as the &filter Ditto 2.1 parameter. - - &filter=`field,criterion,mode` - - Where: - - "field" is the name of any field from main table (site content) or joined table (jot, maxigallery) or a tv name - "criterion" is a value of the same data type (number, string, date, etc.) as the field. - "mode" is a number from 1 to 8 that specifies what kind of comparison to make - between the value of the field and the specified criterion. - "," (comma) is the "Local Filter Delimiter", i.e. the character that tells - where the division is between the three parts of the clause. - - There must be no spaces in the "criteria" term unless you want them used in the comparison. - - The filter clause: id,50,2 means "exclude any document whose id field equals 50." - The filter clause: articleTags,volcano,7 display only documents related to volcanoes (tv name = articleTags) - - A filter may include multiple clauses, separated by the global delimiter, in the form: clause|clause|clause|etc. - - Where: - - "clause" is any filter clause as defined above. - "|" (the pipe symbol) is the Global Filter Delimite, the character that - tells Ditto where the division is between clauses. - "etc." means there is no fixed limit to the number of clauses you may include. - - Multiple clauses have an "OR" relationship. I.e. a document will be excluded - if it meets the criterion of any one clause (clause-1 OR clause-2 OR clause-3, etc.). - - The filter id,50,2|id,52,2 means "exclude any document whose id field equals 50 or 52." - - Comparison Modes - Exclude a document if its value in the specified field - 1 is not equal to the criterion (!=) - 2 is equal to the criterion (==) - 3 is less than the criterion (<) - 4 is greater than the criterion (>) - 5 is less than or equal to the criterion (<=) - 6 is greater than or equal to the criterion (>=) - 7 does not contain the text of the criterion - 8 does contain the text of the criterion - 9 case insenstive version of #7 - does contain the text of the criterion - 10 case insenstive version of #8 - does contain the text of the criterion - - - IMPORTANT : here the tv should be allowed as result with the withTvs or tvPhx parameters - - ----- &stripInput user function (optional) - to transform on fly the search input text - by default: defaultStripInput - - StripInput user function should be define in the config file as follow : - - // StripInput user function. - // string functionName(string $searchstring) - // functionName : name of stripInput function passed as &stripInput parameter - // $searchstring : string php variable name as searchString input value - // return the filtered searchString value - /* - function myStripInput($searchString){ - - Any Php code which filter the input search string - The following internal functions could be called: - $searchString = stripHtml($searchString) : strip all the html tags - $searchString = stripHtmlExceptImage($searchString) : strip all the html tags execpt image tag. - $searchString = stripTags($searchString) : strip all the MODX tags - $searchString = stripSnip($searchString) : strip all the snippet names - - You could also developp you own filter based on regular expressions. - See http://fr.php.net/manual/en/intro.pcre.php - - return $searchString; - } - - By default : defaultStripInput function will be used if &stripInput parameter - is not set or if the function is not defined : - - function defaultStripInput($searchString){ - - if ($searchString != ''){ - // Remove escape characters - $searchString = stripslashes($searchString); - - // Remove modx sensitive tags - $searchString = stripTags($searchString); - - // Strip HTML tags - $searchString = stripHtml($searchString); - } - return $searchString; - } - - ----- &stripOutput user function (optional) - to transform on fly the result output - by default: defaultStripOutput - - StripOutput user function should be define in the config file as follow : - - // string functionName(string $text) - // functionName : name of stripOutput function passed as &stripOutput parameter - // $text : string php variable name as results - // return the filtered results - /* - function myStripOutput($text){ - - Any Php code which filter the results - The following internal functions could be called: - $text = stripTags($text); // strip all the MODX tags - $text = stripJscript($text); // strip jscript - $text = stripLineBreaking($text); // replace line breaking tags with whitespace - $text = stripHtml($text); // strip all the html tags - - You could also developp you own filter based on regular expressions. - See http://fr.php.net/manual/en/intro.pcre.php - - return $text; - } - */ - - By default : defaultStripOutput function will be used if &stripOutput parameter - is not set or if the function is not defined : - - function defaultStripOutput($text){ - - // replace line breaking tags with whitespace - $text = stripLineBreaking($text); - // strip modx sensitive tags - $text = stripTags($text); - // strip Jscript - $text = stripJscripts($text); - // strip html tags. Tags should be correctly ended - $text = stripHTML($text); - - return $text; - } - ----- &showIntro [ 0 | 1 ] - introduction message under the input form (optional) - - To show or hide the introduction message displayed with the input form - Default: 1 (show) - - ----- &clearDefault (optional) - clearing default text: [1 | 0] - Set this to 1 if you would like to include the clear default js function - add the class "cleardefault" to your input text form and set this parameter - - When the user clicks on the box, the default text is wiped away so that they - can begin typing. If they click away from the box, without typing anything in, - we will add the default text back so that they don’t forget what was meant to - be typed. - - See http://www.yourhtmlsource.com/forms/clearingdefaulttext.html - - e.g : &clearingDefault=`0` - - To work the input text should contains the class="cleardefault" - e.g (from templates/layoutTpl): - - - Could be used with all the input text forms of your site - The location of the js library is set with &jsClearDefault and the default - file is : js/clearDefault.js - - ----- &jsClearDefault (optional) - Location of the clearDefault javascript library - - ----- &breadcrumbs (optional) - 0 : disallow the breadcrumbs link - Name of the breadcrumbs function : allow the breadcrumbs link - The function name could be followed by some parameter initialization - e.g: &breadcrumbs=`Breadcrumbs,showHomeCrumb:0,showCrumbsAtHome:1` - - The breadcrumbs function could be custom function or a snippet - The function nor the snippet should in any case exist - - Breadcrumbs user function could be define in the config file as follow : - - // Breadcrumbs user function. - // string functionName(array $main, array $row, array $params) - // functionName : name of breadcrumbs function passed with &breadcrumbs parameter - // $main : array as main table definition - // $row : array as search result row - // $params : array as breadcrumbs parameters passed with &breadcrumbs parameter - // return the breadcrumbs link as a string - function myBreadcrumbs($main, $row, $params){ - - // use $main, $row and $params to set up your own custom breadcrumbs - return $breadcrumbs; - } - - ----- &addJscript [1 | 0] (optional) - Set this to 0 if you would like to include the mootool/jquery librairy in the header of your pages manually. - By default set to 1. The library is added automatically - - ----- &jscript ['jquery'|'mootools2'|'mootools'](optional) - Set this to jquery if you would like use the jquery library - set mootools2 to use the version 1.2 of mootools (limited to JS functions used by AS) - Default: 'mootools' - use the version 1.11 of mootools provided with MODX - - ----- &jsMooTools - Location of the mootools javascript library - by default: MGR_DIR.'/media/script/mootools/mootools.js' - - ----- &jsMooTools2 - Location of an alternative mootools javascript library - Default: AS_SPATH . 'js/mootools1.2/mootools.js' - contains only the required functions for AS - to use an another library, use this parameter and change the ajaxSearch/js/ajaxSearch1/ajaxSearch-mootools2.js file - ----- &jquery - Location of the jquery javascript library - by default: AS_SPATH . 'js/jquery.js' - - ----- &mbstring (optional) - Set to 0 if you can't load the php_mbstring extension - by default: 1 - - ----- &tplInput - chunk to style the input form (optional) - - by default: @FILE:".AS_SPATH.'templates/input.tpl.html - - The folder inputs provide several input chunks. - - Input 1 : a simple search (oneword) with a simple input field. - Input 2 : an advanced search. An input field with the selection of the advanced Search parameter - Input 3 : a simple search (oneword) with a multiple input list - - ----- &pagingType [ 0 | 1 | 2 | 3 ] : type of pagination - (optional) - - Default: 1 - - 0: Results Pages 1 | 2 | 3 - 1: Previous - X-Y /Z - Next - 2: X-Y /Z - Show more 10 results - - Type 0 for non-ajax mode only - Type 1 for non-ajax and ajax mode - Type 2 for ajax mode (Jquery only) - - &tplPaging0 - Chunk to style the paging links - type 0 - - &tplPaging1 - Chunk to style the paging links - type 1 - - &tplPaging2 - Chunk to style the paging links - type 2 - - IMPORTANT: - arrow button images are provided with the images folder. - use asprev.png, asnext.png or your own images to define your previous and next buttons. - - e.g: - .paging1Prev{ width:16px; margin:0 3px 0 0;display:block; float:left; text-indent:-3000px; background:url(images/asprev.png) 0 center no-repeat; } - .paging1Next{ width:16px;display:inline-block;text-indent:-3000px; background:url(images/asnext.png) 0 center no-repeat; } - - .paging2More{ margin:10px 10px; padding:8px;background:url(images/asnext.png) 0 center no-repeat;} - - ----- &output [ 0 | 1 ] : Custom output - (optional) - - 0 - by default the results are listed below the input form - 1 - custom layout: - - To place the different AjaxSearch elements where you want, use the following placeholders - - [+as.inputForm+] : the input form with the intro message - [+as.results+] : the search results - - The parameter &tplLayout is now deprecated - - The parameter &tplInput is now used to style the ajaxSearch input form - - ----- &asLog - ajaxSearch log [ level [: comment [: purge]]] - level: - 0 : disallow the ajaxSearch log (default) - 1 : failed search requests are logged - 2 : all ajaxSearch requests are logged - comment: - 0 : user comment not allowed (default) - 1 : user comment allowed - purge: number of logs allowed before to do an automatic purge of the table - 0 : no purge allowed (= illimited number of logs) - default: 200 - - &asLog=`x` is equivalent to &asLog=`x:0:200` - &asLog=`x:y` is equivalent to &asLog=`x:y:200` - - &asLog=`1:1:500` means that 500 failed search requests possibly commented - by the end user could be stored in the ajaxSearch_log table - - &asLog=`1:1:500` means that 500 failed search requests possibly commented - by the end user could be stored in the ajaxSearch_log table - - ----- &tplComment - chunk to style comment form - by default: @FILE:".AS_SPATH.'templates/comment.tpl.html' - - The comment form is protected from spamming by the use of a hidden input field. - (idea suggested from SPForm by Bob Ray ) This field should be hidden by the - CSS styling. If it's filled in (presumably by spammer autobots) nothing is sent. - The "hidden" content is not really hidden, just not visible, so no worries - about being penalized by Google. Visually challenged users of - text-only browsers or audio browsers MAY see the input field and fill it - (although the text warns them not to). - - You need to paste the following code into your CSS file. Otherwise the field will not be hidden. - - .ajaxSearch_hiddenField { - position:absolute; - text-decoration:underline; - background-color:#CC0000; - left:0px; - top:-500px; - width:1px; - height:1px; - overflow:hidden; - } - - Keep spammers from pasting too many links into the comment and sending it(counts "http" instances); - A maximum of 2 links per comment is allowed otherwise the comment is rejected. - You could adjust this value in the file classes/ajaxSearchLog.class.inc by changing the CMT_MAX_LINKS definition. - - The maximum length of the comment is of 100 characters. Otherwise the comment is rejected. - Helps short-circuit injection attacks. You could this value in the file classes/ajaxSearchLog.class.inc by - changing the CMT_MAX_LENGTH definition. - - The user searches are stored in the database table $modx_table_prefix."ajaxsearch_log" - These data are not for the end user only for the site administrator. - - Informations stored per each search are the following: - - - id : internal id of the search request looged - - searchstring : the search terms used for the search - - nb_results : number of results found - - results : document ids found - - comment : comment leave by the user regarding the search results - - as_call : ajaxSearch snippet call used - - as_select : select statement used (could be reused thru phpmyadmin) - vdate : date and hour of the request - - ip : user IP - - The table could be drop without any impacts on the AjaxSearch behaviour. Simply, - if the asLog parameter is set and the table inexisting, the table is rebuilt. - - A 'Did you find what you are looking for?' form is available for the user when the option comment is set. - In this case the user could leave a comment about the search results. - &tplComment parameter define which form template used. - - A module will be provided later to manage these search datas - We could imagine the following features: - - drop the table - - delete (successfull, unsuccessfull, all) searches executed before a specific date - - delete (successfull, unsuccessfull, all) searches executed before N days - - give me as meta tag keywords, the N most used (successfull, unsuccessfull) search terms - - replay a specific search with a new debug level - - delete uncommented (successfull, unsuccessfull, all) searches - - filter view with commented (successfull, unsuccessfull, all) searches - - ----------------------------------------------------------------- -:: Ajax Parameters - Used only with the ajaxSearch mode ----------------------------------------------------------------- - ----- &ajaxMax [int] (optional) - The number of results you would like returned from the ajax search. - - ----- &showMoreResults [1 | 0] (optional) - If you want a link to show all of the results from the ajax search. - - ----- &moreResultsPage [int] (optional) - Page you want the more results link to point to. This page should contain - another call to this snippet for displaying results. - - ----- &liveSearch [1 | 0] (optional) - There are two forms of the ajaxSearch. - 0 - The form button is displayed and searching does not start until the button is pressed by the user. - 1 - There is no form button, the search is started automatically as the user types (liveSearch) - - ----- &opacity [float value between 0. and 1.] (optional) - Opacity of the ajaxSearch_output div where are returned the ajax results. Default is 1. - Float value between 0. (transparent) and 1. (opaque) - - ----- &addJscript [1 | 0] (optional) - If you want the mootools library added to the header of your pages automatically set this to 1. - Set to 0 if you do not want them inculded automatically. Default is 1. - - ----- &tplAjaxGrpResults - chunk to style the ajax output group of results outer - by default: @FILE:".AS_SPATH.'templates/ajaxGrpResults.tpl.html' - - ----- &tplAjaxResults - chunk to style the ajax output results outer - by default: @FILE:".AS_SPATH.'templates/ajaxResults.tpl.html' - - ----- &tplAjaxResult - chunk to style each output result - by default: @FILE:".AS_SPATH.'templates/ajaxResult.tpl.html' - - ----------------------------------------------------------------- -:: Non Ajax Parameters - Used only with the non-ajaxSearch mode ----------------------------------------------------------------- - ----- &landingPage [int] (optional) - Document id you would like the search to show on. (For non-ajax search) - - ----- &grabMax [int] (optional) - The number of results per page returned (For non-ajax search) - - ----- &pageLinkSeparator [ string ] (optional) - separator of the paging's links - any string you want, between your page link numbers - by default: " | " - - ----- &showPagingAlways [1 | 0] (optional) - always display paging. Even if you get only one page. - Set this to `1` if you would like to always show paging. - - Two use cases: You are using non-ajax search or when you are using ajax search but - you have set up showMoreResults to `1` and you have defined moreResultsPage, - then it may happen that ajax search result have only one page and pagination isn't showed - by default : 0 - - ----- &tplGrpResults - chunk to style the non-ajax output group of results outer - by default: @FILE:".AS_SPATH.'templates/grpResults.tpl.html' - - ----- &tplResults - chunk to style the non-ajax output results outer - by default: @FILE:".AS_SPATH.'templates/results.tpl.html' - - ----- &tplResult - chunk to style each output result - by default: @FILE:".AS_SPATH.'templates/result.tpl.html' - - ----- &tplPaging - chunk to style the paging links - @FILE:".AS_SPATH.'templates/paging.tpl.html' - - ----------------------------------------------------------------- -:: CSS ----------------------------------------------------------------- - The following items are used to style the starting form and - ajax result container. - - #ajaxSearch_form - id of the search form - #ajaxSearch_input - id of the input box on the form - #ajaxSearch_submit - id of the submit button - #ajaxSearch_output - id of the div that the ajax results are returned in - #ajaxSearch_intro - id of the div that contains the intro paragraph - #ajaxSearch_cmtForm - id of the comment form - - #searchClose - id of the search close button - #indicator - id of the ajax load image - - #ajaxSearch_cmtSubmit - id of the submit button of the comment form - #ajaxSearch_cmtReset - id of the reset button of the comment form - - The following items are used to style the results when the user does not have - javascript or they have clicked the more results link - - .ajaxSearch_paging - class for span of result pages listing - .ajaxSearch_currentPage - class for span the current page - .ajaxSearch_pagination - class for pagination paragraph - .ajaxSearch_result - class for result container div - .ajaxSearch_resultLink - class for result link - .ajaxSearch_resultDescription - class for result description span - .ajaxSearch_extract - class for content extract div (for highlighting) - .ajaxSearch_highlight1,2,3 - classes for result highlighting. You need to - create as many classes as terms you think a user will search for. - .ajaxSearch_resultsIntroFailure - class for no results paragraph - .ajaxSearch_intro - class for intro paragraph - .ajaxSearch_resultsInfos - class for the number of results found - .ajaxSearch_resultsDisplayed - class for the number of results displayed - .ajaxSearch_grpResultName - class for the name of the group of results - .ajaxSearch_grpResultsDisplayed - class for the number of results displayed for the group - - - The following items are used to style the results returned by the ajax request. - - .AS_ajax_result - class for the result container div - .AS_ajax_resultLink - class for the result link - .AS_ajax_resultDescription - class for the result description span - .AS_ajax_extract - class for the content extract div (for highlighting) - .AS_ajax_hightlight1,2,3 - classes for result highlighting. You need to - create as many classes as terms you think a user will search for. - .AS_ajax_more - class for more search results div - .AS_ajax_resultsIntroFailure - class for no results paragraph - .AS_ajax_resultsInfos - class for the number of results found - .AS_ajax_resultsDisplayed - class for the number of results displayed - .AS_ajax_grpResultName - class for the name of the group of results - .AS_ajax_grpResultsDisplayed - class for the number of results displayed for the group - - ----------------------------------------------------------------- -:: Templating and Placeholders ----------------------------------------------------------------- - - To use an another template, define the template name and location with - @FILE:assets/snippets/ajaxSearch/templates/folderName/templateName.tpl.htm - or create a chunck parameter by copy/paste and change of an existing template. - - &tplInput : chunk to style the ajaxSearch input form - by default : /templates/input.tpl.html - - Non ajax mode & more results page : - - &tplGrpResults : chunk to style the output results outer - Group results outer layout (category name, number of results, list of results, paging) - by default : /templates/grpResults.tpl.html - - &tplResults : chunk to style the output results outer - Results outer layout (number of results, list of results, paging) - by default : /templates/results.tpl.html - - &tplResult : chunk to style each output result - Result template (title link, description, extract, breadcrumbs link) - by default : /templates/result.tpl.html - - &tplPaging : chunk to style the paging links - Paging link template (pages, current page) - by default : /templates/paging.tpl.html - - &tplComment - chunk to style comment form - by default: @FILE:".AS_SPATH.'templates/comment.tpl.html' - - Ajax mode : - - &tplAjaxGrpResults : chunk to style the ajax output group of results outer - Results outer layout (category name, number of results, list of results, more results link) - by default : /templates/ajaxGrpResults.tpl.html - - &tplAjaxResults : chunk to style the ajax output results outer - Results outer layout (number of results, list of results, more results link) - by default : /templates/ajaxResults.tpl.html - - &tplAjaxResult : chunk to style each ajax output result - Result template (title link, description, extract, breadcrumbs link) - by default : /templates/ajaxResult.tpl.html - - -searchString available as placeholder -Use [+as.searchString+] to get the search string used for the search. -For instance use "Search results for [+as.searchString+]" as pagetitle for your landing page. - -All the fields of the main table and of the joined table defined as "displayed" -All the TV could be displayed as placeholder (except if &tvPhx=`0`) -in the table definition could be used with the tplResult and tplAjaxResult templates: - -For each field named "xxxx" we having: -[+as.xxxx+] the content of the field named xxxx -[+as.xxxxShow+] a boolean value which is equal to 0 when xxxx='', 1 otherwise -[+as.xxxxClass+] a class name equal to: -- ajaxSearch_resultXxxx for the non ajax results (&tplResult) -- AS_ajax_resultXxxx for the ajax window (&tplAjaxResult) - - -For instance, with &whereSearch="content,tv", the following informations are available - -"content" as main table - id field : [+as.id+] -"content" as main table - date field : [+as.publishon+] -"content" as main table - displayed fields : - -[+as.pagetitle+], [+as.pagetitleShow+], [+as.pagetitleClass+] -[+as.longtitle+], [+as.longtitleShow+], [+as.longtitleClass+] -[+as.description+], [+as.descriptionShow+], [+as.descriptionClass+] -[+as.alias+], [+as.aliasShow+], [+as.aliasClass+] -[+as.introtext+], [+as.introtextShow+], [+as.introtextClass+] -[+as.menutitle+], [+as.menutitleShow+], [+as.menutitleClass+] -[+as.content+], [+as.contentShow+], [+as.contentClass+] - -"content" as main table - breadcrumbs link: -[+as.breadcrumbs+],[+as.breadcrumbsShow+],[+as.breadcrumbsClass+] - -"tv" as joined table - 'concat_alias' field : [+as.tv_value], [+as.tv_valueShow+], [+as.tv_valueClass+] - -and in any case the extract result built with &extract parameter: - - -[+as.extract+], [+as.extractShow+], [+as.extractClass+] -with AS_ajax_resultExtract (ajax) or ajaxSearch_resultExtract (non-ajax) as class names - -With &whereSearch="content,tv,maxigallery,jot" we add : - -[+as.jot_content], [+as.jot_contentShow], [+as.jot_contentClass] -[+as.gal_title], [+as.gal_titleShow], [+as.gal_titleClass] -[+as.gal_descr], [+as.gal_descrShow], [+as.gal_descrClass] - -[+as.resultNumber+] is available to display the number of the result - - -&tvPhx : Set placeHolders for TV (template variables) - - 0 : disallow the feature - 1 : allow the display of all Modx TVs of the document found (default) - - Placeholders for TVs are: - - [+as.tvName+], [+as.tvNameShow+], [+as.tvNameClass+] - - Where tvName is the MODX name of a TV - - [+as.tvName+] is the HTML output of your TV - [+as.tvNameShow+] = 1 if the TV is not NULL - [+as.tvNameClass+] : - - ajaxSearch_resultTvName for the non ajax results (&tplResult) - - AS_ajax_resultTvName for the ajax window (&tplAjaxResult) - - e.g: AS_ajax_resultTag, a tv named "tag" - (take care, the first letter of tvName should be here an upper case) - - ----------------------------------------------------------------- -:: Ajax Mode Example Calls ----------------------------------------------------------------- -[!AjaxSearch!] - A basic (Ajax) default call that renders a search form with the default images and parameters - -[!AjaxSearch? &showMoreResults=`1` &moreResultsPage=`25`!] - Allows a link to a full-page search to go to another page. - in this example, the document #25 should contain a non-ajaxSearch snippet call like : - [!AjaxSearch? &ajaxSearch=`0` &showInputForm=`0`!] to display the results without the - search form again - -[!AjaxSearch? &ajaxMax=`10` &extract=`0`!] - Overrides the number of maximum results returned and removes search term highlighting. - -[!AjaxSearch? &documents=`in:2,3,8,16`!] - A call that renders a search form with the default images and parameters - search terms are searched among the documents `2,3,8,16` - -[!AjaxSearch? &parents=`not in:5,7` &depth=`2`!] - A call that renders a search form with the default images and parameters - search terms are searched on 2 levels among all the document except among the chidren documents of 5 and 7 - ----------------------------------------------------------------- -:: Non-Ajax Mode Example Calls ----------------------------------------------------------------- -[!AjaxSearch? &ajaxSearch=`0`!] - A basic non-Ajax default call that renders a search form with the default images - and non-Ajax parameters - -[!AjaxSearch? &ajaxSearch=`0` &landingPage=`25`!] - In this example, search results will be displayed on document #25 - This document should contain a non-ajaxSearch snippet call like : - [!AjaxSearch? &ajaxSearch=`0` &showInputForm=`0` &grabMax=`10` &extract=`0`!] - to display the results without the search form again - And overrides the number of maximum results returned per page and removes search term highlighting. - - ----------------------------------------------------------------- -:: Error messages ----------------------------------------------------------------- - -=== default.config.php not found! Check the existing of this file! -means that the default configuration file is missing. This file is required in every cases - -=== default configuration array not defined in default.config.php Check the content of this file! -means that the content of the default configuration file is abnormal and wrong - -=== xxxx not found! Check your config parameter or your config file name! -means that the user configuration file is not existing in the configs directory - -=== AjaxSearch error: to use the debug mode, " . AS_DBGDIR . " should be a writable directory. -means that you need to change the rights of ajaxSearch/debug directory. It should be writable for the -creation of the log file. - -=== AjaxSearch error: php_mbstring extension required -means that the Php mbstring extension should be set - -=== AjaxSearch error: database_connection_charset not set. Check your MODX config file - -=== AjaxSearch error: database_connection_charset is null. Check your MODX config file -means that your $database_connection_charset variable of your /'.MGR_DIR.'/includes/config.inc.php file is an empty value - -=== AjaxSearch error: unknown database_connection_charset = xxxx Add the appropriate Html charset mapping in the classes/ajaxSearch.php file -is not really an error but need that you add in the classes/ajaxSearch.php file the mapping -between the mysql database character set (not the collation) and the html charset. - -=== AjaxSearch error: strip input function xxxx not defined in the configuration file: yyyy -means that the php function xxxx which implements the strip input function doesn't -exist in the user configuration file xxxx - -=== AjaxSearch error: search function "siteConfig" not defined in the configuration file: xxxx -means that you use the site parameter without defining this site thru the -"siteConfig" function in the user configuration file - -=== AjaxSearch error: Site xxxx not defined in the configuration file: yyyy ! -means that no new configuration parameters are provided by the siteConfig for -the site xxxx in the user configuration file xxxx - -=== AjaxSearch error: search function "subsiteConfig" not defined in the configuration file: xxxx ! -means that you use the subsearch parameter or category parameter without defining -this site thru the "subsiteConfig" function in the user configuration file - -=== AjaxSearch error: Subsite xxxx of yyyy not defined in the configuration file: zzzz ! -means that no new configuration parameters are provided by the subsiteConfig function for -the subsite xxxx of the site yyyy in the user configuration file zzzz - -=== AjaxSearch error: table tttt not defined in the configuration file: xxxx ! -means that you use a whereSearch parameter with a table not defining in the user configuration file - -=== AjaxSearch error: tv tttt not defined - Check your withTvs parameter ! -means that you use the withTv parameter or tvPhx parameter with an inexisting Tv. Check your snippet call! - - ------------------------------------------------------------------ -:: How-to use this snippet ------------------------------------------------------------------ - -1. Copy the contents of the file snippet.ajaxSearch.tx into a new snippet named AjaxSearch - -2. Create a directory named ajaxSearch under the assets/snippets folder. - -3. Open the js/ajaxSearch1/ajaxSearch.js file and set the loading & close image path to an image - you want to display while the search is working. - - - ajaxSearch.js is the mootools 1.11 version - - ajaxSearch-mootools2.js the mootools 1.2.4 version - - ajaxSearch-jquery the JQuery 1.4.2 version - - -4. Copy the files from the zip into the ajaxSearch folder. - -5. Add inside a document, the snippet call like the following: [!AjaxSearch!] - - Note: If javascript is disabled the snippet functions as the non-ajax mode. - So you will want to set any of the other options in the snippet call for these users. - Test by calling via [!AjaxSearch? &ajaxSearch=0 &otherParamsAsNeeded=`here` !] - -6. Use the following styles to change how your search looks: - -/* -css style for AjaxSearch -- tags for ajax mode are prefixed by AS_ajax_ -- common or non-ajax tags are prefixed by ajaxSearch_ -*/ - -/* Input form --------------------------------------------------------------- */ -#ajaxSearch_form , #as2_ajaxSearch_form { width:500px; position:relative;} -#ajaxSearch_form fieldset { margin:0; padding:0; width:215px;} - -#ajaxSearch_form fieldset.inputAS { margin:0; padding:0; width:400px;} - -#as0_ajaxSearch_input { width:160px; font-size:0.8em; padding:2px 2px; border:#DFDFDF inset 2px;} - -#ajaxSearch_input, #as2_ajaxSearch_input { - width:160px; - background:#FFF; - font-size:0.8em; - border:2px inset gray; - padding:4px 1px 2px 3px; - margin:0; -} - -#ajaxSearch_submit, #as2_ajaxSearch_submit { - margin:0 0 0 5px; - font:bold 1em Arial, Sans-serif; - background:#FFF url(images/gradientbg.jpg) repeat-x; - padding:2px 3px; - color:#333; - border:1px solid #BDBDBD; -} - -#ajaxSearch_intro { margin:10px 0;} - -#searchClose, #as2_searchClose{ position:absolute; left:216px; top:5px; width:16px;} -#indicator, #as2_indicator{ position:absolute; left:234px; top:5px; width:16px;} - -#ajaxSearch_form.input2 #searchClose { position:absolute; left:216px; top:32px; width:16px;} -#ajaxSearch_form.input2 #indicator{ position:absolute; left:234px; top:32px; width:16px;} - -#ajaxSearch_subSearch, #as2_ajaxSearch_subSearch { - padding:3px 2px 2px 2px; - margin:5px 0 10px 0; - list-style:none; -} - -#subSearch_maxigallery, #as2_subSearch_maxigallery { - padding:2px 2px 2px 2px; - margin:5px 0 10px 0; - width:100%; - clear:both; -} - -#ajaxSearch_radio, #as2_ajaxSearch_radio { - background:#FFFFFF; - font-size:0.8em; - margin:0 0 5px 0; - padding:1px 1px 2px 1px; -} - -#ajaxSearch_select, #as2_ajaxSearch_select { - background:#FFFFFF; - height:auto; - width:150px; - font-size:0.9em; - padding:3px 1px 2px 1px; - border:2px inset gray; - float:left; -} - -#asf_form { - margin: 10px 0 0 0; - padding: 0; -} - -/* output results --------------------------------------------------------------- */ -#ajaxSearch_output.init, #as2_ajaxSearch_output.init { - border: none; - background-color: #FFFFFF; -} - -#ajaxSearch_output, #as2_ajaxSearch_output { - font-size:90%; - background-color:#EFEFEF; - border:1px solid #6F9303; - color:black; - width:450px; - z-index:1; - padding:5px; - margin:10px 0 15px 0; -} - -.ajaxSearch_resultsInfos, .AS_ajax_resultsInfos { - margin:10px 0 10px 0; -} -.ajaxSearch_resultsDisplayed, .AS_ajax_resultsDisplayed { -font-weight:bold; -color:#CC0000; -font-size:90%; -display:block; -float:right; -} - -.ajaxSearch_paging { - display:block; - margin:5px 0 10px; -} -.paging1, .paging2 { - padding:5px 0 10px; - margin:0 0 5px; -} -.paging1Infos{ margin:0 5px 5px; color:green;} -.paging1Prev{ margin:0; padding:8px; background:url(images/asprev.png) 0 center no-repeat;} -.paging1Next{ margin:0; padding:8px;background:url(images/asnext.png) 0 center no-repeat;} - -.paging2More{ margin:10px 10px; padding:8px;background:url(images/asnext.png) 0 center no-repeat;} -.paging2Text{ margin:0 0 0 12px; color:green;} - -.ajaxSearch_currentPage { - color:#6F9303; - font-weight:bold; -} - -div .AS_ajax_result, div .ajaxSearch_result { - padding:3px; - margin:3px 0; -} - -.AS_ajax_result { - color:#444; - margin-bottom:3px; -} - -.AS_ajax_resultLink, .ajaxSearch_resultLink { - text-decoration:underline; - color:#6F670D; -} - -.AS_ajax_resultDescription,.ajaxSearch_resultDescription { - color:#555; - padding:2px; -} - -.AS_ajax_more,.ajaxSearch_more { - margin:10px 0; - height:30px; -} - -.AS_ajax_more a{ - font-weight:bold; - color:#6F670D; -} - -.AS_ajax_resultsIntroFailure{ - padding:3px; - margin: 5px 0; -} -.AS_ajax_resultsIntroFailure h3{ - color:red; -} - -/* groups of results */ -.grpResultsNb { -color:#CC0000; -} -.ajaxSearch_grpResultsDisplayed, .AS_ajax_grpResultsDisplayed { -font-weight:normal; -color:#CC0000; -font-size:90%; -display:block; -float:right; -} - -.ajaxSearch_grpResultName, .AS_ajax_grpResultName { - background:url(images/img04.jpg) no-repeat left 50%; - font:bold 1em Arial, Sans-serif; - padding:5px 0 5px 15px; - margin:3px 0; -} - -/* highlight results */ -.AS_ajax_highlight1,.ajaxSearch_highlight1 { - color:#C00; - font-weight:700; - padding:0; -} - -.AS_ajax_highlight2,.ajaxSearch_highlight2 { - color:#DF5380; - font-weight:700; - padding:0; -} - -.AS_ajax_highlight3, .ajaxSearch_highlight3{ - color:#DF53B5; - padding:0; - font-weight:bold; -} - -.AS_ajax_highlight4, .ajaxSearch_highlight4{ - color:#DF5380; - padding:0; - font-weight:bold; -} - -.AS_ajax_highlight5, .ajaxSearch_highlight5{ - color:#A453DF; - padding:0; - font-weight:bold; -} - -.AS_ajax_highlight6, .ajaxSearch_highlight6{ - color:#53ADDF; - padding:0; - font-weight:bold; -} - -/* Comment Area */ -#ajaxSearch_cmtForm fieldset{ - height:135px; -} -.ajaxSearch_hiddenField { - position:absolute; - text-decoration:underline; - background-color:#CC0000; - left:0px; - top:-500px; - width:1px; - height:1px; - overflow:hidden; -} - -#ajaxSearch_cmtThks{ - color:#CC0000; - padding:0; - margin:10px; - font-size:1em; - font-weight:bold; - height:2em; -} - -.ajaxSearch_cmtIntro{ - color:gray; - font-size:1em; - font-weight:bold; -} - -#ajaxSearch_cmtArea{ - width:440px; - height:50px; - padding:3px; - margin:8px 0 3px; -} - -#ajaxSearch_cmtSubmit, #ajaxSearch_cmtReset{ - margin:0 0 0 5px; - font:bold 1em Arial, Sans-serif; - background:#FFF url(images/gradientbg.jpg) repeat-x; - padding:2px 3px; - color:#333; - border:1px solid #BDBDBD; -} - - -7. If you are using the display more results link setup a new page with the snippet - call to display your results. - -8. Test and see the search working with Ajax! - - - ----------------------------------------------------------------- -:: How-to change the ajaxSearch folder location ----------------------------------------------------------------- - -To change the location of the ajaxSearch snippet folder : - -1. change the definition of AS_SPATH in snippet.ajaxSearch.txt - -// Path where ajaxSearch is installed -define('AS_SPATH', 'assets/snippets/ajaxSearch/'); - -2. change the definition of AS_SPATH in ajaxSearchPopup.php - -define ('AS_SPATH' , 'assets/snippets/ajaxSearch/'); - -3. if you use the default release of mootools, in the js/ajaxSearch1/ajaxSearch.js file -change the _base value: - -var _base = 'assets/snippets/ajaxSearch/'; - -Change this _base value in the js/ajaxSearch1/ajaxSearch-mootools2.js if you use mootools 1.2 -Change this _base value in the js/ajaxSearch1/ajaxSearch-jquery.js if you use jquery - -4. change the _base value in the js/comment/ajaxSearchCmt.js file - - ----------------------------------------------------------------- -:: How-to use the search highlight plugin ----------------------------------------------------------------- - -1. Create a new plugin named Search_Highlight. - -2. Copy the contents of the file plugin.searchHighlight.tpl into the plugin. - -3. On the System Events tab select OnWebPagePrerender. - -4. Somewhere in your template or document add the html: - This will display the terms and a link to remove the highlighting - -5. Do a search and click the link to see the search highlighting carried through to the page. - - ----------------------------------------------------------------- -:: How-to use the search advHighlight plugin ----------------------------------------------------------------- - -AdvSearch_Highlight is an advanced "Multi-Part" variant of Search_Highlight -It allows to frame with "" and -several parts of the site that will be highligthed. - -Install it as the search highlight plugin. - - ----------------------------------------------------------------- -:: Where find more support ----------------------------------------------------------------- -1. Look at : - - Modx Community forum >> support >> Repository Items Support >> support/comments for ajaxSearch - - http://forums.modx.com/forums/thread/39223/support-comments-for-ajaxsearch-1-9-2b-finale#dis-post-226189 - -2. Documentation : http://rtfm.modx.com/extras/evo/ajaxsearch - -3. Demo site : http://www.evo.wangba.fr - -4. Bugs & features : https://github.com/modxcms/AjaxSearch diff --git a/assets/snippets/ajaxSearch/documentation/ajaxSearch_version_1.10.2.txt b/assets/snippets/ajaxSearch/documentation/ajaxSearch_version_1.10.2.txt deleted file mode 100644 index e10c484d6f..0000000000 --- a/assets/snippets/ajaxSearch/documentation/ajaxSearch_version_1.10.2.txt +++ /dev/null @@ -1,475 +0,0 @@ - - AjaxSearch - version 1.11.0 - - Coroico - http://www.evo.wangba.fr - - 12th of april 2016 - - - Small Fixes - -===================================================================================== - -Previous versions : - - 1.11.0 delivered the 11th of Jul 2017 (provided with EVO 1.3) - - 1.10.2 delivered the 12th of April 2016 (provided with MODX 1.1.1) - - 1.10.1 delivered the 5th of June 2014 (provided with MODX 1.0.14) - - 1.10.0 delivered the 27th of March 2014 (provided with MODX 1.0.13) - - 1.9.3 delivered the 26th of September 2012 (provided with MODX 1.0.11) - - 1.9.2 delivered the 5th of December 2010 (provided with MODX 1.0.4) - - 1.9.1 delivered the 30th of August 2010 - - 1.9.0 delivered the 18th of May 2010 (provided with MODX 1.0.4) - - 1.8.5 delivered the 20th of March 2010 (provided with MODX 1.0.3) - - 1.8.4 delivered the 20th of October 2009 (provided with MODX 1.0.1) - - 1.8.3a delivered the 12th of July 2009 (provided with MODX 1.0.0) - - 1.8.3 delivered the 08th June 2009 - - 1.8.2 delivered the 21th April 2009 - - 1.8.1 delivered the 13th October 2008 (provided with MODX 0.9.6.3) - - -======================= CHANGES (since 1.8.5) ================================== - - -==== Renaming of some parameters - - For a better and a simpler undertstanding some parameters have been renamed - - AS_showForm => showInputForm - AS_landing => landingPage - AS_showResults => showResults - - -==== Renaming of some $_POST and $_GET variables - - AS_search => search - - -==== Some $_GET variables are now deprecated - - FSF_search is now non interpreted - - -==== &searchWordList deprecated - - The option is now set un the input template - - -==== &resultsPage deprecated - - use landingPage rather this deprecated parameter - - -==== &showMoreResults deprecated - - use moreResultsPage rather this deprecated parameter - - -==== Firebug mode for the debug is deprecated - - Usage of the firebug mode for the debug is deprecated - Negatives values : -1, -2, -3 are now unterstood as 1, 2, 3 - - - -====================== NEW FEATURES (since 1.8.5) ============================== - - -==== Accented characters - search html entities too - - The html entity version of the search terms are also searched. - e.g: "ph&eactute;nomène" and "phénomène" are searched when "phénomène" is searched. - - -==== advSearch - exactphrase - - The search with the advSearch parameter set to "exactphrase" returns only results which - exactly match to the searched terms. - e.g: search "and" doesn't return "band" or "land" just "and" terms. - As this search option use REGEXP, the search could be longer than for the other options. - - -==== Use Google Analytics to track AjaxSearch - - AjaxSearch forms could now use $_POST or $_GET - with $_GET, the query parameter in the URL after you search allow you to track the site - search with Google Analytics. - To do this, simply replace method="post" by method="get" in the input template used - by your ajaxSearch calls. - - -==== timeLimit - increase the allowed execution time of your script - - &timeLimit = [ int | 60 ] - Max execution time in seconds for the AjaxSearch script - 0 - If set to zero, no time limit is imposed - Default: 60 - 1 minute. - - -==== withTvs Define which Template Variables will be used for the search and display of results. - - &withTvs [ [ + | - ] [ : tvlist] ] - by default '' - - The parameter withTvs define which Tv will be added as field result for displaying - and in which tv the search will occur. Only text type TV are enabled - - e.g: - - &withTvs=`tv1,tv2,tv3` - tv1, tv2, Tv3 are added - &withTvs=`+:tv1,tv2,tv3` - tv1, tv2, Tv3 are added - &withTvs=`+` - all tvs of the site are added - - &withTvs=`-` - all tvs of the site are added - &withTvs=`-:tv1,tv2,tv3` - all tvs of the site except tv1, tv2, Tv3 are added - - &withTvs=`` - no tv added - - If &whereSearch contains 'tv' then a tv_value field which contain the concatened - values of all tv of the document is added - - So the tv added could be used for filtering with the filter parameter (see &filter) - - Like the default site content parameters (pagetitle, longtitle, ...) the - Tvs added are available with the following placeholders: - - [+as.tvname+], [+as.tvnameShow+], [+as.tvnameClass+] - - Where tvname is the MODX name of a TV - - [+as.tvname+] is the HTML output of your TV - [+as.tvnameShow+] = 1 if the TV is not NULL - [+as.tvnameClass+] : - - ajaxSearch_resultTvname for the non ajax results (&tplResult) - - AS_ajax_resultTvname for the ajax window (&tplAjaxResult) - - -==== Append the content of some Tvs to your search results with the "tvPhx" parameter - - &tvPhx [ [ + | - ] [ : tvlist] ] - by default '' - - The parameter tvPhx define which additional tv will be added as placeholder. - - e.g: - - &tvPhx=`tv1,tv2,tv3` - tv1, tv2, Tv3 are added as placeholders - &tvPhx=`+:tv1,tv2,tv3` - tv1, tv2, Tv3 are added as placeholders - &tvPhx=`+` - all tvs of the site are added as placeholders - - &tvPhx=`-` - all tvs of the site are added as placeholders - &tvPhx=`-:tv1,tv2,tv3` - all tvs of the site except tv1, tv2, Tv3 are added as placeholders - - &tvPhx=`` - no tv defined as placeholders. - - The following placeholders are anabled with the tv: - - [+as.tvname+], [+as.tvnameShow+], [+as.tvnameClass+] - - Where tvname is the MODX name of a TV - - [+as.tvname+] is the HTML output of your TV - [+as.tvnameShow+] = 1 if the TV is not NULL - [+as.tvnameClass+] : - - ajaxSearch_resultTvname for the non ajax results (&tplResult) - - AS_ajax_resultTvname for the ajax window (&tplAjaxResult) - - The tv value could be used with the filter parameter (see &filter) - - As withTvs includes the TV as a new field in the select clause of the mysql query, - tvPhx append the content of the selected tv after the search and before filer. - - -==== filter - to exclude unwanted documents of the search - - filtering by tv name is now possible - - e.g: &filter=`articleTags,volcano,7` display only documents related to volcanoes. - Documents are filtered by the TV 'articleTags'. - - IMPORTANT : here the tv should be allowed as result with the withTvs or tvPhx - parameters - - -==== Show introduction message under the input form - - &showIntro [ 0 | 1 ] - - To show or hide the introduction message displayed with the input form - Default: 1 (show) - - -==== 2 new paging type added - - &pagingType [ 0 | 1 | 2 | 3 ] : type of pagination - - Default: 1 - - 0: Results Pages 1 | 2 | 3 - 1: Previous - X-Y /Z - Next - 2: X-Y /Z - Show more 10 results - - Type 0 for non-ajax mode only - Type 1 for non-ajax and ajax mode - Type 2 for ajax mode (Jquery only) - - &tplPaging0 - Chunk to style the paging links - type 0 - - &tplPaging1 - Chunk to style the paging links - type 1 - - &tplPaging2 - Chunk to style the paging links - type 2 - - IMPORTANT: - arrow button images are provided with the images folder. - use asprev.png, asnext.png or your own images to define your previous and next buttons. - - e.g: - .paging1Prev{ width:16px; margin:0 3px 0 0;display:block; float:left; text-indent:-3000px; background:url(images/asprev.png) 0 center no-repeat; } - .paging1Next{ width:16px;display:inline-block;text-indent:-3000px; background:url(images/asnext.png) 0 center no-repeat; } - - .paging2More{ margin:10px 10px; padding:8px;background:url(images/asnext.png) 0 center no-repeat;} - - -==== Custom output - - &output [ 0 | 1 ] - - 0 - by default the results are listed below the input form - 1 - custom layout: - - To place the different AjaxSearch elements where you want, use the following placeholders - - [+as.inputForm+] : the input form with the intro message - [+as.results+] : the search results - - The parameter &tplLayout is now deprecated - - The parameter &tplInput is now used to style the ajaxSearch input form - - -==== New modifiers for the ajaxSearch Phx parser - - to include images in your templates, uses the possible following phx modifiers: - - imgwidth : image width - e.g: - provide the image width - - imgheigth : image heigth - e.g: - provide the image height - - imgattr : image attributs - e.g: - provide the image attributes as height="xxx" width="yyy" - - imgmaxwidth=`length` : image max width - e.g: - limit the width of the image to a maximum. Under this limit, keep the true width - - imgmaxheight=`length` : image max height - e.g: - limit the height of the image to a maximum. Under this limit, keep the true height - - These modifiers are particularly usefull with the ajax mode to help html to determine the height of the AjaxSearch pop-up window - - -==== Unique id for AjaxSearch instance - - &asId [ string | ''] - Any combination of characters a-z, underscores, and numbers 0-9 - This is case sensitive. Default = empty string - - This parameter allow distinguish several Ajaxsearch instances on the same page - The id is used to link the snippet calls between them - Choose a short name. eg: "as2" - - -==== Define categories - - &category [ tv_name | ''] - Any combination of characters a-z, underscores, and numbers 0-9 - This is case sensitive. Default = empty string - Name of a TV. The category of a MODX document is provided by this TV content - - e.g: &category=`category` - And the "category" tv value of a document could contain for instance Music, Arts, ... - Then the categConfig function should be defined like that: - - /* - * categConfig : To define the display of categories (output) - * Add a category as a switch item. 'uncategorized' item describe the results outside of any category - * Add a switch for a new site. The default site is named 'defsite'. - * Allowed config parameters : grpLabel, tplResult, tplAjaxResult, display, extract, rank ... - */ - if(!function_exists('categConfig')) { - function categConfig($site='defsite',$category){ - $config = array(); - $site = strtolower($site); - $category = strtolower($category); - switch($site) { - case 'defsite': - switch($category){ - case 'arts': - $config['grpLabel'] = 'Arts'; - $config['tplAjaxResult'] = 'imgResult'; // allow the display of an image - break; - case 'music': - $config['grpLabel'] = 'Music'; - $config['tplAjaxResult'] = 'imgAjaxResult'; // allow the display of an image - break; - case 'geography': - $config['grpLabel'] = 'Geography'; - $config['tplAjaxResult'] = 'imgAjaxResult'; - break; - case '': - $config['grpLabel'] = 'Site wide'; - break; - } - } - return $config; - } - } - - -==== Display the results - - &display [ 'mixed' | 'unmixed' ] - - When results comes from differents subsites (categories), you could choose to display the results mixed or unmixed. - Default: unmixed - Unmixed mode display the results grouped by site or subsite. Each group of results could be paginated. - Mixed mode mixes all the results coming from the differents sites or subsites. - With unmixed mode, results are ordered by the field provided by the first field of the order parameter - e.g: if the subsite "products" has been defined with "product_name, supplier" as order parameter and - the site "employees" has been defined with "job" as order parameter, then the results will be ordered by - "using product_name" value for products and "job" value for "employees". - - -==== GrpResult & AjaxGrpResult templates - - &tplGrpResult - Chunk to style the non-ajax output group result outer - &tplAjaxGrpResult - Chunk to style each output group result outer - - -==== Label for a group of results - - in the configuration file a label could be defined to be be linked with the group of results. - This isn't a snippet parameter. Only a variable of configuration file. - This variable shouldn't contain a comma (",") - - $config['grpLabel'] = 'Arts (Painting)'; - - -==== parents ( in / not in) - - &parents [ [ in | not in ] : comma separated list of Ids | '' ] - - e.g: - &parents=`in:24,25` - do the search in the children documents of documents 24 and 25 - - &parents=`not in:24,10` - do the search in all documents except in the children documents of documents 24 and 10 documents - - &parents=`24,25` means &parents=`in:24,25` (compatible with the 1.8.4 release) - &depth [ 0 < int ] Number of levels deep to retrieve documents - - -==== documents ( in / not in) - - &documents [ [ in | not in ] : comma separated list of Ids | '' ] - - e.g: - &documents=`in:28,29,30,31` - do the search in the documents 28,29,30,31 - - &documents=`not in:28,29,30,31` - do the search in all documents except in documents 28,29,30,31 - - &documents=`28,29,30,31` means &documents=`in:28,29,30,31` (compatible with the 1.8.4 release) - - -==== extracts - - Optimization of the extract algorithm. - - -==== Introduction of the document - - The first characters of the document are displayed when the search occurs with the "nowords" advSearch parameters - or when a filter is applied without any search term. - - The length of the indroduction is provided by extractLength parameter (200 characters by default). - The text displayed is the text defined by the extract parameter (content,description,introtext,tv_value by default) - Obviously without any search term highligthed. - - -==== JQuery & mootools libraries updated with the last versions - - Jquery 1.4.2 & mootools 1.2.4 released with ajaxSearch 1.9.0 - - -==== Javscript disabled - - define the css class "init" to mask the ajaxSearch_output div when javascript is disabled - - e.g: - - #ajaxSearch_output.init { - border: none; - background-color: #FFF; - } - - #ajaxSearch_output { - font-size:90%; - background-color:#EFEFEF; - border:1px solid #6F9303; - color:black; - width:550px; - z-index:1; - padding:5px; - margin:10px 0 15px 0; - } - - -==== pcre_backtrack limit - - The backtrack_limit setting sets the maximum number of bytes preg is allowed - to search over before it gives up. This limit is automatically set to 1600000 - at the beginning of the script and then restored to the initial value at the - end of the script. - - -==== Language files updated - - Six labels have been added for english & french language files. - Thanks to post the missing labels on the ajaxSearch forum board - - Used to display the number of results found: - $_lang['as_resultsTextSingle'] = '%d result found.'; - $_lang['as_resultsTextMultiple'] = '%d results found.'; - - Used to display the total number of results displayed: - $_lang['as_resultsDisplayed'] = 'Displayed: %d'; - - Used to display the number of results displayed by group: - $_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; - - Used by pagingType 1: - $_lang['as_paging1Text'] = '%d - %d / %d'; - - Used by pagingType 2: - $_lang['as_paging2Text'] = 'Show more %d results'; - - -==== AjaxSearch Logs manager - Follow up the searches of your users ! - - A simple module is provided to display in the manager the last searches run by your - users. This requires to use the asLog parameter. - Use the file module.ajaxSearchLogManager.txt to set a new module. - - -==== Documentation folder - - in the documentation folder, the cheatSheet ajaxSearch192.pdf give a quick - overview of AjaxSearch parameters. Thanks to Goldsky for this contribution. - - The someCssExamples folder give the search.css file used on the demo site to - style ajaxSearch. - - The someConfigsExamples folder provide the configs folder used on the demo - site. - - The someTemplatesExamples folder provide some templates used on the demo site. - - - diff --git a/assets/snippets/ajaxSearch/documentation/migrationFrom185To190.txt b/assets/snippets/ajaxSearch/documentation/migrationFrom185To190.txt deleted file mode 100644 index 7383885e9d..0000000000 --- a/assets/snippets/ajaxSearch/documentation/migrationFrom185To190.txt +++ /dev/null @@ -1,202 +0,0 @@ -How to migrate from AjaxSearch 1.8.5 to AjaxSearch 1.9.0 and upper - -1/ ============================ Deprecated parameters - -searchWordList - -1.8.5 : ----- &searchWordList user function (optional) -to define a search word list: [user_function_name,params] where params is an optional array of parameters - -1.9.0 : The option list should be now set in the input template. -For instance you could use a snippet to get some Tv values. Look at the toolbox/snippet.asSelectTv.txt - -resultsPage - -1.8.5 : -A very old parameter not really used. If used, Should be replaced by landingPage - - -showMoreResults - -1.8.5 : ----- &showMoreResults [1 | 0] (optional) - If you want a link to show all of the results from the ajax search. - -1.9.0 : this parameter is useless as soon as you define a moreResultsPage. - - -2/ ============================ Renamed parameters - -For a better and a simpler undertstanding some parameters have been renamed - - AS_showForm => showInputForm - AS_landing => landingPage - AS_showResults => showResults - - -3/ ============================ Renamed $_POST and $_GET variables - -Some $_POST and $_GET variables have been renamed. - - AS_search => search - - -4/ ============================ Renamed parameter values - -tvPhx - - If you previously use the tvPhx parameter with &tvPhx=`tv:displayTV` - You need now define which Tvs you would like use. - -1.8.5: -&tvPhx : Set placeHolders for TV (template variables) - - 0 : disallow the feature - 'tv:displayTV' : set up placeholders for each TV (named tvName) linked to the documents found (default) - - -1.9.0: - - &tvPhx [ [ + | - ] [ : tvlist] ] - by default '' - - The parameter tvPhx define which additional tv will be added as placeholder. - - e.g: - - &tvPhx=`tv1,tv2,tv3` - tv1, tv2, Tv3 are added as placeholders - &tvPhx=`+:tv1,tv2,tv3` - tv1, tv2, Tv3 are added as placeholders - &tvPhx=`+` - all tvs of the site are added as placeholders - - &tvPhx=`-` - all tvs of the site are added as placeholders - &tvPhx=`-:tv1,tv2,tv3` - all tvs of the site except tv1, tv2, Tv3 are added as placeholders - - &tvPhx=`` - no tv defined as placeholders. - - The following placeholders are anabled with the tv: - - [+as.tvname+], [+as.tvnameShow+], [+as.tvnameClass+] - - Where tvname is the MODX name of a TV - - [+as.tvname+] is the HTML output of your TV - [+as.tvnameShow+] = 1 if the TV is not NULL - [+as.tvnameClass+] : - - ajaxSearch_resultTvname for the non ajax results (&tplResult) - - AS_ajax_resultTvname for the ajax window (&tplAjaxResult) - - The tv value could be used with the filter parameter (see &filter) - - As withTvs includes the TV as a new field in the select clause of the mysql query, - tvPhx append the content of the selected tv after the search and before filer. - - -5/ ============================ Add PagingType 0 to your AjaxSearch snippet calls - -The default pagingType is 1. So to keep your previous look & feel you need to add &pagingType=`0` - -With the non-ajax mode, this allow the pagination as 1.8.5 -With the ajax mode this disabled the pagination of results for a group of results. - -1.9.0: - - &pagingType [ 0 | 1 | 2 | 3 ] : type of pagination - - Default: 1 - - 0: Results Pages 1 | 2 | 3 - 1: Previous - X-Y /Z - Next - 2: X-Y /Z - Show more 10 results - - Type 0 for non-ajax mode only - Type 1 for non-ajax and ajax mode - Type 2 for ajax mode (Jquery only) - - -6/ ============================ define the "init" css class to prevent javascript disabling - -When using ajax mode, it's better to plan that javascript could be disabled. -In this case you need to add a landingPage to see the search results and define the css class "init" to mask the ajaxSearch_output div when javascript is disabled. Simply add in your css file: - - #ajaxSearch_output.init { - border: none; - background-color: #FFF; - } - -7/ ============================ Customize the look & field of your search results display - -For a better look & field of your results display define: - -.ajaxSearch_resultsDisplayed, .AS_ajax_resultsDisplayed : to style the number of results displayed - -.ajaxSearch_resultsDisplayed, .AS_ajax_resultsDisplayed { -font-weight:bold; -color:#CC0000; -font-size:90%; -display:block; -float:right; -} - -.ajaxSearch_grpResultsDisplayed.AS_ajax_grpResultsDisplayed : to style the number of results by group displayed - -.ajaxSearch_grpResultsDisplayed, .AS_ajax_grpResultsDisplayed { -font-weight:normal; -color:#CC0000; -font-size:90%; -display:block; -float:right; -} - -.ajaxSearch_grpResultName, .AS_ajax_grpResultName : to style the group of results - -.ajaxSearch_grpResultName, .AS_ajax_grpResultName { - background:url(images/img04.jpg) no-repeat left 50%; - font:bold 1em Arial, Sans-serif; - padding:5px 0 5px 15px; - margin:3px 0; -} - -And if you use the pagingType parameter: - -.ajaxSearch_paging { - display:block; - margin:5px 0 10px; -} -.paging1, .paging2 { - padding:5px 0 10px; - margin:0 0 5px; -} -.paging1Infos{ margin:0 5px 5px; color:green;} -.paging1Prev{ width:16px; margin:0 3px 0 0;display:block; float:left; text-indent:-3000px; background:url(images/asprev.png) 0 center no-repeat; } -.paging1Next{ width:16px;display:inline-block;text-indent:-3000px; background:url(images/asnext.png) 0 center no-repeat; } - -.paging2More{ margin:10px 10px; padding:8px;background:url(images/asnext.png) 0 center no-repeat;} -.paging2Text{ margin:0 0 0 12px; color:green;} - -.ajaxSearch_currentPage { - color:#6F9303; - font-weight:bold; -} - -look at documentation/someCssExamples/search.css for some examples. - - -8/ ============================ New labels added - -Six labels have been added. So may be some labels could be missing for your language. - -Used to display the number of results found: -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; - -Used to display the total number of results displayed: -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; - -Used to display the number of results displayed by group: -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; - -Used by pagingType 1: -$_lang['as_paging1Text'] = '%d - %d / %d'; - -Used by pagingType 2: -$_lang['as_paging2Text'] = 'Show more %d results'; \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/documentation/readme.txt b/assets/snippets/ajaxSearch/documentation/readme.txt deleted file mode 100644 index 657997af0a..0000000000 --- a/assets/snippets/ajaxSearch/documentation/readme.txt +++ /dev/null @@ -1,14 +0,0 @@ - -==== documentation folder - - in the documentation folder, the cheatSheet ajaxSearch190.pdf give a quick - overview of AjaxSearch parameters. Thanks to Goldsky for this contribution. - - The someCssExamples folder give the search.css file used on the demo site to - style ajaxSearch. - - The someConfigsExamples folder provide the configs folder used on the demo - site. - - The someTemplatesExamples folder give some examples of custom templates used - on the demo site \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/documentation/someConfigsExamples/custom1.config.php b/assets/snippets/ajaxSearch/documentation/someConfigsExamples/custom1.config.php deleted file mode 100644 index 24a7751e29..0000000000 --- a/assets/snippets/ajaxSearch/documentation/someConfigsExamples/custom1.config.php +++ /dev/null @@ -1,35 +0,0 @@ - -
      [+as.pagetitle+] -
      -[+as.extractShow:is=`1`:then=` -

      [+as.extract+]

      -`+] -[+as.breadcrumbsShow:is=`1`:then=` - [+as.breadcrumbs+] -`+] -
      \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/documentation/someTemplatesExamples/imgResult.tpl.html b/assets/snippets/ajaxSearch/documentation/someTemplatesExamples/imgResult.tpl.html deleted file mode 100644 index 76918601a7..0000000000 --- a/assets/snippets/ajaxSearch/documentation/someTemplatesExamples/imgResult.tpl.html +++ /dev/null @@ -1,10 +0,0 @@ -
      - [+as.pagetitle+] -
      -[+as.extractShow:is=`1`:then=` -

      [+as.extract+]

      -`+] -[+as.breadcrumbsShow:is=`1`:then=` - [+as.breadcrumbs+] -`+] -
      \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/documentation/someTemplatesExamples/rankResult.tpl.html b/assets/snippets/ajaxSearch/documentation/someTemplatesExamples/rankResult.tpl.html deleted file mode 100644 index b2eb32eee3..0000000000 --- a/assets/snippets/ajaxSearch/documentation/someTemplatesExamples/rankResult.tpl.html +++ /dev/null @@ -1,18 +0,0 @@ -
      - [+as.pagetitle+] -[+as.descriptionShow:is=`1`:then=` - [+as.description+] -`+] -[+as.extractShow:is=`1`:then=` -

      [+as.extract+]

      -`+] -[+as.rankShow:is=`1`:then=` - Rank: [+as.rank+]
      -`+] -[+as.publishedonShow:is=`1`:then=` - Published date: [+as.publishedon+]

      -`+] -[+as.breadcrumbsShow:is=`1`:then=` - [+as.breadcrumbs+] -`+] -
      \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/images/asnext.png b/assets/snippets/ajaxSearch/images/asnext.png deleted file mode 100644 index f2d2459e7e0c77be58460365dcb008e278df09f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmV;B0&o3^P)oH23D({IiMK>MIE19K@<54q}A_D8!B*%LSH;mR*5R-`rex zpsVNMk%5u!ssaW~tV&!`ps-p@__Fi|6(tu6xxkPM4UKzS8V+_}d~#wif41BML?qEo z@_M4oM{Cq%4A~$hmmz5Ad7dV>5%4FIDh+6_B1@V}GiuXGU}f&vo%xYl*Z;JT%;pXsId}PC2pa+ofq~C% zl~vEju_dVpc9g`mL~{noZ0_Kpv%}N-_x9~*z%^}{|N0Z(=;q5xkW!(LZH4of07A+h zJDGHRZKxZl8~9kRgs^JD%@!mos$By7nwy$=TezS9R9bQa4dq(E_iC-B)ExG!Cd}F8~b$fDhDwI-rd)MnpmlPyvaS kP|;8MfCp5g@FJn$H+5MGf@F3Vb^rhX07*qoM6N<$f-vGC>i_@% diff --git a/assets/snippets/ajaxSearch/images/close.png b/assets/snippets/ajaxSearch/images/close.png deleted file mode 100644 index c4f1f4d54b4028b14ab7be0cf56d058f4a0ff33a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 zcmV-=0)_pFP)`s#X$fmV6Q9_zDB|#f1v=+S(E7(dwL0i1>x__fTpg+bN7XlUv_Bv6t zic!2Mrm;oLT9fRi`;p!4jwicqKt+8yH}9F}oS8W@WO3;poa@H*`J0OibCs)wsVTIr z!^6hMPcL8Zy?XO@#E_`qQYQWI{_2C(6;Tl2SJ{s9eCI`Vd#9~^N6TjmGwI2TPaZ#7 zxpSKZf%}IrSt?E^lXA25#ju~vnst(npwD3(RDpq(D(O` zRMptsO#oz;mnYZPg;FV6LhRl9544cW+PITtVd|vWJlNVwXxcb{1i)3RM!jxtZjxd# zszI2Jr<7i=7x`mVl{75{pa6&fF}$LtS*qIG*oXjxDPcjU(}_H*)sV*aNdO!cABI?~ zeO_BTn<)z@wx^Vj{AI?Jkd~wNNC0?@b-UdN@cmQz^;=t!#mJA9%VMJ;gftCljDvD{ zRM0nV+CKi_4WzRM`TTUV$(tsBP8+gZ&*w*H?({7_lg)$g4F(QMC*){i0_n7A1{}AS z%WcojwgkZmW!sK!I>WC)nMauq|C3LsPh!KD_88~b?x}14gXZHRFUAQO-VF%HlZ52C zuG7~U3w}ch;RI!jCM3il97foH#*!D(d@Ny~7>;Fnu7k-~To5E#Or|hK^*;p|00W8V U$k^p4ApigX07*qoM6N<$f{uhFvj6}9 diff --git a/assets/snippets/ajaxSearch/images/cross.png b/assets/snippets/ajaxSearch/images/cross.png deleted file mode 100644 index 1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 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 diff --git a/assets/snippets/ajaxSearch/images/readme.txt b/assets/snippets/ajaxSearch/images/readme.txt deleted file mode 100644 index 0a17b0063e..0000000000 --- a/assets/snippets/ajaxSearch/images/readme.txt +++ /dev/null @@ -1,33 +0,0 @@ - -==== images folder - -This folder contains some png files used to style AjaxSearch - -1/ to style the previous / next / show more buttons : - -- asnext.png, asprev : right and left arrows to style the next and buttons of the pagingType 1 -- asnext.png could also be use to style the show more 10 results button (pagingType 2) - -Drop these png files inside the image folder of your css folder - -e.g: - - .paging1Prev{ margin:0; padding:8px; background:url(images/asprev.png) 0 center no-repeat;} - .paging1Next{ margin:0; padding:8px;background:url(images/asnext.png) 0 center no-repeat;} - - .paging2More{ margin:10px 10px; padding:8px;background:url(images/asnext.png) 0 center no-repeat;} - - -2/ to style the ajax mode: - -By default, used by the js files (mootools or JQuery) to style ajax mode with white background: - -- cross.png could be used to style the close indicator of the ajax mode -- indicator.white.png to style the ajax load indicator - -To style the ajax mode on black background, change the header of the js files and uses: - -- close.png could be used to style the close indicator of the ajax mode -- indicator.black.png to style the ajax load indicator - - diff --git a/assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-jquery.js b/assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-jquery.js deleted file mode 100644 index 59a8d8eedc..0000000000 --- a/assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-jquery.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * AjaxSearch 1.11.0 - package AjaxSearch 1 - JQuery 1.4.2 - * author: Coroico - www.evo.wangba.fr - 12/04/2016 - * - * Licensed under the GPL license: http://www.gnu.org/copyleft/gpl.html - */ - -// set the folder location to the correct location of ajaxSearch.php -var _base='assets/snippets/ajaxSearch/'; - -// set the loading and the close image to the correct location for you -var _close=_base + 'images/cross.png'; // close image -var _closeAlt='close search'; -var _load=_base + 'images/indicator.white.gif'; // loading image -var _loadAlt='loading'; - -var _version='1.11.0';var _opacity=1.;var _liveSearch=0;var _minChars=3;var _init='none';var _pagingType=1;jQuery(function($){function activateSearch(){for(ias=0;ias').appendTo(sf).hide();as['sl']=$(''+_loadAlt+'').appendTo(sf).hide();as['sr']=$('#'+p+'ajaxSearch_output').hide().removeClass('init');as['si']=$('#'+p+'ajaxSearch_input');as['se']=$('#'+p+'ajaxSearch_select');if(!as['lvs'])as['ss']=$('#'+p+'ajaxSearch_form input:submit');as['sc'].click(function(){closeSearch(as);return false;});if(!as['lvs'])as['ss'].click(function(){doSearch(as);return false;});else as['si'].keyup(function(){doLiveSearch(as);});if(as['si'].length)as['si'].keypress(function(e){var keyCode=e.keyCode||e.which;if(keyCode==13){doSearch(as);return false;}});doSearch(as);} -function doLiveSearch(as){if(as['lt']){window.clearTimeout(as['lt']);} -as['lt']=setTimeout(function(){doSearch(as)},400);} -function doSearch(as){if(!as['lvs']&&as['is'])return false;if(as['si'].length)s=as['si'].val();else if(as['se'].length){sl=new Array();as['se'].find('option:selected').each(function(i){sl.push($(this).attr('value'));});s=sl.join(" ");} -else s='';if(s==as['bxt'])s='';as['s']=s;if(as['si'].length&&(s.length!=0)&&as['lvs']&&(s.length
      ').append(html);copy.find('.AS_ajax_result').each(function(){nbrd+=1;});updateNbResDisplayed(nbrd,asr);} -function initMoreButtons(grnm,as){if(grnm){var p=as['px'];for(i=0,m=grnm.length;i
      ').append(html);nbrd=0;copy.find('.AS_ajax_result').each(function(){nbrd+=1;});updateNbResDisplayed(nbrd,asr);} -activateSearch();}); diff --git a/assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-mootools2.js b/assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-mootools2.js deleted file mode 100644 index 37d3fb18c8..0000000000 --- a/assets/snippets/ajaxSearch/js/ajaxSearch1/ajaxSearch-mootools2.js +++ /dev/null @@ -1,43 +0,0 @@ -/* - * AjaxSearch 1.11.0 - package AjaxSearch 1 - Mootools 1.2.4 - * author: Coroico - www.evo.wangba.fr - 12/04/2016 - * - * Licensed under the GPL license: http://www.gnu.org/copyleft/gpl.html - */ - -// set the folder location to the correct location of ajaxSearch.php -var _base='assets/snippets/ajaxSearch/'; - -// set the loading and the close image to the correct location for you -var _close=_base + 'images/cross.png'; // close image -var _closeAlt='close search'; -var _load=_base + 'images/indicator.white.gif'; // loading image -var _loadAlt='loading'; - -var _version='1.11.0';var _opacity=1;var _liveSearch=0;var _minChars=3;var _init='none';var _pagingType=1;function activateSearch(){for(ias=0;ias, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, , MIT Style License. - -var MooTools={version:"1.2.4",build:"0d9113241a90b9cd5643b926795852a2026710d4"};var Native=function(k){k=k||{};var a=k.name;var i=k.legacy;var b=k.protect; -var c=k.implement;var h=k.generics;var f=k.initialize;var g=k.afterImplement||function(){};var d=f||i;h=h!==false;d.constructor=Native;d.$family={name:"native"}; -if(i&&f){d.prototype=i.prototype;}d.prototype.constructor=d;if(a){var e=a.toLowerCase();d.prototype.$family={name:e};Native.typize(d,e);}var j=function(n,l,o,m){if(!b||m||!n.prototype[l]){n.prototype[l]=o; -}if(h){Native.genericize(n,l,b);}g.call(n,l,o);return n;};d.alias=function(n,l,p){if(typeof n=="string"){var o=this.prototype[n];if((n=o)){return j(this,l,n,p); -}}for(var m in n){this.alias(m,n[m],l);}return this;};d.implement=function(m,l,o){if(typeof m=="string"){return j(this,m,l,o);}for(var n in m){j(this,n,m[n],l); -}return this;};if(c){d.implement(c);}return d;};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments); -return b.prototype[c].apply(d.shift(),d);};}};Native.implement=function(d,c){for(var b=0,a=d.length;b-1:this.indexOf(a)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim(); -},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase()); -});},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1"); -},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); -return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null;},stripScripts:function(b){var a=""; -var c=this.replace(/]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return"";});if(b===true){$exec(a);}else{if($type(b)=="function"){b(a,c); -}}return c;},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);}return(a[c]!=undefined)?a[c]:""; -});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a;}}return null; -},hasValue:function(a){return(Hash.keyOf(this,a)!==null);},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c); -},this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null; -},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this); -return this;},include:function(a,b){if(this[a]==undefined){this[a]=b;}return this;},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this)); -},this);return a;},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e);}},this);return a;},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false; -}}return true;},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true;}}return false;},getKeys:function(){var a=[]; -Hash.each(this,function(c,b){a.push(b);});return a;},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b);});return a;},toQueryString:function(a){var b=[]; -Hash.each(this,function(f,e){if(a){e=a+"["+e+"]";}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h; -});d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f);}if(f!=undefined){b.push(d);}});return b.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"}); -var Event=new Native({name:"Event",initialize:function(a,f){f=f||window;var k=f.document;a=a||f.event;if(a.$extended){return a;}this.$extended=true;var j=a.type; -var g=a.target||a.srcElement;while(g&&g.nodeType==3){g=g.parentNode;}if(j.test(/key/)){var b=a.which||a.keyCode;var m=Event.Keys.keyOf(b);if(j=="keydown"){var d=b-111; -if(d>0&&d<13){m="f"+d;}}m=m||String.fromCharCode(b).toLowerCase();}else{if(j.match(/(click|mouse|menu)/i)){k=(!k.compatMode||k.compatMode=="CSS1Compat")?k.html:k.body; -var i={x:a.pageX||a.clientX+k.scrollLeft,y:a.pageY||a.clientY+k.scrollTop};var c={x:(a.pageX)?a.pageX-f.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-f.pageYOffset:a.clientY}; -if(j.match(/DOMMouseScroll|mousewheel/)){var h=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3;}var e=(a.which==3)||(a.button==2);var l=null;if(j.match(/over|out/)){switch(j){case"mouseover":l=a.relatedTarget||a.fromElement; -break;case"mouseout":l=a.relatedTarget||a.toElement;}if(!(function(){while(l&&l.nodeType==3){l=l.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){l=false; -}}}}return $extend(this,{event:a,type:j,page:i,client:c,rightClick:e,wheel:h,relatedTarget:l,target:g,code:b,key:m,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey}); -}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault(); -},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault(); -}else{this.event.returnValue=false;}return this;}});function Class(b){if(b instanceof Function){b={initialize:b};}var a=function(){Object.reset(this);if(a._prototyping){return this; -}this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c;}.extend(this); -a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a;}Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(a,c){if(c==null){for(var e in a){Object.reset(a,e); -}return a;}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]); -break;}return a;};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a; -},wrap:function(a,b,c){if(c._origin){c=c._origin;}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.'); -}var e=this.caller,f=this._current;this.caller=f;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=f;this.caller=e;return d;}.extend({_owner:a,_origin:c,_name:b}); -}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var e in a){this.implement(e,a[e]);}return this;}var f=Class.Mutators[a];if(f){d=f.call(this,d); -if(d==null){return this;}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this;}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a]; -if($type(b)=="object"){$mixin(b,d);}else{c[a]=$unlink(d);}break;case"array":c[a]=$unlink(d);break;default:c[a]=d;}return this;}});Class.Mutators={Extends:function(a){this.parent=a; -this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.'); -}return c.apply(this,arguments);}.protect());},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b);}this.implement(b); -},this);}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false; -},clearChain:function(){this.$chain.empty();return this;}});var Events=new Class({$events:{},addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[]; -this.$events[c].include(b);if(a){b.internal=true;}}return this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;},fireEvent:function(c,b,a){c=Events.removeOn(c); -if(!this.$events||!this.$events[c]){return this;}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})();},this);return this;},removeEvent:function(b,a){b=Events.removeOn(b); -if(!this.$events[b]){return this;}if(!a.internal){this.$events[b].erase(a);}return this;},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d]); -}return this;}if(c){c=Events.removeOn(c);}for(d in this.$events){if(c&&c!=d){continue;}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a]); -}}return this;}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments)); -if(!this.addEvent){return this;}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue;}this.addEvent(a,this.options[a]); -delete this.options[a];}return this;}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a); -if(c){return c(b);}if(typeof a=="string"){return document.newElement(a,b);}return document.id(a).set(b);},afterImplement:function(a,b){Element.Prototype[a]=b; -if(Array[a]){return;}Elements.implement(a,function(){var c=[],g=true;for(var e=0,d=this.length;e";}return document.id(this.createElement(a)).set(b);},newTextNode:function(a){return this.createTextNode(a); -},getDocument:function(){return this;},getWindow:function(){return this.window;},id:(function(){var a={string:function(d,c,b){d=b.getElementById(d);return(d)?a.element(d,c):null; -},element:function(b,e){$uid(b);if(!e&&!b.$family&&!(/^object|embed$/i).test(b.tagName)){var c=Element.Prototype;for(var d in c){b[d]=c[d];}}return b;},object:function(c,d,b){if(c.toElement){return a.element(c.toElement(b),d); -}return null;}};a.textnode=a.whitespace=a.window=a.document=$arguments(0);return function(c,e,d){if(c&&c.$family&&c.uid){return c;}var b=$type(c);return(a[b])?a[b](c,e,d||document):null; -};})()});if(window.$==null){Window.implement({$:function(a,b){return document.id(a,b,this.document);}});}Window.implement({$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a); -}var f=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d1);a.each(function(e){var f=this.getElementsByTagName(e.trim());(b)?c.extend(f):c=f; -},this);return new Elements(c,{ddup:b,cash:!d});}});(function(){var h={},f={};var i={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"}; -var c=function(l){return(f[l]||(f[l]={}));};var g=function(n,l){if(!n){return;}var m=n.uid;if(Browser.Engine.trident){if(n.clearAttributes){var q=l&&n.cloneNode(false); -n.clearAttributes();if(q){n.mergeAttributes(q);}}else{if(n.removeEvents){n.removeEvents();}}if((/object/i).test(n.tagName)){for(var o in n){if(typeof n[o]=="function"){n[o]=$empty; -}}Element.dispose(n);}}if(!m){return;}h[m]=f[m]=null;};var d=function(){Hash.each(h,g);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(g); -}if(window.CollectGarbage){CollectGarbage();}h=f=null;};var j=function(n,l,s,m,p,r){var o=n[s||l];var q=[];while(o){if(o.nodeType==1&&(!m||Element.match(o,m))){if(!p){return document.id(o,r); -}q.push(o);}o=o[l];}return(p)?new Elements(q,{ddup:false,cash:!r}):null;};var e={html:"innerHTML","class":"className","for":"htmlFor",defaultValue:"defaultValue",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"}; -var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var k=["value","type","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]; -b=b.associate(b);Hash.extend(e,b);Hash.extend(e,k.associate(k.map(String.toLowerCase)));var a={before:function(m,l){if(l.parentNode){l.parentNode.insertBefore(m,l); -}},after:function(m,l){if(!l.parentNode){return;}var n=l.nextSibling;(n)?l.parentNode.insertBefore(m,n):l.parentNode.appendChild(m);},bottom:function(m,l){l.appendChild(m); -},top:function(m,l){var n=l.firstChild;(n)?l.insertBefore(m,n):l.appendChild(m);}};a.inside=a.bottom;Hash.each(a,function(l,m){m=m.capitalize();Element.implement("inject"+m,function(n){l(this,document.id(n,true)); -return this;});Element.implement("grab"+m,function(n){l(document.id(n,true),this);return this;});});Element.implement({set:function(o,m){switch($type(o)){case"object":for(var n in o){this.set(n,o[n]); -}break;case"string":var l=Element.Properties.get(o);(l&&l.set)?l.set.apply(this,Array.slice(arguments,1)):this.setProperty(o,m);}return this;},get:function(m){var l=Element.Properties.get(m); -return(l&&l.get)?l.get.apply(this,Array.slice(arguments,1)):this.getProperty(m);},erase:function(m){var l=Element.Properties.get(m);(l&&l.erase)?l.erase.apply(this):this.removeProperty(m); -return this;},setProperty:function(m,n){var l=e[m];if(n==undefined){return this.removeProperty(m);}if(l&&b[m]){n=!!n;}(l)?this[l]=n:this.setAttribute(m,""+n); -return this;},setProperties:function(l){for(var m in l){this.setProperty(m,l[m]);}return this;},getProperty:function(m){var l=e[m];var n=(l)?this[l]:this.getAttribute(m,2); -return(b[m])?!!n:(l)?n:n||null;},getProperties:function(){var l=$A(arguments);return l.map(this.getProperty,this).associate(l);},removeProperty:function(m){var l=e[m]; -(l)?this[l]=(l&&b[m])?false:"":this.removeAttribute(m);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this; -},hasClass:function(l){return this.className.contains(l," ");},addClass:function(l){if(!this.hasClass(l)){this.className=(this.className+" "+l).clean(); -}return this;},removeClass:function(l){this.className=this.className.replace(new RegExp("(^|\\s)"+l+"(?:\\s|$)"),"$1");return this;},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l); -},adopt:function(){Array.flatten(arguments).each(function(l){l=document.id(l,true);if(l){this.appendChild(l);}},this);return this;},appendText:function(m,l){return this.grab(this.getDocument().newTextNode(m),l); -},grab:function(m,l){a[l||"bottom"](document.id(m,true),this);return this;},inject:function(m,l){a[l||"bottom"](this,document.id(m,true));return this;},replaces:function(l){l=document.id(l,true); -l.parentNode.replaceChild(this,l);return this;},wraps:function(m,l){m=document.id(m,true);return this.replaces(m).grab(m,l);},getPrevious:function(l,m){return j(this,"previousSibling",null,l,false,m); -},getAllPrevious:function(l,m){return j(this,"previousSibling",null,l,true,m);},getNext:function(l,m){return j(this,"nextSibling",null,l,false,m);},getAllNext:function(l,m){return j(this,"nextSibling",null,l,true,m); -},getFirst:function(l,m){return j(this,"nextSibling","firstChild",l,false,m);},getLast:function(l,m){return j(this,"previousSibling","lastChild",l,false,m); -},getParent:function(l,m){return j(this,"parentNode",null,l,false,m);},getParents:function(l,m){return j(this,"parentNode",null,l,true,m);},getSiblings:function(l,m){return this.getParent().getChildren(l,m).erase(this); -},getChildren:function(l,m){return j(this,"nextSibling","firstChild",l,true,m);},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument; -},getElementById:function(o,n){var m=this.ownerDocument.getElementById(o);if(!m){return null;}for(var l=m.parentNode;l!=this;l=l.parentNode){if(!l){return null; -}}return document.id(m,n);},getSelected:function(){return new Elements($A(this.options).filter(function(l){return l.selected;}));},getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()]; -}var l=this.getDocument().defaultView.getComputedStyle(this,null);return(l)?l.getPropertyValue([m.hyphenate()]):null;},toQueryString:function(){var l=[]; -this.getElements("input, select, textarea",true).each(function(m){if(!m.name||m.disabled||m.type=="submit"||m.type=="reset"||m.type=="file"){return;}var n=(m.tagName.toLowerCase()=="select")?Element.getSelected(m).map(function(o){return o.value; -}):((m.type=="radio"||m.type=="checkbox")&&!m.checked)?null:m.value;$splat(n).each(function(o){if(typeof o!="undefined"){l.push(m.name+"="+encodeURIComponent(o)); -}});});return l.join("&");},clone:function(o,l){o=o!==false;var r=this.cloneNode(o);var n=function(v,u){if(!l){v.removeAttribute("id");}if(Browser.Engine.trident){v.clearAttributes(); -v.mergeAttributes(u);v.removeAttribute("uid");if(v.options){var w=v.options,s=u.options;for(var t=w.length;t--;){w[t].selected=s[t].selected;}}}var x=i[u.tagName.toLowerCase()]; -if(x&&u[x]){v[x]=u[x];}};if(o){var p=r.getElementsByTagName("*"),q=this.getElementsByTagName("*");for(var m=p.length;m--;){n(p[m],q[m]);}}n(r,this);return document.id(r); -},destroy:function(){Element.empty(this);Element.dispose(this);g(this,true);return null;},empty:function(){$A(this.childNodes).each(function(l){Element.destroy(l); -});return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},hasChild:function(l){l=document.id(l,true);if(!l){return false; -}if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(l.tagName)).contains(l);}return(this.contains)?(this!=l&&this.contains(l)):!!(this.compareDocumentPosition(l)&16); -},match:function(l){return(!l||(l==this)||(Element.get(this,"tag")==l));}});Native.implement([Element,Window,Document],{addListener:function(o,n){if(o=="unload"){var l=n,m=this; -n=function(){m.removeListener("unload",n);l();};}else{h[this.uid]=this;}if(this.addEventListener){this.addEventListener(o,n,false);}else{this.attachEvent("on"+o,n); -}return this;},removeListener:function(m,l){if(this.removeEventListener){this.removeEventListener(m,l,false);}else{this.detachEvent("on"+m,l);}return this; -},retrieve:function(m,l){var o=c(this.uid),n=o[m];if(l!=undefined&&n==undefined){n=o[m]=l;}return $pick(n);},store:function(m,l){var n=c(this.uid);n[m]=l; -return this;},eliminate:function(l){var m=c(this.uid);delete m[l];return this;}});window.addListener("unload",d);})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a; -},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase(); -}};Element.Properties.html=(function(){var c=document.createElement("div");var a={table:[1,"","
      "],select:[1,""],tbody:[2,"","
      "],tr:[3,"","
      "]}; -a.thead=a.tfoot=a.tbody;var b={set:function(){var e=Array.flatten(arguments).join("");var f=Browser.Engine.trident&&a[this.get("tag")];if(f){var g=c;g.innerHTML=f[1]+e+f[2]; -for(var d=f[0];d--;){g=g.firstChild;}this.empty().adopt(g.childNodes);}else{this.innerHTML=e;}}};b.erase=b.set;return b;})();if(Browser.Engine.webkit&&Browser.Engine.version<420){Element.Properties.text={get:function(){if(this.innerText){return this.innerText; -}var a=this.ownerDocument.newElement("div",{html:this.innerHTML}).inject(this.ownerDocument.body);var b=a.innerText;a.destroy();return b;}};}Element.Properties.events={set:function(a){this.addEvents(a); -}};Native.implement([Element,Window,Document],{addEvent:function(e,g){var h=this.retrieve("events",{});h[e]=h[e]||{keys:[],values:[]};if(h[e].keys.contains(g)){return this; -}h[e].keys.push(g);var f=e,a=Element.Events.get(e),c=g,i=this;if(a){if(a.onAdd){a.onAdd.call(this,g);}if(a.condition){c=function(j){if(a.condition.call(this,j)){return g.call(this,j); -}return true;};}f=a.base||f;}var d=function(){return g.call(i);};var b=Element.NativeEvents[f];if(b){if(b==2){d=function(j){j=new Event(j,i.getWindow()); -if(c.call(i,j)===false){j.stop();}};}this.addListener(f,d);}h[e].values.push(d);return this;},removeEvent:function(c,b){var a=this.retrieve("events");if(!a||!a[c]){return this; -}var f=a[c].keys.indexOf(b);if(f==-1){return this;}a[c].keys.splice(f,1);var e=a[c].values.splice(f,1)[0];var d=Element.Events.get(c);if(d){if(d.onRemove){d.onRemove.call(this,b); -}c=d.base||c;}return(Element.NativeEvents[c])?this.removeListener(c,e):this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this; -},removeEvents:function(a){var c;if($type(a)=="object"){for(c in a){this.removeEvent(c,a[c]);}return this;}var b=this.retrieve("events");if(!b){return this; -}if(!a){for(c in b){this.removeEvents(c);}this.eliminate("events");}else{if(b[a]){while(b[a].keys[0]){this.removeEvent(a,b[a].keys[0]);}b[a]=null;}}return this; -},fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this;}c[d].keys.each(function(e){e.create({bind:this,delay:a,"arguments":b})(); -},this);return this;},cloneEvents:function(d,a){d=document.id(d);var c=d.retrieve("events");if(!c){return this;}if(!a){for(var b in c){this.cloneEvents(d,b); -}}else{if(c[a]){c[a].keys.each(function(e){this.addEvent(a,e);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1}; -(function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true;}if(c===false){return false;}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c)); -};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}}); -})();Element.Properties.styles={set:function(a){this.setStyles(a);}};Element.Properties.opacity={set:function(a,b){if(!b){if(a==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"; -}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(Browser.Engine.trident){this.style.filter=(a==1)?"":"alpha(opacity="+a*100+")"; -}this.style.opacity=a;this.store("opacity",a);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true); -},getOpacity:function(){return this.get("opacity");},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat"; -}b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(e,d){if(!c[d]){return"";}return($type(e)=="number")?c[d].replace("@",Math.round(e)):e; -}).join(" ");}else{if(a==String(Number(a))){a=Math.round(a);}}this.style[b]=a;return this;},getStyle:function(g){switch(g){case"opacity":return this.get("opacity"); -case"float":g=(Browser.Engine.trident)?"styleFloat":"cssFloat";}g=g.camelCase();var a=this.style[g];if(!$chk(a)){a=[];for(var f in Element.ShortStyles){if(g!=f){continue; -}for(var e in Element.ShortStyles[f]){a.push(this.getStyle(e));}return a.join(" ");}a=this.getComputedStyle(g);}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/); -if(c){a=a.replace(c[0],c[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a,10)))){if(g.test(/^(height|width)$/)){var b=(g=="width")?["left","right"]:["top","bottom"],d=0; -b.each(function(h){d+=this.getStyle("border-"+h+"-width").toInt()+this.getStyle("padding-"+h).toInt();},this);return this["offset"+g.capitalize()]-d+"px"; -}if((Browser.Engine.presto)&&String(a).test("px")){return a;}if(g.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return a;},setStyles:function(b){for(var a in b){this.setStyle(a,b[a]); -}return this;},getStyles:function(){var a={};Array.flatten(arguments).each(function(b){a[b]=this.getStyle(b);},this);return a;}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"}); -Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(g){var f=Element.ShortStyles; -var b=Element.Styles;["margin","padding"].each(function(h){var i=h+g;f[h][i]=b[i]="@px";});var e="border"+g;f.border[e]=b[e]="@px @ rgb(@, @, @)";var d=e+"Width",a=e+"Style",c=e+"Color"; -f[e]={};f.borderWidth[d]=f[e][d]=b[d]="@px";f.borderStyle[a]=f[e][a]=b[a]="@";f.borderColor[c]=f[e][c]=b[c]="rgb(@, @, @)";});Native.implement([Document,Element],{getElements:function(h,g){h=h.split(","); -var c,e={};for(var d=0,b=h.length;d1),cash:!g});}});Element.implement({match:function(b){if(!b||(b==this)){return true;}var d=Selectors.Utils.parseTagAndID(b); -var a=d[0],e=d[1];if(!Selectors.Filters.byID(this,e)||!Selectors.Filters.byTag(this,a)){return false;}var c=Selectors.Utils.parseSelector(b);return(c)?Selectors.Utils.filter(this,c,{}):true; -}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)}; -Selectors.Utils={chk:function(b,c){if(!c){return true;}var a=$uid(b);if(!c[a]){return c[a]=true;}return false;},parseNthArgument:function(h){if(Selectors.Cache.nth[h]){return Selectors.Cache.nth[h]; -}var e=h.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!e){return false;}var g=parseInt(e[1],10);var d=(g||g===0)?g:1;var f=e[2]||false;var c=parseInt(e[3],10)||0; -if(d!=0){c--;while(c<1){c+=d;}while(c>=d){c-=d;}}else{d=c;f="index";}switch(f){case"n":e={a:d,b:c,special:"n"};break;case"odd":e={a:2,b:0,special:"n"}; -break;case"even":e={a:2,b:1,special:"n"};break;case"first":e={a:0,special:"index"};break;case"last":e={special:"last-child"};break;case"only":e={special:"only-child"}; -break;default:e={a:(d-1),special:"index"};}return Selectors.Cache.nth[h]=e;},parseSelector:function(e){if(Selectors.Cache.parsed[e]){return Selectors.Cache.parsed[e]; -}var d,h={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(e))){var i=d[1],g=d[2],f=d[3],b=d[5],c=d[6],j=d[7];if(i){h.classes.push(i); -}else{if(c){var a=Selectors.Pseudo.get(c);if(a){h.pseudos.push({parser:a,argument:j});}else{h.attributes.push({name:c,operator:"=",value:j});}}else{if(g){h.attributes.push({name:g,operator:f,value:b}); -}}}}if(!h.classes.length){delete h.classes;}if(!h.attributes.length){delete h.attributes;}if(!h.pseudos.length){delete h.pseudos;}if(!h.classes&&!h.attributes&&!h.pseudos){h=null; -}return Selectors.Cache.parsed[e]=h;},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false]; -},filter:function(f,c,e){var d;if(c.classes){for(d=c.classes.length;d--;d){var g=c.classes[d];if(!Selectors.Filters.byClass(f,g)){return false;}}}if(c.attributes){for(d=c.attributes.length; -d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(f,b.name,b.operator,b.value)){return false;}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d]; -if(!Selectors.Filters.byPseudo(f,a.parser,a.argument,e)){return false;}}}return true;},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true); -return(c&&Selectors.Filters.byTag(c,a))?[c]:[];}else{return b.getElementsByTagName(a);}},search:function(o,h,t){var b=[];var c=h.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j); -return":)"+i;}).split(":)");var p,e,A;for(var z=0,v=c.length;z":function(h,g,j,a,f){var c=Selectors.Utils.getByTagAndID(g,j,a);for(var e=0,d=c.length;ea){return false;}}return(c==a);},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a); -},odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a);},selected:function(){return this.selected;},enabled:function(){return(this.disabled===false); -}});Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this);}}};(function(){var b=function(){if(Browser.loaded){return;}Browser.loaded=true; -window.fireEvent("domready");document.fireEvent("domready");};window.addEvent("load",b);if(Browser.Engine.trident){var a=document.createElement("div"); -(function(){($try(function(){a.doScroll();return document.id(a).inject(document.body).set("html","temp").dispose();}))?b():arguments.callee.delay(50);})(); -}else{if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50); -})();}else{document.addEvent("DOMContentLoaded",b);}}})();var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore"},initialize:function(a){this.subject=this.subject||this; -this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel"; -}},getTransition:function(){return function(a){return -(Math.cos(Math.PI*a)-1)/2;};},step:function(){var a=$time();if(a=200)&&(this.status<300)); -},processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a);}return a.stripScripts(this.options.evalScripts); -},success:function(b,a){this.onSuccess(this.processScripts(b),a);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain(); -},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},setHeader:function(a,b){this.headers.set(a,b); -return this;},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a);}.bind(this));},check:function(){if(!this.running){return true; -}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},send:function(k){if(!this.check(k)){return this; -}this.running=true;var i=$type(k);if(i=="string"||i=="element"){k={data:k};}var d=this.options;k=$extend({data:d.data,url:d.url,method:d.method},k);var g=k.data,b=String(k.url),a=k.method.toLowerCase(); -switch($type(g)){case"element":g=document.id(g).toQueryString();break;case"object":case"hash":g=Hash.toQueryString(g);}if(this.options.format){var j="format="+this.options.format; -g=(g)?j+"&"+g:j;}if(this.options.emulation&&!["get","post"].contains(a)){var h="_method="+a;g=(g)?h+"&"+g:h;a="post";}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:""; -this.headers.set("Content-type","application/x-www-form-urlencoded"+c);}if(this.options.noCache){var f="noCache="+new Date().getTime();g=(g)?f+"&"+g:f; -}var e=b.lastIndexOf("/");if(e>-1&&(e=b.indexOf("#"))>-1){b=b.substr(0,e);}if(g&&a=="get"){b=b+(b.contains("?")?"&":"?")+g;g=null;}this.xhr.open(a.toUpperCase(),b,this.options.async); -this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(m,l){try{this.xhr.setRequestHeader(l,m);}catch(n){this.fireEvent("exception",[l,m]); -}},this);this.fireEvent("request");this.xhr.send(g);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this; -}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});(function(){var a={}; -["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined}); -return this.send($extend(c,{method:b}));};});Request.implement(a);})();Element.Properties.send={set:function(a){var b=this.retrieve("send");if(b){b.cancel(); -}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},a));},get:function(a){if(a||!this.retrieve("send")){if(a||!this.retrieve("send:options")){this.set("send",a); -}this.store("send",new Request(this.retrieve("send:options")));}return this.retrieve("send");}};Element.implement({send:function(a){var b=this.get("send"); -b.send({data:this,url:a||b.options.url});return this;}}); \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.4-more.js.txt b/assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.4-more.js.txt deleted file mode 100644 index 9c34dd030e..0000000000 --- a/assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.4-more.js.txt +++ /dev/null @@ -1,5 +0,0 @@ -//MooTools More, . Copyright (c) 2006-2009 Aaron Newton , Valerio Proietti & the MooTools team , MIT Style License. - -MooTools.More={version:"1.2.4.4",build:"6f6057dc645fdb7547689183b2311063bd653ddf"};Elements.from=function(e,d){if($pick(d,true)){e=e.stripScripts();}var b,c=e.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i); -if(c){b=new Element("table");var a=c[1].toLowerCase();if(["td","th","tr"].contains(a)){b=new Element("tbody").inject(b);if(a!="tr"){b=new Element("tr").inject(b); -}}}return(b||new Element("div")).set("html",e).getChildren();}; \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.js b/assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.js deleted file mode 100644 index 70ff54a5ea..0000000000 --- a/assets/snippets/ajaxSearch/js/mootools2/mootools-1.2.4.js +++ /dev/null @@ -1,280 +0,0 @@ -//MooTools, , My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, , MIT Style License. - -var MooTools={version:"1.2.4",build:"0d9113241a90b9cd5643b926795852a2026710d4"};var Native=function(k){k=k||{};var a=k.name;var i=k.legacy;var b=k.protect; -var c=k.implement;var h=k.generics;var f=k.initialize;var g=k.afterImplement||function(){};var d=f||i;h=h!==false;d.constructor=Native;d.$family={name:"native"}; -if(i&&f){d.prototype=i.prototype;}d.prototype.constructor=d;if(a){var e=a.toLowerCase();d.prototype.$family={name:e};Native.typize(d,e);}var j=function(n,l,o,m){if(!b||m||!n.prototype[l]){n.prototype[l]=o; -}if(h){Native.genericize(n,l,b);}g.call(n,l,o);return n;};d.alias=function(n,l,p){if(typeof n=="string"){var o=this.prototype[n];if((n=o)){return j(this,l,n,p); -}}for(var m in n){this.alias(m,n[m],l);}return this;};d.implement=function(m,l,o){if(typeof m=="string"){return j(this,m,l,o);}for(var n in m){j(this,n,m[n],l); -}return this;};if(c){d.implement(c);}return d;};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments); -return b.prototype[c].apply(d.shift(),d);};}};Native.implement=function(d,c){for(var b=0,a=d.length;b-1:this.indexOf(a)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim(); -},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase()); -});},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1"); -},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); -return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null;},stripScripts:function(b){var a=""; -var c=this.replace(/]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return"";});if(b===true){$exec(a);}else{if($type(b)=="function"){b(a,c); -}}return c;},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);}return(a[c]!=undefined)?a[c]:""; -});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a;}}return null; -},hasValue:function(a){return(Hash.keyOf(this,a)!==null);},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c); -},this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null; -},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this); -return this;},include:function(a,b){if(this[a]==undefined){this[a]=b;}return this;},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this)); -},this);return a;},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e);}},this);return a;},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false; -}}return true;},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true;}}return false;},getKeys:function(){var a=[]; -Hash.each(this,function(c,b){a.push(b);});return a;},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b);});return a;},toQueryString:function(a){var b=[]; -Hash.each(this,function(f,e){if(a){e=a+"["+e+"]";}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h; -});d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f);}if(f!=undefined){b.push(d);}});return b.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"}); -var Event=new Native({name:"Event",initialize:function(a,f){f=f||window;var k=f.document;a=a||f.event;if(a.$extended){return a;}this.$extended=true;var j=a.type; -var g=a.target||a.srcElement;while(g&&g.nodeType==3){g=g.parentNode;}if(j.test(/key/)){var b=a.which||a.keyCode;var m=Event.Keys.keyOf(b);if(j=="keydown"){var d=b-111; -if(d>0&&d<13){m="f"+d;}}m=m||String.fromCharCode(b).toLowerCase();}else{if(j.match(/(click|mouse|menu)/i)){k=(!k.compatMode||k.compatMode=="CSS1Compat")?k.html:k.body; -var i={x:a.pageX||a.clientX+k.scrollLeft,y:a.pageY||a.clientY+k.scrollTop};var c={x:(a.pageX)?a.pageX-f.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-f.pageYOffset:a.clientY}; -if(j.match(/DOMMouseScroll|mousewheel/)){var h=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3;}var e=(a.which==3)||(a.button==2);var l=null;if(j.match(/over|out/)){switch(j){case"mouseover":l=a.relatedTarget||a.fromElement; -break;case"mouseout":l=a.relatedTarget||a.toElement;}if(!(function(){while(l&&l.nodeType==3){l=l.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){l=false; -}}}}return $extend(this,{event:a,type:j,page:i,client:c,rightClick:e,wheel:h,relatedTarget:l,target:g,code:b,key:m,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey}); -}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault(); -},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault(); -}else{this.event.returnValue=false;}return this;}});function Class(b){if(b instanceof Function){b={initialize:b};}var a=function(){Object.reset(this);if(a._prototyping){return this; -}this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c;}.extend(this); -a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a;}Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(a,c){if(c==null){for(var e in a){Object.reset(a,e); -}return a;}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]); -break;}return a;};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a; -},wrap:function(a,b,c){if(c._origin){c=c._origin;}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.'); -}var e=this.caller,f=this._current;this.caller=f;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=f;this.caller=e;return d;}.extend({_owner:a,_origin:c,_name:b}); -}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var e in a){this.implement(e,a[e]);}return this;}var f=Class.Mutators[a];if(f){d=f.call(this,d); -if(d==null){return this;}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this;}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a]; -if($type(b)=="object"){$mixin(b,d);}else{c[a]=$unlink(d);}break;case"array":c[a]=$unlink(d);break;default:c[a]=d;}return this;}});Class.Mutators={Extends:function(a){this.parent=a; -this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.'); -}return c.apply(this,arguments);}.protect());},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b);}this.implement(b); -},this);}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false; -},clearChain:function(){this.$chain.empty();return this;}});var Events=new Class({$events:{},addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[]; -this.$events[c].include(b);if(a){b.internal=true;}}return this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;},fireEvent:function(c,b,a){c=Events.removeOn(c); -if(!this.$events||!this.$events[c]){return this;}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})();},this);return this;},removeEvent:function(b,a){b=Events.removeOn(b); -if(!this.$events[b]){return this;}if(!a.internal){this.$events[b].erase(a);}return this;},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d]); -}return this;}if(c){c=Events.removeOn(c);}for(d in this.$events){if(c&&c!=d){continue;}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a]); -}}return this;}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments)); -if(!this.addEvent){return this;}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue;}this.addEvent(a,this.options[a]); -delete this.options[a];}return this;}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a); -if(c){return c(b);}if(typeof a=="string"){return document.newElement(a,b);}return document.id(a).set(b);},afterImplement:function(a,b){Element.Prototype[a]=b; -if(Array[a]){return;}Elements.implement(a,function(){var c=[],g=true;for(var e=0,d=this.length;e";}return document.id(this.createElement(a)).set(b);},newTextNode:function(a){return this.createTextNode(a); -},getDocument:function(){return this;},getWindow:function(){return this.window;},id:(function(){var a={string:function(d,c,b){d=b.getElementById(d);return(d)?a.element(d,c):null; -},element:function(b,e){$uid(b);if(!e&&!b.$family&&!(/^object|embed$/i).test(b.tagName)){var c=Element.Prototype;for(var d in c){b[d]=c[d];}}return b;},object:function(c,d,b){if(c.toElement){return a.element(c.toElement(b),d); -}return null;}};a.textnode=a.whitespace=a.window=a.document=$arguments(0);return function(c,e,d){if(c&&c.$family&&c.uid){return c;}var b=$type(c);return(a[b])?a[b](c,e,d||document):null; -};})()});if(window.$==null){Window.implement({$:function(a,b){return document.id(a,b,this.document);}});}Window.implement({$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a); -}var f=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d1);a.each(function(e){var f=this.getElementsByTagName(e.trim());(b)?c.extend(f):c=f; -},this);return new Elements(c,{ddup:b,cash:!d});}});(function(){var h={},f={};var i={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"}; -var c=function(l){return(f[l]||(f[l]={}));};var g=function(n,l){if(!n){return;}var m=n.uid;if(Browser.Engine.trident){if(n.clearAttributes){var q=l&&n.cloneNode(false); -n.clearAttributes();if(q){n.mergeAttributes(q);}}else{if(n.removeEvents){n.removeEvents();}}if((/object/i).test(n.tagName)){for(var o in n){if(typeof n[o]=="function"){n[o]=$empty; -}}Element.dispose(n);}}if(!m){return;}h[m]=f[m]=null;};var d=function(){Hash.each(h,g);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(g); -}if(window.CollectGarbage){CollectGarbage();}h=f=null;};var j=function(n,l,s,m,p,r){var o=n[s||l];var q=[];while(o){if(o.nodeType==1&&(!m||Element.match(o,m))){if(!p){return document.id(o,r); -}q.push(o);}o=o[l];}return(p)?new Elements(q,{ddup:false,cash:!r}):null;};var e={html:"innerHTML","class":"className","for":"htmlFor",defaultValue:"defaultValue",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"}; -var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var k=["value","type","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]; -b=b.associate(b);Hash.extend(e,b);Hash.extend(e,k.associate(k.map(String.toLowerCase)));var a={before:function(m,l){if(l.parentNode){l.parentNode.insertBefore(m,l); -}},after:function(m,l){if(!l.parentNode){return;}var n=l.nextSibling;(n)?l.parentNode.insertBefore(m,n):l.parentNode.appendChild(m);},bottom:function(m,l){l.appendChild(m); -},top:function(m,l){var n=l.firstChild;(n)?l.insertBefore(m,n):l.appendChild(m);}};a.inside=a.bottom;Hash.each(a,function(l,m){m=m.capitalize();Element.implement("inject"+m,function(n){l(this,document.id(n,true)); -return this;});Element.implement("grab"+m,function(n){l(document.id(n,true),this);return this;});});Element.implement({set:function(o,m){switch($type(o)){case"object":for(var n in o){this.set(n,o[n]); -}break;case"string":var l=Element.Properties.get(o);(l&&l.set)?l.set.apply(this,Array.slice(arguments,1)):this.setProperty(o,m);}return this;},get:function(m){var l=Element.Properties.get(m); -return(l&&l.get)?l.get.apply(this,Array.slice(arguments,1)):this.getProperty(m);},erase:function(m){var l=Element.Properties.get(m);(l&&l.erase)?l.erase.apply(this):this.removeProperty(m); -return this;},setProperty:function(m,n){var l=e[m];if(n==undefined){return this.removeProperty(m);}if(l&&b[m]){n=!!n;}(l)?this[l]=n:this.setAttribute(m,""+n); -return this;},setProperties:function(l){for(var m in l){this.setProperty(m,l[m]);}return this;},getProperty:function(m){var l=e[m];var n=(l)?this[l]:this.getAttribute(m,2); -return(b[m])?!!n:(l)?n:n||null;},getProperties:function(){var l=$A(arguments);return l.map(this.getProperty,this).associate(l);},removeProperty:function(m){var l=e[m]; -(l)?this[l]=(l&&b[m])?false:"":this.removeAttribute(m);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this; -},hasClass:function(l){return this.className.contains(l," ");},addClass:function(l){if(!this.hasClass(l)){this.className=(this.className+" "+l).clean(); -}return this;},removeClass:function(l){this.className=this.className.replace(new RegExp("(^|\\s)"+l+"(?:\\s|$)"),"$1");return this;},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l); -},adopt:function(){Array.flatten(arguments).each(function(l){l=document.id(l,true);if(l){this.appendChild(l);}},this);return this;},appendText:function(m,l){return this.grab(this.getDocument().newTextNode(m),l); -},grab:function(m,l){a[l||"bottom"](document.id(m,true),this);return this;},inject:function(m,l){a[l||"bottom"](this,document.id(m,true));return this;},replaces:function(l){l=document.id(l,true); -l.parentNode.replaceChild(this,l);return this;},wraps:function(m,l){m=document.id(m,true);return this.replaces(m).grab(m,l);},getPrevious:function(l,m){return j(this,"previousSibling",null,l,false,m); -},getAllPrevious:function(l,m){return j(this,"previousSibling",null,l,true,m);},getNext:function(l,m){return j(this,"nextSibling",null,l,false,m);},getAllNext:function(l,m){return j(this,"nextSibling",null,l,true,m); -},getFirst:function(l,m){return j(this,"nextSibling","firstChild",l,false,m);},getLast:function(l,m){return j(this,"previousSibling","lastChild",l,false,m); -},getParent:function(l,m){return j(this,"parentNode",null,l,false,m);},getParents:function(l,m){return j(this,"parentNode",null,l,true,m);},getSiblings:function(l,m){return this.getParent().getChildren(l,m).erase(this); -},getChildren:function(l,m){return j(this,"nextSibling","firstChild",l,true,m);},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument; -},getElementById:function(o,n){var m=this.ownerDocument.getElementById(o);if(!m){return null;}for(var l=m.parentNode;l!=this;l=l.parentNode){if(!l){return null; -}}return document.id(m,n);},getSelected:function(){return new Elements($A(this.options).filter(function(l){return l.selected;}));},getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()]; -}var l=this.getDocument().defaultView.getComputedStyle(this,null);return(l)?l.getPropertyValue([m.hyphenate()]):null;},toQueryString:function(){var l=[]; -this.getElements("input, select, textarea",true).each(function(m){if(!m.name||m.disabled||m.type=="submit"||m.type=="reset"||m.type=="file"){return;}var n=(m.tagName.toLowerCase()=="select")?Element.getSelected(m).map(function(o){return o.value; -}):((m.type=="radio"||m.type=="checkbox")&&!m.checked)?null:m.value;$splat(n).each(function(o){if(typeof o!="undefined"){l.push(m.name+"="+encodeURIComponent(o)); -}});});return l.join("&");},clone:function(o,l){o=o!==false;var r=this.cloneNode(o);var n=function(v,u){if(!l){v.removeAttribute("id");}if(Browser.Engine.trident){v.clearAttributes(); -v.mergeAttributes(u);v.removeAttribute("uid");if(v.options){var w=v.options,s=u.options;for(var t=w.length;t--;){w[t].selected=s[t].selected;}}}var x=i[u.tagName.toLowerCase()]; -if(x&&u[x]){v[x]=u[x];}};if(o){var p=r.getElementsByTagName("*"),q=this.getElementsByTagName("*");for(var m=p.length;m--;){n(p[m],q[m]);}}n(r,this);return document.id(r); -},destroy:function(){Element.empty(this);Element.dispose(this);g(this,true);return null;},empty:function(){$A(this.childNodes).each(function(l){Element.destroy(l); -});return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},hasChild:function(l){l=document.id(l,true);if(!l){return false; -}if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(l.tagName)).contains(l);}return(this.contains)?(this!=l&&this.contains(l)):!!(this.compareDocumentPosition(l)&16); -},match:function(l){return(!l||(l==this)||(Element.get(this,"tag")==l));}});Native.implement([Element,Window,Document],{addListener:function(o,n){if(o=="unload"){var l=n,m=this; -n=function(){m.removeListener("unload",n);l();};}else{h[this.uid]=this;}if(this.addEventListener){this.addEventListener(o,n,false);}else{this.attachEvent("on"+o,n); -}return this;},removeListener:function(m,l){if(this.removeEventListener){this.removeEventListener(m,l,false);}else{this.detachEvent("on"+m,l);}return this; -},retrieve:function(m,l){var o=c(this.uid),n=o[m];if(l!=undefined&&n==undefined){n=o[m]=l;}return $pick(n);},store:function(m,l){var n=c(this.uid);n[m]=l; -return this;},eliminate:function(l){var m=c(this.uid);delete m[l];return this;}});window.addListener("unload",d);})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a; -},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase(); -}};Element.Properties.html=(function(){var c=document.createElement("div");var a={table:[1,"","
      "],select:[1,""],tbody:[2,"","
      "],tr:[3,"","
      "]}; -a.thead=a.tfoot=a.tbody;var b={set:function(){var e=Array.flatten(arguments).join("");var f=Browser.Engine.trident&&a[this.get("tag")];if(f){var g=c;g.innerHTML=f[1]+e+f[2]; -for(var d=f[0];d--;){g=g.firstChild;}this.empty().adopt(g.childNodes);}else{this.innerHTML=e;}}};b.erase=b.set;return b;})();if(Browser.Engine.webkit&&Browser.Engine.version<420){Element.Properties.text={get:function(){if(this.innerText){return this.innerText; -}var a=this.ownerDocument.newElement("div",{html:this.innerHTML}).inject(this.ownerDocument.body);var b=a.innerText;a.destroy();return b;}};}Element.Properties.events={set:function(a){this.addEvents(a); -}};Native.implement([Element,Window,Document],{addEvent:function(e,g){var h=this.retrieve("events",{});h[e]=h[e]||{keys:[],values:[]};if(h[e].keys.contains(g)){return this; -}h[e].keys.push(g);var f=e,a=Element.Events.get(e),c=g,i=this;if(a){if(a.onAdd){a.onAdd.call(this,g);}if(a.condition){c=function(j){if(a.condition.call(this,j)){return g.call(this,j); -}return true;};}f=a.base||f;}var d=function(){return g.call(i);};var b=Element.NativeEvents[f];if(b){if(b==2){d=function(j){j=new Event(j,i.getWindow()); -if(c.call(i,j)===false){j.stop();}};}this.addListener(f,d);}h[e].values.push(d);return this;},removeEvent:function(c,b){var a=this.retrieve("events");if(!a||!a[c]){return this; -}var f=a[c].keys.indexOf(b);if(f==-1){return this;}a[c].keys.splice(f,1);var e=a[c].values.splice(f,1)[0];var d=Element.Events.get(c);if(d){if(d.onRemove){d.onRemove.call(this,b); -}c=d.base||c;}return(Element.NativeEvents[c])?this.removeListener(c,e):this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this; -},removeEvents:function(a){var c;if($type(a)=="object"){for(c in a){this.removeEvent(c,a[c]);}return this;}var b=this.retrieve("events");if(!b){return this; -}if(!a){for(c in b){this.removeEvents(c);}this.eliminate("events");}else{if(b[a]){while(b[a].keys[0]){this.removeEvent(a,b[a].keys[0]);}b[a]=null;}}return this; -},fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this;}c[d].keys.each(function(e){e.create({bind:this,delay:a,"arguments":b})(); -},this);return this;},cloneEvents:function(d,a){d=document.id(d);var c=d.retrieve("events");if(!c){return this;}if(!a){for(var b in c){this.cloneEvents(d,b); -}}else{if(c[a]){c[a].keys.each(function(e){this.addEvent(a,e);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1}; -(function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true;}if(c===false){return false;}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c)); -};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}}); -})();Element.Properties.styles={set:function(a){this.setStyles(a);}};Element.Properties.opacity={set:function(a,b){if(!b){if(a==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"; -}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(Browser.Engine.trident){this.style.filter=(a==1)?"":"alpha(opacity="+a*100+")"; -}this.style.opacity=a;this.store("opacity",a);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true); -},getOpacity:function(){return this.get("opacity");},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat"; -}b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(e,d){if(!c[d]){return"";}return($type(e)=="number")?c[d].replace("@",Math.round(e)):e; -}).join(" ");}else{if(a==String(Number(a))){a=Math.round(a);}}this.style[b]=a;return this;},getStyle:function(g){switch(g){case"opacity":return this.get("opacity"); -case"float":g=(Browser.Engine.trident)?"styleFloat":"cssFloat";}g=g.camelCase();var a=this.style[g];if(!$chk(a)){a=[];for(var f in Element.ShortStyles){if(g!=f){continue; -}for(var e in Element.ShortStyles[f]){a.push(this.getStyle(e));}return a.join(" ");}a=this.getComputedStyle(g);}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/); -if(c){a=a.replace(c[0],c[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a,10)))){if(g.test(/^(height|width)$/)){var b=(g=="width")?["left","right"]:["top","bottom"],d=0; -b.each(function(h){d+=this.getStyle("border-"+h+"-width").toInt()+this.getStyle("padding-"+h).toInt();},this);return this["offset"+g.capitalize()]-d+"px"; -}if((Browser.Engine.presto)&&String(a).test("px")){return a;}if(g.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return a;},setStyles:function(b){for(var a in b){this.setStyle(a,b[a]); -}return this;},getStyles:function(){var a={};Array.flatten(arguments).each(function(b){a[b]=this.getStyle(b);},this);return a;}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"}); -Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(g){var f=Element.ShortStyles; -var b=Element.Styles;["margin","padding"].each(function(h){var i=h+g;f[h][i]=b[i]="@px";});var e="border"+g;f.border[e]=b[e]="@px @ rgb(@, @, @)";var d=e+"Width",a=e+"Style",c=e+"Color"; -f[e]={};f.borderWidth[d]=f[e][d]=b[d]="@px";f.borderStyle[a]=f[e][a]=b[a]="@";f.borderColor[c]=f[e][c]=b[c]="rgb(@, @, @)";});Native.implement([Document,Element],{getElements:function(h,g){h=h.split(","); -var c,e={};for(var d=0,b=h.length;d1),cash:!g});}});Element.implement({match:function(b){if(!b||(b==this)){return true;}var d=Selectors.Utils.parseTagAndID(b); -var a=d[0],e=d[1];if(!Selectors.Filters.byID(this,e)||!Selectors.Filters.byTag(this,a)){return false;}var c=Selectors.Utils.parseSelector(b);return(c)?Selectors.Utils.filter(this,c,{}):true; -}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)}; -Selectors.Utils={chk:function(b,c){if(!c){return true;}var a=$uid(b);if(!c[a]){return c[a]=true;}return false;},parseNthArgument:function(h){if(Selectors.Cache.nth[h]){return Selectors.Cache.nth[h]; -}var e=h.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!e){return false;}var g=parseInt(e[1],10);var d=(g||g===0)?g:1;var f=e[2]||false;var c=parseInt(e[3],10)||0; -if(d!=0){c--;while(c<1){c+=d;}while(c>=d){c-=d;}}else{d=c;f="index";}switch(f){case"n":e={a:d,b:c,special:"n"};break;case"odd":e={a:2,b:0,special:"n"}; -break;case"even":e={a:2,b:1,special:"n"};break;case"first":e={a:0,special:"index"};break;case"last":e={special:"last-child"};break;case"only":e={special:"only-child"}; -break;default:e={a:(d-1),special:"index"};}return Selectors.Cache.nth[h]=e;},parseSelector:function(e){if(Selectors.Cache.parsed[e]){return Selectors.Cache.parsed[e]; -}var d,h={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(e))){var i=d[1],g=d[2],f=d[3],b=d[5],c=d[6],j=d[7];if(i){h.classes.push(i); -}else{if(c){var a=Selectors.Pseudo.get(c);if(a){h.pseudos.push({parser:a,argument:j});}else{h.attributes.push({name:c,operator:"=",value:j});}}else{if(g){h.attributes.push({name:g,operator:f,value:b}); -}}}}if(!h.classes.length){delete h.classes;}if(!h.attributes.length){delete h.attributes;}if(!h.pseudos.length){delete h.pseudos;}if(!h.classes&&!h.attributes&&!h.pseudos){h=null; -}return Selectors.Cache.parsed[e]=h;},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false]; -},filter:function(f,c,e){var d;if(c.classes){for(d=c.classes.length;d--;d){var g=c.classes[d];if(!Selectors.Filters.byClass(f,g)){return false;}}}if(c.attributes){for(d=c.attributes.length; -d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(f,b.name,b.operator,b.value)){return false;}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d]; -if(!Selectors.Filters.byPseudo(f,a.parser,a.argument,e)){return false;}}}return true;},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true); -return(c&&Selectors.Filters.byTag(c,a))?[c]:[];}else{return b.getElementsByTagName(a);}},search:function(o,h,t){var b=[];var c=h.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j); -return":)"+i;}).split(":)");var p,e,A;for(var z=0,v=c.length;z":function(h,g,j,a,f){var c=Selectors.Utils.getByTagAndID(g,j,a);for(var e=0,d=c.length;ea){return false;}}return(c==a);},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a); -},odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a);},selected:function(){return this.selected;},enabled:function(){return(this.disabled===false); -}});Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this);}}};(function(){var b=function(){if(Browser.loaded){return;}Browser.loaded=true; -window.fireEvent("domready");document.fireEvent("domready");};window.addEvent("load",b);if(Browser.Engine.trident){var a=document.createElement("div"); -(function(){($try(function(){a.doScroll();return document.id(a).inject(document.body).set("html","temp").dispose();}))?b():arguments.callee.delay(50);})(); -}else{if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50); -})();}else{document.addEvent("DOMContentLoaded",b);}}})();var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore"},initialize:function(a){this.subject=this.subject||this; -this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel"; -}},getTransition:function(){return function(a){return -(Math.cos(Math.PI*a)-1)/2;};},step:function(){var a=$time();if(a=200)&&(this.status<300)); -},processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a);}return a.stripScripts(this.options.evalScripts); -},success:function(b,a){this.onSuccess(this.processScripts(b),a);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain(); -},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},setHeader:function(a,b){this.headers.set(a,b); -return this;},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a);}.bind(this));},check:function(){if(!this.running){return true; -}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},send:function(k){if(!this.check(k)){return this; -}this.running=true;var i=$type(k);if(i=="string"||i=="element"){k={data:k};}var d=this.options;k=$extend({data:d.data,url:d.url,method:d.method},k);var g=k.data,b=String(k.url),a=k.method.toLowerCase(); -switch($type(g)){case"element":g=document.id(g).toQueryString();break;case"object":case"hash":g=Hash.toQueryString(g);}if(this.options.format){var j="format="+this.options.format; -g=(g)?j+"&"+g:j;}if(this.options.emulation&&!["get","post"].contains(a)){var h="_method="+a;g=(g)?h+"&"+g:h;a="post";}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:""; -this.headers.set("Content-type","application/x-www-form-urlencoded"+c);}if(this.options.noCache){var f="noCache="+new Date().getTime();g=(g)?f+"&"+g:f; -}var e=b.lastIndexOf("/");if(e>-1&&(e=b.indexOf("#"))>-1){b=b.substr(0,e);}if(g&&a=="get"){b=b+(b.contains("?")?"&":"?")+g;g=null;}this.xhr.open(a.toUpperCase(),b,this.options.async); -this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(m,l){try{this.xhr.setRequestHeader(l,m);}catch(n){this.fireEvent("exception",[l,m]); -}},this);this.fireEvent("request");this.xhr.send(g);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this; -}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});(function(){var a={}; -["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined}); -return this.send($extend(c,{method:b}));};});Request.implement(a);})();Element.Properties.send={set:function(a){var b=this.retrieve("send");if(b){b.cancel(); -}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},a));},get:function(a){if(a||!this.retrieve("send")){if(a||!this.retrieve("send:options")){this.set("send",a); -}this.store("send",new Request(this.retrieve("send:options")));}return this.retrieve("send");}};Element.implement({send:function(a){var b=this.get("send"); -b.send({data:this,url:a||b.options.url});return this;}}); -MooTools.More={version:"1.2.4.4",build:"6f6057dc645fdb7547689183b2311063bd653ddf"};Elements.from=function(e,d){if($pick(d,true)){e=e.stripScripts();}var b,c=e.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i); -if(c){b=new Element("table");var a=c[1].toLowerCase();if(["td","th","tr"].contains(a)){b=new Element("tbody").inject(b);if(a!="tr"){b=new Element("tr").inject(b); -}}}return(b||new Element("div")).set("html",e).getChildren();}; \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/js/mootools2/readme.txt b/assets/snippets/ajaxSearch/js/mootools2/readme.txt deleted file mode 100644 index eae9a3796f..0000000000 --- a/assets/snippets/ajaxSearch/js/mootools2/readme.txt +++ /dev/null @@ -1,27 +0,0 @@ -Readme text file for js/mootools2 - -The mootools.js file of the js/mootools2 directory contains - -1/ the following mootools-1.2.4 core components: - -- Core -- Native -- Class -- Elements (except Elements.dimension) -- Utilities - selectors -- DomReady -- Fx -- Request - -For more informations see: http://mootools.net/core version 1.2.4 - -2/ and from MooTools 1.2.4.4 More Builder - -the following plugin: -- Elements.From - -For more informations see: http://mootools.net/more version 1.2.4 - -This package is a YUI compressed package. -These are the minimum components/plugin needed by js/ajaxSearch-mootools2.js file -used by AjaxSearch with the ajax mode (&ajaxSearch=`1`) \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/arabic-utf8.inc.php b/assets/snippets/ajaxSearch/lang/arabic-utf8.inc.php deleted file mode 100755 index 0a513a3e7d..0000000000 --- a/assets/snippets/ajaxSearch/lang/arabic-utf8.inc.php +++ /dev/null @@ -1,35 +0,0 @@ - تجنب كتابة أي نص.'; -$_lang['as_cmtIntroMessage'] = 'هل عثرت على ما تبحث عنه؟ أكتب تعليقك هنا!'; -$_lang['as_cmtSubmitText'] = 'إرسال'; -$_lang['as_cmtResetText'] = 'مسح'; -$_lang['as_cmtThksMessage'] = 'شكرا على تعليقك!'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; diff --git a/assets/snippets/ajaxSearch/lang/chinese.inc.php b/assets/snippets/ajaxSearch/lang/chinese.inc.php deleted file mode 100755 index 081817fd7e..0000000000 --- a/assets/snippets/ajaxSearch/lang/chinese.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -不要输入任何文字。'; -$_lang['as_cmtIntroMessage'] = '你的搜索目标查找到了吗?在这里留下你的意见!'; -$_lang['as_cmtSubmitText'] = '发送'; -$_lang['as_cmtResetText'] = '清除'; -$_lang['as_cmtThksMessage'] = '谢谢你的意见!'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/chinese_simplified-utf8.inc.php b/assets/snippets/ajaxSearch/lang/chinese_simplified-utf8.inc.php deleted file mode 100755 index b9e1fc4cb7..0000000000 --- a/assets/snippets/ajaxSearch/lang/chinese_simplified-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -不要输入任何文字。'; -$_lang['as_cmtIntroMessage'] = '你的搜索目标查找到了吗?在这里留下你的意见!'; -$_lang['as_cmtSubmitText'] = '发送'; -$_lang['as_cmtResetText'] = '清除'; -$_lang['as_cmtThksMessage'] = '谢谢你的意见!'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/chinese_simplified.inc.php b/assets/snippets/ajaxSearch/lang/chinese_simplified.inc.php deleted file mode 100755 index 3bbe916159..0000000000 --- a/assets/snippets/ajaxSearch/lang/chinese_simplified.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/chinese_traditional-utf8.inc.php b/assets/snippets/ajaxSearch/lang/chinese_traditional-utf8.inc.php deleted file mode 100755 index 384cc7504d..0000000000 --- a/assets/snippets/ajaxSearch/lang/chinese_traditional-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -不要輸入任何文字。'; -$_lang['as_cmtIntroMessage'] = '你的搜索目標查找到了嗎?在這裡留下你的意見!'; -$_lang['as_cmtSubmitText'] = '發送'; -$_lang['as_cmtResetText'] = '清除'; -$_lang['as_cmtThksMessage'] = '謝謝你的意見!'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/chinese_traditional.inc.php b/assets/snippets/ajaxSearch/lang/chinese_traditional.inc.php deleted file mode 100755 index de578fa2b8..0000000000 --- a/assets/snippets/ajaxSearch/lang/chinese_traditional.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/czech.inc.php b/assets/snippets/ajaxSearch/lang/czech.inc.php deleted file mode 100755 index 1839c6a1b0..0000000000 --- a/assets/snippets/ajaxSearch/lang/czech.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Nezadávejte žádný text.'; -$_lang['as_cmtIntroMessage'] = 'Nenalezli jste to, co jste hledali? Nechte nám vzkaz!'; -$_lang['as_cmtSubmitText'] = 'Odeslat'; -$_lang['as_cmtResetText'] = 'Vyčistit'; -$_lang['as_cmtThksMessage'] = 'Děkujeme za komentář!'; -$_lang['as_resultsTextSingle'] = 'Nalezen %d výsledek.'; -$_lang['as_resultsTextMultiple'] = 'Nalezeno %d výsledků.'; -$_lang['as_grpResultsDisplayedText'] = '(Zobrazeno %d - %d z celkem %d)'; -$_lang['as_resultsDisplayed'] = 'Zobrazeno: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Zobrazit dalších %d výsledků'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/danish.inc.php b/assets/snippets/ajaxSearch/lang/danish.inc.php deleted file mode 100755 index 28d7ddf55c..0000000000 --- a/assets/snippets/ajaxSearch/lang/danish.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Du må derfor ikke skrive noget.'; -$_lang['as_cmtIntroMessage'] = 'Fandt du det du søgte efter? Send os din kommentar!'; -$_lang['as_cmtSubmitText'] = 'Send'; -$_lang['as_cmtResetText'] = 'Nulstil'; -$_lang['as_cmtThksMessage'] = 'Tak for din kommentar !'; -$_lang['as_resultsTextSingle'] = '%d resultat blev fundet.'; -$_lang['as_resultsTextMultiple'] = '%d resultater blev fundet.'; -$_lang['as_grpResultsDisplayedText'] = '(Viser nu %d - %d af %d)'; -$_lang['as_resultsDisplayed'] = 'Viser: %d'; -$_lang['as_paging1Text'] = '%d til %d af %d resultater'; -$_lang['as_paging2Text'] = 'Vis de næste %d resultater'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/english-utf8.inc.php b/assets/snippets/ajaxSearch/lang/english-utf8.inc.php deleted file mode 100755 index 6b4d057265..0000000000 --- a/assets/snippets/ajaxSearch/lang/english-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Refrain from entering any text.'; -$_lang['as_cmtIntroMessage'] = 'Did you find what you are looking for? Leave your comments here!'; -$_lang['as_cmtSubmitText'] = 'Send'; -$_lang['as_cmtResetText'] = 'Clear'; -$_lang['as_cmtThksMessage'] = 'Thanks for your comment !'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/english.inc.php b/assets/snippets/ajaxSearch/lang/english.inc.php deleted file mode 100755 index a313f7cd6e..0000000000 --- a/assets/snippets/ajaxSearch/lang/english.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Refrain from entering any text.'; -$_lang['as_cmtIntroMessage'] = 'Did you find what you are looking for? Leave your comments here!'; -$_lang['as_cmtSubmitText'] = 'Send'; -$_lang['as_cmtResetText'] = 'Clear'; -$_lang['as_cmtThksMessage'] = 'Thanks for your comment !'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/estonian-utf8.inc.php b/assets/snippets/ajaxSearch/lang/estonian-utf8.inc.php deleted file mode 100755 index 59f7792d53..0000000000 --- a/assets/snippets/ajaxSearch/lang/estonian-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ - \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/estonian.inc.php b/assets/snippets/ajaxSearch/lang/estonian.inc.php deleted file mode 100755 index 7bad0ccfa1..0000000000 --- a/assets/snippets/ajaxSearch/lang/estonian.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/finnish.inc.php b/assets/snippets/ajaxSearch/lang/finnish.inc.php deleted file mode 100755 index 681aeab125..0000000000 --- a/assets/snippets/ajaxSearch/lang/finnish.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -älä syötä mitään tekstiä tähän kenttään.'; -$_lang['as_cmtIntroMessage'] = 'Löysitkö etsimäsi? Jätä kommenttisi tänne!'; -$_lang['as_cmtSubmitText'] = 'Lähetä'; -$_lang['as_cmtResetText'] = 'Tyhjennä'; -$_lang['as_cmtThksMessage'] = 'Kiitos kommentistasi!'; -$_lang['as_resultsTextSingle'] = 'Löytyi %d hakutulosta.'; -$_lang['as_resultsTextMultiple'] = 'Löytyi %d hakutulosta.'; -$_lang['as_grpResultsDisplayedText'] = '(Näytetään %d - %d yhteensä %d tuloksesta)'; -$_lang['as_resultsDisplayed'] = 'Näytetään: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/francais-utf8.inc.php b/assets/snippets/ajaxSearch/lang/francais-utf8.inc.php deleted file mode 100755 index 560d0b9bdf..0000000000 --- a/assets/snippets/ajaxSearch/lang/francais-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Ne saisir aucun texte.'; -$_lang['as_cmtIntroMessage'] = 'Avez-vous trouvé ce que vous recherchiez? Laissez un commentaire ici!'; -$_lang['as_cmtSubmitText'] = 'envoyer'; -$_lang['as_cmtResetText'] = 'effacer'; -$_lang['as_cmtThksMessage'] = 'Merci pour votre commentaire'; -$_lang['as_resultsTextSingle'] = '%d résultat trouvé.'; -$_lang['as_resultsTextMultiple'] = '%d résultats trouvés.'; -$_lang['as_grpResultsDisplayedText'] = '(Affichage de %d - %d / %d)'; -$_lang['as_resultsDisplayed'] = 'Affichés : %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Voir %d autres resultats'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/francais.inc.php b/assets/snippets/ajaxSearch/lang/francais.inc.php deleted file mode 100755 index ceeaa0140d..0000000000 --- a/assets/snippets/ajaxSearch/lang/francais.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/german.inc.php b/assets/snippets/ajaxSearch/lang/german.inc.php deleted file mode 100755 index 0c45a0a1bf..0000000000 --- a/assets/snippets/ajaxSearch/lang/german.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Nicht ausfüllen.'; -$_lang['as_cmtIntroMessage'] = 'Haben Sie gefunden, wonach Sie gesucht haben? Hier bitte kommentieren!'; -$_lang['as_cmtSubmitText'] = 'Senden'; -$_lang['as_cmtResetText'] = 'Löschen'; -$_lang['as_cmtThksMessage'] = 'Danke für Ihren Kommentar !'; -$_lang['as_resultsTextSingle'] = '%d Ergebnis gefunden.'; -$_lang['as_resultsTextMultiple'] = '%d Ergebnisse gefunden.'; -$_lang['as_grpResultsDisplayedText'] = '(Gezeigt werden %d - %d von %d)'; -$_lang['as_resultsDisplayed'] = 'Angezeigt: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Zeige weitere %d Ergebnisse'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/hebrew.inc.php b/assets/snippets/ajaxSearch/lang/hebrew.inc.php deleted file mode 100755 index e1a41554fa..0000000000 --- a/assets/snippets/ajaxSearch/lang/hebrew.inc.php +++ /dev/null @@ -1,36 +0,0 @@ - \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/icelandic-utf8.inc.php b/assets/snippets/ajaxSearch/lang/icelandic-utf8.inc.php deleted file mode 100755 index e61ce44cdb..0000000000 --- a/assets/snippets/ajaxSearch/lang/icelandic-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Forðastu að slá inn texta.'; -$_lang['as_cmtIntroMessage'] = 'Fannstu það sem þú varst að leita að? Skrifið athugasemdir hér!'; -$_lang['as_cmtSubmitText'] = 'Senda'; -$_lang['as_cmtResetText'] = 'Hreinsa'; -$_lang['as_cmtThksMessage'] = 'Takk fyrir skilaboðin !'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/indonesia.inc.php b/assets/snippets/ajaxSearch/lang/indonesia.inc.php deleted file mode 100755 index 30a47744a4..0000000000 --- a/assets/snippets/ajaxSearch/lang/indonesia.inc.php +++ /dev/null @@ -1,30 +0,0 @@ -Hindari pengisian teks apapun.'; -$_lang['as_cmtIntroMessage'] = 'Apakah anda menemukan yang anda cari? Tinggalkan komentar anda di sini!'; -$_lang['as_cmtSubmitText'] = 'Kirim'; -$_lang['as_cmtResetText'] = 'Kosong'; -$_lang['as_cmtThksMessage'] = 'Terima kasih untuk komentar anda.'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/italian.inc.php b/assets/snippets/ajaxSearch/lang/italian.inc.php deleted file mode 100755 index ceb0190dde..0000000000 --- a/assets/snippets/ajaxSearch/lang/italian.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Non inserire alcun testo.'; -$_lang['as_cmtIntroMessage'] = 'Hai trovato quello che stavi cercando? Inviaci i tuoi commenti!'; -$_lang['as_cmtSubmitText'] = 'Invia'; -$_lang['as_cmtResetText'] = 'Cancella'; -$_lang['as_cmtThksMessage'] = 'Grazie per i commenti!'; -$_lang['as_resultsTextSingle'] = '%d risultato trovato.'; -$_lang['as_resultsTextMultiple'] = '%d risultati trovati.'; -$_lang['as_grpResultsDisplayedText'] = '(Visualizzati %d - %d di %d)'; -$_lang['as_resultsDisplayed'] = 'Visualizzati: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Mostra altri %d risultati'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/japanese-utf8.inc.php b/assets/snippets/ajaxSearch/lang/japanese-utf8.inc.php deleted file mode 100755 index 6dababc85a..0000000000 --- a/assets/snippets/ajaxSearch/lang/japanese-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -%2$sで検索した結果、%1$d件見つかりました。'; -$_lang['as_resultsFoundTextMultiple'] = '%2$sで検索した結果、%1$d件見つかりました。'; -$_lang['as_paginationTextSinglePage'] = ''; -$_lang['as_paginationTextMultiplePages'] = '検索結果ページ:'; -$_lang['as_moreResultsText'] = 'すべての結果を見る'; -$_lang['as_moreResultsTitle'] = 'もっと見る'; -$_lang['as_maxWords'] = '最大 %d 文字まで入力できます。'; -$_lang['as_minChars'] = '最少 %d 文字以上の入力が必要です。'; -$_lang['as_maxChars'] = '最大 %d 文字まで入力できます。'; -$_lang['oneword'] = '最低ひとつのキーワードを含む'; -$_lang['allwords'] = 'すべてのキーワードを含む'; -$_lang['exactphrase'] = '完全に一致する文章'; -$_lang['nowords'] = 'キーワードを含まない'; -$_lang['as_cmtHiddenFieldIntro'] = 'この欄は空白のままにしてください。
      何も入力しないでください。'; -$_lang['as_cmtIntroMessage'] = '探し物は見つかりましたか?コメントをどうぞ。'; -$_lang['as_cmtSubmitText'] = '送信'; -$_lang['as_cmtResetText'] = '消去'; -$_lang['as_cmtThksMessage'] = 'コメントをありがとうございました。'; -$_lang['as_resultsTextSingle'] = '%d件見つかりました。'; -$_lang['as_resultsTextMultiple'] = '%d件見つかりました。'; -$_lang['as_grpResultsDisplayedText'] = '%d件 から %d件 までを表示(全%d件)'; -$_lang['as_resultsDisplayed'] = '最初の%d件を表示します。'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = '次の%d件'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/nederlands-utf8.inc.php b/assets/snippets/ajaxSearch/lang/nederlands-utf8.inc.php deleted file mode 100644 index 5500664b12..0000000000 --- a/assets/snippets/ajaxSearch/lang/nederlands-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Zorg dat hier geen tekst is ingevoerd.'; -$_lang['as_cmtIntroMessage'] = 'Heeft u gevonden wat u zocht? Geef hier uw commentaar!'; -$_lang['as_cmtSubmitText'] = 'Verzenden'; -$_lang['as_cmtResetText'] = 'Wissen'; -$_lang['as_cmtThksMessage'] = 'Bedankt voor uw commentaar!'; -$_lang['as_resultsTextSingle'] = '%d resultaten gevonden.'; -$_lang['as_resultsTextMultiple'] = '%d resultaten gevonden.'; -$_lang['as_grpResultsDisplayedText'] = '(Getoond %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Getoond: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Toon meer %d resultaten'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/nederlands.inc.php b/assets/snippets/ajaxSearch/lang/nederlands.inc.php deleted file mode 100755 index 20da5bf674..0000000000 --- a/assets/snippets/ajaxSearch/lang/nederlands.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/norsk-utf8.inc.php b/assets/snippets/ajaxSearch/lang/norsk-utf8.inc.php deleted file mode 100755 index 2a106e706e..0000000000 --- a/assets/snippets/ajaxSearch/lang/norsk-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ - This field should be empty.
      Refrain from entering any text.'; -$_lang['as_cmtIntroMessage'] = 'Fant du det du søkte etter? Legg til kommentar her.'; -$_lang['as_cmtSubmitText'] = 'Send'; -$_lang['as_cmtResetText'] = 'Tøm'; -$_lang['as_cmtThksMessage'] = 'Takk for din kommentar.'; -$_lang['as_resultsTextSingle'] = '%d resultat funnet.'; -$_lang['as_resultsTextMultiple'] = '%d resultater funnet.'; -$_lang['as_grpResultsDisplayedText'] = '(Viser %d - %d av %d)'; -$_lang['as_resultsDisplayed'] = 'Vist: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Flere enn %d resultater'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/norsk.inc.php b/assets/snippets/ajaxSearch/lang/norsk.inc.php deleted file mode 100755 index a9d7c60f7b..0000000000 --- a/assets/snippets/ajaxSearch/lang/norsk.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/persian.inc.php b/assets/snippets/ajaxSearch/lang/persian.inc.php deleted file mode 100755 index 3680ce3df4..0000000000 --- a/assets/snippets/ajaxSearch/lang/persian.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -از درج متن خودداری کنید'; -$_lang['as_cmtIntroMessage'] = 'آیا چیزی که دنبالش بودید را یاقتید؟ نظرات خود را اینجا بنویسید!'; -$_lang['as_cmtSubmitText'] = 'ارسال'; -$_lang['as_cmtResetText'] = 'از نو'; -$_lang['as_cmtThksMessage'] = 'با تشکر از ابراز نظر!'; -$_lang['as_resultsTextSingle'] = '%d result found.'; -$_lang['as_resultsTextMultiple'] = '%d results found.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/polish-utf8.inc.php b/assets/snippets/ajaxSearch/lang/polish-utf8.inc.php deleted file mode 100755 index 04f6e1cb88..0000000000 --- a/assets/snippets/ajaxSearch/lang/polish-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ - Nie wpisuj tu niczego.'; -$_lang['as_cmtIntroMessage'] = 'Znalazłeś to czego szukałeś? Pozostaw swój komentarz!'; -$_lang['as_cmtSubmitText'] = 'Wyślij'; -$_lang['as_cmtResetText'] = 'Wyczyść'; -$_lang['as_cmtThksMessage'] = 'Dziękujemy za komentarz!'; -$_lang['as_resultsTextSingle'] = '%d wynik.'; -$_lang['as_resultsTextMultiple'] = '%d wyników.'; -$_lang['as_grpResultsDisplayedText'] = '(Wyniki %d - %d z %d)'; -$_lang['as_resultsDisplayed'] = 'Wyświetlono: 6'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Pokaż kolejne %d wyników'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/portuguese-br.inc.php b/assets/snippets/ajaxSearch/lang/portuguese-br.inc.php deleted file mode 100755 index 7a7630131c..0000000000 --- a/assets/snippets/ajaxSearch/lang/portuguese-br.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Não digite texto neste campo.'; -$_lang['as_cmtIntroMessage'] = 'Encontrou o que você estava buscando? Deixe o sue commentario aqui!'; -$_lang['as_cmtSubmitText'] = 'Enviar'; -$_lang['as_cmtResetText'] = 'Limpar'; -$_lang['as_cmtThksMessage'] = 'Obrigado pelo seu comentário!'; -$_lang['as_resultsTextSingle'] = '%d resultado encontrado.'; -$_lang['as_resultsTextMultiple'] = '%d resultados encontrados.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Exibindo: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Exibir mais %d resultados'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/portuguese.inc.php b/assets/snippets/ajaxSearch/lang/portuguese.inc.php deleted file mode 100755 index dfdc1cd66d..0000000000 --- a/assets/snippets/ajaxSearch/lang/portuguese.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Não digite texto neste campo.'; -$_lang['as_cmtIntroMessage'] = 'Encontrou o que você estava buscando? Deixe o sue commentario aqui!'; -$_lang['as_cmtSubmitText'] = 'Enviar'; -$_lang['as_cmtResetText'] = 'Limpar'; -$_lang['as_cmtThksMessage'] = 'Obrigado pelo seu comentário!'; -$_lang['as_resultsTextSingle'] = '%d resultado encontrado.'; -$_lang['as_resultsTextMultiple'] = '%d resultados encontrados.'; -$_lang['as_grpResultsDisplayedText'] = '(Displaying %d - %d of %d)'; -$_lang['as_resultsDisplayed'] = 'Displayed: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Show more %d results'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/russian-UTF8.inc.php b/assets/snippets/ajaxSearch/lang/russian-UTF8.inc.php deleted file mode 100755 index 49da2e127c..0000000000 --- a/assets/snippets/ajaxSearch/lang/russian-UTF8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Воздержитесь от ввода в него текста.'; -$_lang['as_cmtIntroMessage'] = 'Вы нашли то, что искали? Оставьте здесь свой комментарий!'; -$_lang['as_cmtSubmitText'] = 'Отправить'; -$_lang['as_cmtResetText'] = 'Очистить'; -$_lang['as_cmtThksMessage'] = 'Спасибо за ваш комментарий!'; -$_lang['as_resultsTextSingle'] = '%d найден. '; -$_lang['as_resultsTextMultiple'] = '%d найдено. '; -$_lang['as_grpResultsDisplayedText'] = '(Результаты %d – %d из %d)'; -$_lang['as_resultsDisplayed'] = 'Показано: %d.'; -$_lang['as_paging1Text'] = '%d – %d / %d'; -$_lang['as_paging2Text'] = 'Показать оставшиеся %d'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/russian.inc.php b/assets/snippets/ajaxSearch/lang/russian.inc.php deleted file mode 100755 index d9bf6566b1..0000000000 --- a/assets/snippets/ajaxSearch/lang/russian.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/slovak-utf8.inc.php b/assets/snippets/ajaxSearch/lang/slovak-utf8.inc.php deleted file mode 100755 index ebb7f45a88..0000000000 --- a/assets/snippets/ajaxSearch/lang/slovak-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Nezadávajte žiadny text.'; -$_lang['as_cmtIntroMessage'] = 'Našli ste čo ste hľadali? Napíšte Váš komentár!'; -$_lang['as_cmtSubmitText'] = 'Poslať'; -$_lang['as_cmtResetText'] = 'Reset'; -$_lang['as_cmtThksMessage'] = 'Ďakujeme za Váš komentár !'; -$_lang['as_resultsTextSingle'] = 'Nájdený %d výsledok.'; -$_lang['as_resultsTextMultiple'] = 'Nájdených %d výsledkov.'; -$_lang['as_grpResultsDisplayedText'] = '(Zobrazujem %d - %d z %d)'; -$_lang['as_resultsDisplayed'] = 'Zobrazených: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Zobraziť ostatných %d výsledkov'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/slovak.inc.php b/assets/snippets/ajaxSearch/lang/slovak.inc.php deleted file mode 100755 index c9727c33b8..0000000000 --- a/assets/snippets/ajaxSearch/lang/slovak.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/spanish-utf8.inc.php b/assets/snippets/ajaxSearch/lang/spanish-utf8.inc.php deleted file mode 100755 index e0ce6f57d1..0000000000 --- a/assets/snippets/ajaxSearch/lang/spanish-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -No entrar ningún texto.'; -$_lang['as_cmtIntroMessage'] = '¿Encontró lo que estaba buscando? ¡Deje un comentario aquí!'; -$_lang['as_cmtSubmitText'] = 'enviar'; -$_lang['as_cmtResetText'] = 'borrar'; -$_lang['as_cmtThksMessage'] = 'Gracias por su comentario'; -$_lang['as_resultsTextSingle'] = '%d resultado encontrado.'; -$_lang['as_resultsTextMultiple'] = '%d resultados encontrados.'; -$_lang['as_grpResultsDisplayedText'] = '(Mostrando %d - %d de %d)'; -$_lang['as_resultsDisplayed'] = 'Mostrado: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Mostrar %d resultados más'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/spanish.inc.php b/assets/snippets/ajaxSearch/lang/spanish.inc.php deleted file mode 100755 index 1b30a7a1fd..0000000000 --- a/assets/snippets/ajaxSearch/lang/spanish.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/svenska-utf8.inc.php b/assets/snippets/ajaxSearch/lang/svenska-utf8.inc.php deleted file mode 100755 index 2e047f47d7..0000000000 --- a/assets/snippets/ajaxSearch/lang/svenska-utf8.inc.php +++ /dev/null @@ -1,36 +0,0 @@ -Undvik att skriva någon text.'; -$_lang['as_cmtIntroMessage'] = 'Hittade du det som du sökte? Skriv en kommentar här!'; -$_lang['as_cmtSubmitText'] = 'Skicka'; -$_lang['as_cmtResetText'] = 'Rensa'; -$_lang['as_cmtThksMessage'] = 'Tack för din kommentar!'; -$_lang['as_resultsTextSingle'] = '%d resultat.'; -$_lang['as_resultsTextMultiple'] = '%d resultat.'; -$_lang['as_grpResultsDisplayedText'] = '(Visar %d - %d av %d)'; -$_lang['as_resultsDisplayed'] = 'Visade: %d'; -$_lang['as_paging1Text'] = '%d - %d / %d'; -$_lang['as_paging2Text'] = 'Visa fler. %d resultat.'; -?> \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/lang/svenska.inc.php b/assets/snippets/ajaxSearch/lang/svenska.inc.php deleted file mode 100755 index cb2f0c3046..0000000000 --- a/assets/snippets/ajaxSearch/lang/svenska.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -' . $contents); diff --git a/assets/snippets/ajaxSearch/lang/ukranian.inc.php b/assets/snippets/ajaxSearch/lang/ukranian.inc.php deleted file mode 100755 index 7591895afd..0000000000 --- a/assets/snippets/ajaxSearch/lang/ukranian.inc.php +++ /dev/null @@ -1,35 +0,0 @@ - Утримайтеся від введення в нього тексту. '; -$_lang['as_cmtIntroMessage'] = 'Ви знайшли те, що шукали? Залиште тут свій коментар! '; -$_lang['as_cmtSubmitText'] = 'Відправити'; -$_lang['as_cmtResetText'] = 'Очистити'; -$_lang['as_cmtThksMessage'] = 'Дякуємо за ваш коментар!'; -$_lang['as_resultsTextSingle'] = '%d знайдений. '; -$_lang['as_resultsTextMultiple'] = '%d знайдено. '; -$_lang['as_grpResultsDisplayedText'] = '(Результати %d – %d з %d)'; -$_lang['as_resultsDisplayed'] = 'Показано: %d.'; -$_lang['as_paging1Text'] = '%d – %d/%d '; -$_lang['as_paging2Text'] = 'Показати решту %d'; \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/module.ajaxSearchLogManager.tpl b/assets/snippets/ajaxSearch/module.ajaxSearchLogManager.tpl deleted file mode 100644 index e29da10825..0000000000 --- a/assets/snippets/ajaxSearch/module.ajaxSearchLogManager.tpl +++ /dev/null @@ -1,119 +0,0 @@ -/** -* AjaxSearch Log manager -* -* Display the content of the AjaxSearch Log table in the manager -* -* @category module -* @version 1.11.0 -* @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) -* @internal @modx_category Search -* @author Coroico -* @date 12/04/2016 -*/ - -Define('NB_LINES',100); // number of rows displayed -Define('AJAXSEARCH_LOG', 'ajaxsearch_log'); // ajaxSearch table log. - -function getLogs($tb,$nb){ - global $modx; - $db = $modx->db->config['dbase']; - $name = $modx->db->config['table_prefix'] . $tb; - $show = "SHOW TABLES FROM {$db} LIKE '{$name}'"; - $query = $modx->db->query($show); - if ($modx->db->getRecordCount($query)) { - $rs = $modx->db->select("searchstring,nb_results,results,comment,as_call,date,ip", $modx->getFullTableName($tb), '', 'id DESC', "0, $nb"); - return $rs; - } - else return(0); -} - -$opcode = isset($_POST['opcode']) ? $_POST['opcode'] : ''; - -// action directive - -switch($opcode) { - - default: // display module page - $output = << - - - - - - -
      - -

      AjaxSearch Logs Manager

      -

      Follow up searches ...

      -

      One row is listed by group of results. The user comment is set on the last group of results.

      -
      -EOD; - echo $output; - $rs = getLogs(AJAXSEARCH_LOG,NB_LINES); - - $output = << - - - Search Terms - Nb results - Doc ids - Comment - Snippet Call - Date - Ip - - - -EOD; - echo $output; - if ($rs) { - $i=0; - while($row = $modx->db->getRow($rs)){ - $vclass = (($i % 2) == 0) ? 'gridItem' : 'gridAltItem'; - $i += 1; - echo ''.$row['searchstring'].''.$row['nb_results'].''; - echo ''.$row['results'].''.$row['comment'].''.$row['as_call'].''; - echo ''.$row['date'].''.$row['ip'].''; - } - } - $output = << - -EOD; - echo $output; - if (!$rs) { - $msg = '

      The '.AJAXSEARCH_LOG.' table doesn\'t exist. This table is set up at the first run of AjaxSearch when asLog is set.

      '; - $msg .= '

      By default asLog = 0, so you need to initialize this parameter to create the table.

      '; - echo $msg; - } - - $output = << - - -EOD; - echo $output; - break; -} diff --git a/assets/snippets/ajaxSearch/plugin.advSearchHighlight.tpl b/assets/snippets/ajaxSearch/plugin.advSearchHighlight.tpl deleted file mode 100644 index aaed4650bf..0000000000 --- a/assets/snippets/ajaxSearch/plugin.advSearchHighlight.tpl +++ /dev/null @@ -1,154 +0,0 @@ -/** - * AdvSearch Highlight - * - * Used with AjaxSearch to show search terms highlighted on page linked from search results - * - * @category plugin - * @version 1.5 - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @internal @properties - * @internal @events OnWebPagePrerender - * @internal @modx_category Search - * @internal @legacy_names AdvSearch Highlighting - */ - -/* - ------------------------------------------------------------------------ - Plugin: advSearch_Highlight v1.5 - ------------------------------------------------------------------------ - Changes: - 18/03/10 - Remove possibility of XSS attempts being passed in the URL - - look-behind assertion improved - 29/03/09 - Removed urldecode calls; - - Added check for magic quotes - if set, remove slashes - - Highlights terms searched for when target is a HTML entity - 18/07/08 - advSearch parameter and pcre modifier added - 29/04/08 - Added highlight markups to select sections where highligth terms - 10/02/08 - Strip_tags added to avoid sql injection and XSS. Use of $_REQUEST - 01/03/07 - Added fies/updates from forum from users mikkelwe/identity - (better highlight replacement, additional div around term/removal message) - ------------------------------------------------------------------------ - Description: When a user clicks on the link from the AjaxSearch results - the target page will have the terms highlighted. - - AdvSearch_Highlight is an advanced "Multi-Part" variant of Search_Highlight - It allows to frame with "" and - several parts of the site that will be highligthed - ------------------------------------------------------------------------ - Created By: Susan Ottwell (sottwell@sottwell.com) - Kyle Jaebker (kjaebker@muddydogpaws.com) - - Refactored by Coroico (www.evo.wangba.fr) and TS - ------------------------------------------------------------------------ - Based off the the code by Susan Ottwell (www.sottwell.com) - http://forums.modx.com/thread/47775/plugin-highlight-search-terms - ------------------------------------------------------------------------ - CSS: - The classes used for the highlighting are the same as the AjaxSearch - ------------------------------------------------------------------------ - Notes: - To add a link to remove the highlighting and to show the searchterms - put the following on your page where you would like this to appear: - - - - Example output for this: - - Search Terms: the, template - Remove Highlighting - - Set the following variables to change the text: - - $termText - the text before the search terms - $removeText - the text for the remove link - ------------------------------------------------------------------------ -*/ -global $database_connection_charset; -// Conversion code name between html page character encoding and Mysql character encoding -// Some others conversions should be added if needed. Otherwise Page charset = Database charset -$pageCharset = array( - 'utf8' => 'UTF-8', - 'latin1' => 'ISO-8859-1', - 'latin2' => 'ISO-8859-2' -); - -if (isset($_REQUEST['searched']) && isset($_REQUEST['highlight'])) { - - // Set these to customize the text for the highlighting key - // -------------------------------------------------------- - $termText = '
      Search Terms: '; - $removeText = 'Remove Highlighting'; - // -------------------------------------------------------- - - $highlightText = $termText; - $advsearch = 'oneword'; - - $dbCharset = $database_connection_charset; - $pgCharset = array_key_exists($dbCharset,$pageCharset) ? $pageCharset[$dbCharset] : $dbCharset; - - $searched = strip_tags($_REQUEST['searched']); - $highlight = strip_tags($_REQUEST['highlight']); - if (isset($_REQUEST['advsearch'])) $advsearch = strip_tags($_REQUEST['advsearch']); - - if ($advsearch != 'nowords') { - - $highlightClass = explode(' ',$highlight); // break out the highlight classes - /* remove possibility of XSS attempts being passed in URL */ - foreach ($highlightClass as $key => $value) { - $highlightClass[$key] = preg_match('/[^A-Za-z0-9_-]/ms', $value) == 1 ? '' : $value; - } - - $searchArray = array(); - if ($advsearch == 'exactphrase') $searchArray[0] = $searched; - else $searchArray = explode(' ', $searched); - - $searchArray = array_unique($searchArray); - $nbterms = count($searchArray); - $searchTerms = array(); - for($i=0;$i<$nbterms;$i++){ - // Consider all possible combinations - $word_ents = array(); - $word_ents[] = $searchArray[$i]; - $word_ents[] = htmlentities($searchArray[$i], ENT_NOQUOTES, $pgCharset); - $word_ents[] = htmlentities($searchArray[$i], ENT_COMPAT, $pgCharset); - $word_ents[] = htmlentities($searchArray[$i], ENT_QUOTES, $pgCharset); - // Avoid duplication - $word_ents = array_unique($word_ents); - foreach($word_ents as $word) $searchTerms[]= array('term' => $word, 'class' => $i+1); - } - - $output = $modx->documentOutput; // get the parsed document - $part = explode("", $output); // break out the page - $nbp = count($part); // number of parts - - $pcreModifier = ($pgCharset == 'UTF-8') ? 'iu' : 'i'; - $lookBehind = '/(?]*<)/'; // avoid a match with a html tag - - $nbterms = count($searchTerms); - for($i=0;$i<$nbterms;$i++){ - $word = $searchTerms[$i]['term']; - $class = $highlightClass[0].' '.$highlightClass[$searchTerms[$i]['class']]; - - $highlightText .= ($i > 0) ? ', ' : ''; - $highlightText .= ''.$word.''; - - $pattern = $lookBehind . preg_quote($word, '/') . $lookAhead . $pcreModifier; - $replacement = '${0}'; - for ($p=0;$p<$nbp;$p++){ - $section = explode("", $part[$p], 2); // break out the part in section - if (count($section) == 2) $section[0] = preg_replace($pattern, $replacement, $section[0]); - $part[$p] = implode("",$section); - } - } - - $output = implode("", $part); - - $removeUrl = $modx->makeUrl($modx->documentIdentifier); - $highlightText .= '
      '.$removeText.'
      '; - - $output = str_replace('',$highlightText,$output); - - $modx->documentOutput = $output; - } -} \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/plugin.searchHighlight.tpl b/assets/snippets/ajaxSearch/plugin.searchHighlight.tpl deleted file mode 100644 index 8aaaac077d..0000000000 --- a/assets/snippets/ajaxSearch/plugin.searchHighlight.tpl +++ /dev/null @@ -1,143 +0,0 @@ -/** - * Search Highlight - * - * Used with AjaxSearch to show search terms highlighted on page linked from search results - * - * @category plugin - * @version 1.5 - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @internal @properties - * @internal @events OnWebPagePrerender - * @internal @modx_category Search - * @internal @legacy_names Search Highlighting - */ - -/* - ------------------------------------------------------------------------ - Plugin: Search_Highlight v1.5 - ------------------------------------------------------------------------ - Changes: - 18/03/10 - Remove possibility of XSS attempts being passed in the URL - - look-behind assertion improved - 29/03/09 - Removed urldecode calls; - - Added check for magic quotes - if set, remove slashes - - Highlights terms searched for when target is a HTML entity - 18/07/08 - advSearch parameter and pcre modifier added - 10/02/08 - Strip_tags added to avoid sql injection and XSS. Use of $_REQUEST - 01/03/07 - Added fies/updates from forum from users mikkelwe/identity - (better highlight replacement, additional div around term/removal message) - ------------------------------------------------------------------------ - Description: When a user clicks on the link from the AjaxSearch results - the target page will have the terms highlighted. - ------------------------------------------------------------------------ - Created By: Susan Ottwell (sottwell@sottwell.com) - Kyle Jaebker (kjaebker@muddydogpaws.com) - - Refactored by Coroico (www.evo.wangba.fr) and TS - ------------------------------------------------------------------------ - Based off the the code by Susan Ottwell (www.sottwell.com) - http://forums.modx.com/thread/47775/plugin-highlight-search-terms - ------------------------------------------------------------------------ - CSS: - The classes used for the highlighting are the same as the AjaxSearch - ------------------------------------------------------------------------ - Notes: - To add a link to remove the highlighting and to show the searchterms - put the following on your page where you would like this to appear: - - - - Example output for this: - - Search Terms: the, template - Remove Highlighting - - Set the following variables to change the text: - - $termText - the text before the search terms - $removeText - the text for the remove link - ------------------------------------------------------------------------ -*/ -global $database_connection_charset; -// Conversion code name between html page character encoding and Mysql character encoding -// Some others conversions should be added if needed. Otherwise Page charset = Database charset -$pageCharset = array( - 'utf8' => 'UTF-8', - 'latin1' => 'ISO-8859-1', - 'latin2' => 'ISO-8859-2' -); - -if (isset($_REQUEST['searched']) && isset($_REQUEST['highlight'])) { - - // Set these to customize the text for the highlighting key - // -------------------------------------------------------- - $termText = '
      Search Terms: '; - $removeText = 'Remove Highlighting'; - // -------------------------------------------------------- - - $highlightText = $termText; - $advsearch = 'oneword'; - - $dbCharset = $database_connection_charset; - $pgCharset = array_key_exists($dbCharset,$pageCharset) ? $pageCharset[$dbCharset] : $dbCharset; - - $searched = strip_tags($_REQUEST['searched']); - $highlight = strip_tags($_REQUEST['highlight']); - if (isset($_REQUEST['advsearch'])) $advsearch = strip_tags($_REQUEST['advsearch']); - - if ($advsearch != 'nowords') { - - $searchArray = array(); - if ($advsearch == 'exactphrase') $searchArray[0] = $searched; - else $searchArray = explode(' ', $searched); - - $searchArray = array_unique($searchArray); - $nbterms = count($searchArray); - $searchTerms = array(); - for($i=0;$i<$nbterms;$i++){ - // Consider all possible combinations - $word_ents = array(); - $word_ents[] = $searchArray[$i]; - $word_ents[] = htmlentities($searchArray[$i], ENT_NOQUOTES, $pgCharset); - $word_ents[] = htmlentities($searchArray[$i], ENT_COMPAT, $pgCharset); - $word_ents[] = htmlentities($searchArray[$i], ENT_QUOTES, $pgCharset); - // Avoid duplication - $word_ents = array_unique($word_ents); - foreach($word_ents as $word) $searchTerms[]= array('term' => $word, 'class' => $i+1); - } - - $output = $modx->documentOutput; // get the parsed document - $body = explode(" $value) { - $highlightClass[$key] = preg_match('/[^A-Za-z0-9_-]/ms', $value) == 1 ? '' : $value; - } - - $pcreModifier = ($pgCharset == 'UTF-8') ? 'iu' : 'i'; - $lookBehind = '/(?]*<)/'; // avoid a match with a html tag - - $nbterms = count($searchTerms); - for($i=0;$i<$nbterms;$i++){ - $word = $searchTerms[$i]['term']; - $class = $highlightClass[0].' '.$highlightClass[$searchTerms[$i]['class']]; - - $highlightText .= ($i > 0) ? ', ' : ''; - $highlightText .= ''.$word.''; - - $pattern = $lookBehind . preg_quote($word, '/') . $lookAhead . $pcreModifier; - $replacement = '${0}'; - $body[1] = preg_replace($pattern, $replacement, $body[1]); - } - - $output = implode("makeUrl($modx->documentIdentifier); - $highlightText .= '
      '.$removeText.'
      '; - - $output = str_replace('',$highlightText,$output); - $modx->documentOutput = $output; - } -} \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/snippet.ajaxSearch.php b/assets/snippets/ajaxSearch/snippet.ajaxSearch.php deleted file mode 100755 index 0adff4a787..0000000000 --- a/assets/snippets/ajaxSearch/snippet.ajaxSearch.php +++ /dev/null @@ -1,438 +0,0 @@ -assets/snippets/ajaxSearch/documentation
      - * @reportissues https://github.com/modxcms/evolution - * @author Coroico coroico@wangba.fr - * @author Jason Coward jason@opengeek.com - * @author Kyle Jaebker kjaebker@muddydogpaws.com - * @author Ryan Thrash http://thrash.me - * @author Many others since 2010 - * @lastupdate 27/05/2015 - */ - -// ajaxSearch version being executed -define('AS_VERSION', '1.11.0'); -// Path where ajaxSearch is installed -define('AS_SPATH', 'assets/snippets/ajaxSearch/'); -//include snippet file -define('AS_PATH', MODX_BASE_PATH . AS_SPATH); - -//------------------------------------------------------------------------------ -// Configuration - general AjaxSearch snippet setup options -//------------------------------------------------------------------------------ -global $modx; -$tstart = $modx->getMicroTime(); - -$cfg = array(); // current configuration -$cfg['version'] = AS_VERSION; - -// Load the default configuration $dcfg to get the default values -$default = AS_PATH . 'configs/default.config.php'; -if (file_exists($default)) include $default; -else return "

      AjaxSearch error: $default not found !
      Check the existing of this file!

      "; -if (!isset($dcfg)) return "

      AjaxSearch error: default configuration array not defined in $default!
      Check the content of this file!

      "; - -if ($dcfg['version'] != AS_VERSION) return "

      AjaxSearch error: Version number mismatch. Check the content of the default configuration file!

      "; - -// check the possible use of deprecated parameters (since 1.8.5) -$readme = "ajaxSearch_version_193.txt"; -if (isset($searchWordList)) return "

      AjaxSearch error: searchWordList is a deprecated parameter. Read " . $readme . " file.

      "; -if (isset($resultsPage)) return "

      AjaxSearch error: resultsPage is a deprecated parameter. Read " . $readme . " file.

      "; -if (isset($AS_showForm)) return "

      AjaxSearch error: AS_showForm parameter has been renamed showInputForm. Read " . $readme . " file.

      "; -if (isset($AS_landing)) return "

      AjaxSearch error: AS_landing parameter has been renamed landingPage. Read " . $readme . " file.

      "; -if (isset($AS_showResults)) return "

      AjaxSearch error: AS_showResults parameter has been renamed showResults. Read " . $readme . " file.

      "; - -// Load a custom configuration file if required -// config_name - Other config installed in the configs folder or in any folder within the MODX base path via @FILE -// Configuration files should be named in the form: .config.php -// Default: '' - no custom config -$cfg['config'] = isset($config) ? $config : $dcfg['config']; -if ($cfg['config']) { - $config = $cfg['config']; - $lconfig = (substr($config, 0, 6) != "@FILE:") ? AS_PATH . "configs/$config.config.php" : $modx->config['base_path'] . trim(substr($config, 6, strlen($config)-6)); - if (file_exists($lconfig)) include $lconfig; - else return "

      AjaxSearch error: " . $lconfig . " not found !
      Check your config parameter or your config file name!

      "; -} - -// &debug = [ 0 | 1 | 2 | 3 ] -// 1,2,3 : File mode - Output logged into a file named ajaxSearch_log.txt in ajaxSearch/debug/ directory. -// this directory should be writable. -// Default: 0 - no logs -$cfg['debug'] = isset($debug) ? $debug : (isset($__debug) ? $__debug : $dcfg['debug']); - -// &timeLimit = [ int | 60 ] -// Max execution time in seconds for the AjaxSearch script -// 0 - If set to zero, no time limit is imposed -// Default: 60 - 1 minute. -$cfg['timeLimit'] = isset($timeLimit) ? $timeLimit : (isset($__timeLimit) ? $__timeLimit : $dcfg['timeLimit']); - -// &language [ language_name | manager_language ] (optional) -// Default: $modx->config['manager_language'] - manager language used -$cfg['language'] = isset($language) ? $language : (isset($__language) ? $__language : $dcfg['language']); - -// &ajaxSearch [1 | 0] (as passed in snippet variable ONLY) -// Use this to display the search results using ajax You must include the Mootools library in your template -// Default: 1 - ajax mode selected -$cfg['ajaxSearch'] = isset($ajaxSearch) ? $ajaxSearch : (isset($__ajaxSearch) ? $__ajaxSearch : $dcfg['ajaxSearch']); -// avoid the use of @FILE: prefix with ajax mode -if ((substr($cfg['config'], 0, 6) == "@FILE:") && $cfg['ajaxSearch']) - return "

      AjaxSearch error: @FILE: prefix not allowed !
      Check your config parameter or your config file name!

      "; - -// &advSearch [ 'exactphrase' | 'allwords' | 'nowords' | 'oneword' ] -// Advanced search: -// - exactphrase : provides the documents which contain the exact phrase -// - allwords : provides the documents which contain all the words -// - nowords : provides the documents which do not contain the words -// - oneword : provides the document which contain at least one word -// Default: 'oneword' -$cfg['advSearch'] = isset($advSearch) ? $advSearch : (isset($__advSearch) ? $__advSearch : $dcfg['advSearch']); - -// &asId - Unique id for AjaxSearch instance -// this allows to distinguish several Ajaxsearch instances on the same page -// Any combination of characters a-z, underscores, and numbers 0-9 -// This is case sensitive. Default = empty string -// With ajax mode, the first snippet call of the page shouldn't use the asId parameter -$cfg['asId'] = isset($asId) ? $asId : (isset($__asId) ? $__asId : $dcfg['asId']); - -// &whereSearch -// Define where should occur the search -// a separated list of keywords describing the tables where to search -// keywords allowed : -// "content" for site_content, "tv" for site_tmplvar_contentvalues, "jot" for jot_content, "maxigallery" for maxigallery -// you could add your own keywords. But the keyword should be a user function which describes the tables to use -// all the text fields are searchable but you could specify the fields like this: -// whereSearch=`content:pagetitle,introtext,content|tv:tv_value|maxigallery:gal_title` -// Default: 'content|tv' -$cfg['whereSearch'] = isset($whereSearch) ? $whereSearch : (isset($__whereSearch) ? $__whereSearch : $dcfg['whereSearch']); - -// &sites : [comma separated list of sites] -// sites allow to define sites where to do the search -$cfg['sites'] = isset($sites) ? $sites : (isset($__sites) ? $__sites : $dcfg['sites']); - -// &subSearch [comma separated list of subsites] -// subSearch allow to define sub-domains or subsites where to do the search -$cfg['subSearch'] = isset($subSearch) ? $subSearch : (isset($__subSearch) ? $__subSearch : $dcfg['subSearch']); - -// &category [ tv_name ] -// Any combination of characters a-z, underscores, and numbers 0-9 -// This is case sensitive. Default = empty string -// Name of a TV. The category of a MODX document is provided by this TV content -$cfg['category'] = isset($category) ? $category : (isset($__category) ? $__category : $dcfg['category']); - -// &display [ 'mixed' | 'unmixed' ] -// When results comes from differents sites, subsites or categories, you could choose to display the results mixed or unmixed. -// Default: unmixed -// Unmixed mode display the results grouped by site, subsite or category. Each group of results could be paginated. -// Mixed mode mixe all the results coming from the differents area. -// With unmixed mode, results are ordered by the field provided by the first field of the order parameter -$cfg['display'] = isset($display) ? $display : (isset($__display) ? $__display : $dcfg['display']); - -// &init [ 'none' | 'all' ] -// init defines if the search display all the results or none when the search term is an empty string -// Default: none -$cfg['init'] = isset($init) ? $init : (isset($__init) ? $__init : $dcfg['init']); - -// &withTvs - Define which Tvs are used for the search in Tvs -// a comma separated list of TV names -// Default: '' - all TVs are used (empty list) -$cfg['withTvs'] = isset($withTvs) ? $withTvs : (isset($__withTvs) ? $__withTvs : $dcfg['withTvs']); - -// &order - Define the sort order of results -// Comma separated list of fields defined as searchable in the table definition -// to suppress the sorting, use &order=`` -// Default: 'pub_date,pagetitle' -$cfg['order'] = isset($order) ? $order : (isset($__order) ? $__order : $dcfg['order']); - -// &rank - Define the rank of search results. Results are sorted by rank value -// Comma separated list of fields with optionally user defined weight -// Default: 'pagetitle:100,extract' -// to suppress the rank sorting, use &rank=``; -// &rank sort occurs after the &order sort -$cfg['rank'] = isset($rank) ? $rank : (isset($__rank) ? $__rank : $dcfg['rank']); - -// &maxWords [ 1 < int < 10 ] -// Maximum number of words for searching -// Default: 5 -$cfg['maxWords'] = isset($maxWords) ? intval($maxWords) : (isset($__maxWords) ? intval($__maxWords) : $dcfg['maxWords']); - -// &minChars [ 2 < int < 100 ] -// Minimum number of characters to require for a word to be valid for searching. -// length of each word with $advSearch = 'allwords', 'oneword' or 'nowords' -// length of the search string with possible spaces with $advSearch = 'exactphrase' -// Default: 3 -$cfg['minChars'] = isset($minChars) ? intval($minChars) : (isset($__minChars) ? intval($__minChars) : $dcfg['minChars']); - -// &showInputForm [0 | 1] -// If you would like to turn off the search form when showing results you can set this to false.(1=true, 0=false) -// Default: 1 -$cfg['showInputForm'] = isset($showInputForm) ? $showInputForm : (isset($__showInputForm) ? $__showInputForm : $dcfg['showInputForm']); - -// &showIntro [0 | 1] -// If you would like to turn off the intro message beyond the input form you can set this to false.(1=true, 0=false) -// Default: 1 -$cfg['showIntro'] = isset($showIntro) ? $showIntro : (isset($__showIntro) ? $__showIntro : $dcfg['showIntro']); - -// &grabMax [ int ] -// Set to the max number of records you would like on each page. Set to 0 if unlimited. -// Default: 10 -$cfg['grabMax'] = isset($grabMax) ? intval($grabMax) : (isset($__grabMax) ? intval($__grabMax) : $dcfg['grabMax']); - -// &extract [ n:searchable fields list | 1:content,description,introtext,tv_content] -// show the search terms highlighted in a little extract -// n : maximum number of extracts displayed -// ordered searchable fields list : separated list of fields define as searchable in the table definition -// Default: '1:content,description,introtext,tv_value' - One extract from content then description,introtext,tv_value -$cfg['extract'] = isset($extract) ? $extract : (isset($__extract) ? $__extract : $dcfg['extract']); - -// &extractLength [ 50 < int < 800] -// Length of extract around the search words found - between 50 and 800 characters -// Default: 200 -$cfg['extractLength'] = isset($extractLength) ? intval($extractLength) : (isset($__extractLength) ? intval($__extractLength) : $dcfg['extractLength']); - -// &extractEllips [ string ] -// Ellipside to mark the star and the end of an extract when the sentence is cutting -// Default: '...' -$cfg['extractEllips'] = isset($extractEllips) ? $extractEllips : (isset($__extractEllips) ? $__extractEllips : $dcfg['extractEllips']); - -// &extractSeparator [ string ] -// Any html tag to mark the separation between extracts -// Default: '
      ' - but you could also choose for instance '
      ' -$cfg['extractSeparator'] = isset($extractSeparator) ? $extractSeparator : (isset($__extractSeparator) ? $__extractSeparator : $dcfg['extractSeparator']); - -// &formatDate [ string ] -// The format of outputted dates. See http://www.php.net/manual/en/function.date.php -// Default: 'd/m/y : H:i:s' - e.g: 21/01/08 : 23:09:22 -$cfg['formatDate'] = isset($formatDate) ? $formatDate : (isset($__formatDate) ? $__formatDate : $dcfg['formatDate']); - -// &highlightResult [1 | 0] -// create links so that search terms will be highlighted when linked page clicked -// Default: 1 - Results highlighted -$cfg['highlightResult'] = isset($highlightResult) ? $highlightResult : (isset($__highlightResult) ? $__highlightResult : $dcfg['highlightResult']); - -// &pagingType[ 0 | 1 | 2 ] -// Determine the pagination type used - Default 1 : Previous - X-Y/Z - Next -$cfg['pagingType'] = isset($pagingType) ? $pagingType : (isset($__pagingType) ? $__pagingType : $dcfg['pagingType']); - -// &pageLinkSeparator [ string ] -// What you want, if anything, between your page link numbers -// Default: ' | ' -$cfg['pageLinkSeparator'] = isset($pageLinkSeparator) ? $pageLinkSeparator : (isset($__pageLinkSeparator) ? $__pageLinkSeparator : $dcfg['pageLinkSeparator']); - -// &showPagingAlways[1 | 0] -// Determine whether or not to always show paging -$cfg['showPagingAlways'] = isset($showPagingAlways) ? $showPagingAlways : (isset($__showPagingAlways) ? $__showPagingAlways : $dcfg['showPagingAlways']); - -// &landingPage [int] set the page to show the results page (non Ajax search) -// Default: false -$cfg['landingPage'] = isset($landingPage) ? $landingPage : (isset($__landingPage) ? $__landingPage : $dcfg['landingPage']); - -// &showResults [1 | 0] establish whether to show the results or not -// Default: 1 -$cfg['showResults'] = isset($showResults) ? $showResults : (isset($__showResults) ? $__showResults : $dcfg['showResults']); - -// &parents [ [ in | not in ] : comma separated list of Ids | '' ] -// Ids of documents to retrieve their children to &depth depth where to do the search in or not in -// Default: '' - empty list -$cfg['parents'] = isset($parents) ? $parents : (isset($__parents) ? $__parents : $dcfg['parents']); - -// &documents [ [ in | not in ] : comma separated list of Ids | '' ] -// Ids of documents where to do the search in or not in -// Default: '' - empty list -$cfg['documents'] = isset($documents) ? $documents : (isset($__documents) ? $__documents : $dcfg['documents']); - -// &depth [ 0 < int ] Number of levels deep to retrieve documents -// Default: 10 -$cfg['depth'] = isset($depth) ? intval($depth) : (isset($__depth) ? intval($__depth) : $dcfg['depth']); - -// &hideMenu [0 | 1| 2] Search in hidden documents from menu. -// 0 - search only in documents visible from menu -// 1 - search only in documents hidden from menu -// 2 - search in hidden or visible documents from menu -// Default: 2 -$cfg['hideMenu'] = isset($hideMenu) ? intval($hideMenu) : (isset($__hideMenu) ? intval($__hideMenu) : $dcfg['hideMenu']); - -// &hideLink [0 | 1 ] Search in content of type reference (link) -// 0 - search in content of type document AND reference -// 1 - search only in content of type document -// Default: 1 -$cfg['hideLink'] = isset($hideLink) ? $hideLink : (isset($__hideLink) ? $__hideLink : $dcfg['hideLink']); - -// &filter - Basic filtering : remove unwanted documents that meets the criteria of the filter -// See Ditto 2 Basic filtering and the ajaxSearch demo site for more information -// Default: '' - empty list -$cfg['filter'] = isset($filter) ? $filter : (isset($__filter) ? $__filter : $dcfg['filter']); - -// &output [0 | 1 ]Custom layout -// Default: 0 - Results are listed just under the input form -// 1 - custom layout. put [+as.inputForm+] and [+as.results+] where you want to define the layout -$cfg['output'] = isset($output) ? $output : (isset($__output) ? $__output : $dcfg['output']); - -// &tplInput - Chunk to style the ajaxSearch input form -// Default: '@FILE:' . AS_SPATH . 'templates/input.tpl.html' -$cfg['tplInput'] = isset($tplInput) ? $tplInput : (isset($__tplInput) ? $__tplInput : $dcfg['tplInput']); - -// &tplResults - Chunk to style the non-ajax output results outer -// Default: '@FILE:' . AS_SPATH . 'templates/results.tpl.html' -$cfg['tplResults'] = isset($tplResults) ? $tplResults : (isset($__tplResults) ? $__tplResults : $dcfg['tplResults']); - -// &tplGrpResult - Chunk to style the non-ajax output group result outer -// Default: '@FILE:' . AS_SPATH . 'templates/grpResult.tpl.html' -$cfg['tplGrpResult'] = isset($tplGrpResult) ? $tplGrpResult : (isset($__tplGrpResult) ? $__tplGrpResult : $dcfg['tplGrpResult']); - -// &tplResult - Chunk to style each output result -// Default: "@FILE:" . AS_SPATH . 'templates/result.tpl.html' -$cfg['tplResult'] = isset($tplResult) ? $tplResult : (isset($__tplResult) ? $__tplResult : $dcfg['tplResult']); - -// &tplComment - Chunk to style the comment form (Also used with the ajax mode) -// Default: '@FILE:' . AS_SPATH . 'templates/comment.tpl.html' -$cfg['tplComment'] = isset($tplComment) ? $tplComment : (isset($__tplComment) ? $__tplComment : $dcfg['tplComment']); - -// &tplPaging0 - Chunk to style the paging links - type 0 -// Default: '@FILE:' . AS_SPATH . 'templates/paging0.tpl.html' -$cfg['tplPaging0'] = isset($tplPaging0) ? $tplPaging0 : (isset($__tplPaging0) ? $__tplPaging0 : $dcfg['tplPaging0']); - -// &tplPaging1 - Chunk to style the paging links - type 1 -// Default: '@FILE:' . AS_SPATH . 'templates/paging1.tpl.html' -$cfg['tplPaging1'] = isset($tplPaging1) ? $tplPaging1 : (isset($__tplPaging1) ? $__tplPaging1 : $dcfg['tplPaging1']); - -// &tplPaging2 - Chunk to style the paging links - type 2 -// Default: '@FILE:' . AS_SPATH . 'templates/paging2.tpl.html' -$cfg['tplPaging2'] = isset($tplPaging2) ? $tplPaging2 : (isset($__tplPaging2) ? $__tplPaging2 : $dcfg['tplPaging2']); - -// &stripInput - stripInput user function name -// Default: 'defaultStripInput' -$cfg['stripInput'] = isset($stripInput) ? $stripInput : (isset($__stripInput) ? $__stripInput : $dcfg['stripInput']); - -// &stripOutput - stripOutput user function name -// Default: 'defaultStripOutput' -$cfg['stripOutput'] = isset($stripOutput) ? $stripOutput : (isset($__stripOutput) ? $__stripOutput : $dcfg['stripOutput']); - -// &breadcrumbs -// 0 : disallow the breadcrumbs link -// Name of the breadcrumbs function : allow the breadcrumbs link -// The function name could be followed by some parameter initialization -// e.g: &breadcrumbs=`Breadcrumbs,showHomeCrumb:0,showCrumbsAtHome:1` -// Default: '' - empty string -$cfg['breadcrumbs'] = isset($breadcrumbs) ? $breadcrumbs : (isset($__breadcrumbs) ? $__breadcrumbs : $dcfg['breadcrumbs']); - -// &tvPhx - display and set placeHolders for TV (template variables) -// 0 : disallow the feature -// 1 : allow the display of all Modx TVs of the document found (default) -// 'tb_alias:display_function_name[,[tb_alias:display_function_name]*]' : set up placeholders for custom joined tables -// Default: 1 - tvPhx allowed for TV only -$cfg['tvPhx'] = isset($tvPhx) ? $tvPhx : (isset($__tvPhx) ? $__tvPhx : $dcfg['tvPhx']); - -// &clearDefault - Clearing default text -// Set this to 1 if you would like to include the clear default js function -// add the class "cleardefault" to your input text form and set this parameter -// Default: 0 -$cfg['clearDefault'] = isset($clearDefault) ? $clearDefault : (isset($__clearDefault) ? $__clearDefault : $dcfg['clearDefault']); - -// &jsClearDefault - Location of the js library -// Default: AS_SPATH . 'js/clearDefault.js' -$cfg['jsClearDefault'] = $dcfg['jsClearDefault']; - -// &mbstring - php_mbstring extension available [0 | 1] -// Default: 1 - extension available -$cfg['mbstring'] = isset($mbstring) ? $mbstring : (isset($__mbstring) ? $__mbstring : $dcfg['mbstring']); - -// &asLog - ajaxSearch log [ level [: comment [: purge]]] -// level: -// 0 : disallow the ajaxSearch log (Default) -// 1 : failed search requests are logged -// 2 : all ajaxSearch requests are logged -// comment: -// 0 : user comment not allowed (Default) -// 1 : user comment allowed -// purge: number of logs allowed before to do an automatic purge of the table -// Default: 200 -$cfg['asLog'] = isset($asLog) ? $asLog : (isset($__asLog) ? $__asLog : $dcfg['asLog']); - - -//------------------------------------------------------------------------------ -// Configuration - Simple Ajax mode -//------------------------------------------------------------------------------ - -if ($cfg['ajaxSearch']) { - - // $liveSearch [1 | 0] (as passed in snippet variable ONLY) - // Set this to 1 if you would like to use the live search (i.e. results as you type) - // Default: 0 - livesearch mode inactivated - $cfg['liveSearch'] = isset($liveSearch) ? $liveSearch : (isset($__liveSearch) ? $__liveSearch : $dcfg['liveSearch']); - - // &ajaxMax [int] - The maximum number of results to show for the ajaxsearch - // Default: 6 - $cfg['ajaxMax'] = isset($ajaxMax) ? $ajaxMax : (isset($__ajaxMax) ? $__ajaxMax : $dcfg['ajaxMax']); - - // &moreResultsPage [int] - // The document id of the page you want the more results link to point to - // Default: 0 - $cfg['moreResultsPage'] = isset($moreResultsPage) ? $moreResultsPage : (isset($__moreResultsPage) ? $__moreResultsPage : $dcfg['moreResultsPage']); - - // &opacity - set the opacity of the div ajaxSearch_output - // Should be a float value: [ 0. < float <= 1. ] - // Default: 1. - $cfg['opacity'] = isset($opacity) ? $opacity : (isset($__opacity) ? $__opacity : $dcfg['opacity']); - - // &tplAjaxResults - Chunk to style the ajax output results outer - // Default: '' - empty string - $cfg['tplAjaxResults'] = isset($tplAjaxResults) ? $tplAjaxResults : (isset($__tplAjaxResults) ? $__tplAjaxResults : $dcfg['tplAjaxResults']); - - // &tplAjaxGrpResult - Chunk to style each ajax output group result outer - // Default: '' - empty string - $cfg['tplAjaxGrpResult'] = isset($tplAjaxGrpResult) ? $tplAjaxGrpResult : (isset($__tplAjaxGrpResult) ? $__tplAjaxGrpResult : $dcfg['tplAjaxGrpResult']); - - // &tplAjaxResult - Chunk to style each ajax output result - // Default: '' - empty string - $cfg['tplAjaxResult'] = isset($tplAjaxResult) ? $tplAjaxResult : (isset($__tplAjaxResult) ? $__tplAjaxResult : $dcfg['tplAjaxResult']); - - // &jscript ['jquery'|'mootools2'|'mootools'] - // Set this to jquery if you would like use the jquery library - // set mootools2 to use the version 1.2 of mootools (limited to JS functions used by AS) - // Default: 'mootools' - use the version 1.11 of mootools provided with MODX - $cfg['jscript'] = isset($jscript) ? $jscript : (isset($__jscript) ? $__jscript : $dcfg['jscript']); - - // &addJscript [1 | 0] - // Set this to 1 if you would like to include or not the mootool/jquery library in the header of your pages automatically - // Default: 1 - $cfg['addJscript'] = isset($addJscript) ? $addJscript : (isset($__addJscript) ? $__addJscript : $dcfg['addJscript']); - - // &jsMooTools - Location of the mootools javascript library (current version of MODX) - // Default: MGR_DIR.'/media/script/mootools/mootools.js' - $cfg['jsMooTools'] = isset($jsMooTools) ? $jsMooTools : (isset($__jsMooTools) ? $__jsMooTools : $dcfg['jsMooTools']); - - // &jsMooTools2 - Location of an alternative mootools javascript library - // Default: AS_SPATH . 'js/mootools1.2/mootools.js' - contains only the required functions for AS - // to use an another library, use this parameter and change the ajaxSearch/js/ajaxSearch1/ajaxSearch-mootools2.js file - $cfg['jsMooTools2'] = isset($jsMooTools2) ? $jsMooTools2 : (isset($__jsMooTools2) ? $__jsMooTools2 : $dcfg['jsMooTools2']); - - // &jsQuery - Location of the jquery javascript library - // Default: AS_SPATH . 'js/jquery/jquery.js' - $cfg['jsJquery'] = isset($jsJquery) ? $jsJquery : (isset($__jsJquery) ? $__jsJquery : $dcfg['jsJquery']); -} - -// ========================================================== End of config -include_once AS_PATH . "classes/ajaxSearch.class.inc.php"; -if (class_exists('AjaxSearch')) { - $as = new AjaxSearch(); - $output = $as->run($tstart, $dcfg, $cfg); -} else { - $output = "

      error: AjaxSearch class not found

      "; -} -$elapsedTime = $modx->getMicroTime() - $tstart; -$etime = sprintf("%.4fs",$elapsedTime); -//$f=fopen('test.txt','a+');fwrite($f,"etime=".$etime."\n\n"); -return $output; \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/snippet.ajaxSearch.tpl b/assets/snippets/ajaxSearch/snippet.ajaxSearch.tpl deleted file mode 100644 index 6b14fdcc51..0000000000 --- a/assets/snippets/ajaxSearch/snippet.ajaxSearch.tpl +++ /dev/null @@ -1,18 +0,0 @@ -/** - * AjaxSearch - * - * Ajax and non-Ajax search that supports results highlighting - * - * @category snippet - * @version 1.11.0 - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @internal @properties - * @internal @modx_category Search - * @internal @installset base, sample - * - * @author Coroico - * @date 12/04/2016 - * ----------------------------------------------------------------------------- - */ - -return require MODX_BASE_PATH.'assets/snippets/ajaxSearch/snippet.ajaxSearch.php'; \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/ajaxGrpResult.tpl.html b/assets/snippets/ajaxSearch/templates/ajaxGrpResult.tpl.html deleted file mode 100644 index 3f4d19e94d..0000000000 --- a/assets/snippets/ajaxSearch/templates/ajaxGrpResult.tpl.html +++ /dev/null @@ -1,10 +0,0 @@ -[+as.grpResultsDef:is=`1`:then=` -
      -[+as.headerGrpResult+] -[+as.listResults+] -[+as.footerGrpResult+] -
      -`:else=` -
      [+as.grpResultNameShow:is=`1`:then=`[+as.grpResultName+]`+] -[+as.grpResultsDisplayedText+]
      -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/ajaxResult.tpl.html b/assets/snippets/ajaxSearch/templates/ajaxResult.tpl.html deleted file mode 100644 index fad1e63522..0000000000 --- a/assets/snippets/ajaxSearch/templates/ajaxResult.tpl.html +++ /dev/null @@ -1,12 +0,0 @@ -
      - [+as.pagetitle+] -[+as.descriptionShow:is=`1`:then=` - [+as.description+] -`+] -[+as.extractShow:is=`1`:then=` -

      [+as.extract+]

      -`+] -[+as.breadcrumbsShow:is=`1`:then=` - [+as.breadcrumbs+] -`+] -
      \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/ajaxResults.tpl.html b/assets/snippets/ajaxSearch/templates/ajaxResults.tpl.html deleted file mode 100644 index 5548edfea1..0000000000 --- a/assets/snippets/ajaxSearch/templates/ajaxResults.tpl.html +++ /dev/null @@ -1,16 +0,0 @@ -[+as.noResults:is=`1`:then=` -
      - [+as.noResultText+] -
      -`:else=` -

      [+as.resultsFoundText+][+as.resultsDisplayedText+]

      -[+as.listGrpResults+] -`+] -[+as.moreResults:is=`1`:then=` - -`+] -[+as.showCmt:is=`1`:then=` -[+as.comment+] -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/comment.tpl.html b/assets/snippets/ajaxSearch/templates/comment.tpl.html deleted file mode 100644 index 9e12007c5b..0000000000 --- a/assets/snippets/ajaxSearch/templates/comment.tpl.html +++ /dev/null @@ -1,19 +0,0 @@ -
      - -
      - [+as.hiddenFieldIntro+] -
      -
      - -
      - - - -
      - \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/grpResult.tpl.html b/assets/snippets/ajaxSearch/templates/grpResult.tpl.html deleted file mode 100644 index 0c9cd89606..0000000000 --- a/assets/snippets/ajaxSearch/templates/grpResult.tpl.html +++ /dev/null @@ -1,11 +0,0 @@ -[+as.grpResultsDef:is=`1`:then=` -
      -[+as.headerGrpResult+] -[+as.footerGrpResult+] -[+as.listResults+] -[+as.footerGrpResult+] -
      -`:else=` -
      [+as.grpResultNameShow:is=`1`:then=`[+as.grpResultName+]`+] -[+as.grpResultsDisplayedText+]
      -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/input.tpl.html b/assets/snippets/ajaxSearch/templates/input.tpl.html deleted file mode 100644 index b3c399e436..0000000000 --- a/assets/snippets/ajaxSearch/templates/input.tpl.html +++ /dev/null @@ -1,18 +0,0 @@ -[+as.showInputForm:is=`1`:then=` -
      -
      [+as.showAsId:is=`1`:then=``+] - - - [+as.liveSearch:is=`0`:then=` - - `+] -
      -
      -`+] -[+as.showIntro:is=`1`:then=` -

      [+as.introMessage+]

      -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/inputTemplates/input1.tpl.html b/assets/snippets/ajaxSearch/templates/inputTemplates/input1.tpl.html deleted file mode 100644 index b3c399e436..0000000000 --- a/assets/snippets/ajaxSearch/templates/inputTemplates/input1.tpl.html +++ /dev/null @@ -1,18 +0,0 @@ -[+as.showInputForm:is=`1`:then=` -
      -
      [+as.showAsId:is=`1`:then=``+] - - - [+as.liveSearch:is=`0`:then=` - - `+] -
      -
      -`+] -[+as.showIntro:is=`1`:then=` -

      [+as.introMessage+]

      -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/inputTemplates/input2.tpl.html b/assets/snippets/ajaxSearch/templates/inputTemplates/input2.tpl.html deleted file mode 100644 index 4721220659..0000000000 --- a/assets/snippets/ajaxSearch/templates/inputTemplates/input2.tpl.html +++ /dev/null @@ -1,23 +0,0 @@ -[+as.showInputForm:is=`1`:then=` -
      -
      - - - - -
      -
      [+as.showAsId:is=`1`:then=``+] - - [+as.liveSearch:is=`0`:then=` - - `+] -
      -
      -[+as.showIntro:is=`1`:then=` -

      [+as.introMessage+]

      -`+] -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/inputTemplates/input3.tpl.html b/assets/snippets/ajaxSearch/templates/inputTemplates/input3.tpl.html deleted file mode 100644 index 76920328b9..0000000000 --- a/assets/snippets/ajaxSearch/templates/inputTemplates/input3.tpl.html +++ /dev/null @@ -1,21 +0,0 @@ -[+as.showInputForm:is=`1`:then=` -
      -
      - - [+as.showAsId:is=`1`:then=``+] - - -
      -
      -[+as.showIntro:is=`1`:then=` -

      [+as.introMessage+]

      -`+] -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/inputTemplates/readme.txt b/assets/snippets/ajaxSearch/templates/inputTemplates/readme.txt deleted file mode 100644 index 3855f6e078..0000000000 --- a/assets/snippets/ajaxSearch/templates/inputTemplates/readme.txt +++ /dev/null @@ -1,30 +0,0 @@ -/** - * AjaxSearch - * - * Ajax and non-Ajax search that supports results highlighting - * - * @version 1.11.0 - * @author Coroico - * @date 12/04/2016 - * ----------------------------------------------------------------------------- -/** - -Input templates - -To set an input form you could use the following form elements: -• a set of check boxes to select the value of the advanced Search parameter (name=advSearch) -• an input fied (name=search), to catch the search terms you search -• or a multiple input list to select the search terms among a list of terms (name=search) - -To demonstrate these possibilities, several demos exist on the demo site. -Each demos display the results on the same page under the input form with the non-ajax mode (&ajaxSearch=`0`) -Each demo use the input.tpl.html templates provided in this floder -• Input 1 : a simple search with a simple input field -• Input 2 : a simple search with a multiple input list -• Input 3 : an advanced search. An input field with the selection of the advanced Search parameter - -You could mix the advanced search parameter with the input list (2 & 3) - -With an input field, when the liveSearch mode is set, the submit button is not displayed. A search occurs after each character typed. - - diff --git a/assets/snippets/ajaxSearch/templates/paging0.tpl.html b/assets/snippets/ajaxSearch/templates/paging0.tpl.html deleted file mode 100644 index f3b6450832..0000000000 --- a/assets/snippets/ajaxSearch/templates/paging0.tpl.html +++ /dev/null @@ -1,12 +0,0 @@ -[+as.tpl:is=`paging`:then=` - - [+as.pagingText+] - [+as.pagingLinks+] - -`+] -[+as.tpl:is=`pagingLinks`:then=` - [+as.pagingText+][+as.pagingSeparator+] -`+] -[+as.tpl:is=`pagingLinksCurrent`:then=` - [+as.pagingText+][+as.pagingSeparator+] -`+] \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/paging1.tpl.html b/assets/snippets/ajaxSearch/templates/paging1.tpl.html deleted file mode 100644 index 36897eb09c..0000000000 --- a/assets/snippets/ajaxSearch/templates/paging1.tpl.html +++ /dev/null @@ -1,5 +0,0 @@ -
      -[+as.showPrev:is=`1`:then=`previous`+] - [+as.pagingStart+] - [+as.pagingEnd+] / [+as.pagingNb+] -[+as.showNext:is=`1`:then=`next`+] -
      \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/paging2.tpl.html b/assets/snippets/ajaxSearch/templates/paging2.tpl.html deleted file mode 100644 index 0bae0efcb0..0000000000 --- a/assets/snippets/ajaxSearch/templates/paging2.tpl.html +++ /dev/null @@ -1,3 +0,0 @@ -
      [+as.pagingStart+] - [+as.pagingEnd+] / [+as.pagingNb+] -[+as.showMore:is=`1`:then=`[+as.pagingText+]`+] -
      \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/result.tpl.html b/assets/snippets/ajaxSearch/templates/result.tpl.html deleted file mode 100644 index fad1e63522..0000000000 --- a/assets/snippets/ajaxSearch/templates/result.tpl.html +++ /dev/null @@ -1,12 +0,0 @@ -
      - [+as.pagetitle+] -[+as.descriptionShow:is=`1`:then=` - [+as.description+] -`+] -[+as.extractShow:is=`1`:then=` -

      [+as.extract+]

      -`+] -[+as.breadcrumbsShow:is=`1`:then=` - [+as.breadcrumbs+] -`+] -
      \ No newline at end of file diff --git a/assets/snippets/ajaxSearch/templates/results.tpl.html b/assets/snippets/ajaxSearch/templates/results.tpl.html deleted file mode 100644 index 261cab02e2..0000000000 --- a/assets/snippets/ajaxSearch/templates/results.tpl.html +++ /dev/null @@ -1,11 +0,0 @@ -[+as.noResults:is=`1`:then=` -
      - [+as.noResultText+] -
      -`:else=` -

      [+as.resultsFoundText+][+as.resultsDisplayedText+]

      - [+as.listGrpResults+] -`+] -[+as.showCmt:is=`1`:then=` -[+as.comment+] -`+] \ No newline at end of file diff --git a/install/assets/plugins/searchhighlight.tpl b/install/assets/plugins/searchhighlight.tpl deleted file mode 100644 index 5099f73a60..0000000000 --- a/install/assets/plugins/searchhighlight.tpl +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Search Highlight - * - * Used with AjaxSearch to show search terms highlighted on page linked from search results - * - * @category plugin - * @version 1.5 - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @internal @properties - * @internal @events OnWebPagePrerender - * @internal @modx_category Search - * @internal @legacy_names Search Highlighting - * @internal @installset base, sample - * @internal @disabled 1 - */ - - /* - ------------------------------------------------------------------------ - Plugin: Search_Highlight v1.5 - ------------------------------------------------------------------------ - Changes: - 18/03/10 - Remove possibility of XSS attempts being passed in the URL - - look-behind assertion improved - 29/03/09 - Removed urldecode calls; - - Added check for magic quotes - if set, remove slashes - - Highlights terms searched for when target is a HTML entity - 18/07/08 - advSearch parameter and pcre modifier added - 10/02/08 - Strip_tags added to avoid sql injection and XSS. Use of $_REQUEST - 01/03/07 - Added fies/updates from forum from users mikkelwe/identity - (better highlight replacement, additional div around term/removal message) - ------------------------------------------------------------------------ - Description: When a user clicks on the link from the AjaxSearch results - the target page will have the terms highlighted. - ------------------------------------------------------------------------ - Created By: Susan Ottwell (sottwell@sottwell.com) - Kyle Jaebker (kjaebker@muddydogpaws.com) - - Refactored by Coroico (www.evo.wangba.fr) and TS - ------------------------------------------------------------------------ - Based off the the code by Susan Ottwell (www.sottwell.com) - http://forums.modx.com/thread/47775/plugin-highlight-search-terms - ------------------------------------------------------------------------ - CSS: - The classes used for the highlighting are the same as the AjaxSearch - ------------------------------------------------------------------------ - Notes: - To add a link to remove the highlighting and to show the searchterms - put the following on your page where you would like this to appear: - - - - Example output for this: - - Search Terms: the, template - Remove Highlighting - - Set the following variables to change the text: - - $termText - the text before the search terms - $removeText - the text for the remove link - ------------------------------------------------------------------------ -*/ -global $database_connection_charset; -// Conversion code name between html page character encoding and Mysql character encoding -// Some others conversions should be added if needed. Otherwise Page charset = Database charset -$pageCharset = array( - 'utf8' => 'UTF-8', - 'latin1' => 'ISO-8859-1', - 'latin2' => 'ISO-8859-2' -); - -if (isset($_REQUEST['searched']) && isset($_REQUEST['highlight'])) { - - // Set these to customize the text for the highlighting key - // -------------------------------------------------------- - $termText = '
      Search Terms: '; - $removeText = 'Remove Highlighting'; - // -------------------------------------------------------- - - $highlightText = $termText; - $advsearch = 'oneword'; - - $dbCharset = $database_connection_charset; - $pgCharset = array_key_exists($dbCharset,$pageCharset) ? $pageCharset[$dbCharset] : $dbCharset; - - $searched = strip_tags($_REQUEST['searched']); - $highlight = strip_tags($_REQUEST['highlight']); - if (isset($_REQUEST['advsearch'])) $advsearch = strip_tags($_REQUEST['advsearch']); - - - if ($advsearch != 'nowords') { - - $searchArray = array(); - if ($advsearch == 'exactphrase') $searchArray[0] = $searched; - else $searchArray = explode(' ', $searched); - - $searchArray = array_unique($searchArray); - $nbterms = count($searchArray); - $searchTerms = array(); - for($i=0;$i<$nbterms;$i++){ - // Consider all possible combinations - $word_ents = array(); - $word_ents[] = $searchArray[$i]; - $word_ents[] = htmlentities($searchArray[$i], ENT_NOQUOTES, $pgCharset); - $word_ents[] = htmlentities($searchArray[$i], ENT_COMPAT, $pgCharset); - $word_ents[] = htmlentities($searchArray[$i], ENT_QUOTES, $pgCharset); - // Avoid duplication - $word_ents = array_unique($word_ents); - foreach($word_ents as $word) $searchTerms[]= array('term' => $word, 'class' => $i+1); - } - - $output = $modx->documentOutput; // get the parsed document - $body = explode(" $value) { - $highlightClass[$key] = preg_match('/[^A-Za-z0-9_-]/ms', $value) == 1 ? '' : $value; - } - - $pcreModifier = ($pgCharset == 'UTF-8') ? 'iu' : 'i'; - $lookBehind = '/(?]*<)/'; // avoid a match with a html tag - - $nbterms = count($searchTerms); - for($i=0;$i<$nbterms;$i++){ - $word = $searchTerms[$i]['term']; - $class = $highlightClass[0].' '.$highlightClass[$searchTerms[$i]['class']]; - - $highlightText .= ($i > 0) ? ', ' : ''; - $highlightText .= ''.$word.''; - - $pattern = $lookBehind . preg_quote($word, '/') . $lookAhead . $pcreModifier; - $replacement = '${0}'; - $body[1] = preg_replace($pattern, $replacement, $body[1]); - } - - $output = implode("makeUrl($modx->documentIdentifier); - $highlightText .= '
      '.$removeText.'
      '; - - $output = str_replace('',$highlightText,$output); - $modx->documentOutput = $output; - } -} \ No newline at end of file diff --git a/install/assets/snippets/ajaxSearch.tpl b/install/assets/snippets/ajaxSearch.tpl deleted file mode 100755 index 270edd4137..0000000000 --- a/install/assets/snippets/ajaxSearch.tpl +++ /dev/null @@ -1,18 +0,0 @@ -/** - * AjaxSearch - * - * Ajax and non-Ajax search that supports results highlighting - * - * @category snippet - * @version 1.11.0 - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @internal @properties - * @internal @modx_category Search - * @internal @installset base, sample - * - * @author Coroico - * @date 05/06/2014 - * ----------------------------------------------------------------------------- - */ - -return require MODX_BASE_PATH.'assets/snippets/ajaxSearch/snippet.ajaxSearch.php'; \ No newline at end of file From eed944b1fc884bcc701a85a7fc07846a59f1a197 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sat, 4 Nov 2017 21:51:00 +0300 Subject: [PATCH 319/577] move Ditto to Extras (https://github.com/extras-evolution/Ditto) --- assets/snippets/ditto/changelog.txt | 529 -------- .../ditto/classes/debug.class.inc.php | 153 --- .../ditto/classes/ditto.class.inc.php | 1121 ----------------- .../ditto/classes/filter.class.inc.php | 148 --- assets/snippets/ditto/classes/index.html | 2 - .../ditto/classes/phx.parser.class.inc.php | 414 ------ .../ditto/classes/phx.pre.class.inc.php | 46 - .../ditto/classes/random.class.inc.php | 131 -- .../ditto/classes/template.class.inc.php | 208 --- .../ditto/configs/compatibility.config.php | 40 - .../snippets/ditto/configs/default.config.php | 3 - assets/snippets/ditto/configs/index.html | 2 - assets/snippets/ditto/debug/bug.png | Bin 774 -> 0 bytes .../snippets/ditto/debug/debug.template.css | 13 - .../snippets/ditto/debug/debug.templates.php | 40 - assets/snippets/ditto/debug/main.template.css | 13 - .../ditto/debug/modxDebugConsole.class.php | 265 ---- .../extenders/andFilter.extender.inc.php | 41 - .../extenders/countDocs.extender.inc.php | 34 - .../extenders/customsort.extender.inc.php | 15 - .../extenders/dateFilter.extender.inc.php | 228 ---- .../ditto/extenders/distinct.extender.inc.php | 116 -- .../ditto/extenders/example.extender.inc.php | 89 -- .../extenders/glossaryFilter.extender.inc.php | 52 - assets/snippets/ditto/extenders/index.html | 2 - .../ditto/extenders/jotcount.extender.inc.php | 21 - .../extenders/jotdatesort.extender.inc.php | 113 -- .../ditto/extenders/level.extender.inc.php | 15 - .../ditto/extenders/nosort.extender.inc.php | 14 - .../ditto/extenders/request.extender.inc.php | 100 -- .../ditto/extenders/search.extender.inc.php | 263 ---- .../ditto/extenders/summary.extender.inc.php | 337 ----- .../extenders/tagging.extender.class.inc.php | 174 --- .../ditto/extenders/tagging.extender.inc.php | 206 --- .../ditto/extenders/tvFilter.extender.inc.php | 40 - .../ditto/formats/atom.format.inc.php | 122 -- .../ditto/formats/html.format.inc.php | 4 - assets/snippets/ditto/formats/index.html | 2 - .../ditto/formats/json.format.inc.php | 130 -- .../snippets/ditto/formats/rss.format.inc.php | 150 --- .../snippets/ditto/formats/xml.format.inc.php | 136 -- assets/snippets/ditto/index.html | 2 - .../ditto/lang/bulgarian-utf8.inc.php | 60 - assets/snippets/ditto/lang/bulgarian.inc.php | 6 - assets/snippets/ditto/lang/chinese.inc.php | 58 - assets/snippets/ditto/lang/czech.inc.php | 59 - assets/snippets/ditto/lang/danish.inc.php | 59 - assets/snippets/ditto/lang/english.inc.php | 58 - assets/snippets/ditto/lang/finnish.inc.php | 58 - .../snippets/ditto/lang/francais-utf8.inc.php | 59 - assets/snippets/ditto/lang/francais.inc.php | 6 - assets/snippets/ditto/lang/german.inc.php | 58 - assets/snippets/ditto/lang/index.html | 2 - assets/snippets/ditto/lang/italian.inc.php | 58 - .../snippets/ditto/lang/japanese-utf8.inc.php | 53 - assets/snippets/ditto/lang/nederlands.inc.php | 58 - assets/snippets/ditto/lang/persian.inc.php | 59 - .../snippets/ditto/lang/polish-utf8.inc.php | 59 - .../snippets/ditto/lang/portuguese-br.inc.php | 58 - assets/snippets/ditto/lang/portuguese.inc.php | 58 - .../snippets/ditto/lang/russian-UTF8.inc.php | 60 - assets/snippets/ditto/lang/russian.inc.php | 6 - assets/snippets/ditto/lang/spanish.inc.php | 59 - .../snippets/ditto/lang/svenska-utf8.inc.php | 59 - assets/snippets/ditto/lang/svenska.inc.php | 6 - assets/snippets/ditto/snippet.ditto.php | 1090 ---------------- install/assets/snippets/ditto.tpl | 15 - 67 files changed, 7715 deletions(-) delete mode 100644 assets/snippets/ditto/changelog.txt delete mode 100644 assets/snippets/ditto/classes/debug.class.inc.php delete mode 100644 assets/snippets/ditto/classes/ditto.class.inc.php delete mode 100644 assets/snippets/ditto/classes/filter.class.inc.php delete mode 100644 assets/snippets/ditto/classes/index.html delete mode 100755 assets/snippets/ditto/classes/phx.parser.class.inc.php delete mode 100644 assets/snippets/ditto/classes/phx.pre.class.inc.php delete mode 100644 assets/snippets/ditto/classes/random.class.inc.php delete mode 100644 assets/snippets/ditto/classes/template.class.inc.php delete mode 100644 assets/snippets/ditto/configs/compatibility.config.php delete mode 100644 assets/snippets/ditto/configs/default.config.php delete mode 100644 assets/snippets/ditto/configs/index.html delete mode 100644 assets/snippets/ditto/debug/bug.png delete mode 100644 assets/snippets/ditto/debug/debug.template.css delete mode 100644 assets/snippets/ditto/debug/debug.templates.php delete mode 100644 assets/snippets/ditto/debug/main.template.css delete mode 100644 assets/snippets/ditto/debug/modxDebugConsole.class.php delete mode 100644 assets/snippets/ditto/extenders/andFilter.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/countDocs.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/customsort.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/dateFilter.extender.inc.php delete mode 100755 assets/snippets/ditto/extenders/distinct.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/example.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/glossaryFilter.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/index.html delete mode 100644 assets/snippets/ditto/extenders/jotcount.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/jotdatesort.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/level.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/nosort.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/request.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/search.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/summary.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/tagging.extender.class.inc.php delete mode 100644 assets/snippets/ditto/extenders/tagging.extender.inc.php delete mode 100644 assets/snippets/ditto/extenders/tvFilter.extender.inc.php delete mode 100644 assets/snippets/ditto/formats/atom.format.inc.php delete mode 100644 assets/snippets/ditto/formats/html.format.inc.php delete mode 100644 assets/snippets/ditto/formats/index.html delete mode 100644 assets/snippets/ditto/formats/json.format.inc.php delete mode 100644 assets/snippets/ditto/formats/rss.format.inc.php delete mode 100644 assets/snippets/ditto/formats/xml.format.inc.php delete mode 100644 assets/snippets/ditto/index.html delete mode 100755 assets/snippets/ditto/lang/bulgarian-utf8.inc.php delete mode 100755 assets/snippets/ditto/lang/bulgarian.inc.php delete mode 100755 assets/snippets/ditto/lang/chinese.inc.php delete mode 100644 assets/snippets/ditto/lang/czech.inc.php delete mode 100644 assets/snippets/ditto/lang/danish.inc.php delete mode 100755 assets/snippets/ditto/lang/english.inc.php delete mode 100755 assets/snippets/ditto/lang/finnish.inc.php delete mode 100644 assets/snippets/ditto/lang/francais-utf8.inc.php delete mode 100644 assets/snippets/ditto/lang/francais.inc.php delete mode 100644 assets/snippets/ditto/lang/german.inc.php delete mode 100644 assets/snippets/ditto/lang/index.html delete mode 100644 assets/snippets/ditto/lang/italian.inc.php delete mode 100755 assets/snippets/ditto/lang/japanese-utf8.inc.php delete mode 100755 assets/snippets/ditto/lang/nederlands.inc.php delete mode 100755 assets/snippets/ditto/lang/persian.inc.php delete mode 100644 assets/snippets/ditto/lang/polish-utf8.inc.php delete mode 100644 assets/snippets/ditto/lang/portuguese-br.inc.php delete mode 100644 assets/snippets/ditto/lang/portuguese.inc.php delete mode 100755 assets/snippets/ditto/lang/russian-UTF8.inc.php delete mode 100755 assets/snippets/ditto/lang/russian.inc.php delete mode 100755 assets/snippets/ditto/lang/spanish.inc.php delete mode 100755 assets/snippets/ditto/lang/svenska-utf8.inc.php delete mode 100755 assets/snippets/ditto/lang/svenska.inc.php delete mode 100644 assets/snippets/ditto/snippet.ditto.php delete mode 100755 install/assets/snippets/ditto.tpl diff --git a/assets/snippets/ditto/changelog.txt b/assets/snippets/ditto/changelog.txt deleted file mode 100644 index 7dad6819e6..0000000000 --- a/assets/snippets/ditto/changelog.txt +++ /dev/null @@ -1,529 +0,0 @@ -[2007-1-06: REVISION 0000] - -[NEW] phx capability -[NEW] summarize extender - -[2007-1-06: REVISION 0000] - -[FIXED] request config -[FIXED] randomize -[FIXED] 1-0 pagination placeholders issue -[NEW] dateFilter to the extenders - -[2007-1-07: REVISION 0000] - -[CHANGED] made request a extender -[NEW] item[x] placeholders which now work with pagination -[FIXED] sortBy -[NEW] templates to debug output - -[2007-1-12: REVISION 0000] - -[FIXED] various minor bugs -[CHANGED] moved template debug output back to [+tpl+] debug item -[CHANGED] removed appendTVs method for getTV which allows for fetching of a TV for all needed documents with support for default values -[CHANGED] determine IDs to use document IDs instead of parents since getTV requires document IDs -[FIXED] sortBy glitch - -[2007-1-14: REVISION 1286] - -[FIXED] build URL and pagination -[CHANGED] changed getTV to appendTV -[FIXED] fixed document & TV retrieval - -[2007-1-14: REVISION 1287] - -[NEW] getChildIDs method has been rewritten for raw performance -[NEW] date extender for date placeholder and related params -[CHANGED] Moved debug CSS to its own language key and now uses regClientCSS to add to header -[NEW] Save support added with 0 outputting only content, 1 outputting the remaining content past stop and setting the placeholders, and 2 setting the placeholders with no output. -[FIXED] Call-time pass-by-reference -[FIXED] MakeURL nolonger prepends the site_url - -[2007-1-16: REVISION 0000] - -[FIXED] &tags parameters and tplAlt vs tplFirst assignment -[CHANGED] first and last templates are now the first and last items on a given page, not of all documents - -[2007-1-17: REVISION 0000] - -[FIXED] &tags parameter -[FIXED] &debug output when no documents found -[FIXED] QE placeholders now correctly add pagetitle field to fields array - -[2007-1-18: REVISION 0000] - -[FIXED] Advanced sorting - -[2007-1-19: REVISION 0000] - -[FIXED] Tag filter only enables if tags are specified -[FIXED] No results display with custom formats - -[2007-1-22: REVISION 0000] - -[FIXED] Limit = 0 error handling -[FIXED] Pagination division by 0 error -[FIXED] Empty $_GET tags -[NEW] Reflect can now get its own documents by running Ditto -[NEW] seeThroughUnpub = 0 performance drastically increased -[CHANGED] $ditto->getDocuments now returns an array with numeric, not string, keys - -[2007-2-4: REVISION 0000] -[CHANGED] Reflect source code order and comments - -[2007-2-7: REVISION 0000] -[NEW] Save option 3 -[CHANGED] Reflect to obey save option 3 -[CHANGED] Added if function exists statements to custom placeholders declarations -[CHANGED] getDocuments parameters order and fields are now given as an array -[NEW] prefetch variable now contains the data array fetched by the prefetcher when true - -[2007-2-9: REVISION 0000] -[FIXED] Server offset is now applied to the date placeholder - -[2007-2-10: REVISION 0000] -[CHANGED] Reflect Ditto ID detection -[REMOVED] Save = 0 restraint on pagination -[NEW] Data is now saved and reused from the prefetcher -[FIXED] Prefetcher field parsing error -[REMOVED] if function exists statements to custom placeholders declarations - -[2007-2-11: REVISION 0000] -[CHANGED] Ditto snippet source code order - -[2007-2-12: REVISION 0000] -[NEW] Server offset is applied to format date placeholders -[FIXED] Filtering + Prefetch now work correctly together -[CHANGED] #ID keys are now preserved in the getDocuments function -[NEW] rel="tags" to tag links -[NEW] local and global filter delimiter parameters for customization -[CHANGED] MakeURL function for compliance with TVexplorer (heliotrope @ http://forums.modx.com/thread/27666/ditto-2-0-beta-3#dis-post-147124) -[FIXED] ;; in source code removed -[CHANGED] = to == in filter source -[REMOVED] debug->stored references -[CHANGED] Parameter comments to reflect recent changes - -[2007-2-13: REVISION 0000] -[FIXED] Missing commas in JSON format file -[CHANGED] &start in Reflect can now be dynamically set like Ditto -[REMOVED] &debug parameter in Reflect - -[2007-2-14: REVISION 0000] -[FIXED] &start in Reflect -[FIXED] Localization support for UTF-8 strings -[FIXED] Randomize -[NEW] If getDocuments is 1, Reflect will get its own documents even if given an ID -[FIXED] Ditto ID can now be fed to ditto->buildURL as a parameter again -[FIXED] Reflect now sets an empty month URL variable so that Ditto filtering works properly on years - -[2007-2-15: REVISION 0000] -[FIXED] "etomite" string in charset param from older MODX versions - -[2007-2-16: REVISION 0000] -[CHANGED] debug output to clean tables -[FIXED] Reflect now sets an false month URL variable instead of an empty one -[REMOVED] utf8_str_replace as it was not necessary - -[2007-2-17: REVISION 0000] -[CHANGED] PHx Pre-Parser version and code -[REMOVED] &total parameter -[FIXED] &save=1 now saves the documents not shown to the resource placeholder as intended -[FIXED] Reflect ordering -[FIXED] Prefetcher -[FIXED] Single chunk removal -[NEW] Allow for multiple chunk removal - -[2007-2-18: REVISION 0000] -[NEW] Ditto class commenting for Natural Docs -[FIXED] Reflect source code ordering -[FIXED] &tags=`` extra delimiter -[FIXED] TV prefix and prefetch issue -[FIXED] Reflect no documents error -[FIXED] Reflect custom templates fetching -[FIXED] Reflect tag closings thanks to new algorithm - -[2007-2-19: REVISION 0000] -[FIXED] is_file error -[NEW] caseSensitive option for tagging to determine whether or not the tag filter is case sensitive -[NEW] Proper display of tags when case sensitive is on AND off -[FIXED] File retrieval logic to handle different extenders in different calls -[CHANGED] caseSensitive default to 0 -[FIXED] SortBy pub_date -[FIXED] include issues - -[2007-2-20: REVISION 0000] -[FIXED] [*field*] support -[FIXED] No tags error -[NEW] &yearSortDir and &monthSortDir in Reflect for the direction of the sort of the year and month -[FIXED] include issues (hopefully for good!) -[FIXED] template order mixup in language file - -[2007-2-21: REVISION 0000] -[CHANGED] Ditto base path can now be over-ridden so when debugging locally no incorrect paths will be committed to svn -[NEW] Ditto snippet commenting for Natural Docs (Not Yet Complete) -[FIXED] Array error when no documents are given -[FIXED] Tags None Error -[FIXED] &documents = "" and &parents = "" error handling -[CHANGED] Cleaned up template processing -[NEW] Date parameter added back in for UTF-8 compatibility. No-longer an extension as it is needed on sites using the UTF-8 charset. - -[2007-2-22: REVISION 0000] -[CHANGED] More commenting -[FIXED] $row['contentid'] omitted in appendTVs -[FIXED] TPL Debug Rendering -[FIXED] Correct template is now applied to documents -[FIXED] Reflect no date visible issue - -[2007-2-23: REVISION 0000] -[FIXED] Documentation typos and additions -[FIXED] [*ph*] style placeholders fixed -[CHANGED] &total is back in business -[FIXED] &showInMenuOnly -[FIXED] &parents = 0 - -[2007-2-24: REVISION 0000] -[FIXED] Reflect template issue -[NEW] &hiddenFields parameter to support things like nested placeholders and [*fields*] -[FIXED] No documents found with prefetch -[CHANGED] Build URL function to support passing of arrays - -[2007-2-28: REVISION 0000] -[CHANGED] Build URL now trims ID before building the URL string -[NEW] Debug View -[CHANGED] English language file for new debug view -[CHANGED] Reflect passes months by numbers not by name, should make multi-language compatible -[CHANGED] Date filter is now its own custom filter as originally planned -[NEW] Filters can now specify data sources they need (including multiple sources via a comma delimited list) -[REMOVED] $debug reference in Reflect -[NEW] Custom Filters can now add hidden Fields - -[2007-3-1: REVISION 0000] -[CHANGED] Minor bug-fixes to debug system -[CHANGED] Debug templates moved out of language file into new debug templates php file like formats -[CHANGED] Language file now properly formatted - -[2007-3-3: REVISION 0000] -[FIXED] Tags & RSS - -[2007-3-4: REVISION 0000] -[CHANGED] noResults logic for compatibility with new debug code -[REMOVED] Non essential ditto->header and ditto->footer variables for local versions -[NEW] Format files documented -[REMOVED] Temp file code removed in favor of faster header code -[FIXED] &sortBy=`pub_date` -[CHANGED] source,function is now the order for both placeholders and filters - -[2007-3-5: REVISION 0000] -[FIXED] Custom filters being used without a normal filter not functioning -[FIXED] Wordwrap in debug class -[FIXED] Titles for Format Files (those were documented in the last commit not language files) -[CHANGED] Parameter order for parse filters is now logical -[NEW] tplTrunk which allows the [+link+] parameter to be templated using [+url+] and [+text+] placeholders -[FIXED] Wordwrap in debug class (again...) -[NEW] Configs, formats, and extenders can load extenders via adding to the $extenders array -[CHANGED] Pagination logic to handle &total=0 or &summarize=0 -[CHANGED] RSS now uses [+summary+] placeholder again -[CHANGED] Debug window now resizeable -[CHANGED] Version number from RC2 to RC3 -[NEW] install.txt file which doubles as a splash page for the documentation - -[2007-3-6: REVISION 0000] -[FIXED] wordwrap non-string warning -[FIXED] filter variable overwrite resulting in all filters failing -[FIXED] wordwrap non-string warning (take 2) -[FIXED] implode error in debug -[FIXED] SQL error when start > total -[CHANGED] Debug output in MODX info to not var_export objects and resource arrays -[CHANGED] Moved cFilters and extenders initiation arrays to the beginning -[CHANGED] Documentation to show the only configs and formats can load extenders, not extenders themselves -[NEW] PHx version 2.1.2 -[FIXED] QE Issues with incorrect ID and custom placeholders -[FIXED] ksort error -[REMOVED] Non-neccessary header -[FIXED] Blank author placeholder with QE - -[2007-3-7: REVISION 0000] -[FIXED] Reflect "@CODE:" prefix moved to correct line - -[2007-3-8: REVISION 0000] -[CHANGED] Links in install.txt to their correct values -[FIXED] Pre-parsed filters -[NEW] Example extender for use when creating new extenders -[NEW] Template and debug classes now documented -[FIXED] "retrieved" fields array() error -[REMOVED] notes.txt file in preparation for release -[FIXED] debug parameters output -[CHANGED] Version number from RC3 to 2.0.0 - -[2007-3-9: REVISION 0000] -[FIXED] Duplicate tuncAt -> truncText in documentation -[FIXED] include_once for extenders is now include - -[2007-3-12: REVISION 0000] -[NEW] Now uses MODXDebugConsole class as a base for the debug class -[CHANGED] minor indenting of the debug templates and new tab template -[FIXED] &start -[FIXED] missing urlencode on values of makeURL arguments -[CHANGED] install.txt to include new stable download link -[FIXED] &randomize -[NEW] Compatibility config to allow backwards compatibility with Ditto 1.0.2 calls - -[2007-3-13: REVISION 0000] -[NEW] &randomize now uses mySQL's RAND() function for faster parsing and LIMIT support -[CHANGED] compatibility extender to include emptyText support -[CHANGED] optimized getParam -[NEW] Implemented Ticket #20 -[FIXED] Page reload on debug link click -[FIXED] Ticket #25 -[NEW] Implemented Ticket #26 : Added @EVAL to filtering system. Note that it is only for basic filtering, not custom filtering (tagging, etc). -[CHANGED] Implemented Ticket #28 : Removed : from @ bindings - -[2007-3-14: REVISION 0000] -[FIXED] Debug error when no documents found -[CHANGED] &cFilters and $parsedFilters removed in favor of new $filters array. All extenders have been updated for compatibility. -[NEW] Implemented Ticket #29 so that extenders can be located outside of Ditto folder -[FIXED] When clicking on a tag link start is reset for proper display of documents -[CHANGED] Documentation corrections -[NEW] Weighted Random via &randomize having the value of a tv or field -[FIXED] Weights are now converted to integer before being used in weighted random -[FIXED] Weighted Random with &summary = 1 -[FIXED] makeParamTable array error -[CHANGED] &summarize to &show for simplicity - -[2007-3-15: REVISION 0000] -[NEW] dateFilter extender can now filter down to days -[CHANGED] Reflect to pass &date=false to dateFilter to not trigger an error -[CHANGED] &show (which was &summarize) to &display -[REMOVED] Non-needed $ditto->advSort pass through -[FIXED] Default template now correctly uses [+date+] again -[FIXED] CustomReset on display side - -[2007-3-17: REVISION 0000] -[FIXED] Debug "unknown" field type issue -[NEW] Placeholders can now specify their QE field -[FIXED] $dittoID prefix missing from [+tags+] MODX placeholder -[NEW] Added trim to @bindings -[CHANGED] Improvements to internal QE link renderer -[FIXED] Summary extender -[FIXED] Summary extender typo... -[NEW] urlStart placeholder for referencing the start value in the URL -[CHANGED] Increment version number to 2.0.1.SVN in preparation for release - -[2007-3-18: REVISION 0000] -[NEW] Added documentation to Reflect -[CHANGED] Version number to 2.0.1 - -[2007-3-19: REVISION 0000] -[CHANGED] Version number to 2.0.2.SVN -[FIXED] Removed variable referencing as it causes errors in some php versions -[FIXED] Minor language typo's - -[2007-3-20: REVISION 0000] -[FIXED] Language number typos -[FIXED] Default template un-needed parsing -[FIXED] Changelog dates - -[2007-3-21: REVISION 0000] -[REMOVED] Debug Console MODX Tab -[FIXED] Debug Console fields - -[2007-3-22: REVISION 0000] -[FIXED] URL encoding -[FIXED] Typo in header --- "Desciption" to "Description" - -[2007-3-23: REVISION 0000] -[FIXED] Bug where * placeholders were parsed before all custom placeholders -[FIXED] Atom encoding -[FIXED] Filters array now cleaned first -[FIXED] Version typo -[CHANGED] &ditto_base to prepend base_path -[FIXED] Prefetch no documents found -[FIXED] Debug data display -[FIXED] Tagging trim() missing from certain functions - -[2007-3-26: REVISION 0000] -[FIXED] @FILE inclusion error for extenders -[FIXED] Documentation for Ditto ID -[NEW] dateFilter $_GET variables secured and sanitized -[NEW] Request extender now employ's $modx->stripTags for security -[NEW] Secured start variable via intval in snippet -[NEW] Added &good to request extender to compliment &bad -[NEW] Debug generation date and time added as an html comment to the debug console output - -[2007-3-27: REVISION 0000] -[FIXED] Pagination and &start -[FIXED] &start and &sortDir=`ASC` - -[2007-3-28: REVISION 0000] -[FIXED] &start and createdonReset -[FIXED] &start and sortDir -[CHANGED] Whitespace and comments -[FIXED] item[x] placeholders (Closes #38) -[FIXED] stripTags in the Request extender - -[2007-4-2: REVISION 0000] -[NEW] Relative URLs are now converted to absolute URLs in the content and introtext fields when in a format other than html - -[2007-4-5: REVISION 0000] -[CHANGED] &limit to &queryLimit (Closes #43) -[NEW] Additional tag parameters (Closes #39) -[CHANGED] &trunc behavior (Closes #33) -[NEW] Extenders and configs can be called outside the Ditto folder (Closes #29) -[NEW] Reflect configs and Wordpress Reflect config (Closes #31) -[NEW] Ability to call all documents using &parents=`0` &depth=`0` (Closes #40) -[CHANGED] Version number to 2.0.2.BETA - -[2007-4-8: REVISION 0000] -[FIXED] Documentation typos -[CHANGED] Version number to 2.0.2 - -[2007-4-10: REVISION 0000] -[CHANGED] Indentation on getDocuments function -[NEW] Public flag on getDocuments function (Related to #47) -[NEW] hidePrivate parameter to interface with above (Closes #47) -[CHANGED] $modx->recordCount to $modx->db->getRecordCount($result); (Related to #30) -[FIXED] &depth now stops when there are no more levels (Closes #45) - -[2007-4-12: REVISION 0000] -[CHANGED] Documentation corrections -[CHANGED] Improved performance when getting all documents (References #40) - -[2007-4-15: REVISION 0000] -[CHANGED] Version number to 2.0.3 SVN -[FIXED] Category tags in RSS, ATOM, and XML output -[FIXED] Sort order of wordpress config - -[2007-4-23: REVISION 0000] -[FIXED] Shortags issue (Closes #51) - -[2007-4-25: REVISION 0000] -[FIXED] Changelog typo -[FIXED] Documentation typos -[NEW] getParam now supports full template fetching (Closes #50) -[NEW] Reflect now is fully template-able ala Wayfinder (Closes #42) -[CHANGED] Version number to 2.1.SVN for both Ditto and Reflect - -[2007-5-6: REVISION 0000] -[NEW] dateFilter now can use parameters to get the year, month, or day to filter by -[REMOVED] Requirement for filter functions to be enclosed in classes - -[2007-5-7: REVISION 0000] -[NEW] noResults function to handle conditions where there are no results (References #53) -[FIXED] Pagination placeholders now are correctly blank or show zero when no results are found (Closes #53) -[CHANGED] template->replace now accepts an associative array of name=>value of placeholders (format is no-longer part of the array) -[NEW] Pagination is now fully templateable for 100% templateability (Closes #41) -[FIXED] Bug with &limit < &display - -[2007-5-10: REVISION 1428] -[REMOVED] Not needed setSortOrder function -[CHANGED] main.template.css to debug.template.css for consistancy -[CHANGED] Many str_replace calls replaced with template->replace (References #30) -[REMOVED] Not needed str_replace_phx function - -[2007-5-15: REVISION 0000] -[FIXED] hidePrivate now triggers a prefetch -[FIXED] PHx placeholders are now detected -------> [REMOVED] Fix until it can be more properly implemented -------> [FIXED] Repaired using "a greedy plus and a negated character class" -[FIXED] Placeholder detection is now optimized - -[2007-5-17: REVISION 0000] -[REMOVED] PHx placeholder detection as it causes errors with other placeholder's detection -[NEW] dateFilter now accepts a single value containing whole date (Closes #55) -[CHANGED] Version number to 2.1.BETA - -[2007-7-06: REVISION 0000] -[FIXED] &keywords - -[2007-07-07: REVISION 0000] -[NEW] Reflect now passes on Ditto errors to the user -[NEW] Reflect now natively accepts most Ditto parameters (no more &dittoSnippetParameters!) - -[2007-07-10: REVISION 0000] -[NEW] Placeholders now work in filter arguments (Closes #60) - -[2007-07-14: REVISION 0000] -[NEW] Sort by multiple fields just like MySQL using the new &orderBy parameter (Closes #46) - -[2007-7-15: REVISION 0000] -[NEW] Added credits and documentation to the multiSort function -[FIXED] Direction arguments are now correctly trimmed in &orderBy by the parseOrderByFunction - -[2007-7-15: REVISION 0000] -[NEW] Default config and language file now always load in both Ditto and Reflect -[FIXED] Debug console now correctly shows sortBy and sortDir -[FIXED] &showPublishedOnly now correctly functions -[FIXED] Removed extra whitespace from request config - -[2007-7-18: REVISION 0000] -[FIXED] xHTML URL setting in the manager no-longer leads to double encoding (Closes #58) -[FIXED] array_multisort error when no documents found - -[2007-7-21: REVISION 0000] -[NEW] Added Bulgarian, German, Dutch, and Italian language files - -[2007-7-24: REVISION 0000] -[NEW] Added ditto_iteration placeholder for sequence -[NEW] Added Spanish and Persian language files -[FIXED] Documentation headers in language files - -[2007-7-26: REVISION 0000] -[CHANGED] Version number to 2.1.SVN -[FIXED] Url placeholder - -[2007-8-03: REVISION 0000] -[FIXED] Invalid orderBy array error (Closes #63) - -[2007-8-05: REVISION 0000] -[FIXED] RSS, ATOM, and JSON issue with template::replace -[FIXED] RSS category element indentation -[FIXED] Custom placeholders over-writing tvs (Closes #52) -[NEW] tplTagLinks parameter allows tagLinks placeholder to be templated (Closes #56) - -[2007-8-06: REVISION 0000] -[NEW] Sort callbacks for user created sort functions via usort (Closes #61) -[NEW] New addFields replaces duplicate code loops with addField -[FIXED] Bug in userSort function - -[2007-8-07: REVISION 0000] -[FIXED] UTF-8 dates - -[2007-8-08: REVISION 0000] -[FIXED] tplTagLinks parameter (References #56) -[FIXED] Removed non-used parameter from combineTags -[FIXED] Major bug in addFields when a delimiter is used -[NEW] Added &tagCallback parameter to allow the user to modify the tag source and how tags are parsed (Closes #68) -[FIXED] Another major bug in addFields when a delimiter is not used -[FIXED] Parsed filters glitch where fields were not being added properly -[NEW] Reflect reset placeholder (prefixed by ID) provides a url which will show all articles (Closes #65) - -[2007-8-09: REVISION 0000] -[NEW] Reflect now uses ditto->template->replace instead of str_replace -[NEW] Reflect count placeholder shows the number of documents at that level (Closes #69) - -[2007-8-15: REVISION 0000] -[NEW] dateFilterDefault allows you to set a default date filter based on the current date -[CHANGED] Version number to 2.1.BETA2 - -[2007-8-20: REVISION 0000] -[FIXED] RSS category tag bug -[FIXED] Security Issue (Closes #72) -[FIXED] buildURL with xHTML urls - -[2007-11-12: REVISION 0000] -[NEW] Added filters 9-11 contributed by highlander (Closes #78) -[FIXED] Updated filter documentation -[FIXED] dateFilter and 00:00 on first day of month (Closes #75) -[CHANGED] Version number to 2.1b3 - -[2008-1-20: REVISION 0000] -[FIXED] atom_lastmodified placeholder (Closes #87) -[NEW] month_numeric placeholder in the dateFilter extender (Closes #88) - -[2008-2-01: REVISION 0000] -[NEW] Server offset now applied to dateSource both in display and filtering (Closes #90) -[FIXED] Updated documentation for depth - -[2008-2-09: REVISION 0000] -[CHANGED] Version number to 2.1.0 \ No newline at end of file diff --git a/assets/snippets/ditto/classes/debug.class.inc.php b/assets/snippets/ditto/classes/debug.class.inc.php deleted file mode 100644 index 66324f37fe..0000000000 --- a/assets/snippets/ditto/classes/debug.class.inc.php +++ /dev/null @@ -1,153 +0,0 @@ -config['base_path'],$modx->config['site_url'],$ditto_base); - return $this->makeLink($ditto_lang['debug'],$ditto_lang['open_dbg_console'], $ditto_lang['save_dbg_console'],$base_url.'debug/','ditto_'.$dittoID); - } - // --------------------------------------------------- - // Function: render_popup - // Render the contents of the debug console - // --------------------------------------------------- - function render_popup($ditto,$ditto_base,$ditto_version, $ditto_params, $IDs, $fields, $summarize, $templates, $orderBy, $start, $stop, $total,$filter,$resource) { - global $ditto_lang,$modx; - $tabs = array(); - $fields = (count($fields['db']) > 0 && count($fields['tv']) > 0) ? array_merge_recursive($ditto->fields,array('retrieved'=>$fields)) : $ditto->fields; - - $tabs[$ditto_lang['info']] = $this->prepareBasicInfo($ditto,$ditto_version, $IDs, $summarize, $orderBy, $start, $stop, $total); - $tabs[$ditto_lang['params']] = $this->makeParamTable($ditto_params,$ditto_lang['params']); - $tabs[$ditto_lang['fields']] = "
      ".$this->array2table($this->cleanArray($fields), true, true).'
      '; - $tabs[$ditto_lang['templates']] = $this->makeParamTable($this->prepareTemplates($templates),$ditto_lang['templates']); - - if ($filter !== false) { - $tabs[$ditto_lang['filters']] = $this->prepareFilters($this->cleanArray($filter)); - } - - if ($ditto->prefetch == true) { - $tabs[$ditto_lang['prefetch_data']] = $this->preparePrefetch($ditto->prefetch); - } - if (count($resource) > 0 && $resource) { - $tabs[$ditto_lang['retrieved_data']] = $this->prepareDocumentInfo($resource); - } - $base_url = str_replace($modx->config['base_path'],$modx->config['site_url'],$ditto_base); - $generatedOn = "\r\n\r\n".''; - return $this->render($tabs,$ditto_lang['debug'],$base_url).$generatedOn; - } - - // --------------------------------------------------- - // Function: preparePrefetch - // Create the content of the Prefetch tab - // --------------------------------------------------- - function preparePrefetch($prefetch) { - global $ditto_lang; - $ditto_IDs = array(); - if (count($prefetch['dbg_IDs_pre']) > 0) { - $ditto_IDs[$ditto_lang['ditto_IDs_all'].' ('.count($prefetch['dbg_IDs_pre']).')'] = implode(',',$prefetch['dbg_IDs_pre']); - } - if (count($prefetch['dbg_IDs_post']) > 0) { - $ditto_IDs[$ditto_lang['ditto_IDs_selected'].' ('.count($prefetch['dbg_IDs_post']).')'] = implode(', ',$prefetch['dbg_IDs_post']); - } else { - $ditto_IDs[$ditto_lang['ditto_IDs_selected'].' (0)'] = strip_tags($ditto_lang['no_documents']); - } - $out = $this->array2table(array($ditto_lang['prefetch_data']=>$ditto_IDs),true,true); - return $out.$this->prepareDocumentInfo($prefetch['dbg_resource']); - } - - // --------------------------------------------------- - // Function: prepareFilters - // Create the content of the Filters tab - // --------------------------------------------------- - function prepareFilters($filter) { - $output = ''; - foreach ($filter as $name=>$value) { - if ($name == 'custom') { - foreach ($value as $name=>$value) { - $output .= $this->array2table(array($name=>$value), true, true); - } - } else { - $output .= $this->array2table(array($name=>$value), true, true); - } - } - return $output; - } - - // --------------------------------------------------- - // Function: prepareDocumentInfo - // Create the output for the Document Info tab - // --------------------------------------------------- - function prepareDocumentInfo($resource) { - global $ditto_lang; - $output = ''; - if (count($resource) > 0) { - foreach ($resource as $item) { - $header = str_replace(array('[+pagetitle+]','[+id+]'),array($item['pagetitle'],$item['id']),$this->templates['item']); - $output .= $this->makeParamTable($item,$header,true,true,true,'resource'); - } - } - return $output; - } - - // --------------------------------------------------- - // Function: prepareBasicInfo - // Create the outut for the Info ta - // --------------------------------------------------- - function prepareBasicInfo($ditto,$ditto_version, $IDs, $summarize, $orderBy, $start, $stop, $total) { - global $ditto_lang,$dittoID,$modx; - $items[$ditto_lang['version']] = $ditto_version; - $items[$ditto_lang['summarize']] = $summarize; - $items[$ditto_lang['total']] = $total; - $items[$ditto_lang['start']] = $start; - $items[$ditto_lang['stop']] = $stop; - $items[$ditto_lang['ditto_IDs']] = (count($IDs) > 0) ? wordwrap(implode(', ',$IDs),100, '
      ') : $ditto_lang['none']; - $output = ''; - if (is_array($orderBy['parsed']) && count($orderBy['parsed']) > 0) { - $sort = array(); - foreach ($orderBy['parsed'] as $key=>$value) { - $sort[$key] = array($ditto_lang['sortBy']=>$value[0],$ditto_lang['sortDir']=>$value[1]); - } - $output = $this->array2table($this->cleanArray($sort), true, true); - } - return $this->makeParamTable($items,$ditto_lang['basic_info'],false,false).$output; - } - - // --------------------------------------------------- - // Function: prepareTemplates - // Create the output for the Templates tab - // --------------------------------------------------- - function prepareTemplates($templates) { - global $ditto_lang; - $displayTPLs = array(); - foreach ($templates as $name=>$value) { - switch ($name) { - case 'base': - $displayName = 'tpl'; - break; - - case 'default': - $displayName = 'tpl'; - break; - - default: - $displayName = 'tpl'.strtoupper($name{0}).substr($name,1); - break; - } - $displayTPLs[$displayName] = $value; - } - return $displayTPLs; - } - -} diff --git a/assets/snippets/ditto/classes/ditto.class.inc.php b/assets/snippets/ditto/classes/ditto.class.inc.php deleted file mode 100644 index 46ab7b1fab..0000000000 --- a/assets/snippets/ditto/classes/ditto.class.inc.php +++ /dev/null @@ -1,1121 +0,0 @@ -format = $format; - $GLOBALS['ditto_lang'] = $language; - $this->prefetch = false; - $this->advSort = false; - $this->sqlOrderBy = array(); - $this->customReset = array(); - $this->constantFields[] = array('db','tv'); - $this->constantFields['db'] = explode(',', 'id,type,contentType,pagetitle,longtitle,description,alias,link_attributes,published,pub_date,unpub_date,parent,isfolder,introtext,content,richtext,template,menuindex,searchable,cacheable,createdby,createdon,editedby,editedon,deleted,deletedon,deletedby,publishedon,publishedby,menutitle,donthit,privateweb,privatemgr,content_dispo,hidemenu'); - $this->constantFields['tv'] = $this->getTVList(); - $GLOBALS['ditto_constantFields'] = $this->constantFields; - $this->fields = array('display'=>array(),'backend'=>array('tv'=>array(),'db'=>array('id', 'published'))); - $this->sortOrder = false; - $this->customPlaceholdersMap = array(); - $this->template = new template(); - - if (!is_null($debug)) $this->debug = new debug($debug); - } - - // --------------------------------------------------- - // Function: getTVList - // Get a list of all available TVs - // --------------------------------------------------- - - function getTVList() { - global $modx; - // TODO: make it so that it only pulls those that apply to the current template - $tvs = $modx->db->select('name', '[+prefix+]site_tmplvars'); - $dbfields = $modx->db->getColumn('name', $tvs); - return $dbfields; - } - - // --------------------------------------------------- - // Function: addField - // Add a field to the internal field detection system - // --------------------------------------------------- - - function addField($name,$location,$type=false) { - if ($type === false) { - $type = $this->getDocVarType($name); - } - if ($type == 'tv:prefix') { - $type = 'tv'; - $name = substr($name, 2); - } - if ($location == "*") { - $this->fields["backend"][$type][] = $name; - $this->fields["display"][$type][] = $name; - } else { - $this->fields[$location][$type][] = $name; - } - } - - // --------------------------------------------------- - // Function: addFields - // Add a field to the internal field detection system - // from an array or delimited string - // --------------------------------------------------- - - function addFields($fields,$location='*',$delimiter=',',$callback=false) { - if (empty($fields)) return false; - if (!is_array($fields)) { - if (strpos($fields,$delimiter)!==false) $fields = explode($delimiter,$fields); - else $fields = array($fields); - } - foreach ($fields as $field) { - if (is_array($field)) { - $type = isset($field[2]) ? $field[2] : false; - $name = $field[0]; - } else { - $name = $field; - $type = false; - } - - $this->addField($name,$location,$type); - if ($callback !== false) call_user_func_array($callback, array($name)); - } - return true; - } - - // --------------------------------------------------- - // Function: removeField - // Remove a field to the internal field detection system - // --------------------------------------------------- - - function removeField($name,$location,$type) { - $key = array_search ($name, $this->fields[$location][$type]); - if ($key !== false) unset($this->fields[$location][$type][$key]); - } - - // --------------------------------------------------- - // Function: setDisplayFields - // Move the detected fields into the Ditto fields array - // --------------------------------------------------- - - function setDisplayFields($fields,$hiddenFields) { - $this->fields['display'] = $fields; - if ($hiddenFields) $this->addFields($hiddenFields,'display'); - } - - // --------------------------------------------------- - // Function: getDocVarType - // Determine if the provided field is a tv, a database field, or something else - // --------------------------------------------------- - - function getDocVarType($field) { - global $ditto_constantFields; - - $tvFields = $ditto_constantFields['tv']; - $dbFields = $ditto_constantFields['db']; - - if(in_array($field, $tvFields)) return 'tv'; - elseif(in_array(substr($field,2), $tvFields)) return 'tv:prefix'; // TODO: Remove TV Prefix support - elseif(in_array($field, $dbFields)) return 'db'; - else return 'unknown'; - } - - // --------------------------------------------------- - // Function: parseOrderBy - // Parse out orderBy parameter string - // --------------------------------------------------- - - function parseOrderBy($orderBy,$randomize) { - if ($randomize != 0) {return false;} - $orderBy['sql'] = array(); - - foreach ($orderBy['parsed'] as $item) { - $this->addFields($item[0],'backend'); - $this->checkAdvSort($item[0],$item[1]); - } - - foreach ($orderBy['custom'] as $item) { - $this->addFields($item[0],'backend'); - $this->checkAdvSort($item[0]); - } - - if (!is_null($orderBy['unparsed'])) { - $inputs = array_filter(array_map('trim', explode(',', $orderBy['unparsed']))); - foreach ($inputs as $input) { - if(strpos($input,' ')===false) $input .= ' ASC'; - list($sortBy,$sortDir) = explode(' ',$input); - $sortBy = $this->checkAdvSort($sortBy,$sortDir); - $this->addField($sortBy,'backend'); - $orderBy['parsed'][] = array($sortBy,strtoupper($sortDir)); - } - } - if(!isset($orderBy['parsed'][0])) $orderBy['parsed'][0] = array('id','ASC'); - $orderBy['sql'] = join(', ',$this->sqlOrderBy); - unset($orderBy['unparsed']); - return $orderBy; - } - - // --------------------------------------------------- - // Function: checkAdvSort - // Check the advSortString - // --------------------------------------------------- - function checkAdvSort($sortBy,$sortDir='asc') { - $advSort = array ('pub_date','unpub_date','editedon','deletedon','publishedon'); - $type = $this->getDocVarType($sortBy); - switch($type) { - case 'tv:prefix': - $sortBy = substr($sortBy, 2); - $this->advSort = true; - break; - case 'tv': - $this->advSort = true; - break; - case 'db': - if (in_array($sortBy, $advSort)) { - $this->advSort = true; - $this->customReset[] = $sortBy; - } else { - $this->sqlOrderBy[] = 'sc.'.$sortBy.' '.$sortDir; - } - break; - } - return $sortBy; - } - - // --------------------------------------------------- - // Function: parseFilters - // Split up the filters into an array and add the required fields to the fields array - // --------------------------------------------------- - - function parseFilters($filter=false,$cFilters=false,$pFilters = false,$globalDelimiter,$localDelimiter) { - $parsedFilters = array('basic'=>array(),'custom'=>array()); - $filters = explode($globalDelimiter, $filter); - if (!empty($filters)) { - foreach ($filters AS $filter) { - if (!empty($filter)) { - $filterArray = explode($localDelimiter, $filter); - $source = $filterArray[0]; - $this->addField($source,'backend'); - $value = $filterArray[1]; - $mode = (isset ($filterArray[2])) ? $filterArray[2] : 1; - $parsedFilters['basic'][] = array('source'=>$source,'value'=>$value,'mode'=>$mode); - } - } - } - if ($cFilters) { - foreach ($cFilters as $name=>$value) { - if (!empty($name) && !empty($value)) { - $parsedFilters['custom'][$name] = $value[1]; - $this->addFields($value[0],'backend'); - } - } // TODO: Replace addField with addFields with callback - } - if($pFilters) { - foreach ($pFilters as $filter) { - foreach ($filter as $name=>$value) { - $parsedFilters['basic'][] = $value; - $this->addFields($value['source'],'backend'); - } - } // TODO: Replace addField with addFields with callback - } - return $parsedFilters; - } - - // --------------------------------------------------- - // Function: render - // Render the document output - // --------------------------------------------------- - - function render($doc, $template, $removeChunk,$dateSource,$dateFormat,$customPlaceholders=array(),$phx=1,$x=0,$stop=1) { - global $modx,$ditto_lang; - - if (!is_array($doc)) return $ditto_lang['resource_array_error']; - - $ph = $doc; - $contentVars = array(); - $exFields =& $this->fields['display']['custom']; - - foreach ($doc as $name=>$value) { - $contentVars["[*{$name}*]"] = $value; - } - - if (in_array('author',$exFields)) $ph['author'] = $this->getAuthor($doc['createdby']); - if (in_array('title',$exFields)) $ph['title'] = $doc['pagetitle']; - if (in_array('ditto_iteration',$exFields)) $ph['ditto_iteration'] = $x; - - //Added by Andchir - $r_start = isset($_GET['start']) ? $_GET['start'] : 0; - $ph['ditto_index'] = $r_start+$x+1; - - //Added by Dmi3yy placeholder ditto_class - $class = array(); - if($x % 2 == 0) $class[] = 'even'; - else $class[] = 'odd'; - - if ($x==0) $class[] = 'first'; - if ($x==($stop -1)) $class[] = 'last'; - if ($doc['id'] == $modx->documentIdentifier) $class[] = 'current'; - $ph['ditto_class'] = join(' ', $class); - - // set url placeholder - if (in_array('url',$exFields)) { - if($doc['id']==$modx->config['site_start']) $ph['url'] = $modx->config['site_url']; - else $ph['url'] = $modx->makeURL($doc['id'],'','','full'); - } - - if (in_array('date',$exFields)) { - $timestamp = ($doc[$dateSource] != '0') ? $doc[$dateSource] : $doc['createdon']; - if (is_array($timestamp)) { - if(!$this->isNum($timestamp[1])) $timestamp[1] = strtotime($timestamp[1]); - $timestamp = $timestamp[1] + $timestamp[0]; - } - $ph['date'] = strftime($dateFormat,$timestamp); - } - - if (in_array('content',$this->fields['display']['db']) && $this->format != 'html') { - $ph['content'] = $this->relToAbs($doc['content'], $modx->config['site_url']); - } - - if (in_array('introtext',$this->fields['display']['db']) && $this->format != 'html') { - $ph['introtext'] = $this->relToAbs($doc['introtext'], $modx->config['site_url']); - } - - // set custom placeholder - foreach ($customPlaceholders as $name=>$value) { - if ($name != '*') { - $ph[$name] = call_user_func($value[1],$doc); - unset($customPlaceholders[$name]); - } - } - - foreach ($customPlaceholders as $name=>$value) { - $ph = call_user_func($value,$ph); - } - - if ($phx) $output = $this->parseModifiers($template,$ph,$contentVars); - else { - $output = $this->template->replace($ph,$template); - $output = $this->template->replace($contentVars,$output); - } - - if ($removeChunk) { - foreach ($removeChunk as $chunk) { - $output = str_replace('{{'.$chunk.'}}','',$output); - $output = str_replace($modx->getChunk($chunk),'',$output); - // remove chunk that is not wanted - } - } - return $output; - } - - function parseModifiers($tpl,$ph,$contentVars){ - global $modx; - if ($modx->config['enable_filter']) { - $content = $this->parseDocumentSource($tpl,$ph); - } - else { - foreach($ph as $key=>$content) { - $ph[$key] = str_replace( array_keys($contentVars), array_values($contentVars), $content ); - } - $phx = new prePHx($tpl); - $phx->setPlaceholders($ph); - $content = $phx->output(); - } - return $content; - } - - function parseDocumentSource($content='',$ph) - { - global $modx; - - if(strpos($content,'[')===false && strpos($content,'{')===false) return $content; - - $loopLimit = @ $modx->maxParserPasses ?: 10; - $bt=''; - $i=0; - while($bt!==$content) - { - $bt = $content; - if(strpos($content,'[+')!==false) $content = $modx->parseText($content,$ph); - if(strpos($content,'[+')!==false) continue; - - if(strpos($content,'[*')!==false && $modx->documentIdentifier) - $content = $modx->mergeDocumentContent($content); - if(strpos($content,'[+')!==false && $content!==$bt) continue; - if(strpos($content,'[(')!==false) $content = $modx->mergeSettingsContent($content); - if(strpos($content,'[+')!==false && $content!==$bt) continue; - if(strpos($content,'{{')!==false) $content = $modx->mergeChunkContent($content); - if(strpos($content,'[+')!==false && $content!==$bt) continue; - if(strpos($content,'[!')!==false) $content = str_replace(array('[!','!]'),array('[[',']]'),$content); - if(strpos($content,'[[')!==false) $content = $modx->evalSnippets($content); - - if($content===$bt) break; - if($loopLimit < $i) break; - $i++; - } - return $content; - } - - // --------------------------------------------------- - // Function: parseFields - // Find the fields that are contained in the custom placeholders or those that are needed in other functions - // --------------------------------------------------- - - function parseFields($placeholders,$seeThruUnpub,$dateSource,$randomize) { - $this->parseCustomPlaceholders($placeholders); - $this->parseDBFields($seeThruUnpub); - if ($randomize != 0) { - $this->addField($randomize,'backend'); - } - $this->addField('id','display','db'); - $this->addField('pagetitle','display','db'); - $this->addField('parent','display','db'); - $checkOptions = array('createdon','pub_date','unpub_date','editedon','deletedon','publishedon'); - if (in_array($dateSource,$checkOptions)) { - $this->addField($dateSource,'display'); - } - if (in_array('date',$this->fields['display']['custom'])) { - $this->addField($dateSource,'display'); - } - $this->fields = $this->arrayUnique($this->fields); - } - - - // --------------------------------------------------- - // Function: arrayUnique - // Make fields array unique - // --------------------------------------------------- - - function arrayUnique($array) { - foreach($array as $u => $a) { - foreach ($a as $n => $b) { - $array[$u][$n] = array_unique($b); - } - } - return $array; - } - - // --------------------------------------------------- - // Function: parseCustomPlaceholders - // Parse the required fields out of the custom placeholders - // --------------------------------------------------- - - function parseCustomPlaceholders($placeholders) { - foreach ($placeholders as $name=>$value) { - $this->addField($name,'display','custom'); - $this->removeField($name,'display','unknown'); - $source = $value[0]; - - if(is_array($source)) { - if(strpos($source[0],',')!==false){ - $fields = array_filter(array_map('trim', explode(',', $source[0]))); - foreach ($fields as $field) { - $this->addField($field,$source[1]); - $this->customPlaceholdersMap[$name] = $field; - } - } else { - $this->addField($source[0],$source[1]); - $this->customPlaceholdersMap[$name] = $source[0]; - } // TODO: Replace addField with addFields with callback - } elseif(is_array($value)) { - $fields = array_filter(array_map('trim', explode(',', $source))); - foreach ($fields as $field) { - $this->addField($field,'display'); - $this->customPlaceholdersMap[$name] = $field; - } - } - } - } - - // --------------------------------------------------- - // Function: parseDBFields - // Parse out the fields required for each state - // --------------------------------------------------- - - function parseDBFields($seeThruUnpub) { - if (!$seeThruUnpub) { - $this->addField('parent','backend','db'); - } - - if (in_array('author',$this->fields['display']['custom'])) { - $this->fields['display']['db'][] = 'createdby'; - } - - if (count($this->fields['display']['tv']) >= 0) { - $this->addField('published','display','db'); - } - } - - // --------------------------------------------------- - // Function: getAuthor - // Get the author name, or if not available the username - // --------------------------------------------------- - - public static function getAuthor($createdby) { - global $modx; - - $user = false; - if ($createdby > 0) { - $user = $modx->getUserInfo($createdby); - } else { - $user = $modx->getWebUserInfo(abs($createdby)); - } - if ($user === false) { - // get admin user name - $user = $modx->getUserInfo(1); - } - return ($user['fullname'] != '') ? $user['fullname'] : $user['username']; - } - - // --------------------------------------------------- - // Function: customSort - // Sort resource array if advanced sorting is needed - // --------------------------------------------------- - - function customSort($data, $fields, $order) { - // Covert $fields string to array - // user contributed - $sortfields = array_filter(array_map('trim', explode(',', $fields))); - - $code = ''; - foreach($sortfields as $field) { - $code .= sprintf('$retval = strnatcmp($a["%s"], $b["%s"]); if($retval) return $retval; ',$field,$field); - } - $code .= 'return $retval;'; - - $params = ($order == 'ASC') ? '$a,$b' : '$b,$a'; - uasort($data, create_function($params, $code)); - return $data; - } - - // --------------------------------------------------- - // Function: userSort - // Sort the resource array by a user defined function - // --------------------------------------------------- - function userSort($resource,$sort) { - foreach ($sort['custom'] as $item) { - usort($resource,$item[1]); - } - return $resource; - } - - // --------------------------------------------------- - // Function: multiSort - // Sort the resource array by multiple fields - // Rows->Columns portion by Jon L. -- intel352@gmail.com - // Link: http://de3.php.net/manual/en/function.array-multisort.php#73498 - // --------------------------------------------------- - - function multiSort($resource,$orderBy) { - $sort_arr = array(); - foreach($resource as $uniqid => $row){ - foreach($row as $key=>$value){ - $sort_arr[$key][$uniqid] = $value; - } - } - - $_ =''; - foreach ($orderBy['parsed'] as $sort) { - $_ .= sprintf('$sort_arr["%s"], SORT_%s, ', $sort[0], $sort[1]); - } - $array_multisort = sprintf('return array_multisort( %s $resource);', $_); - eval($array_multisort); - return $resource; - } - - // --------------------------------------------------- - // Function: determineIDs - // Get Document IDs for future use - // --------------------------------------------------- - - function determineIDs($IDs, $IDType, $TVs, $orderBy, $depth, $showPublishedOnly, $seeThruUnpub, $hideFolders, $hidePrivate, $showInMenuOnly, $myWhere, $dateSource, $limit, $summarize, $filter, $paginate, $randomize) { - global $modx; - if (($summarize == 0 && $summarize != 'all') || $IDs=='') { - return array(); - } - - // Get starting IDs; - switch($IDType) { - case 'parents': - $IDs = explode(',',$IDs); - $documentIDs = $this->getChildIDs($IDs, $depth); - break; - case 'documents': - if(!preg_match('@^[0-9, ]*$@',$IDs)) exit(sprintf('Illegal value of &documents: %s', $IDs)); - $documentIDs = explode(',',$IDs); - break; - } - - if ($this->advSort == false && $hideFolders==0 && $showInMenuOnly==0 && $myWhere == '' && $filter == false && $hidePrivate == 1) { - $this->prefetch = false; - $documents = $this->getDocumentsIDs($documentIDs, $showPublishedOnly); - $documentIDs = array(); - if ($documents) { - foreach ($documents as $null=>$doc) { - $documentIDs[] = $doc['id']; - } - } - return $documentIDs; - } else { - $this->prefetch = true; - } - - // Create where clause - $where = array (); - if ($myWhere != '') { - $where[] = $myWhere; - } - if ($hideFolders) { - $where[] = 'isfolder = 0'; - } - if ($showInMenuOnly) { - $where[] = 'hidemenu = 0'; - } - $where = join(' AND ', $where); - $limit = ($limit == 0) ? '' : $limit; - // set limit - - $customReset = $this->customReset; - if ($this->debug) {$this->addField('pagetitle','backend','db');} - - if (count($customReset) > 0) {$this->addField('createdon','backend','db');} - $resource = $this->getDocuments($documentIDs,$this->fields['backend']['db'],$TVs,$orderBy,$showPublishedOnly,0,$hidePrivate,$where,$limit,$randomize,$dateSource); - -// EPO - End of change (then see line 692 - if ($limit) array_slice($resource, 0, $limit); ) - - if ($resource !== false) { - $resource = array_values($resource); - // remove #'s from keys - $recordCount = count($resource); - // count number of records - - if (!$seeThruUnpub) { - $parentList = $this->getParentList(); - // get parent list - } - for ($i = 0; $i < $recordCount; $i++) { - if (!$seeThruUnpub) { - $published = $parentList[$resource[$i]['parent']]; - if ($published == '0') - unset ($resource[$i]); - } - if (count($customReset) > 0) { - foreach ($customReset as $field) { - if ($resource[$i][$field] === '0') { - $resource[$i][$field] = $resource[$i]['createdon']; - } - } - } - - } - if ($this->debug) { - $dbg_resource = $resource; - } - if ($filter != false) { - $filterObj = new filter(); - $resource = $filterObj->execute($resource, $filter); - } - if (count($resource) < 1) return array(); - if ($this->advSort == true && $randomize==0) { - $resource = $this->multiSort($resource,$orderBy); - } - if (count($orderBy['custom']) > 0) { - $resource = $this->userSort($resource,$orderBy); - } - - //intersel - see above in order to limit the array to $limit. - if ($limit) $resource=array_slice($resource, 0, $limit); - - $fields = (array_intersect($this->fields['backend'],$this->fields['display'])); - $readyFields = array(); - foreach ($fields as $field) { - $readyFields = array_merge($readyFields,$field); - } - $processedIDs = array (); - $keep = array(); - foreach ($resource as $key => $value) { - $processedIDs[] = $value['id']; - $iKey = '#'.$value['id']; - foreach ($value as $key=>$v) { - if (in_array($key,$readyFields)) { - $keep[$iKey][$key] = $v; - } - if ($this->getDocVarType($key) == 'tv:prefix') { - if (in_array(substr($key,2),$readyFields)) { - $keep[$iKey][$key] = $v; - } - } - } - } - - $this->prefetch = array('resource'=>$keep,'fields'=>$fields); - if ($this->debug) { - $this->prefetch['dbg_resource'] = $dbg_resource; - $this->prefetch['dbg_IDs_pre'] = $documentIDs; - $this->prefetch['dbg_IDs_post'] = $processedIDs; - } - if (count($processedIDs) > 0) { - if ($randomize != 0) {shuffle($processedIDs);} - $this->sortOrder = array_flip($processedIDs); - // saves the order of the documents for use later - } - - return $processedIDs; - } else { - return array(); - } - } - - // --------------------------------------------------- - // Function: weightedRandom - // Execute a random order sort - // --------------------------------------------------- - - function weightedRandom($resource,$field,$show) { - $type = $this->getDocVarType($field); - if ($type == 'unknown') { - return $resource; - // handle vad field passed - } - $random = new random(); - foreach ($resource as $document) { - $doc = $document; - $random->add($doc,abs(intval($document[$field]))); - } - $resource = $random->select_weighted_unique($show); - shuffle($resource); - return $resource; - } - - - // --------------------------------------------------- - // Function: getParentList - // Get a list of all available parents - // --------------------------------------------------- - - function getParentList() { - global $modx; - $kids = array(); - foreach ($modx->documentMap as $null => $document) { - foreach ($document as $parent => $id) { - $kids[$parent][] = $id; - } - } - $parents = array(); - foreach ($kids as $item => $value) { - if ($item != 0) { - $pInfo = $modx->getPageInfo($item,0,'published'); - } else { - $pInfo['published'] = '1'; - } - $parents[$item] = $pInfo['published']; - } - return $parents; - } - - // --------------------------------------------------- - // Function: appendTV - // Apeend a TV to the documents array - // --------------------------------------------------- - - function appendTV($tvname='',$docIDs){ - global $modx; - - $baspath= MODX_MANAGER_PATH.'/includes'; - include_once $baspath . '/tmplvars.format.inc.php'; - include_once $baspath . '/tmplvars.commands.inc.php'; - - $fields = 'stv.name,stc.tmplvarid,stc.contentid,stv.type,stv.display,stv.display_params,stc.value'; - $from[] = '[+prefix+]site_tmplvar_contentvalues AS stc'; - $from[] = 'LEFT JOIN [+prefix+]site_tmplvars AS stv ON stv.id=stc.tmplvarid'; - $where = sprintf("stv.name='%s' AND stc.contentid IN (%s)", $modx->db->escape($tvname), join($docIDs,',')); - $rs= $modx->db->select($fields, $from, $where, 'stc.contentid ASC'); - - $docs = array(); - while ($row = $modx->db->getRow($rs)) { - $docs["#".$row['contentid']][$row['name']] = getTVDisplayFormat($row['name'], $row['value'], $row['display'], $row['display_params'], $row['type'],$row['contentid']); - $docs["#".$row['contentid']]["tv".$row['name']] = $docs["#".$row['contentid']][$row['name']]; - } - if (count($docs) != count($docIDs)) { - $rs = $modx->db->select("name,type,display,display_params,default_text", '[+prefix+]site_tmplvars', "name='{$tvname}'", '', 1); - $row = $modx->db->getRow($rs); - if (strtoupper($row['default_text']) == '@INHERIT') { - foreach ($docIDs as $id) { - $defaultOutput = getTVDisplayFormat($row['name'], $row['default_text'], $row['display'], $row['display_params'], $row['type'], $id); - if (!isset($resourceArray["#".$id])) { - $docs["#$id"][$tvname] = $defaultOutput; - $docs["#$id"]["tv".$tvname] = $docs["#$id"][$tvname]; - } - } - } else { - $row['contentid'] = isset($row['contentid']) ? $row['contentid'] : ''; - $defaultOutput = getTVDisplayFormat($row['name'], $row['default_text'], $row['display'], $row['display_params'], $row['type'],$row['contentid']); - foreach ($docIDs as $id) { - if (!isset($docs["#".$id])) { - $docs["#$id"][$tvname] = $defaultOutput; - $docs["#$id"]["tv".$tvname] = $docs["#$id"][$tvname]; - } - } - } - } - return $docs; - } - - // --------------------------------------------------- - // Function: getChildIDs - // Get the IDs ready to be processed - - // --------------------------------------------------- - - function getChildIDs($IDs, $depth) { - global $modx; - $depth = intval($depth); - $kids = array(); - $docIDs = array(); - // RedCat - foreach($IDs as $id) { - $kids = $modx->getChildIds($id,$depth); - $docIDs = array_merge($docIDs,$kids); - } - return array_unique($docIDs); - } - - // --------------------------------------------------- - // Function: getDocuments - // Get documents and append TVs + Prefetch Data, and sort - // --------------------------------------------------- - - function getDocuments($ids= array (), $fields, $TVs, $orderBy, $published= 1, $deleted= 0, $pubOnly= 1, $where= '', $limit='',$randomize=0,$dateSource=false) { - global $modx; - - if (count($ids) == 0) return false; - sort($ids); - // modify field names to use sc. table reference - $fields= 'sc.'.join(',sc.',$fields); - - if ($randomize != 0) $sort = 'RAND()'; - else $sort= $orderBy['sql']; - - //Added by Andchir (http://modx-shopkeeper.ru/) - if(substr($where, 0, 5)=='@SQL:'){ - if($where) $where = substr(str_replace('@eq','=',$where), 5); - $left_join_tvc = 'LEFT JOIN [+prefx+]site_tmplvar_contentvalues AS tvc ON sc.id = tvc.contentid'; - } else { - if($where) $where = 'AND sc.' . join(' AND sc.', array_filter(array_map('trim', explode('AND', $where)))); - $left_join_tvc = ''; - } - - if ($pubOnly) { - if($modx->isFrontend()) $access = 'sc.privateweb=0'; - elseif($_SESSION['mgrRole']!=1) $access = 'sc.privatemgr=0'; - else $access = ''; - - if($access) { - $docgrp=$modx->getUserDocGroups(); - if($docgrp) { - $access .= sprintf(' OR dg.document_group IN (%s)', join(',', $docgrp)); - $access = "({$access})"; - } - } - } - - $published = ($published) ? 'AND sc.published=1' : ''; - - $from = array(); - $from[] = "[+prefix+]site_content sc {$left_join_tvc}"; - $from[] = 'LEFT JOIN [+prefix+]document_groups dg on dg.document=sc.id'; - $sqlWhere = array(); - $sqlWhere[] = sprintf('sc.id IN (%s)', join(',', $ids)); - $sqlWhere[] = $published; - $sqlWhere[] = "AND sc.deleted={$deleted}"; - $sqlWhere[] = $where; - if($pubOnly && $access) $sqlWhere[] = "AND {$access}"; - $sqlWhere[] = 'GROUP BY sc.id'; - $rs= $modx->db->select("DISTINCT {$fields}",$from,$sqlWhere,$sort,$limit); - if(!$modx->db->getRecordCount($rs)) return false; - - $docs = array(); - $TVData = array(); - $TVIDs = array(); - while ($doc = $modx->db->getRow($rs)) { - if ($dateSource !== false) { - if(!$this->isNum($doc[$dateSource])) $doc[$dateSource] = strtotime($doc[$dateSource]); - if($modx->config['server_offset_time'] != 0) - $doc[$dateSource] += $modx->config['server_offset_time']; - } - - if ($this->prefetch && $this->sortOrder!==false) $doc['ditto_sort'] = $this->sortOrder[$doc['id']]; - - $k = '#'.$doc['id']; - if (!empty($this->prefetch['resource'])) { - $docs[$k] = array_merge($doc,$this->prefetch['resource'][$k]); - // merge the prefetch array and the normal array - } - else $docs[$k] = $doc; - - $TVIDs[] = $doc['id']; - } - - $TVs = array_unique($TVs); - if (!empty($TVs)) { - foreach($TVs as $tv){ - $TVData = array_merge_recursive($this->appendTV($tv,$TVIDs),$TVData); - } - } - - $docs = array_merge_recursive($docs,$TVData); - if ($this->prefetch == true && $this->sortOrder !== false) - $docs = $this->customSort($docs,'ditto_sort','ASC'); - - return $docs; - } - - // --------------------------------------------------- - // Function: getDocumentsLite - // Get an array of documents - // --------------------------------------------------- - - function getDocumentsIDs($ids= array (), $published= 1) { - global $modx; - if (empty($ids)) { - return false; - } else { - $ids = join(',',$ids); - $from[] = '[+prefix+]site_content sc'; - $from[] = 'LEFT JOIN [+prefix+]document_groups dg on dg.document=sc.id'; - $published = $published ? 'AND sc.published=1' : ''; - if($modx->isFrontend()) $access = 'sc.privateweb=0'; - elseif($_SESSION['mgrRole']!=1) $access = 'sc.privatemgr=0'; - else $access = ''; - - if($access) { - $docgrp=$modx->getUserDocGroups(); - if($docgrp) { - $access .= sprintf(' OR dg.document_group IN (%s)', join(',', $docgrp)); - $access = "({$access})"; - } - $access = "AND {$access}"; - } - - if($published) $where = sprintf('(sc.id IN (%s) AND sc.published=1 AND sc.deleted=0) %s GROUP BY sc.id', $ids, $access); - else $where = sprintf('(sc.id IN (%s) AND sc.deleted=0) %s GROUP BY sc.id', $ids, $access); - - $rs= $modx->db->select('DISTINCT sc.id', $from, $where); - $docs = $modx->db->makeArray($rs); - return $docs; - } - } - - // --------------------------------------------------- - // Function: cleanIDs - // Clean the IDs of any dangerous characters - // --------------------------------------------------- - - function cleanIDs($IDs) { - //Clean startID (all chars except commas and numbers are removed) - $IDs = trim($IDs,','); - $IDs = preg_replace('/,+/', ',', $IDs); - $IDs = str_replace(' ','',$IDs); - - return $IDs; - } - - // --------------------------------------------------- - // Function: buildURL - // Build a URL with regard to Ditto ID - // --------------------------------------------------- - - public static function buildURL($args,$id=false,$dittoIdentifier=false) { - global $modx, $dittoID; - $dittoID = ($dittoIdentifier !== false) ? $dittoIdentifier : $dittoID; - $query = array(); - foreach ($_GET as $param=>$value) { - if ($param != 'id' && $param != 'q') { - $clean_param = htmlspecialchars($param, ENT_QUOTES, $modx->config['modx_charset']); - if(is_array($value)) { - //$query[$param] = $value; - foreach($value as $key => $val) { - $query[$clean_param][htmlspecialchars($key, ENT_QUOTES)] = htmlspecialchars($val, ENT_QUOTES, $modx->config['modx_charset']); - } - }else{ - $query[$clean_param] = htmlspecialchars($value, ENT_QUOTES, $modx->config['modx_charset']); - } - } - } - if (!is_array($args)) { - $args = explode('&',$args); - foreach ($args as $arg) { - $arg = explode('=',$arg); - $query[$dittoID.$arg[0]] = rawurlencode(trim($arg[1])); - } - } else { - foreach ($args as $name=>$value) { - $query[$dittoID.$name] = rawurlencode(trim($value)); - } - } - $queryString = ''; - foreach ($query as $param=>$value) { - - //$queryString .= '&'.$param.'='.(is_array($value) ? join(',',$value) : $value); - if (!is_array($value)) { - if (!($modx->config['seostrict']=='1' && $param == $dittoID.'start' && !$value)) $queryString .= '&'.$param.'='.$value; - } - else { - foreach ($value as $key=>$val) { - $queryString .= '&'.$param.'['.$key.']='.$val; - } - } - } - $cID = ($id !== false) ? $id : $modx->documentObject['id']; - $url = $modx->makeURL(trim($cID), '', $queryString); - return ($modx->config['xhtml_urls']) ? $url : str_replace('&','&',$url); - } - - // --------------------------------------------------- - // Function: getParam - // Get a parameter or use the default language value - // --------------------------------------------------- - - function getParam($param,$langString){ - // get a parameter value and if it is not set get the default language string value - global $modx,$ditto_lang; - $output = ''; - if (substr($param,0,1)==='@') { - $output = $this->template->fetch($param); - } elseif(!empty($param)) { - $output = $modx->getChunk($param); - } else { - $output = $ditto_lang[$langString]; - } - if(trim($output)==='') $output = $param; - return $output; - } - - // --------------------------------------------------- - // Function: paginate - // Paginate the documents - // --------------------------------------------------- - - function paginate($start, $stop, $total, $summarize, $tplPaginateNext, $tplPaginatePrevious, $tplPaginateNextOff, $tplPaginatePreviousOff, $tplPaginatePage, $tplPaginateCurrentPage, $paginateAlwaysShowLinks, $paginateSplitterCharacter, $max_paginate, $max_previous) { - global $modx, $dittoID,$ditto_lang; - - if ($stop == 0 || $total == 0 || $summarize==0) { - return false; - } - $next = $start + $summarize; - $rNext = $this->template->replace(array('url'=>$this->buildURL("start=$next"),'lang:next'=>$ditto_lang['next']),$tplPaginateNext); - $previous = $start - $summarize; - $rPrevious = $this->template->replace(array('url'=>$this->buildURL("start=$previous"),'lang:previous'=>$ditto_lang['prev']),$tplPaginatePrevious); - $limten = $summarize + $start; - if ($paginateAlwaysShowLinks == 1) { - $previousplaceholder = $this->template->replace(array('lang:previous'=>$ditto_lang['prev']),$tplPaginatePreviousOff); - $nextplaceholder = $this->template->replace(array('lang:next'=>$ditto_lang['next']),$tplPaginateNextOff); - } else { - $previousplaceholder = ''; - $nextplaceholder = ''; - } - $split = ''; - if ($previous > -1 && $next < $total) - $split = $paginateSplitterCharacter; - if ($previous > -1) - $previousplaceholder = $rPrevious; - if ($next < $total) - $nextplaceholder = $rNext; - if ($start < $total) - $stop = $limten; - if ($limten > $total) { - $limiter = $total; - } else { - $limiter = $limten; - } - $totalpages = ceil($total / $summarize); - - $cur_x = floor($start / $summarize); - $min_x = $cur_x - $max_previous; - - if ($min_x < 0) $min_x = 0; - - $max_x = $min_x + $max_paginate - 1; - if ($max_x > $totalpages - 1) { - $max_x = $totalpages - 1; - $min_x = $max_x - $max_paginate + 1; - } - - $modx->setPlaceholder('dittoID', $dittoID); - $pages = ''; - for ($x = 0; $x <= $totalpages -1; $x++) { - $inc = $x * $summarize; - $display = $x +1; - - if (($x < $min_x) || ($x > $max_x)) continue; - - if ($inc != $start) { - $pages .= $this->template->replace(array('url'=>$this->buildURL("start=$inc"),'page'=>$display),$tplPaginatePage); - } else { - $modx->setPlaceholder($dittoID.'currentPage', $display); - $pages .= $this->template->replace(array('page'=>$display),$tplPaginateCurrentPage); - } - } - if ($totalpages>1){ - $modx->setPlaceholder($dittoID.'next', $nextplaceholder); - $modx->setPlaceholder($dittoID.'previous', $previousplaceholder); - $modx->setPlaceholder($dittoID.'pages', $pages); - }elseif($paginateAlwaysShowLinks == 1){ - $modx->setPlaceholder($dittoID.'next', $nextplaceholder); - $modx->setPlaceholder($dittoID.'previous', $previousplaceholder); - $modx->setPlaceholder($dittoID.'pages', $pages); - } - $modx->setPlaceholder($dittoID.'splitter', $split); - $modx->setPlaceholder($dittoID.'start', $start +1); - $modx->setPlaceholder($dittoID.'urlStart', $start); - $modx->setPlaceholder($dittoID.'stop', $limiter); - $modx->setPlaceholder($dittoID.'total', $total); - $modx->setPlaceholder($dittoID.'perPage', $summarize); - $modx->setPlaceholder($dittoID.'totalPages', $totalpages); - $modx->setPlaceholder($dittoID.'ditto_pagination_set', true); - } - - // --------------------------------------------------- - // Function: noResults - // Render the noResults output - // --------------------------------------------------- - function noResults($text,$paginate) { - global $modx, $dittoID; - $set = $modx->getPlaceholder($dittoID.'ditto_pagination_set'); - if ($paginate && $set !== true) { - $modx->setPlaceholder('dittoID', $dittoID); - $modx->setPlaceholder($dittoID.'next', ''); - $modx->setPlaceholder($dittoID.'previous', ''); - $modx->setPlaceholder($dittoID.'splitter', ''); - $modx->setPlaceholder($dittoID.'start', 0); - $modx->setPlaceholder($dittoID.'urlStart', '#start'); - $modx->setPlaceholder($dittoID.'stop', 0); - $modx->setPlaceholder($dittoID.'total', 0); - $modx->setPlaceholder($dittoID.'pages', ''); - $modx->setPlaceholder($dittoID.'perPage', 0); - $modx->setPlaceholder($dittoID.'totalPages', 0); - $modx->setPlaceholder($dittoID.'currentPage', 0); - } - return $text; - } - - // --------------------------------------------------- - // Function: relToAbs - // Convert relative urls to absolute URLs - // Based on script from http://wintermute.com.au/bits/2005-09/php-relative-absolute-links/ - // --------------------------------------------------- - function relToAbs($text, $base) { - return preg_replace('#(href|src)="([^:"]*)(?:")#','$1="'.$base.'$2"',$text); - } - - function isNum($str='') { - return preg_match('@^[1-9][0-9]*$@',$str); - } -} diff --git a/assets/snippets/ditto/classes/filter.class.inc.php b/assets/snippets/ditto/classes/filter.class.inc.php deleted file mode 100644 index aac86f1f94..0000000000 --- a/assets/snippets/ditto/classes/filter.class.inc.php +++ /dev/null @@ -1,148 +0,0 @@ -filterValue = $modx->safeEval(substr($current['value'],5)); - else $this->filterValue = $current['value']; - - if(strpos($this->filterValue,'[+') !== false) { - $this->filterValue = $modx->mergePlaceholderContent($this->filterValue); - } - - $this->array_key = $current['source']; - $this->filtertype = isset ($current['mode']) ? $current['mode'] : 1; - $resource = array_filter($resource, array($this, 'basicFilter')); - } - foreach ($filter['custom'] as $current) { - $resource = array_filter($resource, $current); - } - return $resource; - } - -// --------------------------------------------------- -// Function: basicFilter -// Do basic comparison filtering -// --------------------------------------------------- - - function basicFilter ($value) { - $unset = 1; - $key = $this->array_key; - switch ($this->filtertype) { - case '!=' : - case 1 : - if (!isset ($value[$key]) || $value[$key] != $this->filterValue) - $unset = 0; - break; - case '==' : - case 2 : - if ($value[$key] == $this->filterValue) - $unset = 0; - break; - case '<' : - case 3 : - if ($value[$key] < $this->filterValue) - $unset = 0; - break; - case '>' : - case 4 : - if ($value[$key] > $this->filterValue) - $unset = 0; - break; - case '<=' : - case 5 : - if (!($value[$key] <= $this->filterValue)) - $unset = 0; - break; - case '>=' : - case 6 : - if (!($value[$key] >= $this->filterValue)) - $unset = 0; - break; - - // Cases 7 & 8 created by MODX Testing Team Member ZAP - case 7 : - if (strpos($value[$key], $this->filterValue)===FALSE) - $unset = 0; - break; - case 8 : - if (strpos($value[$key], $this->filterValue)!==FALSE) - $unset = 0; - break; - - // Cases 9-11 created by highlander - case 9 : // case insenstive version of #7 - exclude records that do not contain the text of the criterion - if (strpos(strtolower($value[$key]), strtolower($this->filterValue))===FALSE) - $unset = 0; - break; - case 10 : // case insenstive version of #8 - exclude records that do contain the text of the criterion - if (strpos(strtolower($value[$key]), strtolower($this->filterValue))!==FALSE) - $unset = 0; - break; - case 11 : // checks leading character of the field - $firstChr = strtoupper(substr($value[$key], 0, 1)); - if ($firstChr!=$this->filterValue) - $unset = 0; - break; - //Added by Andchir (http://modx-shopkeeper.ru/) - case 12 : - $inputArr = explode('~',$value[$key]); - $check = 0; - foreach($inputArr as $val){ - if(empty($this->filterValue) || empty($val)) - return; - if (strpos($this->filterValue, $val)!==false) - $check++; - } - $unset = $check>0 ? 1 : 0; - unset($val,$check); - break; - //Added by Dmi3yy - case 13 : - $inputArr = explode('~',$value[$key]); - $check = 0; - foreach($inputArr as $val){ - if(empty($this->filterValue) || empty($val)) - return; - - $iA = explode('~',$this->filterValue); - foreach($iA as $ii){ - $iB = explode(',',$val); - foreach($iB as $iii){ - if (trim($ii) == trim($iii)) $check++; - } - } - } - $unset = $check>0 ? 1 : 0; - unset($val,$check); - break; - // Cases 21-22 created by Sergey Davydov 08.11.2011 - case 21 : // array version of #1 - exlude records that do not in miltiple values such a '65||115' and have output delimeted list by comma - if (!isset ($value[$key]) || !in_array($this->filterValue,explode(',',$value[$key]))) - $unset = 0; - break; - case 22 : // array version of #2 - exlude records that in miltiple values such a '65||115' and have output delimeted list by comma - if (in_array($this->filterValue,explode(',',$value[$key]))) - $unset = 0; - break; - } - return $unset; - } -} diff --git a/assets/snippets/ditto/classes/index.html b/assets/snippets/ditto/classes/index.html deleted file mode 100644 index cfb7d0fe18..0000000000 --- a/assets/snippets/ditto/classes/index.html +++ /dev/null @@ -1,2 +0,0 @@ -

      Unauthorized access

      -You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/ditto/classes/phx.parser.class.inc.php b/assets/snippets/ditto/classes/phx.parser.class.inc.php deleted file mode 100755 index fd951a8292..0000000000 --- a/assets/snippets/ditto/classes/phx.parser.class.inc.php +++ /dev/null @@ -1,414 +0,0 @@ -name = "PHx"; - $this->version = "2.1.2"; - $this->user["mgrid"] = intval(isset($_SESSION['mgrInternalKey']) ? $_SESSION['mgrInternalKey'] : 0); - $this->user["usrid"] = intval(isset($_SESSION['webInternalKey']) ? $_SESSION['webInternalKey'] : 0); - $this->user["id"] = ($this->user["usrid"] > 0 ) ? (-$this->user["usrid"]) : $this->user["mgrid"]; - $this->cache["cm"] = array(); - $this->cache["ui"] = array(); - $this->cache["mo"] = array(); - $this->safetags[0][0] = '~(?safetags[0][1] = '~(?<=[^\+\*\)\]]|^)\](?=[^\]]|$)~s'; - $this->safetags[1][0] = '&_PHX_INTERNAL_091_&'; - $this->safetags[1][1] = '&_PHX_INTERNAL_093_&'; - $this->safetags[2][0] = '['; - $this->safetags[2][1] = ']'; - $this->console = array(); - $this->debug = ($debug!='') ? $debug : 0; - $this->debugLog = false; - $this->curPass = 0; - $this->maxPasses = ($maxpass!='') ? $maxpass : 50; - $this->swapSnippetCache = array(); - $modx->setPlaceholder("phx", "&_PHX_INTERNAL_&"); - } - - // Plugin event hook for MODX - function OnParseDocument() { - global $modx; - // Get document output from MODX - $template = $modx->documentOutput; - // To the parse cave .. let's go! *insert batman tune here* - $template = $this->Parse($template); - // Set processed document output in MODX - $modx->documentOutput = $template; - } - - // Parser: Preparation, cleaning and checkup - function Parse($template='') { - global $modx; - // If we already reached max passes don't get at it again. - if ($this->curPass == $this->maxPasses) return $template; - // Set template pre-process hash - $st = md5($template); - // Replace non-call characters in the template: [, ] - $template = preg_replace($this->safetags[0],$this->safetags[1],$template); - // To the parse mobile.. let's go! *insert batman tune here* - $template = $this->ParseValues($template); - // clean up unused placeholders that have modifiers attached (MODX can't clean them) - preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s', $template, $matches); - if ($matches[0]) { - $template = str_replace($matches[0], '', $template); - $this->Log("Cleaning unsolved tags: \n" . implode("\n",$matches[2]) ); - } - // Restore non-call characters in the template: [, ] - $template = str_replace($this->safetags[1],$this->safetags[2],$template); - // Set template post-process hash - $et = md5($template); - // If template has changed, parse it once more... - if ($st!=$et) $template = $this->Parse($template); - // Write an event log if debugging is enabled and there is something to log - if ($this->debug && $this->debugLog) { - $modx->logEvent($this->curPass,1,$this->createEventLog(), $this->name.' '.$this->version); - $this->debugLog = false; - } - // Return the processed template - return $template; - } - - // Parser: Tag detection and replacements - function ParseValues($template='') { - global $modx; - - $this->curPass = $this->curPass + 1; - $st = md5($template); - - //$this->LogSource($template); - $this->LogPass(); - - // MODX Chunks - $this->Log("MODX Chunks -> Merging all chunk tags"); - $template = $modx->mergeChunkContent($template); - - // MODX Snippets - //if ( preg_match_all('~\[(\[|!)([^\[]*?)(!|\])\]~s',$template, $matches)) { - if ( preg_match_all('~\[(\[)([^\[]*?)(\])\]~s',$template, $matches)) { - $count = count($matches[0]); - $var_search = array(); - $var_replace = array(); - - // for each detected snippet - for($i=0; $i<$count; $i++) { - $snippet = $matches[2][$i]; // snippet call - $this->Log("MODX Snippet -> ".$snippet); - - // Let MODX evaluate snippet - $replace = $modx->evalSnippets("[[".$snippet."]]"); - $this->LogSnippet($replace); - - // Replace values - $var_search[] = $matches[0][$i]; - $var_replace[] = $replace; - - } - $template = str_replace($var_search, $var_replace, $template); - } - - // PHx / MODX Tags - if ( preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s',$template, $matches)) { - - //$matches[0] // Complete string that's need to be replaced - //$matches[1] // Type - //$matches[2] // The placeholder(s) - //$matches[3] // The modifiers - //$matches[4] // Type (end character) - - $count = count($matches[0]); - $var_search = array(); - $var_replace = array(); - for($i=0; $i<$count; $i++) { - $replace = NULL; - $match = $matches[0][$i]; - $type = $matches[1][$i]; - $type_end = $matches[4][$i]; - $input = $matches[2][$i]; - $modifiers = $matches[3][$i]; - $var_search[] = $match; - switch($type) { - // Document / Template Variable eXtended - case "*": - $this->Log("MODX TV/DV: " . $input); - $input = $modx->mergeDocumentContent("[*".$input."*]"); - $replace = $this->Filter($input,$modifiers); - break; - // MODX Setting eXtended - case "(": - $this->Log("MODX Setting variable: " . $input); - $input = $modx->mergeSettingsContent("[(".$input.")]"); - $replace = $this->Filter($input,$modifiers); - break; - // MODX Placeholder eXtended - default: - $this->Log("MODX / PHx placeholder variable: " . $input); - // Check if placeholder is set - if ( !array_key_exists($input, $this->placeholders) && !array_key_exists($input, $modx->placeholders) ) { - // not set so try again later. - $replace = $match; - $this->Log(" |--- Skipping - hasn't been set yet."); - } - else { - // is set, get value and run filter - $input = $this->getPHxVariable($input); - $replace = $this->Filter($input,$modifiers); - } - break; - } - $var_replace[] = $replace; - } - $template = str_replace($var_search, $var_replace, $template); - } - $et = md5($template); // Post-process template hash - - // Log an event if this was the maximum pass - if ($this->curPass == $this->maxPasses) $this->Log("Max passes reached. infinite loop protection so exiting.\n If you need the extra passes set the max passes to the highest count of nested tags in your template."); - // If this pass is not at maximum passes and the template hash is not the same, get at it again. - if (($this->curPass < $this->maxPasses) && ($st!=$et)) $template = $this->ParseValues($template); - - return $template; - } - - // Parser: modifier detection and eXtended processing if needed - function Filter($input, $modifiers) { - global $modx; - $output = $input; - $this->Log(" |--- Input = '". $output ."'"); - if (preg_match_all('~:([^:=]+)(?:=`(.*?)`(?=:[^:=]+|$))?~s',$modifiers, $matches)) { - $modifier_cmd = $matches[1]; // modifier command - $modifier_value = $matches[2]; // modifier value - $count = count($modifier_cmd); - $condition = array(); - for($i=0; $i<$count; $i++) { - $output = trim($output); - $this->Log(" |--- Modifier = '". $modifier_cmd[$i] ."'"); - if ($modifier_value[$i] != '') $this->Log(" |--- Options = '". $modifier_value[$i] ."'"); - switch ($modifier_cmd[$i]) { - ##### Conditional Modifiers - case "input": case "if": $output = $modifier_value[$i]; break; - case "equals": case "is": case "eq": $condition[] = intval(($output==$modifier_value[$i])); break; - case "notequals": case "isnot": case "isnt": case "ne":$condition[] = intval(($output!=$modifier_value[$i]));break; - case "isgreaterthan": case "isgt": case "eg": $condition[] = intval(($output>=$modifier_value[$i]));break; - case "islowerthan": case "islt": case "el": $condition[] = intval(($output<=$modifier_value[$i]));break; - case "greaterthan": case "gt": $condition[] = intval(($output>$modifier_value[$i]));break; - case "lowerthan": case "lt":$condition[] = intval(($output<$modifier_value[$i]));break; - case "isinrole": case "ir": case "memberof": case "mo": // Is Member Of (same as inrole but this one can be stringed as a conditional) - if ($output == "&_PHX_INTERNAL_&") $output = $this->user["id"]; - $grps = (strlen($modifier_value) > 0 ) ? array_filter(array_map('trim', explode(',', $modifier_value[$i]))) :array(); - $condition[] = intval($this->isMemberOfWebGroupByUserId($output,$grps)); - break; - case "or":$condition[] = "||";break; - case "and": $condition[] = "&&";break; - case "show": - $conditional = implode(' ',$condition); - $isvalid = intval(eval("return (". $conditional. ");")); - if (!$isvalid) { $output = NULL;} - case "then": - $conditional = implode(' ',$condition); - $isvalid = intval(eval("return (". $conditional. ");")); - if ($isvalid) { $output = $modifier_value[$i]; } - else { $output = NULL; } - break; - case "else": - $conditional = implode(' ',$condition); - $isvalid = intval(eval("return (". $conditional. ");")); - if (!$isvalid) { $output = $modifier_value[$i]; } - break; - case "select": - $raw = explode("&",$modifier_value[$i]); - $map = array(); - for($m=0; $m<(count($raw)); $m++) { - $mi = explode("=",$raw[$m]); - $map[$mi[0]] = $mi[1]; - } - $output = $map[$output]; - break; - ##### End of Conditional Modifiers - - ##### String Modifiers - case "lcase": $output = strtolower($output); break; - case "ucase": $output = strtoupper($output); break; - case "ucfirst": $output = ucfirst($output); break; - case "htmlent": $output = htmlentities($output,ENT_QUOTES,$modx->config['modx_charset']); break; - case "esc": - $output = preg_replace("/&(#[0-9]+|[a-z]+);/i", "&$1;", htmlspecialchars($output)); - $output = str_replace(array("[","]","`"),array("[","]","`"),$output); - break; - case "strip": $output = preg_replace("~([\n\r\t\s]+)~"," ",$output); break; - case "notags": $output = strip_tags($output); break; - case "length": case "len": $output = strlen($output); break; - case "reverse": $output = strrev($output); break; - case "wordwrap": // default: 70 - $wrapat = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 70; - $output = preg_replace_callback("@(\b\w+\b)@",function($m) use($wrapat) {return wordwrap($m[1],$wrapat,' ',1);},$output); - break; - case "limit": // default: 100 - $limit = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 100; - $output = substr($output,0,$limit); - break; - - ##### Special functions - case "math": - $filter = preg_replace("~([a-zA-Z\n\r\t\s])~","",$modifier_value[$i]); - $filter = str_replace("?",$output,$filter); - $output = eval("return ".$filter.";"); - break; - case "ifempty": if (empty($output)) $output = $modifier_value[$i]; break; - case "nl2br": $output = nl2br($output); break; - case "date": $output = strftime($modifier_value[$i],0+$output); break; - case "set": - $c = $i+1; - if ($count>$c&&$modifier_cmd[$c]=="value") $output = preg_replace("~([^a-zA-Z0-9])~","",$modifier_value[$i]); - break; - case "value": - if ($i>0&&$modifier_cmd[$i-1]=="set") { $modx->SetPlaceholder("phx.".$output,$modifier_value[$i]); } - $output = NULL; - break; - case "md5": $output = md5($output); break; - case "userinfo": - if ($output == "&_PHX_INTERNAL_&") $output = $this->user["id"]; - $output = $this->ModUser($output,$modifier_value[$i]); - break; - case "inrole": // deprecated - if ($output == "&_PHX_INTERNAL_&") $output = $this->user["id"]; - $grps = (strlen($modifier_value) > 0 ) ? array_filter(array_map('trim', explode(',', $modifier_value[$i]))) :array(); - $output = intval($this->isMemberOfWebGroupByUserId($output,$grps)); - break; - default: - if (!array_key_exists($modifier_cmd[$i], $this->cache["cm"])) { - $result = $modx->db->select('snippet', $modx->getFullTableName("site_snippets"), "name='phx:".$modifier_cmd[$i]."'"); - if ($snippet = $modx->db->getValue($result)) { - $cm = $this->cache["cm"][$modifier_cmd[$i]] = $snippet; - $this->Log(" |--- DB -> Custom Modifier"); - } - } else { - $cm = $this->cache["cm"][$modifier_cmd[$i]]; - $this->Log(" |--- Cache -> Custom Modifier"); - } - ob_start(); - $options = $modifier_value[$i]; - $custom = eval($cm); - $msg = ob_get_contents(); - $output = $msg.$custom; - ob_end_clean(); - break; - } - if (count($condition)) $this->Log(" |--- Condition = '". $condition[count($condition)-1] ."'"); - $this->Log(" |--- Output = '". $output ."'"); - } - } - return $output; - } - - // Event logging (debug) - function createEventLog() { - if($this->console) { - $console = implode("\n",$this->console); - $this->console = array(); - return '
      ' . $console . '
      '; - } - } - - // Returns a cleaned string escaping the HTML and special MODX characters - function LogClean($string) { - $string = preg_replace("/&(#[0-9]+|[a-z]+);/i", "&$1;", htmlspecialchars($string)); - $string = str_replace(array("[","]","`"),array("[","]","`"),$string); - return $string; - } - - // Simple log entry - function Log($string) { - if ($this->debug) {$this->debugLog = true; $this->console[] = (count($this->console)+1-$this->curPass). " [". strftime("%H:%M:%S",time()). "] " . $this->LogClean($string);} - } - - // Log snippet output - function LogSnippet($string) { - if ($this->debug) {$this->debugLog = true; $this->console[] = (count($this->console)+1-$this->curPass). " [". strftime("%H:%M:%S",time()). "] " . " |--- Returns:
      ".$this->LogClean($string)."
      ";} - } - - // Log pass - function LogPass() { - $this->console[] = "
      Pass " . $this->curPass . "
      "; - } - - // Log pass - function LogSource($string) { - $this->console[] = "
      Source:
      " . $this->LogClean($string); - } - - - // Returns the specified field from the user record - // positive userid = manager, negative integer = webuser - function ModUser($userid,$field) { - global $modx; - if (!array_key_exists($userid, $this->cache["ui"])) { - if (intval($userid) < 0) { - $user = $modx->getWebUserInfo(-($userid)); - } else { - $user = $modx->getUserInfo($userid); - } - $this->cache["ui"][$userid] = $user; - } else { - $user = $this->cache["ui"][$userid]; - } - return $user[$field]; - } - - // Returns true if the user id is in one the specified webgroups - function isMemberOfWebGroupByUserId($userid=0,$groupNames=array()) { - global $modx; - - // if $groupNames is not an array return false - if(!is_array($groupNames)) return false; - - // if the user id is a negative number make it positive - if (intval($userid) < 0) { $userid = -($userid); } - - // Creates an array with all webgroups the user id is in - if (!array_key_exists($userid, $this->cache["mo"])) { - $tbl = $modx->getFullTableName("webgroup_names"); - $tbl2 = $modx->getFullTableName("web_groups"); - $rs = $modx->db->select('wgn.name', "$tbl AS wgn INNER JOIN $tbl2 AS wg ON wg.webgroup=wgn.id AND wg.webuser='{$userid}'"); - $this->cache["mo"][$userid] = $grpNames = $modx->db->getColumn("name",$rs); - } else { - $grpNames = $this->cache["mo"][$userid]; - } - // Check if a supplied group matches a webgroup from the array we just created - foreach($groupNames as $k=>$v) - if(in_array(trim($v),$grpNames)) return true; - - // If we get here the above logic did not find a match, so return false - return false; - } - - // Returns the value of a PHx/MODX placeholder. - function getPHxVariable($name) { - global $modx; - // Check if this variable is created by PHx - if (array_key_exists($name, $this->placeholders)) { - // Return the value from PHx - return $this->placeholders[$name]; - } else { - // Return the value from MODX - return $modx->getPlaceholder($name); - } - } - - // Sets a placeholder variable which can only be access by PHx - function setPHxVariable($name, $value) { - if ($name != "phx") $this->placeholders[$name] = $value; - } - -} -?> diff --git a/assets/snippets/ditto/classes/phx.pre.class.inc.php b/assets/snippets/ditto/classes/phx.pre.class.inc.php deleted file mode 100644 index 3f5926a8f8..0000000000 --- a/assets/snippets/ditto/classes/phx.pre.class.inc.php +++ /dev/null @@ -1,46 +0,0 @@ -template = $template; - $this->phx = new PHxParser(); - $this->phxreq = "2.0.0"; - $this->phxerror = '
      - Error! This MODX installation is running an older version of the PHx plugin.

      - Please update PHx to version '.$this->phxreq .' or higher.
      OR - Disable the PHx plugin in the MODX Manager. (Manage Resources -> Plugins) -
      '; - $this->check = ($this->phx->version < $this->phxreq) ? 0 : 1; - } - - function setPlaceholders($value = '', $key = '', $path = '') { - $keypath = !empty($path) ? $path . "." . $key : $key; - if (is_array($value)) { - foreach ($value as $subkey => $subval) { - $this->setPlaceholders($subval, $subkey, $keypath); - } - } else { $this->phx->setPHxVariable($keypath, $value); } - } - - - function output() { - global $modx; - if (!$this->check) { - $template = $this->phxerror; - } else { - $template = $this->phx->Parse($this->template); - } - return $template; - } -} -?> diff --git a/assets/snippets/ditto/classes/random.class.inc.php b/assets/snippets/ditto/classes/random.class.inc.php deleted file mode 100644 index 38c5a1a085..0000000000 --- a/assets/snippets/ditto/classes/random.class.inc.php +++ /dev/null @@ -1,131 +0,0 @@ -data[] = array('s' => $string, 'w' => $weight); - } - function optimize(){ - foreach($this->data as $var){ - if($new[$var['s']]){ - $new[$var['s']] += $var['w']; - }else{ - $new[$var['s']] = $var['w']; - } - } - unset($this->data); - foreach($new as $key=>$var){ - $this->data[] = array('s' => $key, 'w' => $var); - } - } - - function select($amount=1){ - if($amount == 1){ - $rand = array_rand($this->data); - $result = $this->data[$rand]['s']; - }else{ - $i = 0; - while($i<$amount){ - $result[] = $this->data[array_rand($this->data)]['s']; - ++$i; - } - } - return $result; - } - - function select_unique($amount=1){ - if($amount == 1){ - $rand = array_rand($this->data); - $result = $this->data[$rand]['s']; - }else{ - $rand = array_rand($this->data, $amount); - foreach($rand as $var){ - $result[] = $this->data[$var]['s']; - } - } - return $result; - } - - function select_weighted($amount=1){ - $count = count($this->data); - $i = 0; - $max = -1; - while($i < $count){ - $max += $this->data[$i]['w']; - ++$i; - } - if(1 == $amount){ - $rand = mt_rand(0, $max); - $w = 0; $n = 0; - while($w <= $rand){ - $w += $this->data[$n]['w']; - ++$n; - } - $key = $this->data[$n-1]['s']; - }else{ - $i = 0; - while($i<$amount){ - $random[] = mt_rand(0, $max); - ++$i; - } - sort($random); - $i = 0; - $n = 0; - $w = 0; - while($i<$amount){ - while($w<=$random[$i]){ - $w += $this->data[$n]['w']; - ++$n; - } - $key[] = $this->data[$n-1]['s']; - ++$i; - } - } - return $key; - } - - function select_weighted_unique($amount=1){ - $count = count($this->data); - $i = 0; - if($amount >= $count){ - while($i < $count){ - $return[] = $this->data[$i]['s']; - ++$i; - } - return $return; - }else{ - $max = -1; - while($i < $count){ - $max += $this->data[$i]['w']; - ++$i; - } - - $i = 0; - while($i < $amount){ - $max -= $sub; - $w = 0; - $n = 0; - $num = mt_rand(0,$max); - while($w <= $num){ - $w += $this->data[$n]['w']; - ++$n; - } - $sub = $this->data[$n-1]['w']; - $key[] = $this->data[$n-1]['s']; - - unset($this->data[$n-1]); - $this->data = array_merge($this->data); - ++$i; - } - return $key; - } - } -} diff --git a/assets/snippets/ditto/classes/template.class.inc.php b/assets/snippets/ditto/classes/template.class.inc.php deleted file mode 100644 index e71a5fe7b4..0000000000 --- a/assets/snippets/ditto/classes/template.class.inc.php +++ /dev/null @@ -1,208 +0,0 @@ -language = $GLOBALS['ditto_lang']; - $this->fields = array ( - 'db' => array (), - 'tv' => array (), - 'custom' => array (), - 'item' => array (), - 'phx' => array (), - 'rss' => array (), - 'json' => array (), - 'xml' => array (), - 'unknown' => array() - ); - } - - // --------------------------------------------------- - // Function: process - // Take the templates and parse them for tempalte variables, - // Check to make sure they have fields, and sort the fields - // --------------------------------------------------- - function process($template) { - if (!isset($template['base'])) $template['base'] = $template['default']; - else unset($template['default']); - - foreach ($template as $name=>$tpl) { - if(!empty($tpl) && $tpl != '') $templates[$name] = $this->fetch($tpl); - } - $fieldList = array(); - foreach ($templates as $tplName=>$tpl) { - $check = $this->findTemplateVars($tpl); - if (is_array($check)) $fieldList = array_merge($check, $fieldList); - else { - switch ($tplName) { - case 'base' : - case 'default': $displayName = 'tpl';break; - default : $displayName = 'tpl'.$tplName; - } - $templates[$tplName] = str_replace('[+tpl+]',$displayName,$this->language['bad_tpl']); - } - } - - $fieldList = array_unique($fieldList); - $fields = $this->sortFields($fieldList); - $checkAgain = array ('json', 'xml'); - foreach ($checkAgain as $type) { - $fields = array_merge_recursive($fields, $this->sortFields($fields[$type])); - } - $this->fields = $fields; - return $templates; - } - - // --------------------------------------------------- - // Function: findTemplateVars - // Find al the template variables in the template - // --------------------------------------------------- - function findTemplateVars($tpl) { - preg_match_all('~\[\+(.*?)\+\]~', $tpl, $matches); - $TVs = array(); - foreach($matches[1] as $tv) { - $match = explode(':', $tv); - $TVs[strtolower($match[0])] = $match[0]; - } - if (count($TVs) >= 1) { - return array_values($TVs); - } else { - return false; - } - } - - // --------------------------------------------------- - // Function: sortFields - // Sort the array of fields provided by type - // --------------------------------------------------- - function sortFields ($fieldList) { - global $ditto_constantFields; - $dbFields = $ditto_constantFields['db']; - $tvFields = $ditto_constantFields['tv']; - $fields = array ( - 'db' => array (), - 'tv' => array (), - 'custom' => array (), - 'item' => array (), - 'phx' => array (), - 'rss' => array (), - 'json' => array (), - 'xml' => array (), - 'unknown' => array() - ); - - $custom = array('author','date','url','title','ditto_iteration'); - - foreach ($fieldList as $field) { - if (substr($field, 0, 4) == 'rss_') $fields['rss'][] = substr($field,4); - elseif(substr($field, 0, 4) == 'xml_') $fields['xml'][] = substr($field,4); - elseif(substr($field, 0, 5) == 'json_') $fields['json'][] = substr($field,5); - elseif(substr($field, 0, 5) == 'item[') $fields['item'][] = substr($field,4); - elseif(substr($field, 0, 4) == 'phx:') $fields['phx'][] = $field; - elseif(in_array($field, $dbFields)) $fields['db'][] = $field; - elseif(in_array($field, $tvFields)) $fields['tv'][] = $field; - elseif(substr($field, 0, 2) == 'tv' && in_array(substr($field,2), $tvFields)) - $fields['tv'][] = substr($field,2); - // TODO: Remove TV Prefix support in Ditto - elseif(in_array($field, $custom)) $fields['custom'][] = $field; - else $fields['unknown'][] = $field; - } - return $fields; - } - - // --------------------------------------------------- - // Function: replace - // Replcae placeholders with their values - // --------------------------------------------------- - public static function replace( $placeholders, $tpl ) { - $keys = array(); - $values = array(); - foreach ($placeholders as $key=>$value) { - $keys[] = '[+'.$key.'+]'; - $values[] = $value; - } - return str_replace($keys,$values,$tpl); - } - - // --------------------------------------------------- - // Function: determine - // Determine the correct template to apply - // --------------------------------------------------- - function determine($templates,$x,$start,$stop,$id) { - global $modx; - - // determine current template - if ($x == ($stop -1) && !empty($templates['last'])) $currentTPL = 'last'; - elseif ($x == 0 && !empty($templates['first'])) $currentTPL = 'first'; - elseif ($id == $modx->documentIdentifier && !empty($templates['current'])) - $currentTPL = 'current'; - elseif ($x % 2 && !empty($templates['alt'])) $currentTPL = 'alt'; - else $currentTPL = 'base'; - - $this->current = $currentTPL; - return $templates[$currentTPL]; - } - - // --------------------------------------------------- - // Function: fetch - // Get a template, based on version by Doze - // - // http://forums.modx.com/thread/41066/support-comments-for-ditto?page=2#dis-post-237942 - // --------------------------------------------------- - function fetch($tpl){ - global $modx; - $template = ''; - if(substr($tpl, 0, 6) == '@CHUNK') { - $template = $modx->getChunk(substr($tpl, 7)); - } elseif(substr($tpl, 0, 5) == '@FILE') { - $path = trim(substr($tpl, 6)); - if(strpos($path, 'manager/includes/config.inc.php')===false) - $template = file_get_contents($path); - } elseif(substr($tpl, 0, 5) == '@CODE') { - $template = substr($tpl, 6); - } elseif(strpos($tpl, '[+') !==false) { - $template = $tpl; - } elseif(substr($tpl, 0, 9) == '@DOCUMENT') { - $docid = trim(substr($tpl, 10)); - if(preg_match('@^[1-9][0-9]*$@',$docid)) - $template = $modx->getField('content',$docid); - } else { - $template = $modx->getChunk($tpl); - } - - if(strpos($template,'[!')!==false) - $template = str_replace(array('[!','!]'),array('[[',']]'),$template); - elseif($template===''||$template===false) - $template = $this->language['missing_placeholders_tpl']; - return $template; - } - - // --------------------------------------------------- - // Function: get_file_contents - // Returns the contents of file name passed - // - // From http://www.nutt.net/2006/07/08/file_get_contents-function-for-php-4/#more-210 - // --------------------------------------------------- - function get_file_contents($filename) { - if (!function_exists('file_get_contents')) { - $fhandle = fopen($filename, 'r'); - $fcontents = fread($fhandle, filesize($filename)); - fclose($fhandle); - } else { - $fcontents = file_get_contents($filename); - } - return $fcontents; - } -} diff --git a/assets/snippets/ditto/configs/compatibility.config.php b/assets/snippets/ditto/configs/compatibility.config.php deleted file mode 100644 index 4dd78aee83..0000000000 --- a/assets/snippets/ditto/configs/compatibility.config.php +++ /dev/null @@ -1,40 +0,0 @@ - \ No newline at end of file diff --git a/assets/snippets/ditto/configs/default.config.php b/assets/snippets/ditto/configs/default.config.php deleted file mode 100644 index ddf0263605..0000000000 --- a/assets/snippets/ditto/configs/default.config.php +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/assets/snippets/ditto/configs/index.html b/assets/snippets/ditto/configs/index.html deleted file mode 100644 index cfb7d0fe18..0000000000 --- a/assets/snippets/ditto/configs/index.html +++ /dev/null @@ -1,2 +0,0 @@ -

      Unauthorized access

      -You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/ditto/debug/bug.png b/assets/snippets/ditto/debug/bug.png deleted file mode 100644 index 2d5fb90ec6ee08f53947e0266a87b03f75893446..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmV+h1Nr=kP) zlgUq0Q544c8(ae&UR$8ps&snq6^bPY3v3xAmMW74Di$h~GCH6E3TaYs2#6A<7K*gC z777H71_Wa;(dfp+g-drPCSWu)#PInZi72LJ;o?i~$-U=y&UbQ89Dul3%3P+Axkzc* zbH-y;QF=hR{qLItf%ci2_&e5wNo0gnVatG?ul6Zw=o$I9Ljfn*ic3`U?>IfEim3g{ zujU&$-hy6wn;w(xme|zJm;lWJxtTFfM)q0`kX!Vu0+d${$}LCddK1<^htTe-fUYL3 zB`SdNsZD>RgvLj1<^@h6_+cDRK2Brcr2~>%$*5S)hyV33PV^teac3%|4lz@8p4?)5 z?t5o^?q+%^%)Yygo~I^U4VR!bTnWuE35hcWrfCDR3q+sxJ79e7Fg`&)RCqLA^2^y^ z0laVfadW90_Fz8Brm|r47sB^u1VgI>kanj)Z4`zMSfHlm8>CwXa$JVM`$2RrmZB-3 zN10m-!;BvH*Br3V8t`DH7m`jf#2upVDXl{5ff18_pzCPK1Zu$$CKKvd8FGeFf)+K<|x33pc7P&S#3GZT4mEw;nr(Ze*F z3&*?-4U-lm*#tber5 z%S_ceqB`b3ko6r~BbvDwdohTvP(3a(pq{x#T$yQsu#OKwEe}KuH^Mh@nxg_(Nw136 zq#a^3xNBke)In+!?qk3%4wB69{pF`Tzg`07*qoM6N<$ Eg55P&8UO$Q diff --git a/assets/snippets/ditto/debug/debug.template.css b/assets/snippets/ditto/debug/debug.template.css deleted file mode 100644 index 9bf5e5d216..0000000000 --- a/assets/snippets/ditto/debug/debug.template.css +++ /dev/null @@ -1,13 +0,0 @@ -html {margin-top: 10px;} -table { border: 1px solid #C0C0C0; margin: 0; padding: 0; text-align: left; width: 100% !important;} -table td table {border: 0;} -table td { background-color:#FFFFFF; padding: 2px;} -table th { background-color:#ccc; padding: 2px; width: 75px;} -table td th td th{ background-color:#D9E7C2; border: 1px solid #C0C0C0; } -table td th { background-color:#F5F5F5; border: 1px solid #C0C0C0;} -table td {vertical-align: top !important;} -.ditto_dbg_fields table table table {display: block} -.ditto_dbg_fields table table table td{display: block; border: none; background: none !important;} -table table table table td{display: block; border: 0px solid white !important; background: none !important;} -.ditto_dbg_fields table table table {display: block; float: left; border: 1px solid #C0C0C0;} -table table tr td tr td{border: 1px solid #C0C0C0; } \ No newline at end of file diff --git a/assets/snippets/ditto/debug/debug.templates.php b/assets/snippets/ditto/debug/debug.templates.php deleted file mode 100644 index ecac661b6a..0000000000 --- a/assets/snippets/ditto/debug/debug.templates.php +++ /dev/null @@ -1,40 +0,0 @@ - - - - [+title+] - - - - - - -
       [+title+]
      -
      -
      - - [+content+] - - -TPL; - -$dbg_templates["links"] = << [+open_dbg_console+]
      - [+save_dbg_console+]

      -TPL; - -$dbg_templates["item"] = << -

      [+title+]

      - - [+tab_content+] -
      -TPL; diff --git a/assets/snippets/ditto/debug/main.template.css b/assets/snippets/ditto/debug/main.template.css deleted file mode 100644 index 9bf5e5d216..0000000000 --- a/assets/snippets/ditto/debug/main.template.css +++ /dev/null @@ -1,13 +0,0 @@ -html {margin-top: 10px;} -table { border: 1px solid #C0C0C0; margin: 0; padding: 0; text-align: left; width: 100% !important;} -table td table {border: 0;} -table td { background-color:#FFFFFF; padding: 2px;} -table th { background-color:#ccc; padding: 2px; width: 75px;} -table td th td th{ background-color:#D9E7C2; border: 1px solid #C0C0C0; } -table td th { background-color:#F5F5F5; border: 1px solid #C0C0C0;} -table td {vertical-align: top !important;} -.ditto_dbg_fields table table table {display: block} -.ditto_dbg_fields table table table td{display: block; border: none; background: none !important;} -table table table table td{display: block; border: 0px solid white !important; background: none !important;} -.ditto_dbg_fields table table table {display: block; float: left; border: 1px solid #C0C0C0;} -table table tr td tr td{border: 1px solid #C0C0C0; } \ No newline at end of file diff --git a/assets/snippets/ditto/debug/modxDebugConsole.class.php b/assets/snippets/ditto/debug/modxDebugConsole.class.php deleted file mode 100644 index e432950913..0000000000 --- a/assets/snippets/ditto/debug/modxDebugConsole.class.php +++ /dev/null @@ -1,265 +0,0 @@ -templates = $templates; - // set templates array - } - - // --------------------------------------------------- - // Function: render - // Render the contents of the debug console - // --------------------------------------------------- - function render($cTabs,$title,$base_path) { - global $modx; - $content = ""; - foreach ($cTabs as $name=>$tab_content) { - $content .= $this->makeTab($name,$tab_content); - } - $placeholders = array( - "[+ditto_base_url+]" => $base_path, - "[+base_url+]" => $modx->config["site_url"].MGR_DIR . '/', - "[+theme+]" => $modx->config["manager_theme"], - "[+title+]" => $title, - "[+content+]" => $content, - "[+charset+]" => $modx->config["modx_charset"], - ); - - return str_replace( array_keys( $placeholders ), array_values( $placeholders ), $this->templates["main"]); - } - - - // --------------------------------------------------- - // Function: save - // Save the debug console as a file - // --------------------------------------------------- - function save($html,$filename) { - global $modx; - header('Content-Type: text/html; charset='.$modx->config["modx_charset"]); - header("Content-Disposition: attachment; filename=\"$filename\""); - exit($html); - } - - // --------------------------------------------------- - // Function: makelink - // Render the links to the debug console - // --------------------------------------------------- - function makeLink($title,$open_text,$save_text,$base_path,$prefix="") { - global $modx; - $placeholders = array( - "[+open_url+]" => $this->buildURL("debug=open",$modx->documentIdentifier,$prefix), - "[+curl+]" => $_SERVER["REQUEST_URI"], - "[+dbg_title+]" => $title, - "[+dbg_icon_url+]" => $base_path.'bug.png', - "[+save_url+]" => $this->buildURL("debug=save",$modx->documentIdentifier,$prefix), - "[+open_dbg_console+]" => $open_text, - "[+save_dbg_console+]" => $save_text, - ); - return str_replace( array_keys( $placeholders ), array_values( $placeholders ), $this->templates["links"]); - } - - // --------------------------------------------------- - // Function: buildURL - // Build a URL with regard to a prefix - // --------------------------------------------------- - function buildURL($args,$id=false,$prefix="") { - global $modx; - $query = array(); - foreach ($_GET as $param=>$value) { - if ($param != 'id' && $param != 'q') { - if (!is_array($value)) { - $query[htmlspecialchars($param, ENT_QUOTES)] = htmlspecialchars($value, ENT_QUOTES); - } else { - foreach ($value as $k => $v) { - $value[$k] = htmlspecialchars($v, ENT_QUOTES); - } - } - } - } - if (!is_array($args)) { - $args = explode("&",$args); - foreach ($args as $arg) { - $arg = explode("=",$arg); - $query[$prefix.$arg[0]] = urlencode(trim($arg[1])); - } - } else { - foreach ($args as $name=>$value) { - $query[$prefix.$name] = urlencode(trim($value)); - } - } - $queryString = ""; - foreach ($query as $param=>$value) { - $queryString .= '&'.$param.'='.(is_array($value) ? implode(",",$value) : $value); - } - $cID = ($id !== false) ? $id : $modx->documentObject['id']; - $url = $modx->makeURL(trim($cID), '', $queryString); - return ($modx->config['xhtml_urls']) ? $url : str_replace("&","&",$url); - } - - // --------------------------------------------------- - // Function: makeTab - // Render a tab - // --------------------------------------------------- - function makeTab($title,$content) { - $placeholders = array( - "[+title+]" => $title, - "[+tab_content+]" => $content, - ); - return str_replace( array_keys( $placeholders ), array_values( $placeholders ), $this->templates["tab"]); - } - - // --------------------------------------------------- - // Function: makeMODxSafe - // Make all MODX tags safe for the output - // --------------------------------------------------- - function makeMODxSafe($value) { - global $modx; - $value = (strpos($value,"<") !== FALSE) ? "
      ".htmlentities($value,ENT_NOQUOTES,$modx->config["modx_charset"])."
      " : $value; - $value = str_replace("[","[",$value); - $value = str_replace("]","]",$value); - $value = str_replace("{","{",$value); - $value = str_replace("}","}",$value); - return $value; - } - - // --------------------------------------------------- - // Function: makeParamTable - // Turn an array of parameters in the format ["param"] => "value" into a table - // --------------------------------------------------- - function makeParamTable($parameters=array(),$header="",$sort=true,$prep=true,$wordwrap=true) { - if (!is_array($parameters)) { - return ""; - } - if ($sort === true) { - ksort($parameters); - } - $output = ' - - - - - - - - -
      '.$header.'
      - - - '; - foreach ($parameters as $key=>$value) { - if (!is_string($value)) { - $value = var_export($value,true); - } - $value = ($prep == true) ? $this->makeMODxSafe($value) : $value; - $value = ($wordwrap == true) ? wordwrap($value,100,"\r\n",1) : $value; - $output .= ' - - - - - '; - } - $output .= - ' - -
      '.$key.''.$value.'
      -
      - '; - - return $output; - } - - - // --------------------------------------------------- - // Function: cleanArray - // Remove empty items from the array - // --------------------------------------------------- - function cleanArray($array) { - foreach ($array as $index => $value) { - if(is_array($array[$index])) $array[$index] = $this->cleanArray($array[$index]); - if (empty($value)) unset($array[$index]); - if (count($array[$index]) == 0) unset($array[$index]); - } - return $array; - } - - /** - * Function: array2table - * - * Translate a result array into a HTML table - * - * Author: Aidan Lister - * - * Version: 1.3.1 - * - * Link: http://aidanlister.com/repos/v/function.array2table.php - */ - function array2table($array, $recursive = false, $return = false, $null = ' ') - { - // Sanity check - if (empty($array) || !is_array($array)) { - return false; - } - - if (!isset($array[0]) || !is_array($array[0])) { - $array = array($array); - } - - // Start the table - $table = "\n"; - $head = array_keys($array[0]); - if (!is_numeric($head[0])) { - // The header - $table .= "\t"; - // Take the keys from the first row as the headings - foreach (array_keys($array[0]) as $heading) { - $table .= ''; - } - $table .= "\n"; - } - // The body - foreach ($array as $row) { - $table .= "\t" ; - foreach ($row as $cell) { - $table .= ''; - } - - $table .= "\n"; - } - - // End the table - $table .= '
      ' . $heading . '
      '; - - // Cast objects - if (is_object($cell)) { $cell = (array) $cell; } - - if ($recursive === true && is_array($cell) && !empty($cell)) { - // Recursive mode - $table .= "\n" . $this->array2table($cell, true, true) . "\n"; - } else { - $table .= (strlen($cell) > 0) ? - htmlspecialchars((string) $cell) : - $null; - } - - $table .= '
      '; - - // Method of output - if ($return === false) { - echo $table; - } else { - return $table; - } - } -} - -?> \ No newline at end of file diff --git a/assets/snippets/ditto/extenders/andFilter.extender.inc.php b/assets/snippets/ditto/extenders/andFilter.extender.inc.php deleted file mode 100644 index 16f32a2e48..0000000000 --- a/assets/snippets/ditto/extenders/andFilter.extender.inc.php +++ /dev/null @@ -1,41 +0,0 @@ -http://setpro.net.pl/ - - * Parameters: - * no parameters required - * Example: count documents within 3, 4, and 5 containers - * [[Ditto? &parents=`3,4,5` &extenders=`countDocs` &display=`1` &tpl=`@CODE:[+count+]`]] - * Please notice in the above example 'display' parameter set to 1 -> it was done - * because 'count' placeholder is set to each document within result set while we (most likely) - * need this value to be returned only once - */ - -$GLOBALS['docCounter'] = 0; - -$filters['custom']['countDocs'] = array('id', 'countDocuments'); - -$placeholders['count'] = array('id', 'setCountPlaceholder'); - -if (!function_exists('countDocuments')) { - function countDocuments($resource) { - # count documents - $GLOBALS['docCounter']++; - return 1; - } -} - -if (!function_exists('setCountPlaceholder')) { - function setCountPlaceholder($resource) { - return $GLOBALS['docCounter']; - } -} diff --git a/assets/snippets/ditto/extenders/customsort.extender.inc.php b/assets/snippets/ditto/extenders/customsort.extender.inc.php deleted file mode 100644 index 49b90d41af..0000000000 --- a/assets/snippets/ditto/extenders/customsort.extender.inc.php +++ /dev/null @@ -1,15 +0,0 @@ -advSort = true; - -if (!function_exists('customsort')){ - function customsort($a, $b){ - $pos_a = array_search($a['id'], $GLOBALS['documents']); - $pos_b = array_search($b['id'], $GLOBALS['documents']); - - if ($pos_a == $pos_b) return 0; - - return ($pos_a < $pos_b) ? -1 : 1; - } -} diff --git a/assets/snippets/ditto/extenders/dateFilter.extender.inc.php b/assets/snippets/ditto/extenders/dateFilter.extender.inc.php deleted file mode 100644 index 8888e20264..0000000000 --- a/assets/snippets/ditto/extenders/dateFilter.extender.inc.php +++ /dev/null @@ -1,228 +0,0 @@ -month = $month; - $this->year = $year; - $this->day = $day; - $this->dateSource = $dateSource; - } - function execute($value) { - $month = $this->month; - $year = $this->year; - $day = $this->day; - $unset = 1; - - if ($year && !$month && !$day) { // Year only e.g. 2007 - $min = mktime(0,0,0,1,1,$year); - $max = mktime(23,59,59,12,31,$year); - } else if ($year && $month && !$day) { // Year and month e.g. 2007-01 - $min = mktime(0,0,0,$month, 1, $year); - $max = mktime(23,59,59,$month, date("t", $min), $year); - } else if ($year && $month && $day) { // Year month and day e.g. 2007-01-11 - $min = mktime(0,0,0,$month, $day, $year); - $max = mktime(23,59,59,$month, $day, $year); - } - - $compare = $value[$this->dateSource]; - if ($compare < $min || $compare > $max){ - $unset = 0; - } - return $unset; - } - } -} - -// --------------------------------------------------- -// Date Filter Parameters -// --------------------------------------------------- - -$source = isset($dateFilterSource) ? $dateFilterSource : 'get'; -/* - Param: dateFilterSource - - Purpose: - Source for the day, month, and year to filter by - - Options: - get - gets the value of year, month, and day from the URL (pre-appended with the Ditto ID) - params - gets the value from the snippet cal - text - name of the request variable to use - - Default: - get -*/ -$dateSource = isset($dateSource) ? $dateSource : "createdon"; -/* - Param: dateSource - - Purpose: - Source of the [+date+] placeholder - - Options: - # - Any UNIX timestamp from MODX fields or TVs such as createdon, pub_date, or editedon - - Default: - "createdon" - - Related: - - -*/ -if(!isset($dateFilterDefault)) $dateFilterDefault = 0; -/* - Param: dateFilterDefault - - Purpose: - Determine the default filter - - Options: - 0 - filter off - 1 - current year - 2 - current year and month - 3 - current year, month, and day - - Default: - 0 -*/ -if ($source == 'get') { - $year = (!empty($_GET[$dittoID.'year']) && $_GET[$dittoID.'year'] != 'false') ? intval($_GET[$dittoID.'year']) : 0; - $month = (!empty($_GET[$dittoID.'month']) && $_GET[$dittoID.'month'] != 'false') ? intval($_GET[$dittoID.'month']) : 0; - $day = (!empty($_GET[$dittoID.'day']) && $_GET[$dittoID.'day'] != 'false') ? intval($_GET[$dittoID.'day']) : 0; -} elseif ($source == 'params'){ - $month = isset($month) ? intval($month) : 0; - /* - Param: month - - Purpose: - Month to filter by - - Options: - # - Number between 1-12 (inclusive) that corresponds to the month to filter by - - Default: - [NULL] - */ - $year = isset($year) ? intval($year) : 0; - /* - Param: year - - Purpose: - Year to filter by - - Options: - # - Any numerical year (4 numbers; ex: 2006) - - Default: - [NULL] - */ - $day = isset($day) ? intval($day) : 0; - /* - Param: day - - Purpose: - Day to filter by - - Options: - # - Any numerical day within the current month - - Default: - [NULL] - */ -} else { - if (!empty($_REQUEST[$dittoID.$source])) { - $date = getdate(strtotime($_REQUEST[$dittoID.$source])); - $year = $date["year"]; - $month = $date["mon"]; - $day = $date["mday"]; - } -} - -// --------------------------------------------------- -// Date Filter Defaults -// --------------------------------------------------- - - -switch ($dateFilterDefault) { - case 0: - // do nothing - break; - - case 1: - $cDate = getdate(); - $year = ($year) ? $year : $cDate["year"]; - break; - - case 2: - $cDate = getdate(); - $year = ($year) ? $year : $cDate["year"]; - $month = ($month) ? $month : $cDate["mon"]; - break; - - case 3: - $cDate = getdate(); - $year = ($year) ? $year : $cDate["year"]; - $month = ($month) ? $month : $cDate["mon"]; - $day = ($day) ? $day : $cDate["mday"]; - break; -} - -// --------------------------------------------------- -// Date Filter Placeholders -// --------------------------------------------------- - -if ($year) { - $modx->setPlaceholder($dittoID."year",$year); - /* - Placeholder: year - - Content: - Year being filtered by - */ -} -if ($month && $year) { - $month_text = strftime("%B", mktime(10, 10, 10, $month, 10, $year)); - $modx->setPlaceholder($dittoID."month",$month_text); - /* - Placeholder: month - - Content: - Month being filtered by - */ - $modx->setPlaceholder($dittoID."month_numeric",$month); - /* - Placeholder: month - - Content: - Numeric version of the month being filtered by - */ -} -if ($day && $month && $year) { - $modx->setPlaceholder($dittoID."day",$day); - /* - Placeholder: day - - Content: - Day being filtered by - */ -} - -// --------------------------------------------------- -// Date Filter Execution -// --------------------------------------------------- -if ($year || ($year && $month) || ($year && $month && $day)) { - $dateFilterOject = new dateFilter($month,$year,$day,$dateSource); - $filters["custom"]["dateFilter"] = array($dateSource,array($dateFilterOject,"execute")); -} diff --git a/assets/snippets/ditto/extenders/distinct.extender.inc.php b/assets/snippets/ditto/extenders/distinct.extender.inc.php deleted file mode 100755 index 2f64c52901..0000000000 --- a/assets/snippets/ditto/extenders/distinct.extender.inc.php +++ /dev/null @@ -1,116 +0,0 @@ - explode(',', $distinct)); - -// Remove any extra spaces from the fieldnames (in case they have been supplied with commas and spaces) -$distinct_fieldname[$ddDittoID] = array_map('trim', $distinct_fieldname[$ddDittoID]); - -$placeholders['distinctCount'] = array(implode(',',$distinct_fieldname[$ddDittoID]),'distinctCount'); - -$placeholders['distinctIds'] = array(implode(',',$distinct_fieldname[$ddDittoID]),'distinctIds'); - -// Add the custom function -$filters['custom']['distinct'] = array(implode(',',$distinct_fieldname[$ddDittoID]) ,'makeDistinct'); - - - -if(!function_exists('distinctCount')){ - function distinctCount($resource){ //Not sure if the $resource is needed - global $seen; - global $distinct_fieldname; - global $ddDittoID; - - $distinct_string = ''; - foreach ($distinct_fieldname[$ddDittoID] as $f) { - $distinct_string .= '~'. $f.'|'.$resource[$f]; - } - if (isset($seen[$ddDittoID][$distinct_string])) return count($seen[$ddDittoID][$distinct_string]); - } -} -if(!function_exists('distinctIds')){ - function distinctIds($resource){ //Not sure if the $resource is needed - global $seen; - global $distinct_fieldname; - global $ddDittoID; - - $distinct_string = ''; - foreach ($distinct_fieldname[$ddDittoID] as $f) { - $distinct_string .= '~'. $f.'|'.$resource[$f]; - } - if (isset($seen[$ddDittoID][$distinct_string])) return implode(',',$seen[$ddDittoID][$distinct_string]); - } -} - -// The filter function -if (!function_exists('makeDistinct')) { - - function makeDistinct($resource) { - global $ddDittoID; - global $seen; - global $distinct_fieldname; - - // Make a unique string based on the fieldname and value of each field we've been asked to make distinct - $distinct_string = ''; - foreach ($distinct_fieldname[$ddDittoID] as $f) { - $distinct_string .= '~'. $f.'|'.$resource[$f]; - } - - // Check if this string has been seen yet -- if it has, don't include it in the results - if (isset($seen[$ddDittoID][$distinct_string]) && $seen[$ddDittoID][$distinct_string] ) { - // If this value of the fieldname has been seen before, remove it from the list - $seen[$ddDittoID][$distinct_string][] = $resource['id']; - return false; - } else { - // Otherwise, remember the value has been seen, and allow it in the list (this time) - $seen[$ddDittoID][$distinct_string] = array($resource['id']); - return true; - } - } -} diff --git a/assets/snippets/ditto/extenders/example.extender.inc.php b/assets/snippets/ditto/extenders/example.extender.inc.php deleted file mode 100644 index a63752698f..0000000000 --- a/assets/snippets/ditto/extenders/example.extender.inc.php +++ /dev/null @@ -1,89 +0,0 @@ - array('source'=>'id','value'=>'9239423942','mode'=>'2')); - // Variable: $filters['parsed'][] - // Add the pre-parsed filter to the parsed filters list with the - // source as id, the value of 9239423942 and the mode 2 - -if (!function_exists('exampleFunction')) { - // wrap functions in !functino_exists statements to ensure that they are not defined twice - - // --------------------------------------------------- - // Function: exampleFunction - // - // Takes the resource array for an individual document - // and returns the value of the placeholder, in this - // case the uppercase version of the pagetitle - // --------------------------------------------------- - function exampleFunction($resource) { - return strtoupper($resource['pagetitle']); - } -} - -if (!function_exists('exampleFilter')) { - // wrap functions in !functino_exists statements to ensure that they are not defined twice - - // --------------------------------------------------- - // Function: exampleFilter - // - // Takes the resource array for an individual document - // and asks for the return of a 0 or 1 with 1 removing - // the document and 0 leaving it in the result set. - // In this case, if the lower case value of the pagetitle - // is foo, it is removed while all other documents are shown - // --------------------------------------------------- - function exampleFilter($resource) { - if (strtolower($resource['pagetitle'])=='foo') return 1; - else return 0; - } -} diff --git a/assets/snippets/ditto/extenders/glossaryFilter.extender.inc.php b/assets/snippets/ditto/extenders/glossaryFilter.extender.inc.php deleted file mode 100644 index a08c38f995..0000000000 --- a/assets/snippets/ditto/extenders/glossaryFilter.extender.inc.php +++ /dev/null @@ -1,52 +0,0 @@ -getChunk($GLOBALS['filterBy']); -} -$GLOBALS['forceUTF8'] = $GLOBALS['forceUTF8'] ? 'u' : ''; - -$filters['custom']['glossaryFilter'] = array($GLOBALS['filterVar'], 'glossaryFilter'); - -if (!function_exists('glossaryFilter')) { - function glossaryFilter($resource) { - if (!$GLOBALS['filterBy']) { - // do nothing (simply leave document within final dataset) - return 1; - } - $regExpBegin = preg_match('/^(chunk|custom)$/', $GLOBALS['filterMode']) ? '' : '/^['; - $regExpEnd = preg_match('/^(chunk|custom)$/', $GLOBALS['filterMode']) ? '' : ']/i' . $GLOBALS['forceUTF8']; - // do filtering - return preg_match($regExpBegin . $GLOBALS['filterBy'] . $regExpEnd, $resource[$GLOBALS['filterVar']]) ? 1 : 0; - } -} diff --git a/assets/snippets/ditto/extenders/index.html b/assets/snippets/ditto/extenders/index.html deleted file mode 100644 index cfb7d0fe18..0000000000 --- a/assets/snippets/ditto/extenders/index.html +++ /dev/null @@ -1,2 +0,0 @@ -

      Unauthorized access

      -You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/ditto/extenders/jotcount.extender.inc.php b/assets/snippets/ditto/extenders/jotcount.extender.inc.php deleted file mode 100644 index 483e95b33e..0000000000 --- a/assets/snippets/ditto/extenders/jotcount.extender.inc.php +++ /dev/null @@ -1,21 +0,0 @@ -db->select('uparent, COUNT(*)', '[+prefix+]jot_content', $where, 'COUNT(*) DESC'); -$counts = $modx->db->makeArray( $result ); - -$jotcount = array(); -foreach($counts as $k=>$v) { - $jotcount[$v['uparent']] = $v['COUNT(*)']; -} - -$GLOBALS['jotcount'] = $jotcount; - -$placeholders['jotcount'] = array(array('id','*'),'jotph','id'); - -if(!function_exists('jotph')) { - function jotph($resource) { - global $jotcount; - if(!$r = $jotcount[$resource['id']]) $r = 0; - return $r; - } -} diff --git a/assets/snippets/ditto/extenders/jotdatesort.extender.inc.php b/assets/snippets/ditto/extenders/jotdatesort.extender.inc.php deleted file mode 100644 index cc5ba10669..0000000000 --- a/assets/snippets/ditto/extenders/jotdatesort.extender.inc.php +++ /dev/null @@ -1,113 +0,0 @@ -[+title+] -Количество комментариев: [+jotcount+]
      -Автор комментария: [+jotlastauthor+]
      -Дата последнего комментария: [+jotlastdate:date=`%d.%m.%Y, %H:%M:%S`+]
      -Дата поста: [+date+]
      -Автор поста: [+author+] - -Обращаю внимание на [+jotlastdate:date=`%d.%m.%Y, %H:%M:%S`+] — это pHX, т.к. экстендер выводит дату комментария в timestamp -*/ -/* Поле имени */ -if (!isset($jotauthorfield)) $jotauthorfield = "name"; - -/* Запрос в базу */ -$sql = "SELECT uparent, maxcount, maxdate, fullname FROM - (SELECT MAX(id) as maxid, uparent, COUNT(*) as maxcount, MAX(createdon) as maxdate FROM " . $modx->getFullTableName('jot_content') . " WHERE published=1 AND deleted=0 GROUP BY uparent) tab1 - LEFT JOIN - ((SELECT a.id,mua.fullname FROM " . $modx->getFullTableName('jot_content') . " as a - LEFT JOIN " . $modx->getFullTableName('user_attributes') . " as mua ON mua.internalKey=a.createdby WHERE a.createdby>0) - UNION (SELECT a.id,wua.fullname FROM " . $modx->getFullTableName('jot_content') . " as a - LEFT JOIN " . $modx->getFullTableName('web_user_attributes') . " as wua ON wua.internalKey=-a.createdby WHERE a.createdby<0) - UNION (SELECT a.id,c.content as fullname FROM " . $modx->getFullTableName('jot_content') . " as a - LEFT JOIN " . $modx->getFullTableName('jot_fields') . " as c ON c.id = a.id AND c.label = '$jotauthorfield' WHERE a.createdby=0)) tab2 - ON tab1.maxid = tab2.id ORDER BY maxcount DESC"; - -$result = $modx->db->query($sql); -$rs = $modx->db->makeArray( $result ); - -$jotcount = array(); -$jotlastdate = array(); -$jotlastauthor = array(); -foreach($rs as $v) { - $jotcount[$v['uparent']] = $v['maxcount']; - $jotlastdate[$v['uparent']] = $v['maxdate']; - $jotlastauthor[$v['uparent']] = $v['fullname']; -} -/* Количество комментариев */ -$GLOBALS['jotcount'] = $jotcount; -$placeholders['jotcount'] = array("id","jotcountph",); -if(!function_exists("jotcountph")) { - function jotcountph($resource) { - global $jotcount; - if(!$r = $jotcount[$resource['id']]) $r = 0; - return $r; - } -} - -/* Последняя дата */ -$GLOBALS['jotlastdate'] = $jotlastdate; -$placeholders['jotlastdate'] = array("id","jotlastdateph",); -if(!function_exists("jotlastdateph")) { - function jotlastdateph($resource) { - global $jotlastdate; - if(!$r = $jotlastdate[$resource['id']]) $r = 0; - return $r; - } -} - -/* Автор последнего комментария */ -$GLOBALS['jotlastauthor'] = $jotlastauthor; -$placeholders['jotlastauthor'] = array("id","jotlastauthorph",); -if(!function_exists("jotlastauthorph")) { - function jotlastauthorph($resource) { - global $jotlastauthor; - if(!$r = $jotlastauthor[$resource['id']]) $r = ''; - return $r; - } -} - -/* Сортировка по последней дате */ -$orderBy['custom'][] = array('id,publishedon,createdon','jotlastdatesort'); -$ditto->advSort = true; -if(!function_exists('jotlastdatesort')){ - function jotlastdatesort($a, $b){ - $aa=$GLOBALS['jotlastdate'][$a['id']]; - $bb=$GLOBALS['jotlastdate'][$b['id']]; - if (!$aa) {$aa = $a['publishedon'] ? $a['publishedon'] : $a['createdon'];} - if (!$bb) {$bb = $b['publishedon'] ? $b['publishedon'] : $b['createdon'];} - if ($aa == $bb){return 0;} - return ($aa > $bb)?-1:1; - } -} - -/* Фильтр по наличию комментариев */ -$GLOBALS["jotfilter"] = isset($jotfilter) ? $jotfilter : 0; -$filters["custom"]["jotcountFilter"] = array("id","jotcountFilter"); -if (!function_exists("jotcountFilter")) { - function jotcountFilter($resource) { - global $jotcount,$jotfilter; - if($jotfilter && !$jotcount[$resource['id']]) return 0; - return 1; - } -} -?> \ No newline at end of file diff --git a/assets/snippets/ditto/extenders/level.extender.inc.php b/assets/snippets/ditto/extenders/level.extender.inc.php deleted file mode 100644 index e646e4ce3d..0000000000 --- a/assets/snippets/ditto/extenders/level.extender.inc.php +++ /dev/null @@ -1,15 +0,0 @@ -getParentIds($resource['id'])) == $level) return 1; - else return 0; - } -} diff --git a/assets/snippets/ditto/extenders/nosort.extender.inc.php b/assets/snippets/ditto/extenders/nosort.extender.inc.php deleted file mode 100644 index 6c775dab2d..0000000000 --- a/assets/snippets/ditto/extenders/nosort.extender.inc.php +++ /dev/null @@ -1,14 +0,0 @@ - 'nosort', 'sortBy' => 'id' -if (!function_exists('nosort')){ - function nosort($a, $b){ - $pos_a=array_search($a['id'],$GLOBALS['documents']); - $pos_b=array_search($b['id'],$GLOBALS['documents']); - if ($pos_a == $pos_b){return 0;} - return ($pos_a < $pos_b)?-1:1; - } -} -$GLOBALS['documents']=explode(',',$documents); -$orderBy['custom'][]=array('id', 'nosort'); -$ditto->advSort = true; -?> \ No newline at end of file diff --git a/assets/snippets/ditto/extenders/request.extender.inc.php b/assets/snippets/ditto/extenders/request.extender.inc.php deleted file mode 100644 index 90c68f14bf..0000000000 --- a/assets/snippets/ditto/extenders/request.extender.inc.php +++ /dev/null @@ -1,100 +0,0 @@ -$value) { - $saneName = str_replace($dittoID, '', substr($name, 6)); - $dID = ($dittoID == '') ? true : strpos($name, $dittoID); - if ((substr($name, 0, 6) == 'ditto_' && $dID) && !in_array($saneName,$bad) && ($good == false || in_array($saneName,$good)) && !preg_match("/[\^`~!\/@\\#\}\$%:;\)\(\{&\*=\|'\+]/", $value)){ - if ($stripTags) $var = $modx->stripTags($value); - if ($saneName == 'orderBy') { - $variables[$saneName] = array('parsed'=>array(),'custom'=>array(),'unparsed'=>trim($value)); - }else{ - $variables[$saneName] = trim($value); - } - } -} -/* - Param: dbg - - Purpose: - Output variables being set - - Options: - 0 - off - 1 - on - - Default: - 0 - off -*/ -if ($_REQUEST[$dittoID.'dbg']==1) print_r($variables); -extract($variables); - -// ------------------------------------------------------------------------------// -// Kudo's MultiFilter Code // -// ------------------------------------------------------------------------------// -// Accepts ditto_filter, ditto_filter_2, with continuous numbering // -// Note: For complex filtering start with ditto_filter_1 (with one as number)! // -// ------------------------------------------------------------------------------// - -if (isset($filter) && isset($filter_2)) { - $i = 2; - while (isset(${'filter_'.$i})) { - $filter .= '|'.${'filter_'.$i}; - $i++; - } -} elseif (!isset($filter) && isset($filter_1)) { - $filter = $filter_1; - $i = 2; - while (isset(${'filter_'.$i})) { - $filter .= '|'.${'filter_'.$i}; - $i++; - } -} diff --git a/assets/snippets/ditto/extenders/search.extender.inc.php b/assets/snippets/ditto/extenders/search.extender.inc.php deleted file mode 100644 index 16d8742a97..0000000000 --- a/assets/snippets/ditto/extenders/search.extender.inc.php +++ /dev/null @@ -1,263 +0,0 @@ -searchOptions = $this->getSource($searchOptions); - if (!($this->options = json_decode($this->searchOptions, true))) { - $this->separators = (isset($separators) && ($new_separators = json_decode($this->getSource($separators), true))) ? - $new_separators : array('outer' => ',', 'inner' => ':'); - $this->options = $this->parseOptions($this->searchOptions, $this->separators["outer"], $this->separators["inner"]); - } - - if ($func = array_intersect_key($this->options, array_flip($functions))) { - $this->searchFunction = key($func); - $this->options[$this->searchFunction] = $this->getSource($this->options[$this->searchFunction]); - if (($this->searchFunction === 'snippet') && isset($this->source)) - $this->searchFunction = 'eval'; - - } else - $this->searchFunction = "default"; - - $this->searchString = $this->getSource($searchString); - - if ($this->searchFunction === 'eval') - $this->function_code = trim($this->options['snippet'], " <>?ph\n\r\t"); - elseif ($this->searchFunction === 'snippet') { - $this->snippet = $this->options[$this->searchFunction]; - unset($this->options['snippet']); - } - - if (($this->searchFunction === 'eval') || ($this->searchFunction === 'snippet')) { - if (!isset($this->options["searchString"])) - $this->options["searchString"] = $this->searchString; - } - - $this->sourceFields = explode(",", $this->getSource($sourceFields)); - $this->searchFunction = ucfirst($this->searchFunction); - } - - private function parseOptions($options) { - $new_options = array(); - $options = explode($this->separators['outer'], $options); - foreach ($options as $option) { - list($key, $val) = (($pos = strpos($option, $this->separators['inner'])) === false) ? - array(trim($option), true) : - array(trim(substr($option, 0, $pos)), ltrim(substr($option, $pos + strlen($this->separators['inner'])))); - $new_options[$key] = $val; - } - return $new_options; - } - - private function getSource($string) { - global $modx; - - $this->source = 1; - if (stripos(($string = ltrim($string)), "@file") === 0) - $string = (($content = file_get_contents($name = trim(substr($string, 5), ": "))) === false) ? $name : $content; - elseif (stripos($string, "@chunk") === 0) - $string = (($content = $modx->getChunk($name = trim(substr($string, 6), ": "))) === false) ? $name : $content; - elseif (stripos($string, "@eval") === 0) { - $string = trim(substr($string, 5), ": "); - return $string; - } else { - $this->source = null; - return $string; - } - - return $this->getSource($string); - } - - function executeSnippet($resource) { - global $modx; - - $result = 0; - - foreach ($this->sourceFields as $field) { - $this->options["searchContent"] = $resource[$field]; - if ($modx->runSnippet($this->custom_function, $this->options)) - $result = 1; - } - return $result; - } - - function executeEval($resource) { - global $modx; - $result = 0; - - extract($this->options); - foreach ($this->sourceFields as $field) { - $searchContent = $resource[$field]; - if (eval($this->function_code)) - $result = 1; - } - return $result; - } - - function executeRegex($resource) { - $result = 0; - - foreach ($this->sourceFields as $field) { - if (preg_match($this->searchString, $resource[$field])) - $result = 1; - } - - return $result; - } - - function executeCase_sensitive($resource) { - $result = 0; - - foreach ($this->sourceFields as $field) { - if (strpos($resource[$field], $this->searchString) !== false) - $result = 1; - } - - return $result; - } - - function executeDefault($resource) { - $result = 0; - - foreach ($this->sourceFields as $field) { - if (mb_stripos($resource[$field], $this->searchString,0,"UTF-8") !== false) - $result = 1; - } - - return $result; - } - } -} - -// --------------------------------------------------- -// Search Filter Execution -// --------------------------------------------------- -if (!empty($searchString)) { - $searchFilter = new searchFilter($searchString, $searchFields, $searchOptions, $searchOptionsSeparators); - $filters["custom"]["searchFilter"] = array($searchFields,array($searchFilter,"execute".$searchFilter->searchFunction)); -} - -?> diff --git a/assets/snippets/ditto/extenders/summary.extender.inc.php b/assets/snippets/ditto/extenders/summary.extender.inc.php deleted file mode 100644 index 35756b3e59..0000000000 --- a/assets/snippets/ditto/extenders/summary.extender.inc.php +++ /dev/null @@ -1,337 +0,0 @@ -'; - /* - Param: truncAt - - Purpose: - Location to split the content at - - Options: - Any unique text or code string that is contained - in the content of each document - - Default: - '' -*/ -$length = isset($truncLen) ? $truncLen : 300; - /* - Param: truncLen - - Purpose: - Number of characters to show of the content - - Options: - Any number greater than - - Default: - 300 -*/ -$offset = isset($truncOffset) ? $truncOffset : 30; - /* - Param: truncOffset - - Purpose: - Number of charactars to 'wander' either way of - - Options: - Any number greater less than - - Default: - 30 -*/ -$text = isset($truncText) ? $truncText : 'Read more...'; - /* - Param: truncText - - Purpose: - Text to be displayed in [+link+] - - Options: - Any valid text or html - - Default: - 'Read more...' -*/ -$trunc_tpl = isset($tplTrunc) ? template::fetch($tplTrunc) : false; - /* - Param: tplTrunc - - Purpose: - Template to be used for [+link+] - - Options: - - Any valid chunk name - - Code via @CODE: - - File via @FILE: - - Placeholders: - [+url+] - URL of the document - [+text+] - &truncText - - Default: - &truncText -*/ -$GLOBALS['ditto_summary_link'] = ''; -$GLOBALS['ditto_summary_params'] = compact('trunc', 'splitter', 'length', 'offset', 'text', 'trunc_tpl'); -$GLOBALS['ditto_object'] = $ditto; - -// --------------------------------------------------- -// Truncate Functions -// --------------------------------------------------- -if (!function_exists('determineLink')){ - function determineLink($resource){ - global $ditto_object, $ditto_summary_params, $ditto_summary_link; - - if ($ditto_summary_link !== false){ - $parameters = array( - 'url' => $ditto_summary_link, - 'text' => $ditto_summary_params['text'], - ); - $tplTrunc = $ditto_summary_params['trunc_tpl']; - - if ($tplTrunc !== false){ - $source = $tplTrunc; - }else{ - $source = '[+text+]'; - } - - return $ditto_object->template->replace($parameters, $source); - }else{ - return ''; - } - } -} -if (!function_exists('determineSummary')){ - function determineSummary($resource){ - global $ditto_summary_params; - - $trunc = new truncate(); - $p = $ditto_summary_params; - $output = $trunc->execute($resource, $p['trunc'], $p['splitter'], $p['text'], $p['length'], $p['offset'], $p['splitter'], true); - - $GLOBALS['ditto_summary_link'] = $trunc->link; - $GLOBALS['ditto_summary_type'] = $trunc->summaryType; - - return $output; - } -} -// --------------------------------------------------- -// Truncate Class -// --------------------------------------------------- -if (!class_exists('truncate')){ - class truncate{ - var $summaryType, - $link; - - function html_substr($posttext, $minimum_length = 200, $length_offset = 20, $truncChars = false){ - // $minimum_length: - // The approximate length you want the concatenated text to be - - // $length_offset: - // The variation in how long the text can be in this example text - // length will be between 200 and 200-20=180 characters and the - // character where the last tag ends - - // Reset tag counter & quote checker - $tag_counter = 0; - $quotes_on = false; - // Check if the text is too long - if (mb_strlen($posttext) > $minimum_length && $truncChars != 1){ - // Reset the tag_counter and pass through (part of) the entire text - $c = 0; - for ($i = 0; $i < mb_strlen($posttext); $i++){ - // Load the current character and the next one - // if the string has not arrived at the last character - $current_char = mb_substr($posttext, $i, 1); - if ($i < mb_strlen($posttext) - 1){ - $next_char = mb_substr($posttext, $i + 1, 1); - }else{ - $next_char = ''; - } - // First check if quotes are on - if (!$quotes_on){ - // Check if it's a tag - // On a '<' add 3 if it's an opening tag (like ) - if ($current_char == '<'){ - if ($next_char == '/'){ - $tag_counter += 1; - }else{ - $tag_counter += 3; - } - } - // Slash signifies an ending (like or ... />) - // substract 2 - if ($current_char == '/' && $tag_counter <> 0){$tag_counter -= 2;} - // On a '>' substract 1 - if ($current_char == '>'){$tag_counter -= 1;} - // If quotes are encountered, start ignoring the tags - // (for directory slashes) - if ($current_char == '"'){$quotes_on = true;} - }else{ - // IF quotes are encountered again, turn it back off - if ($current_char == '"'){$quotes_on = false;} - } - - // Count only the chars outside html tags - if($tag_counter == 2 || $tag_counter == 0){ - $c++; - } - - // Check if the counter has reached the minimum length yet, - // then wait for the tag_counter to become 0, and chop the string there - if ($c > $minimum_length - $length_offset && $tag_counter == 0){ - $posttext = mb_substr($posttext, 0, $i + 1); - return $posttext; - } - } - } - return $this->textTrunc($posttext, $minimum_length + $length_offset); - } - - function textTrunc($string, $limit, $break = '. '){ - // Original PHP code from The Art of Web: www.the-art-of-web.com - - // return with no change if string is shorter than $limit - if(mb_strlen($string) <= $limit){return $string;} - - $string = mb_substr($string, 0, $limit); - - if(($breakpoint = mb_strrpos($string, $break)) !== false){ - $string = mb_substr($string, 0, $breakpoint + 1); - }else if(($breakpoint = mb_strrpos($string, ' ')) !== false){ - $string = mb_substr($string, 0, $breakpoint + 1); - } - - return $string; - } - - function closeTags($text){ - global $debug; - - $openPattern = '/<([^\/].*?)>/'; - $closePattern = '/<\/(.*?)>/'; - $endOpenPattern = '/<([^\/].*?)$/'; - $endClosePattern = '/<(\/.*?[^>])$/'; - $endTags = ''; - - preg_match_all($openPattern, $text, $openTags); - preg_match_all($closePattern, $text, $closeTags); - - if ($debug == 1){ - print_r($openTags); - print_r($closeTags); - } - - $c = 0; - $loopCounter = count($closeTags[1]); //used to prevent an infinite loop if the html is malformed - while ($c < count($closeTags[1]) && $loopCounter){ - $i = 0; - while ($i < count($openTags[1])){ - $tag = trim($openTags[1][$i]); - - if (mb_strstr($tag, ' ')){ - $tag = mb_substr($tag, 0, mb_strpos($tag, ' ')); - } - if ($debug == 1){ - echo $tag.'=='.$closeTags[1][$c]."\n"; - } - if ($tag == $closeTags[1][$c]){ - $openTags[1][$i] = ''; - $c++; - break; - } - $i++; - } - $loopCounter--; - } - - $results = $openTags[1]; - - if (is_array($results)){ - $results = array_reverse($results); - - foreach ($results as $tag){ - $tag = trim($tag); - - if (mb_strstr($tag, ' ')){ - $tag = mb_substr($tag, 0, mb_strpos($tag, ' ')); - } - if (!mb_stristr($tag, 'br') && !mb_stristr($tag, 'img') && !empty ($tag)){ - $endTags .= ''; - } - } - } - return $text.$endTags; - } - - function execute($resource, $trunc, $splitter, $linktext, $truncLen, $truncOffset, $truncsplit, $truncChars){ - $summary = ''; - $this->summaryType = 'content'; - $this->link = false; - $closeTags = true; - // summary is turned off - - if ((mb_strstr($resource['content'], $splitter)) && $truncsplit){ - $summary = array (); - - // HTMLarea/XINHA encloses it in paragraph's - $summary = explode('

      '.$splitter.'

      ', $resource['content']); - - // For TinyMCE or if it isn't wrapped inside paragraph tags - $summary = explode($splitter, $summary['0']); - - $summary = $summary['0']; - $this->link = '[~'.$resource['id'].'~]'; - $this->summaryType = 'content'; - - // fall back to the summary text - }else if (mb_strlen($resource['introtext']) > 0){ - $summary = $resource['introtext']; - $this->link = '[~'.$resource['id'].'~]'; - $this->summaryType = 'introtext'; - $closeTags = false; - // fall back to the summary text count of characters - }else if (mb_strlen($resource['content']) > $truncLen && $trunc == 1){ - $summary = $this->html_substr($resource['content'], $truncLen, $truncOffset, $truncChars); - $this->link = '[~'.$resource['id'].'~]'; - $this->summaryType = 'content'; - // and back to where we started if all else fails (short post) - }else{ - $summary = $resource['content']; - $this->summaryType = 'content'; - $this->link = false; - } - - // Post-processing to clean up summaries - $summary = ($closeTags === true) ? $this->closeTags($summary) : $summary; - return $summary; - } - } -} -?> \ No newline at end of file diff --git a/assets/snippets/ditto/extenders/tagging.extender.class.inc.php b/assets/snippets/ditto/extenders/tagging.extender.class.inc.php deleted file mode 100644 index cfaa019caf..0000000000 --- a/assets/snippets/ditto/extenders/tagging.extender.class.inc.php +++ /dev/null @@ -1,174 +0,0 @@ -delimiter = $delimiter; - $this->source = $this->parseTagData($source); - $this->mode = $mode; - $this->landing = $landing; - $this->format = $format; - $this->givenTags = $this->prepGivenTags($givenTags); - $this->caseSensitive = $caseSensitive; - $this->displayDelimiter = $displayDelimiter; - $this->sort = $sort; - $this->displayMode = $displayMode; - $this->tpl = $tpl; - $this->callback = $callback; - } - - function prepGivenTags ($givenTags) { - global $modx,$_GET,$dittoID; - - $getTags = !empty($_GET[$dittoID.'tags']) ? $modx->stripTags(trim($_GET[$dittoID.'tags'])) : false; - // Get tags from the $_GET array - - $tags1 = array(); - $tags2 = array(); - - if ($getTags !== false) $tags1 = explode($this->delimiter,$getTags); - - if ($givenTags !== false) $tags2 = explode($this->delimiter,$givenTags); - - $kTags = array(); - $tags = array_merge($tags1,$tags2); - foreach ($tags as $tag) { - if (empty($tag)) continue; - - if (!$this->caseSensitive) $tag = strtolower($tag); - $tag = trim($tag); - $kTags[strtolower($tag)] = $tag; - } - return $kTags; - } - - function tagFilter ($value) { - if ($this->caseSensitive == false) { - $documentTags = array_values(array_flip($this->givenTags)); - $filterTags = array_values(array_flip($this->combineTags($this->source, $value,true))); - } else { - $documentTags = $this->givenTags; - $filterTags =$this->combineTags($this->source, $value,true); - } - $compare = array_intersect($filterTags, $documentTags); - $commonTags = count($compare); - $totalTags = count($filterTags); - $docTags = count($documentTags); - - $unset = 1; - switch ($this->mode) { - case 'onlyAllTags' : - if ($commonTags != $docTags) $unset = 0; - break; - case 'removeAllTags' : - if ($commonTags == $docTags) $unset = 0; - break; - case 'onlyTags' : - if ($commonTags > $totalTags || $commonTags == 0) $unset = 0; - break; - case 'removeTags' : - if ($commonTags <= $totalTags && $commonTags != 0) $unset = 0; - break; - } - return $unset; - } - - function makeLinks($resource) { - return $this->tagLinks($this->combineTags($this->source,$resource,true), $this->delimiter, $this->landing, $this->format); - } - - function parseTagData($tagData,$names=array()) { - return explode(',',$tagData); - } - - function combineTags($tagData, $resource, $array=false) { - if ($this->callback !== false) { - return call_user_func_array($this->callback,array('tagData'=>$tagData,'resource'=>$resource,'array'=>$array)); - } - $tags = array(); - foreach ($tagData as $source) { - if(!empty($resource[$source])) { - $tags[] = $resource[$source]; - } - } - $kTags = array(); - $tags = explode($this->delimiter,implode($this->delimiter,$tags)); - foreach ($tags as $tag) { - if (!empty($tag)) { - if ($this->caseSensitive) { - $kTags[trim($tag)] = trim($tag); - } else { - $kTags[strtolower(trim($tag))] = trim($tag); - } - } - } - return ($array == true) ? $kTags : implode($this->delimiter,$kTags); - } - - function tagLinks($tags, $tagDelimiter, $tagID=false, $format='html') { - global $ditto_lang,$modx; - if(count($tags) == 0 && $format=='html') { - return $ditto_lang['none']; - } else if (count($tags) == 0 && ($format=='rss' || $format=='xml' || $format == 'xml')) - { - return ''.$ditto_lang['none'].''; - } - - $output = ''; - if ($this->sort) { - ksort($tags); - } - - // set templates array - $tplRss = "\r\n".' [+tag+]'; - $tpl = ($this->tpl == false) ? '' : $this->tpl; - - $tpl = (in_array($format, array('rss','xml','atom')) && $templates['user'] == false) ? $tplRss : $tpl; - - if ($this->displayMode == 1) { - foreach ($tags as $tag) { - $tagDocID = (!$tagID) ? $modx->documentObject['id'] : $tagID; - $url = ditto::buildURL("tags={$tag}&start=0",$tagDocID); - $output .= template::replace(array('url'=>$url,'tag'=>$tag),$tpl); - $output .= ($format != 'rss' && $format != 'xml' && $format != 'atom') ? $this->displayDelimiter : ''; - } - } else if (!in_array($format, array('rss','xml','atom')) && $this->displayMode == 2) { - $tagList = array(); - foreach ($tags as $tag) { - $tagDocID = (!$tagID) ? $modx->documentObject['id'] : $tagID; - $url = ditto::buildURL("tags={$tag}&start=0",$tagDocID); - $tagList[] = template::replace(array('url'=>$url,'tag'=>$tag),$tpl); - } - $output = $this->makeList($tagList, 'ditto_tag_list', 'ditto_tag_'); - } - - return (!in_array($format, array('rss','xml','atom'))) ? substr($output,0,-1*strlen($this->displayDelimiter)) : $output; - } - - function makeList($array, $ulroot= 'root', $ulprefix= 'sub_', $type= '', $ordered= false, $tablevel= 0) { - // first find out whether the value passed is an array - if (!is_array($array)) { - return '
      • Bad list
      '; - } - if (!empty ($type)) { - $typestr= " style='list-style-type: {$type}'"; - } else { - $typestr= ''; - } - $tabs= ''; - for ($i= 0; $i < $tablevel; $i++) { - $tabs .= "\t"; - } - $listhtml= $ordered == true ? $tabs . "
        \n" : $tabs . "
          \n"; - foreach ($array as $key => $value) { - if (is_array($value)) { - $listhtml .= $tabs . "\t
        • " . $key . "\n" . $this->makeList($value, $ulprefix . $ulroot, $ulprefix, $type, $ordered, $tablevel +2) . $tabs . "\t
        • \n"; - } else { - $listhtml .= $tabs . "\t
        • " . $value . "
        • \n"; - } - } - $listhtml .= $ordered == true ? $tabs . "
      \n" : $tabs . "
    \n"; - return $listhtml; - } -} diff --git a/assets/snippets/ditto/extenders/tagging.extender.inc.php b/assets/snippets/ditto/extenders/tagging.extender.inc.php deleted file mode 100644 index 3b2152182f..0000000000 --- a/assets/snippets/ditto/extenders/tagging.extender.inc.php +++ /dev/null @@ -1,206 +0,0 @@ -documentObject['id']; -/* - Param: tagDocumentID - - Purpose: - ID for tag links to point to - - Options: - Any MODX document with a Ditto call setup to receive the tags - - Default: - Current MODX Document -*/ -$source = isset($tagData) ? $tagData : ""; -/* - Param: tagData - - Purpose: - Field to get the tags from - - Options: - Comma separated list of MODX fields or TVs - - Default: - [NULL] -*/ -$caseSensitive = isset($caseSensitive) ? $caseSensitive : 0; -/* - Param: caseSensitive - - Purpose: - Determine whether or not tag matching and duplicate tag removal are case sensitive - - Options: - 0 - off - 1 - on - - Default: - 0 - off -*/ -$mode = isset($tagMode) ? $tagMode: "onlyTags"; -/* - Param: tagMode - - Purpose: - Filtering method to remove tags - - Options: - onlyAllTags - show documents that have all of the tags - onlyTags - show documents that have any of the tags - removeAllTags - remove documents that have all of the tags - removeTags - documents that have any of the tags - - Default: - "onlyTags" -*/ -$delimiter= isset($tagDelimiter) ? $tagDelimiter: " "; -/* - Param: tagDelimiter - - Purpose: - Delimiter that splits each tag in the tagData source - - Options: - Any character not included in the tags themselves - - Default: - " " - space -*/ -$displayDelimiter= isset($tagDisplayDelimiter) ? $tagDisplayDelimiter: $delimiter; -/* - Param: tagDisplayDelimiter - - Purpose: - What separates the tags in [+tagLinks+] - - Options: - Any character - - Default: - &tagDelimiter -*/ -$sort= isset($tagSort) ? $tagSort: 1; -/* - Param: tagSort - - Purpose: - Sort the tags alphanumerically - - Options: - 0 - off - 1 - on - - Default: - 1 - on -*/ -$displayMode= isset($tagDisplayMode) ? $tagDisplayMode: 1; -/* - Param: tagDisplayMode - - Purpose: - How to display the tags in [+tagLinks+] - - Options: - 1 - string of links &tagDisplayDelimiter separated - 2 - ul/li list - - Note: - Output of individual items can be customized by - - Default: - 1 - string of links &tagDisplayDelimiter separated -*/ -$givenTags = !empty($tags) ? trim($tags) : false; -/* - Param: tags - - Purpose: - Allow the user to provide initial tags to be filtered - - Options: - Any valid tags separated by - - Default: - [NULL] -*/ -$tplTagLinks = !empty($tplTagLinks) ? template::fetch($tplTagLinks) : false; -/* - Param: tplTagLinks - - Purpose: - Define a custom template for the tagLinks placeholder - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Default: - (code) - -*/ -$callback = !empty($tagCallback) ? trim($tagCallback) : false; -/* - Param: tagCallback - - Purpose: - Allow the user to modify both where the tags come from and how they are parsed. - - Options: - Any valid function name - - Default: - [NULL] - - Notes: - The function should expect to receive the following three parameters: - tagData - the provided source of the tags - resource - the resource array for the document being parsed - array - return the results in an array if true -*/ - -// --------------------------------------------------- -// Tagging Parameters -// --------------------------------------------------- - -$tags = new tagging($delimiter,$source,$mode,$landing,$givenTags,$format,$caseSensitive,$displayDelimiter, $callback, $sort, $displayMode,$tplTagLinks); - -if (count($tags->givenTags) > 0) { - $filters["custom"]["tagging"] = array($source,array($tags,"tagFilter")); - // set tagging custom filter -} - -//generate TagList -$modx->setPlaceholder($dittoID."tagLinks",$tags->tagLinks($tags->givenTags, $delimiter, $landing, $format)); -/* - Placeholder: tagLinks - - Content: - Nice 'n beautiful tag list with links pointing to -*/ -// set raw tags placeholder -$modx->setPlaceholder($dittoID."tags",implode($delimiter,$tags->givenTags)); -/* - Placeholder: tags - - Content: - Raw tags separated by -*/ -// set tagging placeholder -$placeholders['tagLinks'] = array(array($source,"*"),array($tags,"makeLinks")); diff --git a/assets/snippets/ditto/extenders/tvFilter.extender.inc.php b/assets/snippets/ditto/extenders/tvFilter.extender.inc.php deleted file mode 100644 index b7d4214c79..0000000000 --- a/assets/snippets/ditto/extenders/tvFilter.extender.inc.php +++ /dev/null @@ -1,40 +0,0 @@ -getFullTableName('site_tmplvars'); - $tmplvar_templates = $modx->getFullTableName('site_tmplvar_templates'); - $rs = $modx->db->select( - 'count(tmplvars.id)', - "{$tmplvars} AS tmplvars - INNER JOIN {$tmplvar_templates} AS tmplvar_templates ON tmplvars.id = tmplvar_templates.tmplvarid", - "(tmplvars.name = '{$GLOBALS['tvFilterBy']}') AND (tmplvar_templates.templateid = '{$resource['template']}')" - ); - $count = $modx->db->getValue($rs); - return $GLOBALS['tvFilterMode'] ? !$count : $count; - } -} - -?> \ No newline at end of file diff --git a/assets/snippets/ditto/formats/atom.format.inc.php b/assets/snippets/ditto/formats/atom.format.inc.php deleted file mode 100644 index 981a9c4ca2..0000000000 --- a/assets/snippets/ditto/formats/atom.format.inc.php +++ /dev/null @@ -1,122 +0,0 @@ - -*/ -$atom_placeholders['atom_link'] = $modx->config['site_url']."[~".$modx->documentObject['id']."~]"; -$atom_placeholders['atom_charset'] = isset($charset) ? $charset : $modx->config['modx_charset']; -/* - Param: charset - - Purpose: - Charset to use for the Atom feed - - Options: - Any valid charset identifier - - Default: - MODX default charset -*/ - -$atom_placeholders['atom_lastmodified'] = date('Y-m-d\TH:i:s\Z', $modx->documentObject["editedon"]); -$placeholders['*'] = "atom_placeholders"; -$placeholders['atom_createdon'] = array("createdon","atomCreatedDate"); -$placeholders['atom_editedon'] = array("editedon","atomEditedDate"); -$placeholders['atom_author'] = array("createdby","atomCreatedBy"); - -if(!function_exists("atomCreatedDate")) { - function atomCreatedDate($resource) { - return date('Y-m-d\TH:i:s\Z', intval($resource["createdon"]) + $modx->config["server_offset_time"]); - } -} -if(!function_exists("atomEditedDate")) { - function atomEditedDate($resource) { - return date('Y-m-d\TH:i:s\Z', intval($resource["editedon"]) + $modx->config["server_offset_time"]); - } -} -if(!function_exists("atomCreatedBy")) { - function atomCreatedBy($resource) { - return htmlspecialchars(html_entity_decode(ditto::getAuthor($resource['createdby']), ENT_QUOTES)); - } -} -$extenders[] = "summary"; - // load required summary extender for backwards compatibility - // TODO: Remove summary extender in next major version - -// set atom placeholders -if(!function_exists("atom_placeholders")) { - function atom_placeholders($placeholders) { - $field = array(); - foreach ($placeholders as $name=>$value) { - $field["atom_escaped_".$name] = htmlspecialchars(html_entity_decode($value)); - } - $placeholders = array_merge($field,$placeholders); - return $placeholders; - } -} - -// set default templates - -$atom_header = << - - [(site_url)][~[*id*]~] - [*pagetitle*] - - [(site_name)] - [+atom_lastmodified+] - Ditto 2.0 running on MODX -TPL; - -$atom_tpl = << - [+atom_escaped_pagetitle+] - - [+atom_author+] - [+url+] - [+atom_editedon+] - [+atom_createdon+] -
    [+summary+]
    - -TPL; - -$atom_footer = << -TPL; - -// set template values - -$header = isset($header) ? $header : template::replace($atom_placeholders,$atom_header); - -$tpl = isset($tpl) ? $tpl : "@CODE:".$atom_tpl; - -$footer = isset($footer) ? $footer : $atom_footer; - -// set emptytext -$noResults = " "; - -?> \ No newline at end of file diff --git a/assets/snippets/ditto/formats/html.format.inc.php b/assets/snippets/ditto/formats/html.format.inc.php deleted file mode 100644 index 0b16ca4693..0000000000 --- a/assets/snippets/ditto/formats/html.format.inc.php +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/assets/snippets/ditto/formats/index.html b/assets/snippets/ditto/formats/index.html deleted file mode 100644 index cfb7d0fe18..0000000000 --- a/assets/snippets/ditto/formats/index.html +++ /dev/null @@ -1,2 +0,0 @@ -

    Unauthorized access

    -You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/ditto/formats/json.format.inc.php b/assets/snippets/ditto/formats/json.format.inc.php deleted file mode 100644 index 8e57769e52..0000000000 --- a/assets/snippets/ditto/formats/json.format.inc.php +++ /dev/null @@ -1,130 +0,0 @@ - -*/ -$json_placeholders['json_copyright'] = isset($copyright) ? $copyright: $_lang['default_copyright']; -/* - Param: copyright - - Purpose: - Copyright message to embed in the JSON document - - Options: - Any text - - Default: - [LANG] -*/ -$json_placeholders['json_link'] = $modx->config['site_url']."[~".$modx->documentObject['id']."~]"; -$json_placeholders['json_ttl'] = isset($ttl) ? intval($ttl):120; -/* - Param: ttl - - Purpose: - Time to live for the JSON feed - - Options: - Any integer greater than 1 - - Default: - 120 -*/ -$json_placeholders['json_op'] = (!empty($_REQUEST[$dittoID.'jsonp']) ? $_REQUEST[$dittoID.'jsonp'] : ''); - -// set tpl JSON placeholders -$placeholders['*'] = "json_parameters"; -if(!function_exists("json_parameters")) { - function json_parameters($placeholders) { - $jsonArr = array(); - foreach ($placeholders as $name=>$value) { - $jsonArr["json_".$name] = addslashes($value); - } - $placeholders = array_merge($jsonArr,$placeholders); - return $placeholders; - } -} -// --------------------------------------------------- -// JSON Templates -// --------------------------------------------------- - -$json_header = ' -[+json_op+]{ - "title":"[*pagetitle*]", - "link":"[+json_link+]", - "description":"[*description*]", - "language":"[+json_lang+]", - "copyright":"[+json_copyright+]", - "ttl":"[+json_ttl+]", - "entries":[ -'; - // not heredoc because { cannont be used as a char in heredoc - -$json_tpl = << \ No newline at end of file diff --git a/assets/snippets/ditto/formats/rss.format.inc.php b/assets/snippets/ditto/formats/rss.format.inc.php deleted file mode 100644 index 7781488d38..0000000000 --- a/assets/snippets/ditto/formats/rss.format.inc.php +++ /dev/null @@ -1,150 +0,0 @@ - -*/ -$rss_placeholders['rss_link'] = $modx->config['site_url']."[~".$modx->documentObject['id']."~]"; -$rss_placeholders['rss_ttl'] = isset($ttl) ? intval($ttl):120; -/* - Param: ttl - - Purpose: - Time to live for the RSS feed - - Options: - Any integer greater than 1 - - Default: - 120 -*/ -$rss_placeholders['rss_charset'] = isset($charset) ? $charset : $modx->config['modx_charset']; -/* - Param: charset - - Purpose: - Charset to use for the RSS feed - - Options: - Any valid charset identifier - - Default: - MODX default charset -*/ -$rss_placeholders['rss_xsl'] = isset($xsl) ? "\n" . 'config['site_url'].$xsl.'" ?>' : ''; -/* - Param: xsl - - Purpose: - XSL Stylesheet to format the RSS feed with - - Options: - The path to any valid XSL Stylesheet - - Default: - None -*/ -$GLOBALS["dateSource"] = isset($dateSource) ? $dateSource : "createdon"; - // date type to display (values can be createdon, pub_date, editedon) - -// set tpl rss placeholders -$placeholders['rss_date'] = array($GLOBALS["dateSource"],"rss_date"); -$placeholders['rss_pagetitle'] = array("pagetitle","rss_pagetitle"); -$placeholders['rss_author'] = array("createdby","rss_author"); - -if(!function_exists("rss_date")) { - function rss_date($resource) { - global $dateSource; - return date("r", intval($resource[$dateSource]) + $modx->config["server_offset_time"]); - } -} -if(!function_exists("rss_pagetitle")) { - function rss_pagetitle($resource) { - return htmlspecialchars(html_entity_decode($resource['pagetitle'], ENT_QUOTES)); - } -} -if(!function_exists("rss_author")) { - function rss_author($resource) { - return htmlspecialchars(html_entity_decode(ditto::getAuthor($resource['createdby']), ENT_QUOTES)); - } -} - -$extenders[] = "summary"; - // load required summary extender for backwards compatibility - // TODO: Remove summary extender in next major version - -// set default templates - -$rss_header = <<[+rss_xsl+] - - - [*pagetitle*] - [(site_url)] - [*description*] - [+rss_lang+] - [+rss_copyright+] - [+rss_ttl+] -TPL; - -$rss_tpl = << - [+rss_pagetitle+] - [(site_url)][~[+id+]~] - - [+rss_date+] - [(site_url)][~[+id+]~] - [+rss_author+] - [+tagLinks+] - - -TPL; - -$rss_footer = << - -TPL; - -// set template values -$header = isset($header) ? $header : template::replace($rss_placeholders,$rss_header); - -$tpl = isset($tpl) ? $tpl : "@CODE:".$rss_tpl; - -$footer = isset($footer) ? $footer : $rss_footer; - -// set emptytext -$noResults = " "; diff --git a/assets/snippets/ditto/formats/xml.format.inc.php b/assets/snippets/ditto/formats/xml.format.inc.php deleted file mode 100644 index 1972fae60b..0000000000 --- a/assets/snippets/ditto/formats/xml.format.inc.php +++ /dev/null @@ -1,136 +0,0 @@ - -*/ -$xml_placeholders['[+xml_link+]'] = $modx->config['site_url']."[~".$modx->documentObject['id']."~]"; -$xml_placeholders['[+xml_ttl+]'] = isset($ttl) ? intval($ttl):120; -/* - Param: ttl - - Purpose: - Time to live for the RSS feed - - Options: - Any integer greater than 1 - - Default: - 120 -*/ -$xml_placeholders['[+xml_charset+]'] = isset($charset) ? $charset : $modx->config['modx_charset']; -/* - Param: charset - - Purpose: - Charset to use for the RSS feed - - Options: - Any valid charset identifier - - Default: - MODX default charset -*/ -$rss_placeholders['[+xml_xsl+]'] = isset($xsl) ? 'config['site_url'].$xsl.'" ?>' : ''; -/* - Param: xsl - - Purpose: - XSL Stylesheet to format the XML feed with - - Options: - The path to any valid XSL Stylesheet - - Default: - None -*/ - -// set tpl xml placeholders -$placeholders['*'] = "xml_parameters"; -if(!function_exists("xml_parameters")) { - function xml_parameters($placeholders) { - $xmlArr = array(); - foreach ($placeholders as $name=>$value) { - $xmlArr["xml_".$name] = htmlentities($value); - } - $placeholders = array_merge($xmlArr,$placeholders); - return $placeholders; - } -} -// set default templates - -$xml_header = << -[+xml_xsl+] - - - [*pagetitle*] - [+xml_link+] - [*description*] - [+xml_lang+] - [+xml_copyright+] - [+xml_ttl+] -TPL; - -$xml_tpl = << - [+xml_pagetitle+] - [(site_url)][~[+id+]~] - - [+xml_createdon+] - [+xml_createdon+] - [+xml_author+] - [+tags+] - -TPL; - -$xml_footer = << - -TPL; - -// set template values - -$header = isset($header) ? $header : template::replace($xml_placeholders,$xml_header); - -$tpl = isset($tpl) ? $tpl : "@CODE:".$xml_tpl; - -$footer = isset($footer) ? $footer : $xml_footer; - -// set emptytext -$noResults = " "; - -?> \ No newline at end of file diff --git a/assets/snippets/ditto/index.html b/assets/snippets/ditto/index.html deleted file mode 100644 index cfb7d0fe18..0000000000 --- a/assets/snippets/ditto/index.html +++ /dev/null @@ -1,2 +0,0 @@ -

    Unauthorized access

    -You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/ditto/lang/bulgarian-utf8.inc.php b/assets/snippets/ditto/lang/bulgarian-utf8.inc.php deleted file mode 100755 index f86d77eb2d..0000000000 --- a/assets/snippets/ditto/lang/bulgarian-utf8.inc.php +++ /dev/null @@ -1,60 +0,0 @@ - -

    [+pagetitle+]

    -
    от [+author+] на [+date+]
    -
    [+introtext+]
    -
    -'; -$_lang["bad_tpl"] = "

    &[+tpl+] или не съдържа никакви placeholders, или е името на chunk-а или файла е грешно. Моля, проверете.

    "; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

    Не са намерени документи.

    '; -$_lang['resource_array_error'] = 'Грешка в подредбата на ресурсите'; -$_lang['prev'] = "< Предишен"; -$_lang['next'] = "Следващ >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "Грешка в Ditto класа. Моля, проверете."; -$_lang['none'] = "Няма"; -$_lang['edit'] = "Редактиране"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Инфо"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Полета"; -$_lang['templates'] = "Шаблони"; -$_lang['filters'] = "Филтри"; -$_lang['prefetch_data'] = "Предварителни Данни"; -$_lang['retrieved_data'] = "Извлечени Данни"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Параметри"; -$_lang['basic_info'] = "Основна информация"; -$_lang['document_info'] = "Информация за документ"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Версия"; -$_lang['summarize'] = "Обобщаване"; -$_lang['total'] = "Всичко"; -$_lang['sortBy'] = "Сортиране по"; -$_lang['sortDir'] = "Посока на сортиране"; -$_lang['start'] = "Начало"; -$_lang['stop'] = "Край"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "Избрани IDs"; -$_lang['ditto_IDs_all'] = "Всички IDs"; -$_lang['open_dbg_console'] = "Отваряне на Debug конзола"; -$_lang['save_dbg_console'] = "Съхраняване на Debug конзола"; diff --git a/assets/snippets/ditto/lang/bulgarian.inc.php b/assets/snippets/ditto/lang/bulgarian.inc.php deleted file mode 100755 index 7953660aca..0000000000 --- a/assets/snippets/ditto/lang/bulgarian.inc.php +++ /dev/null @@ -1,6 +0,0 @@ -' . $contents); -?> \ No newline at end of file diff --git a/assets/snippets/ditto/lang/chinese.inc.php b/assets/snippets/ditto/lang/chinese.inc.php deleted file mode 100755 index c73bfe5171..0000000000 --- a/assets/snippets/ditto/lang/chinese.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

    [+pagetitle+]

    -
    by [+author+] on [+date+]
    -
    [+introtext+]
    -
-'; -$_lang["bad_tpl"] = "

&[+tpl+] either does not contain any placeholders or is an invalid chunk name, code block, or filename. Please check it.

"; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

No documents found.

'; -$_lang['resource_array_error'] = 'Resource Array Error'; -$_lang['prev'] = "< Previous"; -$_lang['next'] = "Next >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "The Ditto class is invalid. Please check it."; -$_lang['none'] = "None"; -$_lang['edit'] = "编辑"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "信息"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Fields"; -$_lang['templates'] = "模板"; -$_lang['filters'] = "Filters"; -$_lang['prefetch_data'] = "Prefetch Data"; -$_lang['retrieved_data'] = "Retreived Data"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parameters"; -$_lang['basic_info'] = "Basic Info"; -$_lang['document_info'] = "Document Info"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Version"; -$_lang['summarize'] = "Summarize"; -$_lang['total'] = "Total"; -$_lang['sortBy'] = "Sort By"; -$_lang['sortDir'] = "Sort Direction"; -$_lang['start'] = "Start"; -$_lang['stop'] = "Stop"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "Selected IDs"; -$_lang['ditto_IDs_all'] = "All IDs"; -$_lang['open_dbg_console'] = "Open Debug Console"; -$_lang['save_dbg_console'] = "Save Debug Console"; diff --git a/assets/snippets/ditto/lang/czech.inc.php b/assets/snippets/ditto/lang/czech.inc.php deleted file mode 100644 index 5159114de1..0000000000 --- a/assets/snippets/ditto/lang/czech.inc.php +++ /dev/null @@ -1,59 +0,0 @@ - -

[+pagetitle+]

-
od [+author+] dne [+date+]
-
[+introtext+]
-
-'; -$_lang["bad_tpl"] = "

&[+tpl+] neobsahuje žádný Placeholder nebo není názvem Chunku, bloku kódu nebo souboru. Zkontrolujte to.

"; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

Dokument nenalezen.

'; -$_lang['resource_array_error'] = 'Chyba pole zdrojů'; -$_lang['prev'] = "< Předchozí"; -$_lang['next'] = "Následující >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2011"; -$_lang['invalid_class'] = "Ditto class je chybná. Prosím zkontrolujte to."; -$_lang['none'] = "Nic"; -$_lang['edit'] = "Upravit"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Info"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Pole"; -$_lang['templates'] = "Šablony"; -$_lang['filters'] = "Filtry"; -$_lang['prefetch_data'] = "Přednačíst Data"; -$_lang['retrieved_data'] = "Přijatá Data"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parametery"; -$_lang['basic_info'] = "Základní Info"; -$_lang['document_info'] = "Info Dokumentu"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Verze"; -$_lang['summarize'] = "Shrnutí"; -$_lang['total'] = "Celkem"; -$_lang['sortBy'] = "Řadit dle"; -$_lang['sortDir'] = "Směr řazení"; -$_lang['start'] = "Začítek"; -$_lang['stop'] = "Konec"; -$_lang['ditto_IDs'] = "ID"; -$_lang['ditto_IDs_selected'] = "Vybraná ID"; -$_lang['ditto_IDs_all'] = "Všechna ID"; -$_lang['open_dbg_console'] = "Otevřít Debug konzoli"; -$_lang['save_dbg_console'] = "Uložit Debug konzoli"; diff --git a/assets/snippets/ditto/lang/danish.inc.php b/assets/snippets/ditto/lang/danish.inc.php deleted file mode 100644 index 2696d0a72c..0000000000 --- a/assets/snippets/ditto/lang/danish.inc.php +++ /dev/null @@ -1,59 +0,0 @@ - -

[+title+]

-
[+summary+]
-

[+link+]

-
by [+author+] den [+date+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] either does not contain any placeholders or is an invalid chunk name, code block, or filename. Please check it.

"; -$_lang['missing_placeholders_tpl'] = 'En af dine Ditto skabeloner mangler en placeholder, tjek venligst skabelonen nedenunder:




'; -$_lang['no_documents'] = '

No documents found.

'; -$_lang['resource_array_error'] = 'Resource Array Error'; -$_lang['prev'] = "< tidligere"; -$_lang['next'] = "Nӕste >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2007"; -$_lang['invalid_class'] = "Ditto klassen er ugyldig. tjek den venligst."; -$_lang['none'] = "Ingen"; -$_lang['edit'] = "Rediger"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Info"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Fields"; -$_lang['templates'] = "Templates"; -$_lang['filters'] = "Filters"; -$_lang['prefetch_data'] = "Prefetch Data"; -$_lang['retrieved_data'] = "Retreived Data"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parameters"; -$_lang['basic_info'] = "Basic Info"; -$_lang['document_info'] = "Document Info"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Version"; -$_lang['summarize'] = "Summarize"; -$_lang['total'] = "Total"; -$_lang['sortBy'] = "Sort By"; -$_lang['sortDir'] = "Sort Direction"; -$_lang['start'] = "Start"; -$_lang['stop'] = "Stop"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "Selected IDs"; -$_lang['ditto_IDs_all'] = "All IDs"; -$_lang['open_dbg_console'] = "Open Debug Console"; -$_lang['save_dbg_console'] = "Save Debug Console"; diff --git a/assets/snippets/ditto/lang/english.inc.php b/assets/snippets/ditto/lang/english.inc.php deleted file mode 100755 index 12872fa3ab..0000000000 --- a/assets/snippets/ditto/lang/english.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

[+pagetitle+]

-
by [+author+] on [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] either does not contain any placeholders or is an invalid chunk name, code block, or filename. Please check it.

"; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

No documents found.

'; -$_lang['resource_array_error'] = 'Resource Array Error'; -$_lang['prev'] = "< Previous"; -$_lang['next'] = "Next >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "The Ditto class is invalid. Please check it."; -$_lang['none'] = "None"; -$_lang['edit'] = "Edit"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Info"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Fields"; -$_lang['templates'] = "Templates"; -$_lang['filters'] = "Filters"; -$_lang['prefetch_data'] = "Prefetch Data"; -$_lang['retrieved_data'] = "Retreived Data"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parameters"; -$_lang['basic_info'] = "Basic Info"; -$_lang['document_info'] = "Document Info"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Version"; -$_lang['summarize'] = "Summarize"; -$_lang['total'] = "Total"; -$_lang['sortBy'] = "Sort By"; -$_lang['sortDir'] = "Sort Direction"; -$_lang['start'] = "Start"; -$_lang['stop'] = "Stop"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "Selected IDs"; -$_lang['ditto_IDs_all'] = "All IDs"; -$_lang['open_dbg_console'] = "Open Debug Console"; -$_lang['save_dbg_console'] = "Save Debug Console"; diff --git a/assets/snippets/ditto/lang/finnish.inc.php b/assets/snippets/ditto/lang/finnish.inc.php deleted file mode 100755 index 74c8502b9d..0000000000 --- a/assets/snippets/ditto/lang/finnish.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

[+pagetitle+]

-
Luonut: [+author+] - [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] ei joko sisällä yhtään Ditton muuttujaa tai on viallinen palasen nimi, koodi, tai tiedostonimi. Ole hyvä ja tarkista.

"; -$_lang['missing_placeholders_tpl'] = 'Jostakin Ditto palasestasi puuttuu muuttujia. Ole hyvä ja tarkista alla oleva palanen:'; -$_lang['no_documents'] = '

Ei löytynyt yhtään dokumenttia.

'; -$_lang['resource_array_error'] = 'Resurssitaulukko virhe'; -$_lang['prev'] = "< Edellinen"; -$_lang['next'] = "Seuraava >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2007"; -$_lang['invalid_class'] = "Ditto luokka on virheellinen, ole hyvä ja tarkista."; -$_lang['none'] = "Tyhjä"; -$_lang['edit'] = "Muokkaa"; -$_lang['dateFormat'] = "%d.%m.%Y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Tiedot"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Kentät"; -$_lang['templates'] = "Sivustopohjat"; -$_lang['filters'] = "Filtterit"; -$_lang['prefetch_data'] = "Esihaun tulos"; -$_lang['retrieved_data'] = "Haun tulos"; - -// Debug Text -$_lang['placeholders'] = "Muuttujat"; -$_lang['params'] = "Parameterit"; -$_lang['basic_info'] = "Perustiedot"; -$_lang['document_info'] = "Dokumentin tiedot"; -$_lang['debug'] = "Vikatiedot"; -$_lang['version'] = "Versio"; -$_lang['summarize'] = "Yhteenveto"; -$_lang['total'] = "Yhteensä"; -$_lang['sortBy'] = "Järjestetty"; -$_lang['sortDir'] = "Järjestyksen suunta"; -$_lang['start'] = "Aloitus (Start)"; -$_lang['stop'] = "Lopetus (Stop)"; -$_lang['ditto_IDs'] = "ID numerot"; -$_lang['ditto_IDs_selected'] = "Valitut ID numerot"; -$_lang['ditto_IDs_all'] = "Kaikki ID numerot"; -$_lang['open_dbg_console'] = "Avaa vikatietokonsoli"; -$_lang['save_dbg_console'] = "Tallenna vikatietokonsoli"; diff --git a/assets/snippets/ditto/lang/francais-utf8.inc.php b/assets/snippets/ditto/lang/francais-utf8.inc.php deleted file mode 100644 index a10cc4b402..0000000000 --- a/assets/snippets/ditto/lang/francais-utf8.inc.php +++ /dev/null @@ -1,59 +0,0 @@ - -

[+pagetitle+]

-
[+introtext+]
-
par [+author+] le [+createdon:date=`%d-%b-%y %H:%M`+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] either does not contain any placeholders or is an invalid chunk name, code block, or filename. Please check it.

"; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

Aucune Ressource trouvée.

'; -$_lang['resource_array_error'] = 'Resource Array Error'; -$_lang['prev'] = "< Précédent"; -$_lang['next'] = "Suivant >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2009"; -$_lang['invalid_class'] = "La classe Ditto est invalide. Merci de la vérifier."; -$_lang['none'] = "Aucun"; -$_lang['edit'] = "Éditer"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Informations"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Fields"; -$_lang['templates'] = "Modèles"; -$_lang['filters'] = "Filters"; -$_lang['prefetch_data'] = "Prefetch Data"; -$_lang['retrieved_data'] = "Retreived Data"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Paramètres"; -$_lang['basic_info'] = "Basic Info"; -$_lang['document_info'] = "Document Info"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Version"; -$_lang['summarize'] = "Summarize"; -$_lang['total'] = "Total"; -$_lang['sortBy'] = "Trier par"; -$_lang['sortDir'] = "Direction du tri"; -$_lang['start'] = "Commencer à"; -$_lang['stop'] = "Arrêter à "; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "Selected IDs"; -$_lang['ditto_IDs_all'] = "All IDs"; -$_lang['open_dbg_console'] = "Open Debug Console"; -$_lang['save_dbg_console'] = "Save Debug Console"; diff --git a/assets/snippets/ditto/lang/francais.inc.php b/assets/snippets/ditto/lang/francais.inc.php deleted file mode 100644 index aaf32d6649..0000000000 --- a/assets/snippets/ditto/lang/francais.inc.php +++ /dev/null @@ -1,6 +0,0 @@ -' . $contents); -?> diff --git a/assets/snippets/ditto/lang/german.inc.php b/assets/snippets/ditto/lang/german.inc.php deleted file mode 100644 index 486784fb39..0000000000 --- a/assets/snippets/ditto/lang/german.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

[+pagetitle+]

-
[+introtext+]
-
von [+author+] am [+date+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] enthält entweder keine Platzhalter oder ist ein ungültiger Chunkname, Code-Abschnitt, oder Dateiname. Bitte prüfen.

"; -$_lang['missing_placeholders_tpl'] = 'Eines Ihrer Ditto Templates enthält keine Platzhalter, bitte überprüfen Sie das folgende Template:'; -$_lang['no_documents'] = '

Keine Dokumente gefunden.

'; -$_lang['resource_array_error'] = 'Feldzugriffsfehler'; -$_lang['prev'] = "< Zurück"; -$_lang['next'] = "Weiter >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "The Ditto-Klasse ist ungültig. Bitte überprüfen."; -$_lang['none'] = "Keine"; -$_lang['edit'] = "Bearbeiten"; -$_lang['dateFormat'] = "%d.%m.%Y, %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Info"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Felder"; -$_lang['templates'] = "Vorlagen (templates)"; -$_lang['filters'] = "Filter"; -$_lang['prefetch_data'] = "Vorgeladene Daten"; -$_lang['retrieved_data'] = "Abgerufene Daten"; - -// Debug Text -$_lang['placeholders'] = "Platzhalter"; -$_lang['params'] = "Parameter"; -$_lang['basic_info'] = "Allgemeine Eigenschaften"; -$_lang['document_info'] = "Dokumenteigenschaften"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Version"; -$_lang['summarize'] = "Zusammenfassen"; -$_lang['total'] = "Gesamt"; -$_lang['sortBy'] = "Sortieren nach"; -$_lang['sortDir'] = "Sortierreihenfolge"; -$_lang['start'] = "Start"; -$_lang['stop'] = "Stop"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "Ausgewählte IDs"; -$_lang['ditto_IDs_all'] = "Alle IDs"; -$_lang['open_dbg_console'] = "Debug-Konsole öffnen"; -$_lang['save_dbg_console'] = "Debug-Konsole speichern"; diff --git a/assets/snippets/ditto/lang/index.html b/assets/snippets/ditto/lang/index.html deleted file mode 100644 index cfb7d0fe18..0000000000 --- a/assets/snippets/ditto/lang/index.html +++ /dev/null @@ -1,2 +0,0 @@ -

Unauthorized access

-You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/ditto/lang/italian.inc.php b/assets/snippets/ditto/lang/italian.inc.php deleted file mode 100644 index 22930fe29c..0000000000 --- a/assets/snippets/ditto/lang/italian.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

[+pagetitle+]

-
di [+author+] il [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] potrebbe non contenere placeholders oppure non essere un nome valido di chunk o di file. Vi preghiamo di verificare.

"; -$_lang['missing_placeholders_tpl'] = 'Alcuni dei template non hanno tutti i placeholders, verificate i seguenti template:'; -$_lang['no_documents'] = '

Nessun documento trovato.

'; -$_lang['resource_array_error'] = 'Errore nell\'Array della Risorsa'; -$_lang['prev'] = "< Precedente"; -$_lang['next'] = "Successivo >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "La classe Ditto non è valida. Vi preghiamo di verificare."; -$_lang['none'] = "Nessuno"; -$_lang['edit'] = "Modifica"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Informazioni"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Campi"; -$_lang['templates'] = "Templates"; -$_lang['filters'] = "Filtri"; -$_lang['prefetch_data'] = "Dati Precaricati"; -$_lang['retrieved_data'] = "Dati Caricati"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parametri"; -$_lang['basic_info'] = "Informazioni di base"; -$_lang['document_info'] = "Informazioni sul Documento"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Versione"; -$_lang['summarize'] = "Riepiloga"; -$_lang['total'] = "Totale"; -$_lang['sortBy'] = "Ordina per"; -$_lang['sortDir'] = "Direzione ordinamento"; -$_lang['start'] = "Inizio"; -$_lang['stop'] = "Fine"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "IDs Selezionate"; -$_lang['ditto_IDs_all'] = "Tutte le IDs"; -$_lang['open_dbg_console'] = "Apri la Console di Debug"; -$_lang['save_dbg_console'] = "Salva la Console di Debug"; diff --git a/assets/snippets/ditto/lang/japanese-utf8.inc.php b/assets/snippets/ditto/lang/japanese-utf8.inc.php deleted file mode 100755 index f9d27e1ebe..0000000000 --- a/assets/snippets/ditto/lang/japanese-utf8.inc.php +++ /dev/null @@ -1,53 +0,0 @@ -[+pagetitle+]
'; -$_lang["bad_tpl"] = "

&[+tpl+]
指定したDittoテンプレート(チャンク)にプレースホルダが含まれていません。上記のテンプレートの内容を確認してください。

"; -$_lang['missing_placeholders_tpl'] = 'Dittoテンプレートに含まれるプレースホルダに問題があります。'; -$_lang['no_documents'] = '

記事はありません。

'; -$_lang['resource_array_error'] = 'リソース配列エラー'; -$_lang['prev'] = "< 戻る"; -$_lang['next'] = "次へ >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "Dittoクラスが不正です。classesディレクトリ内のファイルを確認してください。"; -$_lang['none'] = "なし"; -$_lang['edit'] = "編集"; -$_lang['dateFormat'] = "%Y/%m/%d %H:%M"; - -// Debug Tab Names -$_lang['info'] = "情報"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "フィールド"; -$_lang['templates'] = "テンプレート"; -$_lang['filters'] = "フィルタ"; -$_lang['prefetch_data'] = "先読みデータ"; -$_lang['retrieved_data'] = "取得済みデータ"; - -// Debug Text -$_lang['placeholders'] = "プレースホルダ"; -$_lang['params'] = "パラメータ"; -$_lang['basic_info'] = "基本情報"; -$_lang['document_info'] = "ドキュメント情報"; -$_lang['debug'] = "デバッグ"; -$_lang['version'] = "バージョン"; -$_lang['summarize'] = "出力件数"; -$_lang['total'] = "総件数"; -$_lang['sortBy'] = "並び替えフィールド"; -$_lang['sortDir'] = "並び替え順"; -$_lang['start'] = "開始位置"; -$_lang['stop'] = "停止位置"; -$_lang['ditto_IDs'] = "ID"; -$_lang['ditto_IDs_selected'] = "選択済みID"; -$_lang['ditto_IDs_all'] = "全てのID"; -$_lang['open_dbg_console'] = "デバッグコンソールを開く"; -$_lang['save_dbg_console'] = "デバッグコンソールを保存"; diff --git a/assets/snippets/ditto/lang/nederlands.inc.php b/assets/snippets/ditto/lang/nederlands.inc.php deleted file mode 100755 index 952be7f384..0000000000 --- a/assets/snippets/ditto/lang/nederlands.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

[+pagetitle+]

-
door [+author+] op [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] bevat geen placeholders of is een ongeldige chunk naam, code blok, of bestandsnaam. Controleer dit a.u.b.

"; -$_lang['missing_placeholders_tpl'] = 'In een van je Ditto templates ontbreken placeholders, bekijk de onderstaande template om dit te corrigeren:'; -$_lang['no_documents'] = '

Geen documenten gevonden.

'; -$_lang['resource_array_error'] = 'Resource Array Error'; -$_lang['prev'] = "< Vorige"; -$_lang['next'] = "Volgende >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "De Ditto class is ongeldig. Controleer dit a.u.b."; -$_lang['none'] = "Geen"; -$_lang['edit'] = "Wijzig"; -$_lang['dateFormat'] = "%d-%m-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Info"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Velden"; -$_lang['templates'] = "Sjablonen"; -$_lang['filters'] = "Filters"; -$_lang['prefetch_data'] = "Prefetch data"; -$_lang['retrieved_data'] = "Opgehaalde data"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parameters"; -$_lang['basic_info'] = "Basis info"; -$_lang['document_info'] = "Document info"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Versie"; -$_lang['summarize'] = "Overzicht"; -$_lang['total'] = "Totaal"; -$_lang['sortBy'] = "Gesorteerd op"; -$_lang['sortDir'] = "Sorteer richting"; -$_lang['start'] = "Start"; -$_lang['stop'] = "Stop"; -$_lang['ditto_IDs'] = "ID's"; -$_lang['ditto_IDs_selected'] = "Geselecteerde ID's"; -$_lang['ditto_IDs_all'] = "Alle ID's"; -$_lang['open_dbg_console'] = "Debug Console openen"; -$_lang['save_dbg_console'] = "Debug Console opslaan"; diff --git a/assets/snippets/ditto/lang/persian.inc.php b/assets/snippets/ditto/lang/persian.inc.php deleted file mode 100755 index 95424c94b1..0000000000 --- a/assets/snippets/ditto/lang/persian.inc.php +++ /dev/null @@ -1,59 +0,0 @@ - -

[+pagetitle+]

-
توسط [+author+] در [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] یا حامل هیچ نگهدار محتوایی نیست یا اینکه اسم چانک یا, مجموع کد, یا اسم فایل اشتباه است. لطفا آنرا مرور کنید.

"; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

پرونده ای یافت نشد.

'; -$_lang['resource_array_error'] = 'خطای ردیف منابع'; -$_lang['prev'] = "< قبلی"; -$_lang['next'] = "بعدی >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2007"; -$_lang['invalid_class'] = "کلاس دیتتو صحیح نیست. لطفا مرور کنید."; -$_lang['none'] = "هیچکدام"; -$_lang['edit'] = "ویرایش"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "اطلاعات"; -$_lang['modx'] = "مادایکس"; -$_lang['fields'] = "فیلدها"; -$_lang['templates'] = "قالبها"; -$_lang['filters'] = "فیلترها"; -$_lang['prefetch_data'] = "پیش دریافت داده"; -$_lang['retrieved_data'] = "بازخوانی داده"; - -// Debug Text -$_lang['placeholders'] = "نگهدار محتوایی"; -$_lang['params'] = "پارامترها"; -$_lang['basic_info'] = "اطلاعات پایه"; -$_lang['document_info'] = "اطلاعات پرونده"; -$_lang['debug'] = "دیباگ"; -$_lang['version'] = "نسخه"; -$_lang['summarize'] = "خلاصه"; -$_lang['total'] = "مجموع"; -$_lang['sortBy'] = "ردیف با"; -$_lang['sortDir'] = "جهت ردیف"; -$_lang['start'] = "شروع"; -$_lang['stop'] = "ایست"; -$_lang['ditto_IDs'] = "ردیفها"; -$_lang['ditto_IDs_selected'] = "ردیفهای انتخابی"; -$_lang['ditto_IDs_all'] = "همه ی ردیفها"; -$_lang['open_dbg_console'] = "بازکردن پیشخوان دیباگ"; -$_lang['save_dbg_console'] = "ذخیره ی پیشخوان دیباگ"; diff --git a/assets/snippets/ditto/lang/polish-utf8.inc.php b/assets/snippets/ditto/lang/polish-utf8.inc.php deleted file mode 100644 index 755d95099b..0000000000 --- a/assets/snippets/ditto/lang/polish-utf8.inc.php +++ /dev/null @@ -1,59 +0,0 @@ - -

[+pagetitle+]

-
dodane [+date+] przez [+author+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] albo nie zawiera żadnych placeholderów, albo nie jest prawidłową nazwą chunka, blokiem kodu lub nazwą pliku.

"; -$_lang['missing_placeholders_tpl'] = 'W jednym z szablonów Ditto występują brakujące placeholdery, przejrzyj poniższy szablon:'; -$_lang['no_documents'] = '

Brak dokumentów do wyświetlenia.

'; -$_lang['resource_array_error'] = 'Błąd Tablicy Zasobów'; -$_lang['prev'] = "< Poprzednie"; -$_lang['next'] = "Następne >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2006"; -$_lang['invalid_class'] = "Klasa Ditto jest nieprawidłowa."; -$_lang['none'] = "Brak"; -$_lang['edit'] = "Edytuj"; -$_lang['dateFormat'] = "%d.%b.%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Info"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Pola"; -$_lang['templates'] = "Szablony"; -$_lang['filters'] = "Filtry"; -$_lang['prefetch_data'] = "Wstępnie pobierz dane"; -$_lang['retrieved_data'] = "Pobrane dane"; - -// Debug Text -$_lang['placeholders'] = "Placeholdery"; -$_lang['params'] = "Parametry"; -$_lang['basic_info'] = "Podstawowe informacje"; -$_lang['document_info'] = "Informacje o dokumencie"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Wersja"; -$_lang['summarize'] = "Podsumuj"; -$_lang['total'] = "W sumie"; -$_lang['sortBy'] = "Sortuj po"; -$_lang['sortDir'] = "Kierunek sortowania"; -$_lang['start'] = "Początek"; -$_lang['stop'] = "Zatrzymaj"; -$_lang['ditto_IDs'] = "Numery ID"; -$_lang['ditto_IDs_selected'] = "Wybrane numery ID"; -$_lang['ditto_IDs_all'] = "Wszystkie numery ID"; -$_lang['open_dbg_console'] = "Otwórz konsolę debugowania"; -$_lang['save_dbg_console'] = "Zapisz konsolę debugowania"; diff --git a/assets/snippets/ditto/lang/portuguese-br.inc.php b/assets/snippets/ditto/lang/portuguese-br.inc.php deleted file mode 100644 index a3dfbe952e..0000000000 --- a/assets/snippets/ditto/lang/portuguese-br.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

[+pagetitle+]

-
by [+author+] on [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] não contém nenhum placeholder ou é um nome de chunk, bloco de código ou ficheiro inválido. Verifique o nome.

"; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

Nenhum documento encontrado.

'; -$_lang['resource_array_error'] = 'Erro de array de Recursos.'; -$_lang['prev'] = "< Anterior"; -$_lang['next'] = "Próximo >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2007"; -$_lang['invalid_class'] = "A class do Ditto é inválida. Verifique-a."; -$_lang['none'] = "Nenhum"; -$_lang['edit'] = "Editar"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Informações"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Campos"; -$_lang['templates'] = "Modelos (Templates)"; -$_lang['filters'] = "Filtros"; -$_lang['prefetch_data'] = "Antecipar (Prefetch) Dados"; -$_lang['retrieved_data'] = "Dados obtidos"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parâmetros"; -$_lang['basic_info'] = "Informações básicas"; -$_lang['document_info'] = "Informações do Documento"; -$_lang['debug'] = "Correcção de erros (Debug)"; -$_lang['version'] = "Versão"; -$_lang['summarize'] = "Sumarizar"; -$_lang['total'] = "Total"; -$_lang['sortBy'] = "Ordenar por"; -$_lang['sortDir'] = "Direcção ordenação"; -$_lang['start'] = "Início"; -$_lang['stop'] = "Parar"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "IDs Seleccionados"; -$_lang['ditto_IDs_all'] = "Todos os IDs"; -$_lang['open_dbg_console'] = "Abrir a consola de correcção de rros (Debug)"; -$_lang['save_dbg_console'] = "Salvar a consola de correcção de erros (Debug)"; diff --git a/assets/snippets/ditto/lang/portuguese.inc.php b/assets/snippets/ditto/lang/portuguese.inc.php deleted file mode 100644 index a3dfbe952e..0000000000 --- a/assets/snippets/ditto/lang/portuguese.inc.php +++ /dev/null @@ -1,58 +0,0 @@ - -

[+pagetitle+]

-
by [+author+] on [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] não contém nenhum placeholder ou é um nome de chunk, bloco de código ou ficheiro inválido. Verifique o nome.

"; -$_lang['missing_placeholders_tpl'] = 'One of your Ditto templates are missing placeholders, please check the template below:'; -$_lang['no_documents'] = '

Nenhum documento encontrado.

'; -$_lang['resource_array_error'] = 'Erro de array de Recursos.'; -$_lang['prev'] = "< Anterior"; -$_lang['next'] = "Próximo >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2007"; -$_lang['invalid_class'] = "A class do Ditto é inválida. Verifique-a."; -$_lang['none'] = "Nenhum"; -$_lang['edit'] = "Editar"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Informações"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Campos"; -$_lang['templates'] = "Modelos (Templates)"; -$_lang['filters'] = "Filtros"; -$_lang['prefetch_data'] = "Antecipar (Prefetch) Dados"; -$_lang['retrieved_data'] = "Dados obtidos"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parâmetros"; -$_lang['basic_info'] = "Informações básicas"; -$_lang['document_info'] = "Informações do Documento"; -$_lang['debug'] = "Correcção de erros (Debug)"; -$_lang['version'] = "Versão"; -$_lang['summarize'] = "Sumarizar"; -$_lang['total'] = "Total"; -$_lang['sortBy'] = "Ordenar por"; -$_lang['sortDir'] = "Direcção ordenação"; -$_lang['start'] = "Início"; -$_lang['stop'] = "Parar"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "IDs Seleccionados"; -$_lang['ditto_IDs_all'] = "Todos os IDs"; -$_lang['open_dbg_console'] = "Abrir a consola de correcção de rros (Debug)"; -$_lang['save_dbg_console'] = "Salvar a consola de correcção de erros (Debug)"; diff --git a/assets/snippets/ditto/lang/russian-UTF8.inc.php b/assets/snippets/ditto/lang/russian-UTF8.inc.php deleted file mode 100755 index 47d4217a85..0000000000 --- a/assets/snippets/ditto/lang/russian-UTF8.inc.php +++ /dev/null @@ -1,60 +0,0 @@ - -

[+pagetitle+]

-
Автор: [+author+] от [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] или не содержит каких-либо плейсхолдеров, или является неверным названием чанка, блоком кода или именем файла. Пожалуйста, проверьте его.

"; -$_lang['missing_placeholders_tpl'] = 'В одном из шаблонов Ditto (чанков) недостает тегов, проверьте следующий шаблон:'; -$_lang['no_documents'] = '

Записей не найдено.

'; -$_lang['resource_array_error'] = 'Ошибка массива ресурсов'; -$_lang['prev'] = "< назад"; -$_lang['next'] = "далее >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2009"; -$_lang['invalid_class'] = "Неверный класс Ditto. Пожалуйста, проверьте его."; -$_lang['none'] = "Нет"; -$_lang['edit'] = "Редактировать"; -$_lang['dateFormat'] = "%d.%b.%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Информация"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Поля"; -$_lang['templates'] = "Шаблоны"; -$_lang['filters'] = "Фильтры"; -$_lang['prefetch_data'] = "Предварительные данные"; -$_lang['retrieved_data'] = "Полученные данные"; - -// Debug Text -$_lang['placeholders'] = "Плейсхолдеры"; -$_lang['params'] = "Параметры"; -$_lang['basic_info'] = "Основная информация"; -$_lang['document_info'] = "Информация о ресурсе"; -$_lang['debug'] = "Отладка"; -$_lang['version'] = "Версия"; -$_lang['summarize'] = "Число выводимых записей (summarize):"; -$_lang['total'] = "Всего в базе данных:"; -$_lang['sortBy'] = "Сортировать по (sortBy):"; -$_lang['sortDir'] = "Порядок сортировки (sortDir):"; -$_lang['start'] = "Начать с"; -$_lang['stop'] = "Закончить на"; -$_lang['ditto_IDs'] = "ID"; -$_lang['ditto_IDs_selected'] = "Выбранные ID"; -$_lang['ditto_IDs_all'] = "Все ID"; -$_lang['open_dbg_console'] = "Открыть консоль отладки"; -$_lang['save_dbg_console'] = "Скачать отчет отладки"; diff --git a/assets/snippets/ditto/lang/russian.inc.php b/assets/snippets/ditto/lang/russian.inc.php deleted file mode 100755 index 2d321153ae..0000000000 --- a/assets/snippets/ditto/lang/russian.inc.php +++ /dev/null @@ -1,6 +0,0 @@ -' . $contents); -?> diff --git a/assets/snippets/ditto/lang/spanish.inc.php b/assets/snippets/ditto/lang/spanish.inc.php deleted file mode 100755 index 1cbada1e69..0000000000 --- a/assets/snippets/ditto/lang/spanish.inc.php +++ /dev/null @@ -1,59 +0,0 @@ - -

[+pagetitle+]

-
por [+author+] el [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] no contiene ninguna placeholders, no es el nombre del chunk, un bloque del código o es un nombre de fichero inválido. Comprobarlo por favor.

"; -$_lang['missing_placeholders_tpl'] = 'Falta "placeholders" en una de las plantillas de Ditto, por favor revise la siguiente plantilla:'; -$_lang['no_documents'] = '

No se encontró ningún documento.

'; -$_lang['resource_array_error'] = 'Error del recurso Array'; -$_lang['prev'] = "< Anterior"; -$_lang['next'] = "Siguiente >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2007"; -$_lang['invalid_class'] = "La clase(class) del DITTO es inválida. Comprobarla por favor."; -$_lang['none'] = "Ninguno"; -$_lang['edit'] = "Editar"; -$_lang['dateFormat'] = "%d-%b-%y %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Info"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Campos"; -$_lang['templates'] = "Plantillas"; -$_lang['filters'] = "Filtros"; -$_lang['prefetch_data'] = "Datos de precarga"; -$_lang['retrieved_data'] = "Datos de Retreived"; - -// Debug Text -$_lang['placeholders'] = "Placeholders"; -$_lang['params'] = "Parámetros"; -$_lang['basic_info'] = "Info Básica"; -$_lang['document_info'] = "Info del documento"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Versión"; -$_lang['summarize'] = "Resumen"; -$_lang['total'] = "Total"; -$_lang['sortBy'] = "Ordenar Por"; -$_lang['sortDir'] = "Ordenar Dirección"; -$_lang['start'] = "Empezar"; -$_lang['stop'] = "Parar"; -$_lang['ditto_IDs'] = "IDs"; -$_lang['ditto_IDs_selected'] = "Seleccionar IDs"; -$_lang['ditto_IDs_all'] = "Todos los IDs"; -$_lang['open_dbg_console'] = "Abrir Consola de Eliminar errores(Debug)"; -$_lang['save_dbg_console'] = "Guardar Consola de Eliminar errores(Debug)"; diff --git a/assets/snippets/ditto/lang/svenska-utf8.inc.php b/assets/snippets/ditto/lang/svenska-utf8.inc.php deleted file mode 100755 index cd3ff20840..0000000000 --- a/assets/snippets/ditto/lang/svenska-utf8.inc.php +++ /dev/null @@ -1,59 +0,0 @@ - -

[+pagetitle+]

-
av [+author+] den [+date+]
-
[+introtext+]
- -'; -$_lang["bad_tpl"] = "

&[+tpl+] innehåller inga platshållare eller också är det ett ogiltigt chunk-namn, kodblock eller filnamn. Kontrollera det.

"; -$_lang['missing_placeholders_tpl'] = 'En av dina Ditto-mallar saknar platshållare. Kontrollera nedanstående mall:'; -$_lang['no_documents'] = '

Inga dokument hittades.

'; -$_lang['resource_array_error'] = 'Fel i resursfältet'; -$_lang['prev'] = "< Föregående"; -$_lang['next'] = "Nästa >"; -$_lang['button_splitter'] = "|"; -$_lang['default_copyright'] = "[(site_name)] 2007"; -$_lang['invalid_class'] = "Ditto-klassen är ogiltig. Kontrollera den."; -$_lang['none'] = "Inga"; -$_lang['edit'] = "Redigera"; -$_lang['dateFormat'] = "%y-%b-%d %H:%M"; - -// Debug Tab Names -$_lang['info'] = "Information"; -$_lang['modx'] = "MODX"; -$_lang['fields'] = "Fält"; -$_lang['templates'] = "Mallar"; -$_lang['filters'] = "Filter"; -$_lang['prefetch_data'] = "Förhämtad data"; -$_lang['retrieved_data'] = "Hämtad data"; - -// Debug Text -$_lang['placeholders'] = "Platshållare"; -$_lang['params'] = "Parametrar"; -$_lang['basic_info'] = "Grundläggande information"; -$_lang['document_info'] = "Dokumentinformation"; -$_lang['debug'] = "Debug"; -$_lang['version'] = "Version"; -$_lang['summarize'] = "Summera"; -$_lang['total'] = "Totalt"; -$_lang['sortBy'] = "Sortera efter"; -$_lang['sortDir'] = "Sorteringsriktning"; -$_lang['start'] = "Starta"; -$_lang['stop'] = "Stoppa"; -$_lang['ditto_IDs'] = "IDn"; -$_lang['ditto_IDs_selected'] = "Valda IDn"; -$_lang['ditto_IDs_all'] = "Alla IDn"; -$_lang['open_dbg_console'] = "Öppna Debugkonsolen"; -$_lang['save_dbg_console'] = "Spara Debugkonsolen"; diff --git a/assets/snippets/ditto/lang/svenska.inc.php b/assets/snippets/ditto/lang/svenska.inc.php deleted file mode 100755 index 7a22822e19..0000000000 --- a/assets/snippets/ditto/lang/svenska.inc.php +++ /dev/null @@ -1,6 +0,0 @@ -' . $contents); -?> \ No newline at end of file diff --git a/assets/snippets/ditto/snippet.ditto.php b/assets/snippets/ditto/snippet.ditto.php deleted file mode 100644 index 6d92979636..0000000000 --- a/assets/snippets/ditto/snippet.ditto.php +++ /dev/null @@ -1,1090 +0,0 @@ -config['base_path'].ltrim($ditto_base,'/'); -else $ditto_base = str_replace('\\','/',__DIR__) . '/'; - -$ditto_params =& $modx->event->params; - -/* - Param: ditto_base - - Purpose: - Location of Ditto files - - Options: - Any valid folder location containing the Ditto source code with a trailing slash - - Default: - [(base_path)]assets/snippets/ditto/ -*/ -$dittoID = (isset($id)) ? $id.'_' : ''; -$GLOBALS['dittoID'] = $dittoID; -/* - Param: id - - Purpose: - Unique ID for this Ditto instance for connection with other scripts (like Reflect) and unique URL parameters - - Options: - Any combination of characters a-z, underscores, and numbers 0-9 - - Note: - This is case sensitive - - Default: - '' - blank -*/ -if(!isset($language)) $language = $modx->config['manager_language']; -if (!is_file("{$ditto_base}lang/{$language}.inc.php")) { - $language ='english'; -} -/* - Param: language - - Purpose: - language for defaults, debug, and error messages - - Options: - Any language name with a corresponding file in the &ditto_base/lang folder - - Default: - 'english' -*/ -$format = (isset($format)) ? strtolower($format) : 'html' ; -/* - Param: format - - Purpose: - Output format to use - - Options: - - 'html' - - 'json' - - 'xml' - - 'atom' - - 'rss' - - Default: - 'html' -*/ -$config = (isset($config)) ? $config : 'default'; -/* - Param: config - - Purpose: - Load a custom configuration - - Options: - 'default' - default blank config file - CONFIG_NAME - Other configs installed in the configs folder or in any folder within the MODX base path via @FILE - - Default: - 'default' - - Related: - - -*/ -$debug = isset($debug)? $debug : 0; -/* - Param: debug - - Purpose: - Output debugging information - - Options: - 0 - off - 1 - on - - Default: - 0 - off - - Related: - - -*/ -$phx = (isset($phx))? $phx : 1; -/* - Param: phx - - Purpose: - Use PHx formatting - - Options: - 0 - off - 1 - on - - Default: - 1 - on -*/ -$extenders = isset($extenders) ? explode(',',$extenders) : array(); -/* - Param: extenders - - Purpose: - Load an extender which adds functionality to Ditto - - Options: - Any extender in the extenders folder or in any folder within the MODX base path via @FILE - - Default: - [NULL] - - Related: - - -*/ - // Variable: extenders - // Array that can be added to by configs or formats to load that extender - -$placeholders = array(); - // Variable: placeholders - // Initialize custom placeholders array for configs or extenders to add to - -$filters = array('custom'=>array(),'parsed'=>array()); - // Variable: filters - // Holds both the custom filters array for configs or extenders to add to - // and the parsed filters array. To add to this array, use the following format - // (code) - // $filters['parsed'][] = array('name' => array('source'=>$source,'value'=>$value,'mode'=>$mode)); - // $filters['custom'][] = array('source','callback_function'); - -$orderBy = array('parsed'=>array(),'custom'=>array(),'unparsed'=>(isset($orderBy) ? $orderBy : '')); - // Variable: orderBy - // An array that holds all criteria to sort the result set by. - // Note that using a custom sort will disable all other sorting. - // (code) - // $orderBy['parsed'][] = array('sortBy','sortDir'); - // $orderBy['custom'][] = array('sortBy','callback_function'); - -//---Includes-------------------------------------------------------- // - -$files = array ( - 'base_language' => "{$ditto_base}lang/english.inc.php", - 'language' => "{$ditto_base}lang/{$language}.inc.php", - 'main_class' => "{$ditto_base}classes/ditto.class.inc.php", - 'template_class' => "{$ditto_base}classes/template.class.inc.php", - 'filter_class' => "{$ditto_base}classes/filter.class.inc.php", - 'format' => "{$ditto_base}formats/$format.format.inc.php", - 'config' => "{$ditto_base}configs/default.config.php", - 'user_config' => (substr($config, 0, 5) != '@FILE') ? "{$ditto_base}configs/{$config}.config.php" : $modx->config['base_path'].trim(substr($config, 5)) -); - -if ($phx == 1 && !$modx->config['enable_filter']) { - $files['prePHx_class'] = $ditto_base.'classes/phx.pre.class.inc.php'; -} -if (isset($randomize)) { - $files['randomize_class'] = $ditto_base.'classes/random.class.inc.php'; -} -if ($debug == 1) { - $files['modx_debug_class'] = $ditto_base."debug/modxDebugConsole.class.php"; - $files['debug_class'] = $ditto_base."classes/debug.class.inc.php"; - $files['debug_templates'] = $ditto_base."debug/debug.templates.php"; -} - -$files = array_unique($files); -foreach ($files as $filename => $filevalue) { - if (is_file($filevalue) && strpos($filename,'class')!==false) { - include_once($filevalue); - } elseif (is_file($filevalue)) { - include($filevalue); - } elseif ($filename == 'language') { - $modx->logEvent(1, 3, 'Language file does not exist Please check: ' . $filevalue, 'Ditto ' . $ditto_version); - return 'Language file does not exist Please check: ' . $filevalue; - } else { - $modx->logEvent(1, 3, $filevalue . ' ' . $_lang['file_does_not_exist'], 'Ditto ' . $ditto_version); - return $filevalue . ' ' . $_lang['file_does_not_exist']; - } -} - -//---Initiate Class-------------------------------------------------- // -if (class_exists('ditto')) { - $dbg_templates = (isset($dbg_templates)) ? $dbg_templates : NULL; - $ditto = new ditto($dittoID, $format, $_lang, $dbg_templates); - // create a new Ditto instance in the specified format and language with the requested debug level -} else { - $modx->logEvent(1,3,$_lang['invalid_class'],'Ditto '.$ditto_version); - return $_lang['invalid_class']; -} - -//---Initiate Extenders---------------------------------------------- // -if (isset($tagData)) { - $extenders[] = 'tagging'; -} -if(count($extenders) > 0) { - $extenders = array_unique($extenders); - foreach ($extenders as $extender) { - if(substr($extender, 0, 5) != '@FILE') { - $extender_path = "{$ditto_base}extenders/{$extender}.extender.inc.php"; - } else { - $extender_path = $modx->config['base_path'].trim(substr($extender, 5)); - } - - if (file_exists($extender_path)){ - include($extender_path); - } else { - $modx->logEvent(1, 3, $extender . ' ' . $_lang['extender_does_not_exist'], 'Ditto '.$ditto_version); - return $extender . ' ' . $_lang['extender_does_not_exist']; - } - } -} - -//---Parameters------------------------------------------------------- /* -if (isset($startID) && !isset($parents)) {$parents = $startID;} -if (isset($summarize)) {$display = $summarize;} -if (isset($limit)) {$queryLimit = $limit;} -if (isset($sortBy) || isset($sortDir) || !$orderBy['unparsed']) { - $sortDir = isset($sortDir) ? strtoupper($sortDir) : 'DESC'; - $sortBy = isset($sortBy) ? $sortBy : 'createdon'; - $orderBy['parsed'][]=array($sortBy,$sortDir); -} - // Allow backwards compatibility - -$idType = isset($documents) ? 'documents' : 'parents'; - // Variable: idType - // type of IDs provided; can be either parents or documents - -$parents = isset($parents) ? $ditto->cleanIDs($parents) : $modx->documentIdentifier; - -/* - Param: parents - - Purpose: - IDs of containers for Ditto to retrieve their children to &depth depth - - Options: - Any valid MODX document marked as a container - - Default: - Current MODX Document - - Related: - - - - -*/ -$documents = isset($documents) ? $ditto->cleanIDs($documents) : false; -/* - Param: documents - - Purpose: - IDs of documents for Ditto to retrieve - - Options: - Any valid MODX document marked as a container - - Default: - None - - Related: - - -*/ - -$IDs = ($idType == 'parents') ? $parents : $documents; - // Variable: IDs - // Internal variable which holds the set of IDs for Ditto to fetch - -$depth = isset($depth) ? $depth : 1; -/* - Param: depth - - Purpose: - Number of levels deep to retrieve documents - - Options: - Any number greater than or equal to 1 - 0 - infinite depth - - Default: - 1 - - Related: - - -*/ -$paginate = isset($paginate)? $paginate : 0; -/* - Param: paginate - - Purpose: - Paginate the results set into pages of &display length. - Use &total to limit the number of documents retreived. - - Options: - 0 - off - 1 - on - - Default: - 0 - off - - Related: - - - - - - -*/ -$dateSource = isset($dateSource) ? $dateSource : 'createdon'; -/* - Param: dateSource - - Purpose: - Source of the [+date+] placeholder - - Options: - # - Any UNIX timestamp from MODX fields or TVs such as createdon, pub_date, or editedon - - Default: - 'createdon' - - Related: - - -*/ -$dateFormat = isset($dateFormat)? $dateFormat : $_lang['dateFormat']; -/* - Param: dateFormat - - Purpose: - Format the [+date+] placeholder in human readable form - - Options: - Any PHP valid strftime option - - Default: - [LANG] - - Related: - - -*/ -$display = isset($display) ? $display : 'all'; -/* - Param: display - - Purpose: - Number of documents to display in the results - - Options: - # - Any number - 'all' - All documents found - - Default: - 'all' - - Related: - - - - -*/ -$total = isset($total) ? $total : 'all'; -/* - Param: total - - Purpose: - Number of documents to retrieve - - Options: - # - Any number - 'all' - All documents found - - Default: - 'all' - All documents found - - Related: - - - - -*/ -$showPublishedOnly = isset($showPublishedOnly) ? $showPublishedOnly : 1; -/* - Param: showPublishedOnly - - Purpose: - Show only published documents - - Options: - 0 - show only unpublished documents - 1 - show both published and unpublished documents - - Default: - 1 - show both published and unpublished documents - - Related: - - - - - - - - -*/ -$showInMenuOnly = isset($showInMenuOnly) ? $showInMenuOnly : 0; -/* - Param: showInMenuOnly - - Purpose: - Show only documents visible in the menu - - Options: - 0 - show all documents - 1 - show only documents with the show in menu flag checked - - Default: - 0 - show all documents - - Related: - - - - - - -*/ -$hideFolders = isset($hideFolders)? $hideFolders : 0; -/* - Param: hideFolders - - Purpose: - Don't show folders in the returned results - - Options: - 0 - keep folders - 1 - remove folders - - Default: - 0 - keep folders - - Related: - - - - - - -*/ -$hidePrivate = isset($hidePrivate)? $hidePrivate : 1; -/* - Param: hidePrivate - - Purpose: - Don't show documents the guest or user does not have permission to see - - Options: - 0 - show private documents - 1 - hide private documents - - Default: - 1 - hide private documents - - Related: - - - - - - -*/ -$seeThruUnpub = (isset($seeThruUnpub))? $seeThruUnpub : 1 ; -/* - Param: seeThruUnpub - - Purpose: - See through unpublished folders to retrive their children - Used when depth is greater than 1 - - Options: - 0 - off - 1 - on - - Default: - 0 - off - - Related: - - - - - - -*/ -$queryLimit = (isset($queryLimit))? $queryLimit : ''; -/* - Param: queryLimit - - Purpose: - Number of documents to retrieve from the database, same as MySQL LIMIT - - Options: - # - Any number - 0 - automatic - - Default: - 0 - automatic - - Related: - - -*/ -$where = (isset($where))? $where : ''; -/* - Param: where - - Purpose: - Custom MySQL WHERE statement - - Options: - A valid MySQL WHERE statement using only document object items (no TVs) - - Default: - [NULL] - - Related: - - -*/ -$noResults = isset($noResults)? $ditto->getParam($noResults,'no_documents') : $_lang['no_documents']; -/* - Param: noResults - - Purpose: - Text or chunk to display when there are no results - - Options: - Any valid chunk name or text - - Default: - [LANG] -*/ -$removeChunk = isset($removeChunk) ? explode(',',$removeChunk) : false; -/* - Param: removeChunk - - Purpose: - Name of chunks to be stripped from content separated by commas - - Commonly used to remove comments - - Options: - Any valid chunkname that appears in the output - - Default: - [NULL] -*/ -$hiddenFields = isset($hiddenFields) ? explode(',',$hiddenFields) : false; -/* - Param: hiddenFields - - Purpose: - Allow Ditto to retrieve fields its template parser cannot handle such as nested placeholders and [*fields*] - - Options: - Any valid MODX fieldnames or TVs comma separated - - Default: - [NULL] -*/ -$offset = isset($start) ? $start : 0; -$start = (isset($_GET[$dittoID.'start'])) ? intval($_GET[$dittoID.'start']) : 0; -/* - Param: start - - Purpose: - Number of documents to skip in the results - - Options: - Any number - - Default: - 0 -*/ -$globalFilterDelimiter = isset($globalFilterDelimiter) ? $globalFilterDelimiter : '|'; -/* - Param: globalFilterDelimiter - - Purpose: - Filter delimiter used to separate filters in the filter string - - Options: - Any character not used in the filters - - Default: - '|' - - Related: - - - - - - -*/ - -$localFilterDelimiter = isset($localFilterDelimiter) ? $localFilterDelimiter : ','; -/* - Param: localFilterDelimiter - - Purpose: - Delimiter used to separate individual parameters within each filter string - - Options: - Any character not used in the filter itself - - Default: - ',' - - Related: - - - - - - -*/ -$filters['custom'] = isset($cFilters) ? array_merge($filters['custom'],$cFilters) : $filters['custom']; -$filters['parsed'] = isset($parsedFilters) ? array_merge($filters['parsed'],$parsedFilters) : $filters['parsed']; - // handle 2.0.0 compatibility -$filter = (isset($filter) || ($filters['custom'] != false) || ($filters['parsed'] != false)) ? $ditto->parseFilters($filter,$filters['custom'],$filters['parsed'],$globalFilterDelimiter,$localFilterDelimiter) : false; -/* - Param: filter - - Purpose: - Removes items not meeting a critera. Thus, if pagetitle == joe then it will be removed. - Use in the format field,criteria,mode with the comma being the local delimiter - - *Mode* *Meaning* - - 1 - != - 2 - == - 3 - < - 4 - > - 5 - <= - 6 - >= - 7 - Text not in field value - 8 - Text in field value - 9 - case insenstive version of #7 - 10 - case insenstive version of #8 - 11 - checks leading character of the field - - @EVAL: - @EVAL in filters works the same as it does in MODX exect it can only be used - with basic filtering, not custom filtering (tagging, etc). Make sure that - you return the value you wish Ditto to filter by and that the code is valid PHP. - - Default: - [NULL] - - Related: - - - - - - -*/ - -$randomize = (isset($randomize))? $randomize : 0; -/* - Param: randomize - - Purpose: - Randomize the order of the output - - Options: - 0 - off - 1 - on - Any MODX field or TV for weighted random - - Default: - 0 - off -*/ -$save = (isset($save))? $save : 0; -/* - Param: save - - Purpose: - Saves the ditto object and results set to placeholders - for use by other snippets - - Options: - 0 - off; returns output - 1 - remaining; returns output - 2 - all; - 3 - all; returns ph only - - Default: - 0 - off; returns output -*/ -$templates = array( - 'default' => '@CODE' . $_lang['default_template'], - 'base' => (isset($tpl)) ? $tpl : NULL, - 'alt' => (isset($tplAlt)) ? $tplAlt : NULL, - 'first' => (isset($tplFirst)) ? $tplFirst : NULL, - 'last' => (isset($tplLast)) ? $tplLast : NULL, - 'current' => (isset($tplCurrentDocument)) ? $tplCurrentDocument : NULL -); -/* - Param: tpl - - Purpose: - User defined chunk to format the documents - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Default: - [LANG] -*/ -/* - Param: tplAlt - - Purpose: - User defined chunk to format every other document - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Default: - &tpl -*/ -/* - Param: tplFirst - - Purpose: - User defined chunk to format the first document - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Default: - &tpl -*/ -/* - Param: tplLast - - Purpose: - User defined chunk to format the last document - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Default: - &tpl -*/ -/* - Param: tplCurrentDocument - - Purpose: - User defined chunk to format the current document - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Default: - &tpl -*/ -$orderBy = $ditto->parseOrderBy($orderBy,$randomize); -/* - Param: orderBy - - Purpose: - Sort the result set - - Options: - Any valid MySQL style orderBy statement - - Default: - createdon DESC -*/ -//-------------------------------------------------------------------- */ -$templates = $ditto->template->process($templates); - // parse the templates for TV's and store them for later use - -$ditto->setDisplayFields($ditto->template->fields,$hiddenFields); - // parse hidden fields - -$ditto->parseFields($placeholders,$seeThruUnpub,$dateSource,$randomize); - // parse the fields into the field array - -$documentIDs = $ditto->determineIDs($IDs, $idType, $ditto->fields['backend']['tv'], $orderBy, $depth, $showPublishedOnly, $seeThruUnpub, $hideFolders, $hidePrivate, $showInMenuOnly, $where, $dateSource, $queryLimit, $display, $filter,$paginate, $randomize); - // retrieves a list of document IDs that meet the criteria and populates the $resources array with them -$count = count($documentIDs); - // count the number of documents to be retrieved -$count = $count-$offset; - // handle the offset - -if ($count > 0) { - // if documents are returned continue with execution - - $total = ($total == 'all') ? $count : min($total,$count); - // set total equal to count if all documents are to be included - - $display = ($display == 'all') ? min($count,$total) : min($display,$total); - // allow show to use all option - - $stop = ($save != '1') ? min($total-$start,$display) : min($count,$total); - // set initial stop count - - if($paginate == 1) { - $max_paginate = isset($max_paginate)? $max_paginate : 50; - $max_previous = isset($max_previous)? $max_previous : 25; - $paginateAlwaysShowLinks = isset($paginateAlwaysShowLinks)? $paginateAlwaysShowLinks : 0; - /* - Param: paginateAlwaysShowLinks - - Purpose: - Determine whether or not to always show previous next links - - Options: - 0 - off - 1 - on - - Default: - 0 - off - - Related: - - - - - */ - $paginateSplitterCharacter = isset($paginateSplitterCharacter)? $paginateSplitterCharacter : $_lang['button_splitter']; - /* - Param: paginateSplitterCharacter - - Purpose: - Splitter to use if always show is disabled - - Options: - Any valid character - - Default: - [LANG] - - Related: - - - - - */ - $tplPaginatePrevious = isset($tplPaginatePrevious)? $ditto->template->fetch($tplPaginatePrevious) : '[+lang:previous+]'; - /* - Param: tplPaginatePrevious - - Purpose: - Template for the previous link - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Placeholders: - url - URL for the previous link - lang:previous - value of 'prev' from the language file - - Related: - - - - - */ - $tplPaginateNext = isset($tplPaginateNext)? $ditto->template->fetch($tplPaginateNext) : '[+lang:next+]'; - /* - Param: tplPaginateNext - - Purpose: - Template for the next link - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Placeholders: - url - URL for the next link - lang:next - value of 'next' from the language file - - Related: - - - - - */ - $tplPaginateNextOff = isset($tplPaginateNextOff)? $ditto->template->fetch($tplPaginateNextOff) : '[+lang:next+]'; - /* - Param: tplPaginateNextOff - - Purpose: - Template for the inside of the next link - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Placeholders: - lang:next - value of 'next' from the language file - - Related: - - - - - */ - $tplPaginatePreviousOff = isset($tplPaginatePreviousOff)? $ditto->template->fetch($tplPaginatePreviousOff) : '[+lang:previous+]'; - /* - Param: tplPaginatePreviousOff - - Purpose: - Template for the previous link when it is off - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Placeholders: - lang:previous - value of 'prev' from the language file - - Related: - - - - - */ - $tplPaginatePage = isset($tplPaginatePage)? $ditto->template->fetch($tplPaginatePage) : "[+page+]"; - /* - Param: tplPaginatePage - - Purpose: - Template for the page link - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Placeholders: - url - url for the page - page - number of the page - - Related: - - - - - */ - $tplPaginateCurrentPage = isset($tplPaginateCurrentPage)? $ditto->template->fetch($tplPaginateCurrentPage) : "[+page+]"; - /* - Param: tplPaginateCurrentPage - - Purpose: - Template for the current page link - - Options: - - Any valid chunk name - - Code via @CODE - - File via @FILE - - Placeholders: - page - number of the page - - Related: - - - - - */ - - $ditto->paginate($start, $stop, $total, $display, $tplPaginateNext, $tplPaginatePrevious, $tplPaginateNextOff, $tplPaginatePreviousOff, $tplPaginatePage, $tplPaginateCurrentPage, $paginateAlwaysShowLinks, $paginateSplitterCharacter, $max_paginate, $max_previous); - // generate the pagination placeholders - } - - $dbFields = $ditto->fields['display']['db']; - // get the database fields - $TVs = $ditto->fields['display']['tv']; - // get the TVs - if(isset($orderBy['parsed'][0][1])) { - switch($orderBy['parsed'][0][1]) { - case 'DESC': - $stop = ($ditto->prefetch === false) ? $stop + $start + $offset : $stop + $offset; - $start += $offset; - break; - case 'ASC': - $start += $offset; - $stop += $start; - break; - } - } - - if ($ditto->prefetch !== false) { - $documentIDs = array_slice($documentIDs,$start,$stop); - // set the document IDs equal to the trimmed array - $dbFields = array_diff($dbFields,$ditto->prefetch['fields']['db']); - // calculate the difference between the database fields and those already prefetched - $dbFields[] = 'id'; - // append id to the db fields array - $TVs = array_diff($TVs,$ditto->prefetch['fields']['tv']); - // calculate the difference between the tv fields and those already prefetched - $start = 0; - $stop = min($display,($queryLimit != 0) ? $queryLimit : $display,count($documentIDs)); - } else { - $queryLimit = ($queryLimit == 0) ? '' : $queryLimit; - } - - $resource = $ditto->getDocuments($documentIDs, $dbFields, $TVs, $orderBy, $showPublishedOnly, 0, $hidePrivate, $where, $queryLimit, $randomize, $dateSource); - // retrieves documents - $output = $header; - // initialize the output variable and send the header - - if ($resource) { - if ($randomize != '0' && $randomize != '1') { - $resource = $ditto->weightedRandom($resource,$randomize,$stop); - // randomize the documents - } - - $resource = array_values($resource); - - for ($x=$start;$x<$stop;$x++) { - $template = $ditto->template->determine($templates,$x,0,$stop,$resource[$x]['id']); - // choose the template to use and set the code of that template to the template variable - $renderedOutput = $ditto->render($resource[$x], $template, $removeChunk, $dateSource, $dateFormat, $placeholders,$phx,abs($start-$x),$stop); - // render the output using the correct template, in the correct format and language - $modx->setPlaceholder($dittoID.'item['.abs($start-$x).']',$renderedOutput); - /* - Placeholder: item[x] - - Content: - Individual items rendered output - */ - $output .= $renderedOutput; - // send the rendered output to the buffer - } - } else { - $output .= $ditto->noResults($noResults,$paginate); - // if no documents are found return a no documents found string - } - $output .= $footer; - // send the footer - - // --------------------------------------------------- - // Save Object - // --------------------------------------------------- - - if($save) { - $modx->setPlaceholder($dittoID.'ditto_object', $ditto); - $modx->setPlaceholder($dittoID.'ditto_resource', ($save == '1') ? array_slice($resource,$display) : $resource); - } -} else { - $output = $header.$ditto->noResults($noResults,$paginate).$footer; -} -// --------------------------------------------------- -// Handle Debugging -// --------------------------------------------------- - -if ($debug == 1) { - if (!isset($_GET['ditto_'.$dittoID.'debug'])) { - $_SESSION['ditto_debug_$dittoID'] = $ditto->debug->render_popup($ditto, $ditto_base, $ditto_version, $ditto_params, $documentIDs, array('db'=>$dbFields,'tv'=>$TVs), $display, $templates, $orderBy, $start, $stop, $total,$filter,$resource); - } - if (isset($_GET['ditto_'.$dittoID.'debug'])) { - switch ($_GET['ditto_'.$dittoID.'debug']) { - case 'open' : - exit($_SESSION['ditto_debug_$dittoID']); - break; - case 'save' : - $ditto->debug->save($_SESSION['ditto_debug_$dittoID'],'ditto'.strtolower($ditto_version).'_debug_doc'.$modx->documentIdentifier.'.html'); - break; - } - } else { - $output = $ditto->debug->render_link($dittoID,$ditto_base).$output; - } -} -// outerTpl by Dmi3yy & Jako -if (isset($outerTpl) && $resource) { - $outerTpl = $ditto->template->fetch($outerTpl); - $output = str_replace(array('[+ditto+]', '[+wrapper+]'), $output, $outerTpl); -} - -return ($save != 3) ? $output : ''; \ No newline at end of file diff --git a/install/assets/snippets/ditto.tpl b/install/assets/snippets/ditto.tpl deleted file mode 100755 index 94992267cf..0000000000 --- a/install/assets/snippets/ditto.tpl +++ /dev/null @@ -1,15 +0,0 @@ -// Date: Sat, 4 Nov 2017 21:56:54 +0300 Subject: [PATCH 320/577] move eForm to Extras (https://github.com/extras-evolution/eForm) use FormLister --- assets/snippets/eform/docs/eform.htm | 450 ------ .../eform/docs/eform_example_events.htm | 360 ----- .../docs/eform_example_multiple_forms.htm | 337 ----- assets/snippets/eform/docs/eform_examples.htm | 298 ---- assets/snippets/eform/docs/eform_history.htm | 300 ---- .../snippets/eform/docs/example_2_form_1.gif | Bin 9437 -> 0 bytes .../snippets/eform/docs/example_2_form_2.gif | Bin 3184 -> 0 bytes assets/snippets/eform/docs/form1.gif | Bin 10676 -> 0 bytes assets/snippets/eform/docs/logo.png | Bin 17960 -> 0 bytes assets/snippets/eform/eform.inc.php | 1222 ----------------- assets/snippets/eform/index.html | 2 - assets/snippets/eform/lang/chinese.inc.php | 48 - assets/snippets/eform/lang/czech.inc.php | 48 - assets/snippets/eform/lang/danish.inc.php | 48 - assets/snippets/eform/lang/english.inc.php | 49 - assets/snippets/eform/lang/finnish.inc.php | 48 - .../snippets/eform/lang/francais-utf8.inc.php | 48 - assets/snippets/eform/lang/francais.inc.php | 6 - assets/snippets/eform/lang/german.inc.php | 49 - assets/snippets/eform/lang/index.html | 2 - assets/snippets/eform/lang/italian.inc.php | 48 - .../snippets/eform/lang/japanese-utf8.inc.php | 48 - .../eform/lang/nederlands-utf8.inc.php | 49 - assets/snippets/eform/lang/nederlands.inc.php | 6 - assets/snippets/eform/lang/persian.inc.php | 48 - assets/snippets/eform/lang/polish.inc.php | 48 - .../snippets/eform/lang/portuguese-br.inc.php | 48 - assets/snippets/eform/lang/portuguese.inc.php | 48 - .../snippets/eform/lang/russian-UTF8.inc.php | 49 - assets/snippets/eform/lang/russian.inc.php | 6 - .../snippets/eform/lang/spanish-utf8.inc.php | 48 - assets/snippets/eform/lang/spanish.inc.php | 6 - .../snippets/eform/lang/svenska-utf8.inc.php | 48 - assets/snippets/eform/lang/svenska.inc.php | 6 - assets/snippets/eform/lang/ukranian.inc.php | 48 - assets/snippets/eform/lang/ukranian.php | 47 - assets/snippets/eform/snippet.eform.php | 118 -- install/assets/snippets/eform.tpl | 15 - 38 files changed, 4049 deletions(-) delete mode 100755 assets/snippets/eform/docs/eform.htm delete mode 100755 assets/snippets/eform/docs/eform_example_events.htm delete mode 100755 assets/snippets/eform/docs/eform_example_multiple_forms.htm delete mode 100755 assets/snippets/eform/docs/eform_examples.htm delete mode 100755 assets/snippets/eform/docs/eform_history.htm delete mode 100755 assets/snippets/eform/docs/example_2_form_1.gif delete mode 100755 assets/snippets/eform/docs/example_2_form_2.gif delete mode 100755 assets/snippets/eform/docs/form1.gif delete mode 100755 assets/snippets/eform/docs/logo.png delete mode 100644 assets/snippets/eform/eform.inc.php delete mode 100755 assets/snippets/eform/index.html delete mode 100755 assets/snippets/eform/lang/chinese.inc.php delete mode 100644 assets/snippets/eform/lang/czech.inc.php delete mode 100644 assets/snippets/eform/lang/danish.inc.php delete mode 100755 assets/snippets/eform/lang/english.inc.php delete mode 100755 assets/snippets/eform/lang/finnish.inc.php delete mode 100644 assets/snippets/eform/lang/francais-utf8.inc.php delete mode 100644 assets/snippets/eform/lang/francais.inc.php delete mode 100755 assets/snippets/eform/lang/german.inc.php delete mode 100644 assets/snippets/eform/lang/index.html delete mode 100644 assets/snippets/eform/lang/italian.inc.php delete mode 100755 assets/snippets/eform/lang/japanese-utf8.inc.php delete mode 100644 assets/snippets/eform/lang/nederlands-utf8.inc.php delete mode 100755 assets/snippets/eform/lang/nederlands.inc.php delete mode 100755 assets/snippets/eform/lang/persian.inc.php delete mode 100644 assets/snippets/eform/lang/polish.inc.php delete mode 100644 assets/snippets/eform/lang/portuguese-br.inc.php delete mode 100644 assets/snippets/eform/lang/portuguese.inc.php delete mode 100755 assets/snippets/eform/lang/russian-UTF8.inc.php delete mode 100755 assets/snippets/eform/lang/russian.inc.php delete mode 100644 assets/snippets/eform/lang/spanish-utf8.inc.php delete mode 100755 assets/snippets/eform/lang/spanish.inc.php delete mode 100755 assets/snippets/eform/lang/svenska-utf8.inc.php delete mode 100755 assets/snippets/eform/lang/svenska.inc.php delete mode 100644 assets/snippets/eform/lang/ukranian.inc.php delete mode 100644 assets/snippets/eform/lang/ukranian.php delete mode 100644 assets/snippets/eform/snippet.eform.php delete mode 100755 install/assets/snippets/eform.tpl diff --git a/assets/snippets/eform/docs/eform.htm b/assets/snippets/eform/docs/eform.htm deleted file mode 100755 index 2a3b34b285..0000000000 --- a/assets/snippets/eform/docs/eform.htm +++ /dev/null @@ -1,450 +0,0 @@ - - - -eForm - - -

eForm - The Electronic Form Snippet

- -

Who's responsible for eForm

-

Originally developed by Raymond Irving (15-Dec-2004)
Version 1.3 - 1.4 extended by: Jelle Jager (TobyL) September 2006

-

Captcha image support - thanks to Djamoer
Multi checkbox, radio, select support - thanks to Djamoer
Styles (for these docs) 'borrowed' from Adam Crownoble's QuickEdit

-
-

What is eForm?

-

eForm converts a web form into an email which can be sent via email to specified users. Its main features are: html form mail with attachments, auto-respond, report generation using placeholders and extended form validation.

-
-
-

What's New

-
-

Version 1.4.4.9

-
    -
  • Updated language files.
  • -
  • Security fix: Posting of html only allowed if &allowhtml=`1` and eform field type is html.
  • -
  • Security fix: Prevent XSS by executing htmlspecialchars during formMerge on all form fields.
  • -
-


You can see a more extensive version history here.

-
-
-
-

Installation

-
-
    -
  • Unzip the zip file into the assets/snippet/ folder. You should now have an extra folder called eform.
  • -
  • Create a new snippet, name it eForm and copy and paste the content of the eform.snippet.tpl file
  • -
  • Start reading this file and the examples
  • -
  • Create forms
  • -
-
-
-

Snippet Parameters

-

eForm is very flexible and there's quite a collection of parameters you can use to get eForm to do what you want. Read some of the examples if you're unsure what to do.

-
-

Required parameters

-
    -
  • &formid
    This is a unique id used to identity a form during postbacks. This is useful in cases where more than one form exists on a page. - Your form template should either have a hidden field with the same formid. - <input type="hidden" name="formid" value="formName" /> or (from eForm 1.4.x) you can set the the id in the form tag itself: - <form id="formName"...>;
  • -
  • &tpl
    chunk name (non-numeric) or document id (numeric) to use as a form template (new in 1.4.4) You can now also use a snippet as the template source. No parameters are forwarded to the snippet call in this version. - For the regular form fields you do not normally need to add placeholders, they automatically get inserted by eForm. The esception to this rule are in the case of event functions where you want to set specific values. Special placeholders available are: - [+validationmessage+], [+postdate+],[+verimageurl+] & [+debugText+]. You should have the [+validatiomessage+] placeholder in all your forms. The others you may need depending on other parameters.
  • -
  • &report
    chunk name (non-numeric) or document id (numeric) to use when generating reports. - Tags: Same as for - &tpl plus [+fieldname+], where fieldname stands for the name of each form field you wish to include.
  • -

Optional parameters

-
    -
  • &to (Optional)
    Email address to send eForm information to. - For multiple recipients separate emails with a comma (,). - If omitted the site settings email address will be used.
  • -
  • &from (Optional)
    Sets the email address to appear in the From section of the email.
  • -
  • &fromname (Optional)
    Sets the name of the sender in the From section of the email.
  • -
  • &replyto (Optional)
    Email address or fieldname containing email address. - Sets the email address to appear in the ReplyTo section of the email.
  • -
  • &sendirect (Optional)
    This will use the form field called email to supply the - email address to send the message to. - Set to 1 to activate send direct. Defaults to 0.
  • -
  • &cc (Optional)
    Same as - &email but for Cc:
  • -
  • &bcc (Optional)
    Same as - &email but for Bcc:
  • -
  • &ccsender (Optional)
    Set to 1 to send the user a copy of the submitted form. - eForm will look for the user's email address inside a field called email. Defaults to 0. -
  • -
  • &subject (Optional)
    Subject to appear in email. - Can include ((form fields)). E.g. &subject=`Purcase Order for ((firstname)) ((lastname))`.
  • -
  • &noemail (Optional)
    Prevents eform from sending emails e.g. no-reply@mydomain.com. - Set to 1 to disable emails. Defaults to 0.
  • -
  • &mailselector (Optional)
    Sets the name of the form field to use as a selector to select a single email from the comma (,) delimited emails assigned - the - &toparameter. This selector field will act like a numeric - index to select an email. It will start at 1 for the first email - and ends at N for the last email in the list.

    For example: - &to=`sales@me.com,support@me.com,billing@me.com` - &mailselector=`topic`

    On the web form the topic fields is actually a dropdown menu. when the user selects a topic from the list the value 1,2 or 3 will - be sent to eForm which will then be used to select one of the three emails assigned to the - &toparameter. This email address will be the address used to send the email to.
  • -
  • &mobile (Optional)
    Mobile email address. This email is used to send a short notification message to a mobile device.
  • -
  • &mobiletext (Optional)
    Text message to send to mobile device. Can include ((form fields)). E.g. &mobiletext=`Order for - ((firstname))`.
  • -
  • &thankyou (Optional)
    Chunk name (non-numeric) or document id (numeric) to use as a thank you message displayed to the user after a successful submit. - Tags: same as for - &tpl
  • -
  • &gotoid (Optional)
    Document id to load after sending message. See also - &thankyou
  • -
  • &category (Optional)
    Category ID or name used to categorize eForms. - If category is not found a new category will be created. - This will appear in the subject of the email sent to the user.
  • -
  • &keywords (Optional)
    Comma delimited keywords or [+formfields+] used when searching databank. - E.g. [+firstname+], [+lastname+], [+email+]
  • -
  • &autosender (Optional)
    Email to display as sender of the auto-respond message. - e.g. no-reply@mydomain.com
  • -
  • &autoSenderName (new in 1.4.4) (Optional)
    Name to display as sender of the auto-respond message.
  • -
  • &automessage (Optional)
    Chunk name (non-numeric) or document id (numeric) to use as an auto-responder message. - Tags: same as for - &tpl. - eForm will send the auto-respond message to the email address specified in a field called email.
  • -
  • &allowhtml (Optional)
    Set to 1 to allow user to enter html tags. XSS could be possible i.e. in thankyou chunk if allowed. Defaults to 0.
  • -
  • &language (Optional)
    Support for multilingual validation and error messages. Uses same language - names as MODX.
  • -
  • &vericode (Optional)
    Enables verification code. The template contain a vericode - field and a [+vericode+] placeholder.
  • -
  • &debug (Optional)
    Set to 1 for extended error messages in form validation. Mostly for debugging - #LIST and #SELECT validation.
  • -
  • &sendAsHtml (Optional)
    Force email messages to be in html. - Possible values: &sendAsHTML=`1`: Send all messages as html, &sendAsHTML=`report,autotext,mobile`: Send specified messages as html
  • -
  • &sendAsText (Optional)
    Force email message to be in plain text. - Possible values: &sendAsText=`1`: Send all messages as text only, &sendAsText=`report,autotext,mobile`: send specified messages as text only
  • -
  • &sessionVars (Optional)
    Comma delimited list of $_SESSION variable names. These will be added to the list of field values before the form is displayed and can for instance be used to populate (hidden) fields. - When using this parameter make sure you are not disclosing sensitive information from the session!! A hidden field is not all that hidden afterall.
    As eForm does not parse the complete form 1st time around you will have to have the same placeholders in the form template so the form can receive the values. So for example: - [!eForm &sessionVars=`jobID` ... !] and - <input type="hidden" value="[+jobID+]" />
  • -
  • &postOverides (Optional)
    Used in combination of - &sessionVars. Normally session variables will overide posted values. By setting &postOverides=`1` posted values will take precedence.
  • -
  • &reportAbuse (Optional)
    Setting &reportAbuse=`1` will send an email to the system specified email address if email injection attempts are noticed by eForm. (Use sparingly...)
  • -
  • &cssStyle (Optional)
    - Adds a style declaration to the <head> section of the page when either the form is displayed or the thank you page is displayed (only if the &thankyou parameter is set). Values can be a document id (numeric), chunk name or (relative or absolute) url to css file. Multiple values can be separated by a comma (in fact all three values can be mixed).
    examples:
    [!eForm &cssStyle=`assets/site/forms.css,chunkName` ... !]
    -[!eForm &cssStyle=`chunkName` ... !]
    -[!eForm &cssStyle=`http://mysite.com/assets/styles/forms.css` ... !]
    -Chunks (and documents if a doc id is given) can return a values in the form of: -
      -
    1. an inline style block, eg. <style type="text/css">/*some styles*/</style>
    2. -
    3. a link to stylesheet(s), eg. <link href="assets/site/forms.css" rel="stylesheet" type="text/css">
    4. -
    5. a comma separated list of urls, eg. assets/site/forms.css,assets/site/more.css,assets/site/gone_overboard.css
    6. -
    -
  • -
  • &jScript (Optional)
    Similar to &cssStyle but for adding javascript to the <head> of the page document. Currently Javascript is only added when the form is displayed.
  • -
  • &protectSubmit(Optional) defaults to 1 (on)
    - Protects against submitting a form multiple times with the same data. Submitting the form becomes disabled after the first successful submit while the value from key form fields remains the same. This is achieved by setting (and comparing) a session variable with an md5 hash from these key fields. Which fields are compared depends on the value of &protectSubmit.Possible values are 0 (off), 1 (all 'required' fields are used) or you can set a comma separated list of field names. To ensure that the session variable works separatedly for different forms the session variable name is based on &formid ({formid}_hash). -
  • -
  • &submitLimit (Optional) off (0) by default
    - Enforces a time limit (in minutes) between form submits. After the form has been submitted successfully it can not be submitted again for &submitLimit minutes irrespective of the form data. When used in combination with &protectSubmit submitLimit takes precedence, meaning that when the time limit has expired the form can be submitted again regardless of the setting of &protectSubmit (it will unset the session variable). As with &protectSubmit this parameter uses a session variable with a variable name based on &formid. -
  • -
  • &requiredClass (Optional)
    - Css class name. Will add class in (empty) required form fields on validation. Existing classes will be preserved.
    - If you have already set a class for a field or label and you get unexpected css results check the order in which you have declared the classes. The &requiredClass is added to the beginning of any classes already set. -
  • -
  • &invalidClass (Optional)
    - Css class name. Will add class in invalid form fields on validation. Existing classes will be preserved. -
  • -
  • &runSnippet (new in 1.4.4) (Optional)
    - Expects a snippet name. Snippet will be run before any eForm handling. One parameter, the &&formid will be passed to the snippet. Any return value from the snippet is discarded. This can be used to insert functions as an alternative to declaring a separate snippet in the document. Sadly eForm will silently ignore a snippet that does not exist due to the way $modx->runSnippet handles snippet return values. -
  • -
  • &snipFolder (new in 1.4.4) (Optional)
    - For those that want to keep different versions of eForm active. You can now save all of eForm's files in a different directory and set the &snipFolder accordingly. You can for instance save version 1.4.4 in the 'assets/snippets/eform/1.4.4' folder and set &snipFolder=`eform/1.4.4`. The value of &snipFolder is added to the basic snippets folder 'assets/snippets/'.It should not include a closing slash (/)!
  • -
  • &attachmentField (new in 1.4.5) (Optional)
    - The name of the form field that contains a comma separated list of filenames located in &attachmentFolder that are attached to the mail sent to the &to address. Usefull if you want to create/set attachments in event functions. -
  • &attachmentFolder (new in 1.4.5) (Optional)
    - The folder (relative to the MODX basepath) that contains the files specified by &attachmentField. It should not include a closing slash (/)!
  • -
  • &errorTpl (new in 1.4.6) (Optional)
    - Chunk name or text to use as a error template. Placeholders available: [+ef_message_text+] for the language specific intro message and [+ef_wrapper+] for the error messages.
  • -
  • &errorRequiredTpl (new in 1.4.6) (Optional)
    - Chunk name or text to use as a template for the list of required fields. Placeholders available: [+ef_required_list+] for the language specific intro message.
  • -
  • &errorRequiredSeparator (new in 1.4.6) (Optional)
    - Chunk name or text to use as a separator between two elements in the list of required fields. E.g. &errorRequiredSeparator=`, `.
  • -
- - - - -

PHP Event Functions:

-

The eForm event functions are now incorporated into the parameters. They are:

-
    -
  • &eFormOnBeforeMailSent (Optional)
    Expects a list of comma separated function names. These functions will be called after the form has been validated and before the report and thankyou templates have been parsed and any emails have been sent out. - See this example on how to use the events. -
      -
    • &$fields - (as reference) an associative array of field and placeholder values.
    • -
  • -
  • &eFormOnMailSent (Optional)
    Expects a list of comma separated function names. These functions are called after all templates have been parsed and any emails were sent. -
      -
    • &$fields - (as reference) an associative array of field and placeholder values.
    • -
  • -
  • &eformOnBeforeFormParse (Optional)
    Expects a list of comma separated function names. These functions are called after the templates are loaded and the formid is found valid. The function should accomodate the following parameter: -
      -
    • &$fields - (as reference) an associative array of field and placeholder values.
    • -
    • &$templates - (as reference) an associative array of loaded templates with indexes 'tpl', 'report','thankyou' & 'autotext'. Be aware that the latter three will only have a value if the form has been posted!
    • -
  • -
  • &eFormOnBeforeFormMerge (Optional)
    Expects a list of comma separated function names. These functions will only be called whenever the form is displayed and just before all placeholders are merged. The function should accomodate the following parameter: -
      -
    • &$fields - (as reference) an associative array of field and placeholder values.
    • -
  • -
  • &eFormOnValidate (Optional)
    Expects a function name. This function will be called directly after the form validation has taken place. You can use this event to add your own extra validation logic. The function should accomodate the following parameters -
      -
    • &$fields - (as reference) an associative array of field and placeholder values.
    • -
    • &$vMsg - (as reference) a numeric array of validation error messages.
    • -
    • &$rMsg - (as Reference) a numeric array of missing required fields.
    • -
    • &$rClass - (as Reference) an associative array of fieldnames and classes assigned.
    • -
  • -

Examples:

-

- [!eForm? - &to=`me@mydomain.com` - &gotoid=`1` - &tpl=`orders` - &report=`orderreport` - !]
- [!eForm? - &to=`sales@mysuppliers.com` - &category=`Purchase Order` - &tpl=`chunkPurchaseOrder` - &report=`chunkPurchaseReport` - !]

-
- -

Placeholders

-
-

For all normal form fields eForm automatically inserts appropriate placeholders. However there are a few that you may need to add manually:

-
    -
  • [+validationmessage+] - This should be somewhere in your form template or document. It is used for any validation error messages. From 1.4.2 the way the placehloder is entered has changed. Firstly you no longer need to place it in the form template. You can now place it anywhere in your document (or even in the global page template). Secondly you don't need to place any hml tags around the placeholder (in fact you probably should not). Any html markup is now included in the $_lang['ef_validation_message'] variable in the eform language files (which you can change as required).
  • -
  • [+vericode+] & [+verimageurl+] - These are needed in the form if you want to use the CAPTHCA code. See the Examples on how to use these.
  • -
  • [+postdate+] - This placeholder can be used in reports and in the thankyou template and will be filled with the current date and time (date on the server that is)
  • -
  • [+debug+] - From version 1.4.1 this is automatically placed (if debug is on) in the form and thankyou template. It is not automatically placed in the report template! This is to avoid any server side information to accidentally be sent out via email. If you need debug info in test emails you will have to add this placeholder in the report template yourself.
  • -
-
- - -

Datatypes and formatting

-
-

eForm is incorporating a form parser which extracts formatting and validation options from each form field. To set options for a field add the eform (pseudo) attribute to each required form field.

-

- <input type="text" name="color" eform="A Color:string:1" />

-

The basic format of the eform attribute is:

- [description/title]:[datatype]:[required]:[validation message]:[validation rule]

-

Data types

-

You only need to set the following data types. Others will be set automatically -(radio & checkbox as they are, string for textbox and listbox for select)

-

Standard validation: All fields that are required will be checked if they are left empty.

-
    -
  • string - No specific validation besides checking if it's empty if the field is required.
  • -
  • date - Checks if it is a valid date (based on php's strtotime() function)
  • -
  • integer - Checks if it is a number (does not check if it is in fact an integer)
  • -
  • float - Checks if it is a number
  • -
  • email - Checks if it's a valid email address using a simple regular expression
  • -
  • file - (for file upload input) - checks if a size error occurs, does not currently check file type
  • -
  • html - Same as string except that it converts line endings (\n) to <br /> tags. In combination with &allowhtml=`1` no html tags will be stripped.
  • -
-

The listbox, checkbox and radio fields do normally not require the datatype to be set. eForm will recognize these automatically. It will validate the values against the list of values placed in the form.

-
-
-

Extended Server Validation

-

This version instroduces extended server validation and word filtering using very flexible validation rules that can be set in the eform attribute. You can set 2 extra validation parameters, a custom error message and a validation or filter rule.

-

example: - eform="Year of Birth:integer:1:Must be between 1950 and 2002:#RANGE 1950-2002"

-

The validation rules

-
    -
  • #LIST - comma separated list of valid values
    example: - #LIST blue,red,green.maroon
  • -
  • #RANGE - a comma separated list of numbers or numeric ranges. -When setting a range the order is not important. 1~10 or 10~1 will both validate a number -between 1 and 10 (inclusive). Handles negative as well as positive numbers
    example: - #RANGE 1,3,-5~-15,60~82
  • -
  • #SELECT - list of valid values retrieved from a database query -The query should only return a single column of values (the function only checks -against the first returned column). You can use the - {DBASE} - {PREFIX} tags which will be replaced by the MODX database name and table prefix respectively.
    example: - #SELECT keyword FROM {PREFIX}site_keywords
  • -
  • #EVAL - string of php code. Should return either true or false
    deprecatedAlthough #EVAL still works in eForm 1.4 this rule will very likely no longer be supported in future versions. Use #FUNCTION instead.
  • -
  • #FUNCTION - Name of a function. The function should expect one parameter (the posted value) and return either TRUE or FALSE. -See the eform event example on how you can include a function. -example: - #FUNCTION myValidationFunction
  • -
  • #REGEX - regular expression - syntax as for preg_match() - see php manual
    example: - #REGEX /^[a-z]+ [a-z0-9_]+/i
  • -
  • #FILTER - Filters do not validate the input but -simply replace words or values using filter criteria. You can use the following filters: -
      -
    • #FILTER #LIST
      use double pipe to separate 2 comma separated lists of words and - replacement values.
      example; - #FILTER #LIST badword,verybadword||goodword,verygoodword
    • -
    • #FILTER #EVAL
      example: - #FILTER #EVAL return myFilterFunction($value);
      (offcourse you have to make sure the function exists somehow)

      example filter function
      - function myFilterFunction($value){
         $badWords = array('scribble','coding');
         $goodWords = array('design','sleep');
         return str_replace($badWords,$goodWords,$value);
      }
    • -
    • #FILTER #REGEX
      regular expression replace - syntax as for preg_replace() - separate the search and replacement expression with a double pipe symbol (||)
      TODO: example
    • -
  • -

Select boxes, radio options and checkbox fields

-

Select boxes, radio options and checkbox fields now have working automatic validation. -Any input for these fields is validated against the values set in your form template. -This avoids anyone tampering with the form by adding their own values to these fields

Hidden fields

-

By default hidden fields are validated as a protection against tampering by comparing the input -against the value set in the form template (much like the select, checkbox and radio fields) -In some circumstances this may not be desirable however. For instance when you use some javascript -in your form to store a result in a hidden field. In those cases you can turn this behaviour off -by setting the eform attribute (with or without it's own validation).

-

Hidden field example 1.
The default behaviour is handy for instance if you are storing a document id and want to be sure -no one can tamper with the id. the field would look like this:
- <input type="hidden" name="docId" value="31" />

-

Hidden field example 2.
Suppose you have a form where a javascript calculated value is stored in a hidden field. To avoid the hidden -field being validated at all you add the following eform attribute: - <input type="hidden" name="calculatedField" value="" eform="::0::" />

-

Hidden field example 3.
Same scenario as 2 but suppose you want to make sure a value is returned and that it stays within a certain -range. The eform attribute is set with: title,integer data type, required field, error message -and validation with #RANGE (in this example a value between 1-10) - <input type="hidden" name="calculatedField" value="" eform="Calculated Value:integer:1:Calculation out of range:#RANGE 1-10" />

Form field examples with validation

-

1. Selectbox - set as required field (no validation required)

-
<select name="mySelect" eform_options="Select Country::1" /> (datatype left blank)
<option value="en-au">Australia</option>
<option value="en-us">USA</option>
</select> -
-

2. Textbox - required and format set to date

-
<input type="text" name="dobDate" eform_options="Date of Birth:date:1:@EVAL return (strtotime($value)!==-1)?true:false;" /> -
-

3. Multiple checkbox - required, eform_options only set once.

-
<input type="checkbox" name="myColors[]" value="Red" eform_options="Colors::1" /> (datatype left blank)
<input type="checkbox" name="myColors[]" value="Green" /> (datatype left blank)
-
-

Todo

-
    -
  • Custom css classes for invalid fields (add to or create class attributes)
  • -
-
-
- - diff --git a/assets/snippets/eform/docs/eform_example_events.htm b/assets/snippets/eform/docs/eform_example_events.htm deleted file mode 100755 index 461455b30d..0000000000 --- a/assets/snippets/eform/docs/eform_example_events.htm +++ /dev/null @@ -1,360 +0,0 @@ - - - - eForm example - - - - - -
-

eForm - Examples

- -
-

Index

- - -
- -
-

Using eForm's eformOnBeforeMailSent event

-

Prerequisites:

-
    -
  • Works with eForm version 1.4 and later. If you have an earlier version upgrade now at http://modx.com/extras/package/eform
  • -
  • Be familiar with PHP programming, specifically with variable functions and variable references.
  • -
- -


This example/ tutorial will show you how to call an external function using the onBeforeMailSent event and what you can do with such an event.

- -

The scenario is a continuation from our last example. To fill you in or refresh your memory, we set up a job request form for a translation agency where clients can either type in an article into a text box or attach a text file. A second form in on the same page allowed existing clients to request a progress report, for which they needed a job number. In the example the translation agency would receive an email and would then have to assign a job number and follow up manually.

- -

With eForm we can do better. We're going to extend eForm using it's events structure to provide the jobNumber automatically and have this included in the report which is sent to the office and to the client. Below is a repeat of the original job request form and a slightly enhanced report. The second form from the previous example has been ignored in this example.

- -

The Job Request Form

-

View or hide an image of the form.
-

- - -

The form Template

-
-
-[+validationmessage+]
-<form action="[~[*id*]~]" method="post" enctype="multipart/form-data">
-    <input type="hidden" name="formid" value="newJob" />
-    <fieldset>
-        <legend>Your personal details</legend>
-        <p>
-            <label>Name</label>       
-            <input class="field" type="text" name="fullName" maxlength="60" eform="Your Name:string:1:Your Full Name is required" />
-        </p>
-        <p>
-            <label>Email</label>       
-            <input class="field" type="text" name="email" size="40" maxlength="40" eform="Email Address:email:1" />
-        </p>
-    </fieldset>
-    <fieldset>
-        <legend>Article Details</legend>
-        <p class="explain">You can provide a summary and the main article below or alternatively supply the material
-        in an attachment. Currently we support the following formats: Ms Word, Adobe Acrobat (pdf), html or plain text.</p>
-        <p><label>Summary</label>
-        <textarea class="field" name="summary" eform="Summary:html:1" rows="3" cols="30"></textarea></p>
-        <p><label>Article</label>
-        <textarea class="field" name="article" eform="Article:html:1" rows="10" cols="30"></textarea></p>
-        <p><label for="attachment">Attachment</label>       
-        <input class="field" type="file" name="attachment" accept="text/plain,application/msword,application/rtf,application/pdf,text/html" eform="Attachment:file:0" /></p>
-    </fieldset>
-    <fieldset>
-        <legend>Preferences</legend>
-        <p>
-            <label>Format</label>       
-            <input type="radio" name="format" value="legal" eform="Return Format::1" >&nbsp;Legal       
-            <input type="radio" name="format" value="formal">&nbsp;Formal       
-            <input type="radio" name="format" value="loose" checked="checked"">&nbsp;Informal
-        </p>
-        <p>
-            <label>Language</label>
-            <select name="language" eform="language::1>
-                <option value=""></option>
-                <optgroup label="English">
-                    <option value="en-au">Australian</option>
-                    <option value="en-gb">UK English</option>
-                    <option value="en-us">US English</option>
-                </optgroup>
-                <optgroup label="French">
-                    <option value="fr">France</option>
-                    <option value="fr-be">Belgian French</option>
-                    <option value="fr-ca">Canadien French</option>
-                    <option value="fr-ch">Swiss French</option>
-                    <option value="fr-gp">Guadaloupe French</option>
-                    <option value="fr-gy">Guyana French</option>
-                    <option value="fr-mr">Martinique French</option>
-                </optgroup>
-            </select>
-        </p>
-        <p class="explain">       
-            <input type="submit" name="frmGo" value="Send Job" />
-        </p>
-    </fieldset>
-</form>
-
-
-

Note! In the above template we use a hidden field for the formid: <input type="hidden" name="formid" value="newJob" />
-If you are using eForm 1.4 you can instead use the id attribute of the form tag itself and leave out the hidden field: <form id="newJob" action="[~[*id*]~]" method="post" enctype="multipart/form-data">. Either way will work -

- -

The (adjusted) Report template

-
-
-<p>Here are the details for <strong>[+subject+]</strong> with Job Number: <strong>[+jobNumber+]</strong></p>
-<table>
-	<tr valign="top"><td>Client Name:</td><td>[+fullName+]</td></tr>
-	<tr valign="top"><td>Client Email:</td> <td>[+email+]</td></tr>
-	<tr valign="top"><td>Summary:</td> <td>[+summary+]</td></tr>
-	<tr valign="top"><td>Article:</td> <td>[+article+]</td></tr>
-	<tr valign="top"><td>Attachment:</td> <td>[+attachment+]</td></tr>
-	<tr valign="top"><td>Create translation in format:</td> <td>[+format+]</td></tr>
-	<tr valign="top"><td>Destination language:</td> <td>[+language+]</td></tr>
-	<tr valign="top"><td>Job Number:</td> <td>[+jobNumber+]</td></tr>
-</table>
-
-
- -

The eformOnBeforeMailSent and eformOnMailSent events

- -

We can intercept the flow of eForm using the 2 events eForm exposes via the &eFormOnBeforeMailSent and &eFormOnMailSent parameters. When you set these to a function name eFrom will try to call this function. The events are triggered as follows:

-
    -
  • eFormOnBeforeMailSent is called after the form has succesfully been validated but before the report is populated and the email is send.
  • -
  • eFormOnMailSent is called after the report has been populated and the email is sent but before the thankyou template has been populated.
  • -
- -


The function should accept one parameter, the $fields array. The $fields array contains all the form values and other placeholder content with the field names as the key. -The function should return either a true or false value. Currently when a false is returned eForm will return immediately without outputting the form or any messages however this may change in the future.

- -

It is important that you declare the $fields parameter as a reference inside the function so that you manipulate the original values otherwise the function would be working on a copy of the array and changes you make would be lost once the function exits.(if you're getting confused by now, stop reading this and open the php manual at www.php.net/manual/language.references.php

- -
-
//$fields as a reference
-function someFunction( &$fields ){ ... }
-
- -

Well be adding an extra value instead of changing any form values. We'll write a simple function that creates a job number based on the clients initials and the current date/time and add this to the $fields array under the key 'jobNumber'. If you look at the report template above you'll notice there's an extra placeholder for this.

- -
-	//create job number based on initials and current date/time
-	function createJobNumber( &$fields ){
-		$jobNum = '';
-		foreach{ explode(' ',$fields['fullName'],3) as $nm)
-			$jobNum .= strtoupper(substr($nm,0,1));
-		$jobNum .= date('ymdHi');
-		//set extra value in fields array
-		$fields['jobNumber']= $jobNum;
-		//return succes
-		return true;
-	}	
-
- -

All very well that we've written a function but how do we get it into MODX? I'm sure there's multiple ways of doing that but I've simply created an extra snippet called eFormEvent with the 'createJobNumber' function as the only content. That way it's only loaded when using the form. To make it available to eForm we place a call to this snippet on the same page, just before we call the eForm snippet (It needs to be first as otherwise it's not parsed by the time eFrom needs it).

- -

All that remains is to add the &eformOnBeforeMailSent parameter to the eform snippet call with the function name. To finish this example off here are the eFormEvent snippet and both snippet calls that need to reside on the form page.

- -

NOTE! Just a reminder that this will only work in eFrom version 1.3.1 and above! In earlier versions the &eformOnBeforeMailSent and &eformOnMailSent parameters were not available! (Although I've made the events work in earlier versions by tweaking eForm a bit I ran into trouble with more then one form on the same page.)

- -

Snippet eFormEvent

-
-//functions for eForm events
-function createJobNumber( &$fields ){
-	//rest of function code as above
-}
-//return empty string
-return ''; 
-
-

The snippet calls

-
-
-	[[eFormEvent]]
-	[!eForm? &formid=`newJob` &subject=`New Translation Job` &sendirect=`1` &eformOnBeforeMailSent=`createJobNumber` &tpl=`jobForm` &report=`jobReport` &noemail=`1` &thankyou=`jobReport`!]
-
-
- -

Note that I've added the &noemail=`1` &thankyou=`jobReport` parameters. They're not necessary but I use them to see the result in the browser while testing instead of having to wait for emails. Remove them if you want to see the actual generated emails coming into your mailbox.

- -

We could take this approach a lot further offcourse. You could for instance store the information in a database or filter the values but we'll leave that to your own imagination.

- -

Enjoy.

- -
-
-

Jelle Jager
-AKA TobyL
- -

- diff --git a/assets/snippets/eform/docs/eform_example_multiple_forms.htm b/assets/snippets/eform/docs/eform_example_multiple_forms.htm deleted file mode 100755 index 9bc6ab6380..0000000000 --- a/assets/snippets/eform/docs/eform_example_multiple_forms.htm +++ /dev/null @@ -1,337 +0,0 @@ - - - - eForm example - - - - - -
-

eForm - Examples

- -
-

Index

- - -
- -
-

Multiple forms on a page

- -

This example will show you how to include more then one form onto one page and have eForm deal with them separatedly and how easy it is to add file uploads which appear as attachments to the email. I doubt the form in this example will itself have much practical value to you but it shows that it's not a big job to have multiple forms using eForm. Use it as a starting point. - -

Here's a scenario to play with. We're setting up a job request form for a translation agency where clients can either type in an article into a text box or attach a text file. As a courtesy we're also providing a second form on the same page where clients can check the progress of a translation job. I've choosen this setup because it's also going to feature in the next example which shows how you can use eForm events to automatically assign extra values (in this case a job number).

- -

The Job Request Form

-

As you'll see I've kept the form and the report template fairly simple. The only thing of note in the form perhaps is the file upload field. Notice that we don't have to do anything special, eForm will automatically attach the uploaded file to the email it sends out. With eForm 1.4 you can restrict the types of files that are accepted by the #LIST validation rule. As you can see in the source belwo we're using that to restrict the upload to files that have an extension of 'pdf','txt' and 'doc'.

- -

View or hide an image of the form.
-

- -

The form Template

-
-
-<form action="[~[*id*]~]" method="post" enctype="multipart/form-data">
-    <input type="hidden" name="formid" value="newJob" />
-    <fieldset>
-        <legend>Your personal details</legend>
-        <p>
-            <label>Name</label>
-            <input class="field" type="text" name="fullName" maxlength="60" eform="Your Name:string:1:Your Full Name is required" />
-        </p>
-        <p>
-            <label>Email</label>
-            <input class="field" type="text" name="email" size="40" maxlength="40" eform="Email Address:email:1" />
-        </p>
-    </fieldset>
-    <fieldset>
-        <legend>Article Details</legend>
-        <p class="explain">You can provide a summary and the main article below or alternatively supply the material
-        in an attachment. Currently we support the following formats: Ms Word, Adobe Acrobat (pdf) or plain text.</p>
-        <p><label>Summary</label>
-        <textarea class="field" name="summary" eform="Summary:html:0" rows="3" cols="30"></textarea></p>
-        <p><label>Article</label>
-        <textarea class="field" name="article" eform="Article:html:0" rows="10" cols="30"></textarea></p>
-        <p><label for="attachment">Attachment</label>
-        <input class="field" type="file" name="attachment" eform="Attachment:file:0:Only upload of text documents are supported:#LIST pdf,txt,doc " /></p>
-    </fieldset>
-    <fieldset>
-        <legend>Preferences</legend>
-        <p>
-            <label>Format</label>
-            <input type="radio" name="format" value="legal" eform="Return Format::1" >&nbsp;Legal
-            <input type="radio" name="format" value="formal">&nbsp;Formal
-            <input type="radio" name="format" value="loose" checked="checked"">&nbsp;Informal
-        </p>
-        <p>
-            <label>Language</label>
-            <select name="language" eform="language::1>
-                <option value=""></option>
-                <optgroup label="English">
-                    <option value="en-au">Australian</option>
-                    <option value="en-gb">UK English</option>
-                    <option value="en-us">US English</option>
-                </optgroup>
-                <optgroup label="French">
-                    <option value="fr">France</option>
-                    <option value="fr-be">Belgian French</option>
-                    <option value="fr-ca">Canadien French</option>
-                    <option value="fr-ch">Swiss French</option>
-                    <option value="fr-gp">Guadaloupe French</option>
-                    <option value="fr-gy">Guyana French</option>
-                    <option value="fr-mr">Martinique French</option>
-                </optgroup>
-            </select>
-        </p>
-        <p class="explain">
-            <input type="submit" name="frmGo" value="Send Job" />
-        </p>
-    </fieldset>
-</form>
-
-
- -

Note! In the above template we use the hidden field for the formid: <input type="hidden" name="formid" value="newJob" />
-If you are using eForm 1.4 you can instead use the id attribute of the form tag itself and leave out the hidden field: <form id=="newJob" action="[~[*id*]~]" method="post" enctype="multipart/form-data">. Either way will work -

- -

The Report template

-
-
-<p>Here are the details for <strong>[+subject+]</strong> with Job Number: <strong>[+jobNumber+]</strong></p>
-<table>
-	<tr valign="top"><td>Client Name:</td><td>[+fullName+]</td></tr>
-	<tr valign="top"><td>Client Email:</td> <td>[+email+]</td></tr>
-	<tr valign="top"><td>Summary:</td> <td>[+summary+]</td></tr>
-	<tr valign="top"><td>Article:</td> <td>[+article+]</td></tr>
-	<tr valign="top"><td>Attachment:</td> <td>[+attachment+]</td></tr>
-	<tr valign="top"><td>Create translation in format:</td> <td>[+format+]</td></tr>
-	<tr valign="top"><td>Destination language:</td> <td>[+language+]</td></tr>
-	<tr valign="top"><td>Job Number:</td> <td>[+jobNumber+]</td></tr>
-</table>
-
-
- -

... and the Snippet call

- -
-
-[!eForm? &formid=`newJob` &subject=`New Translation Job` &tpl=`jobForm` &report=`jobReport` to =`whoever@you.are.com`!]
-
-
- -

That's it for the first form.

- -
-

Our second (e)Form - The Status Request Form

-


Let's add a second eForm call on the page. Pretty much the same scenario, different form template, report and snippet call. eForm will know which form to process using the &formid parameter which is set in the snippet call and as a hidden field in the forms. As of 1.4 you actually don't have to have a hidden field for this. You can instead assign an id to the form tag itself i.e. <form id="jobRequest" ... >

-

The status request form

-

- -
-

The form template

-
-
-<form action="[~[*id*]~]" method="post" enctype="multipart/form-data">
-	<input type="hidden" name="formid" value="jobRequest" />
-	<fieldset>
-		<legend>Job details</legend>
-		<p>
-			<label>Email</label>
-			<input class="field" type="text" name="email" size="40" maxlength="40" eform="Email Address:email:1" />
-		</p>
-		<p>
-			<label>Job Number</label>
-			<input class="field" type="text" name="jobnumber" maxlength="40" eform="Job Number:string:1" />
-		</p>
-		<p class="explain">
-			<input type="submit" name="submit" value="Send request" />
-		</p>
-	</fieldset>
-</form>
-
-
-

The report template

-
-
-<p>[+email+]</strong> has requested a status report on  Job Number: <strong>[+jobNumber+]</strong></p>
-<table>
-	<tr valign="top"><td>Client Email:</td> <td>[+email+]</td></tr>
-	<tr valign="top"><td>Job Number:</td> <td>[+jobNumber+]</td></tr>
-</table>
-
-
- -

... and again the Snippet call

- -
-
-[!eForm? &formid=`jobRequest` &subject=`Status request for [+jobnumber+]` &tpl=`requestForm` &report=`requestReport` to =`whoever@you.are.com`!]
-
-
- -

Pretty simple isn't it?

- -
-
-

Jelle Jager
-AKA TobyL
- - diff --git a/assets/snippets/eform/docs/eform_examples.htm b/assets/snippets/eform/docs/eform_examples.htm deleted file mode 100755 index 2f97c91fd2..0000000000 --- a/assets/snippets/eform/docs/eform_examples.htm +++ /dev/null @@ -1,298 +0,0 @@ - - - - eForm example - - - - - - -

-

eForm - Examples

- - - -
-

Creating a general purpose feedback form

-

For this example we're creating a feedback form where web site users can send feedback to three different departments or email addresses. This is achieved trough the subject selectbox which will be used by eForm to select the correct email address. All fields will be required and to avoid any spamming by automated submit scripts were also adding a CAPTCHA field. When users succesfully have submitted the form they will be presented with a thank you message which includes a copy of what the user submitted.

- -

To achieve this we firstly need to create the following 'templates' either as chunks or in (unplished) MODX documents.

- -


And offcourse we need to place the snippet call on our feedback page. The form will look something like this (after some styling)

- -
-
-

The form

-

Exampel form

- -

The HTML Form Template

-

For this example we will create a chunk called 'eFeedBackForm' and copy and paste the following form

-
- [+validationmessage+]
- <form method="post" action="[~[*id*]~]">
    <input type="hidden" name="formid" value="feedbackForm" />
    
    <p><label accesskey="n" for="Name">Your Name</label>
-     <input type="text" name="Name" maxlength="60" eform="Your - Name::1:Expected at least two words:#REGEX /^\w+\s\w+/i" /></p>
-
    <p><label accesskey="e" for="email">Your Email Address</label>
    <input type="text" name="email" size="40" maxlength="40" eform="Your Email Address:email:1" /></p>
    
    <p><label accesskey="s" for="department">Subject</label>
    <select name="department">
        <option value="1">Website feedback</option>
        <option value="2">Support request</option>
        <option value="3">Feature request</option>
    </select></p>
    
    <p><label accesskey="c" for="comments">Comments</label>
    <textarea cols="40" rows="10" name="comments" eform="Comments:html:1"></textarea></p>

    <p>
    Please enter the     anti spam code below:<br />
    <img src="[+verimageurl+]" alt="verification code" border="1"/>
    </p>
    <p>
    <label accesskey="c" for="vericode">code</label>
    <input type="text" name="vericode" size="20" />
    </p>
    
    <p><input type="submit" name="submit" value="Send Feedback"></p>
</form>
- -

A fairly straight forward html form with some placeholders for error messages and the vericode (CAPTCHA). Note the formid field. This hidden field is required so that eForm can recognize the form. We'll get back to that later at the snippet call.

-

The required fields have formatting and validations options set using the eform pseudo attribute (See the form validation page for details on setting values for the eform attribute) The eform attribute will be stripped from the form before it is sent to the browser.

-

The [+validationmessage+] placeholder will be filled with an error message if the form submit was unsuccesful. Below is an example message:

- -

Some errors were detected in your form:
-The following required field(s) are missing: Your Name, Comments
-Your Email Address is not a valid email address

- -

Note! In the above template we use a hidden field for the formid: <input type="hidden" name="formid" value="feedbackForm" />
-If you are using eForm 1.4+ you can instead use the id attribute -of the form tag itself and leave out the hidden field: <form id="feedbackForm" method="post" action="[~[*id*]~]">. -Either way will work -

- - -

The email template

-

We'll create another chunk for the body of the email and call this one 'eFeedbackReport'

-
-<p>This is a response sent by [+name+] using the feedback form on the website. The details of the message follow below:</p>
<table>
<tr valign="top"><td>Name:</td><td>[+name+]</td></tr>
<tr valign="top"><td>Email:</td><td>[+email+]</td></tr>
<tr valign="top"><td>comments:</td><td>[+comments+]</td></tr>
</table>
<p>You can use this link to reply: <a href="mailto:[+email+]?subject=RE:[+subject+]">[+email+]</a></p>

-
-

As you can see you can use HTML markup in your email. Using placeholders for each field we can populate the email with all information from the submitted form. Placeholders must have the same name as the name used for the from field.

- -

The Thank you message

-

The same recipe... another chunk, called 'eFeedBackThanks' this time

-
-<h3>Thank you for your feedback</h3>
<p>We know how you appreciate our ongoing efforts and thank you for your praise.
We will take any suggestions you may have made to heart and will endeavor to
respond to you in a timely manner.  However as all office staff is attending
our 4 week annual company retreat, this year held in the Costa Del Sol, we ask
for your patience.</p>
<p>Below is a copy of your message:</p>
<table>
<tr><td>Your name:</td><td>[+name+]</td></tr>
<tr><td>Your email address</td><td>[+email+]</td></tr>
<tr valign="top"><td>Your comments</td><td>[+comments+]</td></tr>
</table>
-
- -

The thank you template can be used to present the web site user with a more comprehensive follow up after thay have submitted the form and can contain the same placeholders as used in the report template.

- - -

The Snippet call

-
-[!eForm? &formid=`feedbackForm` &to=`info@some.domain.com,support@some.domain.com,requests@some.domain.com` &tpl=`eFeedBackForm` &report=`eFeedbackReport` &thankyou=`eFeedbackThanks` &mailselector=`department` &vericode=`1` &subject=`Web site feedback`!]
-
-

You should have all paramters on one line but just to make things a bit more readable below is a slightly more verbose printout.

-
-[!eForm?
-  &formid=`feedbackForm`
-  &to=`info@some.domain.com,support@some.domain.com,requests@some.domain.com`
-  &tpl=`eFeedBackForm`
-  &report=`eFeedbackReport`
-  &thankyou=`eFeedbackThanks`
-  &mailselector=`department`
-  &vericode=`1`
-  &subject=`Web site feedback`
-!] -
-

I'll go through them one by one

-
    -
  • &formid=`feedbackForm
    -This tells eForm which form it should process. The form must contain a hidden formid field with the same value. (You did read that note didn't you?) -
  • -
  • &to
    -Here we have the three email addresses of which one can be selected in the form using the department select box. See the &mailselector below. -
  • -
  • &tpl
    -The name of the chunk with the form template we created
  • -
  • &report
    -The name of the chunk with the email template -
  • -
  • &thankyou
    -Yes,... you guessed it. -
  • -
  • &mailselector
    -This contains the name of the department field which we use to select the email address to use. Note the option values of the department select box in the form. They are 1,2 and 3. The value returned from this field will select one of the addresses we just declared in the &to parameter.1 will select the first address, 2 the second and so on. -
  • -
  • &vericode
    -When you add the &vericode=`1` parameter to the snippet call eForm will replace the [+verimageurl+] placeholder in the form with a CAPTCHA generated image. On submitting the form the vericode field is then validated against the text displayed in the image. -
  • -
  • &subject
    -This will be used as the subject of the email. -
  • -
- -


That's it,.. have fun.

- -

Using chunks, snippets or documents for eForm templates

-

Although we have been using chunks for this example you can just as easily - use documentsor even snippets for each template.
- In the case of a document - you would pass the document id to eForm, for example &tpl=`31`. (There is a catch however when you are using the tinyMCE editor. TinyMCE cleans - HTML from what it considers invalid attributes and thus will strip the eform attribute - from your form. If you want to place your form in a document instead of a chunk - make sure you don't use the TinyMCE editor for that document.)
-
Using a snippet as your template source gives you even more flexibility. - You can dynamically create options and fields, however you must make sure - that the snippet returns the same form template between form submits as otherwise - eForm's validation code may incorrectly evaluate invalid values. If for instance - you have a select box with the options values 1,2 & 3 (from a database for - instance) at the first pass and when those values have changed to - 2,3 & 4 by the time the form is submitted (and the template retrieved a - second time with the changed values), eform will see a submitted - value of 1 as invalid...

-

There is a way to add the eform as a valid attribute to tinyMCE but you'll have to dig into the tinyMCE plugin code to do that. However that's beyond the scope of this article.

-
-

Jelle Jager
-AKA TobyL
-(and no,.. don't try to pronounce it) -

-
-
- - diff --git a/assets/snippets/eform/docs/eform_history.htm b/assets/snippets/eform/docs/eform_history.htm deleted file mode 100755 index fe4d52a782..0000000000 --- a/assets/snippets/eform/docs/eform_history.htm +++ /dev/null @@ -1,300 +0,0 @@ - - - -eForm - - -

eForm - The Electronic Form Snippet

- -

Version History

-

Version 1.4.6

-
    -
  • Updated language files.
  • -
  • Added &errorTpl parameter.
  • -
  • Added &errorRequiredTpl parameter.
  • -
  • Added &errorRequiredSeparator parameter.
  • -
-

Version 1.4.5

-
    -
  • Updated language files.
  • -
  • Added &attachmentField parameter.
  • -
  • Added &attachmentPath parameter.
  • -
-

Version 1.4.4.9

-
    -
  • Updated language files.
  • -
  • Security fix: Posting of html only allowed if &allowhtml=`1` and eform field type is html.
  • -
  • Security fix: Prevent XSS by executing htmlspecialchars during formMerge on all form fields.
  • -
-

Version 1.4.4.8

-
    -
  • Security fix: Send sendirect, ccsender and autotext mails only to the first mail address of the comma separated list.
  • -
  • Added: Multiple event functions separated by comma.
  • -
-

Version 1.4.4.1 - 1.4.4.8

-
    -
  • eForm now retains default values for check boxes and radio buttons
  • -
  • text input fields now retain default value set in form template
  • -
  • Added pixelchutes' phx workaround (use (()) instead of [++] in snippet call)
  • -
  • Added proper ef_validation_message language string
  • -
  • FS#960 - removed trimming of $param - values with leading or trailing spaces would always fail validation
  • -
  • bugfix: &jScript parameter doesn't accept chunks, only a link to a JS file if more than one chunk is declared (eg &jScript=`chunk1,chunk2)
  • -
  • bugfix: &protectSubmit creates hash for all fields instead of fields declared in &protectSubmit
  • -
  • bugfix: Auto respond email didn't honour the &sendAsText parameter
  • -
  • bugfix: The #FUNCTION validation rule for select boxes never calls the function
  • -
  • bugfix: Validation css class isn't being added to labels.
  • -
  • Work around for setting required class on check & radio labels
  • -
  • bugfix: If eform attibute is set on multiple check boxes only the last value is set in values list
  • -
  • Security fix: Additional sanitization applied after stripslashes is used on fields
  • -
-

Version 1.4.4

-
    -
  • Fixed various Select box inconsistencies
  • -
  • Adjusted email validation expression to allow + character.
  • -
  • Line breaks in 'Html' fields will only be replaced in report template if &sendAsText false!
  • -
  • Line breaks in 'Html' fields will be replaced in thankyou template when &sendAsText is true
  • -
  • Properly display session hash name in debug text for &protectsubmit code
  • -
  • Properly escape regular expression in form parser
  • -
  • Fixed 0 (zero) values not being processed in form parser for validating select boxes
  • -
  • Fixed ambiguous variable naming in validation code
  • -
  • Enhanced efLoadTemplate function to also allow snippets as templates
  • -
  • &invalidClass now also works for vericode field
  • -
  • Added &autoSenderName parameter
  • -
  • Added &runSnippet parameter - Call a snippet before main form processing. See parameter documentation for details.
  • -
  • Added &snipFolder parameter for those that want to keep different versions of eform in different folders.
  • -
  • Added $lang['ef_mail_error'] to the language file and a slightly improved error reporting when sending mail fails
  • -
  • Date formatting for report can now be set in language file: $_lang['ef_date_format']
  • -
  • Report output is now more locale aware as far as numbers are concerned. Added $_lang['ef_thousands_separator'] to the language file. If set to an empty string (default) the character defined in the current (php) locale will be used (if any).
  • -
-

Version 1.4.3

-
    -
  • FIXED: When using multiple forms on a page all forms are parsed and validated even when only one form is submitted.
  • -
  • FIXED: fields array values were not cleared between forms (resulting in setting validation messages in all forms when any of the forms form doesn't validate)
  • -
  • FIXED: typo in line 78 - thanks to pixelchutes
  • -
  • Some other issues introduced in the last version have also been addressed
  • -
- - -

Version 1.4.2

-
    -
  • New: In-line validation classes. Two new parameters &requiredClass and &invalidClass. You can use these to set classes for fields and their associated labels when they don't validate. Existing classes will be preserved
  • -
  • Updated: Validation messages are now inserted including wrapping elements (set in the language file)
  • -
  • New: You can now also set the [+validationmessage+] placeholder outside the form template (eg: in the page template or elsewhere).
  • -
  • New: Added debug levels: 0:none, 1:validation rules and configuration, 2:print all arrays 3:show parsed template. Some values are only shown when the form is parsed and vaidated (so not the first time the form is displayed)
  • -
  • Updated: Changed the way date values are verified due to differences in php versions (Raymond Irving)
  • -
  • Updated: Email character set now follows modx character set (thanks to Gildas)
  • -
  • New: Added &cssStyle parameter for adding css styles to the <head> tag of the document.
  • -
  • New: Added &jScript parameter for adding javascript to the <head> tag of the document.
  • -
  • New: Added &protectSubmit parameter to protect against multiple submits of similar form data
  • -
  • New: Added &submitLimit parameter for setting a time limit in minutes on successive submits of same form
  • -
  • Tweak: Now trims the spaces in comma separated sessionVars parameter
  • -
  • Some other minor tweaks
  • -
  • Version checking: eForm now checks for and reports differences between snippet and eform.inc.php
  • -
- -

Version 1.4.1

-
    -
  • Fixed: inconsistent casing in event names. All events params are now in the form &eFormOn... (although the &eformOn... will still work)
  • -
  • Fixed: If subject comes from a form field the value is cleared before merging placeholders
  • -
  • Updated: Debug placeholder is now automatically added to form and thankyou template. (It is not auto-added to email message to avoid sending out sensitive info, although you can add the placeholder manually offcourse)
  • -
  • Fixed: Missing language file produces fatal error. (Will now generate a debug message if debug is on)
  • -
  • Fixed: Missing 'replyto' in AddAddressToMailer function.
  • -
  • Fixed: Erroneous closing slash (/) being added in <option ..> tags
  • -
  • Fixed: No whitespace before 'selected' and 'checked' attributes
  • -
  • New: Extra event parameter &eformOnBeforeFormParse (triggered as soon as templates are loaded)
  • -
  • New: Extra event parameter &eFormOnFormValidate (triggered after eForm validation has occurred)
  • -
  • New: Extra event parameter &eFormOnBeforeFormMerge (triggered when and before form is displayed)
  • -
  • New: Extra event parameter &eFormOnBeforeFormParse (triggered after template(s) are loaded and before they are parsed)
  • -
- -

Version 1.4

-
    -
  • New: Extra parameter - &sessionVars- comma delimited list of S_SESSION variable names - that can be added to the list of field values.
  • -
  • New: Extra parameters - &sendAsHtmland - &sendAsText- force email messages to be in Html - or text only format.
  • -
  • Fixed: - &debugparameter wasn't doing anything
  • -
  • Fixed: changed erroneous - &isDebugto correct - &debugparameter in documentation
  • -
  • Fixed: Returning 'foreach' error when chunk or document not found for form template
  • -
  • Fixed: Erroneous error when using multiple forms on a page ($formats persisted between eForm calls)
  • -
  • Updated: Events now work using the - &eFormOnBeforeMailSentand - &eFormOnMailSentparamaters. -The previous event structure did not appear to work without some tricks (variables were out of scope)
  • -
  • Updated: [+subject+] can now be used in report and thank you templates
  • -
  • Updated: When using a document for the templates the document no longer needs to have published set
  • -
  • New: Show error if - &tplis set to the same document (id) containing the eForm snippet call
  • -
  • New: extended debug messages for validated fields (if - &debugis set)
  • -
  • New: added some protection against mail injection
  • -
  • New: &reportAbuse parameter - send 'abuse alert' mail to [(mailsender)] if mail injection is noticed
  • -
  • New: You can now use <form id="formName"...> to match your &formid=`formName` -instead of <input type="hidden" name="formid" value="formName" />
  • -
  • New: You can now set the description using the label tag instead of in the eform attribute -eg. <label for="email">Your Email</label><input type="text" name="email" eform=":email:1::"/> -instead of <label>Your Email</label><input type="text" name="email" eform="Your Email:email:1::"/> -If both are used the eform value takes precedence.
  • -
  • New: Added &disclaimer parameter for adding a disclaimer to the email body. Can be chunk name or document id -Need to manually add [+disclaimer+] placeholder to report template
  • -
  • Optimized: moved form parser code so it is only executed when form is posted
  • -
  • Updated: You can again use placeholders in &from and &fromname (as you can with &subject and &keywords)
  • -
  • Updated: It is now possible to use special placeholders in #SELECT validation rule i.e. -#SELECT jobnum FROM translation_jobs WHERE client_email={email}
  • -
  • New: you can now use the #LIST validation rule for file type checking with file uploads -by supplying a list of file extensions eg: #LIST jpg,jpeg,png,gif
  • -
  • New Examples: -
      -
    • How to use eform events
    • -
    • Multiple forms on one page
    • -
    -
  • -
-

Version 1.3

-
    -
  • eFormParser included
    This version differs from the original in that it incorporates the eFormParser which retrieves part of it's setting and validation information from the form itself by reading the - eformpseudo attribute from the form fields. eForm also no longer requires to set placeholders in each form field with the exception of the - [+vericode+], - [+verimageurl+]and - [+validationmessage+]placeholders.
  • -
  • Extended Server validation
    It is now possible to set validation rules for each field using a list or range of values, regular expressions an more.
  • -
  • Language Setting -All eForm messages are now stored in a separate language file and a new - &languageparameter has been added.
  • -
  • Custom validation messages -You can now add custom validation messages to each field. The way messages are displayed has also changed slighty. Empty fields will now be listed in one message instead of using a separate message for each field.
  • -
-
-
- - \ No newline at end of file diff --git a/assets/snippets/eform/docs/example_2_form_1.gif b/assets/snippets/eform/docs/example_2_form_1.gif deleted file mode 100755 index a410ebc28e9b219ea3d4768aba6db9cc70438b6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9437 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 diff --git a/assets/snippets/eform/docs/example_2_form_2.gif b/assets/snippets/eform/docs/example_2_form_2.gif deleted file mode 100755 index e023c900d4b0c33dd5e225807b1b58b5a6c36d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3184 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 W;*YKrkrG*v7I~2vnUN_K1OPi2@j-_G diff --git a/assets/snippets/eform/docs/form1.gif b/assets/snippets/eform/docs/form1.gif deleted file mode 100755 index f541c26af3d33e4c69247fdada5e5d678d930845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10676 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 diff --git a/assets/snippets/eform/docs/logo.png b/assets/snippets/eform/docs/logo.png deleted file mode 100755 index a25a1ad5267a3f38bc85917b6616795ed6e3b56c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17960 zcmV)KK)Sz)P)pFC3HntbW?9;ba!ELWdKcKV{&h8Wn^h# zAVz6&Wp{6KYjYq?SRgVmFf@mDtj_=d02XvbSad^jWnpw_Z*Cw|X>DZyFgY(WIWI6a zW$qhn001BWNkl5HpU1EbqS3$Xr!5uG`-$lPTOUz z_5N6UpL6b=qA6DcJot^a&N;i?z1Q!ze*O1b!dlCB;X4=PH~Rs;3*TJ$E&+Up!*>bb zI~=}C0N>&8T>|(Hhwl==cQ|~P0KUV)yVMI_H&hw;neC%*yK%7i6C(xhEwQ!Ud}^7| zg84LIx|PhGn4S69$DWz_zpb@V_qCtgjSVIA_)wC7g%n7I`!w1hv__<}lEAfP8p;@C@i-;24Q%~&AzGeOBxY%{?zqh-;a

~ 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 diff --git a/assets/snippets/eform/eform.inc.php b/assets/snippets/eform/eform.inc.php deleted file mode 100644 index 944b827c9c..0000000000 --- a/assets/snippets/eform/eform.inc.php +++ /dev/null @@ -1,1222 +0,0 @@ - -// -// -// -// -// would only have the first selected value validated! -// -// bugfix: &jScript parameter doesn't accept chunks, only a link to a JS file if more than one chunk is declared (eg &jScript=`chunk1,chunk2) -// bugfix: &protectSubmit creates hash for all fields instead of fields declared in &protectSubmit -// bugfix: Auto respond email didn't honour the &sendAsText parameter -// bugfix: The #FUNCTION validation rule for select boxes never calls the function -// bugfix: Validation css class isn't being added to labels. -// -// SECURITY FIX: add additional sanitization to fields after stripping slashes to avoid remote tag execution -// - -$GLOBALS['optionsName'] = "eform"; //name of pseudo attribute used for format settings -$GLOBALS['efPostBack'] = false; - -function eForm($modx,$params) { - global $_lang; - global $debugText; - global $formats,$fields,$efPostBack; - - $fields = array(); //reset fields array - needed in case of multiple forms - - // define some variables used as array index - $_dfnMaxlength = 6; - - extract($params,EXTR_SKIP); // extract params into variables - - $fileVersion = '1.4.8'; - $version = isset($version) ? $version : 'prior to 1.4.2'; - - // include default language file - include_once($snipPath."lang/english.inc.php"); - - // include other language file if set. - $form_language = isset($language) ? $language : $modx->config['manager_language']; - if($form_language!='english' && $form_language!='') { - if(is_file($snipPath ."lang/".$form_language.".inc.php")) - include_once $snipPath ."lang/".$form_language.".inc.php"; - else - if( $isDebug ) $debugText .= sprintf("Language file '%s.inc.php' not found!
", $form_language); //always in english! - } - - // add debug warning - moved again... - if( $isDebug ) $debugText .= $_lang['ef_debug_warning']; - - //check version differences - if( $version != $fileVersion ) - return formMerge($_lang['ef_version_error'], array('version' => $version, 'fileVersion' => $fileVersion)); - - // check for valid form key - moved to below fetching form template to allow id coming from form template - - $nomail = $noemail; //adjust variable name confusion - // activate nomail if missing $to - if (!$to) $nomail = 1; - - - // load templates - if($tpl==$modx->documentIdentifier && $modx->documentIdentifier > 0) return $_lang['ef_is_own_id']."'$tpl'"; - - //required - if( $tmp=efLoadTemplate($tpl) ) $tpl=$tmp; else return $_lang['ef_no_doc'] . " '$tpl'"; - - // check for valid form key - if ($formid=="") return $_lang['ef_error_formid']; - - - // try to get formid from

tag id - preg_match('/]*?id=[\'"]([^\'"]*?)[\'"]/i',$tpl,$matches); - $form_id = isset($matches[1])?$matches[1]:''; - //check for - if( !preg_match('/]*?name=[\'"]formid[\'"]/i',$tpl) ){ - //insert hidden formid field - $tpl = str_replace('',"",$tpl); - } - - $validFormId = ($formid==$_POST['formid'])?1:0; - - // check if postback mode - $efPostBack = ($validFormId && count($_POST)>0)? true:false; //retain old variable? - - - if($efPostBack){ - $report = (($tmp=efLoadTemplate($report))!==false)?$tmp:$_lang['ef_no_doc'] . " '$report'"; - if($thankyou) $thankyou = (($tmp=efLoadTemplate($thankyou))!==false )?$tmp:$_lang['ef_no_doc'] . " '$thankyou'"; - if($autotext) $autotext = (($tmp=efLoadTemplate($autotext))!==false )?$tmp:$_lang['ef_no_doc'] . " '$autotext'"; - } - - //these will be added to the HEAD section of the document when the form is displayed! - if($cssStyle){ - $cssStyle = ( strpos($cssStyle,',') && strpos($cssStyle,'0 ){ - $modx->runSnippet($runSnippet, array('formid'=>$formid)); - //Sadly we cannot know if the snippet fails or if it exists as modx->runsnippet's return value - //is ambiguous - } - - // invoke onBeforeFormParse event set by another script - // Changed in 1.4.4.8 - Multiple event functions separated by comma. - if ($eFormOnBeforeFormParse) { - $eFormOnBeforeFormParse = array_filter(array_map('trim', explode(',', $eFormOnBeforeFormParse))); - foreach ($eFormOnBeforeFormParse as $beforeFormParse) { - if ($isDebug && !function_exists($beforeFormParse)) { - $fields['debug'] .= 'eFormOnBeforeFormParse event: Could not find the function ' . $beforeFormParse; - } else { - $templates = array('tpl' => $tpl, 'report' => $report, 'thankyou' => $thankyou, 'autotext' => $autotext); - if ($beforeFormParse($fields, $templates) === false) { - return ''; - } elseif (is_array($templates)) { - extract($templates); // extract back into original variables - } - } - } - } - - // parse form for formats and generate placeholders - $tpl = eFormParseTemplate($tpl,$isDebug); - - if ($efPostBack) { - - foreach($formats as $k => $discard) { - if(!isset($fields[$k])) $fields[$k] = ''; // store dummy value inside $fields - } - - $disclaimer = (($tmp=efLoadTemplate($disclaimer))!==false )? $tmp:''; - - //error message containers - $vMsg = $rMsg = $rClass = array(); - - // get user post back data - foreach($_POST as $name => $value){ - if(is_array($value)){ // type="checkbox" etc. remove empty values - $value = array_filter($value,create_function('$v','return (!empty($v));')); - } else { - if(!$allowhtml || $formats[$name][2]!='html') $value = strip_tags($value); - } - $fields[$name] = $value; - } - - modx_sanitize_gpc($fields); // Remove the danger values that the result of stripslashes and strip_tags. - - // get uploaded files - foreach($_FILES as $name => $value){ - $fields[$name] = $value; - } - - // check vericode - if($vericode) { - //add support for captcha code - thanks to Djamoer - $code = $_SESSION['veriword'] ? $_SESSION['veriword'] : $_SESSION['eForm.VeriCode']; - if($fields['vericode']!=$code) { - $vMsg[count($vMsg)]=$_lang['ef_failed_vericode']; - $rClass['vericode']=$invalidClass; //added in 1.4.4 - } - } - - // validate fields - foreach($fields as $name => $value) { - $fld = $formats[$name]; - if ($fld) { - $desc = $fld[1]; - $datatype = $fld[2]; - $isRequired = $fld[3]; - - if ($isRequired==1 && $value=="" && $datatype!="file"){ - $rMsg[count($rMsg)]="$desc"; - $rClass[$name]=$requiredClass; - - }elseif( !empty($fld[5]) && $value!="" && $datatype!="file" ) { - $value = validateField($value,$fld,$vMsg,$isDebug); - - if($value===false) $rClass[$name]=$invalidClass; - //if returned value is not of type boolean replace value... - elseif($value!==true) $fields[$name]=$value; //replace value. - - }else{ //value check - switch ($datatype){ - case "integer": - case "float": - if (strlen($value)>0 && !is_numeric($value)){ - $vMsg[count($vMsg)]=$desc . $_lang["ef_invalid_number"]; - $rClass[$name]=$invalidClass; - } - break; - case "date": - if(strlen($value)==0) break; - //corrected by xwisdom for php version differences - $rt = strtotime($value); //php 5.1.0+ returns false while < 5.1.0 returns -1 - if ($rt===false||$rt===-1){ - $vMsg[count($vMsg)]=$desc . $_lang["ef_invalid_date"]; - $rClass[$name]=$invalidClass; - } - break; - case "email": - //stricter email validation - udated to allow + in local name part - if (strlen($value)>0 && !preg_match( - '/^(?:[a-z0-9+_-]+?\.)*?[a-z0-9_+-]+?@(?:[a-z0-9_-]+?\.)*?[a-z0-9_-]+?\.[a-z0-9]{2,24}$/i', $value) ){ - $vMsg[count($vMsg)] = isset($formats[$name][4]) ? $formats[$name][4] : $desc . $_lang["ef_invalid_email"]; - $rClass[$name]=$invalidClass; - } - break; - case "phone": - if (strlen($value)>0 && !preg_match( - '/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/', $value) ){ - $vMsg[count($vMsg)]=$desc . $_lang["ef_invalid_phone"]; - $rClass[$name]=$invalidClass; - } - break; - case "file": - if ($_FILES[$name]['error']==1 || $_FILES[$name]['error']==2){ - $vMsg[count($vMsg)]=$desc . $_lang['ef_upload_exceeded']; - $rClass[$name]=$invalidClass; - }elseif ($isRequired==1 && ($_FILES[$name] && $_FILES[$name]['type']=='')){ - $rMsg[count($rMsg)]=$desc; - $rClass[$name]=$requiredClass; - }elseif ($_FILES[$name]['tmp_name']){ - if( substr($fld[5],0,5)!="#LIST" || validateField($_FILES[$name]['name'],$fld,$vMsg,$isDebug) ) - $attachments[count($attachments)] = $_FILES[$name]['tmp_name']; - else $rClass[$name]=$invalidClass; - } - break; - case "html": - case "checkbox": - case "string": - default: - break; - } - }//end required test - } - } - - // Changed in 1.4.4.5 - now expects 4 parameters - // Changed in 1.4.4.8 - Multiple event functions separated by comma. - if ($eFormOnValidate) { - $eFormOnValidate = array_filter(array_map('trim', explode(',', $eFormOnValidate))); - foreach ($eFormOnValidate as $onValidate) { - if ($isDebug && !function_exists($onValidate)) { - $fields['debug'] .= 'eformOnValidate event: Could not find the function ' . $onValidate; - } else { - if ($onValidate($fields, $vMsg, $rMsg, $rClass) === false) { - return; - } - } - } - } - - - if(count($vMsg)>0 || count($rMsg)>0){ - - //New in 1.4.2 - classes are set in labels and form elements for invalid fields - foreach($rClass as $n => $class){ - $fields[$n . '_class'] = $fields[$n . '_class'] ? ' ' . $fields[$n . '_class'] . ' ' . $class : ' ' . $class; - $fields[$n.'_vClass'] = $fields[$n.'_vClass']?$fields[$n.'_vClass'].' '. $class:$class; - //work around for checkboxes - if( isset($formats[$n][6] )){ //have separate id's for check and option tags - set classes as well - foreach( explode(',',$formats[$n][6]) as $id) - $fields[$id.'_vClass'] = $fields[$id.'_vClass'] ? $fields[$id.'_vClass'].' '. $class : $class; - } - } - - //add debugging info to fields array - if($isDebug){ - ksort($fields); - if($isDebug>1){ - $debugText .= "
Formats array:
". var_export($formats,true).'
'; - $debugText .= "
Fields array:
". var_export($fields,true).'
'; - $debugText .= "
Classes parsed :
" . var_export($rClass,true) ."
"; - } - $debugText .= "
eForm configuration:
\n". var_export($params,true).'
'; - $fields['debug']=$debugText; - } - - // set validation message - $params['errorTpl'] = ($modx->getChunk($params['errorTpl'])) ? $modx->getChunk($params['errorTpl']) : $params['errorTpl']; - $params['errorRequiredTpl'] = ($modx->getChunk($params['errorRequiredTpl'])) ? $modx->getChunk($params['errorRequiredTpl']) : $params['errorRequiredTpl']; - $params['errorRequiredSeparator'] = ($modx->getChunk($params['errorRequiredSeparator'])) ? $modx->getChunk($params['errorRequiredSeparator']) : $params['errorRequiredSeparator']; - if (count($rMsg) > 0) { - $rMsg = str_replace('[+ef_required_list+]', implode($params['errorRequiredSeparator'], $rMsg), $params['errorRequiredTpl']); - array_unshift($vMsg, str_replace("[+fields+]", $rMsg, $_lang['ef_required_message'])); - } - $validationMessage = str_replace('[+ef_message_text+]', $_lang['ef_validation_message'], $params['errorTpl']); - if (!strstr($tpl, '[+validationmessage+]')) { - $modx->setPlaceholder('validationmessage', str_replace('[+ef_wrapper+]', implode('
', $vMsg), $validationMessage)); - } else { - $fields['validationmessage'] .= str_replace('[+ef_wrapper+]', implode('
', $vMsg), $validationMessage); - } - } else { - - // format report fields - foreach($fields as $name => $value) { - $fld = $formats[$name]; - if ($fld) { - $datatype = $fld[2]; - switch ($datatype) { - - case "integer": - $value = number_format((float) $value, 0, '.', ''); - break; - case "float": - $localeInfo = localeconv(); - $th_sep = empty($_lang['ef_thousands_separator'])?$localeInfo['thousands_sep']:$_lang['ef_thousands_separator']; - $dec_point= $localeInfo['decimal_point']; - $debugText .= 'Locale
'.var_export($localeInfo,true).'
'; - $value = number_format((float) $value, 2, $dec_point, $th_sep); //EM~ - break; - case "date": - $format_string = isset($_lang['ef_date_format']) ? $_lang['ef_date_format'] : '%d-%b-%Y %H:%M:%S'; - $value = ($value)? strftime($format_string,strtotime($value)):""; - $value=str_replace("00:00:00","",$value);// remove trailing zero time values - break; - case "html": - // convert \n to
- if(!$sendAsText ) $value = preg_replace('#(\n|\n|\n)#i','
',$value); - break; - case "file": - // set file name - if($value['type']!="" && $value['error']==0){ - $value = $value["name"]; - $patharray = explode(((strpos($value,"/")===false)? "\\":"/"), $value); - $value = $patharray[count($patharray)-1]; - } - else { - $value = ""; - } - break; - } - $fields[$name] = $value; - } - } - // set postdate - $fields['postdate'] = strftime("%d-%b-%Y %H:%M:%S",time()); - - //check against email injection and replace suspect content - if( hasMailHeaders($fields) ){ - - // send email to webmaster?? - if ($reportAbuse){ //set in snippet configuration tab - $body = $_lang['ef_mail_abuse_message']; - $body .=""; - foreach($fields as $key => $value) - $body .= ""; - $body .="
$key
$value
"; - $modx->loadExtension('MODxMailer'); - // send abuse alert - $modx->mail->IsHTML(1); - $modx->mail->From = $modx->config['emailsender']; - $modx->mail->FromName = $modx->config['site_name']; - $modx->mail->Subject = $_lang['ef_mail_abuse_subject']; - $modx->mail->Body = $body; - AddAddressToMailer($modx->mail,"to",$modx->config['emailsender']); - $modx->mail->send(); //ignore mail errors in this case - $modx->mail->ClearAllRecipients(); - } - //return empty form with error message - //register css and/or javascript - if( isset($startupSource) ) efRegisterStartupBlock($startupSource); - return formMerge($tpl,array('validationmessage'=> $_lang['ef_mail_abuse_error'])); - } - - // added in 1.4.2 - Limit the time between form submissions - if($submitLimit>0){ - if( time()<$submitLimit+$_SESSION[$formid.'_limit'] ){ - return formMerge($_lang['ef_submit_time_limit'], array('submitLimitMinutes' => $submitLimit / 60)); - } - else unset($_SESSION[$formid.'_limit'], $_SESSION[$formid.'_hash']); //time expired - } - - // invoke OnBeforeMailSent event set by another script - // Changed in 1.4.4.8 - Multiple event functions separated by comma. - if ($eFormOnBeforeMailSent) { - $eFormOnBeforeMailSent = array_filter(array_map('trim', explode(',', $eFormOnBeforeMailSent))); - foreach ($eFormOnBeforeMailSent as $beforeMailSent) { - if ($isDebug && !function_exists($beforeMailSent)) { - $fields['debug'] .= 'eFormOnBeforeMailSent event: Could not find the function ' . $beforeMailSent; - } elseif ($beforeMailSent($fields) === false) { - if (isset($fields['validationmessage']) && !empty($fields['validationmessage'])) { - //register css and/or javascript - if (isset($startupSource)) { - efRegisterStartupBlock($startupSource); - } - return formMerge($tpl, $fields); - } else { - return; - } - } - } - } - - if( $protectSubmit ){ - $hash = ''; - // create a hash of key data - if(!is_numeric($protectSubmit)){ //supplied field names - $protectSubmit = (strpos($protectSubmit,','))? explode(',',$protectSubmit):array($protectSubmit); - foreach($protectSubmit as $fld) $hash .= isset($fields[$fld]) ? $fields[$fld] : ''; - }else //all required fields - foreach($formats as $fld) $hash .= ($fld[3]==1) ? $fields[$fld[0]] : ''; - if($hash) $hash = md5($hash); - - if( $isDebug ) $debugText .= "SESSION HASH:".$_SESSION[$formid.'_hash']."
"."FORM HASH:".$hash."
"; - - // check if already succesfully submitted with same data - if( isset($_SESSION[$formid.'_hash']) && $_SESSION[$formid.'_hash'] == $hash && $hash!='' ) - return formMerge($_lang['ef_multiple_submit'],$fields); - } - - $fields['disclaimer'] = ($disclaimer)? formMerge($disclaimer,$fields):""; - $subject = isset($fields['subject'])?$fields['subject']:(($subject)? formMerge($subject,$fields):$category); - $fields['subject'] = $subject; //make subject available in report & thank you page - $report = ($report)? formMerge($report,$fields):""; - $keywords = ($keywords)? formMerge($keywords,$fields):""; - $from = ($from)? formMerge($from,$fields):""; - $fromname = ($from)? formMerge($fromname,$fields):""; - - // added in 1.4.5 - Use a field for attachments - if ($attachmentField != '' && isset($fields[$attachmentField]) && !empty($fields[$attachmentField])) { - $attachmentPath = realpath(MODX_BASE_PATH . $attachmentPath) . '/'; - $filenames = explode(',', $fields[$attachmentField]); - foreach ($filenames as $filename) { - if (is_file($attachmentPath . $filename)) { - $attachments[count($attachments)] = $attachmentPath . $filename; - } - } - } - - $to = formMerge($to,$fields); - if(empty($to) || !strpos($to,'@')) $nomail=1; - - if(!$nomail){ - // check for mail selector field - select an email from to list - if ($mselector && $fields[$mselector]) { - $i = (int)$fields[$mselector]; - $ar = explode(",",$to); - if ($i>0) $i--; - if ($ar[$i]) $to = $ar[$i]; - else $to = $ar[0]; - } - - //set reply-to address - //$replyto snippet parameter must contain email or fieldname - if(!strstr($replyto,'@')) - $replyto = ( $fields[$replyto] && strstr($fields[$replyto],'@') )?$fields[$replyto]:$from; - - // include PHP Mailer - $modx->loadExtension('MODxMailer'); - - // send form - //defaults to html so only test sendasText - $isHtml = ($sendAsText==1 || strstr($sendAsText,'report'))?false:true; - - // added in 1.4.4.8 - Send sendirect, ccsender and autotext mails only to the first mail address of the comma separated list. - if ($fields['email']) { - $firstEmail = explode(',', $fields['email']); - $firstEmail = array_shift($firstEmail); - } else { - $firstEmail = ''; - } - - if(!$noemail) { - if($sendirect) $to = $firstEmail; - $modx->mail->IsHTML($isHtml); - $modx->mail->From = $from; - $modx->mail->FromName = $fromname; - $modx->mail->Subject = $subject; - $modx->mail->Body = (!$isHtml) ? $report : htmlspecialchars_decode($report, ENT_QUOTES); - AddAddressToMailer($modx->mail,"replyto",$replyto); - AddAddressToMailer($modx->mail,"to",$to); - AddAddressToMailer($modx->mail,"cc",$cc); - AddAddressToMailer($modx->mail,"bcc",$bcc); - AttachFilesToMailer($modx->mail,$attachments); - if(!$modx->mail->send()) return 'Main mail: ' . $_lang['ef_mail_error'] . $modx->mail->ErrorInfo; - $modx->mail->ClearAllRecipients(); - $modx->mail->ClearAttachments(); - } - - // send user a copy of the report - if($ccsender && $firstEmail != '') { - $modx->mail->IsHTML($isHtml); - $modx->mail->From = $from; - $modx->mail->FromName = $fromname; - $modx->mail->Subject = $subject; - $modx->mail->Body = (!$isHtml) ? $report : htmlspecialchars_decode($report, ENT_QUOTES); - AddAddressToMailer($modx->mail,"to",$firstEmail); - AttachFilesToMailer($modx->mail,$attachments); - if(!$modx->mail->send()) return 'CCSender: ' . $_lang['ef_mail_error'] . $modx->mail->ErrorInfo; - $modx->mail->ClearAllRecipients(); - $modx->mail->ClearAttachments(); - } - - // send auto-respond email - //defaults to html so only test sendasText - $isHtml = ($sendAsText==1 || strstr($sendAsText,'autotext'))?false:true; - if ($autotext && $firstEmail != '') { - $autotext = formMerge($autotext,$fields); - $modx->mail->IsHTML($isHtml); - $modx->mail->From = ($autosender)? $autosender:$from; - $modx->mail->FromName = ($autoSenderName)?$autoSenderName:$fromname; - $modx->mail->Subject = $subject; - $modx->mail->Body = (!$isHtml) ? $autotext : htmlspecialchars_decode($autotext, ENT_QUOTES); - AddAddressToMailer($modx->mail,"to",$firstEmail); - if(!$modx->mail->send()) return 'AutoText: ' . $_lang['ef_mail_error'] . $modx->mail->ErrorInfo; - $modx->mail->ClearAllRecipients(); - } - - //defaults to text - test for sendAsHtml - $isHTML = ($sendAsHTML==1 || strstr($sendAsHtml,'mobile'))?true:false; - // send mobile email - if ($mobile && $mobiletext) { - $mobiletext = formMerge($mobiletext,$fields); - $modx->mail->IsHTML($isHtml); - $modx->mail->From = $from; - $modx->mail->FromName = $fromname; - $modx->mail->Subject = $subject; - $modx->mail->Body = (!$isHtml) ? $mobiletext : htmlspecialchars_decode($mobiletext, ENT_QUOTES); - AddAddressToMailer($modx->mail,"to",$mobile); - $modx->mail->send(); - $modx->mail->ClearAllRecipients(); - } - - }//end test nomail - // added in 1.4.2 - Protection against multiple submit with same form data - if($protectSubmit) $_SESSION[$formid.'_hash'] = $hash; //hash is set earlier - - // added in 1.4.2 - Limit the time between form submissions - if($submitLimit>0) $_SESSION[$formid.'_limit'] = time(); - - // invoke OnMailSent event set by another script - // Changed in 1.4.4.8 - Multiple event functions separated by comma. - if ($eFormOnMailSent) { - $eFormOnMailSent = array_filter(array_map('trim', explode(',', $eFormOnMailSent))); - foreach ($eFormOnMailSent as $mailSent) { - if ($isDebug && !function_exists($mailSent)) { - $fields['debug'] .= 'eFormOnMailSent event: Could not find the function' . $mailSent; - } else { - if ($mailSent($fields) === false) { - return; - } - } - } - } - - - if($isDebug){ - $debugText .="Mail Headers:
From: $from ($fromname)
Reply-to:$replyto
To: $to
Subject: $subject
CC: $cc
BCC:$bcc
"; - if($isDebug>1){ - $debugText .= "
Formats array:
". var_export($formats,true).'
'; - $debugText .= "
Fields array:
". var_export($fields,true).'
'; - } - $fields['debug'] = $debugText; - } - - // show or redirect to thank you page - if ($gid==$modx->documentIdentifier){ - - if(!empty($thankyou) ){ - if($isDebug && !strstr($thankyou,'[+debug+]')) $thankyou .= '[+debug+]'; - if( isset($startupSource) ) efRegisterStartupBlock($startupSource,true); //skip scripts - if( $sendAsText ){ - foreach($formats as $key => $fmt) - if($fmt[2]=='html') $fields[$key] = str_replace("\n",'
',$fields[$key]); - } - $thankyou = formMerge($thankyou,$fields); - return $thankyou; - }else{ - return $_lang['ef_thankyou_message']; - } - } - else { - $url = $modx->makeURL($gid); - $modx->sendRedirect($url); - } - return; // stop here - } - }else{ //not postback - - //add debugging info to fields array - if($isDebug){ - $debugText .= "
eForm configuration:
". var_export($params,true).'
'; - $fields['debug']=$debugText; - } - - //strip the eform attribute - $regExpr = "#eform=([\"'])[^\\1]*?\\1#si"; - $tpl = preg_replace($regExpr,'',$tpl); - } - - // set vericode - if($vericode) { - $_SESSION['eForm.VeriCode'] = $fields['vericode'] = substr(uniqid(''),-5); - $fields['verimageurl'] = MODX_MANAGER_URL.'includes/veriword.php?rand='.rand(); - } - - // get SESSION data - thanks to sottwell - if($sessionVars){ - $sessionVars = (strpos($sessionVars,',',0))?array_filter(array_map('trim', explode(',', $sessionVars))):array($sessionVars); - foreach( $sessionVars as $varName ){ - if( isset($_SESSION[$varName]) && !empty($_SESSION[$varName]) ) - $fields[$varName] = ( isset($fields[$varName]) && $postOverides )?$fields[$varName]:$_SESSION[$varName]; - } - } - - // invoke OnBeforeFormMerge event set by another script - // Changed in 1.4.4.8 - Multiple event functions separated by comma. - if ($eFormOnBeforeFormMerge) { - $eFormOnBeforeFormMerge = array_filter(array_map('trim', explode(',', $eFormOnBeforeFormMerge))); - foreach ($eFormOnBeforeFormMerge as $beforeFormMerge) { - if ($isDebug && !function_exists($beforeFormMerge)) { - $fields['debug'] .= 'eFormOnBeforeFormMerge event: Could not find the function ' . $beforeFormMerge; - } else { - if ($beforeFormMerge($fields) === false) { - return; - } - } - } - } - - // build form - if($isDebug && !$fields['debug']) $fields['debug'] = $debugText; - if($isDebug && !strstr($tpl,'[+debug+]')) $tpl .= '[+debug+]'; - //register css and/or javascript - if( isset($startupSource) ) efRegisterStartupBlock($startupSource); - return formMerge($tpl,$fields); -} - -// Form Merge -function formMerge($docText, $docFields) { - global $modx, $formats, $lastitems; - if(!$docText) return ''; - - preg_match_all('~\[\+(.*?)\+\]~', $docText, $matches); - for($i=0;$iconfig['modx_charset']); - } - if(strpos($name,":")===false) $docText = str_replace("[+$name+]",$value,$docText); - else { - // this might be a listbox item. - // we'll remove this field later - $lastitems[count($lastitems)]="[+$name+]"; - } - } - $docText = $modx->mergeDocumentContent($docText); - $docText = $modx->mergeSettingsContent($docText); - $docText = $modx->mergeChunkContent($docText); - if(strpos($docText,'[!')!==false) $docText = str_replace(array('[!','!]'),array('[[',']]'),$docText); - $docText = $modx->evalSnippets($docText); - $lastitems[count($lastitems)] = "class=\"\""; //removal off empty class attributes - $docText = str_replace($lastitems,"",$docText); - return $docText; -} - -// Adds Addresses to Mailer -function AddAddressToMailer(&$mail,$type,$addr){ - if(empty($addr)) return; - $a = array_filter(array_map('trim', explode(',', $addr))); - foreach($a as $v){ - if ($type=='to') $mail->AddAddress($v); - elseif ($type=='cc') $mail->AddCC($v); - elseif ($type=='bcc') $mail->AddBCC($v); - elseif ($type=='replyto') $mail->AddReplyTo($v); - } -} - -// Attach Files to Mailer -function AttachFilesToMailer(&$mail,&$attachFiles) { - if(count($attachFiles)>0){ - foreach($attachFiles as $attachFile){ - if(!is_file($attachFile)) continue; - $FileName = $attachFile; - $contentType = "application/octetstream"; - if (is_uploaded_file($attachFile)){ - foreach($_FILES as $n => $v){ - if($_FILES[$n]['tmp_name']==$attachFile) { - $FileName = $_FILES[$n]['name']; - $contentType = $_FILES[$n]['type']; - } - } - } - $patharray = explode(((strpos($FileName,"/")===false)? "\\":"/"), $FileName); - $FileName = $patharray[count($patharray)-1]; - $mail->AddAttachment($attachFile,$FileName,"base64",$contentType); - } - } -} - -/*--- Form Parser stuff----------------------*/ -function eFormParseTemplate($tpl, $isDebug=false ){ - global $modx,$formats,$optionsName,$_lang,$debugText,$fields,$validFormId; - global $efPostBack; - - $formats = array(); //clear formats so values don't persist through multiple snippet calls - $labels = array(); - - $regExpr = "#(]*?>)(.*?)#si";; - preg_match_all($regExpr,$tpl,$matches); - foreach($matches[1] as $key => $fld){ - $attr = attr2array($fld); - if(isset($attr['for'])){ - $name = substr($attr['for'],1,-1); - //add class to fields array - $fields[$name."_vClass"] = isset($attr['class'])?substr($attr['class'],1,-1):''; - $labels[$name] = strip_tags($matches[2][$key]); - //create placeholder for class - $attr['class'] = '"[+'.$name.'_vClass+]"'; - $newTag = buildTagPlaceholder('label',$attr,$name); - $tpl = str_replace($fld,$newTag,$tpl); - } - } - - //retrieve all the form fields - $regExpr = "#(<(input|select|textarea)[^>]*?>)#si"; - preg_match_all($regExpr,$tpl,$matches); - - $fieldTypes = $matches[2]; - $fieldTags = $matches[1]; - - for($i=0;$i]*?" . ">(.*?)#si"; - preg_match($regExp, $tpl, $matches); - $optionTags = $matches[1]; - - $select = $newSelect = $matches[0]; - //get separate option tags and split them up - preg_match_all("#(
- -'; \ No newline at end of file diff --git a/assets/snippets/wayfinder/configs/breadcrumb.class.inc.php b/assets/snippets/wayfinder/configs/breadcrumb.class.inc.php deleted file mode 100644 index c33c706778..0000000000 --- a/assets/snippets/wayfinder/configs/breadcrumb.class.inc.php +++ /dev/null @@ -1,30 +0,0 @@ -getChunk($tpl) != "") - { - $template = $modx->getChunk($tpl); - } - else - { - $template = $tpl; - } - return $template; - } -} \ No newline at end of file diff --git a/assets/snippets/wayfinder/configs/breadcrumb.config.php b/assets/snippets/wayfinder/configs/breadcrumb.config.php deleted file mode 100644 index 44e7488ad9..0000000000 --- a/assets/snippets/wayfinder/configs/breadcrumb.config.php +++ /dev/null @@ -1,45 +0,0 @@ -[+home+][+wf.wrapper+]'; - else $outerTpl = $wfbc->fetch($outerTpl); - if(!isset($innerTpl)) $innerTpl = '[+wf.wrapper+]'; - else $innerTpl = $wfbc->fetch($innerTpl); - if(!isset($rowTpl)) $rowTpl = ' '; - else $rowTpl = $wfbc->fetch($rowTpl); - if(!isset($hereTpl)) $hereTpl = '[+wf.linktext+]'; - else $hereTpl = $wfbc->fetch($hereTpl); - if(!isset($delim)) $delim = ' » '; - else $delim = $wfbc->fetch($delim); - if(!isset($activeParentRowTpl)) $activeParentRowTpl = '[+wf.linktext+][+delim+][+wf.wrapper+]'; - else $activeParentRowTpl = $wfbc->fetch($activeParentRowTpl); - -////////////////// build - $activeParentRowTpl = str_replace('[+delim+]',$delim,$activeParentRowTpl); - if ($modx->config['site_start'] !== $modx->documentIdentifier) - { - $home = $modx->getDocumentObject('id', $modx->config['site_start']); - $home_title = $home['menutitle'] ? $home['menutitle'] : $home['pagetitle']; - $homeLink = '' . $home_title . '' . $delim; - } - else - { - $homeLink = ''; - } - - if ($modx->config['site_start'] !== $modx->documentIdentifier) - $outerTpl = '@CODE:' . str_replace('[+home+]',$homeLink,$outerTpl); - else - $outerTpl = '@CODE: '; - - $innerTpl = '@CODE:' . $innerTpl; - $rowTpl = '@CODE:' . $rowTpl; - $hereTpl = '@CODE:' . $hereTpl; - $activeParentRowTpl = '@CODE:' . $activeParentRowTpl; - diff --git a/assets/snippets/wayfinder/configs/cssplay-basicdropdown.config.php b/assets/snippets/wayfinder/configs/cssplay-basicdropdown.config.php deleted file mode 100644 index 8837a98014..0000000000 --- a/assets/snippets/wayfinder/configs/cssplay-basicdropdown.config.php +++ /dev/null @@ -1,23 +0,0 @@ - -
    - [+wf.wrapper+] -
- '; - - $rowTpl = '@CODE:[+wf.linktext+][+wf.wrapper+]'; - - $parentRowTpl = '@CODE:
  • [+wf.linktext+] - [+wf.wrapper+] -
  • '; - - $innerTpl = '@CODE:
      - [+wf.wrapper+] -
    '; - - $cssTpl = '@CODE:'; diff --git a/assets/snippets/wayfinder/configs/cssplay-dropdown.config.php b/assets/snippets/wayfinder/configs/cssplay-dropdown.config.php deleted file mode 100644 index 9a0454cc31..0000000000 --- a/assets/snippets/wayfinder/configs/cssplay-dropdown.config.php +++ /dev/null @@ -1,19 +0,0 @@ - -
      - [+wf.wrapper+] -
    - '; - - $rowTpl = '@CODE:[+wf.linktext+][+wf.wrapper+]'; - - $parentRowTpl = '@CODE:
  • [+wf.linktext+] - [+wf.wrapper+] -
  • '; - - $cssTpl = '@CODE:'; diff --git a/assets/snippets/wayfinder/configs/cssplay-dropline.config.php b/assets/snippets/wayfinder/configs/cssplay-dropline.config.php deleted file mode 100644 index dae1c82506..0000000000 --- a/assets/snippets/wayfinder/configs/cssplay-dropline.config.php +++ /dev/null @@ -1,23 +0,0 @@ - -
      - [+wf.wrapper+] -
    - '; - - $rowTpl = '@CODE:[+wf.linktext+][+wf.wrapper+]'; - - $parentRowTpl = '@CODE:
  • [+wf.linktext+] - [+wf.wrapper+] -
  • '; - - $innerTpl = '@CODE:
      - [+wf.wrapper+] -
    '; - - $cssTpl = '@CODE:'; diff --git a/assets/snippets/wayfinder/configs/cssplay-flyout.config.php b/assets/snippets/wayfinder/configs/cssplay-flyout.config.php deleted file mode 100644 index ea20aa4f1e..0000000000 --- a/assets/snippets/wayfinder/configs/cssplay-flyout.config.php +++ /dev/null @@ -1,23 +0,0 @@ - -
      - [+wf.wrapper+] -
    - '; - - $rowTpl = '@CODE:[+wf.linktext+][+wf.wrapper+]'; - - $parentRowTpl = '@CODE:
  • [+wf.linktext+] - [+wf.wrapper+] -
  • '; - - $innerTpl = '@CODE:
      - [+wf.wrapper+] -
    '; - - $cssTpl = '@CODE:'; diff --git a/assets/snippets/wayfinder/configs/default.config.php.blank b/assets/snippets/wayfinder/configs/default.config.php.blank deleted file mode 100644 index 15c5adc7fa..0000000000 --- a/assets/snippets/wayfinder/configs/default.config.php.blank +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/assets/snippets/wayfinder/configs/mollio.config.php b/assets/snippets/wayfinder/configs/mollio.config.php deleted file mode 100644 index 717bc38ab9..0000000000 --- a/assets/snippets/wayfinder/configs/mollio.config.php +++ /dev/null @@ -1,61 +0,0 @@ - - [+wf.wrapper+] - '; - - $innerTpl = '@CODE:
      - [+wf.wrapper+] -
    '; - - $rowTpl = '@CODE:[+wf.linktext+][+wf.wrapper+]'; - - $cssTpl = '@CODE:'; -?> \ No newline at end of file diff --git a/assets/snippets/wayfinder/configs/slidingdoors.config.php b/assets/snippets/wayfinder/configs/slidingdoors.config.php deleted file mode 100644 index 4a976be16d..0000000000 --- a/assets/snippets/wayfinder/configs/slidingdoors.config.php +++ /dev/null @@ -1,21 +0,0 @@ - -
      - [+wf.wrapper+] -
    - '; - - $innerTpl = '@CODE:
      - [+wf.wrapper+] -
    '; - - $rowTpl = '@CODE:[+wf.linktext+][+wf.wrapper+]'; - - $cssTpl = '@CODE:'; -?> \ No newline at end of file diff --git a/assets/snippets/wayfinder/examples/cssplay/basic_dd.css b/assets/snippets/wayfinder/examples/cssplay/basic_dd.css deleted file mode 100755 index d6f855b575..0000000000 --- a/assets/snippets/wayfinder/examples/cssplay/basic_dd.css +++ /dev/null @@ -1,64 +0,0 @@ -/* common styling */ -/* set up the overall width of the menu div, the font and the margins */ - -.menu { -width:750px; -position:relative; -z-index:100; -} -/* remove the bullets and set the margin and padding to zero for the unordered list */ -.menu ul { -padding:0; -margin:0; -list-style-type: none; -} -/* float the list so that the items are in a line and their position relative so that the drop down list will appear in the right place underneath each list item */ -.menu ul li { -padding:0; -margin:0; -float:left; -position:relative; -} -/* style the links to be 104px wide by 30px high with a top and right border 1px solid white. Set the background color and the font size. */ -.menu ul li a, .menu ul li a:visited { -display:block; -text-align:center; -text-decoration:none; -width:106px; -height:30px; -color:#000; -border:1px solid #fff; -border-width:1px 1px 0 0; -background:#c9c9a7; -line-height:30px; -} -/* make the dropdown ul invisible */ -.menu ul li ul { -display: none; -} - -/* specific to non IE browsers */ -/* set the background and foreground color of the main menu li on hover */ -.menu ul li:hover a { -color:#fff; -background:#b3ab79; -} -/* make the sub menu ul visible and position it beneath the main menu list item */ -.menu ul li:hover ul { -display:block; -position:absolute; -top:31px; -left:0; -width:105px; -} -/* style the background and foreground color of the submenu links */ -.menu ul li:hover ul li a { -display:block; -background:#faeec7; -color:#000; -} -/* style the background and forground colors of the links on hover */ -.menu ul li:hover ul li a:hover { -background:#dfc184; -color:#000; -} diff --git a/assets/snippets/wayfinder/examples/cssplay/chunks.txt b/assets/snippets/wayfinder/examples/cssplay/chunks.txt deleted file mode 100755 index 56adca3375..0000000000 --- a/assets/snippets/wayfinder/examples/cssplay/chunks.txt +++ /dev/null @@ -1,48 +0,0 @@ -*********************************************************************************************************** -Create following chunks for all other than the revisited flyout and dropdown menus (for these, see below) * - * -These chunks are meant for the menus that are in template.html !! * - * -wfOuter: --------- - - - -wfInner: --------- - -
      - [+wf.wrapper+] -
    - -wfParentRow: ------------- - -
  • [+wf.linktext+] - [+wf.wrapper+] -
  • - -wfRow: ------- - -[+wf.linktext+][+wf.wrapper+] - - -*********************************************************************************************************** -For the revisited flyout and dropdown menu, you only need the following chunk * - * -This chunk is meant for the menus that are in template_revisited.html !! * - * -wfParentRow: ------------- - -
  • [+wf.linktext+] -
    -[+wf.wrapper+] -
    - -
  • \ No newline at end of file diff --git a/assets/snippets/wayfinder/examples/cssplay/drop.gif b/assets/snippets/wayfinder/examples/cssplay/drop.gif deleted file mode 100755 index 9a9305181bd01f761b5831ff3e851c50a1639391..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmZ?wbhEHb - - - - - - - -

    Change the css stylesheets to alter the menu type!

    -Possible values are:
    - - -[!Wayfinder? &startId=`0` &level=`3` &parentClass=`hide` &parentRowTpl=`wfParentRow` &outerTpl=`wfOuter` &innerTpl=`wfInner` &rowTpl=`wfRow`]] - - - \ No newline at end of file diff --git a/assets/snippets/wayfinder/examples/mollio/howto.txt b/assets/snippets/wayfinder/examples/mollio/howto.txt deleted file mode 100755 index 46e8e68067..0000000000 --- a/assets/snippets/wayfinder/examples/mollio/howto.txt +++ /dev/null @@ -1,114 +0,0 @@ -And here's a quick tutorial for the testers. The following is how you would convert the popular Mollio Menu template menus with Wayfinder. I think you'll see how much easier it will be to create dynamic, nested menus compared to DropMenu. This is totally untested, but it should work... - -First, reference this [url=http://www.mollio.org/typeC.html]example page[/url]. Nice eh? - -For reference, here's the Menu Code: -[code][/code] - -Your example call: -[code][[Wayfinder? &startId=`0` &level=`2` &outerTpl=`wfOuter` &innerTpl=`wfInner` &rowTpl=`wfRow` &hereClass=`active` &firstClass=`first` &lastClass=`last`]][/code] - -Your outer template – [b]{{wfOuter}}[/b] : -[code][/code] - -Your inner template – [b]{{wfInner}}[/b] : -[code]
      -[+wf.wrapper+] -
    [/code] - -Your row template – [b]{{wfRow}}[/b] : -[code][+wf.linktext+][+wf.wrapper+][/code] - -Add the following CSS to your template: -[code]'; - $output .= ''; - foreach ($this->debugInfo as $group => $item) { - switch ($group) { - case 'template': - $output .= ''; - foreach ($item as $parentId => $info) { - $output .= $modx->parseText(' - - ', $info); - } - break; - case 'wrapper': - $output .= ''; - - foreach ($item as $parentId => $info) { - $output .= $modx->parseText('
    Template Processing
    [+header+] - [+message+]
    [+info+]
    Document Processing
    - - - ',$info); - - foreach ($this->debugInfo['row'] as $key => $value) { - $value['message_v'] = $this->debugInfo['rowdata'][$key]['message']; - $value['info_v'] = $this->debugInfo['rowdata'][$key]['info']; - $keyParts = explode(':',$key); - if ($parentId == $keyParts[0]) { - $output .= $modx->parseText(' - ',$value); - } - } - - $output .= '
    [+header+] - [+message+]
    [+info+]
    Documents included in this wrapper:
    [+header+]
    -
    [+message+] [+message_v+]
    -
    [+info+] [+info_v+]
    '; - } - - break; - case 'settings': - $output .= 'Settings'; - foreach ($item as $parentId => $info) { - $output .= $modx->parseText(' - [+header+] - [+message+] - [+info+]',$info); - } - break; - default: - - break; - } - } - $output .= ''; - return $output; - } - - function modxPrep($value) { - global $modx; - $value = (strpos($value,'<') !== FALSE) ? htmlentities($value,ENT_NOQUOTES,$modx->config['modx_charset']) : $value; - $s = array('[', ']', '{', '}'); - $r = array('[', ']', '{', '}'); - $value = str_replace($s, $r, $value); - return $value; - } - - function hsc($string) { - global $modx; - return htmlspecialchars($string, ENT_COMPAT, $modx->config['modx_charset']); - } - - function getParentID($id) { - global $modx; - if($modx->documentObject['parent']==0) return $id; - return $modx->documentObject['parent']; - } -} diff --git a/install/assets/snippets/wayfinder.tpl b/install/assets/snippets/wayfinder.tpl deleted file mode 100644 index bf4fa64b1d..0000000000 --- a/install/assets/snippets/wayfinder.tpl +++ /dev/null @@ -1,15 +0,0 @@ -// Date: Sat, 4 Nov 2017 22:17:31 +0300 Subject: [PATCH 329/577] move Personalize to Extras (https://github.com/extras-evolution/Personalize) --- assets/snippets/personalize/readme.html | 21 ------ .../personalize/snippet.personalize.php | 73 ------------------- install/assets/snippets/personalize.tpl | 18 ----- 3 files changed, 112 deletions(-) delete mode 100644 assets/snippets/personalize/readme.html delete mode 100644 assets/snippets/personalize/snippet.personalize.php delete mode 100644 install/assets/snippets/personalize.tpl diff --git a/assets/snippets/personalize/readme.html b/assets/snippets/personalize/readme.html deleted file mode 100644 index 5a61961803..0000000000 --- a/assets/snippets/personalize/readme.html +++ /dev/null @@ -1,21 +0,0 @@ - - -
    -

    Personalize 2.1

    -

    Checks to see if webusers are logged in and displays yesChunk if the user is logged or noChunk if user is not logged. Insert only the chunk name as param, without {{}}. Can use a placeholder to output the username.

    -
      -
    • TESTED: can be used more than once per page.
    • -
    • TESTED: chunks can contain snippets.
    • -
    -


    Params

    &yesChunk [string] (optional)
    Output for LOGGED users

    -

    &noChunk [string] (optional)
    Output for NOT logged users

    -

    &ph [string] (optional)
    Placeholder for placing the username
    ATTENTION!: Place this ph only in yesChunk!

    -

    &context [string] (optional)
    web|mgr

    -

    &yesTV [string] (optional)
    Output for LOGGED users

    -

    &noTV [string] (optional)
    Output for NOT logged users

    -


    Example Usage

    -

    [[Personalize? &yesChunk=`Link` &noChunk=`Register` &ph=`name`]]

    -


    Having Chunks named {{Link}} and another {{Register}}, the first will be published to registered user, the second to non-registered users.

    -
    - - \ No newline at end of file diff --git a/assets/snippets/personalize/snippet.personalize.php b/assets/snippets/personalize/snippet.personalize.php deleted file mode 100644 index 0960e5e3cc..0000000000 --- a/assets/snippets/personalize/snippet.personalize.php +++ /dev/null @@ -1,73 +0,0 @@ -isFrontend() && isset($_SESSION['webValidated'])) $context = 'web'; - elseif ($this->isBackend() && isset($_SESSION['mgrValidated'])) $context = 'mgr'; - else $context = ''; -} - -$output = ''; -switch($context) { - case 'web': - $short_name = $_SESSION['webShortname']; - $full_name = $_SESSION['webFullname']; - $email = $_SESSION['webEmail']; - $last_login = $_SESSION['webLastlogin']; - break; - case 'mgr': - case 'manager': - $short_name = $_SESSION['mgrShortname']; - $full_name = $_SESSION['mgrFullname']; - $email = $_SESSION['mgrEmail']; - $last_login = $_SESSION['mgrLastlogin']; - break; - default: - $short_name = ''; -} - -$modx->setPlaceholder($ph, $short_name); -$modx->setPlaceholder('short_name', $short_name); -if(isset($full_name)) $modx->setPlaceholder('full_name', $full_name); -if(isset($email)) $modx->setPlaceholder('email', $email); - -if(!empty($context)) { - if(isset($yesTV)) $output = $modx->getField($yesTV); - elseif(isset($yesChunk)) $output = $modx->getChunk($yesChunk); - else $output = "username : {$short_name}"; -} else { - if(isset($noTV)) $output = $modx->getField($noTV); - elseif(isset($noChunk)) $output = $modx->getChunk($noChunk); - else $output = 'guest'; -} - -if(!empty($context)) { - if(empty($last_login)) $modx->setPlaceholder('last_login', 'first login'); - else $modx->setPlaceholder('last_login', $modx->toDateFormat($last_login)); -} -else $modx->setPlaceholder('last_login', ''); - -return $output; diff --git a/install/assets/snippets/personalize.tpl b/install/assets/snippets/personalize.tpl deleted file mode 100644 index 2b8f1fd74f..0000000000 --- a/install/assets/snippets/personalize.tpl +++ /dev/null @@ -1,18 +0,0 @@ -// Date: Sat, 4 Nov 2017 22:18:31 +0300 Subject: [PATCH 330/577] move UltimateParent to Extras (https://github.com/extras-evolution/UltimateParent) --- assets/snippets/ultimateparent/readme.html | 9 ---- .../ultimateparent/snippet.ultimateparent.php | 41 ------------------- install/assets/snippets/ultparent.tpl | 15 ------- 3 files changed, 65 deletions(-) delete mode 100644 assets/snippets/ultimateparent/readme.html delete mode 100644 assets/snippets/ultimateparent/snippet.ultimateparent.php delete mode 100644 install/assets/snippets/ultparent.tpl diff --git a/assets/snippets/ultimateparent/readme.html b/assets/snippets/ultimateparent/readme.html deleted file mode 100644 index c4c3e21dac..0000000000 --- a/assets/snippets/ultimateparent/readme.html +++ /dev/null @@ -1,9 +0,0 @@ - - -
    -

    UltimateParent 2.1

    This snippet travels up the document tree from a specified document and returns the "ultimate" parent.

    -


    Parameters

    &id The id of the document whose parent you want to find.
    &top The top node for the search.
    &topLevel The top level node for the search (root = level 1)


    Examples

    -

    [[UltimateParent? &id=`45` &top=`6`]]
    Will find the ultimate parent of document 45 if it is a child of document 6; otherwise it will return 45.

    [[UltimateParent? &topLevel=`2`]]
    Will find the ultimate parent of the current document at a depth of 2 levels in the document hierarchy, with the root level being level 1.

    -
    - - \ No newline at end of file diff --git a/assets/snippets/ultimateparent/snippet.ultimateparent.php b/assets/snippets/ultimateparent/snippet.ultimateparent.php deleted file mode 100644 index 9a847d3648..0000000000 --- a/assets/snippets/ultimateparent/snippet.ultimateparent.php +++ /dev/null @@ -1,41 +0,0 @@ -documentIdentifier; -$topLevel= isset ($topLevel) && intval($topLevel) ? intval($topLevel) : 0; -if ($id && $id != $top) { - $pid= $id; - if (!$topLevel || count($modx->getParentIds($id)) >= $topLevel) { - while ($parentIds= $modx->getParentIds($id, 1)) { - $pid= array_pop($parentIds); - if ($pid == $top) { - break; - } - $id= $pid; - if ($topLevel && count($modx->getParentIds($id)) < $topLevel) { - break; - } - } - } -} -return $id; -?> \ No newline at end of file diff --git a/install/assets/snippets/ultparent.tpl b/install/assets/snippets/ultparent.tpl deleted file mode 100644 index 5919a0010f..0000000000 --- a/install/assets/snippets/ultparent.tpl +++ /dev/null @@ -1,15 +0,0 @@ -// Date: Sat, 4 Nov 2017 22:19:29 +0300 Subject: [PATCH 331/577] move Reflect to Extras (https://github.com/extras-evolution/Reflect) --- .../reflect/configs/default.config.php | 3 - .../reflect/configs/wordpress.config.php | 17 - assets/snippets/reflect/default.templates.php | 58 --- assets/snippets/reflect/snippet.reflect.php | 476 ------------------ install/assets/snippets/reflect.tpl | 31 -- 5 files changed, 585 deletions(-) delete mode 100644 assets/snippets/reflect/configs/default.config.php delete mode 100644 assets/snippets/reflect/configs/wordpress.config.php delete mode 100644 assets/snippets/reflect/default.templates.php delete mode 100644 assets/snippets/reflect/snippet.reflect.php delete mode 100644 install/assets/snippets/reflect.tpl diff --git a/assets/snippets/reflect/configs/default.config.php b/assets/snippets/reflect/configs/default.config.php deleted file mode 100644 index ddf0263605..0000000000 --- a/assets/snippets/reflect/configs/default.config.php +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/assets/snippets/reflect/configs/wordpress.config.php b/assets/snippets/reflect/configs/wordpress.config.php deleted file mode 100644 index 0d02b68cfe..0000000000 --- a/assets/snippets/reflect/configs/wordpress.config.php +++ /dev/null @@ -1,17 +0,0 @@ - - [+month+] [+year+] - [+wrapper+] - -'; -$monthSortDir='DESC'; -?> \ No newline at end of file diff --git a/assets/snippets/reflect/default.templates.php b/assets/snippets/reflect/default.templates.php deleted file mode 100644 index 5fe0dbbdda..0000000000 --- a/assets/snippets/reflect/default.templates.php +++ /dev/null @@ -1,58 +0,0 @@ -Archives -
    -
      - [+wrapper+] -
    -
    -TPL; - -$defaultTemplates['year'] = << - [+year+] - [+wrapper+] - -TPL; - -$defaultTemplates['year_inner'] = << - [+wrapper+] - -TPL; - -$defaultTemplates['month'] = << - [+month+] - [+wrapper+] - -TPL; - -$defaultTemplates['month_inner'] = << - [+wrapper+] - -TPL; - -$defaultTemplates['item'] = << - [+pagetitle+] ([+date+]) - -TPL; - -?> \ No newline at end of file diff --git a/assets/snippets/reflect/snippet.reflect.php b/assets/snippets/reflect/snippet.reflect.php deleted file mode 100644 index 068489f19c..0000000000 --- a/assets/snippets/reflect/snippet.reflect.php +++ /dev/null @@ -1,476 +0,0 @@ -config['base_path'].$reflect_base : $modx->config['base_path']."assets/snippets/reflect/"; -/* - Param: ditto_base - - Purpose: - Location of Ditto files - - Options: - Any valid folder location containing the Ditto source code with a trailing slash - - Default: - [(base_path)]assets/snippets/ditto/ -*/ - -$config = (isset($config)) ? $config : "default"; -/* - Param: config - - Purpose: - Load a custom configuration - - Options: - "default" - default blank config file - CONFIG_NAME - Other configs installed in the configs folder or in any folder within the MODX base path via @FILE - - Default: - "default" - - Related: - - -*/ - -require($reflect_base."configs/default.config.php"); -require($reflect_base."default.templates.php"); -if ($config != "default") { - require((substr($config, 0, 5) != "@FILE") ? $reflect_base."configs/$config.config.php" : $modx->config['base_path'].trim(substr($config, 5))); -} - -// --------------------------------------------------- -// Parameters -// --------------------------------------------------- - -$id = isset($id) ? $id."_" : false; -/* - Param: id - - Purpose: - Unique ID for this Ditto instance for connection with other scripts (like Reflect) and unique URL parameters - - Options: - Any valid folder location containing the Ditto source code with a trailing slash - - Default: - "" - blank -*/ -$getDocuments = isset($getDocuments) ? $getDocuments : 0; -/* - Param: getDocuments - - Purpose: - Force Reflect to get documents - - Options: - 0 - off - 1 - on - - Default: - 0 - off -*/ -$showItems = isset($showItems) ? $showItems : 1; -/* - Param: showItems - - Purpose: - Show individual items in the archive - - Options: - 0 - off - 1 - on - - Default: - 1 - on -*/ -$groupByYears = isset($groupByYears)? $groupByYears : 1; -/* - Param: groupByYears - - Purpose: - Group the archive by years - - Options: - 0 - off - 1 - on - - Default: - 1 - on -*/ -$targetID = isset($targetID) ? $targetID : $modx->documentObject['id']; -/* - Param: targetID - - Purpose: - ID for archive links to point to - - Options: - Any MODX document with a Ditto call setup with extenders=`dateFilter` - - Default: - Current MODX Document -*/ -$dateSource = isset($dateSource) ? $dateSource : "createdon"; -/* - Param: dateSource - - Purpose: - Date source to display for archive items - - Options: - # - Any UNIX timestamp from MODX fields or TVs such as createdon, pub_date, or editedon - - Default: - "createdon" - - Related: - - -*/ -$dateFormat = isset($dateFormat) ? $dateFormat : "%d-%b-%y %H:%M"; -/* - Param: dateFormat - - Purpose: - Format the [+date+] placeholder in human readable form - - Options: - Any PHP valid strftime option - - Default: - "%d-%b-%y %H:%M" - - Related: - - -*/ -$yearSortDir = isset($yearSortDir) ? $yearSortDir : "DESC"; -/* - Param: yearSortDir - - Purpose: - Direction to sort documents - - Options: - ASC - ascending - DESC - descending - - Default: - "DESC" - - Related: - - -*/ -$monthSortDir = isset($monthSortDir) ? $monthSortDir : "ASC"; -/* - Param: monthSortDir - - Purpose: - Direction to sort the months - - Options: - ASC - ascending - DESC - descending - - Default: - "ASC" - - Related: - - -*/ -$start = isset($start)? intval($start) : 0; -/* - Param: start - - Purpose: - Number of documents to skip in the results - - Options: - Any number - - Default: - 0 -*/ -$phx = (isset($phx))? $phx : 1; -/* - Param: phx - - Purpose: - Use PHx formatting - - Options: - 0 - off - 1 - on - - Default: - 1 - on -*/ -$emptymsg = isset($emptymsg)? $emptymsg : "The Ditto object is invalid. Please check it."; -/* - Param: emptymsg - - Purpose: - Message to return if error - - Options: - Any string - - Default: - The Ditto object is invalid. Please check it. -*/ - -// --------------------------------------------------- -// Initialize Ditto -// --------------------------------------------------- -$placeholder = ($id != false && $getDocuments == 0) ? true : false; -if ($placeholder === false) { - $rID = "reflect_".rand(1,1000); - $itemTemplate = isset($tplItem) ? $tplItem: "@CODE:".$defaultTemplates['item']; - $dParams = array( - "id" => "$rID", - "save" => "3", - "summarize" => "all", - "tpl" => $itemTemplate, - ); - - $source = isset($dittoSnippetName) ? $dittoSnippetName : ''; - $params = isset($dittoSnippetParameters) ? $dittoSnippetParameters : ''; - // TODO: Remove after 3.0 - - if (isset($params)) { - $givenParams = explode("|",$params); - foreach ($givenParams as $parameter) { - $p = explode(":",$parameter); - $dParams[$p[0]] = $p[1]; - } - } - /* - Param: params - - Purpose: - Pass parameters to the Ditto instance used to retreive the documents - - Options: - Any valid ditto parameters in the format name:value - with multiple parameters separated by a pipe (|) - - Note: - This parameter is only needed for config, start, and phx as you can - now simply use the parameter as if Reflect was Ditto - - Default: - [NULL] - */ - - $reflectParameters = array('reflect_base','config','id','getDocuments','showItems','groupByYears','targetID','yearSortDir','monthSortDir','start','phx','tplContainer','tplYear','tplMonth','tplMonthInner','tplItem','save'); - $params =& $modx->event->params; - if(is_array($params)) { - foreach ($params as $param=>$value) { - if (!in_array($param,$reflectParameters) && substr($param,-3) != 'tpl') { - $dParams[$param] = $value; - } - } - } - - $source = isset($source) ? $source : "Ditto"; - /* - Param: source - - Purpose: - Name of the Ditto snippet to use - - Options: - Any valid snippet name - - Default: - "Ditto" - */ - $snippetOutput = $modx->runSnippet($source,$dParams); - $ditto = $modx->getPlaceholder($rID."_ditto_object"); - $resource = $modx->getPlaceholder($rID."_ditto_resource"); -} else { - $ditto = $modx->getPlaceholder($id."ditto_object"); - $resource = $modx->getPlaceholder($id."ditto_resource"); -} -if (!is_object($ditto) || !isset($ditto) || !isset($resource)) { - return !empty($snippetOutput) ? $snippetOutput : $emptymsg; -} - -// --------------------------------------------------- -// Templates -// --------------------------------------------------- - -$templates['tpl'] = isset($tplContainer) ? $ditto->template->fetch($tplContainer): $defaultTemplates['tpl']; -/* - Param: tplContainer - - Purpose: - Container template for the archive - - Options: - - Any valid chunk name - - Code via @CODE: - - File via @FILE: - - Default: - See default.tempates.php -*/ -$templates['year'] = isset($tplYear) ? $ditto->template->fetch($tplYear): $defaultTemplates['year']; -/* - Param: tplYear - - Purpose: - Template for the year item - - Options: - - Any valid chunk name - - Code via @CODE: - - File via @FILE: - - Default: - See default.tempates.php -*/ -$templates['year_inner'] = isset($tplYearInner) ? $ditto->template->fetch($tplYearInner): $defaultTemplates['year_inner']; -/* - Param: tplYearInner - - Purpose: - Template for the year item (the ul to hold the year template) - - Options: - - Any valid chunk name - - Code via @CODE: - - File via @FILE: - - Default: - See default.tempates.php -*/ -$templates['month'] = isset($tplMonth) ? $ditto->template->fetch($tplMonth): $defaultTemplates['month']; -/* - Param: tplMonth - - Purpose: - Template for the month item - - Options: - - Any valid chunk name - - Code via @CODE: - - File via @FILE: - - Default: - See default.tempates.php -*/ -$templates['month_inner'] = isset($tplMonthInner) ? $ditto->template->fetch($tplMonthInner): $defaultTemplates['month_inner']; -/* - Param: tplMonthInner - - Purpose: - Template for the month item (the ul to hold the month template) - - Options: - - Any valid chunk name - - Code via @CODE: - - File via @FILE: - - Default: - See default.tempates.php -*/ -$templates['item'] = isset($tplItem) ? $ditto->template->fetch($tplItem): $defaultTemplates['item']; -/* - Param: tplItem - - Purpose: - Template for the individual item - - Options: - - Any valid chunk name - - Code via @CODE: - - File via @FILE: - - Default: - See default.tempates.php -*/ - -$ditto->addField("date","display","custom"); - // force add the date field if receiving data from a Ditto instance - -// --------------------------------------------------- -// Reflect -// --------------------------------------------------- - -if (function_exists("reflect") === FALSE) { -function reflect($templatesDocumentID, $showItems, $groupByYears, $resource, $templatesDateSource, $dateFormat, $ditto, $templates,$id,$start,$yearSortDir,$monthSortDir) { - global $modx; - $cal = array(); - $output = ''; - $ph = array('year'=>'','month'=>'','item'=>'','out'=>''); - $phx = isset($phx) ? $phx : ''; - $build = array(); - $stop = count($resource); - - // loop and fetch all the results - for ($i = $start; $i < $stop; $i++) { - $date = getdate($resource[$i][$templatesDateSource]); - $year = $date["year"]; - $month = $date["mon"]; - $cal[$year][$month][] = $resource[$i]; - } - if ($yearSortDir == "DESC") { - krsort($cal); - } else { - ksort($cal); - } - foreach ($cal as $year=>$months) { - if ($monthSortDir == "ASC") { - ksort($months); - } else { - krsort($months); - } - $build[$year] = $months; - } - - foreach ($build as $year=>$months) { - $r_year = ''; - $r_month = ''; - $r_month_2 = ''; - $year_count = 0; - $items = array(); - - foreach ($months as $mon=>$month) { - $month_text = strftime("%B", mktime(10, 10, 10, $mon, 10, $year)); - $month_url = $ditto->buildURL("month=".$mon."&year=".$year."&day=false&start=0",$templatesDocumentID,$id); - $month_count = count($month); - $year_count += $month_count; - $r_month = $ditto->template->replace(array("year"=>$year,"month"=>$month_text,"url"=>$month_url,"count"=>$month_count),$templates['month']); - if ($showItems) { - foreach ($month as $item) { - $items[$year][$mon]['items'][] = $ditto->render($item, $templates['item'], false, $templatesDateSource, $dateFormat, array(),$phx); - } - $r_month_2 = $ditto->template->replace(array('wrapper' => implode('',$items[$year][$mon]['items'])),$templates['month_inner']); - $items[$year][$mon] = $ditto->template->replace(array('wrapper' => $r_month_2),$r_month); - } else { - $items[$year][$mon] = $r_month; - } - } - if ($groupByYears) { - $year_url = $ditto->buildURL("year=".$year."&month=false&day=false&start=0",$templatesDocumentID,$id); - $r_year = $ditto->template->replace(array("year"=>$year,"url"=>$year_url,"count"=>$year_count),$templates['year']); - $var = $ditto->template->replace(array('wrapper'=>implode('',$items[$year])),$templates['year_inner']); - $output .= $ditto->template->replace(array('wrapper'=>$var),$r_year); - } else { - $output .= implode('',$items[$year]); - } - } - - $output = $ditto->template->replace(array('wrapper'=>$output),$templates['tpl']); - $modx->setPlaceholder($id.'reset',$ditto->buildURL('year=false&month=false&day=false',$templatesDocumentID,$id)); - -return $output; - -} -} - -return reflect($targetID, $showItems, $groupByYears, $resource, $dateSource, $dateFormat, $ditto, $templates,$id,$start,$yearSortDir,$monthSortDir); diff --git a/install/assets/snippets/reflect.tpl b/install/assets/snippets/reflect.tpl deleted file mode 100644 index 93dc93ea90..0000000000 --- a/install/assets/snippets/reflect.tpl +++ /dev/null @@ -1,31 +0,0 @@ -// Date: Sat, 4 Nov 2017 22:20:35 +0300 Subject: [PATCH 332/577] move WebLogin to Extras (https://github.com/extras-evolution/Weblogin) --- assets/snippets/weblogin/chunk.weblogin.tpl | 57 -- .../snippets/weblogin/docs/webchangepwd.html | 10 - assets/snippets/weblogin/docs/weblogin.html | 17 - assets/snippets/weblogin/docs/websignup.html | 19 - assets/snippets/weblogin/index.html | 2 - assets/snippets/weblogin/snippet.weblogin.php | 50 -- assets/snippets/weblogin/webchangepwd.inc.php | 180 ------- .../snippets/weblogin/weblogin.common.inc.php | 120 ----- assets/snippets/weblogin/weblogin.inc.php | 187 ------- .../weblogin/weblogin.processor.inc.php | 443 ---------------- assets/snippets/weblogin/websignup.inc.php | 485 ------------------ install/assets/snippets/webchangepwd.tpl | 47 -- install/assets/snippets/weblogin.tpl | 22 - install/assets/snippets/websignup.tpl | 51 -- 14 files changed, 1690 deletions(-) delete mode 100755 assets/snippets/weblogin/chunk.weblogin.tpl delete mode 100644 assets/snippets/weblogin/docs/webchangepwd.html delete mode 100644 assets/snippets/weblogin/docs/weblogin.html delete mode 100644 assets/snippets/weblogin/docs/websignup.html delete mode 100755 assets/snippets/weblogin/index.html delete mode 100644 assets/snippets/weblogin/snippet.weblogin.php delete mode 100755 assets/snippets/weblogin/webchangepwd.inc.php delete mode 100644 assets/snippets/weblogin/weblogin.common.inc.php delete mode 100755 assets/snippets/weblogin/weblogin.inc.php delete mode 100755 assets/snippets/weblogin/weblogin.processor.inc.php delete mode 100755 assets/snippets/weblogin/websignup.inc.php delete mode 100755 install/assets/snippets/webchangepwd.tpl delete mode 100755 install/assets/snippets/weblogin.tpl delete mode 100755 install/assets/snippets/websignup.tpl diff --git a/assets/snippets/weblogin/chunk.weblogin.tpl b/assets/snippets/weblogin/chunk.weblogin.tpl deleted file mode 100755 index b8cd1dbcb4..0000000000 --- a/assets/snippets/weblogin/chunk.weblogin.tpl +++ /dev/null @@ -1,57 +0,0 @@ - - -
    - - - - - -
    - - - - - - - - - - - - - - - - -
    User:
    Password:
    - - - - - -
    -
    -
    Forget Password?
    -
    -
    -
    - -[+logouttext+] -
    - -
    - - - - - - - - - - - -
    Enter the email address of your account
    below to receive your password:
    -
    -
    - diff --git a/assets/snippets/weblogin/docs/webchangepwd.html b/assets/snippets/weblogin/docs/webchangepwd.html deleted file mode 100644 index 24c2576e19..0000000000 --- a/assets/snippets/weblogin/docs/webchangepwd.html +++ /dev/null @@ -1,10 +0,0 @@ - - -
    -

    WebChangePwd 1.1.2 -

    Allows Web User to change their password from the front-end of the website

    -

     

    -

    Parameters

    &tpl Chunk name or document id to use as a template (Optional)
                  
    Note: Templates design:
            section 1: change pwd template
            section 2: notification template


    Examples

    [[WebChangePwd? &tpl=`ChangePwd`]]

    -
    - - \ No newline at end of file diff --git a/assets/snippets/weblogin/docs/weblogin.html b/assets/snippets/weblogin/docs/weblogin.html deleted file mode 100644 index 035c75a54f..0000000000 --- a/assets/snippets/weblogin/docs/weblogin.html +++ /dev/null @@ -1,17 +0,0 @@ - - -
    -

    WebLogin 1.1.3

    -

    Allows webusers to login to protected pages in the website, supporting multiple user groups

    -

     

    -

    Parameter

    &loginhomeid redirects the user to first authorized page in the list (Optional)
    If no id was specified then the login home page id or the current document id will be used.

    &logouthomeid document id to load when user logs out (Optional)

    &pwdreqid document id to load after the user has submited a request for a new password (Optional)

    &pwdactid document id to load when the after the user has activated their new password (Optional)

    &logintext Text to be displayed inside login button (for built-in form) (Optional) 

    &logouttext Text to be displayed inside logout link (for built-in form) (Optional) 

    &tpl Chunk name or document id to as a template (Optional) 

    &focusInput Focus input-field on page load, use 0 or 1 (Optional) 


    Note - Templates design:

    -
      -
    • section 1: login template
    • -
    • section 2: logout template
    • -
    • section 3: password reminder template
    • -
    -


    See weblogin.tpl for more information

    -

    Examples

    [[WebLogin? &loginhomeid=`8` &logouthomeid=`1`]]

    [[WebLogin? &loginhomeid=`8,18,7,5` &tpl=`Login`]]

    -
    - - \ No newline at end of file diff --git a/assets/snippets/weblogin/docs/websignup.html b/assets/snippets/weblogin/docs/websignup.html deleted file mode 100644 index 3bb513b4ca..0000000000 --- a/assets/snippets/weblogin/docs/websignup.html +++ /dev/null @@ -1,19 +0,0 @@ - - -
    -

    WebSignup 1.1.2

    -

    Allows a web user to signup for a new web account from the website. This snippet provides a basic set of form fields for the signup form. You can customize this snippet to create your own signup form

    -


    Parameter

    -

    &tpl Chunk name or document id to use as a template (Optional)
    If custom template AND captcha on AND using WebSignup and WebLogin on the same page make sure you have a field named cmdwebsignup. In the default template it is the submit button. One can use a hidden field.

    -

    &groups Web users groups to be assigned to users

    -

    &useCaptcha Determine to use (1) or not to use (0) captcha on signup form (Optional)
    If not defined, will default to system setting. GD is required for this feature. If GD is not available, useCaptcha will automatically be set to false;

    -

    Note - Templates design:

    -
      -
    • section 1: signup template
    • -
    • section 2: notification template
    • -
    -


    Examples

    -

    [[WebSignup? &tpl=`SignupForm` &groups=`NewsReaders,WebUsers`]]

    -
    - - \ No newline at end of file diff --git a/assets/snippets/weblogin/index.html b/assets/snippets/weblogin/index.html deleted file mode 100755 index cfb7d0fe18..0000000000 --- a/assets/snippets/weblogin/index.html +++ /dev/null @@ -1,2 +0,0 @@ -

    Unauthorized access

    -You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/weblogin/snippet.weblogin.php b/assets/snippets/weblogin/snippet.weblogin.php deleted file mode 100644 index 7a40df6361..0000000000 --- a/assets/snippets/weblogin/snippet.weblogin.php +++ /dev/null @@ -1,50 +0,0 @@ -config['base_path'] . "assets/snippets/"; -$wl_base_path = str_replace('\\', '/', dirname(__FILE__)) . '/'; - -// check if inside manager -if ($m = $modx->isBackend()) { - return ''; // don't go any further when inside manager -} - -// deprecated params - only for backward compatibility -if(isset($loginid)) $loginhomeid=$loginid; -if(isset($logoutid)) $logouthomeid = $logoutid; -if(isset($template)) $tpl = $template; - -// Snippet customize settings -$liHomeId = isset($loginhomeid)? array_filter(array_map('intval', explode(',', $loginhomeid))):array($modx->config['login_home'],$modx->documentIdentifier); -$loHomeId = isset($logouthomeid)? $logouthomeid:$modx->documentIdentifier; -$pwdReqId = isset($pwdreqid)? $pwdreqid:0; -$pwdActId = isset($pwdactid)? $pwdactid:0; -$loginText = isset($logintext) && $logintext!='' ? $logintext:'Login'; -$logoutText = isset($logouttext) && $logouttext!='' ? $logouttext:'Logout'; -$tpl = isset($tpl)? $tpl:""; -$focusInput = isset($focusInput)? $focusInput : 1; - -// System settings -$webLoginMode = isset($_REQUEST['webloginmode'])? $_REQUEST['webloginmode']: ''; -$isLogOut = $webLoginMode=='lo' ? 1:0; -$isPWDActivate = $webLoginMode=='actp' ? 1:0; -$isPostBack = count($_POST) && (isset($_POST['cmdweblogin']) || isset($_POST['cmdweblogin_x'])); -$txtPwdRem = isset($_REQUEST['txtpwdrem'])? $_REQUEST['txtpwdrem']: 0; -$isPWDReminder = $isPostBack && $txtPwdRem=='1' ? 1:0; - -$site_id = isset($site_id)? $site_id: ''; -$cookieKey = substr(md5($site_id."Web-User"),0,15); - -// Start processing -include_once $wl_base_path."weblogin.common.inc.php"; - -if ($isPWDActivate || $isPWDReminder || $isLogOut || $isPostBack) { - // include the logger class - include_once $modx->config['site_manager_path'] . "includes/log.class.inc.php"; - include_once $wl_base_path."weblogin.processor.inc.php"; -} - -include_once $wl_base_path."weblogin.inc.php"; - -// Return -return $output; diff --git a/assets/snippets/weblogin/webchangepwd.inc.php b/assets/snippets/weblogin/webchangepwd.inc.php deleted file mode 100755 index 32cc2dc141..0000000000 --- a/assets/snippets/weblogin/webchangepwd.inc.php +++ /dev/null @@ -1,180 +0,0 @@ -getDocuments($tpl)) ? $doc['content']:"Document '$tpl' not found."; -else if($tpl) $tpl = ($chunk=$modx->getChunk($tpl)) ? $chunk:"Chunk '$tpl' not found."; -if(!$tpl) $tpl = getWebChangePwdtpl(); - -// extract declarations -$declare = webLoginExtractDeclarations($tpl); -$tpls = explode((isset($declare["separator"]) ? $declare["separator"]:""),$tpl); - -if(!$isPostBack && isset($_SESSION['webValidated'])){ - // display password screen - $tpl = $tpls[0]; - $tpl = str_replace("[+action+]",$modx->makeUrl($modx->documentIdentifier),$tpl); - $tpl.=""; - $output .= $tpl; -} -else if ($isPostBack && isset($_SESSION['webValidated'])){ - $oldpassword = $_POST['oldpassword']; - $genpassword = $_POST['newpassword']; - $passwordgenmethod = $_POST['passwordgenmethod']; - $passwordnotifymethod = $_POST['passwordnotifymethod']; - $specifiedpassword = $_POST['specifiedpassword']; - - $uid = $modx->getLoginUserID(); - $type = $modx->getLoginUserType(); - - // load template - $tpl = $tpls[0]; - $tpl = str_replace("[+action+]",$modx->makeUrl($modx->documentIdentifier),$tpl); - $tpl.=""; - - // get user record - if($type=='manager') $ds = $modx->getUserInfo($uid); - else $ds = $modx->getWebUserInfo($uid); - - // verify password - if($ds['password']==md5($oldpassword)) { - - // verify password - if ($passwordgenmethod=="spec" && $_POST['specifiedpassword']!=$_POST['confirmpassword']) { - $output = webLoginAlert("Password typed is mismatched",1).$tpl; - return; - } - - // generate a new password for this user - if($specifiedpassword!="" && $passwordgenmethod=="spec") { - if(strlen($specifiedpassword) < 6 ) { - $output = webLoginAlert("Password is too short!").$tpl; - return; - } else { - $newpassword = $specifiedpassword; - } - } elseif($specifiedpassword=="" && $passwordgenmethod=="spec") { - $output = webLoginAlert("You didn't specify a password for this user!").$tpl; - return; - } elseif($passwordgenmethod=='g') { - $newpassword = webLoginGeneratePassword(8); - } else { - $output = webLoginAlert("No password generation method specified!").$tpl; - return; - } - - // handle notification - if($passwordnotifymethod=='e') { - $rt = webLoginSendNewPassword($ds["email"],$ds["username"],$newpassword,$ds["fullname"]); - if($rt!==true) { // an error occured - $output = $rt.$tpl; - return; - } - else { - $newpassmsg = "A copy of the new password was sent to your email address."; - } - } - else { - $newpassmsg = "The new password is " . htmlspecialchars($newpassword, ENT_QUOTES) . "."; - } - - // save new password to database - $rt = $modx->changeWebUserPassword($oldpassword,md5($newpassword)); - if($rt!==true) { - $output = webLoginAlert("An error occured while saving new password: $rt"); - return; - } - - // display change notification - $tpl = $tpls[1]; - $tpl = str_replace("[+newpassmsg+]",$newpassmsg,$tpl); - $output .= $tpl; - } - else { - $output = webLoginAlert("Incorrect password. Please try again.").$tpl; - return; - } -} - -// Returns Default WebChangePwd tpl -function getWebChangePwdtpl(){ - ob_start(); - ?> - - -
    - - - - - - - -
    - Enter your current password - - - - - -
    - - -
    -
    -
    - New password method - Let this website - generate a password.
    - Let me specify - the password:
    -
    - - - - - - - - - -
    - - -
    -
    - - -
    -
    - The password you - specify needs to be at least 6 characters long. -
    -

    -
    - Password notification method - Send the new password - by e-mail.
    - Show the new password - on screen. -
    - -
    -
    -
    - - Your password was successfully changed.

    - [+newpassmsg+] - \ No newline at end of file diff --git a/assets/snippets/weblogin/weblogin.common.inc.php b/assets/snippets/weblogin/weblogin.common.inc.php deleted file mode 100644 index 525e1b7164..0000000000 --- a/assets/snippets/weblogin/weblogin.common.inc.php +++ /dev/null @@ -1,120 +0,0 @@ -]?-->/i",$html,$matches)) { - for($i=0;$iwindow.setTimeout(\"alert('".addslashes($modx->db->escape($msg))."')\",10);"; - } - - // generate new password - function webLoginGeneratePassword($length = 10) { - $allowable_characters = "abcdefghjkmnpqrstuvxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"; - $ps_len = strlen($allowable_characters); - mt_srand((double)microtime()*1000000); - $pass = ""; - for($i = 0; $i < $length; $i++) { - $pass .= $allowable_characters[mt_rand(0,$ps_len-1)]; - } - return $pass; - } - - // Send new password to the user - function webLoginSendNewPassword($email,$uid,$pwd,$ufn){ - global $modx, $site_url; - $mailto = $modx->config['mailto']; - $websignupemail_message = $modx->config['websignupemail_message']; - $emailsubject = $modx->config['emailsubject']; - $emailsender = $modx->config['emailsender']; - $site_name = $modx->config['site_name']; - $site_start = $modx->config['site_start']; - - //Escape quotes - $message = str_replace('"', '', $websignupemail_message); - - - // replace placeholders - $message = str_replace("[+uid+]",$uid,$message); - $message = str_replace("[+pwd+]",$pwd,$message); - $message = str_replace("[+ufn+]",$ufn,$message); - $message = str_replace("[+sname+]",$site_name,$message); - $message = str_replace("[+semail+]",$emailsender,$message); - $message = str_replace("[+surl+]",$site_url,$message); - - - //Set HTML Headers - $headers = "From: ".$emailsender."\r\n"; - $headers .= "X-Mailer: PHP/".phpversion(); - $headers .= "MIME-Version: 1.0\r\n"; - $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; - - - if (!ini_get('safe_mode')) - $sent = mail($email, - $emailsubject, - $message, - $headers, - - "-f {$emailsender}"); - - else $sent = mail( - $email, - $emailsubject, - $message, - "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion()); - - if (!$sent) webLoginAlert("Error while sending mail to $mailto",1); - - return true; - } - - function preserveUrl($docid = '', $alias = '', $array_values = array(), $suffix = false) { - global $modx; - $array_get = $_GET; - $urlstring = array(); - - unset($array_get["id"]); - unset($array_get["q"]); - unset($array_get["webloginmode"]); - - $array_url = array_merge($array_get, $array_values); - foreach ($array_url as $name => $value) { - if (!is_null($value)) { - $urlstring[] = urlencode($name) . '=' . urlencode($value); - } - } - - $url = implode('&',$urlstring); - if ($suffix) { - if (empty($url)) { - $url = "?"; - } else { - $url .= "&"; - } - } - return $modx->makeUrl($docid, $alias, $url); - } - -?> diff --git a/assets/snippets/weblogin/weblogin.inc.php b/assets/snippets/weblogin/weblogin.inc.php deleted file mode 100755 index e2cc81dbf4..0000000000 --- a/assets/snippets/weblogin/weblogin.inc.php +++ /dev/null @@ -1,187 +0,0 @@ -getDocuments($tpl)) ? $doc['content']:"Document '$tpl' not found."; -else if($tpl) - $tpl = (((substr(strtolower($tpl), 0, 5) == "@file") && ($chunk=file_get_contents(MODX_BASE_PATH.trim(substr($tpl, 6))))) || ($chunk=$modx->getChunk($tpl))) ? $chunk:"Chunk '$tpl' not found."; - -if(!$tpl) $tpl = getWebLogintpl(); - -// extract declarations -$declare = webLoginExtractDeclarations($tpl); -$tpls = explode((isset($declare["separator"]) ? $declare["separator"]:""),$tpl); - -if(!isset($_SESSION['webValidated'])){ - ob_start(); -// if(isset($_COOKIE[$cookieKey])) { -// $cookieSet = 1; -// $sitename = $_COOKIE[$cookieKey]; -// $thepasswd = substr($site_id,-5)."crypto"; // create a password based on site id -// $rc4 = new rc4crypt; -// $thestring = $rc4->endecrypt($thepasswd,$sitename,'de'); -// $uid = $thestring; -// }else{ - $uid = isset($_POST['username'])? htmlspecialchars(trim($_POST['username']), ENT_NOQUOTES):''; -// } - ?> - - urlencode($_REQUEST["refurl"])) : array(); - $tpl = "
    ".$tpls[0]."
    "; - $tpl.= ""; - $tpl = str_replace("[+action+]",preserveUrl($modx->documentIdentifier,"",$ref),$tpl); - $tpl = str_replace("[+rememberme+]",(!empty($_POST['rememberme']) ? 1 : 0),$tpl); - $tpl = str_replace("[+username+]",$uid,$tpl); - $tpl = str_replace("[+checkbox+]",(!empty($_POST['rememberme']) ? "checked='checked'" : ""),$tpl); - $tpl = str_replace("[+logintext+]",$loginText,$tpl); - echo $tpl; - - if($focusInput) { - ?> - - time; - $a = 998; - - $sql = "REPLACE INTO ".$modx->getFullTableName('active_users')." (internalKey, username, lasthit, action, id) values(-{$_SESSION['webInternalKey']}, '{$_SESSION['webShortname']}', '{$lasthittime}', '{$a}', {$itemid})"; - $modx->db->query($sql); - - $modx->updateValidatedUserSession(); - - // display logout - $tpl = $tpls[1]; - $url = preserveUrl($modx->documentObject['id']); - $url = $url.((strpos($url,"?")===false) ? "?":"&")."webloginmode=lo"; - $tpl = str_replace("[+action+]",$url,$tpl); - $tpl = str_replace("[+logouttext+]",$logoutText,$tpl); - $output .= $tpl; -} - -# Returns Default WebLogin tpl -function getWebLogintpl(){ - ob_start(); - ?> - - -
    - - - - - -
    - - - - - - - - - - - - - - - - -
    User:
    Password:
    - - - - - -
    -
    -
    Forget Password?
    -
    -
    -
    - - [+logouttext+] -
    - -
    - - - - - - - - - - - -
    Enter the email address of your account
    below to receive your password:
    -
    -
    - diff --git a/assets/snippets/weblogin/weblogin.processor.inc.php b/assets/snippets/weblogin/weblogin.processor.inc.php deleted file mode 100755 index 653dc3c460..0000000000 --- a/assets/snippets/weblogin/weblogin.processor.inc.php +++ /dev/null @@ -1,443 +0,0 @@ -db->select('*', $modx->getFullTableName('web_users'), "id='".$modx->db->escape($id)."'"); - if($row = $modx->db->getRow($ds)) { - $username = $row["username"]; - list($newpwd,$newpwdkey) = explode("|",$row['cachepwd']); - if($newpwdkey!=$pwdkey) { - $output = webLoginAlert("Invalid password activation key. Your password was NOT activated."); - return; - } - // activate new password - $modx->db->update( - array( - 'password' => md5($newpwd), - 'cachepwd' => '', - ), - $modx->getFullTableName('web_users'), - "id='{$row['id']}'" - ); - - // unblock user by resetting "blockeduntil" - $modx->db->update( - array( - 'blockeduntil' => 0, - ), - $modx->getFullTableName('web_user_attributes'), - "internalKey='{$row['id']}'" - ); - - // invoke OnWebChangePassword event - $modx->invokeEvent("OnWebChangePassword", - array( - "userid" => $id, - "username" => $username, - "userpassword" => $newpwd - )); - - if(!$pwdActId) $output = webLoginAlert("Your new password was successfully activated."); - else { - // redirect to password activation notification page - $url = $modx->makeURL($pwdActId); - $modx->sendRedirect($url,0,'REDIRECT_REFRESH'); - } - } - else { - // error - $output = webLoginAlert("Error while loading user account. Please contact the Site Administrator"); - } - return; - } - - -# process password reminder - if ($isPWDReminder==1) { - $email = $_POST['txtwebemail']; - $webpwdreminder_message = $modx->config['webpwdreminder_message']; - $emailsubject = $modx->config['emailsubject']; - $emailsender = $modx->config['emailsender']; - $site_name = $modx->config['site_name']; - // lookup account - $ds = $modx->db->select( - 'wu.*, wua.fullname', - $modx->getFullTableName('web_users')." AS wu INNER JOIN ".$modx->getFullTableName('web_user_attributes')." AS wua ON wua.internalkey=wu.id", - "wua.email='".$modx->db->escape($email)."'"); - if($row = $modx->db->getRow($ds)) { - $newpwd = webLoginGeneratePassword(8); - $newpwdkey = webLoginGeneratePassword(8); // activation key - - //save new password - $modx->db->update( - array( - 'cachepwd' => "{$newpwd}|{$newpwdkey}", - ), - $modx->getFullTableName('web_users'), - "id='{$row['id']}'" - ); - // built activation url - $xhtmlUrlSetting = $modx->config['xhtml_urls']; - $modx->config['xhtml_urls'] = false; - if($_SERVER['SERVER_PORT']!='80') { - $url = $modx->config['server_protocol'].'://'.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$modx->makeURL($modx->documentIdentifier,'',"webloginmode=actp&wli=".$row['id']."&wlk=".$newpwdkey); - } else { - $url = $modx->config['server_protocol'].'://'.$_SERVER['SERVER_NAME'].$modx->makeURL($modx->documentIdentifier,'',"webloginmode=actp&wli=".$row['id']."&wlk=".$newpwdkey); - } - $modx->config['xhtml_urls'] = $xhtmlUrlSetting; - // replace placeholders and send email - $message = str_replace("[+uid+]",$row['username'],$webpwdreminder_message); - $message = str_replace("[+pwd+]",$newpwd,$message); - $message = str_replace("[+ufn+]",$row['fullname'],$message); - $message = str_replace("[+sname+]",$site_name,$message); - $message = str_replace("[+semail+]",$emailsender,$message); - $message = str_replace("[+surl+]",$url,$message); - - if (!ini_get('safe_mode')) $sent = mail($email, "New Password Activation for $site_name", $message, "From: ".$emailsender."\r\n"."X-Mailer: MODX Content Manager - PHP/".phpversion(), "-f {$emailsender}"); - else $sent = mail($email, "New Password Activation for $site_name", $message, "From: ".$emailsender."\r\n"."X-Mailer: MODX Content Manager - PHP/".phpversion()); - if(!$sent) { - // error - $output = webLoginAlert("Error while sending mail to $email. Please contact the Site Administrator"); - return; - } - if(!$pwdReqId) $output = webLoginAlert("Please check your email account ($email) for login instructions."); - else { - // redirect to password request notification page - $url = $modx->makeURL($pwdReqId); - $modx->sendRedirect($url,0,'REDIRECT_REFRESH'); - } - } - else { - $output = webLoginAlert("We are sorry! We cannot locate an account using that email."); - } - - return; - - } - - -# process logout - if ($isLogOut==1){ - $internalKey = $_SESSION['webInternalKey']; - $username = $_SESSION['webShortname']; - - // invoke OnBeforeWebLogout event - $modx->invokeEvent("OnBeforeWebLogout", - array( - "userid" => $internalKey, - "username" => $username - )); - - clearWebuserSession(); - - // invoke OnWebLogout event - $modx->invokeEvent("OnWebLogout", - array( - "userid" => $internalKey, - "username" => $username - )); - - // redirect to first authorized logout page - $url = preserveUrl($loHomeId); - $modx->sendRedirect($url,0,'REDIRECT_REFRESH'); - return; - - } - - -# process login - - $username = $modx->db->escape(htmlspecialchars($_POST['username'], ENT_NOQUOTES, $modx->config['modx_charset'])); - $givenPassword = htmlspecialchars($_POST['password'], ENT_NOQUOTES, $modx->config['modx_charset']); - $captcha_code = isset($_POST['captcha_code'])? $_POST['captcha_code']: ''; - $rememberme = $_POST['rememberme']; - - // invoke OnBeforeWebLogin event - $modx->invokeEvent("OnBeforeWebLogin", - array( - "username" => $username, - "userpassword" => $givenPassword, - "rememberme" => $rememberme - )); - - $ds = $modx->db->select( - 'wu.*, wua.*', - $modx->getFullTableName('web_users')." AS wu, ".$modx->getFullTableName('web_user_attributes')." AS wua", - "BINARY wu.username='{$username}' AND wua.internalKey=wu.id"); - $row = $modx->db->getRow($ds); - - if(!$row) { - $output = webLoginAlert("Incorrect username or password entered!"); - return; - } - - $internalKey = $row['internalKey']; - $dbasePassword = $row['password']; - $failedlogins = $row['failedlogincount']; - $blocked = $row['blocked']; - $blockeduntildate = $row['blockeduntil']; - $blockedafterdate = $row['blockedafter']; - $registeredsessionid = $row['sessionid']; - $role = $row['role']; - $lastlogin = $row['lastlogin']; - $nrlogins = $row['logincount']; - $fullname = $row['fullname']; - //$sessionRegistered = checkSession(); - $email = $row['email']; - - // load user settings - if($internalKey){ - $result = $modx->db->select('setting_name, setting_value', $modx->getFullTableName('web_user_settings'), "webuser='{$internalKey}'"); - while ($row = $modx->db->getRow($result)) { - $modx->config[$row['setting_name']] = $row['setting_value']; - } - } - - if($failedlogins>=$modx->config['failed_login_attempts'] && $blockeduntildate>time()) { // blocked due to number of login errors. - clearWebuserSession(); - $output = webLoginAlert("Due to too many failed logins, you have been blocked!"); - return; - } - - if($failedlogins>=$modx->config['failed_login_attempts'] && $blockeduntildatedb->update( - array( - 'failedlogincount' => 0, - 'blockeduntil' => (time()-1), - ), - $modx->getFullTableName('web_user_attributes'), - "internalKey='{$internalKey}'" - ); - } - - if($blocked=="1") { // this user has been blocked by an admin, so no way he's loggin in! - clearWebuserSession(); - $output = webLoginAlert("You are blocked and cannot log in!"); - return; - } - - // blockuntil - if($blockeduntildate>time()) { // this user has a block until date - clearWebuserSession(); - $output = webLoginAlert("You are blocked and cannot log in! Please try again later."); - return; - } - - // blockafter - if($blockedafterdate>0 && $blockedafterdateconfig['allowed_ip'])) { - if (strpos($modx->config['allowed_ip'],$_SERVER['REMOTE_ADDR'])===false) { - $output = webLoginAlert("You are not allowed to login from this location."); - return; - } - } - - // allowed days - if (isset($modx->config['allowed_days'])) { - $date = getdate(); - $day = $date['wday']+1; - if (strpos($modx->config['allowed_days'],"$day")===false) { - $output = webLoginAlert("You are not allowed to login at this time. Please try again later."); - return; - } - } - - // invoke OnWebAuthentication event - $rt = $modx->invokeEvent("OnWebAuthentication", - array( - "userid" => $internalKey, - "username" => $username, - "userpassword" => $givenPassword, - "savedpassword" => $dbasePassword, - "rememberme" => $rememberme - )); - // check if plugin authenticated the user - if (!$rt||(is_array($rt) && !in_array(TRUE,$rt))) { - // check user password - local authentication - if($dbasePassword != md5($givenPassword)) { - $output = webLoginAlert("Incorrect username or password entered!"); - $newloginerror = 1; - } - } - - if(isset($modx->config['use_captcha']) && $modx->config['use_captcha']==1 && isset($_POST['cmdwebsignup'])) { - if($_SESSION['veriword']!=$captcha_code) { - $output = webLoginAlert("The security code you entered didn't validate! Please try to login again!"); - $newloginerror = 1; - } - } - - if(isset($newloginerror) && $newloginerror==1) { - $failedlogins += $newloginerror; - if($failedlogins>=$modx->config['failed_login_attempts']) { //increment the failed login counter, and block until! - $modx->db->update( - array( - 'failedlogincount' => $failedlogins, - 'blockeduntil' => (time()+($modx->config['blocked_minutes']*60)), - ), - $modx->getFullTableName('web_user_attributes'), - "internalKey='{$internalKey}'" - ); - } else { //increment the failed login counter - $modx->db->update( - array( - 'failedlogincount' => $failedlogins, - ), - $modx->getFullTableName('web_user_attributes'), - "internalKey='{$internalKey}'" - ); - } - clearWebuserSession(); - return; - } - - $currentsessionid = session_id(); - - if(!isset($_SESSION['webValidated'])) { - $modx->db->update( - "failedlogincount=0, logincount=logincount+1, lastlogin=thislogin, thislogin=".time().", sessionid='{$currentsessionid}'", - $modx->getFullTableName('web_user_attributes'), - "internalKey='{$internalKey}'" - ); - } - - $_SESSION['webShortname']=$username; - $_SESSION['webFullname']=$fullname; - $_SESSION['webEmail']=$email; - $_SESSION['webValidated']=1; - $_SESSION['webInternalKey']=$internalKey; - $_SESSION['webValid']=base64_encode($givenPassword); - $_SESSION['webUser']=base64_encode($username); - $_SESSION['webFailedlogins']=$failedlogins; - $_SESSION['webLastlogin']=$lastlogin; - $_SESSION['webnrlogins']=$nrlogins; - $_SESSION['webUserGroupNames'] = ''; // reset user group names - - // get user's document groups - $ds = $modx->db->select( - 'uga.documentgroup', - $modx->getFullTableName('web_groups')." AS ug INNER JOIN ".$modx->getFullTableName('webgroup_access')." AS uga ON uga.webgroup=ug.webgroup", - "webuser='{$internalKey}'" - ); - $_SESSION['webDocgroups'] = $modx->db->getColumn('documentgroup', $ds); - - $ds = $modx->db->select( - 'wgn.name', - $modx->getFullTableName('webgroup_names')." AS wgn INNER JOIN ".$modx->getFullTableName('web_groups')." AS wg ON wg.webgroup=wgn.id AND wg.webuser='{$internalKey}'" - ); - $grpNames= $this->db->getColumn("name", $ds); - $_SESSION['webUserGroupNames']= $grpNames; - - if($rememberme) { - $_SESSION['modx.web.session.cookie.lifetime']= intval($modx->config['session.cookie.lifetime']); - } else { - $_SESSION['modx.web.session.cookie.lifetime']= 0; - } - - $log = new logHandler; - $log->initAndWriteLog("Logged in", $_SESSION['webInternalKey'], $_SESSION['webShortname'], "58", "-", "WebLogin"); - - // get login home page - $ok=false; - if(isset($modx->config['login_home']) && $id=$modx->config['login_home']) { - if ($modx->getPageInfo($id)) $ok = true; - } - if (!$ok) { - // check if a login home id page was set - foreach($liHomeId as $id) { - $id = trim($id); - if ($modx->getPageInfo($id)) {$ok=true; break;} - } - } - - // update active users list if redirectinq to another page - if($id!=$modx->documentIdentifier) { - $itemid = isset($_REQUEST['id']) ? $_REQUEST['id'] : 'NULL' ; - $lasthittime = $modx->time; - $a = 998; - - // web users are stored with negative id - $sql = "REPLACE INTO ".$modx->getFullTableName('active_users')." (internalKey, username, lasthit, action, id) values(-{$_SESSION['webInternalKey']}, '{$_SESSION['webShortname']}', '{$lasthittime}', '{$a}', {$itemid})"; - $modx->db->query($sql); - - $modx->updateValidatedUserSession(); - } - - // invoke OnWebLogin event - $modx->invokeEvent("OnWebLogin", - array( - "userid" => $internalKey, - "username" => $username, - "userpassword" => $givenPassword, - "rememberme" => $_POST['rememberme'] - )); - - // redirect - if(isset($_REQUEST['refurl']) && !empty($_REQUEST['refurl'])) { - // last accessed page - $targetPageId= urldecode($_REQUEST['refurl']); - if (strpos($targetPageId, 'q=') !== false) { - $urlPos = strpos($targetPageId, 'q=')+2; - $alias = substr($targetPageId, $urlPos); - $aliasLength = (strpos($alias, '&'))? strpos($alias, '&'): strlen($alias); - $alias = substr($alias, 0, $aliasLength); - $url = $modx->config['base_url'] . $alias; - } elseif (intval($targetPageId)) { - $url = preserveUrl($targetPageId); - } else { - $url = urldecode($_REQUEST['refurl']); - } - $modx->sendRedirect($url); - } - else { - // login home page - $url = preserveUrl($id); - $modx->sendRedirect($url); - } - - return; - - function clearWebuserSession() { - // if we were launched from the manager - // do NOT destroy session - if(isset($_SESSION['mgrValidated'])) { - unset($_SESSION['webShortname']); - unset($_SESSION['webFullname']); - unset($_SESSION['webEmail']); - unset($_SESSION['webValidated']); - unset($_SESSION['webInternalKey']); - unset($_SESSION['webValid']); - unset($_SESSION['webUser']); - unset($_SESSION['webFailedlogins']); - unset($_SESSION['webLastlogin']); - unset($_SESSION['webnrlogins']); - unset($_SESSION['webUsrConfigSet']); - unset($_SESSION['webUserGroupNames']); - unset($_SESSION['webDocgroups']); - unset($_SESSION['webDocgrpNames']); - } - else { - // Unset all of the session variables. - // destroy session cookie - if (isset($_COOKIE[session_name()])) { - setcookie(session_name(), '', 0, MODX_BASE_URL); - } - session_destroy(); - } - } - -?> diff --git a/assets/snippets/weblogin/websignup.inc.php b/assets/snippets/weblogin/websignup.inc.php deleted file mode 100755 index c3a20a286d..0000000000 --- a/assets/snippets/weblogin/websignup.inc.php +++ /dev/null @@ -1,485 +0,0 @@ -getDocuments($tpl)) ? $doc['content']:"Document '$tpl' not found."; -else if($tpl) $tpl = ($chunk=$modx->getChunk($tpl)) ? $chunk:"Chunk '$tpl' not found."; -if(!$tpl) $tpl = getWebSignuptpl($useCaptcha); - -// extract declarations -$declare = webLoginExtractDeclarations($tpl); -$tpls = explode((isset($declare["separator"]) ? $declare["separator"]:""),$tpl); - -if(!$isPostBack){ - // display signup screen - $tpl = $tpls[0]; - $tpl = str_replace("[+action+]",$modx->makeURL($modx->documentIdentifier),$tpl); - $tpl.=""; - $output .= $tpl; -} -else if ($isPostBack){ - - $username = $modx->db->escape($modx->stripTags(trim(htmlspecialchars($_POST['username'], ENT_NOQUOTES, $modx->config['modx_charset'])))); - $fullname = $modx->db->escape($modx->stripTags($_POST['fullname'])); - $email = $modx->db->escape($modx->stripTags($_POST['email'])); - $password = htmlspecialchars($_POST['password'], ENT_NOQUOTES, $modx->config['modx_charset']); - $country = $modx->db->escape($modx->stripTags($_POST['country'])); - $state = $modx->db->escape($modx->stripTags($_POST['state'])); - $zip = $modx->db->escape($modx->stripTags($_POST['zip'])); - $formcode = $_POST['formcode']; - - // load template section #1 - $tpl = $tpls[0]; - $tpl = str_replace("[+action+]",$modx->makeURL($modx->documentIdentifier),$tpl); - $tpl = str_replace("[+username+]",$username,$tpl); - $tpl = str_replace("[+fullname+]",$fullname,$tpl); - $tpl = str_replace("[+email+]",$email,$tpl); - $tpl = str_replace("[+country+]",$country,$tpl); - $tpl = str_replace("[+state+]",$state,$tpl); - $tpl = str_replace("[+zip+]",$zip,$tpl); - $tpl.=""; - - // check for duplicate user name - if($username=="") { - $output = webLoginAlert("Missing username. Please enter a user name.").$tpl; - return; - } - else { - $rs = $modx->db->select('count(id)', $modx->getFullTableName("web_users"), "username='{$username}'"); - $limit = $modx->db->getValue($rs); - if($limit>0) { - $output = webLoginAlert("Username is already in use!").$tpl; - return; - } - } - - // verify email - if($email=='' || !preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i", $email)){ - $output = webLoginAlert("E-mail address doesn't seem to be valid!").$tpl; - return; - } - - // check for duplicate email address - $rs = $modx->db->select('count(internalKey)', $modx->getFullTableName("web_user_attributes"), "email='{$email}' AND internalKey!='{$id}'"); - $limit = $modx->db->getValue($rs); - if($limit>0) { - $output = webLoginAlert("Email is already in use!").$tpl; - return; - } - - // if there is no password, randomly generate a new one - if (isset($_POST['password'])) { - // verify password - if ($_POST['password'] != $_POST['confirmpassword']) { - $output = webLoginAlert("Password typed is mismatched"). $tpl; - return; - } - - // check password - if (strlen($password) < 6 ) { - $output = webLoginAlert("Password is too short!").$tpl; - return; - } - elseif($password=="") { - $output = webLoginAlert("You didn't specify a password for this user!").$tpl; - return; - } - } else { - $password = webLoginGeneratePassword(); - } - - // verify form code - if($useCaptcha && $_SESSION['veriword']!=$formcode) { - $output = webLoginAlert("Incorrect form code. Please enter the correct code displayed by the image.").$tpl; - return; - } - - // create the user account - $key = $modx->db->insert( - array( - 'username' => $username, - 'password' => md5($password), - ), $modx->getFullTableName("web_users")); - - // save user attributes - $modx->db->insert( - array( - 'internalKey' => $key, - 'fullname' => $fullname, - 'email' => $email, - 'zip' => $zip, - 'state' => $state, - 'country' => $country, - ), $modx->getFullTableName("web_user_attributes")); - - // add user to web groups - if(count($groups)>0) { - $ds = $modx->db->select('id', $modx->getFullTableName("webgroup_names"), "name IN ('".implode("','",$groups)."')"); - while ($wg = $modx->db->getValue($ds)) { - $modx->db->query("REPLACE INTO ".$modx->getFullTableName("web_groups")." (webgroup,webuser) VALUES('$wg','$key')"); - } - } - - // invoke OnWebSaveUser event - $modx->invokeEvent("OnWebSaveUser", - array( - "mode" => "new", - "userid" => $key, - "username" => $username, - "userpassword" => $password, - "useremail" => $email, - "userfullname" => $fullname - )); - - // send email notification - $rt = webLoginSendNewPassword($email,$username,$password,$fullname); - if ($rt!==true) { // an error occured - $output = $rt.$tpl; - return; - } - - // display change notification - $newpassmsg = "A copy of the new password was sent to your email address."; - $tpl = $tpls[1]; - $tpl = str_replace("[+newpassmsg+]",$newpassmsg,$tpl); - $output .= $tpl; -} - -// Returns Default WebChangePwd tpl -function getWebSignuptpl($useCaptcha){ - ob_start(); - ?> - - -
    - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    User name:* -
    Full name: -
    Email address:* -
    Password:* -
    Confirm password:* -
    Country:
    State: -
    Zip: -
    Form code:* - - If you have trouble reading the code, click on the code itself to generate a new random code. -
     * - Indicates required fields
    -
    - - -
    -
    - -
    - - Signup completed successfully
    - Your account was successfully created.
    - A copy of your signup information was sent to your email address.

    - diff --git a/install/assets/snippets/webchangepwd.tpl b/install/assets/snippets/webchangepwd.tpl deleted file mode 100755 index 346a892a71..0000000000 --- a/install/assets/snippets/webchangepwd.tpl +++ /dev/null @@ -1,47 +0,0 @@ -//isBackend())? "../":""); -$snipPath .= "assets/snippets/"; - -# check if inside manager -if ($m = $modx->isBackend()) { - return ''; # don't go any further when inside manager -} - - -# Snippet customize settings -$tpl = isset($tpl)? $tpl:""; - -# System settings -$isPostBack = count($_POST) && isset($_POST['cmdwebchngpwd']); - -# Start processing -include_once $snipPath."weblogin/weblogin.common.inc.php"; -include_once $snipPath."weblogin/webchangepwd.inc.php"; - -# Return -return $output; - - - diff --git a/install/assets/snippets/weblogin.tpl b/install/assets/snippets/weblogin.tpl deleted file mode 100755 index c901735930..0000000000 --- a/install/assets/snippets/weblogin.tpl +++ /dev/null @@ -1,22 +0,0 @@ -//config['base_path'] . "assets/snippets/"; - -# check if inside manager -if ($m = $modx->isBackend()) { - return ''; # don't go any further when inside manager -} - - -# Snippet customize settings -$tpl = isset($tpl)? $tpl:""; -$useCaptcha = isset($useCaptcha)? $useCaptcha : $modx->config['use_captcha'] ; -// Override captcha if no GD -if ($useCaptcha && !gd_info()) $useCaptcha = 0; - -# setup web groups -$groups = isset($groups) ? array_filter(array_map('trim', explode(',', $groups))):array(); - -# System settings -$isPostBack = count($_POST) && isset($_POST['cmdwebsignup']); - -$output = ''; - -# Start processing -include_once $snipPath."weblogin/weblogin.common.inc.php"; -include_once $snipPath."weblogin/websignup.inc.php"; - -# Return -return $output; \ No newline at end of file From 3f729cca0dd7ccf9154d13ff479a4de768dd1264 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sat, 4 Nov 2017 22:25:54 +0300 Subject: [PATCH 333/577] fix category for snippets and plugins --- install/assets/plugins/userHelper.tpl | 1 + install/assets/snippets/DLMenu.tpl | 2 +- install/assets/snippets/DLcrumbs.tpl | 2 +- install/assets/snippets/docinfo.tpl | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/install/assets/plugins/userHelper.tpl b/install/assets/plugins/userHelper.tpl index 527dbcd9a1..a14b020cca 100644 --- a/install/assets/plugins/userHelper.tpl +++ b/install/assets/plugins/userHelper.tpl @@ -8,6 +8,7 @@ * @version 1.7.8 * @internal @properties &logoutKey=Request key;text;logout &cookieName=Cookie Name;text;WebLoginPE &cookieLifetime=Cookie Lifetime, seconds;text;157680000 &maxFails=Max failed logins;text;3 &blockTime=Block for, seconds;text;3600 * @internal @events OnWebPageInit,OnPageNotFound,OnWebLogin + * @internal @modx_category Content * @internal @disabled 1 **/ diff --git a/install/assets/snippets/DLMenu.tpl b/install/assets/snippets/DLMenu.tpl index 0cd138feb9..dc48d47d60 100644 --- a/install/assets/snippets/DLMenu.tpl +++ b/install/assets/snippets/DLMenu.tpl @@ -8,7 +8,7 @@ * @version 1.2.0 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) * @internal @properties - * @internal @modx_category Content + * @internal @modx_category Navigation * @internal @installset base, sample */ diff --git a/install/assets/snippets/DLcrumbs.tpl b/install/assets/snippets/DLcrumbs.tpl index 5ab3642a30..6472e9eb89 100644 --- a/install/assets/snippets/DLcrumbs.tpl +++ b/install/assets/snippets/DLcrumbs.tpl @@ -8,7 +8,7 @@ * @version 1.2 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) * @internal @properties - * @internal @modx_category Content + * @internal @modx_category Navigation * @internal @installset base, sample */ diff --git a/install/assets/snippets/docinfo.tpl b/install/assets/snippets/docinfo.tpl index a1bcf89571..b82aad245c 100644 --- a/install/assets/snippets/docinfo.tpl +++ b/install/assets/snippets/docinfo.tpl @@ -8,7 +8,7 @@ * @version 1 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) * @internal @properties - * @internal @modx_category add + * @internal @modx_category Content * @internal @installset base, sample */ From 5a9f007c93bc603c10533fb0c52f21326773b00a Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sat, 4 Nov 2017 23:26:01 +0300 Subject: [PATCH 334/577] delete some unused files --- assets/js/easy-ui/themes/black/accordion.css | 89 - assets/js/easy-ui/themes/black/calendar.css | 202 -- assets/js/easy-ui/themes/black/combo.css | 35 - assets/js/easy-ui/themes/black/combobox.css | 39 - assets/js/easy-ui/themes/black/datagrid.css | 288 -- assets/js/easy-ui/themes/black/datalist.css | 95 - assets/js/easy-ui/themes/black/datebox.css | 36 - assets/js/easy-ui/themes/black/dialog.css | 47 - assets/js/easy-ui/themes/black/easyui.css | 3220 ---------------- assets/js/easy-ui/themes/black/filebox.css | 20 - .../themes/black/images/accordion_arrows.png | Bin 122 -> 0 bytes .../js/easy-ui/themes/black/images/blank.gif | Bin 43 -> 0 bytes .../themes/black/images/calendar_arrows.png | Bin 173 -> 0 bytes .../themes/black/images/combo_arrow.png | Bin 100 -> 0 bytes .../themes/black/images/datagrid_icons.png | Bin 300 -> 0 bytes .../themes/black/images/datebox_arrow.png | Bin 626 -> 0 bytes .../themes/black/images/layout_arrows.png | Bin 179 -> 0 bytes .../themes/black/images/linkbutton_bg.png | Bin 1274 -> 0 bytes .../easy-ui/themes/black/images/loading.gif | Bin 1737 -> 0 bytes .../themes/black/images/menu_arrows.png | Bin 134 -> 0 bytes .../themes/black/images/messager_icons.png | Bin 6116 -> 0 bytes .../themes/black/images/pagination_icons.png | Bin 339 -> 0 bytes .../themes/black/images/panel_tools.png | Bin 184 -> 0 bytes .../themes/black/images/passwordbox_close.png | Bin 149 -> 0 bytes .../themes/black/images/passwordbox_open.png | Bin 160 -> 0 bytes .../themes/black/images/searchbox_button.png | Bin 813 -> 0 bytes .../themes/black/images/slider_handle.png | Bin 863 -> 0 bytes .../themes/black/images/spinner_arrows.png | Bin 140 -> 0 bytes .../themes/black/images/tabs_icons.png | Bin 144 -> 0 bytes .../themes/black/images/tagbox_icons.png | Bin 133 -> 0 bytes .../themes/black/images/tree_icons.png | Bin 3086 -> 0 bytes .../black/images/validatebox_warning.png | Bin 921 -> 0 bytes assets/js/easy-ui/themes/black/layout.css | 150 - assets/js/easy-ui/themes/black/linkbutton.css | 203 -- assets/js/easy-ui/themes/black/menu.css | 119 - assets/js/easy-ui/themes/black/menubutton.css | 94 - assets/js/easy-ui/themes/black/messager.css | 44 - assets/js/easy-ui/themes/black/numberbox.css | 0 assets/js/easy-ui/themes/black/pagination.css | 71 - assets/js/easy-ui/themes/black/panel.css | 265 -- .../js/easy-ui/themes/black/passwordbox.css | 6 - .../js/easy-ui/themes/black/progressbar.css | 32 - .../js/easy-ui/themes/black/propertygrid.css | 28 - assets/js/easy-ui/themes/black/searchbox.css | 61 - assets/js/easy-ui/themes/black/slider.css | 101 - assets/js/easy-ui/themes/black/spinner.css | 58 - .../js/easy-ui/themes/black/splitbutton.css | 12 - .../js/easy-ui/themes/black/switchbutton.css | 77 - assets/js/easy-ui/themes/black/tabs.css | 413 --- assets/js/easy-ui/themes/black/tagbox.css | 44 - assets/js/easy-ui/themes/black/textbox.css | 139 - assets/js/easy-ui/themes/black/tooltip.css | 103 - assets/js/easy-ui/themes/black/tree.css | 161 - .../js/easy-ui/themes/black/validatebox.css | 5 - assets/js/easy-ui/themes/black/window.css | 183 - assets/js/easy-ui/themes/gray/accordion.css | 89 - assets/js/easy-ui/themes/gray/calendar.css | 202 -- assets/js/easy-ui/themes/gray/combo.css | 35 - assets/js/easy-ui/themes/gray/combobox.css | 39 - assets/js/easy-ui/themes/gray/datagrid.css | 288 -- assets/js/easy-ui/themes/gray/datalist.css | 95 - assets/js/easy-ui/themes/gray/datebox.css | 36 - assets/js/easy-ui/themes/gray/dialog.css | 47 - assets/js/easy-ui/themes/gray/easyui.css | 3220 ---------------- assets/js/easy-ui/themes/gray/filebox.css | 20 - .../themes/gray/images/accordion_arrows.png | Bin 125 -> 0 bytes .../js/easy-ui/themes/gray/images/blank.gif | Bin 43 -> 0 bytes .../themes/gray/images/calendar_arrows.png | Bin 173 -> 0 bytes .../themes/gray/images/combo_arrow.png | Bin 103 -> 0 bytes .../themes/gray/images/datagrid_icons.png | Bin 330 -> 0 bytes .../themes/gray/images/datebox_arrow.png | Bin 626 -> 0 bytes .../themes/gray/images/layout_arrows.png | Bin 181 -> 0 bytes .../themes/gray/images/linkbutton_bg.png | Bin 1274 -> 0 bytes .../js/easy-ui/themes/gray/images/loading.gif | Bin 1737 -> 0 bytes .../themes/gray/images/menu_arrows.png | Bin 160 -> 0 bytes .../themes/gray/images/messager_icons.png | Bin 6116 -> 0 bytes .../themes/gray/images/pagination_icons.png | Bin 466 -> 0 bytes .../themes/gray/images/panel_tools.png | Bin 191 -> 0 bytes .../themes/gray/images/passwordbox_close.png | Bin 149 -> 0 bytes .../themes/gray/images/passwordbox_open.png | Bin 160 -> 0 bytes .../themes/gray/images/searchbox_button.png | Bin 813 -> 0 bytes .../themes/gray/images/slider_handle.png | Bin 863 -> 0 bytes .../themes/gray/images/spinner_arrows.png | Bin 149 -> 0 bytes .../easy-ui/themes/gray/images/tabs_icons.png | Bin 144 -> 0 bytes .../themes/gray/images/tagbox_icons.png | Bin 133 -> 0 bytes .../easy-ui/themes/gray/images/tree_icons.png | Bin 3115 -> 0 bytes .../gray/images/validatebox_warning.png | Bin 921 -> 0 bytes assets/js/easy-ui/themes/gray/layout.css | 150 - assets/js/easy-ui/themes/gray/linkbutton.css | 203 -- assets/js/easy-ui/themes/gray/menu.css | 119 - assets/js/easy-ui/themes/gray/menubutton.css | 94 - assets/js/easy-ui/themes/gray/messager.css | 44 - assets/js/easy-ui/themes/gray/numberbox.css | 0 assets/js/easy-ui/themes/gray/pagination.css | 71 - assets/js/easy-ui/themes/gray/panel.css | 265 -- assets/js/easy-ui/themes/gray/passwordbox.css | 6 - assets/js/easy-ui/themes/gray/progressbar.css | 32 - .../js/easy-ui/themes/gray/propertygrid.css | 28 - assets/js/easy-ui/themes/gray/searchbox.css | 61 - assets/js/easy-ui/themes/gray/slider.css | 101 - assets/js/easy-ui/themes/gray/spinner.css | 58 - assets/js/easy-ui/themes/gray/splitbutton.css | 12 - .../js/easy-ui/themes/gray/switchbutton.css | 77 - assets/js/easy-ui/themes/gray/tabs.css | 413 --- assets/js/easy-ui/themes/gray/tagbox.css | 44 - assets/js/easy-ui/themes/gray/textbox.css | 139 - assets/js/easy-ui/themes/gray/tooltip.css | 103 - assets/js/easy-ui/themes/gray/tree.css | 161 - assets/js/easy-ui/themes/gray/validatebox.css | 5 - assets/js/easy-ui/themes/gray/window.css | 183 - .../js/easy-ui/themes/material/accordion.css | 89 - .../js/easy-ui/themes/material/calendar.css | 202 -- assets/js/easy-ui/themes/material/combo.css | 35 - .../js/easy-ui/themes/material/combobox.css | 39 - .../js/easy-ui/themes/material/datagrid.css | 282 -- .../js/easy-ui/themes/material/datalist.css | 95 - assets/js/easy-ui/themes/material/datebox.css | 36 - assets/js/easy-ui/themes/material/dialog.css | 47 - assets/js/easy-ui/themes/material/easyui.css | 3229 ----------------- assets/js/easy-ui/themes/material/filebox.css | 20 - .../easy-ui/themes/material/images/Thumbs.db | Bin 35328 -> 0 bytes .../material/images/accordion_arrows.png | Bin 125 -> 0 bytes .../easy-ui/themes/material/images/blank.gif | Bin 43 -> 0 bytes .../material/images/calendar_arrows.png | Bin 173 -> 0 bytes .../themes/material/images/combo_arrow.png | Bin 103 -> 0 bytes .../themes/material/images/datagrid_icons.png | Bin 330 -> 0 bytes .../themes/material/images/datebox_arrow.png | Bin 626 -> 0 bytes .../themes/material/images/layout_arrows.png | Bin 181 -> 0 bytes .../themes/material/images/linkbutton_bg.png | Bin 1274 -> 0 bytes .../themes/material/images/loading.gif | Bin 1737 -> 0 bytes .../themes/material/images/menu_arrows.png | Bin 160 -> 0 bytes .../themes/material/images/messager_icons.png | Bin 6116 -> 0 bytes .../material/images/pagination_icons.png | Bin 466 -> 0 bytes .../themes/material/images/panel_tools.png | Bin 191 -> 0 bytes .../material/images/passwordbox_close.png | Bin 149 -> 0 bytes .../material/images/passwordbox_open.png | Bin 160 -> 0 bytes .../material/images/searchbox_button.png | Bin 813 -> 0 bytes .../themes/material/images/slider_handle.png | Bin 863 -> 0 bytes .../themes/material/images/spinner_arrows.png | Bin 149 -> 0 bytes .../themes/material/images/tabs_icons.png | Bin 144 -> 0 bytes .../themes/material/images/tagbox_icons.png | Bin 133 -> 0 bytes .../themes/material/images/tree_icons.png | Bin 3115 -> 0 bytes .../material/images/validatebox_warning.png | Bin 921 -> 0 bytes assets/js/easy-ui/themes/material/layout.css | 150 - .../js/easy-ui/themes/material/linkbutton.css | 191 - assets/js/easy-ui/themes/material/menu.css | 119 - .../js/easy-ui/themes/material/menubutton.css | 94 - .../js/easy-ui/themes/material/messager.css | 44 - .../js/easy-ui/themes/material/numberbox.css | 0 .../js/easy-ui/themes/material/pagination.css | 71 - assets/js/easy-ui/themes/material/panel.css | 259 -- .../easy-ui/themes/material/passwordbox.css | 6 - .../easy-ui/themes/material/progressbar.css | 32 - .../easy-ui/themes/material/propertygrid.css | 28 - .../js/easy-ui/themes/material/searchbox.css | 61 - assets/js/easy-ui/themes/material/slider.css | 101 - assets/js/easy-ui/themes/material/spinner.css | 58 - .../easy-ui/themes/material/splitbutton.css | 12 - .../easy-ui/themes/material/switchbutton.css | 77 - assets/js/easy-ui/themes/material/tabs.css | 377 -- assets/js/easy-ui/themes/material/tagbox.css | 44 - assets/js/easy-ui/themes/material/textbox.css | 139 - assets/js/easy-ui/themes/material/tooltip.css | 103 - assets/js/easy-ui/themes/material/tree.css | 161 - .../easy-ui/themes/material/validatebox.css | 5 - assets/js/easy-ui/themes/material/window.css | 177 - assets/js/easy-ui/themes/metro/accordion.css | 89 - assets/js/easy-ui/themes/metro/calendar.css | 202 -- assets/js/easy-ui/themes/metro/combo.css | 35 - assets/js/easy-ui/themes/metro/combobox.css | 39 - assets/js/easy-ui/themes/metro/datagrid.css | 282 -- assets/js/easy-ui/themes/metro/datalist.css | 95 - assets/js/easy-ui/themes/metro/datebox.css | 36 - assets/js/easy-ui/themes/metro/dialog.css | 47 - assets/js/easy-ui/themes/metro/easyui.css | 3166 ---------------- assets/js/easy-ui/themes/metro/filebox.css | 20 - .../themes/metro/images/accordion_arrows.png | Bin 184 -> 0 bytes .../js/easy-ui/themes/metro/images/blank.gif | Bin 43 -> 0 bytes .../themes/metro/images/calendar_arrows.png | Bin 173 -> 0 bytes .../themes/metro/images/combo_arrow.png | Bin 117 -> 0 bytes .../themes/metro/images/datagrid_icons.png | Bin 307 -> 0 bytes .../themes/metro/images/datebox_arrow.png | Bin 626 -> 0 bytes .../themes/metro/images/layout_arrows.png | Bin 319 -> 0 bytes .../themes/metro/images/linkbutton_bg.png | Bin 1274 -> 0 bytes .../easy-ui/themes/metro/images/loading.gif | Bin 1737 -> 0 bytes .../themes/metro/images/menu_arrows.png | Bin 160 -> 0 bytes .../themes/metro/images/messager_icons.png | Bin 6116 -> 0 bytes .../themes/metro/images/pagination_icons.png | Bin 628 -> 0 bytes .../themes/metro/images/panel_tools.png | Bin 194 -> 0 bytes .../themes/metro/images/passwordbox_close.png | Bin 159 -> 0 bytes .../themes/metro/images/passwordbox_open.png | Bin 165 -> 0 bytes .../themes/metro/images/searchbox_button.png | Bin 813 -> 0 bytes .../themes/metro/images/slider_handle.png | Bin 863 -> 0 bytes .../themes/metro/images/spinner_arrows.png | Bin 149 -> 0 bytes .../themes/metro/images/tabs_icons.png | Bin 150 -> 0 bytes .../themes/metro/images/tagbox_icons.png | Bin 134 -> 0 bytes .../themes/metro/images/tree_icons.png | Bin 3115 -> 0 bytes .../metro/images/validatebox_warning.png | Bin 921 -> 0 bytes assets/js/easy-ui/themes/metro/layout.css | 150 - assets/js/easy-ui/themes/metro/linkbutton.css | 203 -- assets/js/easy-ui/themes/metro/menu.css | 119 - assets/js/easy-ui/themes/metro/menubutton.css | 94 - assets/js/easy-ui/themes/metro/messager.css | 44 - assets/js/easy-ui/themes/metro/numberbox.css | 0 assets/js/easy-ui/themes/metro/pagination.css | 71 - assets/js/easy-ui/themes/metro/panel.css | 259 -- .../js/easy-ui/themes/metro/passwordbox.css | 6 - .../js/easy-ui/themes/metro/progressbar.css | 32 - .../js/easy-ui/themes/metro/propertygrid.css | 28 - assets/js/easy-ui/themes/metro/searchbox.css | 61 - assets/js/easy-ui/themes/metro/slider.css | 101 - assets/js/easy-ui/themes/metro/spinner.css | 58 - .../js/easy-ui/themes/metro/splitbutton.css | 12 - .../js/easy-ui/themes/metro/switchbutton.css | 77 - assets/js/easy-ui/themes/metro/tabs.css | 377 -- assets/js/easy-ui/themes/metro/tagbox.css | 44 - assets/js/easy-ui/themes/metro/textbox.css | 139 - assets/js/easy-ui/themes/metro/tooltip.css | 103 - assets/js/easy-ui/themes/metro/tree.css | 161 - .../js/easy-ui/themes/metro/validatebox.css | 5 - assets/js/easy-ui/themes/metro/window.css | 177 - 221 files changed, 25595 deletions(-) delete mode 100644 assets/js/easy-ui/themes/black/accordion.css delete mode 100644 assets/js/easy-ui/themes/black/calendar.css delete mode 100644 assets/js/easy-ui/themes/black/combo.css delete mode 100644 assets/js/easy-ui/themes/black/combobox.css delete mode 100644 assets/js/easy-ui/themes/black/datagrid.css delete mode 100644 assets/js/easy-ui/themes/black/datalist.css delete mode 100644 assets/js/easy-ui/themes/black/datebox.css delete mode 100644 assets/js/easy-ui/themes/black/dialog.css delete mode 100644 assets/js/easy-ui/themes/black/easyui.css delete mode 100644 assets/js/easy-ui/themes/black/filebox.css delete mode 100755 assets/js/easy-ui/themes/black/images/accordion_arrows.png delete mode 100755 assets/js/easy-ui/themes/black/images/blank.gif delete mode 100755 assets/js/easy-ui/themes/black/images/calendar_arrows.png delete mode 100755 assets/js/easy-ui/themes/black/images/combo_arrow.png delete mode 100644 assets/js/easy-ui/themes/black/images/datagrid_icons.png delete mode 100755 assets/js/easy-ui/themes/black/images/datebox_arrow.png delete mode 100755 assets/js/easy-ui/themes/black/images/layout_arrows.png delete mode 100755 assets/js/easy-ui/themes/black/images/linkbutton_bg.png delete mode 100755 assets/js/easy-ui/themes/black/images/loading.gif delete mode 100755 assets/js/easy-ui/themes/black/images/menu_arrows.png delete mode 100755 assets/js/easy-ui/themes/black/images/messager_icons.png delete mode 100755 assets/js/easy-ui/themes/black/images/pagination_icons.png delete mode 100755 assets/js/easy-ui/themes/black/images/panel_tools.png delete mode 100644 assets/js/easy-ui/themes/black/images/passwordbox_close.png delete mode 100644 assets/js/easy-ui/themes/black/images/passwordbox_open.png delete mode 100755 assets/js/easy-ui/themes/black/images/searchbox_button.png delete mode 100755 assets/js/easy-ui/themes/black/images/slider_handle.png delete mode 100644 assets/js/easy-ui/themes/black/images/spinner_arrows.png delete mode 100755 assets/js/easy-ui/themes/black/images/tabs_icons.png delete mode 100644 assets/js/easy-ui/themes/black/images/tagbox_icons.png delete mode 100755 assets/js/easy-ui/themes/black/images/tree_icons.png delete mode 100755 assets/js/easy-ui/themes/black/images/validatebox_warning.png delete mode 100644 assets/js/easy-ui/themes/black/layout.css delete mode 100644 assets/js/easy-ui/themes/black/linkbutton.css delete mode 100644 assets/js/easy-ui/themes/black/menu.css delete mode 100755 assets/js/easy-ui/themes/black/menubutton.css delete mode 100644 assets/js/easy-ui/themes/black/messager.css delete mode 100644 assets/js/easy-ui/themes/black/numberbox.css delete mode 100644 assets/js/easy-ui/themes/black/pagination.css delete mode 100644 assets/js/easy-ui/themes/black/panel.css delete mode 100644 assets/js/easy-ui/themes/black/passwordbox.css delete mode 100755 assets/js/easy-ui/themes/black/progressbar.css delete mode 100755 assets/js/easy-ui/themes/black/propertygrid.css delete mode 100644 assets/js/easy-ui/themes/black/searchbox.css delete mode 100755 assets/js/easy-ui/themes/black/slider.css delete mode 100644 assets/js/easy-ui/themes/black/spinner.css delete mode 100755 assets/js/easy-ui/themes/black/splitbutton.css delete mode 100644 assets/js/easy-ui/themes/black/switchbutton.css delete mode 100644 assets/js/easy-ui/themes/black/tabs.css delete mode 100644 assets/js/easy-ui/themes/black/tagbox.css delete mode 100644 assets/js/easy-ui/themes/black/textbox.css delete mode 100644 assets/js/easy-ui/themes/black/tooltip.css delete mode 100644 assets/js/easy-ui/themes/black/tree.css delete mode 100755 assets/js/easy-ui/themes/black/validatebox.css delete mode 100644 assets/js/easy-ui/themes/black/window.css delete mode 100644 assets/js/easy-ui/themes/gray/accordion.css delete mode 100644 assets/js/easy-ui/themes/gray/calendar.css delete mode 100644 assets/js/easy-ui/themes/gray/combo.css delete mode 100644 assets/js/easy-ui/themes/gray/combobox.css delete mode 100644 assets/js/easy-ui/themes/gray/datagrid.css delete mode 100644 assets/js/easy-ui/themes/gray/datalist.css delete mode 100644 assets/js/easy-ui/themes/gray/datebox.css delete mode 100644 assets/js/easy-ui/themes/gray/dialog.css delete mode 100644 assets/js/easy-ui/themes/gray/easyui.css delete mode 100644 assets/js/easy-ui/themes/gray/filebox.css delete mode 100755 assets/js/easy-ui/themes/gray/images/accordion_arrows.png delete mode 100755 assets/js/easy-ui/themes/gray/images/blank.gif delete mode 100755 assets/js/easy-ui/themes/gray/images/calendar_arrows.png delete mode 100755 assets/js/easy-ui/themes/gray/images/combo_arrow.png delete mode 100644 assets/js/easy-ui/themes/gray/images/datagrid_icons.png delete mode 100755 assets/js/easy-ui/themes/gray/images/datebox_arrow.png delete mode 100755 assets/js/easy-ui/themes/gray/images/layout_arrows.png delete mode 100755 assets/js/easy-ui/themes/gray/images/linkbutton_bg.png delete mode 100755 assets/js/easy-ui/themes/gray/images/loading.gif delete mode 100755 assets/js/easy-ui/themes/gray/images/menu_arrows.png delete mode 100755 assets/js/easy-ui/themes/gray/images/messager_icons.png delete mode 100755 assets/js/easy-ui/themes/gray/images/pagination_icons.png delete mode 100755 assets/js/easy-ui/themes/gray/images/panel_tools.png delete mode 100644 assets/js/easy-ui/themes/gray/images/passwordbox_close.png delete mode 100644 assets/js/easy-ui/themes/gray/images/passwordbox_open.png delete mode 100755 assets/js/easy-ui/themes/gray/images/searchbox_button.png delete mode 100755 assets/js/easy-ui/themes/gray/images/slider_handle.png delete mode 100644 assets/js/easy-ui/themes/gray/images/spinner_arrows.png delete mode 100755 assets/js/easy-ui/themes/gray/images/tabs_icons.png delete mode 100644 assets/js/easy-ui/themes/gray/images/tagbox_icons.png delete mode 100755 assets/js/easy-ui/themes/gray/images/tree_icons.png delete mode 100755 assets/js/easy-ui/themes/gray/images/validatebox_warning.png delete mode 100644 assets/js/easy-ui/themes/gray/layout.css delete mode 100644 assets/js/easy-ui/themes/gray/linkbutton.css delete mode 100644 assets/js/easy-ui/themes/gray/menu.css delete mode 100755 assets/js/easy-ui/themes/gray/menubutton.css delete mode 100644 assets/js/easy-ui/themes/gray/messager.css delete mode 100644 assets/js/easy-ui/themes/gray/numberbox.css delete mode 100644 assets/js/easy-ui/themes/gray/pagination.css delete mode 100644 assets/js/easy-ui/themes/gray/panel.css delete mode 100644 assets/js/easy-ui/themes/gray/passwordbox.css delete mode 100755 assets/js/easy-ui/themes/gray/progressbar.css delete mode 100755 assets/js/easy-ui/themes/gray/propertygrid.css delete mode 100644 assets/js/easy-ui/themes/gray/searchbox.css delete mode 100755 assets/js/easy-ui/themes/gray/slider.css delete mode 100644 assets/js/easy-ui/themes/gray/spinner.css delete mode 100755 assets/js/easy-ui/themes/gray/splitbutton.css delete mode 100644 assets/js/easy-ui/themes/gray/switchbutton.css delete mode 100644 assets/js/easy-ui/themes/gray/tabs.css delete mode 100644 assets/js/easy-ui/themes/gray/tagbox.css delete mode 100644 assets/js/easy-ui/themes/gray/textbox.css delete mode 100644 assets/js/easy-ui/themes/gray/tooltip.css delete mode 100644 assets/js/easy-ui/themes/gray/tree.css delete mode 100755 assets/js/easy-ui/themes/gray/validatebox.css delete mode 100644 assets/js/easy-ui/themes/gray/window.css delete mode 100644 assets/js/easy-ui/themes/material/accordion.css delete mode 100644 assets/js/easy-ui/themes/material/calendar.css delete mode 100644 assets/js/easy-ui/themes/material/combo.css delete mode 100644 assets/js/easy-ui/themes/material/combobox.css delete mode 100644 assets/js/easy-ui/themes/material/datagrid.css delete mode 100644 assets/js/easy-ui/themes/material/datalist.css delete mode 100644 assets/js/easy-ui/themes/material/datebox.css delete mode 100644 assets/js/easy-ui/themes/material/dialog.css delete mode 100644 assets/js/easy-ui/themes/material/easyui.css delete mode 100644 assets/js/easy-ui/themes/material/filebox.css delete mode 100644 assets/js/easy-ui/themes/material/images/Thumbs.db delete mode 100644 assets/js/easy-ui/themes/material/images/accordion_arrows.png delete mode 100644 assets/js/easy-ui/themes/material/images/blank.gif delete mode 100644 assets/js/easy-ui/themes/material/images/calendar_arrows.png delete mode 100644 assets/js/easy-ui/themes/material/images/combo_arrow.png delete mode 100644 assets/js/easy-ui/themes/material/images/datagrid_icons.png delete mode 100644 assets/js/easy-ui/themes/material/images/datebox_arrow.png delete mode 100644 assets/js/easy-ui/themes/material/images/layout_arrows.png delete mode 100644 assets/js/easy-ui/themes/material/images/linkbutton_bg.png delete mode 100644 assets/js/easy-ui/themes/material/images/loading.gif delete mode 100644 assets/js/easy-ui/themes/material/images/menu_arrows.png delete mode 100644 assets/js/easy-ui/themes/material/images/messager_icons.png delete mode 100644 assets/js/easy-ui/themes/material/images/pagination_icons.png delete mode 100644 assets/js/easy-ui/themes/material/images/panel_tools.png delete mode 100644 assets/js/easy-ui/themes/material/images/passwordbox_close.png delete mode 100644 assets/js/easy-ui/themes/material/images/passwordbox_open.png delete mode 100644 assets/js/easy-ui/themes/material/images/searchbox_button.png delete mode 100644 assets/js/easy-ui/themes/material/images/slider_handle.png delete mode 100644 assets/js/easy-ui/themes/material/images/spinner_arrows.png delete mode 100644 assets/js/easy-ui/themes/material/images/tabs_icons.png delete mode 100644 assets/js/easy-ui/themes/material/images/tagbox_icons.png delete mode 100644 assets/js/easy-ui/themes/material/images/tree_icons.png delete mode 100644 assets/js/easy-ui/themes/material/images/validatebox_warning.png delete mode 100644 assets/js/easy-ui/themes/material/layout.css delete mode 100644 assets/js/easy-ui/themes/material/linkbutton.css delete mode 100644 assets/js/easy-ui/themes/material/menu.css delete mode 100644 assets/js/easy-ui/themes/material/menubutton.css delete mode 100644 assets/js/easy-ui/themes/material/messager.css delete mode 100644 assets/js/easy-ui/themes/material/numberbox.css delete mode 100644 assets/js/easy-ui/themes/material/pagination.css delete mode 100644 assets/js/easy-ui/themes/material/panel.css delete mode 100644 assets/js/easy-ui/themes/material/passwordbox.css delete mode 100644 assets/js/easy-ui/themes/material/progressbar.css delete mode 100644 assets/js/easy-ui/themes/material/propertygrid.css delete mode 100644 assets/js/easy-ui/themes/material/searchbox.css delete mode 100644 assets/js/easy-ui/themes/material/slider.css delete mode 100644 assets/js/easy-ui/themes/material/spinner.css delete mode 100644 assets/js/easy-ui/themes/material/splitbutton.css delete mode 100644 assets/js/easy-ui/themes/material/switchbutton.css delete mode 100644 assets/js/easy-ui/themes/material/tabs.css delete mode 100644 assets/js/easy-ui/themes/material/tagbox.css delete mode 100644 assets/js/easy-ui/themes/material/textbox.css delete mode 100644 assets/js/easy-ui/themes/material/tooltip.css delete mode 100644 assets/js/easy-ui/themes/material/tree.css delete mode 100644 assets/js/easy-ui/themes/material/validatebox.css delete mode 100644 assets/js/easy-ui/themes/material/window.css delete mode 100644 assets/js/easy-ui/themes/metro/accordion.css delete mode 100644 assets/js/easy-ui/themes/metro/calendar.css delete mode 100644 assets/js/easy-ui/themes/metro/combo.css delete mode 100644 assets/js/easy-ui/themes/metro/combobox.css delete mode 100644 assets/js/easy-ui/themes/metro/datagrid.css delete mode 100644 assets/js/easy-ui/themes/metro/datalist.css delete mode 100644 assets/js/easy-ui/themes/metro/datebox.css delete mode 100644 assets/js/easy-ui/themes/metro/dialog.css delete mode 100644 assets/js/easy-ui/themes/metro/easyui.css delete mode 100644 assets/js/easy-ui/themes/metro/filebox.css delete mode 100755 assets/js/easy-ui/themes/metro/images/accordion_arrows.png delete mode 100755 assets/js/easy-ui/themes/metro/images/blank.gif delete mode 100755 assets/js/easy-ui/themes/metro/images/calendar_arrows.png delete mode 100755 assets/js/easy-ui/themes/metro/images/combo_arrow.png delete mode 100644 assets/js/easy-ui/themes/metro/images/datagrid_icons.png delete mode 100755 assets/js/easy-ui/themes/metro/images/datebox_arrow.png delete mode 100755 assets/js/easy-ui/themes/metro/images/layout_arrows.png delete mode 100755 assets/js/easy-ui/themes/metro/images/linkbutton_bg.png delete mode 100755 assets/js/easy-ui/themes/metro/images/loading.gif delete mode 100755 assets/js/easy-ui/themes/metro/images/menu_arrows.png delete mode 100755 assets/js/easy-ui/themes/metro/images/messager_icons.png delete mode 100755 assets/js/easy-ui/themes/metro/images/pagination_icons.png delete mode 100755 assets/js/easy-ui/themes/metro/images/panel_tools.png delete mode 100644 assets/js/easy-ui/themes/metro/images/passwordbox_close.png delete mode 100644 assets/js/easy-ui/themes/metro/images/passwordbox_open.png delete mode 100755 assets/js/easy-ui/themes/metro/images/searchbox_button.png delete mode 100755 assets/js/easy-ui/themes/metro/images/slider_handle.png delete mode 100644 assets/js/easy-ui/themes/metro/images/spinner_arrows.png delete mode 100755 assets/js/easy-ui/themes/metro/images/tabs_icons.png delete mode 100644 assets/js/easy-ui/themes/metro/images/tagbox_icons.png delete mode 100755 assets/js/easy-ui/themes/metro/images/tree_icons.png delete mode 100755 assets/js/easy-ui/themes/metro/images/validatebox_warning.png delete mode 100644 assets/js/easy-ui/themes/metro/layout.css delete mode 100644 assets/js/easy-ui/themes/metro/linkbutton.css delete mode 100644 assets/js/easy-ui/themes/metro/menu.css delete mode 100755 assets/js/easy-ui/themes/metro/menubutton.css delete mode 100644 assets/js/easy-ui/themes/metro/messager.css delete mode 100644 assets/js/easy-ui/themes/metro/numberbox.css delete mode 100644 assets/js/easy-ui/themes/metro/pagination.css delete mode 100644 assets/js/easy-ui/themes/metro/panel.css delete mode 100644 assets/js/easy-ui/themes/metro/passwordbox.css delete mode 100755 assets/js/easy-ui/themes/metro/progressbar.css delete mode 100755 assets/js/easy-ui/themes/metro/propertygrid.css delete mode 100644 assets/js/easy-ui/themes/metro/searchbox.css delete mode 100755 assets/js/easy-ui/themes/metro/slider.css delete mode 100644 assets/js/easy-ui/themes/metro/spinner.css delete mode 100755 assets/js/easy-ui/themes/metro/splitbutton.css delete mode 100644 assets/js/easy-ui/themes/metro/switchbutton.css delete mode 100644 assets/js/easy-ui/themes/metro/tabs.css delete mode 100644 assets/js/easy-ui/themes/metro/tagbox.css delete mode 100644 assets/js/easy-ui/themes/metro/textbox.css delete mode 100644 assets/js/easy-ui/themes/metro/tooltip.css delete mode 100644 assets/js/easy-ui/themes/metro/tree.css delete mode 100755 assets/js/easy-ui/themes/metro/validatebox.css delete mode 100644 assets/js/easy-ui/themes/metro/window.css diff --git a/assets/js/easy-ui/themes/black/accordion.css b/assets/js/easy-ui/themes/black/accordion.css deleted file mode 100644 index b2dba5200b..0000000000 --- a/assets/js/easy-ui/themes/black/accordion.css +++ /dev/null @@ -1,89 +0,0 @@ -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #666; - border-color: #000; -} -.accordion .accordion-header { - background: #3d3d3d; - filter: none; -} -.accordion .accordion-header-selected { - background: #0052A3; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #3d3d3d; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #666; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #000; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #3d3d3d; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #666; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #000; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #3d3d3d; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #666; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #000; -} diff --git a/assets/js/easy-ui/themes/black/calendar.css b/assets/js/easy-ui/themes/black/calendar.css deleted file mode 100644 index 5e71d3eb1e..0000000000 --- a/assets/js/easy-ui/themes/black/calendar.css +++ /dev/null @@ -1,202 +0,0 @@ -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #ffffff; -} -.calendar-day { - color: #fff; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #000; -} -.calendar { - border-color: #000; -} -.calendar-header { - background: #3d3d3d; -} -.calendar-body, -.calendar-menu { - background: #666; -} -.calendar-body th { - background: #555; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #777; - color: #fff; -} -.calendar-hover { - border: 1px solid #555; - padding: 0; -} -.calendar-selected { - background-color: #0052A3; - color: #fff; - border: 1px solid #00458a; - padding: 0; -} diff --git a/assets/js/easy-ui/themes/black/combo.css b/assets/js/easy-ui/themes/black/combo.css deleted file mode 100644 index 0798ce198b..0000000000 --- a/assets/js/easy-ui/themes/black/combo.css +++ /dev/null @@ -1,35 +0,0 @@ -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #666; -} -.combo-arrow { - background-color: #3d3d3d; -} -.combo-arrow-hover { - background-color: #777; -} -.combo-arrow:hover { - background-color: #777; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/black/combobox.css b/assets/js/easy-ui/themes/black/combobox.css deleted file mode 100644 index 27b4096ffe..0000000000 --- a/assets/js/easy-ui/themes/black/combobox.css +++ /dev/null @@ -1,39 +0,0 @@ -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #777; - color: #fff; -} -.combobox-item-selected { - background-color: #0052A3; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} diff --git a/assets/js/easy-ui/themes/black/datagrid.css b/assets/js/easy-ui/themes/black/datagrid.css deleted file mode 100644 index 3559be75df..0000000000 --- a/assets/js/easy-ui/themes/black/datagrid.css +++ /dev/null @@ -1,288 +0,0 @@ -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #444; - border-right: 1px solid #777; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #000; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #666 url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #444; - background: -webkit-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); - background: -moz-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); - background: -o-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); - background: linear-gradient(to bottom,#4c4c4c 0,#3f3f3f 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c4c4c,endColorstr=#3f3f3f,GradientType=0); -} -.datagrid-cell-rownumber { - color: #fff; -} -.datagrid-resize-proxy { - background: #cccccc; -} -.datagrid-mask { - background: #000; -} -.datagrid-mask-msg { - border-color: #000; -} -.datagrid-toolbar, -.datagrid-pager { - background: #555; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #222; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #222; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #fff; - border-collapse: separate; -} -.datagrid-row-alt { - background: #555; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #777; - color: #fff; - cursor: default; -} -.datagrid-row-selected { - background: #0052A3; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} diff --git a/assets/js/easy-ui/themes/black/datalist.css b/assets/js/easy-ui/themes/black/datalist.css deleted file mode 100644 index 94dd67e5f4..0000000000 --- a/assets/js/easy-ui/themes/black/datalist.css +++ /dev/null @@ -1,95 +0,0 @@ -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #444; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #222; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #fff; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #222; -} -.m-list li>a:hover { - background: #777; - color: #fff; -} -.m-list .m-list-group { - padding: 0 4px; -} diff --git a/assets/js/easy-ui/themes/black/datebox.css b/assets/js/easy-ui/themes/black/datebox.css deleted file mode 100644 index f5b6bb78bf..0000000000 --- a/assets/js/easy-ui/themes/black/datebox.css +++ /dev/null @@ -1,36 +0,0 @@ -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #555; -} -.datebox-button a { - color: #fff; -} diff --git a/assets/js/easy-ui/themes/black/dialog.css b/assets/js/easy-ui/themes/black/dialog.css deleted file mode 100644 index 4a6f36eb2a..0000000000 --- a/assets/js/easy-ui/themes/black/dialog.css +++ /dev/null @@ -1,47 +0,0 @@ -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #444; - border-right: 1px solid #777; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #555; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #000 #000 #222 #000; -} -.dialog-button { - border-color: #222 #000 #000 #000; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #555; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} diff --git a/assets/js/easy-ui/themes/black/easyui.css b/assets/js/easy-ui/themes/black/easyui.css deleted file mode 100644 index 91149e3966..0000000000 --- a/assets/js/easy-ui/themes/black/easyui.css +++ /dev/null @@ -1,3220 +0,0 @@ -.panel { - overflow: hidden; - text-align: left; - margin: 0; - border: 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.panel-header, -.panel-body { - border-width: 1px; - border-style: solid; -} -.panel-header { - padding: 5px; - position: relative; -} -.panel-title { - background: url('images/blank.gif') no-repeat; -} -.panel-header-noborder { - border-width: 0 0 1px 0; -} -.panel-body { - overflow: auto; - border-top-width: 0; - padding: 0; -} -.panel-body-noheader { - border-top-width: 1px; -} -.panel-body-noborder { - border-width: 0px; -} -.panel-body-nobottom { - border-bottom-width: 0; -} -.panel-with-icon { - padding-left: 18px; -} -.panel-icon, -.panel-tool { - position: absolute; - top: 50%; - margin-top: -8px; - height: 16px; - overflow: hidden; -} -.panel-icon { - left: 5px; - width: 16px; -} -.panel-tool { - right: 5px; - width: auto; -} -.panel-tool a { - display: inline-block; - width: 16px; - height: 16px; - opacity: 0.6; - filter: alpha(opacity=60); - margin: 0 0 0 2px; - vertical-align: top; -} -.panel-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - background-color: #777; - -moz-border-radius: 3px 3px 3px 3px; - -webkit-border-radius: 3px 3px 3px 3px; - border-radius: 3px 3px 3px 3px; -} -.panel-loading { - padding: 11px 0px 10px 30px; -} -.panel-noscroll { - overflow: hidden; -} -.panel-fit, -.panel-fit body { - height: 100%; - margin: 0; - padding: 0; - border: 0; - overflow: hidden; -} -.panel-loading { - background: url('images/loading.gif') no-repeat 10px 10px; -} -.panel-tool-close { - background: url('images/panel_tools.png') no-repeat -16px 0px; -} -.panel-tool-min { - background: url('images/panel_tools.png') no-repeat 0px 0px; -} -.panel-tool-max { - background: url('images/panel_tools.png') no-repeat 0px -16px; -} -.panel-tool-restore { - background: url('images/panel_tools.png') no-repeat -16px -16px; -} -.panel-tool-collapse { - background: url('images/panel_tools.png') no-repeat -32px 0; -} -.panel-tool-expand { - background: url('images/panel_tools.png') no-repeat -32px -16px; -} -.panel-header, -.panel-body { - border-color: #000; -} -.panel-header { - background-color: #3d3d3d; - background: -webkit-linear-gradient(top,#454545 0,#383838 100%); - background: -moz-linear-gradient(top,#454545 0,#383838 100%); - background: -o-linear-gradient(top,#454545 0,#383838 100%); - background: linear-gradient(to bottom,#454545 0,#383838 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); -} -.panel-body { - background-color: #666; - color: #fff; - font-size: 12px; -} -.panel-title { - font-size: 12px; - font-weight: bold; - color: #fff; - height: 16px; - line-height: 16px; -} -.panel-footer { - border: 1px solid #000; - overflow: hidden; - background: #555; -} -.panel-footer-noborder { - border-width: 1px 0 0 0; -} -.panel-hleft, -.panel-hright { - position: relative; -} -.panel-hleft>.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #666; - border-color: #000; -} -.accordion .accordion-header { - background: #3d3d3d; - filter: none; -} -.accordion .accordion-header-selected { - background: #0052A3; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #3d3d3d; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #666; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #000; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #3d3d3d; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #666; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #000; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #3d3d3d; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #666; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #000; -} -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #777; - -moz-box-shadow: 2px 2px 3px #787878; - -webkit-box-shadow: 2px 2px 3px #787878; - box-shadow: 2px 2px 3px #787878; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #000; -} -.window { - background-color: #3d3d3d; - background: -webkit-linear-gradient(top,#454545 0,#383838 20%); - background: -moz-linear-gradient(top,#454545 0,#383838 20%); - background: -o-linear-gradient(top,#454545 0,#383838 20%); - background: linear-gradient(to bottom,#454545 0,#383838 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); -} -.window-proxy { - border: 1px dashed #000; -} -.window-proxy-mask, -.window-mask { - background: #000; -} -.window .panel-footer { - border: 1px solid #000; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #444; - border-right: 1px solid #777; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #555; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #000 #000 #222 #000; -} -.dialog-button { - border-color: #222 #000 #000 #000; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #555; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} -.l-btn { - text-decoration: none; - display: inline-block; - overflow: hidden; - margin: 0; - padding: 0; - cursor: pointer; - outline: none; - text-align: center; - vertical-align: middle; - line-height: normal; -} -.l-btn-plain { - border-width: 0; - padding: 1px; -} -.l-btn-left { - display: inline-block; - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - vertical-align: top; -} -.l-btn-text { - display: inline-block; - vertical-align: top; - width: auto; - line-height: 24px; - font-size: 12px; - padding: 0; - margin: 0 4px; -} -.l-btn-icon { - display: inline-block; - width: 16px; - height: 16px; - line-height: 16px; - position: absolute; - top: 50%; - margin-top: -8px; - font-size: 1px; -} -.l-btn span span .l-btn-empty { - display: inline-block; - margin: 0; - width: 16px; - height: 24px; - font-size: 1px; - vertical-align: top; -} -.l-btn span .l-btn-icon-left { - padding: 0 0 0 20px; - background-position: left center; -} -.l-btn span .l-btn-icon-right { - padding: 0 20px 0 0; - background-position: right center; -} -.l-btn-icon-left .l-btn-text { - margin: 0 4px 0 24px; -} -.l-btn-icon-left .l-btn-icon { - left: 4px; -} -.l-btn-icon-right .l-btn-text { - margin: 0 24px 0 4px; -} -.l-btn-icon-right .l-btn-icon { - right: 4px; -} -.l-btn-icon-top .l-btn-text { - margin: 20px 4px 0 4px; -} -.l-btn-icon-top .l-btn-icon { - top: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-icon-bottom .l-btn-text { - margin: 0 4px 20px 4px; -} -.l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-left .l-btn-empty { - margin: 0 4px; - width: 16px; -} -.l-btn-plain:hover { - padding: 0; -} -.l-btn-focus { - outline: #0000FF dotted thin; -} -.l-btn-large .l-btn-text { - line-height: 40px; -} -.l-btn-large .l-btn-icon { - width: 32px; - height: 32px; - line-height: 32px; - margin-top: -16px; -} -.l-btn-large .l-btn-icon-left .l-btn-text { - margin-left: 40px; -} -.l-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.l-btn-large .l-btn-icon-top .l-btn-text { - margin-top: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-top .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-left .l-btn-empty { - margin: 0 4px; - width: 32px; -} -.l-btn { - color: #fff; - background: #777; - background-repeat: repeat-x; - border: 1px solid #555; - background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%); - background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%); - background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%); - background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0); - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn:hover { - background: #777; - color: #fff; - border: 1px solid #555; - filter: none; -} -.l-btn-plain { - background: transparent; - border-width: 0; - filter: none; -} -.l-btn-outline { - border-width: 1px; - border-color: #555; - padding: 0; -} -.l-btn-plain:hover { - background: #777; - color: #fff; - border: 1px solid #555; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn-disabled, -.l-btn-disabled:hover { - opacity: 0.5; - cursor: default; - background: #777; - color: #fff; - background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%); - background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%); - background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%); - background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0); -} -.l-btn-disabled .l-btn-text, -.l-btn-disabled .l-btn-icon { - filter: alpha(opacity=50); -} -.l-btn-plain-disabled, -.l-btn-plain-disabled:hover { - background: transparent; - filter: alpha(opacity=50); -} -.l-btn-selected, -.l-btn-selected:hover { - background: #000; - filter: none; -} -.l-btn-plain-selected, -.l-btn-plain-selected:hover { - background: #000; -} -.textbox { - position: relative; - border: 1px solid #000; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #000000; - -moz-box-shadow: 0 0 3px 0 #000; - -webkit-box-shadow: 0 0 3px 0 #000; - box-shadow: 0 0 3px 0 #000; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #666; -} -.combo-arrow { - background-color: #3d3d3d; -} -.combo-arrow-hover { - background-color: #777; -} -.combo-arrow:hover { - background-color: #777; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #777; - color: #fff; -} -.combobox-item-selected { - background-color: #0052A3; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #777; - color: #fff; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} -.layout { - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - z-index: 0; -} -.layout-panel { - position: absolute; - overflow: hidden; -} -.layout-body { - min-width: 1px; - min-height: 1px; -} -.layout-panel-east, -.layout-panel-west { - z-index: 2; -} -.layout-panel-north, -.layout-panel-south { - z-index: 3; -} -.layout-expand { - position: absolute; - padding: 0px; - font-size: 1px; - cursor: pointer; - z-index: 1; -} -.layout-expand .panel-header, -.layout-expand .panel-body { - background: transparent; - filter: none; - overflow: hidden; -} -.layout-expand .panel-header { - border-bottom-width: 0px; -} -.layout-expand .panel-body { - position: relative; -} -.layout-expand .panel-body .panel-icon { - margin-top: 0; - top: 0; - left: 50%; - margin-left: -8px; -} -.layout-expand-west .panel-header .panel-icon, -.layout-expand-east .panel-header .panel-icon { - display: none; -} -.layout-expand-title { - position: absolute; - top: 0; - left: 21px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.layout-expand-title-up { - position: absolute; - top: 0; - left: 0; - text-align: right; - padding-left: 5px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 0; -} -.layout-expand-with-icon { - top: 18px; -} -.layout-expand .panel-body-noheader .layout-expand-title, -.layout-expand .panel-body-noheader .panel-icon { - top: 5px; -} -.layout-expand .panel-body-noheader .layout-expand-with-icon { - top: 23px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - position: absolute; - font-size: 1px; - display: none; - z-index: 5; -} -.layout-split-proxy-h { - width: 5px; - cursor: e-resize; -} -.layout-split-proxy-v { - height: 5px; - cursor: n-resize; -} -.layout-mask { - position: absolute; - background: #fafafa; - filter: alpha(opacity=10); - opacity: 0.10; - z-index: 4; -} -.layout-button-up { - background: url('images/layout_arrows.png') no-repeat -16px -16px; -} -.layout-button-down { - background: url('images/layout_arrows.png') no-repeat -16px 0; -} -.layout-button-left { - background: url('images/layout_arrows.png') no-repeat 0 0; -} -.layout-button-right { - background: url('images/layout_arrows.png') no-repeat 0 -16px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - background-color: #cccccc; -} -.layout-split-north { - border-bottom: 5px solid #444; -} -.layout-split-south { - border-top: 5px solid #444; -} -.layout-split-east { - border-left: 5px solid #444; -} -.layout-split-west { - border-right: 5px solid #444; -} -.layout-expand { - background-color: #3d3d3d; -} -.layout-expand-over { - background-color: #3d3d3d; -} -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #3d3d3d url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #3d3d3d url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #777; - color: #fff; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #666; - color: #fff; - background: -webkit-linear-gradient(top,#454545 0,#666 100%); - background: -moz-linear-gradient(top,#454545 0,#666 100%); - background: -o-linear-gradient(top,#454545 0,#666 100%); - background: linear-gradient(to bottom,#454545 0,#666 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#666 0,#454545 100%); - background: -moz-linear-gradient(top,#666 0,#454545 100%); - background: -o-linear-gradient(top,#666 0,#454545 100%); - background: linear-gradient(to bottom,#666 0,#454545 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#454545 0,#666 100%); - background: -moz-linear-gradient(left,#454545 0,#666 100%); - background: -o-linear-gradient(left,#454545 0,#666 100%); - background: linear-gradient(to right,#454545 0,#666 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#666 0,#454545 100%); - background: -moz-linear-gradient(left,#666 0,#454545 100%); - background: -o-linear-gradient(left,#666 0,#454545 100%); - background: linear-gradient(to right,#666 0,#454545 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=1); -} -.tabs li a.tabs-inner { - color: #fff; - background-color: #3d3d3d; - background: -webkit-linear-gradient(top,#454545 0,#383838 100%); - background: -moz-linear-gradient(top,#454545 0,#383838 100%); - background: -o-linear-gradient(top,#454545 0,#383838 100%); - background: linear-gradient(to bottom,#454545 0,#383838 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #3d3d3d; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #000; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #777; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #666; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #666; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #666; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #666; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #0052A3; - color: #fff; - filter: none; - border-color: #000; -} -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #444; - border-right: 1px solid #777; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #000; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #666 url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #444; - background: -webkit-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); - background: -moz-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); - background: -o-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); - background: linear-gradient(to bottom,#4c4c4c 0,#3f3f3f 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c4c4c,endColorstr=#3f3f3f,GradientType=0); -} -.datagrid-cell-rownumber { - color: #fff; -} -.datagrid-resize-proxy { - background: #cccccc; -} -.datagrid-mask { - background: #000; -} -.datagrid-mask-msg { - border-color: #000; -} -.datagrid-toolbar, -.datagrid-pager { - background: #555; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #222; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #222; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #fff; - border-collapse: separate; -} -.datagrid-row-alt { - background: #555; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #777; - color: #fff; - cursor: default; -} -.datagrid-row-selected { - background: #0052A3; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #222; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #3d3d3d; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #222; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #3d3d3d; -} -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #444; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #222; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #fff; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #222; -} -.m-list li>a:hover { - background: #777; - color: #fff; -} -.m-list .m-list-group { - padding: 0 4px; -} -.pagination { - zoom: 1; -} -.pagination table { - float: left; - height: 30px; -} -.pagination td { - border: 0; -} -.pagination-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #444; - border-right: 1px solid #777; - margin: 3px 1px; -} -.pagination .pagination-num { - border-width: 1px; - border-style: solid; - margin: 0 2px; - padding: 2px; - width: 2em; - height: auto; -} -.pagination-page-list { - margin: 0px 6px; - padding: 1px 2px; - width: auto; - height: auto; - border-width: 1px; - border-style: solid; -} -.pagination-info { - float: right; - margin: 0 6px; - padding: 0; - height: 30px; - line-height: 30px; - font-size: 12px; -} -.pagination span { - font-size: 12px; -} -.pagination-link .l-btn-text { - width: 24px; - text-align: center; - margin: 0; -} -.pagination-first { - background: url('images/pagination_icons.png') no-repeat 0 center; -} -.pagination-prev { - background: url('images/pagination_icons.png') no-repeat -16px center; -} -.pagination-next { - background: url('images/pagination_icons.png') no-repeat -32px center; -} -.pagination-last { - background: url('images/pagination_icons.png') no-repeat -48px center; -} -.pagination-load { - background: url('images/pagination_icons.png') no-repeat -64px center; -} -.pagination-loading { - background: url('images/loading.gif') no-repeat center center; -} -.pagination-page-list, -.pagination .pagination-num { - border-color: #000; -} -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #ffffff; -} -.calendar-day { - color: #fff; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #000; -} -.calendar { - border-color: #000; -} -.calendar-header { - background: #3d3d3d; -} -.calendar-body, -.calendar-menu { - background: #666; -} -.calendar-body th { - background: #555; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #777; - color: #fff; -} -.calendar-hover { - border: 1px solid #555; - padding: 0; -} -.calendar-selected { - background-color: #0052A3; - color: #fff; - border: 1px solid #00458a; - padding: 0; -} -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #555; -} -.datebox-button a { - color: #fff; -} -.spinner-arrow { - background-color: #3d3d3d; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #fff; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #777; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #777; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #3d3d3d; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #000; -} -.progressbar-text { - color: #fff; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #0052A3; - color: #fff; -} -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #3d3d3d; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #000; - background: #3d3d3d; -} -.slider-rule span { - border-color: #000; -} -.slider-rulelabel span { - color: #fff; -} -.menu { - position: absolute; - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.menu-inline { - position: relative; -} -.menu-item { - position: relative; - margin: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.menu-text { - height: 20px; - line-height: 20px; - float: left; - padding-left: 28px; -} -.menu-icon { - position: absolute; - width: 16px; - height: 16px; - left: 2px; - top: 50%; - margin-top: -8px; -} -.menu-rightarrow { - position: absolute; - width: 16px; - height: 16px; - right: 0; - top: 50%; - margin-top: -8px; -} -.menu-line { - position: absolute; - left: 26px; - top: 0; - height: 2000px; - font-size: 1px; -} -.menu-sep { - margin: 3px 0px 3px 25px; - font-size: 1px; -} -.menu-noline .menu-line { - display: none; -} -.menu-noline .menu-sep { - margin-left: 0; - margin-right: 0; -} -.menu-active { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.menu-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -.menu-text, -.menu-text span { - font-size: 12px; -} -.menu-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #777; - -moz-box-shadow: 2px 2px 3px #787878; - -webkit-box-shadow: 2px 2px 3px #787878; - box-shadow: 2px 2px 3px #787878; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.menu-rightarrow { - background: url('images/menu_arrows.png') no-repeat -32px center; -} -.menu-line { - border-left: 1px solid #444; - border-right: 1px solid #777; -} -.menu-sep { - border-top: 1px solid #444; - border-bottom: 1px solid #777; -} -.menu { - background-color: #666; - border-color: #444; - color: #fff; -} -.menu-content { - background: #666; -} -.menu-item { - border-color: transparent; - _border-color: #666; -} -.menu-active { - border-color: #555; - color: #fff; - background: #777; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #fff; -} -.m-btn-downarrow, -.s-btn-downarrow { - display: inline-block; - position: absolute; - width: 16px; - height: 16px; - font-size: 1px; - right: 0; - top: 50%; - margin-top: -8px; -} -.m-btn-active, -.s-btn-active { - background: #777; - color: #fff; - border: 1px solid #555; - filter: none; -} -.m-btn-plain-active, -.s-btn-plain-active { - background: transparent; - padding: 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.m-btn .l-btn-left .l-btn-text { - margin-right: 20px; -} -.m-btn .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.m-btn .l-btn-icon-right .l-btn-icon { - right: 20px; -} -.m-btn .l-btn-icon-top .l-btn-text { - margin-right: 4px; - margin-bottom: 14px; -} -.m-btn .l-btn-icon-bottom .l-btn-text { - margin-right: 4px; - margin-bottom: 34px; -} -.m-btn .l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 20px; -} -.m-btn .l-btn-icon-top .m-btn-downarrow, -.m-btn .l-btn-icon-bottom .m-btn-downarrow { - top: auto; - bottom: 0px; - left: 50%; - margin-left: -8px; -} -.m-btn-line { - display: inline-block; - position: absolute; - font-size: 1px; - display: none; -} -.m-btn .l-btn-left .m-btn-line { - right: 0; - width: 16px; - height: 500px; - border-style: solid; - border-color: #cccccc; - border-width: 0 0 0 1px; -} -.m-btn .l-btn-icon-top .m-btn-line, -.m-btn .l-btn-icon-bottom .m-btn-line { - left: 0; - bottom: 0; - width: 500px; - height: 16px; - border-width: 1px 0 0 0; -} -.m-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 56px; -} -.m-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 50px; -} -.m-btn-downarrow, -.s-btn-downarrow { - background: url('images/menu_arrows.png') no-repeat 0 center; -} -.m-btn-plain-active, -.s-btn-plain-active { - border-color: #555; - background-color: #777; - color: #fff; -} -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #cccccc; - border-width: 0 0 0 1px; -} -.messager-body { - padding: 10px 10px 30px 10px; - overflow: auto; -} -.messager-button { - text-align: center; - padding: 5px; -} -.messager-button .l-btn { - width: 70px; -} -.messager-icon { - float: left; - width: 32px; - height: 32px; - margin: 0 10px 10px 0; -} -.messager-error { - background: url('images/messager_icons.png') no-repeat scroll -64px 0; -} -.messager-info { - background: url('images/messager_icons.png') no-repeat scroll 0 0; -} -.messager-question { - background: url('images/messager_icons.png') no-repeat scroll -32px 0; -} -.messager-warning { - background: url('images/messager_icons.png') no-repeat scroll -96px 0; -} -.messager-progress { - padding: 10px; -} -.messager-p-msg { - margin-bottom: 5px; -} -.messager-body .messager-input { - width: 100%; - padding: 4px 0; - outline-style: none; - border: 1px solid #000; -} -.window-thinborder .messager-button { - padding-bottom: 8px; -} -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #000; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #666; - color: #fff; - border-color: #000; -} -.tree-node-hover { - background: #777; - color: #fff; -} -.tree-node-selected { - background: #0052A3; - color: #fff; -} -.tree-node-hidden { - display: none; -} -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #666; - border-color: #000; - color: #fff; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #000; -} -.tooltip-right .tooltip-arrow { - border-right-color: #666; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #000; -} -.tooltip-left .tooltip-arrow { - border-left-color: #666; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #000; -} -.tooltip-top .tooltip-arrow { - border-top-color: #666; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #000; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #666; -} -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #555; - border: 1px solid #555; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #0052A3; - color: #fff; -} -.switchbutton-off { - background-color: #666; - color: #fff; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #666; - color: #fff; - border: 1px solid #555; - -moz-box-shadow: 0 0 3px 0 #555; - -webkit-box-shadow: 0 0 3px 0 #555; - box-shadow: 0 0 3px 0 #555; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/black/filebox.css b/assets/js/easy-ui/themes/black/filebox.css deleted file mode 100644 index c6bac66315..0000000000 --- a/assets/js/easy-ui/themes/black/filebox.css +++ /dev/null @@ -1,20 +0,0 @@ -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/black/images/accordion_arrows.png b/assets/js/easy-ui/themes/black/images/accordion_arrows.png deleted file mode 100755 index 45fd44aa30476e107428feeea74273a354d3b003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel%uDMV@SoVN1z5L3B> xDW~hhNx=}0EonJY9@lzK3(R79rLjPWf#H~1{zPk!fAK(V44$rjF6*2Ung9evL?JRtAPgomjiGH|9{f$n(B`$j zEeb&pg!EKZW!#K$4@xNm$yT6c41rc&wh}>_*7}p71!8&8673tn-QQiFh646*YwHT+ z)EV#dB}QIviTL0tB!=YS+5%Rf3nh>uG`~OIR&I9Pb&1#X>AvnQFNH)(9OKtKv|Z?jXgA8=g#}$o8PwWf~s)v4TOWbIh-FayvCIQ*!i4(A|Z*a`pRGU y`z_2`-mf|ief_$wXW7b|3Y(^xL#4%pFkRlNzMe3nx0Htf00005OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$f3kcwMx!yWk;1b9CG_kXOx zmzFK*Ssi^NN-27((w?4M8@u`^_qP=9nfy4m{lwb6;U^wS@qDtp9?C45@HGEwayQ3S z%Ua=ZSB3W+c`gDw6;3c4*f@AGFEUxQKH4x2D*a5)78&qol`;+03qN((f|Me diff --git a/assets/js/easy-ui/themes/black/images/linkbutton_bg.png b/assets/js/easy-ui/themes/black/images/linkbutton_bg.png deleted file mode 100755 index fc66bd2cd24047b8377342365a1df3846327ecde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1274 zcmVc6j2;SWMDuL>F^vlqEUI{oOgO!xNf*11TukM z6kTZ3V2qd3<~<$H&Lrt?SpXUxF5Zb^}(={r!EHE+$QMdH|XZ zSYbMyc0tQc3qbP$tG{U_Jyg>I(0srOscEGU?-T)4AzuS$_2J>6`+BJ50YDY<^>2vV z+uI880P2ui(hyHiPrK$)CkbHg=kD&V3^8pD z0v3QOB&8eT@87?rgaGPrb#+ySxU;jP=nkL`nZ_{0e*BD+1Tc5b&d$oLo}8R$90gF1 z^ij>~#>R%HIRNUB_kgpQ+Lg!80Gbb2saY8>1EBeUm7A3TegK*dSciv)Wqp0!h-3im z1+1f^qq4iZ+ZEMUS63~e0I+zh`2rwd0l@!F(!7sM%_`|&0+*B!z{1(u+A9BIU&~T- z2he=L>dmc7TLXZFkeTeCHMcE|qX51{z>0ZC=xGjss*FaXGOMX+dHf8Z8hL6ntGQ_z zF9V<&dwY9jh`D7czyqj4g3S=~)zFA!0980RI4DC*Ez1%L09D8%=OHF&S@Q*;3bRfe zeL2-ZzyeT(Av4`$>R3`j096>WH7BOELD3yR70%Dk%Mk4)1W=73OH{L_UgIc$YFu7k zmRaq`&NxK?Rk*skDzlhL4IV!OsLJ*Ab@{BRT^TO}pgQC6xO~R6G8o_oU?C)>`xlc2 zriH~zU-;g$PyPA_&X!OBSU6SIeB~eKNAhF&(fs&F|1n9<+Yj^2T+4Dj%UFjr zZ%rnX^7Qmn0ANwP308gILtaQfK0Z1j0Br`Wq<=~Ka+?BxW&>7kRtZ+q>C~wJXg6S` zW|cJ1%?d#C0V@Ue)T{uY>425ig?tTsczEc(0+M8_c7^t|!sm-1Nw(}#nnLr?FgGlc zY}ut0+w(d)Uk6FDWtY;*aCdjteIX>tmhA#o+8PqHNU~+SlrTfyKRaNHBx~Ch-FJ3& z%B(Y&NwStp{rH$6Yj{YqhR=Gk~Mtw_&K$#yeTBf z7JV~bCN(VwL$c|B^>Topn-X{+7;S!yV~2^ zBgv-iMkME}U;-COwrsbABDvwg!2wA&ZMWttf5^jTl5E*7V41=|@=Hu>NJ^O8(7b4p z&ChgC(LF5>Md#{+4LgS{%KA|H(Xv`l4P^KdiBKB*_;1&m|Q7!{|O$ k%vVK{T!hwqk^D0L0mO==@4IV9lK=n!07*qoM6N<$f|Ge;n*aa+ diff --git a/assets/js/easy-ui/themes/black/images/loading.gif b/assets/js/easy-ui/themes/black/images/loading.gif deleted file mode 100755 index 68f01d04813c1f622810864a3aaa04b4a17ac8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 diff --git a/assets/js/easy-ui/themes/black/images/menu_arrows.png b/assets/js/easy-ui/themes/black/images/menu_arrows.png deleted file mode 100755 index 2a984941d6590c78d67ee68d2087d8cc88efbac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQof!pjv*Dd-d;V(%b>u);`l3H z>g53sy@tf+`c*Dhco^6|8Eg#8WENqsU-wu%RB=*I5D$X7F_Nb6Mw<&;$S;RV&B< diff --git a/assets/js/easy-ui/themes/black/images/messager_icons.png b/assets/js/easy-ui/themes/black/images/messager_icons.png deleted file mode 100755 index 62c18c135860351063ebaabe8c0f4df7664b8f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6116 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 lGy-mR diff --git a/assets/js/easy-ui/themes/black/images/panel_tools.png b/assets/js/easy-ui/themes/black/images/panel_tools.png deleted file mode 100755 index f97761eb393def3b5f61774142413e740fe8fe8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QuUrLjv*Dd-p+93Yfuni{`r6T z$48CLf{EOzXU|M@xy0GMavBpu(5ti8zb3QZ+Tfp^siO37?WI*8%sM?7u5w1XttgAw z*Z5axHOr-aZj1~Mw;UHx3vIVCg!0FXpSG5`Po diff --git a/assets/js/easy-ui/themes/black/images/passwordbox_close.png b/assets/js/easy-ui/themes/black/images/passwordbox_close.png deleted file mode 100644 index 276b57974284d1449250e362644dd7416632d92c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`F`h1tAr-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2Hlg>#j0uWN8C(aFPJB{e^6h1c5$jHyQsD5--fSz=3o~iS wnLdu+*z}wOVj6h@O#h^}NFFlaV$)<`u-+3C6wY^M3(y`0Pgg&ebxsLQ04X#uG5`Po diff --git a/assets/js/easy-ui/themes/black/images/passwordbox_open.png b/assets/js/easy-ui/themes/black/images/passwordbox_open.png deleted file mode 100644 index 0f25d535e05b22b406fd72647611aace9cfa6249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>7Fi*Ar-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2rmQ?!Qz1HW#so#C46Xx7Cq5}K`Svo!h;^q;DRB5^Z?=`` zg<12Qetm(ByO<;&a5^L{7TnL>!KiVsAxlibJl4>NC!c|#Jtt+3rSZgWpp^`su6{1- HoD!M<3i~r2 diff --git a/assets/js/easy-ui/themes/black/images/searchbox_button.png b/assets/js/easy-ui/themes/black/images/searchbox_button.png deleted file mode 100755 index 6dd1931589b453f6cc9772fd1851d8705d6b6631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz diff --git a/assets/js/easy-ui/themes/black/images/spinner_arrows.png b/assets/js/easy-ui/themes/black/images/spinner_arrows.png deleted file mode 100644 index 349d7d9d1dd5757fe673c74779ca4397b3ac9880..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQo)`sjv*Dd-cGgTVld!f`TKvl zx$i261Imkz%njSa<|ydo5x!wz!%F5U-;Ot$9v8}1XAs{bw8eCRinje8hmeGw4b#=% p?40+0pF;`bK1VJIy@m-jV#fsL6&$#pdj@DcgQu&X%Q~loCIE{>Fhc+U diff --git a/assets/js/easy-ui/themes/black/images/tabs_icons.png b/assets/js/easy-ui/themes/black/images/tabs_icons.png deleted file mode 100755 index 732b1237a14cf6c525dee8646f322d5603664866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq{2O2978H@B_~L*E^a7$U@!3C zaj-Z4S(*MEORM>}ezCPaUb%ArQw1m64&Nzopr0N{TzyZ`_I diff --git a/assets/js/easy-ui/themes/black/images/tagbox_icons.png b/assets/js/easy-ui/themes/black/images/tagbox_icons.png deleted file mode 100644 index faddd10cab63488000e766ca3cb10a4a21671c10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#i#2V@SoV($fFg z6O)c!JXo)x5GJ#nd4ld?HMbLtC#EF|E8h}a647_oX_D^oryN0xCn=p~zr)BZ#mYR7 hgWX2DuSt-dVWQ=IMMbkYnLu+HJYD@<);T3K0RXNJC2Rly diff --git a/assets/js/easy-ui/themes/black/images/tree_icons.png b/assets/js/easy-ui/themes/black/images/tree_icons.png deleted file mode 100755 index 2b4fd2025c7588c84df27d89466b470e273f5c06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3086 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 diff --git a/assets/js/easy-ui/themes/black/images/validatebox_warning.png b/assets/js/easy-ui/themes/black/images/validatebox_warning.png deleted file mode 100755 index 2b3d4f05babf3f82b146350e96570fac02075de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} diff --git a/assets/js/easy-ui/themes/black/passwordbox.css b/assets/js/easy-ui/themes/black/passwordbox.css deleted file mode 100644 index 92c9ce586b..0000000000 --- a/assets/js/easy-ui/themes/black/passwordbox.css +++ /dev/null @@ -1,6 +0,0 @@ -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} diff --git a/assets/js/easy-ui/themes/black/progressbar.css b/assets/js/easy-ui/themes/black/progressbar.css deleted file mode 100755 index 79fcf624b9..0000000000 --- a/assets/js/easy-ui/themes/black/progressbar.css +++ /dev/null @@ -1,32 +0,0 @@ -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #000; -} -.progressbar-text { - color: #fff; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #0052A3; - color: #fff; -} diff --git a/assets/js/easy-ui/themes/black/propertygrid.css b/assets/js/easy-ui/themes/black/propertygrid.css deleted file mode 100755 index d71ce7c8b5..0000000000 --- a/assets/js/easy-ui/themes/black/propertygrid.css +++ /dev/null @@ -1,28 +0,0 @@ -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #222; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #3d3d3d; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #222; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #3d3d3d; -} diff --git a/assets/js/easy-ui/themes/black/searchbox.css b/assets/js/easy-ui/themes/black/searchbox.css deleted file mode 100644 index 01f6697429..0000000000 --- a/assets/js/easy-ui/themes/black/searchbox.css +++ /dev/null @@ -1,61 +0,0 @@ -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #3d3d3d; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} diff --git a/assets/js/easy-ui/themes/black/slider.css b/assets/js/easy-ui/themes/black/slider.css deleted file mode 100755 index cd66bf5497..0000000000 --- a/assets/js/easy-ui/themes/black/slider.css +++ /dev/null @@ -1,101 +0,0 @@ -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #000; - background: #3d3d3d; -} -.slider-rule span { - border-color: #000; -} -.slider-rulelabel span { - color: #fff; -} diff --git a/assets/js/easy-ui/themes/black/spinner.css b/assets/js/easy-ui/themes/black/spinner.css deleted file mode 100644 index 6686ca03fa..0000000000 --- a/assets/js/easy-ui/themes/black/spinner.css +++ /dev/null @@ -1,58 +0,0 @@ -.spinner-arrow { - background-color: #3d3d3d; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #fff; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #777; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #777; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #3d3d3d; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} diff --git a/assets/js/easy-ui/themes/black/splitbutton.css b/assets/js/easy-ui/themes/black/splitbutton.css deleted file mode 100755 index b42e3963fa..0000000000 --- a/assets/js/easy-ui/themes/black/splitbutton.css +++ /dev/null @@ -1,12 +0,0 @@ -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #cccccc; - border-width: 0 0 0 1px; -} diff --git a/assets/js/easy-ui/themes/black/switchbutton.css b/assets/js/easy-ui/themes/black/switchbutton.css deleted file mode 100644 index b1b5714e94..0000000000 --- a/assets/js/easy-ui/themes/black/switchbutton.css +++ /dev/null @@ -1,77 +0,0 @@ -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #555; - border: 1px solid #555; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #0052A3; - color: #fff; -} -.switchbutton-off { - background-color: #666; - color: #fff; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #666; - color: #fff; - border: 1px solid #555; - -moz-box-shadow: 0 0 3px 0 #555; - -webkit-box-shadow: 0 0 3px 0 #555; - box-shadow: 0 0 3px 0 #555; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/black/tabs.css b/assets/js/easy-ui/themes/black/tabs.css deleted file mode 100644 index 4ab73de61d..0000000000 --- a/assets/js/easy-ui/themes/black/tabs.css +++ /dev/null @@ -1,413 +0,0 @@ -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #3d3d3d url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #3d3d3d url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #777; - color: #fff; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #666; - color: #fff; - background: -webkit-linear-gradient(top,#454545 0,#666 100%); - background: -moz-linear-gradient(top,#454545 0,#666 100%); - background: -o-linear-gradient(top,#454545 0,#666 100%); - background: linear-gradient(to bottom,#454545 0,#666 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#666 0,#454545 100%); - background: -moz-linear-gradient(top,#666 0,#454545 100%); - background: -o-linear-gradient(top,#666 0,#454545 100%); - background: linear-gradient(to bottom,#666 0,#454545 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#454545 0,#666 100%); - background: -moz-linear-gradient(left,#454545 0,#666 100%); - background: -o-linear-gradient(left,#454545 0,#666 100%); - background: linear-gradient(to right,#454545 0,#666 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#666 0,#454545 100%); - background: -moz-linear-gradient(left,#666 0,#454545 100%); - background: -o-linear-gradient(left,#666 0,#454545 100%); - background: linear-gradient(to right,#666 0,#454545 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=1); -} -.tabs li a.tabs-inner { - color: #fff; - background-color: #3d3d3d; - background: -webkit-linear-gradient(top,#454545 0,#383838 100%); - background: -moz-linear-gradient(top,#454545 0,#383838 100%); - background: -o-linear-gradient(top,#454545 0,#383838 100%); - background: linear-gradient(to bottom,#454545 0,#383838 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #3d3d3d; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #000; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #777; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #666; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #666; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #666; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #666; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #0052A3; - color: #fff; - filter: none; - border-color: #000; -} diff --git a/assets/js/easy-ui/themes/black/tagbox.css b/assets/js/easy-ui/themes/black/tagbox.css deleted file mode 100644 index e08ec87b4e..0000000000 --- a/assets/js/easy-ui/themes/black/tagbox.css +++ /dev/null @@ -1,44 +0,0 @@ -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #777; - color: #fff; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} diff --git a/assets/js/easy-ui/themes/black/textbox.css b/assets/js/easy-ui/themes/black/textbox.css deleted file mode 100644 index f93ad88ff3..0000000000 --- a/assets/js/easy-ui/themes/black/textbox.css +++ /dev/null @@ -1,139 +0,0 @@ -.textbox { - position: relative; - border: 1px solid #000; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #000000; - -moz-box-shadow: 0 0 3px 0 #000; - -webkit-box-shadow: 0 0 3px 0 #000; - box-shadow: 0 0 3px 0 #000; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} diff --git a/assets/js/easy-ui/themes/black/tooltip.css b/assets/js/easy-ui/themes/black/tooltip.css deleted file mode 100644 index 391fd95aa3..0000000000 --- a/assets/js/easy-ui/themes/black/tooltip.css +++ /dev/null @@ -1,103 +0,0 @@ -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #666; - border-color: #000; - color: #fff; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #000; -} -.tooltip-right .tooltip-arrow { - border-right-color: #666; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #000; -} -.tooltip-left .tooltip-arrow { - border-left-color: #666; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #000; -} -.tooltip-top .tooltip-arrow { - border-top-color: #666; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #000; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #666; -} diff --git a/assets/js/easy-ui/themes/black/tree.css b/assets/js/easy-ui/themes/black/tree.css deleted file mode 100644 index 88dfe0bded..0000000000 --- a/assets/js/easy-ui/themes/black/tree.css +++ /dev/null @@ -1,161 +0,0 @@ -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #000; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #666; - color: #fff; - border-color: #000; -} -.tree-node-hover { - background: #777; - color: #fff; -} -.tree-node-selected { - background: #0052A3; - color: #fff; -} -.tree-node-hidden { - display: none; -} diff --git a/assets/js/easy-ui/themes/black/validatebox.css b/assets/js/easy-ui/themes/black/validatebox.css deleted file mode 100755 index 1fc3ad64e4..0000000000 --- a/assets/js/easy-ui/themes/black/validatebox.css +++ /dev/null @@ -1,5 +0,0 @@ -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} diff --git a/assets/js/easy-ui/themes/black/window.css b/assets/js/easy-ui/themes/black/window.css deleted file mode 100644 index 37de72d24f..0000000000 --- a/assets/js/easy-ui/themes/black/window.css +++ /dev/null @@ -1,183 +0,0 @@ -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #777; - -moz-box-shadow: 2px 2px 3px #787878; - -webkit-box-shadow: 2px 2px 3px #787878; - box-shadow: 2px 2px 3px #787878; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #000; -} -.window { - background-color: #3d3d3d; - background: -webkit-linear-gradient(top,#454545 0,#383838 20%); - background: -moz-linear-gradient(top,#454545 0,#383838 20%); - background: -o-linear-gradient(top,#454545 0,#383838 20%); - background: linear-gradient(to bottom,#454545 0,#383838 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); -} -.window-proxy { - border: 1px dashed #000; -} -.window-proxy-mask, -.window-mask { - background: #000; -} -.window .panel-footer { - border: 1px solid #000; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} diff --git a/assets/js/easy-ui/themes/gray/accordion.css b/assets/js/easy-ui/themes/gray/accordion.css deleted file mode 100644 index 3226cb381a..0000000000 --- a/assets/js/easy-ui/themes/gray/accordion.css +++ /dev/null @@ -1,89 +0,0 @@ -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #D3D3D3; -} -.accordion .accordion-header { - background: #f3f3f3; - filter: none; -} -.accordion .accordion-header-selected { - background: #0092DC; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #f3f3f3; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #D3D3D3; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #f3f3f3; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #D3D3D3; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #f3f3f3; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #D3D3D3; -} diff --git a/assets/js/easy-ui/themes/gray/calendar.css b/assets/js/easy-ui/themes/gray/calendar.css deleted file mode 100644 index a0204720e2..0000000000 --- a/assets/js/easy-ui/themes/gray/calendar.css +++ /dev/null @@ -1,202 +0,0 @@ -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #4d4d4d; -} -.calendar-day { - color: #000000; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #D3D3D3; -} -.calendar { - border-color: #D3D3D3; -} -.calendar-header { - background: #f3f3f3; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #fafafa; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #e2e2e2; - color: #000000; -} -.calendar-hover { - border: 1px solid #ccc; - padding: 0; -} -.calendar-selected { - background-color: #0092DC; - color: #fff; - border: 1px solid #0070a9; - padding: 0; -} diff --git a/assets/js/easy-ui/themes/gray/combo.css b/assets/js/easy-ui/themes/gray/combo.css deleted file mode 100644 index 6ebdf5ee79..0000000000 --- a/assets/js/easy-ui/themes/gray/combo.css +++ /dev/null @@ -1,35 +0,0 @@ -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #f3f3f3; -} -.combo-arrow-hover { - background-color: #e2e2e2; -} -.combo-arrow:hover { - background-color: #e2e2e2; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/gray/combobox.css b/assets/js/easy-ui/themes/gray/combobox.css deleted file mode 100644 index 0f7b5afab7..0000000000 --- a/assets/js/easy-ui/themes/gray/combobox.css +++ /dev/null @@ -1,39 +0,0 @@ -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #e2e2e2; - color: #000000; -} -.combobox-item-selected { - background-color: #0092DC; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} diff --git a/assets/js/easy-ui/themes/gray/datagrid.css b/assets/js/easy-ui/themes/gray/datagrid.css deleted file mode 100644 index 737faf7376..0000000000 --- a/assets/js/easy-ui/themes/gray/datagrid.css +++ /dev/null @@ -1,288 +0,0 @@ -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #D3D3D3; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #fafafa; - background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); - background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); - background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); - background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0); -} -.datagrid-cell-rownumber { - color: #000000; -} -.datagrid-resize-proxy { - background: #bfbfbf; -} -.datagrid-mask { - background: #ccc; -} -.datagrid-mask-msg { - border-color: #D3D3D3; -} -.datagrid-toolbar, -.datagrid-pager { - background: #fafafa; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #ddd; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ccc; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #000000; - border-collapse: separate; -} -.datagrid-row-alt { - background: #fafafa; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #e2e2e2; - color: #000000; - cursor: default; -} -.datagrid-row-selected { - background: #0092DC; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} diff --git a/assets/js/easy-ui/themes/gray/datalist.css b/assets/js/easy-ui/themes/gray/datalist.css deleted file mode 100644 index de149ef051..0000000000 --- a/assets/js/easy-ui/themes/gray/datalist.css +++ /dev/null @@ -1,95 +0,0 @@ -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #fafafa; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #000000; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.m-list li>a:hover { - background: #e2e2e2; - color: #000000; -} -.m-list .m-list-group { - padding: 0 4px; -} diff --git a/assets/js/easy-ui/themes/gray/datebox.css b/assets/js/easy-ui/themes/gray/datebox.css deleted file mode 100644 index f6163757d2..0000000000 --- a/assets/js/easy-ui/themes/gray/datebox.css +++ /dev/null @@ -1,36 +0,0 @@ -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #fafafa; -} -.datebox-button a { - color: #444; -} diff --git a/assets/js/easy-ui/themes/gray/dialog.css b/assets/js/easy-ui/themes/gray/dialog.css deleted file mode 100644 index 2850ca1dc6..0000000000 --- a/assets/js/easy-ui/themes/gray/dialog.css +++ /dev/null @@ -1,47 +0,0 @@ -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #fafafa; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #D3D3D3 #D3D3D3 #ddd #D3D3D3; -} -.dialog-button { - border-color: #ddd #D3D3D3 #D3D3D3 #D3D3D3; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #fafafa; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} diff --git a/assets/js/easy-ui/themes/gray/easyui.css b/assets/js/easy-ui/themes/gray/easyui.css deleted file mode 100644 index 0779449352..0000000000 --- a/assets/js/easy-ui/themes/gray/easyui.css +++ /dev/null @@ -1,3220 +0,0 @@ -.panel { - overflow: hidden; - text-align: left; - margin: 0; - border: 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.panel-header, -.panel-body { - border-width: 1px; - border-style: solid; -} -.panel-header { - padding: 5px; - position: relative; -} -.panel-title { - background: url('images/blank.gif') no-repeat; -} -.panel-header-noborder { - border-width: 0 0 1px 0; -} -.panel-body { - overflow: auto; - border-top-width: 0; - padding: 0; -} -.panel-body-noheader { - border-top-width: 1px; -} -.panel-body-noborder { - border-width: 0px; -} -.panel-body-nobottom { - border-bottom-width: 0; -} -.panel-with-icon { - padding-left: 18px; -} -.panel-icon, -.panel-tool { - position: absolute; - top: 50%; - margin-top: -8px; - height: 16px; - overflow: hidden; -} -.panel-icon { - left: 5px; - width: 16px; -} -.panel-tool { - right: 5px; - width: auto; -} -.panel-tool a { - display: inline-block; - width: 16px; - height: 16px; - opacity: 0.6; - filter: alpha(opacity=60); - margin: 0 0 0 2px; - vertical-align: top; -} -.panel-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - background-color: #e2e2e2; - -moz-border-radius: 3px 3px 3px 3px; - -webkit-border-radius: 3px 3px 3px 3px; - border-radius: 3px 3px 3px 3px; -} -.panel-loading { - padding: 11px 0px 10px 30px; -} -.panel-noscroll { - overflow: hidden; -} -.panel-fit, -.panel-fit body { - height: 100%; - margin: 0; - padding: 0; - border: 0; - overflow: hidden; -} -.panel-loading { - background: url('images/loading.gif') no-repeat 10px 10px; -} -.panel-tool-close { - background: url('images/panel_tools.png') no-repeat -16px 0px; -} -.panel-tool-min { - background: url('images/panel_tools.png') no-repeat 0px 0px; -} -.panel-tool-max { - background: url('images/panel_tools.png') no-repeat 0px -16px; -} -.panel-tool-restore { - background: url('images/panel_tools.png') no-repeat -16px -16px; -} -.panel-tool-collapse { - background: url('images/panel_tools.png') no-repeat -32px 0; -} -.panel-tool-expand { - background: url('images/panel_tools.png') no-repeat -32px -16px; -} -.panel-header, -.panel-body { - border-color: #D3D3D3; -} -.panel-header { - background-color: #f3f3f3; - background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); -} -.panel-body { - background-color: #ffffff; - color: #000000; - font-size: 12px; -} -.panel-title { - font-size: 12px; - font-weight: bold; - color: #575765; - height: 16px; - line-height: 16px; -} -.panel-footer { - border: 1px solid #D3D3D3; - overflow: hidden; - background: #fafafa; -} -.panel-footer-noborder { - border-width: 1px 0 0 0; -} -.panel-hleft, -.panel-hright { - position: relative; -} -.panel-hleft>.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #D3D3D3; -} -.accordion .accordion-header { - background: #f3f3f3; - filter: none; -} -.accordion .accordion-header-selected { - background: #0092DC; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #f3f3f3; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #D3D3D3; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #f3f3f3; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #D3D3D3; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #f3f3f3; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #D3D3D3; -} -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #D3D3D3; -} -.window { - background-color: #f3f3f3; - background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); - background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); - background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); - background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); -} -.window-proxy { - border: 1px dashed #D3D3D3; -} -.window-proxy-mask, -.window-mask { - background: #ccc; -} -.window .panel-footer { - border: 1px solid #D3D3D3; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #fafafa; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #D3D3D3 #D3D3D3 #ddd #D3D3D3; -} -.dialog-button { - border-color: #ddd #D3D3D3 #D3D3D3 #D3D3D3; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #fafafa; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} -.l-btn { - text-decoration: none; - display: inline-block; - overflow: hidden; - margin: 0; - padding: 0; - cursor: pointer; - outline: none; - text-align: center; - vertical-align: middle; - line-height: normal; -} -.l-btn-plain { - border-width: 0; - padding: 1px; -} -.l-btn-left { - display: inline-block; - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - vertical-align: top; -} -.l-btn-text { - display: inline-block; - vertical-align: top; - width: auto; - line-height: 24px; - font-size: 12px; - padding: 0; - margin: 0 4px; -} -.l-btn-icon { - display: inline-block; - width: 16px; - height: 16px; - line-height: 16px; - position: absolute; - top: 50%; - margin-top: -8px; - font-size: 1px; -} -.l-btn span span .l-btn-empty { - display: inline-block; - margin: 0; - width: 16px; - height: 24px; - font-size: 1px; - vertical-align: top; -} -.l-btn span .l-btn-icon-left { - padding: 0 0 0 20px; - background-position: left center; -} -.l-btn span .l-btn-icon-right { - padding: 0 20px 0 0; - background-position: right center; -} -.l-btn-icon-left .l-btn-text { - margin: 0 4px 0 24px; -} -.l-btn-icon-left .l-btn-icon { - left: 4px; -} -.l-btn-icon-right .l-btn-text { - margin: 0 24px 0 4px; -} -.l-btn-icon-right .l-btn-icon { - right: 4px; -} -.l-btn-icon-top .l-btn-text { - margin: 20px 4px 0 4px; -} -.l-btn-icon-top .l-btn-icon { - top: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-icon-bottom .l-btn-text { - margin: 0 4px 20px 4px; -} -.l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-left .l-btn-empty { - margin: 0 4px; - width: 16px; -} -.l-btn-plain:hover { - padding: 0; -} -.l-btn-focus { - outline: #0000FF dotted thin; -} -.l-btn-large .l-btn-text { - line-height: 40px; -} -.l-btn-large .l-btn-icon { - width: 32px; - height: 32px; - line-height: 32px; - margin-top: -16px; -} -.l-btn-large .l-btn-icon-left .l-btn-text { - margin-left: 40px; -} -.l-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.l-btn-large .l-btn-icon-top .l-btn-text { - margin-top: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-top .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-left .l-btn-empty { - margin: 0 4px; - width: 32px; -} -.l-btn { - color: #444; - background: #fafafa; - background-repeat: repeat-x; - border: 1px solid #bbb; - background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn:hover { - background: #e2e2e2; - color: #000000; - border: 1px solid #ccc; - filter: none; -} -.l-btn-plain { - background: transparent; - border-width: 0; - filter: none; -} -.l-btn-outline { - border-width: 1px; - border-color: #ccc; - padding: 0; -} -.l-btn-plain:hover { - background: #e2e2e2; - color: #000000; - border: 1px solid #ccc; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn-disabled, -.l-btn-disabled:hover { - opacity: 0.5; - cursor: default; - background: #fafafa; - color: #444; - background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); -} -.l-btn-disabled .l-btn-text, -.l-btn-disabled .l-btn-icon { - filter: alpha(opacity=50); -} -.l-btn-plain-disabled, -.l-btn-plain-disabled:hover { - background: transparent; - filter: alpha(opacity=50); -} -.l-btn-selected, -.l-btn-selected:hover { - background: #ddd; - filter: none; -} -.l-btn-plain-selected, -.l-btn-plain-selected:hover { - background: #ddd; -} -.textbox { - position: relative; - border: 1px solid #D3D3D3; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #bababa; - -moz-box-shadow: 0 0 3px 0 #D3D3D3; - -webkit-box-shadow: 0 0 3px 0 #D3D3D3; - box-shadow: 0 0 3px 0 #D3D3D3; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #f3f3f3; -} -.combo-arrow-hover { - background-color: #e2e2e2; -} -.combo-arrow:hover { - background-color: #e2e2e2; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #e2e2e2; - color: #000000; -} -.combobox-item-selected { - background-color: #0092DC; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #e2e2e2; - color: #000000; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} -.layout { - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - z-index: 0; -} -.layout-panel { - position: absolute; - overflow: hidden; -} -.layout-body { - min-width: 1px; - min-height: 1px; -} -.layout-panel-east, -.layout-panel-west { - z-index: 2; -} -.layout-panel-north, -.layout-panel-south { - z-index: 3; -} -.layout-expand { - position: absolute; - padding: 0px; - font-size: 1px; - cursor: pointer; - z-index: 1; -} -.layout-expand .panel-header, -.layout-expand .panel-body { - background: transparent; - filter: none; - overflow: hidden; -} -.layout-expand .panel-header { - border-bottom-width: 0px; -} -.layout-expand .panel-body { - position: relative; -} -.layout-expand .panel-body .panel-icon { - margin-top: 0; - top: 0; - left: 50%; - margin-left: -8px; -} -.layout-expand-west .panel-header .panel-icon, -.layout-expand-east .panel-header .panel-icon { - display: none; -} -.layout-expand-title { - position: absolute; - top: 0; - left: 21px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.layout-expand-title-up { - position: absolute; - top: 0; - left: 0; - text-align: right; - padding-left: 5px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 0; -} -.layout-expand-with-icon { - top: 18px; -} -.layout-expand .panel-body-noheader .layout-expand-title, -.layout-expand .panel-body-noheader .panel-icon { - top: 5px; -} -.layout-expand .panel-body-noheader .layout-expand-with-icon { - top: 23px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - position: absolute; - font-size: 1px; - display: none; - z-index: 5; -} -.layout-split-proxy-h { - width: 5px; - cursor: e-resize; -} -.layout-split-proxy-v { - height: 5px; - cursor: n-resize; -} -.layout-mask { - position: absolute; - background: #fafafa; - filter: alpha(opacity=10); - opacity: 0.10; - z-index: 4; -} -.layout-button-up { - background: url('images/layout_arrows.png') no-repeat -16px -16px; -} -.layout-button-down { - background: url('images/layout_arrows.png') no-repeat -16px 0; -} -.layout-button-left { - background: url('images/layout_arrows.png') no-repeat 0 0; -} -.layout-button-right { - background: url('images/layout_arrows.png') no-repeat 0 -16px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - background-color: #bfbfbf; -} -.layout-split-north { - border-bottom: 5px solid #efefef; -} -.layout-split-south { - border-top: 5px solid #efefef; -} -.layout-split-east { - border-left: 5px solid #efefef; -} -.layout-split-west { - border-right: 5px solid #efefef; -} -.layout-expand { - background-color: #f3f3f3; -} -.layout-expand-over { - background-color: #f3f3f3; -} -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #e2e2e2; - color: #000000; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #575765; - background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%); - background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%); - background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%); - background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%); - background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%); - background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%); - background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%); - background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%); - background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%); - background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%); - background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%); - background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%); - background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1); -} -.tabs li a.tabs-inner { - color: #575765; - background-color: #f3f3f3; - background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #f3f3f3; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #D3D3D3; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #e2e2e2; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #0092DC; - color: #fff; - filter: none; - border-color: #D3D3D3; -} -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #D3D3D3; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #fafafa; - background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); - background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); - background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); - background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0); -} -.datagrid-cell-rownumber { - color: #000000; -} -.datagrid-resize-proxy { - background: #bfbfbf; -} -.datagrid-mask { - background: #ccc; -} -.datagrid-mask-msg { - border-color: #D3D3D3; -} -.datagrid-toolbar, -.datagrid-pager { - background: #fafafa; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #ddd; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ccc; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #000000; - border-collapse: separate; -} -.datagrid-row-alt { - background: #fafafa; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #e2e2e2; - color: #000000; - cursor: default; -} -.datagrid-row-selected { - background: #0092DC; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #ddd; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #f3f3f3; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #ddd; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #f3f3f3; -} -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #fafafa; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #000000; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.m-list li>a:hover { - background: #e2e2e2; - color: #000000; -} -.m-list .m-list-group { - padding: 0 4px; -} -.pagination { - zoom: 1; -} -.pagination table { - float: left; - height: 30px; -} -.pagination td { - border: 0; -} -.pagination-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 3px 1px; -} -.pagination .pagination-num { - border-width: 1px; - border-style: solid; - margin: 0 2px; - padding: 2px; - width: 2em; - height: auto; -} -.pagination-page-list { - margin: 0px 6px; - padding: 1px 2px; - width: auto; - height: auto; - border-width: 1px; - border-style: solid; -} -.pagination-info { - float: right; - margin: 0 6px; - padding: 0; - height: 30px; - line-height: 30px; - font-size: 12px; -} -.pagination span { - font-size: 12px; -} -.pagination-link .l-btn-text { - width: 24px; - text-align: center; - margin: 0; -} -.pagination-first { - background: url('images/pagination_icons.png') no-repeat 0 center; -} -.pagination-prev { - background: url('images/pagination_icons.png') no-repeat -16px center; -} -.pagination-next { - background: url('images/pagination_icons.png') no-repeat -32px center; -} -.pagination-last { - background: url('images/pagination_icons.png') no-repeat -48px center; -} -.pagination-load { - background: url('images/pagination_icons.png') no-repeat -64px center; -} -.pagination-loading { - background: url('images/loading.gif') no-repeat center center; -} -.pagination-page-list, -.pagination .pagination-num { - border-color: #D3D3D3; -} -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #4d4d4d; -} -.calendar-day { - color: #000000; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #D3D3D3; -} -.calendar { - border-color: #D3D3D3; -} -.calendar-header { - background: #f3f3f3; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #fafafa; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #e2e2e2; - color: #000000; -} -.calendar-hover { - border: 1px solid #ccc; - padding: 0; -} -.calendar-selected { - background-color: #0092DC; - color: #fff; - border: 1px solid #0070a9; - padding: 0; -} -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #fafafa; -} -.datebox-button a { - color: #444; -} -.spinner-arrow { - background-color: #f3f3f3; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #444; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #e2e2e2; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #e2e2e2; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #f3f3f3; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #D3D3D3; -} -.progressbar-text { - color: #000000; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #0092DC; - color: #fff; -} -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #f3f3f3; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #D3D3D3; - background: #f3f3f3; -} -.slider-rule span { - border-color: #D3D3D3; -} -.slider-rulelabel span { - color: #000000; -} -.menu { - position: absolute; - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.menu-inline { - position: relative; -} -.menu-item { - position: relative; - margin: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.menu-text { - height: 20px; - line-height: 20px; - float: left; - padding-left: 28px; -} -.menu-icon { - position: absolute; - width: 16px; - height: 16px; - left: 2px; - top: 50%; - margin-top: -8px; -} -.menu-rightarrow { - position: absolute; - width: 16px; - height: 16px; - right: 0; - top: 50%; - margin-top: -8px; -} -.menu-line { - position: absolute; - left: 26px; - top: 0; - height: 2000px; - font-size: 1px; -} -.menu-sep { - margin: 3px 0px 3px 25px; - font-size: 1px; -} -.menu-noline .menu-line { - display: none; -} -.menu-noline .menu-sep { - margin-left: 0; - margin-right: 0; -} -.menu-active { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.menu-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -.menu-text, -.menu-text span { - font-size: 12px; -} -.menu-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.menu-rightarrow { - background: url('images/menu_arrows.png') no-repeat -32px center; -} -.menu-line { - border-left: 1px solid #ccc; - border-right: 1px solid #fff; -} -.menu-sep { - border-top: 1px solid #ccc; - border-bottom: 1px solid #fff; -} -.menu { - background-color: #f3f3f3; - border-color: #D3D3D3; - color: #444; -} -.menu-content { - background: #ffffff; -} -.menu-item { - border-color: transparent; - _border-color: #f3f3f3; -} -.menu-active { - border-color: #ccc; - color: #000000; - background: #e2e2e2; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #444; -} -.m-btn-downarrow, -.s-btn-downarrow { - display: inline-block; - position: absolute; - width: 16px; - height: 16px; - font-size: 1px; - right: 0; - top: 50%; - margin-top: -8px; -} -.m-btn-active, -.s-btn-active { - background: #e2e2e2; - color: #000000; - border: 1px solid #ccc; - filter: none; -} -.m-btn-plain-active, -.s-btn-plain-active { - background: transparent; - padding: 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.m-btn .l-btn-left .l-btn-text { - margin-right: 20px; -} -.m-btn .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.m-btn .l-btn-icon-right .l-btn-icon { - right: 20px; -} -.m-btn .l-btn-icon-top .l-btn-text { - margin-right: 4px; - margin-bottom: 14px; -} -.m-btn .l-btn-icon-bottom .l-btn-text { - margin-right: 4px; - margin-bottom: 34px; -} -.m-btn .l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 20px; -} -.m-btn .l-btn-icon-top .m-btn-downarrow, -.m-btn .l-btn-icon-bottom .m-btn-downarrow { - top: auto; - bottom: 0px; - left: 50%; - margin-left: -8px; -} -.m-btn-line { - display: inline-block; - position: absolute; - font-size: 1px; - display: none; -} -.m-btn .l-btn-left .m-btn-line { - right: 0; - width: 16px; - height: 500px; - border-style: solid; - border-color: #bfbfbf; - border-width: 0 0 0 1px; -} -.m-btn .l-btn-icon-top .m-btn-line, -.m-btn .l-btn-icon-bottom .m-btn-line { - left: 0; - bottom: 0; - width: 500px; - height: 16px; - border-width: 1px 0 0 0; -} -.m-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 56px; -} -.m-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 50px; -} -.m-btn-downarrow, -.s-btn-downarrow { - background: url('images/menu_arrows.png') no-repeat 0 center; -} -.m-btn-plain-active, -.s-btn-plain-active { - border-color: #ccc; - background-color: #e2e2e2; - color: #000000; -} -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #bfbfbf; - border-width: 0 0 0 1px; -} -.messager-body { - padding: 10px 10px 30px 10px; - overflow: auto; -} -.messager-button { - text-align: center; - padding: 5px; -} -.messager-button .l-btn { - width: 70px; -} -.messager-icon { - float: left; - width: 32px; - height: 32px; - margin: 0 10px 10px 0; -} -.messager-error { - background: url('images/messager_icons.png') no-repeat scroll -64px 0; -} -.messager-info { - background: url('images/messager_icons.png') no-repeat scroll 0 0; -} -.messager-question { - background: url('images/messager_icons.png') no-repeat scroll -32px 0; -} -.messager-warning { - background: url('images/messager_icons.png') no-repeat scroll -96px 0; -} -.messager-progress { - padding: 10px; -} -.messager-p-msg { - margin-bottom: 5px; -} -.messager-body .messager-input { - width: 100%; - padding: 4px 0; - outline-style: none; - border: 1px solid #D3D3D3; -} -.window-thinborder .messager-button { - padding-bottom: 8px; -} -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #D3D3D3; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #000000; - border-color: #D3D3D3; -} -.tree-node-hover { - background: #e2e2e2; - color: #000000; -} -.tree-node-selected { - background: #0092DC; - color: #fff; -} -.tree-node-hidden { - display: none; -} -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #D3D3D3; - color: #000000; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #D3D3D3; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #D3D3D3; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #D3D3D3; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #D3D3D3; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #bbb; - border: 1px solid #bbb; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #0092DC; - color: #fff; -} -.switchbutton-off { - background-color: #ffffff; - color: #000000; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #000000; - border: 1px solid #bbb; - -moz-box-shadow: 0 0 3px 0 #bbb; - -webkit-box-shadow: 0 0 3px 0 #bbb; - box-shadow: 0 0 3px 0 #bbb; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/gray/filebox.css b/assets/js/easy-ui/themes/gray/filebox.css deleted file mode 100644 index c6bac66315..0000000000 --- a/assets/js/easy-ui/themes/gray/filebox.css +++ /dev/null @@ -1,20 +0,0 @@ -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/gray/images/accordion_arrows.png b/assets/js/easy-ui/themes/gray/images/accordion_arrows.png deleted file mode 100755 index a0b8769cc5091d81760c7ed555ac3c3453febbfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#8c}V@SoVHq8x z8Mn?6aTf^k-V*tOYvn_ZO}fk5lvg|}E|PI9vs&aPwII@?XO4*juRBlIrj#un@>dub Yl7)&6CQe}74m6L!)78&qol`;+0Id=veEh?7!oT zn93bYIb9!43Wj)WNz0M)xYl!8U>3_OjRiss3@1j_Zvlb#iD~jUnsR3em#t_3WtUHqj%c^0} zFSrhZpjU$)YHUS-lsMx)nN8pghWK6h!524#*oXjC@NjHF9H1y2K%G?c=lr%4eY%ue zT+7R9Pld<2<$C}OAU0HZIJPqD0RA&Sip042zF(tA4uaUhZ>jL`*HN0POocjDIidNRbTZ#@zvW7@I c5>Ct23v;ttA1D3-v;Y7A07*qoM6N<$f&+eyE&u=k diff --git a/assets/js/easy-ui/themes/gray/images/datebox_arrow.png b/assets/js/easy-ui/themes/gray/images/datebox_arrow.png deleted file mode 100755 index 783c83357fdf90a1c7c024358e1d768b5c09c135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(ENP)5OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$fWs*_M~|PZK4f_B}P-f8$r|z#h zE+)9D_?OzcE{A)9cRCb`94D|RR5VOsbIEjx-=1{JpsQ;^Px3ZX?(@vc^nEOU2KU{_ gJ$cDa*@;a`BkgHpqSBTGpgR~mUHx3vIVCg!07Oqo9{>OV diff --git a/assets/js/easy-ui/themes/gray/images/linkbutton_bg.png b/assets/js/easy-ui/themes/gray/images/linkbutton_bg.png deleted file mode 100755 index fc66bd2cd24047b8377342365a1df3846327ecde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1274 zcmVc6j2;SWMDuL>F^vlqEUI{oOgO!xNf*11TukM z6kTZ3V2qd3<~<$H&Lrt?SpXUxF5Zb^}(={r!EHE+$QMdH|XZ zSYbMyc0tQc3qbP$tG{U_Jyg>I(0srOscEGU?-T)4AzuS$_2J>6`+BJ50YDY<^>2vV z+uI880P2ui(hyHiPrK$)CkbHg=kD&V3^8pD z0v3QOB&8eT@87?rgaGPrb#+ySxU;jP=nkL`nZ_{0e*BD+1Tc5b&d$oLo}8R$90gF1 z^ij>~#>R%HIRNUB_kgpQ+Lg!80Gbb2saY8>1EBeUm7A3TegK*dSciv)Wqp0!h-3im z1+1f^qq4iZ+ZEMUS63~e0I+zh`2rwd0l@!F(!7sM%_`|&0+*B!z{1(u+A9BIU&~T- z2he=L>dmc7TLXZFkeTeCHMcE|qX51{z>0ZC=xGjss*FaXGOMX+dHf8Z8hL6ntGQ_z zF9V<&dwY9jh`D7czyqj4g3S=~)zFA!0980RI4DC*Ez1%L09D8%=OHF&S@Q*;3bRfe zeL2-ZzyeT(Av4`$>R3`j096>WH7BOELD3yR70%Dk%Mk4)1W=73OH{L_UgIc$YFu7k zmRaq`&NxK?Rk*skDzlhL4IV!OsLJ*Ab@{BRT^TO}pgQC6xO~R6G8o_oU?C)>`xlc2 zriH~zU-;g$PyPA_&X!OBSU6SIeB~eKNAhF&(fs&F|1n9<+Yj^2T+4Dj%UFjr zZ%rnX^7Qmn0ANwP308gILtaQfK0Z1j0Br`Wq<=~Ka+?BxW&>7kRtZ+q>C~wJXg6S` zW|cJ1%?d#C0V@Ue)T{uY>425ig?tTsczEc(0+M8_c7^t|!sm-1Nw(}#nnLr?FgGlc zY}ut0+w(d)Uk6FDWtY;*aCdjteIX>tmhA#o+8PqHNU~+SlrTfyKRaNHBx~Ch-FJ3& z%B(Y&NwStp{rH$6Yj{YqhR=Gk~Mtw_&K$#yeTBf z7JV~bCN(VwL$c|B^>Topn-X{+7;S!yV~2^ zBgv-iMkME}U;-COwrsbABDvwg!2wA&ZMWttf5^jTl5E*7V41=|@=Hu>NJ^O8(7b4p z&ChgC(LF5>Md#{+4LgS{%KA|H(Xv`l4P^KdiBKB*_;1&m|Q7!{|O$ k%vVK{T!hwqk^D0L0mO==@4IV9lK=n!07*qoM6N<$f|Ge;n*aa+ diff --git a/assets/js/easy-ui/themes/gray/images/loading.gif b/assets/js/easy-ui/themes/gray/images/loading.gif deleted file mode 100755 index 68f01d04813c1f622810864a3aaa04b4a17ac8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 diff --git a/assets/js/easy-ui/themes/gray/images/menu_arrows.png b/assets/js/easy-ui/themes/gray/images/menu_arrows.png deleted file mode 100755 index b986842e7e4044caed18edbcb4b376a4bb915623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 diff --git a/assets/js/easy-ui/themes/gray/images/messager_icons.png b/assets/js/easy-ui/themes/gray/images/messager_icons.png deleted file mode 100755 index 62c18c135860351063ebaabe8c0f4df7664b8f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6116 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 diff --git a/assets/js/easy-ui/themes/gray/images/passwordbox_open.png b/assets/js/easy-ui/themes/gray/images/passwordbox_open.png deleted file mode 100644 index 0f25d535e05b22b406fd72647611aace9cfa6249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>7Fi*Ar-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2rmQ?!Qz1HW#so#C46Xx7Cq5}K`Svo!h;^q;DRB5^Z?=`` zg<12Qetm(ByO<;&a5^L{7TnL>!KiVsAxlibJl4>NC!c|#Jtt+3rSZgWpp^`su6{1- HoD!M<3i~r2 diff --git a/assets/js/easy-ui/themes/gray/images/searchbox_button.png b/assets/js/easy-ui/themes/gray/images/searchbox_button.png deleted file mode 100755 index 6dd1931589b453f6cc9772fd1851d8705d6b6631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz diff --git a/assets/js/easy-ui/themes/gray/images/spinner_arrows.png b/assets/js/easy-ui/themes/gray/images/spinner_arrows.png deleted file mode 100644 index b1773c24b20b30318e38c4b84690e3d0010c9c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4DgeBzU z{E=^QXHHmRmEiEUJ<_jB`NK-}t7{l}8A{FvOK}{T)p$BC>8|6-x-MIXOa{IRh5%#E x$&;(vVs#x>vb(K5c#%QkA)^788{=C>2L8QE5AM%P*8@KmF984m diff --git a/assets/js/easy-ui/themes/gray/images/tabs_icons.png b/assets/js/easy-ui/themes/gray/images/tabs_icons.png deleted file mode 100755 index dfa10f7d78b3dc6965ef86957a0e4345ec000bc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq{2O2978H@B_~L*E^a70aO1`g zdpoacw*Y(&nwsF2UyID`n8m&$nZ<^krzppre_*0C6=+@buQ_y%c^L~IL^<_ t&+}8oM91jk1`W4%S64GGH^xE+hOnLmClB8dn+LRl!PC{xWt~$(69Df$H1z-g diff --git a/assets/js/easy-ui/themes/gray/images/tagbox_icons.png b/assets/js/easy-ui/themes/gray/images/tagbox_icons.png deleted file mode 100644 index 8ec64360884b3fdb81255ad6074bc08ed183232c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#i#2V@SoVtb9vwNkrdSr%AfUpK=5(o}_e|{SG6u6f5&Q g4t5*qz9vC-hN^}472i&@1{u%b>FVdQ&MBb@08Zm4@c;k- diff --git a/assets/js/easy-ui/themes/gray/images/tree_icons.png b/assets/js/easy-ui/themes/gray/images/tree_icons.png deleted file mode 100755 index e9be4f3a9965e49a4e4078f8c53f486d761a7468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3115 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 diff --git a/assets/js/easy-ui/themes/gray/images/validatebox_warning.png b/assets/js/easy-ui/themes/gray/images/validatebox_warning.png deleted file mode 100755 index 2b3d4f05babf3f82b146350e96570fac02075de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} diff --git a/assets/js/easy-ui/themes/gray/passwordbox.css b/assets/js/easy-ui/themes/gray/passwordbox.css deleted file mode 100644 index 92c9ce586b..0000000000 --- a/assets/js/easy-ui/themes/gray/passwordbox.css +++ /dev/null @@ -1,6 +0,0 @@ -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} diff --git a/assets/js/easy-ui/themes/gray/progressbar.css b/assets/js/easy-ui/themes/gray/progressbar.css deleted file mode 100755 index 93818e3e16..0000000000 --- a/assets/js/easy-ui/themes/gray/progressbar.css +++ /dev/null @@ -1,32 +0,0 @@ -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #D3D3D3; -} -.progressbar-text { - color: #000000; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #0092DC; - color: #fff; -} diff --git a/assets/js/easy-ui/themes/gray/propertygrid.css b/assets/js/easy-ui/themes/gray/propertygrid.css deleted file mode 100755 index 90e452088f..0000000000 --- a/assets/js/easy-ui/themes/gray/propertygrid.css +++ /dev/null @@ -1,28 +0,0 @@ -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #ddd; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #f3f3f3; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #ddd; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #f3f3f3; -} diff --git a/assets/js/easy-ui/themes/gray/searchbox.css b/assets/js/easy-ui/themes/gray/searchbox.css deleted file mode 100644 index 7b15815d23..0000000000 --- a/assets/js/easy-ui/themes/gray/searchbox.css +++ /dev/null @@ -1,61 +0,0 @@ -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #f3f3f3; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} diff --git a/assets/js/easy-ui/themes/gray/slider.css b/assets/js/easy-ui/themes/gray/slider.css deleted file mode 100755 index b163812089..0000000000 --- a/assets/js/easy-ui/themes/gray/slider.css +++ /dev/null @@ -1,101 +0,0 @@ -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #D3D3D3; - background: #f3f3f3; -} -.slider-rule span { - border-color: #D3D3D3; -} -.slider-rulelabel span { - color: #000000; -} diff --git a/assets/js/easy-ui/themes/gray/spinner.css b/assets/js/easy-ui/themes/gray/spinner.css deleted file mode 100644 index a61944d791..0000000000 --- a/assets/js/easy-ui/themes/gray/spinner.css +++ /dev/null @@ -1,58 +0,0 @@ -.spinner-arrow { - background-color: #f3f3f3; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #444; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #e2e2e2; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #e2e2e2; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #f3f3f3; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} diff --git a/assets/js/easy-ui/themes/gray/splitbutton.css b/assets/js/easy-ui/themes/gray/splitbutton.css deleted file mode 100755 index bb2b6daafb..0000000000 --- a/assets/js/easy-ui/themes/gray/splitbutton.css +++ /dev/null @@ -1,12 +0,0 @@ -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #bfbfbf; - border-width: 0 0 0 1px; -} diff --git a/assets/js/easy-ui/themes/gray/switchbutton.css b/assets/js/easy-ui/themes/gray/switchbutton.css deleted file mode 100644 index a33305c775..0000000000 --- a/assets/js/easy-ui/themes/gray/switchbutton.css +++ /dev/null @@ -1,77 +0,0 @@ -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #bbb; - border: 1px solid #bbb; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #0092DC; - color: #fff; -} -.switchbutton-off { - background-color: #ffffff; - color: #000000; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #000000; - border: 1px solid #bbb; - -moz-box-shadow: 0 0 3px 0 #bbb; - -webkit-box-shadow: 0 0 3px 0 #bbb; - box-shadow: 0 0 3px 0 #bbb; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/gray/tabs.css b/assets/js/easy-ui/themes/gray/tabs.css deleted file mode 100644 index bbdd989a70..0000000000 --- a/assets/js/easy-ui/themes/gray/tabs.css +++ /dev/null @@ -1,413 +0,0 @@ -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #e2e2e2; - color: #000000; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #575765; - background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%); - background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%); - background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%); - background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%); - background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%); - background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%); - background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%); - background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%); - background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%); - background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%); - background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%); - background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%); - background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1); -} -.tabs li a.tabs-inner { - color: #575765; - background-color: #f3f3f3; - background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); - background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #f3f3f3; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #D3D3D3; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #e2e2e2; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #0092DC; - color: #fff; - filter: none; - border-color: #D3D3D3; -} diff --git a/assets/js/easy-ui/themes/gray/tagbox.css b/assets/js/easy-ui/themes/gray/tagbox.css deleted file mode 100644 index 46cbd333d8..0000000000 --- a/assets/js/easy-ui/themes/gray/tagbox.css +++ /dev/null @@ -1,44 +0,0 @@ -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #e2e2e2; - color: #000000; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} diff --git a/assets/js/easy-ui/themes/gray/textbox.css b/assets/js/easy-ui/themes/gray/textbox.css deleted file mode 100644 index d86f4b3f6e..0000000000 --- a/assets/js/easy-ui/themes/gray/textbox.css +++ /dev/null @@ -1,139 +0,0 @@ -.textbox { - position: relative; - border: 1px solid #D3D3D3; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #bababa; - -moz-box-shadow: 0 0 3px 0 #D3D3D3; - -webkit-box-shadow: 0 0 3px 0 #D3D3D3; - box-shadow: 0 0 3px 0 #D3D3D3; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} diff --git a/assets/js/easy-ui/themes/gray/tooltip.css b/assets/js/easy-ui/themes/gray/tooltip.css deleted file mode 100644 index e2ba0c5d3a..0000000000 --- a/assets/js/easy-ui/themes/gray/tooltip.css +++ /dev/null @@ -1,103 +0,0 @@ -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #D3D3D3; - color: #000000; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #D3D3D3; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #D3D3D3; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #D3D3D3; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #D3D3D3; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} diff --git a/assets/js/easy-ui/themes/gray/tree.css b/assets/js/easy-ui/themes/gray/tree.css deleted file mode 100644 index a39504fc19..0000000000 --- a/assets/js/easy-ui/themes/gray/tree.css +++ /dev/null @@ -1,161 +0,0 @@ -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #D3D3D3; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #000000; - border-color: #D3D3D3; -} -.tree-node-hover { - background: #e2e2e2; - color: #000000; -} -.tree-node-selected { - background: #0092DC; - color: #fff; -} -.tree-node-hidden { - display: none; -} diff --git a/assets/js/easy-ui/themes/gray/validatebox.css b/assets/js/easy-ui/themes/gray/validatebox.css deleted file mode 100755 index 1fc3ad64e4..0000000000 --- a/assets/js/easy-ui/themes/gray/validatebox.css +++ /dev/null @@ -1,5 +0,0 @@ -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} diff --git a/assets/js/easy-ui/themes/gray/window.css b/assets/js/easy-ui/themes/gray/window.css deleted file mode 100644 index bd69fdbd91..0000000000 --- a/assets/js/easy-ui/themes/gray/window.css +++ /dev/null @@ -1,183 +0,0 @@ -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #D3D3D3; -} -.window { - background-color: #f3f3f3; - background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); - background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); - background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); - background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); -} -.window-proxy { - border: 1px dashed #D3D3D3; -} -.window-proxy-mask, -.window-mask { - background: #ccc; -} -.window .panel-footer { - border: 1px solid #D3D3D3; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} diff --git a/assets/js/easy-ui/themes/material/accordion.css b/assets/js/easy-ui/themes/material/accordion.css deleted file mode 100644 index 51d0c7010b..0000000000 --- a/assets/js/easy-ui/themes/material/accordion.css +++ /dev/null @@ -1,89 +0,0 @@ -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #ddd; -} -.accordion .accordion-header { - background: #f5f5f5; - filter: none; -} -.accordion .accordion-header-selected { - background: #00bbee; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #f5f5f5; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #ddd; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #f5f5f5; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #ddd; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #f5f5f5; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #ddd; -} diff --git a/assets/js/easy-ui/themes/material/calendar.css b/assets/js/easy-ui/themes/material/calendar.css deleted file mode 100644 index 47ba4b19a0..0000000000 --- a/assets/js/easy-ui/themes/material/calendar.css +++ /dev/null @@ -1,202 +0,0 @@ -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-body th, -.calendar-menu-month { - color: #8d8d8d; -} -.calendar-day { - color: #404040; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #ddd; -} -.calendar { - border-color: #ddd; -} -.calendar-header { - background: #f5f5f5; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #fafafa; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #eee; - color: #404040; -} -.calendar-hover { - border: 1px solid #ccc; - padding: 0; -} -.calendar-selected { - background-color: #00bbee; - color: #fff; - border: 1px solid #9cc8f7; - padding: 0; -} diff --git a/assets/js/easy-ui/themes/material/combo.css b/assets/js/easy-ui/themes/material/combo.css deleted file mode 100644 index 622d7c2db8..0000000000 --- a/assets/js/easy-ui/themes/material/combo.css +++ /dev/null @@ -1,35 +0,0 @@ -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #f5f5f5; -} -.combo-arrow-hover { - background-color: #eee; -} -.combo-arrow:hover { - background-color: #eee; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/material/combobox.css b/assets/js/easy-ui/themes/material/combobox.css deleted file mode 100644 index 8f97a2b905..0000000000 --- a/assets/js/easy-ui/themes/material/combobox.css +++ /dev/null @@ -1,39 +0,0 @@ -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #eee; - color: #404040; -} -.combobox-item-selected { - background-color: #00bbee; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} diff --git a/assets/js/easy-ui/themes/material/datagrid.css b/assets/js/easy-ui/themes/material/datagrid.css deleted file mode 100644 index 7259808351..0000000000 --- a/assets/js/easy-ui/themes/material/datagrid.css +++ /dev/null @@ -1,282 +0,0 @@ -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #ddd; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #fafafa; -} -.datagrid-cell-rownumber { - color: #404040; -} -.datagrid-resize-proxy { - background: #ccc; -} -.datagrid-mask { - background: #eee; -} -.datagrid-mask-msg { - border-color: #ddd; -} -.datagrid-toolbar, -.datagrid-pager { - background: #fafafa; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #eee; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ebebeb; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #404040; - border-collapse: separate; -} -.datagrid-row-alt { - background: #f9f9f9; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #eee; - color: #404040; - cursor: default; -} -.datagrid-row-selected { - background: #00bbee; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} diff --git a/assets/js/easy-ui/themes/material/datalist.css b/assets/js/easy-ui/themes/material/datalist.css deleted file mode 100644 index 27617f0b59..0000000000 --- a/assets/js/easy-ui/themes/material/datalist.css +++ /dev/null @@ -1,95 +0,0 @@ -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #fafafa; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ebebeb; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #404040; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ebebeb; -} -.m-list li>a:hover { - background: #eee; - color: #404040; -} -.m-list .m-list-group { - padding: 0 4px; -} diff --git a/assets/js/easy-ui/themes/material/datebox.css b/assets/js/easy-ui/themes/material/datebox.css deleted file mode 100644 index e2874e820b..0000000000 --- a/assets/js/easy-ui/themes/material/datebox.css +++ /dev/null @@ -1,36 +0,0 @@ -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #fafafa; -} -.datebox-button a { - color: #404040; -} diff --git a/assets/js/easy-ui/themes/material/dialog.css b/assets/js/easy-ui/themes/material/dialog.css deleted file mode 100644 index 82a1bb8815..0000000000 --- a/assets/js/easy-ui/themes/material/dialog.css +++ /dev/null @@ -1,47 +0,0 @@ -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #fafafa; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #ddd #ddd #eee #ddd; -} -.dialog-button { - border-color: #eee #ddd #ddd #ddd; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #fafafa; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} diff --git a/assets/js/easy-ui/themes/material/easyui.css b/assets/js/easy-ui/themes/material/easyui.css deleted file mode 100644 index 3b79252191..0000000000 --- a/assets/js/easy-ui/themes/material/easyui.css +++ /dev/null @@ -1,3229 +0,0 @@ -.panel { - overflow: hidden; - text-align: left; - margin: 0; - border: 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.panel-header, -.panel-body { - border-width: 1px; - border-style: solid; -} -.panel-header { - padding: 5px; - position: relative; -} -.panel-title { - background: url('images/blank.gif') no-repeat; -} -.panel-header-noborder { - border-width: 0 0 1px 0; -} -.panel-body { - overflow: auto; - border-top-width: 0; - padding: 0; -} -.panel-body-noheader { - border-top-width: 1px; -} -.panel-body-noborder { - border-width: 0px; -} -.panel-body-nobottom { - border-bottom-width: 0; -} -.panel-with-icon { - padding-left: 18px; -} -.panel-icon, -.panel-tool { - position: absolute; - top: 50%; - margin-top: -8px; - height: 16px; - overflow: hidden; -} -.panel-icon { - left: 5px; - width: 16px; -} -.panel-tool { - right: 5px; - width: auto; -} -.panel-tool a { - display: inline-block; - width: 16px; - height: 16px; - opacity: 0.6; - filter: alpha(opacity=60); - margin: 0 0 0 2px; - vertical-align: top; -} -.panel-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - background-color: #eee; - -moz-border-radius: 2px 2px 2px 2px; - -webkit-border-radius: 2px 2px 2px 2px; - border-radius: 2px 2px 2px 2px; -} -.panel-loading { - padding: 11px 0px 10px 30px; -} -.panel-noscroll { - overflow: hidden; -} -.panel-fit, -.panel-fit body { - height: 100%; - margin: 0; - padding: 0; - border: 0; - overflow: hidden; -} -.panel-loading { - background: url('images/loading.gif') no-repeat 10px 10px; -} -.panel-tool-close { - background: url('images/panel_tools.png') no-repeat -16px 0px; -} -.panel-tool-min { - background: url('images/panel_tools.png') no-repeat 0px 0px; -} -.panel-tool-max { - background: url('images/panel_tools.png') no-repeat 0px -16px; -} -.panel-tool-restore { - background: url('images/panel_tools.png') no-repeat -16px -16px; -} -.panel-tool-collapse { - background: url('images/panel_tools.png') no-repeat -32px 0; -} -.panel-tool-expand { - background: url('images/panel_tools.png') no-repeat -32px -16px; -} -.panel-header, -.panel-body { - border-color: #ddd; -} -.panel-header { - background-color: #f5f5f5; -} -.panel-body { - background-color: #ffffff; - color: #404040; - font-size: 12px; -} -.panel-title { - font-size: 12px; - font-weight: bold; - color: #000000; - height: 16px; - line-height: 16px; -} -.panel-footer { - border: 1px solid #ddd; - overflow: hidden; - background: #fafafa; -} -.panel-footer-noborder { - border-width: 1px 0 0 0; -} -.panel-hleft, -.panel-hright { - position: relative; -} -.panel-hleft>.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #ddd; -} -.accordion .accordion-header { - background: #f5f5f5; - filter: none; -} -.accordion .accordion-header-selected { - background: #00bbee; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #f5f5f5; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #ddd; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #f5f5f5; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #ddd; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #f5f5f5; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #ddd; -} -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.window-shadow { - background: #fafafa; - -moz-box-shadow: 2px 2px 3px #fafafa; - -webkit-box-shadow: 2px 2px 3px #fafafa; - box-shadow: 2px 2px 3px #fafafa; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #ddd; -} -.window { - background-color: #f5f5f5; -} -.window-proxy { - border: 1px dashed #ddd; -} -.window-proxy-mask, -.window-mask { - background: #eee; -} -.window .panel-footer { - border: 1px solid #ddd; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #fafafa; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #ddd #ddd #eee #ddd; -} -.dialog-button { - border-color: #eee #ddd #ddd #ddd; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #fafafa; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} -.l-btn { - text-decoration: none; - display: inline-block; - overflow: hidden; - margin: 0; - padding: 0; - cursor: pointer; - outline: none; - text-align: center; - vertical-align: middle; - line-height: normal; -} -.l-btn-plain { - border-width: 0; - padding: 1px; -} -.l-btn-left { - display: inline-block; - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - vertical-align: top; -} -.l-btn-text { - display: inline-block; - vertical-align: top; - width: auto; - line-height: 24px; - font-size: 12px; - padding: 0; - margin: 0 4px; -} -.l-btn-icon { - display: inline-block; - width: 16px; - height: 16px; - line-height: 16px; - position: absolute; - top: 50%; - margin-top: -8px; - font-size: 1px; -} -.l-btn span span .l-btn-empty { - display: inline-block; - margin: 0; - width: 16px; - height: 24px; - font-size: 1px; - vertical-align: top; -} -.l-btn span .l-btn-icon-left { - padding: 0 0 0 20px; - background-position: left center; -} -.l-btn span .l-btn-icon-right { - padding: 0 20px 0 0; - background-position: right center; -} -.l-btn-icon-left .l-btn-text { - margin: 0 4px 0 24px; -} -.l-btn-icon-left .l-btn-icon { - left: 4px; -} -.l-btn-icon-right .l-btn-text { - margin: 0 24px 0 4px; -} -.l-btn-icon-right .l-btn-icon { - right: 4px; -} -.l-btn-icon-top .l-btn-text { - margin: 20px 4px 0 4px; -} -.l-btn-icon-top .l-btn-icon { - top: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-icon-bottom .l-btn-text { - margin: 0 4px 20px 4px; -} -.l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-left .l-btn-empty { - margin: 0 4px; - width: 16px; -} -.l-btn-plain:hover { - padding: 0; -} -.l-btn-focus { - outline: #0000FF dotted thin; -} -.l-btn-large .l-btn-text { - line-height: 40px; -} -.l-btn-large .l-btn-icon { - width: 32px; - height: 32px; - line-height: 32px; - margin-top: -16px; -} -.l-btn-large .l-btn-icon-left .l-btn-text { - margin-left: 40px; -} -.l-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.l-btn-large .l-btn-icon-top .l-btn-text { - margin-top: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-top .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-left .l-btn-empty { - margin: 0 4px; - width: 32px; -} -.l-btn { - color: #404040; - background: #fafafa; - background-repeat: repeat-x; - border: 1px solid #d9d9d9; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.l-btn:hover { - background: #eee; - color: #404040; - border: 1px solid #ccc; - filter: none; -} -.l-btn-plain { - background: transparent; - border-width: 0; - filter: none; -} -.l-btn-outline { - border-width: 1px; - border-color: #ccc; - padding: 0; -} -.l-btn-plain:hover { - background: #eee; - color: #404040; - border: 1px solid #ccc; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.l-btn-disabled, -.l-btn-disabled:hover { - opacity: 0.5; - cursor: default; - background: #fafafa; - color: #404040; -} -.l-btn-disabled .l-btn-text, -.l-btn-disabled .l-btn-icon { - filter: alpha(opacity=50); -} -.l-btn-plain-disabled, -.l-btn-plain-disabled:hover { - background: transparent; - filter: alpha(opacity=50); -} -.l-btn-selected, -.l-btn-selected:hover { - background: #00bbee; - filter: none; -} -.l-btn-plain-selected, -.l-btn-plain-selected:hover { - background: #00bbee; -} -.textbox { - position: relative; - border: 1px solid #ddd; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #c4c4c4; - -moz-box-shadow: 0 0 3px 0 #ddd; - -webkit-box-shadow: 0 0 3px 0 #ddd; - box-shadow: 0 0 3px 0 #ddd; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff; -} -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #f5f5f5; -} -.combo-arrow-hover { - background-color: #eee; -} -.combo-arrow:hover { - background-color: #eee; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #eee; - color: #404040; -} -.combobox-item-selected { - background-color: #00bbee; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - background: #eee; - color: #404040; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} -.layout { - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - z-index: 0; -} -.layout-panel { - position: absolute; - overflow: hidden; -} -.layout-body { - min-width: 1px; - min-height: 1px; -} -.layout-panel-east, -.layout-panel-west { - z-index: 2; -} -.layout-panel-north, -.layout-panel-south { - z-index: 3; -} -.layout-expand { - position: absolute; - padding: 0px; - font-size: 1px; - cursor: pointer; - z-index: 1; -} -.layout-expand .panel-header, -.layout-expand .panel-body { - background: transparent; - filter: none; - overflow: hidden; -} -.layout-expand .panel-header { - border-bottom-width: 0px; -} -.layout-expand .panel-body { - position: relative; -} -.layout-expand .panel-body .panel-icon { - margin-top: 0; - top: 0; - left: 50%; - margin-left: -8px; -} -.layout-expand-west .panel-header .panel-icon, -.layout-expand-east .panel-header .panel-icon { - display: none; -} -.layout-expand-title { - position: absolute; - top: 0; - left: 21px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.layout-expand-title-up { - position: absolute; - top: 0; - left: 0; - text-align: right; - padding-left: 5px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 0; -} -.layout-expand-with-icon { - top: 18px; -} -.layout-expand .panel-body-noheader .layout-expand-title, -.layout-expand .panel-body-noheader .panel-icon { - top: 5px; -} -.layout-expand .panel-body-noheader .layout-expand-with-icon { - top: 23px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - position: absolute; - font-size: 1px; - display: none; - z-index: 5; -} -.layout-split-proxy-h { - width: 5px; - cursor: e-resize; -} -.layout-split-proxy-v { - height: 5px; - cursor: n-resize; -} -.layout-mask { - position: absolute; - background: #fafafa; - filter: alpha(opacity=10); - opacity: 0.10; - z-index: 4; -} -.layout-button-up { - background: url('images/layout_arrows.png') no-repeat -16px -16px; -} -.layout-button-down { - background: url('images/layout_arrows.png') no-repeat -16px 0; -} -.layout-button-left { - background: url('images/layout_arrows.png') no-repeat 0 0; -} -.layout-button-right { - background: url('images/layout_arrows.png') no-repeat 0 -16px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - background-color: #ccc; -} -.layout-split-north { - border-bottom: 5px solid #ffffff; -} -.layout-split-south { - border-top: 5px solid #ffffff; -} -.layout-split-east { - border-left: 5px solid #ffffff; -} -.layout-split-west { - border-right: 5px solid #ffffff; -} -.layout-expand { - background-color: #f5f5f5; -} -.layout-expand-over { - background-color: #f5f5f5; -} -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 4px 4px 0 0; - -webkit-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 4px 4px; - -webkit-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #f5f5f5 url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #eee; - color: #404040; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #000000; -} -.tabs li a.tabs-inner { - color: #000000; - background-color: #f5f5f5; -} -.tabs-header, -.tabs-tool { - background-color: #f5f5f5; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #ddd; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #eee; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #00bbee; - color: #fff; - filter: none; - border-color: #ddd; -} -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #ddd; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #fafafa; -} -.datagrid-cell-rownumber { - color: #404040; -} -.datagrid-resize-proxy { - background: #ccc; -} -.datagrid-mask { - background: #eee; -} -.datagrid-mask-msg { - border-color: #ddd; -} -.datagrid-toolbar, -.datagrid-pager { - background: #fafafa; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #eee; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ebebeb; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #404040; - border-collapse: separate; -} -.datagrid-row-alt { - background: #f9f9f9; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #eee; - color: #404040; - cursor: default; -} -.datagrid-row-selected { - background: #00bbee; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #eee; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #f5f5f5; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #eee; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #f5f5f5; -} -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #fafafa; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ebebeb; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #404040; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ebebeb; -} -.m-list li>a:hover { - background: #eee; - color: #404040; -} -.m-list .m-list-group { - padding: 0 4px; -} -.pagination { - zoom: 1; -} -.pagination table { - float: left; - height: 30px; -} -.pagination td { - border: 0; -} -.pagination-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 3px 1px; -} -.pagination .pagination-num { - border-width: 1px; - border-style: solid; - margin: 0 2px; - padding: 2px; - width: 2em; - height: auto; -} -.pagination-page-list { - margin: 0px 6px; - padding: 1px 2px; - width: auto; - height: auto; - border-width: 1px; - border-style: solid; -} -.pagination-info { - float: right; - margin: 0 6px; - padding: 0; - height: 30px; - line-height: 30px; - font-size: 12px; -} -.pagination span { - font-size: 12px; -} -.pagination-link .l-btn-text { - width: 24px; - text-align: center; - margin: 0; -} -.pagination-first { - background: url('images/pagination_icons.png') no-repeat 0 center; -} -.pagination-prev { - background: url('images/pagination_icons.png') no-repeat -16px center; -} -.pagination-next { - background: url('images/pagination_icons.png') no-repeat -32px center; -} -.pagination-last { - background: url('images/pagination_icons.png') no-repeat -48px center; -} -.pagination-load { - background: url('images/pagination_icons.png') no-repeat -64px center; -} -.pagination-loading { - background: url('images/loading.gif') no-repeat center center; -} -.pagination-page-list, -.pagination .pagination-num { - border-color: #ddd; -} -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.calendar-body th, -.calendar-menu-month { - color: #8d8d8d; -} -.calendar-day { - color: #404040; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #ddd; -} -.calendar { - border-color: #ddd; -} -.calendar-header { - background: #f5f5f5; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #fafafa; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #eee; - color: #404040; -} -.calendar-hover { - border: 1px solid #ccc; - padding: 0; -} -.calendar-selected { - background-color: #00bbee; - color: #fff; - border: 1px solid #9cc8f7; - padding: 0; -} -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #fafafa; -} -.datebox-button a { - color: #404040; -} -.spinner-arrow { - background-color: #f5f5f5; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #404040; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #eee; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #eee; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #f5f5f5; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.progressbar { - border-color: #ddd; -} -.progressbar-text { - color: #404040; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #00bbee; - color: #fff; -} -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #f5f5f5; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 4px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #ddd; - background: #f5f5f5; -} -.slider-rule span { - border-color: #ddd; -} -.slider-rulelabel span { - color: #404040; -} -.menu { - position: absolute; - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.menu-inline { - position: relative; -} -.menu-item { - position: relative; - margin: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.menu-text { - height: 20px; - line-height: 20px; - float: left; - padding-left: 28px; -} -.menu-icon { - position: absolute; - width: 16px; - height: 16px; - left: 2px; - top: 50%; - margin-top: -8px; -} -.menu-rightarrow { - position: absolute; - width: 16px; - height: 16px; - right: 0; - top: 50%; - margin-top: -8px; -} -.menu-line { - position: absolute; - left: 26px; - top: 0; - height: 2000px; - font-size: 1px; -} -.menu-sep { - margin: 3px 0px 3px 25px; - font-size: 1px; -} -.menu-noline .menu-line { - display: none; -} -.menu-noline .menu-sep { - margin-left: 0; - margin-right: 0; -} -.menu-active { - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.menu-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -.menu-text, -.menu-text span { - font-size: 12px; -} -.menu-shadow { - position: absolute; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - background: #fafafa; - -moz-box-shadow: 2px 2px 3px #fafafa; - -webkit-box-shadow: 2px 2px 3px #fafafa; - box-shadow: 2px 2px 3px #fafafa; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.menu-rightarrow { - background: url('images/menu_arrows.png') no-repeat -32px center; -} -.menu-line { - border-left: 1px solid #ddd; - border-right: 1px solid #fff; -} -.menu-sep { - border-top: 1px solid #ddd; - border-bottom: 1px solid #fff; -} -.menu { - background-color: #fff; - border-color: #eee; - color: #404040; -} -.menu-content { - background: #ffffff; -} -.menu-item { - border-color: transparent; - _border-color: #fff; -} -.menu-active { - border-color: #ccc; - color: #404040; - background: #eee; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #404040; -} -.m-btn-downarrow, -.s-btn-downarrow { - display: inline-block; - position: absolute; - width: 16px; - height: 16px; - font-size: 1px; - right: 0; - top: 50%; - margin-top: -8px; -} -.m-btn-active, -.s-btn-active { - background: #eee; - color: #404040; - border: 1px solid #ccc; - filter: none; -} -.m-btn-plain-active, -.s-btn-plain-active { - background: transparent; - padding: 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.m-btn .l-btn-left .l-btn-text { - margin-right: 20px; -} -.m-btn .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.m-btn .l-btn-icon-right .l-btn-icon { - right: 20px; -} -.m-btn .l-btn-icon-top .l-btn-text { - margin-right: 4px; - margin-bottom: 14px; -} -.m-btn .l-btn-icon-bottom .l-btn-text { - margin-right: 4px; - margin-bottom: 34px; -} -.m-btn .l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 20px; -} -.m-btn .l-btn-icon-top .m-btn-downarrow, -.m-btn .l-btn-icon-bottom .m-btn-downarrow { - top: auto; - bottom: 0px; - left: 50%; - margin-left: -8px; -} -.m-btn-line { - display: inline-block; - position: absolute; - font-size: 1px; - display: none; -} -.m-btn .l-btn-left .m-btn-line { - right: 0; - width: 16px; - height: 500px; - border-style: solid; - border-color: #ccc; - border-width: 0 0 0 1px; -} -.m-btn .l-btn-icon-top .m-btn-line, -.m-btn .l-btn-icon-bottom .m-btn-line { - left: 0; - bottom: 0; - width: 500px; - height: 16px; - border-width: 1px 0 0 0; -} -.m-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 56px; -} -.m-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 50px; -} -.m-btn-downarrow, -.s-btn-downarrow { - background: url('images/menu_arrows.png') no-repeat 0 center; -} -.m-btn-plain-active, -.s-btn-plain-active { - border-color: #ccc; - background-color: #eee; - color: #404040; -} -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #ccc; - border-width: 0 0 0 1px; -} -.messager-body { - padding: 10px 10px 30px 10px; - overflow: auto; -} -.messager-button { - text-align: center; - padding: 5px; -} -.messager-button .l-btn { - width: 70px; -} -.messager-icon { - float: left; - width: 32px; - height: 32px; - margin: 0 10px 10px 0; -} -.messager-error { - background: url('images/messager_icons.png') no-repeat scroll -64px 0; -} -.messager-info { - background: url('images/messager_icons.png') no-repeat scroll 0 0; -} -.messager-question { - background: url('images/messager_icons.png') no-repeat scroll -32px 0; -} -.messager-warning { - background: url('images/messager_icons.png') no-repeat scroll -96px 0; -} -.messager-progress { - padding: 10px; -} -.messager-p-msg { - margin-bottom: 5px; -} -.messager-body .messager-input { - width: 100%; - padding: 4px 0; - outline-style: none; - border: 1px solid #ddd; -} -.window-thinborder .messager-button { - padding-bottom: 8px; -} -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #ddd; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #404040; - border-color: #ddd; -} -.tree-node-hover { - background: #eee; - color: #404040; -} -.tree-node-selected { - background: #00bbee; - color: #fff; -} -.tree-node-hidden { - display: none; -} -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff; - color: #404040; -} -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #ddd; - color: #404040; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #ddd; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #ddd; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #ddd; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #ddd; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #d9d9d9; - border: 1px solid #d9d9d9; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.switchbutton-on { - background: #00bbee; - color: #fff; -} -.switchbutton-off { - background-color: #ffffff; - color: #404040; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #404040; - border: 1px solid #d9d9d9; - -moz-box-shadow: 0 0 3px 0 #d9d9d9; - -webkit-box-shadow: 0 0 3px 0 #d9d9d9; - box-shadow: 0 0 3px 0 #d9d9d9; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} -.l-btn { - box-shadow: 0 1px 2px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.05); -} -.l-btn:active { - box-shadow: 0 6px 17px 0 rgba(235,235,235,0.3); -} -.l-btn-selected { - box-shadow: 0 1px 2px rgba(89,205,226,0.2), 0 1px 1px rgba(89,205,226,0.05); -} -.l-btn-plain, -.l-btn-disabled, -.l-btn-disabled:active, -.textbox-button { - box-shadow: none; -} -.l-btn-selected, -.l-btn-selected:hover { - background: #00bbee; - color: #fff; -} -.l-btn-plain-selected, -.l-btn-plain-selected:hover { - background: #00bbee; -} -.m-btn-active, -.m-btn-plain-active, -.s-btn-active, -.s-btn-plain-active { - background: #00bbee; - color: #fff; -} -.menu-shadow, -.combo-p { - -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - filter: none; -} -.menu-active { - border-color: transparent; - color: #fff; - background: #00bbee; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #404040; -} -.window { - background-color: #fff; -} -.window-proxy { - border-color: #ccc; -} -.window-shadow { - -moz-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); - -webkit-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); - box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); - filter: none; -} -.window-mask { - background: #000; -} -.datagrid-header .datagrid-cell, -.datagrid-header .datagrid-cell-group { - color: #666; - font-weight: bold; - filter: alpha(opacity=80); - opacity: 0.80; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-style: solid; -} diff --git a/assets/js/easy-ui/themes/material/filebox.css b/assets/js/easy-ui/themes/material/filebox.css deleted file mode 100644 index c6bac66315..0000000000 --- a/assets/js/easy-ui/themes/material/filebox.css +++ /dev/null @@ -1,20 +0,0 @@ -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/material/images/Thumbs.db b/assets/js/easy-ui/themes/material/images/Thumbs.db deleted file mode 100644 index 5f257a2a49959543d36e2641d352572547e40e63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35328 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 T0gjLZeOBaa?|wA#e_!~27*z{8 diff --git a/assets/js/easy-ui/themes/material/images/accordion_arrows.png b/assets/js/easy-ui/themes/material/images/accordion_arrows.png deleted file mode 100644 index a0b8769cc5091d81760c7ed555ac3c3453febbfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#8c}V@SoVHq8x z8Mn?6aTf^k-V*tOYvn_ZO}fk5lvg|}E|PI9vs&aPwII@?XO4*juRBlIrj#un@>dub Yl7)&6CQe}74m6L!)78&qol`;+0Id=veEh?7!oT zn93bYIb9!43Wj)WNz0M)xYl!8U>3_OjRiss3@1j_Zvlb#iD~jUnsR3em#t_3WtUHqj%c^0} zFSrhZpjU$)YHUS-lsMx)nN8pghWK6h!524#*oXjC@NjHF9H1y2K%G?c=lr%4eY%ue zT+7R9Pld<2<$C}OAU0HZIJPqD0RA&Sip042zF(tA4uaUhZ>jL`*HN0POocjDIidNRbTZ#@zvW7@I c5>Ct23v;ttA1D3-v;Y7A07*qoM6N<$f&+eyE&u=k diff --git a/assets/js/easy-ui/themes/material/images/datebox_arrow.png b/assets/js/easy-ui/themes/material/images/datebox_arrow.png deleted file mode 100644 index 783c83357fdf90a1c7c024358e1d768b5c09c135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(ENP)5OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$fWs*_M~|PZK4f_B}P-f8$r|z#h zE+)9D_?OzcE{A)9cRCb`94D|RR5VOsbIEjx-=1{JpsQ;^Px3ZX?(@vc^nEOU2KU{_ gJ$cDa*@;a`BkgHpqSBTGpgR~mUHx3vIVCg!07Oqo9{>OV diff --git a/assets/js/easy-ui/themes/material/images/linkbutton_bg.png b/assets/js/easy-ui/themes/material/images/linkbutton_bg.png deleted file mode 100644 index fc66bd2cd24047b8377342365a1df3846327ecde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1274 zcmVc6j2;SWMDuL>F^vlqEUI{oOgO!xNf*11TukM z6kTZ3V2qd3<~<$H&Lrt?SpXUxF5Zb^}(={r!EHE+$QMdH|XZ zSYbMyc0tQc3qbP$tG{U_Jyg>I(0srOscEGU?-T)4AzuS$_2J>6`+BJ50YDY<^>2vV z+uI880P2ui(hyHiPrK$)CkbHg=kD&V3^8pD z0v3QOB&8eT@87?rgaGPrb#+ySxU;jP=nkL`nZ_{0e*BD+1Tc5b&d$oLo}8R$90gF1 z^ij>~#>R%HIRNUB_kgpQ+Lg!80Gbb2saY8>1EBeUm7A3TegK*dSciv)Wqp0!h-3im z1+1f^qq4iZ+ZEMUS63~e0I+zh`2rwd0l@!F(!7sM%_`|&0+*B!z{1(u+A9BIU&~T- z2he=L>dmc7TLXZFkeTeCHMcE|qX51{z>0ZC=xGjss*FaXGOMX+dHf8Z8hL6ntGQ_z zF9V<&dwY9jh`D7czyqj4g3S=~)zFA!0980RI4DC*Ez1%L09D8%=OHF&S@Q*;3bRfe zeL2-ZzyeT(Av4`$>R3`j096>WH7BOELD3yR70%Dk%Mk4)1W=73OH{L_UgIc$YFu7k zmRaq`&NxK?Rk*skDzlhL4IV!OsLJ*Ab@{BRT^TO}pgQC6xO~R6G8o_oU?C)>`xlc2 zriH~zU-;g$PyPA_&X!OBSU6SIeB~eKNAhF&(fs&F|1n9<+Yj^2T+4Dj%UFjr zZ%rnX^7Qmn0ANwP308gILtaQfK0Z1j0Br`Wq<=~Ka+?BxW&>7kRtZ+q>C~wJXg6S` zW|cJ1%?d#C0V@Ue)T{uY>425ig?tTsczEc(0+M8_c7^t|!sm-1Nw(}#nnLr?FgGlc zY}ut0+w(d)Uk6FDWtY;*aCdjteIX>tmhA#o+8PqHNU~+SlrTfyKRaNHBx~Ch-FJ3& z%B(Y&NwStp{rH$6Yj{YqhR=Gk~Mtw_&K$#yeTBf z7JV~bCN(VwL$c|B^>Topn-X{+7;S!yV~2^ zBgv-iMkME}U;-COwrsbABDvwg!2wA&ZMWttf5^jTl5E*7V41=|@=Hu>NJ^O8(7b4p z&ChgC(LF5>Md#{+4LgS{%KA|H(Xv`l4P^KdiBKB*_;1&m|Q7!{|O$ k%vVK{T!hwqk^D0L0mO==@4IV9lK=n!07*qoM6N<$f|Ge;n*aa+ diff --git a/assets/js/easy-ui/themes/material/images/loading.gif b/assets/js/easy-ui/themes/material/images/loading.gif deleted file mode 100644 index 68f01d04813c1f622810864a3aaa04b4a17ac8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 diff --git a/assets/js/easy-ui/themes/material/images/menu_arrows.png b/assets/js/easy-ui/themes/material/images/menu_arrows.png deleted file mode 100644 index b986842e7e4044caed18edbcb4b376a4bb915623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 diff --git a/assets/js/easy-ui/themes/material/images/messager_icons.png b/assets/js/easy-ui/themes/material/images/messager_icons.png deleted file mode 100644 index 62c18c135860351063ebaabe8c0f4df7664b8f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6116 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 diff --git a/assets/js/easy-ui/themes/material/images/passwordbox_open.png b/assets/js/easy-ui/themes/material/images/passwordbox_open.png deleted file mode 100644 index 0f25d535e05b22b406fd72647611aace9cfa6249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>7Fi*Ar-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2rmQ?!Qz1HW#so#C46Xx7Cq5}K`Svo!h;^q;DRB5^Z?=`` zg<12Qetm(ByO<;&a5^L{7TnL>!KiVsAxlibJl4>NC!c|#Jtt+3rSZgWpp^`su6{1- HoD!M<3i~r2 diff --git a/assets/js/easy-ui/themes/material/images/searchbox_button.png b/assets/js/easy-ui/themes/material/images/searchbox_button.png deleted file mode 100644 index 6dd1931589b453f6cc9772fd1851d8705d6b6631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz diff --git a/assets/js/easy-ui/themes/material/images/spinner_arrows.png b/assets/js/easy-ui/themes/material/images/spinner_arrows.png deleted file mode 100644 index b1773c24b20b30318e38c4b84690e3d0010c9c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4DgeBzU z{E=^QXHHmRmEiEUJ<_jB`NK-}t7{l}8A{FvOK}{T)p$BC>8|6-x-MIXOa{IRh5%#E x$&;(vVs#x>vb(K5c#%QkA)^788{=C>2L8QE5AM%P*8@KmF984m diff --git a/assets/js/easy-ui/themes/material/images/tabs_icons.png b/assets/js/easy-ui/themes/material/images/tabs_icons.png deleted file mode 100644 index dfa10f7d78b3dc6965ef86957a0e4345ec000bc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq{2O2978H@B_~L*E^a70aO1`g zdpoacw*Y(&nwsF2UyID`n8m&$nZ<^krzppre_*0C6=+@buQ_y%c^L~IL^<_ t&+}8oM91jk1`W4%S64GGH^xE+hOnLmClB8dn+LRl!PC{xWt~$(69Df$H1z-g diff --git a/assets/js/easy-ui/themes/material/images/tagbox_icons.png b/assets/js/easy-ui/themes/material/images/tagbox_icons.png deleted file mode 100644 index 8ec64360884b3fdb81255ad6074bc08ed183232c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#i#2V@SoVtb9vwNkrdSr%AfUpK=5(o}_e|{SG6u6f5&Q g4t5*qz9vC-hN^}472i&@1{u%b>FVdQ&MBb@08Zm4@c;k- diff --git a/assets/js/easy-ui/themes/material/images/tree_icons.png b/assets/js/easy-ui/themes/material/images/tree_icons.png deleted file mode 100644 index e9be4f3a9965e49a4e4078f8c53f486d761a7468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3115 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 diff --git a/assets/js/easy-ui/themes/material/images/validatebox_warning.png b/assets/js/easy-ui/themes/material/images/validatebox_warning.png deleted file mode 100644 index 2b3d4f05babf3f82b146350e96570fac02075de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} diff --git a/assets/js/easy-ui/themes/material/passwordbox.css b/assets/js/easy-ui/themes/material/passwordbox.css deleted file mode 100644 index 92c9ce586b..0000000000 --- a/assets/js/easy-ui/themes/material/passwordbox.css +++ /dev/null @@ -1,6 +0,0 @@ -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} diff --git a/assets/js/easy-ui/themes/material/progressbar.css b/assets/js/easy-ui/themes/material/progressbar.css deleted file mode 100644 index 1690673028..0000000000 --- a/assets/js/easy-ui/themes/material/progressbar.css +++ /dev/null @@ -1,32 +0,0 @@ -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.progressbar { - border-color: #ddd; -} -.progressbar-text { - color: #404040; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #00bbee; - color: #fff; -} diff --git a/assets/js/easy-ui/themes/material/propertygrid.css b/assets/js/easy-ui/themes/material/propertygrid.css deleted file mode 100644 index fbd2c7c083..0000000000 --- a/assets/js/easy-ui/themes/material/propertygrid.css +++ /dev/null @@ -1,28 +0,0 @@ -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #eee; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #f5f5f5; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #eee; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #f5f5f5; -} diff --git a/assets/js/easy-ui/themes/material/searchbox.css b/assets/js/easy-ui/themes/material/searchbox.css deleted file mode 100644 index 54ad88517a..0000000000 --- a/assets/js/easy-ui/themes/material/searchbox.css +++ /dev/null @@ -1,61 +0,0 @@ -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #f5f5f5; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} diff --git a/assets/js/easy-ui/themes/material/slider.css b/assets/js/easy-ui/themes/material/slider.css deleted file mode 100644 index 1e471efc68..0000000000 --- a/assets/js/easy-ui/themes/material/slider.css +++ /dev/null @@ -1,101 +0,0 @@ -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 4px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #ddd; - background: #f5f5f5; -} -.slider-rule span { - border-color: #ddd; -} -.slider-rulelabel span { - color: #404040; -} diff --git a/assets/js/easy-ui/themes/material/spinner.css b/assets/js/easy-ui/themes/material/spinner.css deleted file mode 100644 index 15098d1004..0000000000 --- a/assets/js/easy-ui/themes/material/spinner.css +++ /dev/null @@ -1,58 +0,0 @@ -.spinner-arrow { - background-color: #f5f5f5; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #404040; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #eee; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #eee; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #f5f5f5; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} diff --git a/assets/js/easy-ui/themes/material/splitbutton.css b/assets/js/easy-ui/themes/material/splitbutton.css deleted file mode 100644 index 2ad86f7749..0000000000 --- a/assets/js/easy-ui/themes/material/splitbutton.css +++ /dev/null @@ -1,12 +0,0 @@ -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #ccc; - border-width: 0 0 0 1px; -} diff --git a/assets/js/easy-ui/themes/material/switchbutton.css b/assets/js/easy-ui/themes/material/switchbutton.css deleted file mode 100644 index 8e3ddb7dd2..0000000000 --- a/assets/js/easy-ui/themes/material/switchbutton.css +++ /dev/null @@ -1,77 +0,0 @@ -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #d9d9d9; - border: 1px solid #d9d9d9; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.switchbutton-on { - background: #00bbee; - color: #fff; -} -.switchbutton-off { - background-color: #ffffff; - color: #404040; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #404040; - border: 1px solid #d9d9d9; - -moz-box-shadow: 0 0 3px 0 #d9d9d9; - -webkit-box-shadow: 0 0 3px 0 #d9d9d9; - box-shadow: 0 0 3px 0 #d9d9d9; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/material/tabs.css b/assets/js/easy-ui/themes/material/tabs.css deleted file mode 100644 index 2ea78d209c..0000000000 --- a/assets/js/easy-ui/themes/material/tabs.css +++ /dev/null @@ -1,377 +0,0 @@ -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 4px 4px 0 0; - -webkit-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 4px 4px; - -webkit-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #f5f5f5 url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #eee; - color: #404040; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #000000; -} -.tabs li a.tabs-inner { - color: #000000; - background-color: #f5f5f5; -} -.tabs-header, -.tabs-tool { - background-color: #f5f5f5; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #ddd; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #eee; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #00bbee; - color: #fff; - filter: none; - border-color: #ddd; -} diff --git a/assets/js/easy-ui/themes/material/tagbox.css b/assets/js/easy-ui/themes/material/tagbox.css deleted file mode 100644 index 16ff41475e..0000000000 --- a/assets/js/easy-ui/themes/material/tagbox.css +++ /dev/null @@ -1,44 +0,0 @@ -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - background: #eee; - color: #404040; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} diff --git a/assets/js/easy-ui/themes/material/textbox.css b/assets/js/easy-ui/themes/material/textbox.css deleted file mode 100644 index 48bd54de43..0000000000 --- a/assets/js/easy-ui/themes/material/textbox.css +++ /dev/null @@ -1,139 +0,0 @@ -.textbox { - position: relative; - border: 1px solid #ddd; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #c4c4c4; - -moz-box-shadow: 0 0 3px 0 #ddd; - -webkit-box-shadow: 0 0 3px 0 #ddd; - box-shadow: 0 0 3px 0 #ddd; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff; -} diff --git a/assets/js/easy-ui/themes/material/tooltip.css b/assets/js/easy-ui/themes/material/tooltip.css deleted file mode 100644 index 18aa87c146..0000000000 --- a/assets/js/easy-ui/themes/material/tooltip.css +++ /dev/null @@ -1,103 +0,0 @@ -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #ddd; - color: #404040; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #ddd; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #ddd; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #ddd; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #ddd; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} diff --git a/assets/js/easy-ui/themes/material/tree.css b/assets/js/easy-ui/themes/material/tree.css deleted file mode 100644 index aa3457160d..0000000000 --- a/assets/js/easy-ui/themes/material/tree.css +++ /dev/null @@ -1,161 +0,0 @@ -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #ddd; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #404040; - border-color: #ddd; -} -.tree-node-hover { - background: #eee; - color: #404040; -} -.tree-node-selected { - background: #00bbee; - color: #fff; -} -.tree-node-hidden { - display: none; -} diff --git a/assets/js/easy-ui/themes/material/validatebox.css b/assets/js/easy-ui/themes/material/validatebox.css deleted file mode 100644 index 5911752fea..0000000000 --- a/assets/js/easy-ui/themes/material/validatebox.css +++ /dev/null @@ -1,5 +0,0 @@ -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff; - color: #404040; -} diff --git a/assets/js/easy-ui/themes/material/window.css b/assets/js/easy-ui/themes/material/window.css deleted file mode 100644 index 5bd6c465fe..0000000000 --- a/assets/js/easy-ui/themes/material/window.css +++ /dev/null @@ -1,177 +0,0 @@ -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -.window-shadow { - background: #fafafa; - -moz-box-shadow: 2px 2px 3px #fafafa; - -webkit-box-shadow: 2px 2px 3px #fafafa; - box-shadow: 2px 2px 3px #fafafa; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #ddd; -} -.window { - background-color: #f5f5f5; -} -.window-proxy { - border: 1px dashed #ddd; -} -.window-proxy-mask, -.window-mask { - background: #eee; -} -.window .panel-footer { - border: 1px solid #ddd; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} diff --git a/assets/js/easy-ui/themes/metro/accordion.css b/assets/js/easy-ui/themes/metro/accordion.css deleted file mode 100644 index fb9f85e463..0000000000 --- a/assets/js/easy-ui/themes/metro/accordion.css +++ /dev/null @@ -1,89 +0,0 @@ -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #fff; - border-color: #ddd; -} -.accordion .accordion-header { - background: #ffffff; - filter: none; -} -.accordion .accordion-header-selected { - background: #CCE6FF; -} -.accordion .accordion-header-selected .panel-title { - color: #000; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #fff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #ddd; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #fff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #ddd; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #fff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #ddd; -} diff --git a/assets/js/easy-ui/themes/metro/calendar.css b/assets/js/easy-ui/themes/metro/calendar.css deleted file mode 100644 index 42f7366132..0000000000 --- a/assets/js/easy-ui/themes/metro/calendar.css +++ /dev/null @@ -1,202 +0,0 @@ -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-body th, -.calendar-menu-month { - color: #919191; -} -.calendar-day { - color: #444; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #ddd; -} -.calendar { - border-color: #ddd; -} -.calendar-header { - background: #ffffff; -} -.calendar-body, -.calendar-menu { - background: #fff; -} -.calendar-body th { - background: #fff; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #E6E6E6; - color: #444; -} -.calendar-hover { - border: 1px solid #ddd; - padding: 0; -} -.calendar-selected { - background-color: #CCE6FF; - color: #000; - border: 1px solid #99cdff; - padding: 0; -} diff --git a/assets/js/easy-ui/themes/metro/combo.css b/assets/js/easy-ui/themes/metro/combo.css deleted file mode 100644 index 2e89071835..0000000000 --- a/assets/js/easy-ui/themes/metro/combo.css +++ /dev/null @@ -1,35 +0,0 @@ -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #fff; -} -.combo-arrow { - background-color: #ffffff; -} -.combo-arrow-hover { - background-color: #E6E6E6; -} -.combo-arrow:hover { - background-color: #E6E6E6; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/metro/combobox.css b/assets/js/easy-ui/themes/metro/combobox.css deleted file mode 100644 index eaabb31c0e..0000000000 --- a/assets/js/easy-ui/themes/metro/combobox.css +++ /dev/null @@ -1,39 +0,0 @@ -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #E6E6E6; - color: #444; -} -.combobox-item-selected { - background-color: #CCE6FF; - color: #000; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} diff --git a/assets/js/easy-ui/themes/metro/datagrid.css b/assets/js/easy-ui/themes/metro/datagrid.css deleted file mode 100644 index 95d409f296..0000000000 --- a/assets/js/easy-ui/themes/metro/datagrid.css +++ /dev/null @@ -1,282 +0,0 @@ -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #ddd; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #fff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #ffffff; -} -.datagrid-cell-rownumber { - color: #444; -} -.datagrid-resize-proxy { - background: #b3b3b3; -} -.datagrid-mask { - background: #eee; -} -.datagrid-mask-msg { - border-color: #ddd; -} -.datagrid-toolbar, -.datagrid-pager { - background: #fff; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #ddd; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ddd; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #444; - border-collapse: separate; -} -.datagrid-row-alt { - background: #f5f5f5; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #E6E6E6; - color: #444; - cursor: default; -} -.datagrid-row-selected { - background: #CCE6FF; - color: #000; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} diff --git a/assets/js/easy-ui/themes/metro/datalist.css b/assets/js/easy-ui/themes/metro/datalist.css deleted file mode 100644 index 8a7f94989e..0000000000 --- a/assets/js/easy-ui/themes/metro/datalist.css +++ /dev/null @@ -1,95 +0,0 @@ -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #ffffff; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ddd; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #444; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ddd; -} -.m-list li>a:hover { - background: #E6E6E6; - color: #444; -} -.m-list .m-list-group { - padding: 0 4px; -} diff --git a/assets/js/easy-ui/themes/metro/datebox.css b/assets/js/easy-ui/themes/metro/datebox.css deleted file mode 100644 index 0a235958b0..0000000000 --- a/assets/js/easy-ui/themes/metro/datebox.css +++ /dev/null @@ -1,36 +0,0 @@ -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #fff; -} -.datebox-button a { - color: #777; -} diff --git a/assets/js/easy-ui/themes/metro/dialog.css b/assets/js/easy-ui/themes/metro/dialog.css deleted file mode 100644 index 373747925e..0000000000 --- a/assets/js/easy-ui/themes/metro/dialog.css +++ /dev/null @@ -1,47 +0,0 @@ -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #fff; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #ddd #ddd #ddd #ddd; -} -.dialog-button { - border-color: #ddd #ddd #ddd #ddd; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #fff; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} diff --git a/assets/js/easy-ui/themes/metro/easyui.css b/assets/js/easy-ui/themes/metro/easyui.css deleted file mode 100644 index 9f31359c98..0000000000 --- a/assets/js/easy-ui/themes/metro/easyui.css +++ /dev/null @@ -1,3166 +0,0 @@ -.panel { - overflow: hidden; - text-align: left; - margin: 0; - border: 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.panel-header, -.panel-body { - border-width: 1px; - border-style: solid; -} -.panel-header { - padding: 5px; - position: relative; -} -.panel-title { - background: url('images/blank.gif') no-repeat; -} -.panel-header-noborder { - border-width: 0 0 1px 0; -} -.panel-body { - overflow: auto; - border-top-width: 0; - padding: 0; -} -.panel-body-noheader { - border-top-width: 1px; -} -.panel-body-noborder { - border-width: 0px; -} -.panel-body-nobottom { - border-bottom-width: 0; -} -.panel-with-icon { - padding-left: 18px; -} -.panel-icon, -.panel-tool { - position: absolute; - top: 50%; - margin-top: -8px; - height: 16px; - overflow: hidden; -} -.panel-icon { - left: 5px; - width: 16px; -} -.panel-tool { - right: 5px; - width: auto; -} -.panel-tool a { - display: inline-block; - width: 16px; - height: 16px; - opacity: 0.6; - filter: alpha(opacity=60); - margin: 0 0 0 2px; - vertical-align: top; -} -.panel-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - background-color: #E6E6E6; - -moz-border-radius: -2px -2px -2px -2px; - -webkit-border-radius: -2px -2px -2px -2px; - border-radius: -2px -2px -2px -2px; -} -.panel-loading { - padding: 11px 0px 10px 30px; -} -.panel-noscroll { - overflow: hidden; -} -.panel-fit, -.panel-fit body { - height: 100%; - margin: 0; - padding: 0; - border: 0; - overflow: hidden; -} -.panel-loading { - background: url('images/loading.gif') no-repeat 10px 10px; -} -.panel-tool-close { - background: url('images/panel_tools.png') no-repeat -16px 0px; -} -.panel-tool-min { - background: url('images/panel_tools.png') no-repeat 0px 0px; -} -.panel-tool-max { - background: url('images/panel_tools.png') no-repeat 0px -16px; -} -.panel-tool-restore { - background: url('images/panel_tools.png') no-repeat -16px -16px; -} -.panel-tool-collapse { - background: url('images/panel_tools.png') no-repeat -32px 0; -} -.panel-tool-expand { - background: url('images/panel_tools.png') no-repeat -32px -16px; -} -.panel-header, -.panel-body { - border-color: #ddd; -} -.panel-header { - background-color: #ffffff; -} -.panel-body { - background-color: #fff; - color: #444; - font-size: 12px; -} -.panel-title { - font-size: 12px; - font-weight: bold; - color: #777; - height: 16px; - line-height: 16px; -} -.panel-footer { - border: 1px solid #ddd; - overflow: hidden; - background: #fff; -} -.panel-footer-noborder { - border-width: 1px 0 0 0; -} -.panel-hleft, -.panel-hright { - position: relative; -} -.panel-hleft>.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #fff; - border-color: #ddd; -} -.accordion .accordion-header { - background: #ffffff; - filter: none; -} -.accordion .accordion-header-selected { - background: #CCE6FF; -} -.accordion .accordion-header-selected .panel-title { - color: #000; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #fff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #ddd; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #fff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #ddd; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #fff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #ddd; -} -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.window-shadow { - background: #eee; - -moz-box-shadow: 2px 2px 3px #ededed; - -webkit-box-shadow: 2px 2px 3px #ededed; - box-shadow: 2px 2px 3px #ededed; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #ddd; -} -.window { - background-color: #ffffff; -} -.window-proxy { - border: 1px dashed #ddd; -} -.window-proxy-mask, -.window-mask { - background: #eee; -} -.window .panel-footer { - border: 1px solid #ddd; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #fff; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #ddd #ddd #ddd #ddd; -} -.dialog-button { - border-color: #ddd #ddd #ddd #ddd; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #fff; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} -.l-btn { - text-decoration: none; - display: inline-block; - overflow: hidden; - margin: 0; - padding: 0; - cursor: pointer; - outline: none; - text-align: center; - vertical-align: middle; - line-height: normal; -} -.l-btn-plain { - border-width: 0; - padding: 1px; -} -.l-btn-left { - display: inline-block; - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - vertical-align: top; -} -.l-btn-text { - display: inline-block; - vertical-align: top; - width: auto; - line-height: 24px; - font-size: 12px; - padding: 0; - margin: 0 4px; -} -.l-btn-icon { - display: inline-block; - width: 16px; - height: 16px; - line-height: 16px; - position: absolute; - top: 50%; - margin-top: -8px; - font-size: 1px; -} -.l-btn span span .l-btn-empty { - display: inline-block; - margin: 0; - width: 16px; - height: 24px; - font-size: 1px; - vertical-align: top; -} -.l-btn span .l-btn-icon-left { - padding: 0 0 0 20px; - background-position: left center; -} -.l-btn span .l-btn-icon-right { - padding: 0 20px 0 0; - background-position: right center; -} -.l-btn-icon-left .l-btn-text { - margin: 0 4px 0 24px; -} -.l-btn-icon-left .l-btn-icon { - left: 4px; -} -.l-btn-icon-right .l-btn-text { - margin: 0 24px 0 4px; -} -.l-btn-icon-right .l-btn-icon { - right: 4px; -} -.l-btn-icon-top .l-btn-text { - margin: 20px 4px 0 4px; -} -.l-btn-icon-top .l-btn-icon { - top: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-icon-bottom .l-btn-text { - margin: 0 4px 20px 4px; -} -.l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-left .l-btn-empty { - margin: 0 4px; - width: 16px; -} -.l-btn-plain:hover { - padding: 0; -} -.l-btn-focus { - outline: #0000FF dotted thin; -} -.l-btn-large .l-btn-text { - line-height: 40px; -} -.l-btn-large .l-btn-icon { - width: 32px; - height: 32px; - line-height: 32px; - margin-top: -16px; -} -.l-btn-large .l-btn-icon-left .l-btn-text { - margin-left: 40px; -} -.l-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.l-btn-large .l-btn-icon-top .l-btn-text { - margin-top: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-top .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-left .l-btn-empty { - margin: 0 4px; - width: 32px; -} -.l-btn { - color: #777; - background: #ffffff; - background-repeat: repeat-x; - border: 1px solid #dddddd; - background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.l-btn:hover { - background: #E6E6E6; - color: #444; - border: 1px solid #ddd; - filter: none; -} -.l-btn-plain { - background: transparent; - border-width: 0; - filter: none; -} -.l-btn-outline { - border-width: 1px; - border-color: #ddd; - padding: 0; -} -.l-btn-plain:hover { - background: #E6E6E6; - color: #444; - border: 1px solid #ddd; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.l-btn-disabled, -.l-btn-disabled:hover { - opacity: 0.5; - cursor: default; - background: #ffffff; - color: #777; - background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); -} -.l-btn-disabled .l-btn-text, -.l-btn-disabled .l-btn-icon { - filter: alpha(opacity=50); -} -.l-btn-plain-disabled, -.l-btn-plain-disabled:hover { - background: transparent; - filter: alpha(opacity=50); -} -.l-btn-selected, -.l-btn-selected:hover { - background: #ddd; - filter: none; -} -.l-btn-plain-selected, -.l-btn-plain-selected:hover { - background: #ddd; -} -.textbox { - position: relative; - border: 1px solid #ddd; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #c4c4c4; - -moz-box-shadow: 0 0 3px 0 #ddd; - -webkit-box-shadow: 0 0 3px 0 #ddd; - box-shadow: 0 0 3px 0 #ddd; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #fff; -} -.combo-arrow { - background-color: #ffffff; -} -.combo-arrow-hover { - background-color: #E6E6E6; -} -.combo-arrow:hover { - background-color: #E6E6E6; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #E6E6E6; - color: #444; -} -.combobox-item-selected { - background-color: #CCE6FF; - color: #000; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; - background: #E6E6E6; - color: #444; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} -.layout { - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - z-index: 0; -} -.layout-panel { - position: absolute; - overflow: hidden; -} -.layout-body { - min-width: 1px; - min-height: 1px; -} -.layout-panel-east, -.layout-panel-west { - z-index: 2; -} -.layout-panel-north, -.layout-panel-south { - z-index: 3; -} -.layout-expand { - position: absolute; - padding: 0px; - font-size: 1px; - cursor: pointer; - z-index: 1; -} -.layout-expand .panel-header, -.layout-expand .panel-body { - background: transparent; - filter: none; - overflow: hidden; -} -.layout-expand .panel-header { - border-bottom-width: 0px; -} -.layout-expand .panel-body { - position: relative; -} -.layout-expand .panel-body .panel-icon { - margin-top: 0; - top: 0; - left: 50%; - margin-left: -8px; -} -.layout-expand-west .panel-header .panel-icon, -.layout-expand-east .panel-header .panel-icon { - display: none; -} -.layout-expand-title { - position: absolute; - top: 0; - left: 21px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.layout-expand-title-up { - position: absolute; - top: 0; - left: 0; - text-align: right; - padding-left: 5px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 0; -} -.layout-expand-with-icon { - top: 18px; -} -.layout-expand .panel-body-noheader .layout-expand-title, -.layout-expand .panel-body-noheader .panel-icon { - top: 5px; -} -.layout-expand .panel-body-noheader .layout-expand-with-icon { - top: 23px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - position: absolute; - font-size: 1px; - display: none; - z-index: 5; -} -.layout-split-proxy-h { - width: 5px; - cursor: e-resize; -} -.layout-split-proxy-v { - height: 5px; - cursor: n-resize; -} -.layout-mask { - position: absolute; - background: #fafafa; - filter: alpha(opacity=10); - opacity: 0.10; - z-index: 4; -} -.layout-button-up { - background: url('images/layout_arrows.png') no-repeat -16px -16px; -} -.layout-button-down { - background: url('images/layout_arrows.png') no-repeat -16px 0; -} -.layout-button-left { - background: url('images/layout_arrows.png') no-repeat 0 0; -} -.layout-button-right { - background: url('images/layout_arrows.png') no-repeat 0 -16px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - background-color: #b3b3b3; -} -.layout-split-north { - border-bottom: 5px solid #fff; -} -.layout-split-south { - border-top: 5px solid #fff; -} -.layout-split-east { - border-left: 5px solid #fff; -} -.layout-split-west { - border-right: 5px solid #fff; -} -.layout-expand { - background-color: #ffffff; -} -.layout-expand-over { - background-color: #ffffff; -} -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 0px 0px 0 0; - -webkit-border-radius: 0px 0px 0 0; - border-radius: 0px 0px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 0px 0px; - -webkit-border-radius: 0 0 0px 0px; - border-radius: 0 0 0px 0px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0px 0 0 0px; - -webkit-border-radius: 0px 0 0 0px; - border-radius: 0px 0 0 0px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 0px 0px 0; - -webkit-border-radius: 0 0px 0px 0; - border-radius: 0 0px 0px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #ffffff url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #ffffff url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #E6E6E6; - color: #444; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #fff; - color: #777; -} -.tabs li a.tabs-inner { - color: #777; - background-color: #ffffff; -} -.tabs-header, -.tabs-tool { - background-color: #ffffff; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #ddd; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #E6E6E6; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #fff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #fff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #fff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #fff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #CCE6FF; - color: #000; - filter: none; - border-color: #ddd; -} -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #ddd; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #fff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #ffffff; -} -.datagrid-cell-rownumber { - color: #444; -} -.datagrid-resize-proxy { - background: #b3b3b3; -} -.datagrid-mask { - background: #eee; -} -.datagrid-mask-msg { - border-color: #ddd; -} -.datagrid-toolbar, -.datagrid-pager { - background: #fff; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #ddd; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ddd; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #444; - border-collapse: separate; -} -.datagrid-row-alt { - background: #f5f5f5; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #E6E6E6; - color: #444; - cursor: default; -} -.datagrid-row-selected { - background: #CCE6FF; - color: #000; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #ddd; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #ffffff; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #ddd; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #ffffff; -} -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #ffffff; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ddd; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #444; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ddd; -} -.m-list li>a:hover { - background: #E6E6E6; - color: #444; -} -.m-list .m-list-group { - padding: 0 4px; -} -.pagination { - zoom: 1; -} -.pagination table { - float: left; - height: 30px; -} -.pagination td { - border: 0; -} -.pagination-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ddd; - border-right: 1px solid #fff; - margin: 3px 1px; -} -.pagination .pagination-num { - border-width: 1px; - border-style: solid; - margin: 0 2px; - padding: 2px; - width: 2em; - height: auto; -} -.pagination-page-list { - margin: 0px 6px; - padding: 1px 2px; - width: auto; - height: auto; - border-width: 1px; - border-style: solid; -} -.pagination-info { - float: right; - margin: 0 6px; - padding: 0; - height: 30px; - line-height: 30px; - font-size: 12px; -} -.pagination span { - font-size: 12px; -} -.pagination-link .l-btn-text { - width: 24px; - text-align: center; - margin: 0; -} -.pagination-first { - background: url('images/pagination_icons.png') no-repeat 0 center; -} -.pagination-prev { - background: url('images/pagination_icons.png') no-repeat -16px center; -} -.pagination-next { - background: url('images/pagination_icons.png') no-repeat -32px center; -} -.pagination-last { - background: url('images/pagination_icons.png') no-repeat -48px center; -} -.pagination-load { - background: url('images/pagination_icons.png') no-repeat -64px center; -} -.pagination-loading { - background: url('images/loading.gif') no-repeat center center; -} -.pagination-page-list, -.pagination .pagination-num { - border-color: #ddd; -} -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.calendar-body th, -.calendar-menu-month { - color: #919191; -} -.calendar-day { - color: #444; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #ddd; -} -.calendar { - border-color: #ddd; -} -.calendar-header { - background: #ffffff; -} -.calendar-body, -.calendar-menu { - background: #fff; -} -.calendar-body th { - background: #fff; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #E6E6E6; - color: #444; -} -.calendar-hover { - border: 1px solid #ddd; - padding: 0; -} -.calendar-selected { - background-color: #CCE6FF; - color: #000; - border: 1px solid #99cdff; - padding: 0; -} -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #fff; -} -.datebox-button a { - color: #777; -} -.spinner-arrow { - background-color: #ffffff; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #777; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #E6E6E6; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #E6E6E6; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #ffffff; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 0px 0 0 0px; - -webkit-border-radius: 0px 0 0 0px; - border-radius: 0px 0 0 0px; -} -.progressbar { - border-color: #ddd; -} -.progressbar-text { - color: #444; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #CCE6FF; - color: #000; -} -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #ffffff; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 0px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #ddd; - background: #ffffff; -} -.slider-rule span { - border-color: #ddd; -} -.slider-rulelabel span { - color: #444; -} -.menu { - position: absolute; - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.menu-inline { - position: relative; -} -.menu-item { - position: relative; - margin: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.menu-text { - height: 20px; - line-height: 20px; - float: left; - padding-left: 28px; -} -.menu-icon { - position: absolute; - width: 16px; - height: 16px; - left: 2px; - top: 50%; - margin-top: -8px; -} -.menu-rightarrow { - position: absolute; - width: 16px; - height: 16px; - right: 0; - top: 50%; - margin-top: -8px; -} -.menu-line { - position: absolute; - left: 26px; - top: 0; - height: 2000px; - font-size: 1px; -} -.menu-sep { - margin: 3px 0px 3px 25px; - font-size: 1px; -} -.menu-noline .menu-line { - display: none; -} -.menu-noline .menu-sep { - margin-left: 0; - margin-right: 0; -} -.menu-active { - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.menu-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -.menu-text, -.menu-text span { - font-size: 12px; -} -.menu-shadow { - position: absolute; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; - background: #eee; - -moz-box-shadow: 2px 2px 3px #ededed; - -webkit-box-shadow: 2px 2px 3px #ededed; - box-shadow: 2px 2px 3px #ededed; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.menu-rightarrow { - background: url('images/menu_arrows.png') no-repeat -32px center; -} -.menu-line { - border-left: 1px solid #ddd; - border-right: 1px solid #fff; -} -.menu-sep { - border-top: 1px solid #ddd; - border-bottom: 1px solid #fff; -} -.menu { - background-color: #ffffff; - border-color: #ddd; - color: #444; -} -.menu-content { - background: #fff; -} -.menu-item { - border-color: transparent; - _border-color: #ffffff; -} -.menu-active { - border-color: #ddd; - color: #444; - background: #E6E6E6; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #444; -} -.m-btn-downarrow, -.s-btn-downarrow { - display: inline-block; - position: absolute; - width: 16px; - height: 16px; - font-size: 1px; - right: 0; - top: 50%; - margin-top: -8px; -} -.m-btn-active, -.s-btn-active { - background: #E6E6E6; - color: #444; - border: 1px solid #ddd; - filter: none; -} -.m-btn-plain-active, -.s-btn-plain-active { - background: transparent; - padding: 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.m-btn .l-btn-left .l-btn-text { - margin-right: 20px; -} -.m-btn .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.m-btn .l-btn-icon-right .l-btn-icon { - right: 20px; -} -.m-btn .l-btn-icon-top .l-btn-text { - margin-right: 4px; - margin-bottom: 14px; -} -.m-btn .l-btn-icon-bottom .l-btn-text { - margin-right: 4px; - margin-bottom: 34px; -} -.m-btn .l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 20px; -} -.m-btn .l-btn-icon-top .m-btn-downarrow, -.m-btn .l-btn-icon-bottom .m-btn-downarrow { - top: auto; - bottom: 0px; - left: 50%; - margin-left: -8px; -} -.m-btn-line { - display: inline-block; - position: absolute; - font-size: 1px; - display: none; -} -.m-btn .l-btn-left .m-btn-line { - right: 0; - width: 16px; - height: 500px; - border-style: solid; - border-color: #b3b3b3; - border-width: 0 0 0 1px; -} -.m-btn .l-btn-icon-top .m-btn-line, -.m-btn .l-btn-icon-bottom .m-btn-line { - left: 0; - bottom: 0; - width: 500px; - height: 16px; - border-width: 1px 0 0 0; -} -.m-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 56px; -} -.m-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 50px; -} -.m-btn-downarrow, -.s-btn-downarrow { - background: url('images/menu_arrows.png') no-repeat 0 center; -} -.m-btn-plain-active, -.s-btn-plain-active { - border-color: #ddd; - background-color: #E6E6E6; - color: #444; -} -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #b3b3b3; - border-width: 0 0 0 1px; -} -.messager-body { - padding: 10px 10px 30px 10px; - overflow: auto; -} -.messager-button { - text-align: center; - padding: 5px; -} -.messager-button .l-btn { - width: 70px; -} -.messager-icon { - float: left; - width: 32px; - height: 32px; - margin: 0 10px 10px 0; -} -.messager-error { - background: url('images/messager_icons.png') no-repeat scroll -64px 0; -} -.messager-info { - background: url('images/messager_icons.png') no-repeat scroll 0 0; -} -.messager-question { - background: url('images/messager_icons.png') no-repeat scroll -32px 0; -} -.messager-warning { - background: url('images/messager_icons.png') no-repeat scroll -96px 0; -} -.messager-progress { - padding: 10px; -} -.messager-p-msg { - margin-bottom: 5px; -} -.messager-body .messager-input { - width: 100%; - padding: 4px 0; - outline-style: none; - border: 1px solid #ddd; -} -.window-thinborder .messager-button { - padding-bottom: 8px; -} -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #ddd; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #fff; - color: #444; - border-color: #ddd; -} -.tree-node-hover { - background: #E6E6E6; - color: #444; -} -.tree-node-selected { - background: #CCE6FF; - color: #000; -} -.tree-node-hidden { - display: none; -} -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #fff; - border-color: #ddd; - color: #444; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #ddd; -} -.tooltip-right .tooltip-arrow { - border-right-color: #fff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #ddd; -} -.tooltip-left .tooltip-arrow { - border-left-color: #fff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #ddd; -} -.tooltip-top .tooltip-arrow { - border-top-color: #fff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #ddd; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #fff; -} -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #dddddd; - border: 1px solid #dddddd; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.switchbutton-on { - background: #CCE6FF; - color: #000; -} -.switchbutton-off { - background-color: #fff; - color: #444; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 0px 0 0 0px; - -webkit-border-radius: 0px 0 0 0px; - border-radius: 0px 0 0 0px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 0px 0px 0; - -webkit-border-radius: 0 0px 0px 0; - border-radius: 0 0px 0px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #fff; - color: #444; - border: 1px solid #dddddd; - -moz-box-shadow: 0 0 3px 0 #dddddd; - -webkit-box-shadow: 0 0 3px 0 #dddddd; - box-shadow: 0 0 3px 0 #dddddd; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/metro/filebox.css b/assets/js/easy-ui/themes/metro/filebox.css deleted file mode 100644 index c6bac66315..0000000000 --- a/assets/js/easy-ui/themes/metro/filebox.css +++ /dev/null @@ -1,20 +0,0 @@ -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/metro/images/accordion_arrows.png b/assets/js/easy-ui/themes/metro/images/accordion_arrows.png deleted file mode 100755 index 720835f69c96c17ec32a20b03ac9753aa59b7f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYeRK2H*V@SoVUT_Y-nKxaI`{RC0WjSLJ&w^R(C-|JQTojLXc1&{d*_z{$ jW+oTMdQ(F|jDg|L>K${_)^zO#I)%a0)z4*}Q$iB}_fAN- diff --git a/assets/js/easy-ui/themes/metro/images/blank.gif b/assets/js/easy-ui/themes/metro/images/blank.gif deleted file mode 100755 index 1d11fa9ada9e93505b3d736acb204083f45d5fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx diff --git a/assets/js/easy-ui/themes/metro/images/calendar_arrows.png b/assets/js/easy-ui/themes/metro/images/calendar_arrows.png deleted file mode 100755 index 430c4ad685b8c0068ecb7e3cbef74f493a84ad0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQYD@)jv*Dd-cCEn)nLHm{QbZE z+q@uWwandfr?Jb4eDYYmB3UAt=OO2Vt+MMT&+KD%&6hZDt!FBpej;sEpMN69^tKl% zp6y<4_lG^P z=;=eQ4Vs74-2)Ua&f1tcVdk$#{GPKe@&?ZMHmT&SMw?IV&w7)}ixLbB3d$Zg{&KGb P8OPx1>gTe~DWM4fp>5!O@Gl{c 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 diff --git a/assets/js/easy-ui/themes/metro/images/loading.gif b/assets/js/easy-ui/themes/metro/images/loading.gif deleted file mode 100755 index 68f01d04813c1f622810864a3aaa04b4a17ac8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 diff --git a/assets/js/easy-ui/themes/metro/images/menu_arrows.png b/assets/js/easy-ui/themes/metro/images/menu_arrows.png deleted file mode 100755 index b986842e7e4044caed18edbcb4b376a4bb915623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 diff --git a/assets/js/easy-ui/themes/metro/images/messager_icons.png b/assets/js/easy-ui/themes/metro/images/messager_icons.png deleted file mode 100755 index 62c18c135860351063ebaabe8c0f4df7664b8f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6116 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 G5}E*M5;#5p diff --git a/assets/js/easy-ui/themes/metro/images/passwordbox_open.png b/assets/js/easy-ui/themes/metro/images/passwordbox_open.png deleted file mode 100644 index d328891f6a18ea703fd25a47b228df9cb13b4744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C~y}*jFF6I{2&m zf8fW~lSf{d9=Ouc<(SoRr6$ox=6dW5rxOB`TRe8 z#G%R{$Nj@Z)5m5kM@2RMITi_;Npmte=_#;rBych_7F`xqKKy}=f%DM}Q4`(M(}DIf Nc)I$ztaD0e0su|qH(3Ax diff --git a/assets/js/easy-ui/themes/metro/images/searchbox_button.png b/assets/js/easy-ui/themes/metro/images/searchbox_button.png deleted file mode 100755 index 6dd1931589b453f6cc9772fd1851d8705d6b6631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz diff --git a/assets/js/easy-ui/themes/metro/images/spinner_arrows.png b/assets/js/easy-ui/themes/metro/images/spinner_arrows.png deleted file mode 100644 index 7c2df483dbb30dfb3a51332c03fe6f0c229c0547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4Dgeh3R zJz6gy$J;RRRRiNz`7}$-z5~nWg=}UsVYp!HpQ#{_&8An~S<1fjm*zKyrHmF27#+^4 x`1rk&EZfSkR8C?on>%wt3;O{L3Dzy_3@=Og7TEqO`UJFx!PC{xWt~$(69D$UE$jdQ diff --git a/assets/js/easy-ui/themes/metro/images/tabs_icons.png b/assets/js/easy-ui/themes/metro/images/tabs_icons.png deleted file mode 100755 index 4d29966d7154338a9e2e358821a5f72655eba43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq+&f?978H@B_~L*E^a7uNPG49 z|BoM6E;$_tDnm{r-UW|t3f!- diff --git a/assets/js/easy-ui/themes/metro/images/tagbox_icons.png b/assets/js/easy-ui/themes/metro/images/tagbox_icons.png deleted file mode 100644 index bd02e2d817c6b7c4e2a105919e9a89cc0a1d577f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel&`0YV@SoV>_0CQASS diff --git a/assets/js/easy-ui/themes/metro/images/tree_icons.png b/assets/js/easy-ui/themes/metro/images/tree_icons.png deleted file mode 100755 index e9be4f3a9965e49a4e4078f8c53f486d761a7468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3115 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 diff --git a/assets/js/easy-ui/themes/metro/images/validatebox_warning.png b/assets/js/easy-ui/themes/metro/images/validatebox_warning.png deleted file mode 100755 index 2b3d4f05babf3f82b146350e96570fac02075de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} diff --git a/assets/js/easy-ui/themes/metro/passwordbox.css b/assets/js/easy-ui/themes/metro/passwordbox.css deleted file mode 100644 index 92c9ce586b..0000000000 --- a/assets/js/easy-ui/themes/metro/passwordbox.css +++ /dev/null @@ -1,6 +0,0 @@ -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} diff --git a/assets/js/easy-ui/themes/metro/progressbar.css b/assets/js/easy-ui/themes/metro/progressbar.css deleted file mode 100755 index 7721f1bffe..0000000000 --- a/assets/js/easy-ui/themes/metro/progressbar.css +++ /dev/null @@ -1,32 +0,0 @@ -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 0px 0 0 0px; - -webkit-border-radius: 0px 0 0 0px; - border-radius: 0px 0 0 0px; -} -.progressbar { - border-color: #ddd; -} -.progressbar-text { - color: #444; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #CCE6FF; - color: #000; -} diff --git a/assets/js/easy-ui/themes/metro/propertygrid.css b/assets/js/easy-ui/themes/metro/propertygrid.css deleted file mode 100755 index f5ae0c4e3d..0000000000 --- a/assets/js/easy-ui/themes/metro/propertygrid.css +++ /dev/null @@ -1,28 +0,0 @@ -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #ddd; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #ffffff; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #ddd; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #ffffff; -} diff --git a/assets/js/easy-ui/themes/metro/searchbox.css b/assets/js/easy-ui/themes/metro/searchbox.css deleted file mode 100644 index 2d3af1c153..0000000000 --- a/assets/js/easy-ui/themes/metro/searchbox.css +++ /dev/null @@ -1,61 +0,0 @@ -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #ffffff; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} diff --git a/assets/js/easy-ui/themes/metro/slider.css b/assets/js/easy-ui/themes/metro/slider.css deleted file mode 100755 index 42ddc17757..0000000000 --- a/assets/js/easy-ui/themes/metro/slider.css +++ /dev/null @@ -1,101 +0,0 @@ -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 0px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #ddd; - background: #ffffff; -} -.slider-rule span { - border-color: #ddd; -} -.slider-rulelabel span { - color: #444; -} diff --git a/assets/js/easy-ui/themes/metro/spinner.css b/assets/js/easy-ui/themes/metro/spinner.css deleted file mode 100644 index 9179f9b070..0000000000 --- a/assets/js/easy-ui/themes/metro/spinner.css +++ /dev/null @@ -1,58 +0,0 @@ -.spinner-arrow { - background-color: #ffffff; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #777; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #E6E6E6; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #E6E6E6; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #ffffff; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} diff --git a/assets/js/easy-ui/themes/metro/splitbutton.css b/assets/js/easy-ui/themes/metro/splitbutton.css deleted file mode 100755 index 3451138c78..0000000000 --- a/assets/js/easy-ui/themes/metro/splitbutton.css +++ /dev/null @@ -1,12 +0,0 @@ -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #b3b3b3; - border-width: 0 0 0 1px; -} diff --git a/assets/js/easy-ui/themes/metro/switchbutton.css b/assets/js/easy-ui/themes/metro/switchbutton.css deleted file mode 100644 index 351083eb9f..0000000000 --- a/assets/js/easy-ui/themes/metro/switchbutton.css +++ /dev/null @@ -1,77 +0,0 @@ -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #dddddd; - border: 1px solid #dddddd; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.switchbutton-on { - background: #CCE6FF; - color: #000; -} -.switchbutton-off { - background-color: #fff; - color: #444; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 0px 0 0 0px; - -webkit-border-radius: 0px 0 0 0px; - border-radius: 0px 0 0 0px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 0px 0px 0; - -webkit-border-radius: 0 0px 0px 0; - border-radius: 0 0px 0px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #fff; - color: #444; - border: 1px solid #dddddd; - -moz-box-shadow: 0 0 3px 0 #dddddd; - -webkit-box-shadow: 0 0 3px 0 #dddddd; - box-shadow: 0 0 3px 0 #dddddd; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/metro/tabs.css b/assets/js/easy-ui/themes/metro/tabs.css deleted file mode 100644 index e42fd50a14..0000000000 --- a/assets/js/easy-ui/themes/metro/tabs.css +++ /dev/null @@ -1,377 +0,0 @@ -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 0px 0px 0 0; - -webkit-border-radius: 0px 0px 0 0; - border-radius: 0px 0px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 0px 0px; - -webkit-border-radius: 0 0 0px 0px; - border-radius: 0 0 0px 0px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0px 0 0 0px; - -webkit-border-radius: 0px 0 0 0px; - border-radius: 0px 0 0 0px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 0px 0px 0; - -webkit-border-radius: 0 0px 0px 0; - border-radius: 0 0px 0px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #ffffff url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #ffffff url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #E6E6E6; - color: #444; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #fff; - color: #777; -} -.tabs li a.tabs-inner { - color: #777; - background-color: #ffffff; -} -.tabs-header, -.tabs-tool { - background-color: #ffffff; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #ddd; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #E6E6E6; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #fff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #fff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #fff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #fff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #CCE6FF; - color: #000; - filter: none; - border-color: #ddd; -} diff --git a/assets/js/easy-ui/themes/metro/tagbox.css b/assets/js/easy-ui/themes/metro/tagbox.css deleted file mode 100644 index 7c6fd15f89..0000000000 --- a/assets/js/easy-ui/themes/metro/tagbox.css +++ /dev/null @@ -1,44 +0,0 @@ -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; - background: #E6E6E6; - color: #444; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} diff --git a/assets/js/easy-ui/themes/metro/textbox.css b/assets/js/easy-ui/themes/metro/textbox.css deleted file mode 100644 index 53f08dd8fd..0000000000 --- a/assets/js/easy-ui/themes/metro/textbox.css +++ /dev/null @@ -1,139 +0,0 @@ -.textbox { - position: relative; - border: 1px solid #ddd; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #c4c4c4; - -moz-box-shadow: 0 0 3px 0 #ddd; - -webkit-box-shadow: 0 0 3px 0 #ddd; - box-shadow: 0 0 3px 0 #ddd; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} diff --git a/assets/js/easy-ui/themes/metro/tooltip.css b/assets/js/easy-ui/themes/metro/tooltip.css deleted file mode 100644 index b8f955c2b1..0000000000 --- a/assets/js/easy-ui/themes/metro/tooltip.css +++ /dev/null @@ -1,103 +0,0 @@ -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #fff; - border-color: #ddd; - color: #444; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #ddd; -} -.tooltip-right .tooltip-arrow { - border-right-color: #fff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #ddd; -} -.tooltip-left .tooltip-arrow { - border-left-color: #fff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #ddd; -} -.tooltip-top .tooltip-arrow { - border-top-color: #fff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #ddd; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #fff; -} diff --git a/assets/js/easy-ui/themes/metro/tree.css b/assets/js/easy-ui/themes/metro/tree.css deleted file mode 100644 index 52892a1362..0000000000 --- a/assets/js/easy-ui/themes/metro/tree.css +++ /dev/null @@ -1,161 +0,0 @@ -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #ddd; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #fff; - color: #444; - border-color: #ddd; -} -.tree-node-hover { - background: #E6E6E6; - color: #444; -} -.tree-node-selected { - background: #CCE6FF; - color: #000; -} -.tree-node-hidden { - display: none; -} diff --git a/assets/js/easy-ui/themes/metro/validatebox.css b/assets/js/easy-ui/themes/metro/validatebox.css deleted file mode 100755 index 1fc3ad64e4..0000000000 --- a/assets/js/easy-ui/themes/metro/validatebox.css +++ /dev/null @@ -1,5 +0,0 @@ -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} diff --git a/assets/js/easy-ui/themes/metro/window.css b/assets/js/easy-ui/themes/metro/window.css deleted file mode 100644 index 7ec192ee64..0000000000 --- a/assets/js/easy-ui/themes/metro/window.css +++ /dev/null @@ -1,177 +0,0 @@ -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 0px 0px 0px 0px; - -webkit-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} -.window-shadow { - background: #eee; - -moz-box-shadow: 2px 2px 3px #ededed; - -webkit-box-shadow: 2px 2px 3px #ededed; - box-shadow: 2px 2px 3px #ededed; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #ddd; -} -.window { - background-color: #ffffff; -} -.window-proxy { - border: 1px dashed #ddd; -} -.window-proxy-mask, -.window-mask { - background: #eee; -} -.window .panel-footer { - border: 1px solid #ddd; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} From 5de1b2ccaeeeedc714f9d2c3d40312f21d814bb4 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sat, 4 Nov 2017 23:32:27 +0300 Subject: [PATCH 335/577] delete unused files --- .../js/easy-ui/themes/bootstrap/accordion.css | 89 - .../js/easy-ui/themes/bootstrap/calendar.css | 202 - assets/js/easy-ui/themes/bootstrap/combo.css | 35 - .../js/easy-ui/themes/bootstrap/combobox.css | 39 - .../js/easy-ui/themes/bootstrap/datagrid.css | 288 -- .../js/easy-ui/themes/bootstrap/datalist.css | 95 - .../js/easy-ui/themes/bootstrap/datebox.css | 36 - assets/js/easy-ui/themes/bootstrap/dialog.css | 47 - assets/js/easy-ui/themes/bootstrap/easyui.css | 3239 ----------------- .../js/easy-ui/themes/bootstrap/filebox.css | 20 - .../bootstrap/images/accordion_arrows.png | Bin 184 -> 0 bytes .../easy-ui/themes/bootstrap/images/blank.gif | Bin 43 -> 0 bytes .../bootstrap/images/calendar_arrows.png | Bin 173 -> 0 bytes .../themes/bootstrap/images/combo_arrow.png | Bin 117 -> 0 bytes .../bootstrap/images/datagrid_icons.png | Bin 307 -> 0 bytes .../themes/bootstrap/images/datebox_arrow.png | Bin 626 -> 0 bytes .../themes/bootstrap/images/layout_arrows.png | Bin 319 -> 0 bytes .../themes/bootstrap/images/linkbutton_bg.png | Bin 1274 -> 0 bytes .../themes/bootstrap/images/loading.gif | Bin 1737 -> 0 bytes .../themes/bootstrap/images/menu_arrows.png | Bin 160 -> 0 bytes .../bootstrap/images/messager_icons.png | Bin 6116 -> 0 bytes .../bootstrap/images/pagination_icons.png | Bin 628 -> 0 bytes .../themes/bootstrap/images/panel_tools.png | Bin 194 -> 0 bytes .../bootstrap/images/passwordbox_close.png | Bin 159 -> 0 bytes .../bootstrap/images/passwordbox_open.png | Bin 165 -> 0 bytes .../bootstrap/images/searchbox_button.png | Bin 813 -> 0 bytes .../themes/bootstrap/images/slider_handle.png | Bin 863 -> 0 bytes .../bootstrap/images/spinner_arrows.png | Bin 149 -> 0 bytes .../themes/bootstrap/images/tabs_icons.png | Bin 150 -> 0 bytes .../themes/bootstrap/images/tagbox_icons.png | Bin 134 -> 0 bytes .../themes/bootstrap/images/tree_icons.png | Bin 3115 -> 0 bytes .../bootstrap/images/validatebox_warning.png | Bin 921 -> 0 bytes assets/js/easy-ui/themes/bootstrap/layout.css | 150 - .../easy-ui/themes/bootstrap/linkbutton.css | 203 -- assets/js/easy-ui/themes/bootstrap/menu.css | 119 - .../easy-ui/themes/bootstrap/menubutton.css | 94 - .../js/easy-ui/themes/bootstrap/messager.css | 44 - .../js/easy-ui/themes/bootstrap/numberbox.css | 0 .../easy-ui/themes/bootstrap/pagination.css | 71 - assets/js/easy-ui/themes/bootstrap/panel.css | 265 -- .../easy-ui/themes/bootstrap/passwordbox.css | 6 - .../easy-ui/themes/bootstrap/progressbar.css | 32 - .../easy-ui/themes/bootstrap/propertygrid.css | 28 - .../js/easy-ui/themes/bootstrap/searchbox.css | 61 - assets/js/easy-ui/themes/bootstrap/slider.css | 101 - .../js/easy-ui/themes/bootstrap/spinner.css | 58 - .../easy-ui/themes/bootstrap/splitbutton.css | 12 - .../easy-ui/themes/bootstrap/switchbutton.css | 77 - assets/js/easy-ui/themes/bootstrap/tabs.css | 413 --- assets/js/easy-ui/themes/bootstrap/tagbox.css | 44 - .../js/easy-ui/themes/bootstrap/textbox.css | 139 - .../js/easy-ui/themes/bootstrap/tooltip.css | 103 - assets/js/easy-ui/themes/bootstrap/tree.css | 161 - .../easy-ui/themes/bootstrap/validatebox.css | 5 - assets/js/easy-ui/themes/bootstrap/window.css | 183 - .../js/easy-ui/themes/default/accordion.css | 89 - assets/js/easy-ui/themes/default/calendar.css | 202 - assets/js/easy-ui/themes/default/combo.css | 35 - assets/js/easy-ui/themes/default/combobox.css | 39 - assets/js/easy-ui/themes/default/datagrid.css | 288 -- assets/js/easy-ui/themes/default/datalist.css | 95 - assets/js/easy-ui/themes/default/datebox.css | 36 - assets/js/easy-ui/themes/default/dialog.css | 47 - assets/js/easy-ui/themes/default/easyui.css | 3220 ---------------- assets/js/easy-ui/themes/default/filebox.css | 20 - .../default/images/accordion_arrows.png | Bin 184 -> 0 bytes .../easy-ui/themes/default/images/blank.gif | Bin 43 -> 0 bytes .../themes/default/images/calendar_arrows.png | Bin 173 -> 0 bytes .../themes/default/images/combo_arrow.png | Bin 117 -> 0 bytes .../themes/default/images/datagrid_icons.png | Bin 307 -> 0 bytes .../themes/default/images/datebox_arrow.png | Bin 626 -> 0 bytes .../themes/default/images/layout_arrows.png | Bin 319 -> 0 bytes .../themes/default/images/linkbutton_bg.png | Bin 1274 -> 0 bytes .../easy-ui/themes/default/images/loading.gif | Bin 1737 -> 0 bytes .../themes/default/images/menu_arrows.png | Bin 160 -> 0 bytes .../themes/default/images/messager_icons.png | Bin 6116 -> 0 bytes .../default/images/pagination_icons.png | Bin 628 -> 0 bytes .../themes/default/images/panel_tools.png | Bin 852 -> 0 bytes .../default/images/passwordbox_close.png | Bin 159 -> 0 bytes .../default/images/passwordbox_open.png | Bin 165 -> 0 bytes .../default/images/searchbox_button.png | Bin 813 -> 0 bytes .../themes/default/images/slider_handle.png | Bin 863 -> 0 bytes .../themes/default/images/spinner_arrows.png | Bin 149 -> 0 bytes .../themes/default/images/tabs_icons.png | Bin 150 -> 0 bytes .../themes/default/images/tagbox_icons.png | Bin 134 -> 0 bytes .../themes/default/images/tree_icons.png | Bin 3115 -> 0 bytes .../default/images/validatebox_warning.png | Bin 921 -> 0 bytes assets/js/easy-ui/themes/default/layout.css | 150 - .../js/easy-ui/themes/default/linkbutton.css | 203 -- assets/js/easy-ui/themes/default/menu.css | 119 - .../js/easy-ui/themes/default/menubutton.css | 94 - assets/js/easy-ui/themes/default/messager.css | 44 - .../js/easy-ui/themes/default/numberbox.css | 0 .../js/easy-ui/themes/default/pagination.css | 71 - assets/js/easy-ui/themes/default/panel.css | 265 -- .../js/easy-ui/themes/default/passwordbox.css | 6 - .../js/easy-ui/themes/default/progressbar.css | 32 - .../easy-ui/themes/default/propertygrid.css | 28 - .../js/easy-ui/themes/default/searchbox.css | 61 - assets/js/easy-ui/themes/default/slider.css | 101 - assets/js/easy-ui/themes/default/spinner.css | 58 - .../js/easy-ui/themes/default/splitbutton.css | 12 - .../easy-ui/themes/default/switchbutton.css | 77 - assets/js/easy-ui/themes/default/tabs.css | 413 --- assets/js/easy-ui/themes/default/tagbox.css | 44 - assets/js/easy-ui/themes/default/textbox.css | 139 - assets/js/easy-ui/themes/default/tooltip.css | 103 - assets/js/easy-ui/themes/default/tree.css | 161 - .../js/easy-ui/themes/default/validatebox.css | 5 - assets/js/easy-ui/themes/default/window.css | 183 - 110 files changed, 12899 deletions(-) delete mode 100644 assets/js/easy-ui/themes/bootstrap/accordion.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/calendar.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/combo.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/combobox.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/datagrid.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/datalist.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/datebox.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/dialog.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/easyui.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/filebox.css delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/accordion_arrows.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/blank.gif delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/calendar_arrows.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/combo_arrow.png delete mode 100644 assets/js/easy-ui/themes/bootstrap/images/datagrid_icons.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/datebox_arrow.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/layout_arrows.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/linkbutton_bg.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/loading.gif delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/menu_arrows.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/messager_icons.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/pagination_icons.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/panel_tools.png delete mode 100644 assets/js/easy-ui/themes/bootstrap/images/passwordbox_close.png delete mode 100644 assets/js/easy-ui/themes/bootstrap/images/passwordbox_open.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/searchbox_button.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/slider_handle.png delete mode 100644 assets/js/easy-ui/themes/bootstrap/images/spinner_arrows.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/tabs_icons.png delete mode 100644 assets/js/easy-ui/themes/bootstrap/images/tagbox_icons.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/tree_icons.png delete mode 100755 assets/js/easy-ui/themes/bootstrap/images/validatebox_warning.png delete mode 100644 assets/js/easy-ui/themes/bootstrap/layout.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/linkbutton.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/menu.css delete mode 100755 assets/js/easy-ui/themes/bootstrap/menubutton.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/messager.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/numberbox.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/pagination.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/panel.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/passwordbox.css delete mode 100755 assets/js/easy-ui/themes/bootstrap/progressbar.css delete mode 100755 assets/js/easy-ui/themes/bootstrap/propertygrid.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/searchbox.css delete mode 100755 assets/js/easy-ui/themes/bootstrap/slider.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/spinner.css delete mode 100755 assets/js/easy-ui/themes/bootstrap/splitbutton.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/switchbutton.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/tabs.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/tagbox.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/textbox.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/tooltip.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/tree.css delete mode 100755 assets/js/easy-ui/themes/bootstrap/validatebox.css delete mode 100644 assets/js/easy-ui/themes/bootstrap/window.css delete mode 100644 assets/js/easy-ui/themes/default/accordion.css delete mode 100644 assets/js/easy-ui/themes/default/calendar.css delete mode 100644 assets/js/easy-ui/themes/default/combo.css delete mode 100644 assets/js/easy-ui/themes/default/combobox.css delete mode 100644 assets/js/easy-ui/themes/default/datagrid.css delete mode 100644 assets/js/easy-ui/themes/default/datalist.css delete mode 100644 assets/js/easy-ui/themes/default/datebox.css delete mode 100644 assets/js/easy-ui/themes/default/dialog.css delete mode 100644 assets/js/easy-ui/themes/default/easyui.css delete mode 100644 assets/js/easy-ui/themes/default/filebox.css delete mode 100755 assets/js/easy-ui/themes/default/images/accordion_arrows.png delete mode 100755 assets/js/easy-ui/themes/default/images/blank.gif delete mode 100755 assets/js/easy-ui/themes/default/images/calendar_arrows.png delete mode 100755 assets/js/easy-ui/themes/default/images/combo_arrow.png delete mode 100644 assets/js/easy-ui/themes/default/images/datagrid_icons.png delete mode 100755 assets/js/easy-ui/themes/default/images/datebox_arrow.png delete mode 100755 assets/js/easy-ui/themes/default/images/layout_arrows.png delete mode 100755 assets/js/easy-ui/themes/default/images/linkbutton_bg.png delete mode 100755 assets/js/easy-ui/themes/default/images/loading.gif delete mode 100755 assets/js/easy-ui/themes/default/images/menu_arrows.png delete mode 100755 assets/js/easy-ui/themes/default/images/messager_icons.png delete mode 100755 assets/js/easy-ui/themes/default/images/pagination_icons.png delete mode 100755 assets/js/easy-ui/themes/default/images/panel_tools.png delete mode 100644 assets/js/easy-ui/themes/default/images/passwordbox_close.png delete mode 100644 assets/js/easy-ui/themes/default/images/passwordbox_open.png delete mode 100755 assets/js/easy-ui/themes/default/images/searchbox_button.png delete mode 100755 assets/js/easy-ui/themes/default/images/slider_handle.png delete mode 100644 assets/js/easy-ui/themes/default/images/spinner_arrows.png delete mode 100755 assets/js/easy-ui/themes/default/images/tabs_icons.png delete mode 100644 assets/js/easy-ui/themes/default/images/tagbox_icons.png delete mode 100755 assets/js/easy-ui/themes/default/images/tree_icons.png delete mode 100755 assets/js/easy-ui/themes/default/images/validatebox_warning.png delete mode 100644 assets/js/easy-ui/themes/default/layout.css delete mode 100644 assets/js/easy-ui/themes/default/linkbutton.css delete mode 100644 assets/js/easy-ui/themes/default/menu.css delete mode 100755 assets/js/easy-ui/themes/default/menubutton.css delete mode 100644 assets/js/easy-ui/themes/default/messager.css delete mode 100644 assets/js/easy-ui/themes/default/numberbox.css delete mode 100644 assets/js/easy-ui/themes/default/pagination.css delete mode 100644 assets/js/easy-ui/themes/default/panel.css delete mode 100644 assets/js/easy-ui/themes/default/passwordbox.css delete mode 100755 assets/js/easy-ui/themes/default/progressbar.css delete mode 100755 assets/js/easy-ui/themes/default/propertygrid.css delete mode 100644 assets/js/easy-ui/themes/default/searchbox.css delete mode 100755 assets/js/easy-ui/themes/default/slider.css delete mode 100644 assets/js/easy-ui/themes/default/spinner.css delete mode 100755 assets/js/easy-ui/themes/default/splitbutton.css delete mode 100644 assets/js/easy-ui/themes/default/switchbutton.css delete mode 100644 assets/js/easy-ui/themes/default/tabs.css delete mode 100644 assets/js/easy-ui/themes/default/tagbox.css delete mode 100644 assets/js/easy-ui/themes/default/textbox.css delete mode 100644 assets/js/easy-ui/themes/default/tooltip.css delete mode 100644 assets/js/easy-ui/themes/default/tree.css delete mode 100755 assets/js/easy-ui/themes/default/validatebox.css delete mode 100644 assets/js/easy-ui/themes/default/window.css diff --git a/assets/js/easy-ui/themes/bootstrap/accordion.css b/assets/js/easy-ui/themes/bootstrap/accordion.css deleted file mode 100644 index 9d268c023f..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/accordion.css +++ /dev/null @@ -1,89 +0,0 @@ -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #D4D4D4; -} -.accordion .accordion-header { - background: #F2F2F2; - filter: none; -} -.accordion .accordion-header-selected { - background: #0081c2; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #F2F2F2; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #D4D4D4; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #F2F2F2; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #D4D4D4; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #F2F2F2; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #D4D4D4; -} diff --git a/assets/js/easy-ui/themes/bootstrap/calendar.css b/assets/js/easy-ui/themes/bootstrap/calendar.css deleted file mode 100644 index ae1a8aca6d..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/calendar.css +++ /dev/null @@ -1,202 +0,0 @@ -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #808080; -} -.calendar-day { - color: #333; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #D4D4D4; -} -.calendar { - border-color: #D4D4D4; -} -.calendar-header { - background: #F2F2F2; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #F5F5F5; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #e6e6e6; - color: #00438a; -} -.calendar-hover { - border: 1px solid #ddd; - padding: 0; -} -.calendar-selected { - background-color: #0081c2; - color: #fff; - border: 1px solid #0070a9; - padding: 0; -} diff --git a/assets/js/easy-ui/themes/bootstrap/combo.css b/assets/js/easy-ui/themes/bootstrap/combo.css deleted file mode 100644 index fc9030d8b5..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/combo.css +++ /dev/null @@ -1,35 +0,0 @@ -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #F2F2F2; -} -.combo-arrow-hover { - background-color: #e6e6e6; -} -.combo-arrow:hover { - background-color: #e6e6e6; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/bootstrap/combobox.css b/assets/js/easy-ui/themes/bootstrap/combobox.css deleted file mode 100644 index fe74425c50..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/combobox.css +++ /dev/null @@ -1,39 +0,0 @@ -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #e6e6e6; - color: #00438a; -} -.combobox-item-selected { - background-color: #0081c2; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} diff --git a/assets/js/easy-ui/themes/bootstrap/datagrid.css b/assets/js/easy-ui/themes/bootstrap/datagrid.css deleted file mode 100644 index 806bd6a2a3..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/datagrid.css +++ /dev/null @@ -1,288 +0,0 @@ -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #D4D4D4; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #F2F2F2; - background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.datagrid-cell-rownumber { - color: #333; -} -.datagrid-resize-proxy { - background: #bbb; -} -.datagrid-mask { - background: #ccc; -} -.datagrid-mask-msg { - border-color: #D4D4D4; -} -.datagrid-toolbar, -.datagrid-pager { - background: #F5F5F5; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #e6e6e6; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ccc; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #333; - border-collapse: separate; -} -.datagrid-row-alt { - background: #F5F5F5; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #e6e6e6; - color: #00438a; - cursor: default; -} -.datagrid-row-selected { - background: #0081c2; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} diff --git a/assets/js/easy-ui/themes/bootstrap/datalist.css b/assets/js/easy-ui/themes/bootstrap/datalist.css deleted file mode 100644 index 68e8df6f49..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/datalist.css +++ /dev/null @@ -1,95 +0,0 @@ -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #F2F2F2; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #333; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.m-list li>a:hover { - background: #e6e6e6; - color: #00438a; -} -.m-list .m-list-group { - padding: 0 4px; -} diff --git a/assets/js/easy-ui/themes/bootstrap/datebox.css b/assets/js/easy-ui/themes/bootstrap/datebox.css deleted file mode 100644 index 97e20dd365..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/datebox.css +++ /dev/null @@ -1,36 +0,0 @@ -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #F5F5F5; -} -.datebox-button a { - color: #444; -} diff --git a/assets/js/easy-ui/themes/bootstrap/dialog.css b/assets/js/easy-ui/themes/bootstrap/dialog.css deleted file mode 100644 index b44497f82e..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/dialog.css +++ /dev/null @@ -1,47 +0,0 @@ -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #F5F5F5; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4; -} -.dialog-button { - border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #F5F5F5; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} diff --git a/assets/js/easy-ui/themes/bootstrap/easyui.css b/assets/js/easy-ui/themes/bootstrap/easyui.css deleted file mode 100644 index 1e6b255161..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/easyui.css +++ /dev/null @@ -1,3239 +0,0 @@ -.panel { - overflow: hidden; - text-align: left; - margin: 0; - border: 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.panel-header, -.panel-body { - border-width: 1px; - border-style: solid; -} -.panel-header { - padding: 5px; - position: relative; -} -.panel-title { - background: url('images/blank.gif') no-repeat; -} -.panel-header-noborder { - border-width: 0 0 1px 0; -} -.panel-body { - overflow: auto; - border-top-width: 0; - padding: 0; -} -.panel-body-noheader { - border-top-width: 1px; -} -.panel-body-noborder { - border-width: 0px; -} -.panel-body-nobottom { - border-bottom-width: 0; -} -.panel-with-icon { - padding-left: 18px; -} -.panel-icon, -.panel-tool { - position: absolute; - top: 50%; - margin-top: -8px; - height: 16px; - overflow: hidden; -} -.panel-icon { - left: 5px; - width: 16px; -} -.panel-tool { - right: 5px; - width: auto; -} -.panel-tool a { - display: inline-block; - width: 16px; - height: 16px; - opacity: 0.6; - filter: alpha(opacity=60); - margin: 0 0 0 2px; - vertical-align: top; -} -.panel-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - background-color: #e6e6e6; - -moz-border-radius: 3px 3px 3px 3px; - -webkit-border-radius: 3px 3px 3px 3px; - border-radius: 3px 3px 3px 3px; -} -.panel-loading { - padding: 11px 0px 10px 30px; -} -.panel-noscroll { - overflow: hidden; -} -.panel-fit, -.panel-fit body { - height: 100%; - margin: 0; - padding: 0; - border: 0; - overflow: hidden; -} -.panel-loading { - background: url('images/loading.gif') no-repeat 10px 10px; -} -.panel-tool-close { - background: url('images/panel_tools.png') no-repeat -16px 0px; -} -.panel-tool-min { - background: url('images/panel_tools.png') no-repeat 0px 0px; -} -.panel-tool-max { - background: url('images/panel_tools.png') no-repeat 0px -16px; -} -.panel-tool-restore { - background: url('images/panel_tools.png') no-repeat -16px -16px; -} -.panel-tool-collapse { - background: url('images/panel_tools.png') no-repeat -32px 0; -} -.panel-tool-expand { - background: url('images/panel_tools.png') no-repeat -32px -16px; -} -.panel-header, -.panel-body { - border-color: #D4D4D4; -} -.panel-header { - background-color: #F2F2F2; - background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.panel-body { - background-color: #ffffff; - color: #333; - font-size: 12px; -} -.panel-title { - font-size: 12px; - font-weight: bold; - color: #777; - height: 16px; - line-height: 16px; -} -.panel-footer { - border: 1px solid #D4D4D4; - overflow: hidden; - background: #F5F5F5; -} -.panel-footer-noborder { - border-width: 1px 0 0 0; -} -.panel-hleft, -.panel-hright { - position: relative; -} -.panel-hleft>.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #D4D4D4; -} -.accordion .accordion-header { - background: #F2F2F2; - filter: none; -} -.accordion .accordion-header-selected { - background: #0081c2; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #F2F2F2; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #D4D4D4; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #F2F2F2; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #D4D4D4; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #F2F2F2; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #D4D4D4; -} -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #D4D4D4; -} -.window { - background-color: #F2F2F2; - background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%); - background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%); - background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%); - background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.window-proxy { - border: 1px dashed #D4D4D4; -} -.window-proxy-mask, -.window-mask { - background: #ccc; -} -.window .panel-footer { - border: 1px solid #D4D4D4; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #F5F5F5; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4; -} -.dialog-button { - border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #F5F5F5; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} -.l-btn { - text-decoration: none; - display: inline-block; - overflow: hidden; - margin: 0; - padding: 0; - cursor: pointer; - outline: none; - text-align: center; - vertical-align: middle; - line-height: normal; -} -.l-btn-plain { - border-width: 0; - padding: 1px; -} -.l-btn-left { - display: inline-block; - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - vertical-align: top; -} -.l-btn-text { - display: inline-block; - vertical-align: top; - width: auto; - line-height: 24px; - font-size: 12px; - padding: 0; - margin: 0 4px; -} -.l-btn-icon { - display: inline-block; - width: 16px; - height: 16px; - line-height: 16px; - position: absolute; - top: 50%; - margin-top: -8px; - font-size: 1px; -} -.l-btn span span .l-btn-empty { - display: inline-block; - margin: 0; - width: 16px; - height: 24px; - font-size: 1px; - vertical-align: top; -} -.l-btn span .l-btn-icon-left { - padding: 0 0 0 20px; - background-position: left center; -} -.l-btn span .l-btn-icon-right { - padding: 0 20px 0 0; - background-position: right center; -} -.l-btn-icon-left .l-btn-text { - margin: 0 4px 0 24px; -} -.l-btn-icon-left .l-btn-icon { - left: 4px; -} -.l-btn-icon-right .l-btn-text { - margin: 0 24px 0 4px; -} -.l-btn-icon-right .l-btn-icon { - right: 4px; -} -.l-btn-icon-top .l-btn-text { - margin: 20px 4px 0 4px; -} -.l-btn-icon-top .l-btn-icon { - top: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-icon-bottom .l-btn-text { - margin: 0 4px 20px 4px; -} -.l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-left .l-btn-empty { - margin: 0 4px; - width: 16px; -} -.l-btn-plain:hover { - padding: 0; -} -.l-btn-focus { - outline: #0000FF dotted thin; -} -.l-btn-large .l-btn-text { - line-height: 40px; -} -.l-btn-large .l-btn-icon { - width: 32px; - height: 32px; - line-height: 32px; - margin-top: -16px; -} -.l-btn-large .l-btn-icon-left .l-btn-text { - margin-left: 40px; -} -.l-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.l-btn-large .l-btn-icon-top .l-btn-text { - margin-top: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-top .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-left .l-btn-empty { - margin: 0 4px; - width: 32px; -} -.l-btn { - color: #444; - background: #f5f5f5; - background-repeat: repeat-x; - border: 1px solid #bbb; - background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); - background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); - background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); - background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn:hover { - background: #e6e6e6; - color: #00438a; - border: 1px solid #ddd; - filter: none; -} -.l-btn-plain { - background: transparent; - border-width: 0; - filter: none; -} -.l-btn-outline { - border-width: 1px; - border-color: #ddd; - padding: 0; -} -.l-btn-plain:hover { - background: #e6e6e6; - color: #00438a; - border: 1px solid #ddd; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn-disabled, -.l-btn-disabled:hover { - opacity: 0.5; - cursor: default; - background: #f5f5f5; - color: #444; - background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); - background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); - background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); - background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); -} -.l-btn-disabled .l-btn-text, -.l-btn-disabled .l-btn-icon { - filter: alpha(opacity=50); -} -.l-btn-plain-disabled, -.l-btn-plain-disabled:hover { - background: transparent; - filter: alpha(opacity=50); -} -.l-btn-selected, -.l-btn-selected:hover { - background: #ddd; - filter: none; -} -.l-btn-plain-selected, -.l-btn-plain-selected:hover { - background: #ddd; -} -.textbox { - position: relative; - border: 1px solid #D4D4D4; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #bbbbbb; - -moz-box-shadow: 0 0 3px 0 #D4D4D4; - -webkit-box-shadow: 0 0 3px 0 #D4D4D4; - box-shadow: 0 0 3px 0 #D4D4D4; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #F2F2F2; -} -.combo-arrow-hover { - background-color: #e6e6e6; -} -.combo-arrow:hover { - background-color: #e6e6e6; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #e6e6e6; - color: #00438a; -} -.combobox-item-selected { - background-color: #0081c2; - color: #fff; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #e6e6e6; - color: #00438a; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} -.layout { - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - z-index: 0; -} -.layout-panel { - position: absolute; - overflow: hidden; -} -.layout-body { - min-width: 1px; - min-height: 1px; -} -.layout-panel-east, -.layout-panel-west { - z-index: 2; -} -.layout-panel-north, -.layout-panel-south { - z-index: 3; -} -.layout-expand { - position: absolute; - padding: 0px; - font-size: 1px; - cursor: pointer; - z-index: 1; -} -.layout-expand .panel-header, -.layout-expand .panel-body { - background: transparent; - filter: none; - overflow: hidden; -} -.layout-expand .panel-header { - border-bottom-width: 0px; -} -.layout-expand .panel-body { - position: relative; -} -.layout-expand .panel-body .panel-icon { - margin-top: 0; - top: 0; - left: 50%; - margin-left: -8px; -} -.layout-expand-west .panel-header .panel-icon, -.layout-expand-east .panel-header .panel-icon { - display: none; -} -.layout-expand-title { - position: absolute; - top: 0; - left: 21px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.layout-expand-title-up { - position: absolute; - top: 0; - left: 0; - text-align: right; - padding-left: 5px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 0; -} -.layout-expand-with-icon { - top: 18px; -} -.layout-expand .panel-body-noheader .layout-expand-title, -.layout-expand .panel-body-noheader .panel-icon { - top: 5px; -} -.layout-expand .panel-body-noheader .layout-expand-with-icon { - top: 23px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - position: absolute; - font-size: 1px; - display: none; - z-index: 5; -} -.layout-split-proxy-h { - width: 5px; - cursor: e-resize; -} -.layout-split-proxy-v { - height: 5px; - cursor: n-resize; -} -.layout-mask { - position: absolute; - background: #fafafa; - filter: alpha(opacity=10); - opacity: 0.10; - z-index: 4; -} -.layout-button-up { - background: url('images/layout_arrows.png') no-repeat -16px -16px; -} -.layout-button-down { - background: url('images/layout_arrows.png') no-repeat -16px 0; -} -.layout-button-left { - background: url('images/layout_arrows.png') no-repeat 0 0; -} -.layout-button-right { - background: url('images/layout_arrows.png') no-repeat 0 -16px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - background-color: #bbb; -} -.layout-split-north { - border-bottom: 5px solid #eee; -} -.layout-split-south { - border-top: 5px solid #eee; -} -.layout-split-east { - border-left: 5px solid #eee; -} -.layout-split-west { - border-right: 5px solid #eee; -} -.layout-expand { - background-color: #F2F2F2; -} -.layout-expand-over { - background-color: #F2F2F2; -} -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #F2F2F2 url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #e6e6e6; - color: #00438a; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #777; - background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: linear-gradient(to right,#ffffff 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: linear-gradient(to right,#ffffff 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); -} -.tabs li a.tabs-inner { - color: #777; - background-color: #F2F2F2; - background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #F2F2F2; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #D4D4D4; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #e6e6e6; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #0081c2; - color: #fff; - filter: none; - border-color: #D4D4D4; -} -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #D4D4D4; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #F2F2F2; - background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.datagrid-cell-rownumber { - color: #333; -} -.datagrid-resize-proxy { - background: #bbb; -} -.datagrid-mask { - background: #ccc; -} -.datagrid-mask-msg { - border-color: #D4D4D4; -} -.datagrid-toolbar, -.datagrid-pager { - background: #F5F5F5; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #e6e6e6; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ccc; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #333; - border-collapse: separate; -} -.datagrid-row-alt { - background: #F5F5F5; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #e6e6e6; - color: #00438a; - cursor: default; -} -.datagrid-row-selected { - background: #0081c2; - color: #fff; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #e6e6e6; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #F2F2F2; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #e6e6e6; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #F2F2F2; -} -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #F2F2F2; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #333; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.m-list li>a:hover { - background: #e6e6e6; - color: #00438a; -} -.m-list .m-list-group { - padding: 0 4px; -} -.pagination { - zoom: 1; -} -.pagination table { - float: left; - height: 30px; -} -.pagination td { - border: 0; -} -.pagination-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 3px 1px; -} -.pagination .pagination-num { - border-width: 1px; - border-style: solid; - margin: 0 2px; - padding: 2px; - width: 2em; - height: auto; -} -.pagination-page-list { - margin: 0px 6px; - padding: 1px 2px; - width: auto; - height: auto; - border-width: 1px; - border-style: solid; -} -.pagination-info { - float: right; - margin: 0 6px; - padding: 0; - height: 30px; - line-height: 30px; - font-size: 12px; -} -.pagination span { - font-size: 12px; -} -.pagination-link .l-btn-text { - width: 24px; - text-align: center; - margin: 0; -} -.pagination-first { - background: url('images/pagination_icons.png') no-repeat 0 center; -} -.pagination-prev { - background: url('images/pagination_icons.png') no-repeat -16px center; -} -.pagination-next { - background: url('images/pagination_icons.png') no-repeat -32px center; -} -.pagination-last { - background: url('images/pagination_icons.png') no-repeat -48px center; -} -.pagination-load { - background: url('images/pagination_icons.png') no-repeat -64px center; -} -.pagination-loading { - background: url('images/loading.gif') no-repeat center center; -} -.pagination-page-list, -.pagination .pagination-num { - border-color: #D4D4D4; -} -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #808080; -} -.calendar-day { - color: #333; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #D4D4D4; -} -.calendar { - border-color: #D4D4D4; -} -.calendar-header { - background: #F2F2F2; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #F5F5F5; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #e6e6e6; - color: #00438a; -} -.calendar-hover { - border: 1px solid #ddd; - padding: 0; -} -.calendar-selected { - background-color: #0081c2; - color: #fff; - border: 1px solid #0070a9; - padding: 0; -} -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #F5F5F5; -} -.datebox-button a { - color: #444; -} -.spinner-arrow { - background-color: #F2F2F2; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #444; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #e6e6e6; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #e6e6e6; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #F2F2F2; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #D4D4D4; -} -.progressbar-text { - color: #333; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #0081c2; - color: #fff; -} -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #F2F2F2; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #D4D4D4; - background: #F2F2F2; -} -.slider-rule span { - border-color: #D4D4D4; -} -.slider-rulelabel span { - color: #333; -} -.menu { - position: absolute; - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.menu-inline { - position: relative; -} -.menu-item { - position: relative; - margin: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.menu-text { - height: 20px; - line-height: 20px; - float: left; - padding-left: 28px; -} -.menu-icon { - position: absolute; - width: 16px; - height: 16px; - left: 2px; - top: 50%; - margin-top: -8px; -} -.menu-rightarrow { - position: absolute; - width: 16px; - height: 16px; - right: 0; - top: 50%; - margin-top: -8px; -} -.menu-line { - position: absolute; - left: 26px; - top: 0; - height: 2000px; - font-size: 1px; -} -.menu-sep { - margin: 3px 0px 3px 25px; - font-size: 1px; -} -.menu-noline .menu-line { - display: none; -} -.menu-noline .menu-sep { - margin-left: 0; - margin-right: 0; -} -.menu-active { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.menu-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -.menu-text, -.menu-text span { - font-size: 12px; -} -.menu-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.menu-rightarrow { - background: url('images/menu_arrows.png') no-repeat -32px center; -} -.menu-line { - border-left: 1px solid #ccc; - border-right: 1px solid #fff; -} -.menu-sep { - border-top: 1px solid #ccc; - border-bottom: 1px solid #fff; -} -.menu { - background-color: #fff; - border-color: #e6e6e6; - color: #333; -} -.menu-content { - background: #ffffff; -} -.menu-item { - border-color: transparent; - _border-color: #fff; -} -.menu-active { - border-color: #ddd; - color: #00438a; - background: #e6e6e6; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #333; -} -.m-btn-downarrow, -.s-btn-downarrow { - display: inline-block; - position: absolute; - width: 16px; - height: 16px; - font-size: 1px; - right: 0; - top: 50%; - margin-top: -8px; -} -.m-btn-active, -.s-btn-active { - background: #e6e6e6; - color: #00438a; - border: 1px solid #ddd; - filter: none; -} -.m-btn-plain-active, -.s-btn-plain-active { - background: transparent; - padding: 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.m-btn .l-btn-left .l-btn-text { - margin-right: 20px; -} -.m-btn .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.m-btn .l-btn-icon-right .l-btn-icon { - right: 20px; -} -.m-btn .l-btn-icon-top .l-btn-text { - margin-right: 4px; - margin-bottom: 14px; -} -.m-btn .l-btn-icon-bottom .l-btn-text { - margin-right: 4px; - margin-bottom: 34px; -} -.m-btn .l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 20px; -} -.m-btn .l-btn-icon-top .m-btn-downarrow, -.m-btn .l-btn-icon-bottom .m-btn-downarrow { - top: auto; - bottom: 0px; - left: 50%; - margin-left: -8px; -} -.m-btn-line { - display: inline-block; - position: absolute; - font-size: 1px; - display: none; -} -.m-btn .l-btn-left .m-btn-line { - right: 0; - width: 16px; - height: 500px; - border-style: solid; - border-color: #bbb; - border-width: 0 0 0 1px; -} -.m-btn .l-btn-icon-top .m-btn-line, -.m-btn .l-btn-icon-bottom .m-btn-line { - left: 0; - bottom: 0; - width: 500px; - height: 16px; - border-width: 1px 0 0 0; -} -.m-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 56px; -} -.m-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 50px; -} -.m-btn-downarrow, -.s-btn-downarrow { - background: url('images/menu_arrows.png') no-repeat 0 center; -} -.m-btn-plain-active, -.s-btn-plain-active { - border-color: #ddd; - background-color: #e6e6e6; - color: #00438a; -} -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #bbb; - border-width: 0 0 0 1px; -} -.messager-body { - padding: 10px 10px 30px 10px; - overflow: auto; -} -.messager-button { - text-align: center; - padding: 5px; -} -.messager-button .l-btn { - width: 70px; -} -.messager-icon { - float: left; - width: 32px; - height: 32px; - margin: 0 10px 10px 0; -} -.messager-error { - background: url('images/messager_icons.png') no-repeat scroll -64px 0; -} -.messager-info { - background: url('images/messager_icons.png') no-repeat scroll 0 0; -} -.messager-question { - background: url('images/messager_icons.png') no-repeat scroll -32px 0; -} -.messager-warning { - background: url('images/messager_icons.png') no-repeat scroll -96px 0; -} -.messager-progress { - padding: 10px; -} -.messager-p-msg { - margin-bottom: 5px; -} -.messager-body .messager-input { - width: 100%; - padding: 4px 0; - outline-style: none; - border: 1px solid #D4D4D4; -} -.window-thinborder .messager-button { - padding-bottom: 8px; -} -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #D4D4D4; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #333; - border-color: #D4D4D4; -} -.tree-node-hover { - background: #e6e6e6; - color: #00438a; -} -.tree-node-selected { - background: #0081c2; - color: #fff; -} -.tree-node-hidden { - display: none; -} -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #D4D4D4; - color: #333; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #D4D4D4; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #D4D4D4; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #D4D4D4; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #D4D4D4; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #bbb; - border: 1px solid #bbb; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #0081c2; - color: #fff; -} -.switchbutton-off { - background-color: #ffffff; - color: #333; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #333; - border: 1px solid #bbb; - -moz-box-shadow: 0 0 3px 0 #bbb; - -webkit-box-shadow: 0 0 3px 0 #bbb; - box-shadow: 0 0 3px 0 #bbb; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} -.tabs-panels { - border-color: transparent; -} -.tabs li a.tabs-inner { - border-color: transparent; - background: transparent; - filter: none; - color: #0088CC; -} -.menu-active { - background-color: #0081C2; - border-color: #0081C2; - color: #fff; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #333; -} diff --git a/assets/js/easy-ui/themes/bootstrap/filebox.css b/assets/js/easy-ui/themes/bootstrap/filebox.css deleted file mode 100644 index c6bac66315..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/filebox.css +++ /dev/null @@ -1,20 +0,0 @@ -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/bootstrap/images/accordion_arrows.png b/assets/js/easy-ui/themes/bootstrap/images/accordion_arrows.png deleted file mode 100755 index 720835f69c96c17ec32a20b03ac9753aa59b7f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYeRK2H*V@SoVUT_Y-nKxaI`{RC0WjSLJ&w^R(C-|JQTojLXc1&{d*_z{$ jW+oTMdQ(F|jDg|L>K${_)^zO#I)%a0)z4*}Q$iB}_fAN- diff --git a/assets/js/easy-ui/themes/bootstrap/images/blank.gif b/assets/js/easy-ui/themes/bootstrap/images/blank.gif deleted file mode 100755 index 1d11fa9ada9e93505b3d736acb204083f45d5fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx diff --git a/assets/js/easy-ui/themes/bootstrap/images/calendar_arrows.png b/assets/js/easy-ui/themes/bootstrap/images/calendar_arrows.png deleted file mode 100755 index 430c4ad685b8c0068ecb7e3cbef74f493a84ad0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQYD@)jv*Dd-cCEn)nLHm{QbZE z+q@uWwandfr?Jb4eDYYmB3UAt=OO2Vt+MMT&+KD%&6hZDt!FBpej;sEpMN69^tKl% zp6y<4_lG^P z=;=eQ4Vs74-2)Ua&f1tcVdk$#{GPKe@&?ZMHmT&SMw?IV&w7)}ixLbB3d$Zg{&KGb P8OPx1>gTe~DWM4fp>5!O@Gl{c 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 diff --git a/assets/js/easy-ui/themes/bootstrap/images/loading.gif b/assets/js/easy-ui/themes/bootstrap/images/loading.gif deleted file mode 100755 index 68f01d04813c1f622810864a3aaa04b4a17ac8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 diff --git a/assets/js/easy-ui/themes/bootstrap/images/menu_arrows.png b/assets/js/easy-ui/themes/bootstrap/images/menu_arrows.png deleted file mode 100755 index b986842e7e4044caed18edbcb4b376a4bb915623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 diff --git a/assets/js/easy-ui/themes/bootstrap/images/messager_icons.png b/assets/js/easy-ui/themes/bootstrap/images/messager_icons.png deleted file mode 100755 index 62c18c135860351063ebaabe8c0f4df7664b8f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6116 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 G5}E*M5;#5p diff --git a/assets/js/easy-ui/themes/bootstrap/images/passwordbox_open.png b/assets/js/easy-ui/themes/bootstrap/images/passwordbox_open.png deleted file mode 100644 index d328891f6a18ea703fd25a47b228df9cb13b4744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C~y}*jFF6I{2&m zf8fW~lSf{d9=Ouc<(SoRr6$ox=6dW5rxOB`TRe8 z#G%R{$Nj@Z)5m5kM@2RMITi_;Npmte=_#;rBych_7F`xqKKy}=f%DM}Q4`(M(}DIf Nc)I$ztaD0e0su|qH(3Ax diff --git a/assets/js/easy-ui/themes/bootstrap/images/searchbox_button.png b/assets/js/easy-ui/themes/bootstrap/images/searchbox_button.png deleted file mode 100755 index 6dd1931589b453f6cc9772fd1851d8705d6b6631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz diff --git a/assets/js/easy-ui/themes/bootstrap/images/spinner_arrows.png b/assets/js/easy-ui/themes/bootstrap/images/spinner_arrows.png deleted file mode 100644 index 7c2df483dbb30dfb3a51332c03fe6f0c229c0547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4Dgeh3R zJz6gy$J;RRRRiNz`7}$-z5~nWg=}UsVYp!HpQ#{_&8An~S<1fjm*zKyrHmF27#+^4 x`1rk&EZfSkR8C?on>%wt3;O{L3Dzy_3@=Og7TEqO`UJFx!PC{xWt~$(69D$UE$jdQ diff --git a/assets/js/easy-ui/themes/bootstrap/images/tabs_icons.png b/assets/js/easy-ui/themes/bootstrap/images/tabs_icons.png deleted file mode 100755 index 4d29966d7154338a9e2e358821a5f72655eba43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq+&f?978H@B_~L*E^a7uNPG49 z|BoM6E;$_tDnm{r-UW|t3f!- diff --git a/assets/js/easy-ui/themes/bootstrap/images/tagbox_icons.png b/assets/js/easy-ui/themes/bootstrap/images/tagbox_icons.png deleted file mode 100644 index bd02e2d817c6b7c4e2a105919e9a89cc0a1d577f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel&`0YV@SoV>_0CQASS diff --git a/assets/js/easy-ui/themes/bootstrap/images/tree_icons.png b/assets/js/easy-ui/themes/bootstrap/images/tree_icons.png deleted file mode 100755 index e9be4f3a9965e49a4e4078f8c53f486d761a7468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3115 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 diff --git a/assets/js/easy-ui/themes/bootstrap/images/validatebox_warning.png b/assets/js/easy-ui/themes/bootstrap/images/validatebox_warning.png deleted file mode 100755 index 2b3d4f05babf3f82b146350e96570fac02075de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} diff --git a/assets/js/easy-ui/themes/bootstrap/passwordbox.css b/assets/js/easy-ui/themes/bootstrap/passwordbox.css deleted file mode 100644 index 92c9ce586b..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/passwordbox.css +++ /dev/null @@ -1,6 +0,0 @@ -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} diff --git a/assets/js/easy-ui/themes/bootstrap/progressbar.css b/assets/js/easy-ui/themes/bootstrap/progressbar.css deleted file mode 100755 index c660f0e4b1..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/progressbar.css +++ /dev/null @@ -1,32 +0,0 @@ -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #D4D4D4; -} -.progressbar-text { - color: #333; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #0081c2; - color: #fff; -} diff --git a/assets/js/easy-ui/themes/bootstrap/propertygrid.css b/assets/js/easy-ui/themes/bootstrap/propertygrid.css deleted file mode 100755 index abf87d6a8e..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/propertygrid.css +++ /dev/null @@ -1,28 +0,0 @@ -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #e6e6e6; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #F2F2F2; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #e6e6e6; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #F2F2F2; -} diff --git a/assets/js/easy-ui/themes/bootstrap/searchbox.css b/assets/js/easy-ui/themes/bootstrap/searchbox.css deleted file mode 100644 index bf615de037..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/searchbox.css +++ /dev/null @@ -1,61 +0,0 @@ -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #F2F2F2; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} diff --git a/assets/js/easy-ui/themes/bootstrap/slider.css b/assets/js/easy-ui/themes/bootstrap/slider.css deleted file mode 100755 index b58d8de557..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/slider.css +++ /dev/null @@ -1,101 +0,0 @@ -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #D4D4D4; - background: #F2F2F2; -} -.slider-rule span { - border-color: #D4D4D4; -} -.slider-rulelabel span { - color: #333; -} diff --git a/assets/js/easy-ui/themes/bootstrap/spinner.css b/assets/js/easy-ui/themes/bootstrap/spinner.css deleted file mode 100644 index bc153fc441..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/spinner.css +++ /dev/null @@ -1,58 +0,0 @@ -.spinner-arrow { - background-color: #F2F2F2; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #444; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #e6e6e6; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #e6e6e6; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #F2F2F2; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} diff --git a/assets/js/easy-ui/themes/bootstrap/splitbutton.css b/assets/js/easy-ui/themes/bootstrap/splitbutton.css deleted file mode 100755 index bf86453328..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/splitbutton.css +++ /dev/null @@ -1,12 +0,0 @@ -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #bbb; - border-width: 0 0 0 1px; -} diff --git a/assets/js/easy-ui/themes/bootstrap/switchbutton.css b/assets/js/easy-ui/themes/bootstrap/switchbutton.css deleted file mode 100644 index 38803aa0db..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/switchbutton.css +++ /dev/null @@ -1,77 +0,0 @@ -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #bbb; - border: 1px solid #bbb; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #0081c2; - color: #fff; -} -.switchbutton-off { - background-color: #ffffff; - color: #333; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #333; - border: 1px solid #bbb; - -moz-box-shadow: 0 0 3px 0 #bbb; - -webkit-box-shadow: 0 0 3px 0 #bbb; - box-shadow: 0 0 3px 0 #bbb; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/bootstrap/tabs.css b/assets/js/easy-ui/themes/bootstrap/tabs.css deleted file mode 100644 index c06a4aab4e..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/tabs.css +++ /dev/null @@ -1,413 +0,0 @@ -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #F2F2F2 url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #e6e6e6; - color: #00438a; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #777; - background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); - background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: linear-gradient(to right,#ffffff 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); - background: linear-gradient(to right,#ffffff 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); -} -.tabs li a.tabs-inner { - color: #777; - background-color: #F2F2F2; - background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); - background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #F2F2F2; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #D4D4D4; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #e6e6e6; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #0081c2; - color: #fff; - filter: none; - border-color: #D4D4D4; -} diff --git a/assets/js/easy-ui/themes/bootstrap/tagbox.css b/assets/js/easy-ui/themes/bootstrap/tagbox.css deleted file mode 100644 index 7e98a0a313..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/tagbox.css +++ /dev/null @@ -1,44 +0,0 @@ -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #e6e6e6; - color: #00438a; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} diff --git a/assets/js/easy-ui/themes/bootstrap/textbox.css b/assets/js/easy-ui/themes/bootstrap/textbox.css deleted file mode 100644 index dc2dfa8a88..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/textbox.css +++ /dev/null @@ -1,139 +0,0 @@ -.textbox { - position: relative; - border: 1px solid #D4D4D4; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #bbbbbb; - -moz-box-shadow: 0 0 3px 0 #D4D4D4; - -webkit-box-shadow: 0 0 3px 0 #D4D4D4; - box-shadow: 0 0 3px 0 #D4D4D4; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} diff --git a/assets/js/easy-ui/themes/bootstrap/tooltip.css b/assets/js/easy-ui/themes/bootstrap/tooltip.css deleted file mode 100644 index ed9fe1c250..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/tooltip.css +++ /dev/null @@ -1,103 +0,0 @@ -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #D4D4D4; - color: #333; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #D4D4D4; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #D4D4D4; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #D4D4D4; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #D4D4D4; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} diff --git a/assets/js/easy-ui/themes/bootstrap/tree.css b/assets/js/easy-ui/themes/bootstrap/tree.css deleted file mode 100644 index 3fd3583a47..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/tree.css +++ /dev/null @@ -1,161 +0,0 @@ -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #D4D4D4; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #333; - border-color: #D4D4D4; -} -.tree-node-hover { - background: #e6e6e6; - color: #00438a; -} -.tree-node-selected { - background: #0081c2; - color: #fff; -} -.tree-node-hidden { - display: none; -} diff --git a/assets/js/easy-ui/themes/bootstrap/validatebox.css b/assets/js/easy-ui/themes/bootstrap/validatebox.css deleted file mode 100755 index 1fc3ad64e4..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/validatebox.css +++ /dev/null @@ -1,5 +0,0 @@ -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} diff --git a/assets/js/easy-ui/themes/bootstrap/window.css b/assets/js/easy-ui/themes/bootstrap/window.css deleted file mode 100644 index b216f37d9b..0000000000 --- a/assets/js/easy-ui/themes/bootstrap/window.css +++ /dev/null @@ -1,183 +0,0 @@ -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #D4D4D4; -} -.window { - background-color: #F2F2F2; - background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%); - background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%); - background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%); - background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.window-proxy { - border: 1px dashed #D4D4D4; -} -.window-proxy-mask, -.window-mask { - background: #ccc; -} -.window .panel-footer { - border: 1px solid #D4D4D4; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} diff --git a/assets/js/easy-ui/themes/default/accordion.css b/assets/js/easy-ui/themes/default/accordion.css deleted file mode 100644 index 9d60531f61..0000000000 --- a/assets/js/easy-ui/themes/default/accordion.css +++ /dev/null @@ -1,89 +0,0 @@ -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #95B8E7; -} -.accordion .accordion-header { - background: #E0ECFF; - filter: none; -} -.accordion .accordion-header-selected { - background: #ffe48d; -} -.accordion .accordion-header-selected .panel-title { - color: #000000; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #E0ECFF; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #95B8E7; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #E0ECFF; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #95B8E7; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #E0ECFF; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #95B8E7; -} diff --git a/assets/js/easy-ui/themes/default/calendar.css b/assets/js/easy-ui/themes/default/calendar.css deleted file mode 100644 index a3b953de04..0000000000 --- a/assets/js/easy-ui/themes/default/calendar.css +++ /dev/null @@ -1,202 +0,0 @@ -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #4d4d4d; -} -.calendar-day { - color: #000000; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #95B8E7; -} -.calendar { - border-color: #95B8E7; -} -.calendar-header { - background: #E0ECFF; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #F4F4F4; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #eaf2ff; - color: #000000; -} -.calendar-hover { - border: 1px solid #b7d2ff; - padding: 0; -} -.calendar-selected { - background-color: #ffe48d; - color: #000000; - border: 1px solid #ffab3f; - padding: 0; -} diff --git a/assets/js/easy-ui/themes/default/combo.css b/assets/js/easy-ui/themes/default/combo.css deleted file mode 100644 index a516386526..0000000000 --- a/assets/js/easy-ui/themes/default/combo.css +++ /dev/null @@ -1,35 +0,0 @@ -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #E0ECFF; -} -.combo-arrow-hover { - background-color: #eaf2ff; -} -.combo-arrow:hover { - background-color: #eaf2ff; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/default/combobox.css b/assets/js/easy-ui/themes/default/combobox.css deleted file mode 100644 index 67ae3c6c9a..0000000000 --- a/assets/js/easy-ui/themes/default/combobox.css +++ /dev/null @@ -1,39 +0,0 @@ -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #eaf2ff; - color: #000000; -} -.combobox-item-selected { - background-color: #ffe48d; - color: #000000; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} diff --git a/assets/js/easy-ui/themes/default/datagrid.css b/assets/js/easy-ui/themes/default/datagrid.css deleted file mode 100644 index bf557afc86..0000000000 --- a/assets/js/easy-ui/themes/default/datagrid.css +++ /dev/null @@ -1,288 +0,0 @@ -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #95B8E7; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #efefef; - background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%); - background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%); - background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%); - background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0); -} -.datagrid-cell-rownumber { - color: #000000; -} -.datagrid-resize-proxy { - background: #aac5e7; -} -.datagrid-mask { - background: #ccc; -} -.datagrid-mask-msg { - border-color: #95B8E7; -} -.datagrid-toolbar, -.datagrid-pager { - background: #F4F4F4; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #dddddd; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ccc; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #000000; - border-collapse: separate; -} -.datagrid-row-alt { - background: #fafafa; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #eaf2ff; - color: #000000; - cursor: default; -} -.datagrid-row-selected { - background: #ffe48d; - color: #000000; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} diff --git a/assets/js/easy-ui/themes/default/datalist.css b/assets/js/easy-ui/themes/default/datalist.css deleted file mode 100644 index eedd25bc05..0000000000 --- a/assets/js/easy-ui/themes/default/datalist.css +++ /dev/null @@ -1,95 +0,0 @@ -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #efefef; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #000000; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.m-list li>a:hover { - background: #eaf2ff; - color: #000000; -} -.m-list .m-list-group { - padding: 0 4px; -} diff --git a/assets/js/easy-ui/themes/default/datebox.css b/assets/js/easy-ui/themes/default/datebox.css deleted file mode 100644 index 25c05fda30..0000000000 --- a/assets/js/easy-ui/themes/default/datebox.css +++ /dev/null @@ -1,36 +0,0 @@ -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #F4F4F4; -} -.datebox-button a { - color: #444; -} diff --git a/assets/js/easy-ui/themes/default/dialog.css b/assets/js/easy-ui/themes/default/dialog.css deleted file mode 100644 index ff55387749..0000000000 --- a/assets/js/easy-ui/themes/default/dialog.css +++ /dev/null @@ -1,47 +0,0 @@ -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #F4F4F4; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #95B8E7 #95B8E7 #dddddd #95B8E7; -} -.dialog-button { - border-color: #dddddd #95B8E7 #95B8E7 #95B8E7; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #F4F4F4; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} diff --git a/assets/js/easy-ui/themes/default/easyui.css b/assets/js/easy-ui/themes/default/easyui.css deleted file mode 100644 index cd6b081b2f..0000000000 --- a/assets/js/easy-ui/themes/default/easyui.css +++ /dev/null @@ -1,3220 +0,0 @@ -.panel { - overflow: hidden; - text-align: left; - margin: 0; - border: 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.panel-header, -.panel-body { - border-width: 1px; - border-style: solid; -} -.panel-header { - padding: 5px; - position: relative; -} -.panel-title { - background: url('images/blank.gif') no-repeat; -} -.panel-header-noborder { - border-width: 0 0 1px 0; -} -.panel-body { - overflow: auto; - border-top-width: 0; - padding: 0; -} -.panel-body-noheader { - border-top-width: 1px; -} -.panel-body-noborder { - border-width: 0px; -} -.panel-body-nobottom { - border-bottom-width: 0; -} -.panel-with-icon { - padding-left: 18px; -} -.panel-icon, -.panel-tool { - position: absolute; - top: 50%; - margin-top: -8px; - height: 16px; - overflow: hidden; -} -.panel-icon { - left: 5px; - width: 16px; -} -.panel-tool { - right: 5px; - width: auto; -} -.panel-tool a { - display: inline-block; - width: 16px; - height: 16px; - opacity: 0.6; - filter: alpha(opacity=60); - margin: 0 0 0 2px; - vertical-align: top; -} -.panel-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - background-color: #eaf2ff; - -moz-border-radius: 3px 3px 3px 3px; - -webkit-border-radius: 3px 3px 3px 3px; - border-radius: 3px 3px 3px 3px; -} -.panel-loading { - padding: 11px 0px 10px 30px; -} -.panel-noscroll { - overflow: hidden; -} -.panel-fit, -.panel-fit body { - height: 100%; - margin: 0; - padding: 0; - border: 0; - overflow: hidden; -} -.panel-loading { - background: url('images/loading.gif') no-repeat 10px 10px; -} -.panel-tool-close { - background: url('images/panel_tools.png') no-repeat -16px 0px; -} -.panel-tool-min { - background: url('images/panel_tools.png') no-repeat 0px 0px; -} -.panel-tool-max { - background: url('images/panel_tools.png') no-repeat 0px -16px; -} -.panel-tool-restore { - background: url('images/panel_tools.png') no-repeat -16px -16px; -} -.panel-tool-collapse { - background: url('images/panel_tools.png') no-repeat -32px 0; -} -.panel-tool-expand { - background: url('images/panel_tools.png') no-repeat -32px -16px; -} -.panel-header, -.panel-body { - border-color: #95B8E7; -} -.panel-header { - background-color: #E0ECFF; - background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); -} -.panel-body { - background-color: #ffffff; - color: #000000; - font-size: 12px; -} -.panel-title { - font-size: 12px; - font-weight: bold; - color: #0E2D5F; - height: 16px; - line-height: 16px; -} -.panel-footer { - border: 1px solid #95B8E7; - overflow: hidden; - background: #F4F4F4; -} -.panel-footer-noborder { - border-width: 1px 0 0 0; -} -.panel-hleft, -.panel-hright { - position: relative; -} -.panel-hleft>.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url('images/accordion_arrows.png') no-repeat 0 0; -} -.accordion-expand { - background: url('images/accordion_arrows.png') no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #95B8E7; -} -.accordion .accordion-header { - background: #E0ECFF; - filter: none; -} -.accordion .accordion-header-selected { - background: #ffe48d; -} -.accordion .accordion-header-selected .panel-title { - color: #000000; -} -.accordion .panel-last > .accordion-header { - border-bottom-color: #E0ECFF; -} -.accordion .panel-last > .accordion-body { - border-bottom-color: #ffffff; -} -.accordion .panel-last > .accordion-header-selected, -.accordion .panel-last > .accordion-header-border { - border-bottom-color: #95B8E7; -} -.accordion> .panel-hleft { - float: left; -} -.accordion> .panel-hleft>.panel-header { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft> .panel-body { - border-width: 0 1px 0 0; -} -.accordion> .panel-hleft.panel-last > .accordion-header { - border-right-color: #E0ECFF; -} -.accordion> .panel-hleft.panel-last > .accordion-body { - border-right-color: #ffffff; -} -.accordion> .panel-hleft.panel-last > .accordion-header-selected, -.accordion> .panel-hleft.panel-last > .accordion-header-border { - border-right-color: #95B8E7; -} -.accordion> .panel-hright { - float: right; -} -.accordion> .panel-hright>.panel-header { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright> .panel-body { - border-width: 0 0 0 1px; -} -.accordion> .panel-hright.panel-last > .accordion-header { - border-left-color: #E0ECFF; -} -.accordion> .panel-hright.panel-last > .accordion-body { - border-left-color: #ffffff; -} -.accordion> .panel-hright.panel-last > .accordion-header-selected, -.accordion> .panel-hright.panel-last > .accordion-header-border { - border-left-color: #95B8E7; -} -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #95B8E7; -} -.window { - background-color: #E0ECFF; - background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); - background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); - background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); - background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); -} -.window-proxy { - border: 1px dashed #95B8E7; -} -.window-proxy-mask, -.window-mask { - background: #ccc; -} -.window .panel-footer { - border: 1px solid #95B8E7; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - position: relative; - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - position: relative; - top: -1px; - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #F4F4F4; - border-width: 1px; - border-style: solid; -} -.dialog-toolbar { - border-color: #95B8E7 #95B8E7 #dddddd #95B8E7; -} -.dialog-button { - border-color: #dddddd #95B8E7 #95B8E7 #95B8E7; -} -.window-thinborder .dialog-toolbar { - border-left: transparent; - border-right: transparent; - border-top-color: #F4F4F4; -} -.window-thinborder .dialog-button { - top: 0px; - padding: 5px 8px 8px 8px; - border-left: transparent; - border-right: transparent; - border-bottom: transparent; -} -.l-btn { - text-decoration: none; - display: inline-block; - overflow: hidden; - margin: 0; - padding: 0; - cursor: pointer; - outline: none; - text-align: center; - vertical-align: middle; - line-height: normal; -} -.l-btn-plain { - border-width: 0; - padding: 1px; -} -.l-btn-left { - display: inline-block; - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - vertical-align: top; -} -.l-btn-text { - display: inline-block; - vertical-align: top; - width: auto; - line-height: 24px; - font-size: 12px; - padding: 0; - margin: 0 4px; -} -.l-btn-icon { - display: inline-block; - width: 16px; - height: 16px; - line-height: 16px; - position: absolute; - top: 50%; - margin-top: -8px; - font-size: 1px; -} -.l-btn span span .l-btn-empty { - display: inline-block; - margin: 0; - width: 16px; - height: 24px; - font-size: 1px; - vertical-align: top; -} -.l-btn span .l-btn-icon-left { - padding: 0 0 0 20px; - background-position: left center; -} -.l-btn span .l-btn-icon-right { - padding: 0 20px 0 0; - background-position: right center; -} -.l-btn-icon-left .l-btn-text { - margin: 0 4px 0 24px; -} -.l-btn-icon-left .l-btn-icon { - left: 4px; -} -.l-btn-icon-right .l-btn-text { - margin: 0 24px 0 4px; -} -.l-btn-icon-right .l-btn-icon { - right: 4px; -} -.l-btn-icon-top .l-btn-text { - margin: 20px 4px 0 4px; -} -.l-btn-icon-top .l-btn-icon { - top: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-icon-bottom .l-btn-text { - margin: 0 4px 20px 4px; -} -.l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 4px; - left: 50%; - margin: 0 0 0 -8px; -} -.l-btn-left .l-btn-empty { - margin: 0 4px; - width: 16px; -} -.l-btn-plain:hover { - padding: 0; -} -.l-btn-focus { - outline: #0000FF dotted thin; -} -.l-btn-large .l-btn-text { - line-height: 40px; -} -.l-btn-large .l-btn-icon { - width: 32px; - height: 32px; - line-height: 32px; - margin-top: -16px; -} -.l-btn-large .l-btn-icon-left .l-btn-text { - margin-left: 40px; -} -.l-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.l-btn-large .l-btn-icon-top .l-btn-text { - margin-top: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-top .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 36px; - line-height: 24px; - min-width: 32px; -} -.l-btn-large .l-btn-icon-bottom .l-btn-icon { - margin: 0 0 0 -16px; -} -.l-btn-large .l-btn-left .l-btn-empty { - margin: 0 4px; - width: 32px; -} -.l-btn { - color: #444; - background: #fafafa; - background-repeat: repeat-x; - border: 1px solid #bbb; - background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn:hover { - background: #eaf2ff; - color: #000000; - border: 1px solid #b7d2ff; - filter: none; -} -.l-btn-plain { - background: transparent; - border-width: 0; - filter: none; -} -.l-btn-outline { - border-width: 1px; - border-color: #b7d2ff; - padding: 0; -} -.l-btn-plain:hover { - background: #eaf2ff; - color: #000000; - border: 1px solid #b7d2ff; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.l-btn-disabled, -.l-btn-disabled:hover { - opacity: 0.5; - cursor: default; - background: #fafafa; - color: #444; - background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); - background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); -} -.l-btn-disabled .l-btn-text, -.l-btn-disabled .l-btn-icon { - filter: alpha(opacity=50); -} -.l-btn-plain-disabled, -.l-btn-plain-disabled:hover { - background: transparent; - filter: alpha(opacity=50); -} -.l-btn-selected, -.l-btn-selected:hover { - background: #ddd; - filter: none; -} -.l-btn-plain-selected, -.l-btn-plain-selected:hover { - background: #ddd; -} -.textbox { - position: relative; - border: 1px solid #95B8E7; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #6b9cde; - -moz-box-shadow: 0 0 3px 0 #95B8E7; - -webkit-box-shadow: 0 0 3px 0 #95B8E7; - box-shadow: 0 0 3px 0 #95B8E7; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url('images/combo_arrow.png') no-repeat center center; -} -.combo-panel { - background-color: #ffffff; -} -.combo-arrow { - background-color: #E0ECFF; -} -.combo-arrow-hover { - background-color: #eaf2ff; -} -.combo-arrow:hover { - background-color: #eaf2ff; -} -.combo .textbox-icon-disabled:hover { - cursor: default; -} -.combobox-item, -.combobox-group, -.combobox-stick { - font-size: 12px; - padding: 3px; -} -.combobox-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.combobox-gitem { - padding-left: 10px; -} -.combobox-group, -.combobox-stick { - font-weight: bold; -} -.combobox-stick { - position: absolute; - top: 1px; - left: 1px; - right: 1px; - background: inherit; -} -.combobox-item-hover { - background-color: #eaf2ff; - color: #000000; -} -.combobox-item-selected { - background-color: #ffe48d; - color: #000000; -} -.combobox-icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; - margin-right: 2px; -} -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #eaf2ff; - color: #000000; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} -.layout { - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - z-index: 0; -} -.layout-panel { - position: absolute; - overflow: hidden; -} -.layout-body { - min-width: 1px; - min-height: 1px; -} -.layout-panel-east, -.layout-panel-west { - z-index: 2; -} -.layout-panel-north, -.layout-panel-south { - z-index: 3; -} -.layout-expand { - position: absolute; - padding: 0px; - font-size: 1px; - cursor: pointer; - z-index: 1; -} -.layout-expand .panel-header, -.layout-expand .panel-body { - background: transparent; - filter: none; - overflow: hidden; -} -.layout-expand .panel-header { - border-bottom-width: 0px; -} -.layout-expand .panel-body { - position: relative; -} -.layout-expand .panel-body .panel-icon { - margin-top: 0; - top: 0; - left: 50%; - margin-left: -8px; -} -.layout-expand-west .panel-header .panel-icon, -.layout-expand-east .panel-header .panel-icon { - display: none; -} -.layout-expand-title { - position: absolute; - top: 0; - left: 21px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.layout-expand-title-up { - position: absolute; - top: 0; - left: 0; - text-align: right; - padding-left: 5px; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 0; -} -.layout-expand-with-icon { - top: 18px; -} -.layout-expand .panel-body-noheader .layout-expand-title, -.layout-expand .panel-body-noheader .panel-icon { - top: 5px; -} -.layout-expand .panel-body-noheader .layout-expand-with-icon { - top: 23px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - position: absolute; - font-size: 1px; - display: none; - z-index: 5; -} -.layout-split-proxy-h { - width: 5px; - cursor: e-resize; -} -.layout-split-proxy-v { - height: 5px; - cursor: n-resize; -} -.layout-mask { - position: absolute; - background: #fafafa; - filter: alpha(opacity=10); - opacity: 0.10; - z-index: 4; -} -.layout-button-up { - background: url('images/layout_arrows.png') no-repeat -16px -16px; -} -.layout-button-down { - background: url('images/layout_arrows.png') no-repeat -16px 0; -} -.layout-button-left { - background: url('images/layout_arrows.png') no-repeat 0 0; -} -.layout-button-right { - background: url('images/layout_arrows.png') no-repeat 0 -16px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - background-color: #aac5e7; -} -.layout-split-north { - border-bottom: 5px solid #E6EEF8; -} -.layout-split-south { - border-top: 5px solid #E6EEF8; -} -.layout-split-east { - border-left: 5px solid #E6EEF8; -} -.layout-split-west { - border-right: 5px solid #E6EEF8; -} -.layout-expand { - background-color: #E0ECFF; -} -.layout-expand-over { - background-color: #E0ECFF; -} -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #E0ECFF url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #eaf2ff; - color: #000000; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #0E2D5F; - background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%); - background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%); - background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%); - background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%); - background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%); - background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%); - background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%); - background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%); - background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%); - background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%); - background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%); - background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%); - background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1); -} -.tabs li a.tabs-inner { - color: #0E2D5F; - background-color: #E0ECFF; - background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #E0ECFF; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #95B8E7; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #eaf2ff; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #ffe48d; - color: #000000; - filter: none; - border-color: #95B8E7; -} -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 10px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-empty { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - line-height: 25px; - text-align: center; -} -.datagrid-sort-icon { - padding: 0; - display: none; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - display: block; - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; - text-overflow: ellipsis; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 30px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-view .datagrid-editable-input { - margin: 0; - padding: 2px 4px; - border: 1px solid #95B8E7; - font-size: 12px; - outline-style: none; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.datagrid-view .validatebox-invalid { - border-color: #ffa8a8; -} -.datagrid-sort .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -64px center; -} -.datagrid-sort-desc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - display: inline; - padding: 0 13px 0 0; - background: url('images/datagrid_icons.png') no-repeat 0px center; -} -.datagrid-row-collapse { - background: url('images/datagrid_icons.png') no-repeat -48px center; -} -.datagrid-row-expand { - background: url('images/datagrid_icons.png') no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #efefef; - background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%); - background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%); - background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%); - background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0); -} -.datagrid-cell-rownumber { - color: #000000; -} -.datagrid-resize-proxy { - background: #aac5e7; -} -.datagrid-mask { - background: #ccc; -} -.datagrid-mask-msg { - border-color: #95B8E7; -} -.datagrid-toolbar, -.datagrid-pager { - background: #F4F4F4; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #dddddd; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ccc; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #000000; - border-collapse: separate; -} -.datagrid-row-alt { - background: #fafafa; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #eaf2ff; - color: #000000; - cursor: default; -} -.datagrid-row-selected { - background: #ffe48d; - color: #000000; -} -.datagrid-row-editing .textbox, -.datagrid-row-editing .textbox-text { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #dddddd; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #E0ECFF; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #dddddd; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #E0ECFF; -} -.datalist .datagrid-header { - border-width: 0; -} -.datalist .datagrid-group, -.m-list .m-list-group { - height: 25px; - line-height: 25px; - font-weight: bold; - overflow: hidden; - background-color: #efefef; - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.datalist .datagrid-group-expander { - display: none; -} -.datalist .datagrid-group-title { - padding: 0 4px; -} -.datalist .datagrid-btable { - width: 100%; - table-layout: fixed; -} -.datalist .datagrid-row td { - border-style: solid; - border-left-color: transparent; - border-right-color: transparent; - border-bottom-width: 0; -} -.datalist-lines .datagrid-row td { - border-bottom-width: 1px; -} -.datalist .datagrid-cell, -.m-list li { - width: auto; - height: auto; - padding: 2px 4px; - line-height: 18px; - position: relative; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link, -.m-list li>a { - display: block; - position: relative; - cursor: pointer; - color: #000000; - text-decoration: none; - overflow: hidden; - margin: -2px -4px; - padding: 2px 4px; - padding-right: 16px; - line-height: 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.datalist-link::after, -.m-list li>a::after { - position: absolute; - display: block; - width: 8px; - height: 8px; - content: ''; - right: 6px; - top: 50%; - margin-top: -4px; - border-style: solid; - border-width: 1px 1px 0 0; - -ms-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.m-list { - margin: 0; - padding: 0; - list-style: none; -} -.m-list li { - border-style: solid; - border-width: 0 0 1px 0; - border-color: #ccc; -} -.m-list li>a:hover { - background: #eaf2ff; - color: #000000; -} -.m-list .m-list-group { - padding: 0 4px; -} -.pagination { - zoom: 1; -} -.pagination table { - float: left; - height: 30px; -} -.pagination td { - border: 0; -} -.pagination-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 3px 1px; -} -.pagination .pagination-num { - border-width: 1px; - border-style: solid; - margin: 0 2px; - padding: 2px; - width: 2em; - height: auto; -} -.pagination-page-list { - margin: 0px 6px; - padding: 1px 2px; - width: auto; - height: auto; - border-width: 1px; - border-style: solid; -} -.pagination-info { - float: right; - margin: 0 6px; - padding: 0; - height: 30px; - line-height: 30px; - font-size: 12px; -} -.pagination span { - font-size: 12px; -} -.pagination-link .l-btn-text { - width: 24px; - text-align: center; - margin: 0; -} -.pagination-first { - background: url('images/pagination_icons.png') no-repeat 0 center; -} -.pagination-prev { - background: url('images/pagination_icons.png') no-repeat -16px center; -} -.pagination-next { - background: url('images/pagination_icons.png') no-repeat -32px center; -} -.pagination-last { - background: url('images/pagination_icons.png') no-repeat -48px center; -} -.pagination-load { - background: url('images/pagination_icons.png') no-repeat -64px center; -} -.pagination-loading { - background: url('images/loading.gif') no-repeat center center; -} -.pagination-page-list, -.pagination .pagination-num { - border-color: #95B8E7; -} -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - table-layout: fixed; - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url('images/calendar_arrows.png') no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url('images/calendar_arrows.png') no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url('images/calendar_arrows.png') no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url('images/calendar_arrows.png') no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - cursor: default; -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 50px; - text-align: center; - border-width: 1px; - border-style: solid; - outline-style: none; - resize: none; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url('images/calendar_arrows.png') no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url('images/calendar_arrows.png') no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #4d4d4d; -} -.calendar-day { - color: #000000; -} -.calendar-sunday { - color: #CC2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #95B8E7; -} -.calendar { - border-color: #95B8E7; -} -.calendar-header { - background: #E0ECFF; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #F4F4F4; - padding: 2px 0; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #eaf2ff; - color: #000000; -} -.calendar-hover { - border: 1px solid #b7d2ff; - padding: 0; -} -.calendar-selected { - background-color: #ffe48d; - color: #000000; - border: 1px solid #ffab3f; - padding: 0; -} -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - padding: 0 5px; - text-align: center; -} -.datebox-button a { - line-height: 22px; - font-size: 12px; - font-weight: bold; - text-decoration: none; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-button a:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox .combo-arrow { - background-image: url('images/datebox_arrow.png'); - background-position: center center; -} -.datebox-button { - background-color: #F4F4F4; -} -.datebox-button a { - color: #444; -} -.spinner-arrow { - background-color: #E0ECFF; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #444; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #eaf2ff; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #eaf2ff; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #E0ECFF; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #95B8E7; -} -.progressbar-text { - color: #000000; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #ffe48d; - color: #000000; -} -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #E0ECFF; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #95B8E7; - background: #E0ECFF; -} -.slider-rule span { - border-color: #95B8E7; -} -.slider-rulelabel span { - color: #000000; -} -.menu { - position: absolute; - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.menu-inline { - position: relative; -} -.menu-item { - position: relative; - margin: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.menu-text { - height: 20px; - line-height: 20px; - float: left; - padding-left: 28px; -} -.menu-icon { - position: absolute; - width: 16px; - height: 16px; - left: 2px; - top: 50%; - margin-top: -8px; -} -.menu-rightarrow { - position: absolute; - width: 16px; - height: 16px; - right: 0; - top: 50%; - margin-top: -8px; -} -.menu-line { - position: absolute; - left: 26px; - top: 0; - height: 2000px; - font-size: 1px; -} -.menu-sep { - margin: 3px 0px 3px 25px; - font-size: 1px; -} -.menu-noline .menu-line { - display: none; -} -.menu-noline .menu-sep { - margin-left: 0; - margin-right: 0; -} -.menu-active { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.menu-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -.menu-text, -.menu-text span { - font-size: 12px; -} -.menu-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.menu-rightarrow { - background: url('images/menu_arrows.png') no-repeat -32px center; -} -.menu-line { - border-left: 1px solid #ccc; - border-right: 1px solid #fff; -} -.menu-sep { - border-top: 1px solid #ccc; - border-bottom: 1px solid #fff; -} -.menu { - background-color: #fafafa; - border-color: #ddd; - color: #444; -} -.menu-content { - background: #ffffff; -} -.menu-item { - border-color: transparent; - _border-color: #fafafa; -} -.menu-active { - border-color: #b7d2ff; - color: #000000; - background: #eaf2ff; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #444; -} -.m-btn-downarrow, -.s-btn-downarrow { - display: inline-block; - position: absolute; - width: 16px; - height: 16px; - font-size: 1px; - right: 0; - top: 50%; - margin-top: -8px; -} -.m-btn-active, -.s-btn-active { - background: #eaf2ff; - color: #000000; - border: 1px solid #b7d2ff; - filter: none; -} -.m-btn-plain-active, -.s-btn-plain-active { - background: transparent; - padding: 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.m-btn .l-btn-left .l-btn-text { - margin-right: 20px; -} -.m-btn .l-btn-icon-right .l-btn-text { - margin-right: 40px; -} -.m-btn .l-btn-icon-right .l-btn-icon { - right: 20px; -} -.m-btn .l-btn-icon-top .l-btn-text { - margin-right: 4px; - margin-bottom: 14px; -} -.m-btn .l-btn-icon-bottom .l-btn-text { - margin-right: 4px; - margin-bottom: 34px; -} -.m-btn .l-btn-icon-bottom .l-btn-icon { - top: auto; - bottom: 20px; -} -.m-btn .l-btn-icon-top .m-btn-downarrow, -.m-btn .l-btn-icon-bottom .m-btn-downarrow { - top: auto; - bottom: 0px; - left: 50%; - margin-left: -8px; -} -.m-btn-line { - display: inline-block; - position: absolute; - font-size: 1px; - display: none; -} -.m-btn .l-btn-left .m-btn-line { - right: 0; - width: 16px; - height: 500px; - border-style: solid; - border-color: #aac5e7; - border-width: 0 0 0 1px; -} -.m-btn .l-btn-icon-top .m-btn-line, -.m-btn .l-btn-icon-bottom .m-btn-line { - left: 0; - bottom: 0; - width: 500px; - height: 16px; - border-width: 1px 0 0 0; -} -.m-btn-large .l-btn-icon-right .l-btn-text { - margin-right: 56px; -} -.m-btn-large .l-btn-icon-bottom .l-btn-text { - margin-bottom: 50px; -} -.m-btn-downarrow, -.s-btn-downarrow { - background: url('images/menu_arrows.png') no-repeat 0 center; -} -.m-btn-plain-active, -.s-btn-plain-active { - border-color: #b7d2ff; - background-color: #eaf2ff; - color: #000000; -} -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #aac5e7; - border-width: 0 0 0 1px; -} -.messager-body { - padding: 10px 10px 30px 10px; - overflow: auto; -} -.messager-button { - text-align: center; - padding: 5px; -} -.messager-button .l-btn { - width: 70px; -} -.messager-icon { - float: left; - width: 32px; - height: 32px; - margin: 0 10px 10px 0; -} -.messager-error { - background: url('images/messager_icons.png') no-repeat scroll -64px 0; -} -.messager-info { - background: url('images/messager_icons.png') no-repeat scroll 0 0; -} -.messager-question { - background: url('images/messager_icons.png') no-repeat scroll -32px 0; -} -.messager-warning { - background: url('images/messager_icons.png') no-repeat scroll -96px 0; -} -.messager-progress { - padding: 10px; -} -.messager-p-msg { - margin-bottom: 5px; -} -.messager-body .messager-input { - width: 100%; - padding: 4px 0; - outline-style: none; - border: 1px solid #95B8E7; -} -.window-thinborder .messager-button { - padding-bottom: 8px; -} -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #95B8E7; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #000000; - border-color: #95B8E7; -} -.tree-node-hover { - background: #eaf2ff; - color: #000000; -} -.tree-node-selected { - background: #ffe48d; - color: #000000; -} -.tree-node-hidden { - display: none; -} -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #95B8E7; - color: #000000; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #95B8E7; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #95B8E7; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #95B8E7; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #95B8E7; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #bbb; - border: 1px solid #bbb; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #ffe48d; - color: #000000; -} -.switchbutton-off { - background-color: #ffffff; - color: #000000; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #000000; - border: 1px solid #bbb; - -moz-box-shadow: 0 0 3px 0 #bbb; - -webkit-box-shadow: 0 0 3px 0 #bbb; - box-shadow: 0 0 3px 0 #bbb; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/default/filebox.css b/assets/js/easy-ui/themes/default/filebox.css deleted file mode 100644 index c6bac66315..0000000000 --- a/assets/js/easy-ui/themes/default/filebox.css +++ /dev/null @@ -1,20 +0,0 @@ -.filebox .textbox-value { - vertical-align: top; - position: absolute; - top: 0; - left: -5000px; -} -.filebox-label { - display: inline-block; - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - left: 0; - top: 0; - z-index: 10; - background: url('images/blank.gif') no-repeat; -} -.l-btn-disabled .filebox-label { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/default/images/accordion_arrows.png b/assets/js/easy-ui/themes/default/images/accordion_arrows.png deleted file mode 100755 index 720835f69c96c17ec32a20b03ac9753aa59b7f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYeRK2H*V@SoVUT_Y-nKxaI`{RC0WjSLJ&w^R(C-|JQTojLXc1&{d*_z{$ jW+oTMdQ(F|jDg|L>K${_)^zO#I)%a0)z4*}Q$iB}_fAN- diff --git a/assets/js/easy-ui/themes/default/images/blank.gif b/assets/js/easy-ui/themes/default/images/blank.gif deleted file mode 100755 index 1d11fa9ada9e93505b3d736acb204083f45d5fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx diff --git a/assets/js/easy-ui/themes/default/images/calendar_arrows.png b/assets/js/easy-ui/themes/default/images/calendar_arrows.png deleted file mode 100755 index 430c4ad685b8c0068ecb7e3cbef74f493a84ad0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQYD@)jv*Dd-cCEn)nLHm{QbZE z+q@uWwandfr?Jb4eDYYmB3UAt=OO2Vt+MMT&+KD%&6hZDt!FBpej;sEpMN69^tKl% zp6y<4_lG^P z=;=eQ4Vs74-2)Ua&f1tcVdk$#{GPKe@&?ZMHmT&SMw?IV&w7)}ixLbB3d$Zg{&KGb P8OPx1>gTe~DWM4fp>5!O@Gl{c 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 diff --git a/assets/js/easy-ui/themes/default/images/loading.gif b/assets/js/easy-ui/themes/default/images/loading.gif deleted file mode 100755 index 68f01d04813c1f622810864a3aaa04b4a17ac8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 diff --git a/assets/js/easy-ui/themes/default/images/menu_arrows.png b/assets/js/easy-ui/themes/default/images/menu_arrows.png deleted file mode 100755 index b986842e7e4044caed18edbcb4b376a4bb915623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 diff --git a/assets/js/easy-ui/themes/default/images/messager_icons.png b/assets/js/easy-ui/themes/default/images/messager_icons.png deleted file mode 100755 index 62c18c135860351063ebaabe8c0f4df7664b8f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6116 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 eBlUQ{{Qm&YJg{HE_Fe7(0000`TRe8 z#G%R{$NfX%tci2`Gda4n1O70V3HltacN37lc`VT21_Oig(wY*}T!mDijSQZyelF{r G5}E*M5;#5p diff --git a/assets/js/easy-ui/themes/default/images/passwordbox_open.png b/assets/js/easy-ui/themes/default/images/passwordbox_open.png deleted file mode 100644 index d328891f6a18ea703fd25a47b228df9cb13b4744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C~y}*jFF6I{2&m zf8fW~lSf{d9=Ouc<(SoRr6$ox=6dW5rxOB`TRe8 z#G%R{$Nj@Z)5m5kM@2RMITi_;Npmte=_#;rBych_7F`xqKKy}=f%DM}Q4`(M(}DIf Nc)I$ztaD0e0su|qH(3Ax diff --git a/assets/js/easy-ui/themes/default/images/searchbox_button.png b/assets/js/easy-ui/themes/default/images/searchbox_button.png deleted file mode 100755 index 6dd1931589b453f6cc9772fd1851d8705d6b6631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz diff --git a/assets/js/easy-ui/themes/default/images/spinner_arrows.png b/assets/js/easy-ui/themes/default/images/spinner_arrows.png deleted file mode 100644 index 7c2df483dbb30dfb3a51332c03fe6f0c229c0547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4Dgeh3R zJz6gy$J;RRRRiNz`7}$-z5~nWg=}UsVYp!HpQ#{_&8An~S<1fjm*zKyrHmF27#+^4 x`1rk&EZfSkR8C?on>%wt3;O{L3Dzy_3@=Og7TEqO`UJFx!PC{xWt~$(69D$UE$jdQ diff --git a/assets/js/easy-ui/themes/default/images/tabs_icons.png b/assets/js/easy-ui/themes/default/images/tabs_icons.png deleted file mode 100755 index 4d29966d7154338a9e2e358821a5f72655eba43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq+&f?978H@B_~L*E^a7uNPG49 z|BoM6E;$_tDnm{r-UW|t3f!- diff --git a/assets/js/easy-ui/themes/default/images/tagbox_icons.png b/assets/js/easy-ui/themes/default/images/tagbox_icons.png deleted file mode 100644 index bd02e2d817c6b7c4e2a105919e9a89cc0a1d577f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel&`0YV@SoV>_0CQASS diff --git a/assets/js/easy-ui/themes/default/images/tree_icons.png b/assets/js/easy-ui/themes/default/images/tree_icons.png deleted file mode 100755 index e9be4f3a9965e49a4e4078f8c53f486d761a7468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3115 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 diff --git a/assets/js/easy-ui/themes/default/images/validatebox_warning.png b/assets/js/easy-ui/themes/default/images/validatebox_warning.png deleted file mode 100755 index 2b3d4f05babf3f82b146350e96570fac02075de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.panel-body, -.panel-hright>.panel-body { - position: absolute; -} -.panel-hleft>.panel-header { - float: left; -} -.panel-hright>.panel-header { - float: right; -} -.panel-hleft>.panel-body { - border-top-width: 1px; - border-left-width: 0; -} -.panel-hright>.panel-body { - border-top-width: 1px; - border-right-width: 0; -} -.panel-hleft>.panel-body-nobottom { - border-bottom-width: 1px; - border-right-width: 0; -} -.panel-hright>.panel-body-nobottom { - border-bottom-width: 1px; - border-left-width: 0; -} -.panel-hleft>.panel-footer { - position: absolute; - right: 0; -} -.panel-hright>.panel-footer { - position: absolute; - left: 0; -} -.panel-hleft>.panel-header-noborder { - border-width: 0 1px 0 0; -} -.panel-hright>.panel-header-noborder { - border-width: 0 0 0 1px; -} -.panel-hleft>.panel-body-noborder { - border-width: 0; -} -.panel-hright>.panel-body-noborder { - border-width: 0; -} -.panel-hleft>.panel-body-noheader { - border-left-width: 1px; -} -.panel-hright>.panel-body-noheader { - border-right-width: 1px; -} -.panel-hleft>.panel-footer-noborder { - border-width: 0 0 0 1px; -} -.panel-hright>.panel-footer-noborder { - border-width: 0 1px 0 0; -} -.panel-hleft>.panel-header .panel-icon, -.panel-hright>.panel-header .panel-icon { - margin-top: 0; - top: 5px; -} -.panel-hleft>.panel-header .panel-title, -.panel-hright>.panel-header .panel-title { - position: absolute; - min-width: 16px; - left: 21px; - top: 5px; - bottom: auto; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(90deg); - -o-transform-origin: 0 0; - transform: rotate(90deg); - transform-origin: 0 0; -} -.panel-hleft>.panel-header .panel-title-up, -.panel-hright>.panel-header .panel-title-up { - position: absolute; - min-width: 16px; - left: 21px; - top: auto; - bottom: 5px; - text-align: right; - white-space: nowrap; - word-wrap: normal; - -webkit-transform: rotate(-90deg); - -webkit-transform-origin: 0 0; - -moz-transform: rotate(-90deg); - -moz-transform-origin: 0 0; - -o-transform: rotate(-90deg); - -o-transform-origin: 0 0; - transform: rotate(-90deg); - transform-origin: 0 16px; -} -.panel-hleft>.panel-header .panel-with-icon.panel-title-up, -.panel-hright>.panel-header .panel-with-icon.panel-title-up { - padding-left: 0; - padding-right: 18px; -} -.panel-hleft>.panel-header .panel-tool, -.panel-hright>.panel-header .panel-tool { - top: auto; - bottom: 5px; - width: 16px; - height: auto; - left: 50%; - margin-left: -8px; - margin-top: 0; -} -.panel-hleft>.panel-header .panel-tool a, -.panel-hright>.panel-header .panel-tool a { - margin: 2px 0 0 0; -} diff --git a/assets/js/easy-ui/themes/default/passwordbox.css b/assets/js/easy-ui/themes/default/passwordbox.css deleted file mode 100644 index 92c9ce586b..0000000000 --- a/assets/js/easy-ui/themes/default/passwordbox.css +++ /dev/null @@ -1,6 +0,0 @@ -.passwordbox-open { - background: url('images/passwordbox_open.png') no-repeat center center; -} -.passwordbox-close { - background: url('images/passwordbox_close.png') no-repeat center center; -} diff --git a/assets/js/easy-ui/themes/default/progressbar.css b/assets/js/easy-ui/themes/default/progressbar.css deleted file mode 100755 index e4d30031cc..0000000000 --- a/assets/js/easy-ui/themes/default/progressbar.css +++ /dev/null @@ -1,32 +0,0 @@ -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; - position: relative; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #95B8E7; -} -.progressbar-text { - color: #000000; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #ffe48d; - color: #000000; -} diff --git a/assets/js/easy-ui/themes/default/propertygrid.css b/assets/js/easy-ui/themes/default/propertygrid.css deleted file mode 100755 index 5f5fbb38dd..0000000000 --- a/assets/js/easy-ui/themes/default/propertygrid.css +++ /dev/null @@ -1,28 +0,0 @@ -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #dddddd; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #E0ECFF; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #dddddd; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #E0ECFF; -} diff --git a/assets/js/easy-ui/themes/default/searchbox.css b/assets/js/easy-ui/themes/default/searchbox.css deleted file mode 100644 index ada5ce39aa..0000000000 --- a/assets/js/easy-ui/themes/default/searchbox.css +++ /dev/null @@ -1,61 +0,0 @@ -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.searchbox .l-btn-plain { - border: 0; - padding: 0; - vertical-align: top; - opacity: 0.6; - filter: alpha(opacity=60); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .l-btn-plain:hover { - border: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .m-btn-active { - border-width: 0 1px 0 0; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.searchbox .textbox-button-right { - border-width: 0 0 0 1px; -} -.searchbox .textbox-button-left { - border-width: 0 1px 0 0; -} -.searchbox-button { - background: url('images/searchbox_button.png') no-repeat center center; -} -.searchbox .l-btn-plain { - background: #E0ECFF; -} -.searchbox .l-btn-plain-disabled, -.searchbox .l-btn-plain-disabled:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} diff --git a/assets/js/easy-ui/themes/default/slider.css b/assets/js/easy-ui/themes/default/slider.css deleted file mode 100755 index f51f986366..0000000000 --- a/assets/js/easy-ui/themes/default/slider.css +++ /dev/null @@ -1,101 +0,0 @@ -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: 50%; - margin-top: -10px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 50%; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: 'auto'; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url('images/slider_handle.png') no-repeat; -} -.slider-inner { - border-color: #95B8E7; - background: #E0ECFF; -} -.slider-rule span { - border-color: #95B8E7; -} -.slider-rulelabel span { - color: #000000; -} diff --git a/assets/js/easy-ui/themes/default/spinner.css b/assets/js/easy-ui/themes/default/spinner.css deleted file mode 100644 index e2df29b8ec..0000000000 --- a/assets/js/easy-ui/themes/default/spinner.css +++ /dev/null @@ -1,58 +0,0 @@ -.spinner-arrow { - background-color: #E0ECFF; - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; - opacity: 1.0; - filter: alpha(opacity=100); - width: 18px; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; - width: 100%; - height: 50%; - color: #444; - outline-style: none; -} -.spinner-arrow-hover { - background-color: #eaf2ff; - opacity: 1.0; - filter: alpha(opacity=100); -} -.spinner-arrow-up:hover, -.spinner-arrow-down:hover { - opacity: 1.0; - filter: alpha(opacity=100); - background-color: #eaf2ff; -} -.textbox-icon-disabled .spinner-arrow-up:hover, -.textbox-icon-disabled .spinner-arrow-down:hover { - opacity: 0.6; - filter: alpha(opacity=60); - background-color: #E0ECFF; - cursor: default; -} -.spinner .textbox-icon-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.spinner-arrow-up { - background: url('images/spinner_arrows.png') no-repeat 1px center; -} -.spinner-arrow-down { - background: url('images/spinner_arrows.png') no-repeat -15px center; -} -.spinner-button-up { - background: url('images/spinner_arrows.png') no-repeat -32px center; -} -.spinner-button-down { - background: url('images/spinner_arrows.png') no-repeat -48px center; -} diff --git a/assets/js/easy-ui/themes/default/splitbutton.css b/assets/js/easy-ui/themes/default/splitbutton.css deleted file mode 100755 index 86d6da58e8..0000000000 --- a/assets/js/easy-ui/themes/default/splitbutton.css +++ /dev/null @@ -1,12 +0,0 @@ -.s-btn:hover .m-btn-line, -.s-btn-active .m-btn-line, -.s-btn-plain-active .m-btn-line { - display: inline-block; -} -.l-btn:hover .s-btn-downarrow, -.s-btn-active .s-btn-downarrow, -.s-btn-plain-active .s-btn-downarrow { - border-style: solid; - border-color: #aac5e7; - border-width: 0 0 0 1px; -} diff --git a/assets/js/easy-ui/themes/default/switchbutton.css b/assets/js/easy-ui/themes/default/switchbutton.css deleted file mode 100644 index 20818ab4cb..0000000000 --- a/assets/js/easy-ui/themes/default/switchbutton.css +++ /dev/null @@ -1,77 +0,0 @@ -.switchbutton { - text-decoration: none; - display: inline-block; - overflow: hidden; - vertical-align: middle; - margin: 0; - padding: 0; - cursor: pointer; - background: #bbb; - border: 1px solid #bbb; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-inner { - display: inline-block; - overflow: hidden; - position: relative; - top: -1px; - left: -1px; -} -.switchbutton-on, -.switchbutton-off, -.switchbutton-handle { - display: inline-block; - text-align: center; - height: 100%; - float: left; - font-size: 12px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.switchbutton-on { - background: #ffe48d; - color: #000000; -} -.switchbutton-off { - background-color: #ffffff; - color: #000000; -} -.switchbutton-on, -.switchbutton-reversed .switchbutton-off { - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.switchbutton-off, -.switchbutton-reversed .switchbutton-on { - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.switchbutton-handle { - position: absolute; - top: 0; - left: 50%; - background-color: #ffffff; - color: #000000; - border: 1px solid #bbb; - -moz-box-shadow: 0 0 3px 0 #bbb; - -webkit-box-shadow: 0 0 3px 0 #bbb; - box-shadow: 0 0 3px 0 #bbb; -} -.switchbutton-value { - position: absolute; - top: 0; - left: -5000px; -} -.switchbutton-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.switchbutton-disabled, -.switchbutton-readonly { - cursor: default; -} diff --git a/assets/js/easy-ui/themes/default/tabs.css b/assets/js/easy-ui/themes/default/tabs.css deleted file mode 100644 index d5d84e849b..0000000000 --- a/assets/js/easy-ui/themes/default/tabs.css +++ /dev/null @@ -1,413 +0,0 @@ -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 50000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 2px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 2px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-justified li a.tabs-inner { - padding-left: 0; - padding-right: 0; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - padding-left: 10px; - padding-right: 10px; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs-pill { - padding-bottom: 3px; -} -.tabs-header-bottom .tabs-pill { - padding-top: 3px; - padding-bottom: 0; -} -.tabs-header-left .tabs-pill { - padding-right: 3px; -} -.tabs-header-right .tabs-pill { - padding-left: 3px; -} -.tabs-header .tabs-pill li a.tabs-inner { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tabs-header-narrow, -.tabs-header-narrow .tabs-narrow { - padding: 0; -} -.tabs-narrow li, -.tabs-header-bottom .tabs-narrow li { - margin-left: 0; - margin-right: -1px; -} -.tabs-narrow li.tabs-last, -.tabs-header-bottom .tabs-narrow li.tabs-last { - margin-right: 0; -} -.tabs-header-left .tabs-narrow, -.tabs-header-right .tabs-narrow { - padding-top: 0; -} -.tabs-header-left .tabs-narrow li { - margin-bottom: -1px; - margin-right: -1px; -} -.tabs-header-left .tabs-narrow li.tabs-last, -.tabs-header-right .tabs-narrow li.tabs-last { - margin-bottom: 0; -} -.tabs-header-right .tabs-narrow li { - margin-bottom: -1px; - margin-left: -1px; -} -.tabs-scroller-left { - background: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center; -} -.tabs-scroller-right { - background: #E0ECFF url('images/tabs_icons.png') no-repeat -15px center; -} -.tabs li a.tabs-close { - background: url('images/tabs_icons.png') no-repeat -34px center; -} -.tabs li a.tabs-inner:hover { - background: #eaf2ff; - color: #000000; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #0E2D5F; - background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%); - background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%); - background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%); - background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%); - background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%); - background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%); - background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%); - background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%); - background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%); - background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%); - background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%); - background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%); - background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1); -} -.tabs li a.tabs-inner { - color: #0E2D5F; - background-color: #E0ECFF; - background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); - background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #E0ECFF; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #95B8E7; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #eaf2ff; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { - background: #ffe48d; - color: #000000; - filter: none; - border-color: #95B8E7; -} diff --git a/assets/js/easy-ui/themes/default/tagbox.css b/assets/js/easy-ui/themes/default/tagbox.css deleted file mode 100644 index 67d51a3672..0000000000 --- a/assets/js/easy-ui/themes/default/tagbox.css +++ /dev/null @@ -1,44 +0,0 @@ -.tagbox { - cursor: text; -} -.tagbox .textbox-text { - float: left; -} -.tagbox-label { - position: relative; - display: block; - margin: 4px 0 0 4px; - padding: 0 20px 0 4px; - float: left; - vertical-align: top; - text-decoration: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #eaf2ff; - color: #000000; -} -.tagbox-remove { - background: url('images/tagbox_icons.png') no-repeat -16px center; - position: absolute; - display: block; - width: 16px; - height: 16px; - right: 2px; - top: 50%; - margin-top: -8px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tagbox-remove:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.textbox-disabled .tagbox-label { - cursor: default; -} -.textbox-disabled .tagbox-remove:hover { - cursor: default; - opacity: 0.6; - filter: alpha(opacity=60); -} diff --git a/assets/js/easy-ui/themes/default/textbox.css b/assets/js/easy-ui/themes/default/textbox.css deleted file mode 100644 index ae2d963ed7..0000000000 --- a/assets/js/easy-ui/themes/default/textbox.css +++ /dev/null @@ -1,139 +0,0 @@ -.textbox { - position: relative; - border: 1px solid #95B8E7; - background-color: #fff; - vertical-align: middle; - display: inline-block; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 0; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 4px; - white-space: normal; - vertical-align: top; - outline-style: none; - resize: none; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.textbox .textbox-text::-ms-clear, -.textbox .textbox-text::-ms-reveal { - display: none; -} -.textbox textarea.textbox-text { - white-space: pre-wrap; -} -.textbox .textbox-prompt { - font-size: 12px; - color: #aaa; -} -.textbox .textbox-bgicon { - background-position: 3px center; - padding-left: 21px; -} -.textbox .textbox-button, -.textbox .textbox-button:hover { - position: absolute; - top: 0; - padding: 0; - vertical-align: top; - -moz-border-radius: 0 0 0 0; - -webkit-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; -} -.textbox .textbox-button-right, -.textbox .textbox-button-right:hover { - right: 0; - border-width: 0 0 0 1px; -} -.textbox .textbox-button-left, -.textbox .textbox-button-left:hover { - left: 0; - border-width: 0 1px 0 0; -} -.textbox .textbox-button-top, -.textbox .textbox-button-top:hover { - left: 0; - border-width: 0 0 1px 0; -} -.textbox .textbox-button-bottom, -.textbox .textbox-button-bottom:hover { - top: auto; - bottom: 0; - left: 0; - border-width: 1px 0 0 0; -} -.textbox-addon { - position: absolute; - top: 0; -} -.textbox-label { - display: inline-block; - width: 80px; - height: 22px; - line-height: 22px; - vertical-align: middle; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - padding-right: 5px; -} -.textbox-label-after { - padding-left: 5px; - padding-right: 0; -} -.textbox-label-top { - display: block; - width: auto; - padding: 0; -} -.textbox-disabled, -.textbox-label-disabled { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-icon { - display: inline-block; - width: 18px; - height: 20px; - overflow: hidden; - vertical-align: top; - background-position: center center; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); - text-decoration: none; - outline-style: none; -} -.textbox-icon-disabled, -.textbox-icon-readonly { - cursor: default; -} -.textbox-icon:hover { - opacity: 1.0; - filter: alpha(opacity=100); -} -.textbox-icon-disabled:hover { - opacity: 0.6; - filter: alpha(opacity=60); -} -.textbox-focused { - border-color: #6b9cde; - -moz-box-shadow: 0 0 3px 0 #95B8E7; - -webkit-box-shadow: 0 0 3px 0 #95B8E7; - box-shadow: 0 0 3px 0 #95B8E7; -} -.textbox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; -} diff --git a/assets/js/easy-ui/themes/default/tooltip.css b/assets/js/easy-ui/themes/default/tooltip.css deleted file mode 100644 index 9294d9da8f..0000000000 --- a/assets/js/easy-ui/themes/default/tooltip.css +++ /dev/null @@ -1,103 +0,0 @@ -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - opacity: 1; - filter: alpha(opacity=100); - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-arrow { - display: none \9; -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #95B8E7; - color: #000000; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #95B8E7; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #95B8E7; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #95B8E7; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #95B8E7; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} diff --git a/assets/js/easy-ui/themes/default/tree.css b/assets/js/easy-ui/themes/default/tree.css deleted file mode 100644 index d6f5e16499..0000000000 --- a/assets/js/easy-ui/themes/default/tree.css +++ /dev/null @@ -1,161 +0,0 @@ -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url('images/tree_icons.png') no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url('images/tree_icons.png') no-repeat -50px 0px; -} -.tree-collapsed { - background: url('images/tree_icons.png') no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url('images/tree_icons.png') no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url('images/tree_icons.png') no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url('images/tree_icons.png') no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url('images/tree_icons.png') no-repeat -64px 0; -} -.tree-line { - background: url('images/tree_icons.png') no-repeat -176px 0; -} -.tree-join { - background: url('images/tree_icons.png') no-repeat -192px 0; -} -.tree-joinbottom { - background: url('images/tree_icons.png') no-repeat -160px 0; -} -.tree-folder { - background: url('images/tree_icons.png') no-repeat -208px 0; -} -.tree-folder-open { - background: url('images/tree_icons.png') no-repeat -224px 0; -} -.tree-file { - background: url('images/tree_icons.png') no-repeat -240px 0; -} -.tree-loading { - background: url('images/loading.gif') no-repeat center center; -} -.tree-checkbox0 { - background: url('images/tree_icons.png') no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url('images/tree_icons.png') no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url('images/tree_icons.png') no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url('images/tree_icons.png') no-repeat -256px 0; -} -.tree-dnd-no { - background: url('images/tree_icons.png') no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #95B8E7; - font-size: 12px; - line-height: 16px; - padding: 0 4px; - margin: 0; - width: 80px; - outline-style: none; - vertical-align: top; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #000000; - border-color: #95B8E7; -} -.tree-node-hover { - background: #eaf2ff; - color: #000000; -} -.tree-node-selected { - background: #ffe48d; - color: #000000; -} -.tree-node-hidden { - display: none; -} diff --git a/assets/js/easy-ui/themes/default/validatebox.css b/assets/js/easy-ui/themes/default/validatebox.css deleted file mode 100755 index 1fc3ad64e4..0000000000 --- a/assets/js/easy-ui/themes/default/validatebox.css +++ /dev/null @@ -1,5 +0,0 @@ -.validatebox-invalid { - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} diff --git a/assets/js/easy-ui/themes/default/window.css b/assets/js/easy-ui/themes/default/window.css deleted file mode 100644 index ee7e8bdd82..0000000000 --- a/assets/js/easy-ui/themes/default/window.css +++ /dev/null @@ -1,183 +0,0 @@ -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .panel-body-nobottom { - border-bottom-width: 0; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.40; - font-size: 1px; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #95B8E7; -} -.window { - background-color: #E0ECFF; - background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); - background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); - background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); - background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); -} -.window-proxy { - border: 1px dashed #95B8E7; -} -.window-proxy-mask, -.window-mask { - background: #ccc; -} -.window .panel-footer { - border: 1px solid #95B8E7; - position: relative; - top: -1px; -} -.window-thinborder { - padding: 0; -} -.window-thinborder .window-header { - padding: 5px 5px 6px 5px; -} -.window-thinborder .window-body { - border-width: 0px; -} -.window-thinborder .window-header .panel-icon, -.window-thinborder .window-header .panel-tool { - margin-top: -9px; - margin-left: 5px; - margin-right: 5px; -} -.window-noborder { - border: 0; -} -.window.panel-hleft .window-header { - padding: 0 6px 0 0; -} -.window.panel-hright .window-header { - padding: 0 0 0 6px; -} -.window.panel-hleft>.panel-header .panel-title { - top: auto; - left: 16px; -} -.window.panel-hright>.panel-header .panel-title { - top: auto; - right: 16px; -} -.window.panel-hleft>.panel-header .panel-title-up, -.window.panel-hright>.panel-header .panel-title-up { - bottom: 0; -} -.window.panel-hleft .window-body { - border-width: 1px 1px 1px 0; -} -.window.panel-hright .window-body { - border-width: 1px 0 1px 1px; -} -.window.panel-hleft .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: 0; -} -.window.panel-hright .window-header .panel-icon { - top: 1px; - margin-top: 0; - left: auto; - right: 1px; -} -.window.panel-hleft .window-header .panel-tool, -.window.panel-hright .window-header .panel-tool { - margin-top: 0; - top: auto; - bottom: 1px; - right: auto; - margin-right: 0; - left: 50%; - margin-left: -11px; -} -.window.panel-hright .window-header .panel-tool { - left: auto; - right: 1px; -} -.window-thinborder.panel-hleft .window-header { - padding: 5px 6px 5px 5px; -} -.window-thinborder.panel-hright .window-header { - padding: 5px 5px 5px 6px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title { - left: 21px; -} -.window-thinborder.panel-hleft>.panel-header .panel-title-up, -.window-thinborder.panel-hright>.panel-header .panel-title-up { - bottom: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-icon, -.window-thinborder.panel-hright .window-header .panel-icon { - margin-top: 5px; -} -.window-thinborder.panel-hleft .window-header .panel-tool, -.window-thinborder.panel-hright .window-header .panel-tool { - left: 16px; - bottom: 5px; -} From 78a7c3cbd5791e9c19bbaf86383ec4c5e414b93a Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sun, 5 Nov 2017 00:15:35 +0300 Subject: [PATCH 336/577] update demo site --- install/setup.data.sql | 84 ++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 32 deletions(-) diff --git a/install/setup.data.sql b/install/setup.data.sql index 45725f6f1c..c519ac29e7 100644 --- a/install/setup.data.sql +++ b/install/setup.data.sql @@ -17,83 +17,104 @@ REPLACE INTO `{PREFIX}documentgroup_names` VALUES ('1','Site Admin Pages','0','0 # Dumping data for table `site_content` # -REPLACE INTO `{PREFIX}site_content` VALUES ('1','document','text/html','Home','Welcome to EVO','Introduction to EVO','index','','1','0','0','0','0','Create and do amazing things with EVO','

    Install successful!

    \n

    You have successfully installed and configured EVO. We hope you find this site an adequate starting configuration for many small business, organization or personal websites; just change the template and content, and you\'ll be good to go! This site is preconfigured with a variety of options we hope are helpful, relevant and just plain cool for many marketing or personal sites:

    \n
      \n
    • Simple Blog. When logged into your site, you\'ll be able to create new entries from the front end. This can also be turned into a News publishing or PR publishing system. View example blog
    • \n
    • Easy Comments. When logged into your site, your registered site users can comment on your posts. View example
    • \n
    • RSS Feeds. Your site visitors can stay up to date using your site feeds. View RSS feed
    • \n
    • Automatic User Registration. Those that wish to comment on blogs must first create an account. This comes pre-configured with a \"Captcha\" anti-robot registration feature. View registration form
    • \n
    • QuickEdit. When you\'re logged into the manager, you can edit a page directly from the front end! More about CMS features
    • \n
    • Integrated Site Search. Allows visitors to search only the pages you wish them to search. Uses Ajax to display results without loading a new page.
    • \n
    • Powerful Navigation Builder. Duplicate or build virtually any navigation system with our dynamic menu builder code. The menu above, for example. More about menu features
    • \n
    • Ajax ready. You\'re on your way to Web 2.0 and AJAX goodness. More about Ajax features
    • \n
    • Custom \"page not found (404)\" page. Help visitors who go astray to find what they\'re looking for. View 404 page
    • \n
    • Contact Us form. A highly configurable contact form you should customize to point to the right email address. Comes pre-configured to prevent mail-form-injection so your site does not become a source for spam. View form
    • \n
    • Newest documents list. Shows your visitor the most recently added pages (configurable).
    • \n
    • Customizable Content Manager. Preview uploaded images, hide or rename fields and lots more. See ManagerManager\'s documentation for details and instructions. Quick start: ManagerManager by default will look for \"rules\" in a Chunk named \"mm_rules\". Simply copy or rename the Chunk named \"mm_demo_rules\" to \"mm_rules\" and try it out!
    • \n
    • phpThumb. Examples to use phpThumb to crop images.
    • \n
    \n

    Full documentation can be found on the official documentation site.

    \n

    To log into the EVO Control Panel and start customizing this site, point your browser to /manager/.

    ','1','{BOOTSTRAP_SQL_ID}','0','1','1','1','1144904400','1','1378084284','0','0','0','0','0','Home','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('1','document','text/html','Home','Welcome to EVO','Introduction to EVO','index','','1','0','0','0','0','Create and do amazing things with EVO','

    Install successful!

    \n

    You have successfully installed and configured EVO. We hope you find this site an adequate starting configuration for many small business, organization or personal websites; just change the template and content, and you\'ll be good to go! This site is preconfigured with a variety of options we hope are helpful, relevant and just plain cool for many marketing or personal sites:

    \n
      \n
    • Simple Blog. When logged into your site, you\'ll be able to create new entries from the front end. This can also be turned into a News publishing or PR publishing system. View example blog
    • \n
    • Easy Comments. When logged into your site, your registered site users can comment on your posts. View example
    • \n
    • RSS Feeds. Your site visitors can stay up to date using your site feeds. View RSS feed
    • \n
    • Automatic User Registration. Those that wish to comment on blogs must first create an account. This comes pre-configured with a \"Captcha\" anti-robot registration feature. View registration form
    • \n
    • QuickEdit. When you\'re logged into the manager, you can edit a page directly from the front end! More about CMS features
    • \n
    • Integrated Site Search. Allows visitors to search only the pages you wish them to search. Uses Ajax to display results without loading a new page.
    • \n
    • Powerful Navigation Builder. Duplicate or build virtually any navigation system with our dynamic menu builder code. The menu above, for example. More about menu features
    • \n
    • Ajax ready. You\'re on your way to Web 2.0 and AJAX goodness. More about Ajax features
    • \n
    • Custom \"page not found (404)\" page. Help visitors who go astray to find what they\'re looking for. View 404 page
    • \n
    • Contact Us form. A highly configurable contact form you should customize to point to the right email address. Comes pre-configured to prevent mail-form-injection so your site does not become a source for spam. View form
    • \n
    • Newest documents list. Shows your visitor the most recently added pages (configurable).
    • \n
    • Customizable Content Manager. Preview uploaded images, hide or rename fields and lots more. See ManagerManager\'s documentation for details and instructions. Quick start: ManagerManager by default will look for \"rules\" in a Chunk named \"mm_rules\". Simply copy or rename the Chunk named \"mm_demo_rules\" to \"mm_rules\" and try it out!
    • \n
    • phpThumb. Examples to use phpThumb to crop images.
    • \n
    \n

    Full documentation can be found on the official documentation site.

    \n

    To log into the EVO Control Panel and start customizing this site, point your browser to /manager/.

    ','1','4','0','1','1','1','1144904400','1','1507728141','0','0','0','0','0','Home','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('2','document','text/html','Blog','My Blog','','blog','','1','0','0','0','1','','[[Ditto? &parents=`2` &display=`2` &removeChunk=`Comments` &tpl=`ditto_blog` &paginate=`1` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`1` &tagData=`documentTags`]]\n\n

    Showing [+start+] - [+stop+] of [+total+] Articles

    \n\n
    [+previous+] [+pages+] [+next+]
    \n\n
     
    \n\n[[Reflect? &config=`wordpress` &dittoSnippetParameters=`parents:2` &id=`wp` &getDocuments=`1`]]','1','{BOOTSTRAP_SQL_ID}','1','0','0','1','1144904400','1','1159818696','0','0','0','0','0','Blog','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('2','document','text/html','Blog','My Blog','','blog','','1','0','0','0','1','','[[DocLister? \n &jotcount=`1`\n &parents=`2` \n &display=`2`\n &tvPrefix=``\n &tvList=`image`\n &prepare=`prepareBlog`\n &summary=`notags,len:350` \n &tpl=`@CODE:\n
    \n [+blog-image+] \n

    [+e.title+]

    \n
    \n By [+author+] on [+date+].\n Comments [+jotcount+]\n
    \n [+summary+]\n

    [+link+]

    \n
    ` \n &paginate=`1` \n]]\n\n

    Showing [+current+] of [+totalPages+] Pages

    \n
    [+pages+]
    \n

     

    ','0','4','1','0','1','1','1144904400','1','1507727477','0','0','0','0','0','Blog','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','[*loginName*]','Login to Enable to Comments','','login','','1','0','0','0','0','','

    In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

    \n
    [!WebLogin? &tpl=`WebLogin_tplForm` &loginhomeid=`2`!]
    ','1','{BOOTSTRAP_SQL_ID}','9','0','0','1','1144904400','1','1144904400','0','0','0','0','0','[*loginName*]','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','Profile','User profile','','profile','','1','0','0','0','1','','[!FormLister?\n&debug=`1`\n&formid=`login`\n&controller=`Login`\n&loginField=`email`\n&redirectTo=`49`\n&defaults=`{\"rememberme\":1}`\n&rules=`{\n \"email\":{\n \"required\":\"Enter your Email\"\n },\n \"password\":{\n \"required\":\"Enter your password\"\n }\n}`\n&formTpl=`@CODE:\n\n

    In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

    \n\n
    \n [+form.messages+]\n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n\n
    \n \n
    \n \n
    \n
    \n
    \n`\n&skipTpl=`@CODE:\n
    Hello, [!$_SESSION[\'webFullname\']!]!
    \n `\n\n&allowedFields=`email,password`\n&errorTpl=`@CODE:

    [+message+]

    `\n&messagesOuterTpl=`@CODE:\n
    [+messages+]
    `\n\n&errorClass=` has-error` \n&requiredClass=` has-warning`\n!] \n','0','4','6','0','1','1','1144904400','1','1509817775','0','0','0','0','0','','0','0','0','0','0','0'); -REPLACE INTO `{PREFIX}site_content` VALUES ('5','document','text/html','Request an Account','Sign Up for Full Site Privileges','','request-an-account','','1','0','0','0','0','','[[WebSignup? &tpl=`FormSignup` &groups=`Registered Users`]]','1','{BOOTSTRAP_SQL_ID}','7','0','0','1','1144904400','1','1158320704','0','0','0','0','0','','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('5','document','text/html','Request an Account','Sign Up for Full Site Privileges','','request-an-account','','1','0','0','4','0','',' [!FormLister?\n &formid=`registerForm`\n &controller=`Register`\n &requiredClass=`has-warning`\n &errorClass=`has-error`\n &errorTpl=`@CODE:[+message+]`\n &allowedFields=`email,username,fullname,country`\n &rules=`{\n \"username\":{\n \"required\":\"Enter your username\",\n \"alphaNumeric\":\"Only letters and numbers\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueUsername\",\n \"message\":\"Name already taken\"\n }\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueEmail\",\n \"message\":\"This email is already in use by another user\"\n }\n },\n \"password\":{\n \"required\":\"Enter password\"\n },\n \"repeatPassword\":{\n \"required\":\"Retype password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n }`\n &captcha=`modxCaptcha`\n &formTpl=`@CODE: \n\n
    \n \n

    User Details

    \n
    \n \n Items marked by * are required\n
    \n \n
    \n \n \n [+username.error+]\n
    \n \n
    \n \n \n [+fullname.error+]\n
    \n \n
    \n \n \n [+email.error+]\n
    \n\n
    \n

    Password

    \n \n \n [+password.error+]\n
    \n
    \n \n \n [+repeatPassword.error+]\n
    \n \n
    \n

    Optional Account Profile Info

    \n \n \n [+country.error+]\n
    \n \n
    \n

    Bot-Patrol

    \n

    Enter the word/number combination shown in the image below.

    \n \n

    \"If

    \n \n [+vericode.error+]\n
    \n \n
    \n \n
    \n\n
    \n\n\n\n `\n &successTpl=`@CODE:\n

    Signup completed successfully!
    \n Your account was created. A copy of your signup information was sent to your email address.

    \n `!]','0','4','1','0','1','1','1144904400','1','1509817935','0','0','0','0','0','','0','0','0','0','1','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('6','document','text/html','Contact Us','Contact [(site_name)]','','contact-us','','1','0','0','0','0','','\n\n[!eForm? \n &formid=`ContactForm`\n &vericode=`1`\n &subject=`[+subject+]`\n &to=`[(emailsender)]` \n &ccsender=`1`\n &tpl=`ContactForm`\n &report=`ContactFormReport`\n &invalidClass=`invalidValue`\n &requiredClass=`requiredValue`\n &gotoid=`46`\n!]\n','0','{BOOTSTRAP_SQL_ID}','5','1','0','1','1144904400','1','1159303922','0','0','0','0','0','Contact us','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('6','document','text/html','Contact Us','Contact [(site_name)]','','contact-us','','1','0','0','0','0','','\n\n\n
    \n {{ContactForm}}\n
    \n','0','4','5','1','1','1','1144904400','1','1507815490','0','0','0','0','0','Contact us','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('7','document','text/html','404 - Document Not Found','Uh oh ... it\'s a 404! (Page Not Found)','','doc-not-found','','1','0','0','0','0','','

    Looks like you tried to go somewhere that does not exist... perhaps you need to login or you\'d like one of the following pages instead:

    \n\n[[Wayfinder? &startId=`0` &showDescription=`1`]]\n\n

    Want to find it the old fashioned way? Use the site search at the top of this site to find what you seek.

    \n\n','1','{BOOTSTRAP_SQL_ID}','12','0','1','1','1144904400','1','1159301173','0','0','0','0','0','','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('7','document','text/html','404 - Document Not Found','Uh oh ... it\'s a 404! (Page Not Found)','','doc-not-found','','1','0','0','0','0','','

    Looks like you tried to go somewhere that does not exist... perhaps you need to login or you\'d like one of the following pages instead:

    \n

    [[DLMenu? &parents=`0`]]

    \n

    Want to find it the old fashioned way? Use the site search at the top of this site to find what you seek.

    ','1','4','10','0','1','1','1144904400','1','1507728168','0','0','0','0','0','','0','0','0','0','1','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('8','document','text/html','Search Results','Your Search Results','','search-results','','1','0','0','0','0','','[!AjaxSearch? &showInputForm=`0` &ajaxSearch=`0`!]','0','{BOOTSTRAP_SQL_ID}','10','0','0','1','1144904400','1','1158613055','0','0','0','0','0','','1','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('8','document','text/html','Search Results','Your Search Results','','search-results','','1','0','0','0','0','','[!AjaxSearch? &showInputForm=`0` &ajaxSearch=`0`!]','0','4','8','0','1','1','1144904400','1','1507728119','0','0','0','0','0','','1','0','0','0','1','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('9','document','text/html','Mini-Blog HOWTO','How to Start Posting with EVO Mini-Blogs','','article-1126081344','','1','0','0','2','0','','

    Setting up a mini-blog is relatively simple. Here\'s what you need to do to get started with making new posts:

    \n
      \n
    1. Login to the EVO Control Panel.
    2. \n
    3. Press the plus-sign next to the Blog(2) container resource to see the blog entries posted there.
    4. \n
    5. To make a new Blog entry, simply right-click the Blog container document and choose the \"Create Resource here\" menu option. To edit an existing blog article, right click the entry and choose the \"Edit Resource\" menu option.
    6. \n\n
    7. Write or edit the content and press save, making sure the document is published.
    8. \n
    9. Everything else is automatic; you\'re done!
    10. \n
    \n{{Comments}}','1','{BOOTSTRAP_SQL_ID}','0','1','1','-1','1144904400','1','1378084370','0','0','0','0','0','','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('9','document','text/html','Mini-Blog HOWTO','How to Start Posting with EVO Mini-Blogs','','article-1126081344','','1','0','0','2','0','','

    Setting up a mini-blog is relatively simple. Here\'s what you need to do to get started with making new posts:

    \n
      \n
    1. Login to the EVO Control Panel.
    2. \n
    3. Press the plus-sign next to the Blog(2) container resource to see the blog entries posted there.
    4. \n
    5. To make a new Blog entry, simply right-click the Blog container document and choose the \"Create Resource here\" menu option. To edit an existing blog article, right click the entry and choose the \"Edit Resource\" menu option.
    6. \n\n
    7. Write or edit the content and press save, making sure the document is published.
    8. \n
    9. Everything else is automatic; you\'re done!
    10. \n
    ','1','4','0','1','1','-1','1144904400','1','1509818890','0','0','0','0','0','','0','0','0','0','1','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('11','document','text/xml','RSS Feed','[(site_name)] RSS Feed','','feed.rss','','1','0','0','0','0','','[[Ditto? &parents=`2` &format=`rss` &display=`20` &total=`20` &removeChunk=`Comments`]]','0','0','11','0','0','1','1144904400','1','1160062859','0','0','0','0','0','','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('11','document','application/rss+xml','RSS Feed','[(site_name)] RSS Feed','','feed.rss','','1','0','0','0','0','','\n\n\n [(site_name)]\n [(site_url)]\n Evolution CMS demo site Feed\n [[DocLister? \n &parents=`2` \n &display=`20`\n &summary=`notags,len:350` \n &tpl=`@CODE:\n [+e.title+]\n [(site_url)][~[+id+]~]\n \n [+date+]\n [(site_url)][~[+id+]~]\n [+author+]\n `\n ]]\n\n','0','0','9','0','1','1','1144904400','1','1507728107','0','0','0','0','0','','0','0','0','0','1','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('14','document','text/html','Content Management','Ways to manage content','','cms','','1','0','0','15','0','','

    Manage your content in the backend

    \n

    The Manager is a skinnable feature-packed tool for admin users. You can add extra users and limit what functions they can access. EVO\'s Manager makes creating content and managing templates and reusable elements easy. Modules can be added to work with other datasets or make management tasks easier.

    \n

    Manage your content in the frontend

    \n

    The QuickEdit bar lets manager users edit content whilst browsing the site. Most content fields and template variables can be edited quickly and easily.

    \n

    Enable web users to add content

    \n

    Custom data entry is easy to code using the EVO API - so you can design forms and collect whatever information you need.

    ','1','{BOOTSTRAP_SQL_ID}','3','1','1','1','1144904400','1','1378086298','0','0','0','1378086298','1','Manage Content','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('14','document','text/html','Content Management','Ways to manage content','','cms','','1','0','0','15','0','','

    Manage your content in the backend

    \n

    The Manager is a skinnable feature-packed tool for admin users. You can add extra users and limit what functions they can access. EVO\'s Manager makes creating content and managing templates and reusable elements easy. Modules can be added to work with other datasets or make management tasks easier.

    \n

    Manage your content in the frontend

    \n

    The QuickEdit bar lets manager users edit content whilst browsing the site. Most content fields and template variables can be edited quickly and easily.

    \n

    Enable web users to add content

    \n

    Custom data entry is easy to code using the EVO API - so you can design forms and collect whatever information you need.

    ','1','4','3','1','1','1','1144904400','1','1378086298','0','0','0','1378086298','1','Manage Content','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('15','document','text/html','EVO Features','EVO Features','','features','','1','0','0','0','1','','[[Wayfinder?startId=`[*id*]` &outerClass=`topnav`]]','1','{BOOTSTRAP_SQL_ID}','2','1','1','1','1144904400','1','1158452722','0','0','0','1144777367','1','Features','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('15','document','text/html','EVO Features','EVO Features','','features','','1','0','0','0','1','','[[Wayfinder?startId=`[*id*]` &outerClass=`topnav`]]','1','4','2','1','1','1','1144904400','1','1158452722','0','0','0','1144777367','1','Features','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('16','document','text/html','Ajax','Ajax and Web 2.0 ready','','ajax','','1','1159264800','0','15','0','','Ajax ready out-of-the-box\n

    EVO empowers users to build engaging sites today, with its pre-integrated Mootools javascript library.

    \n\n

    Check out the Ajax-powered search in this example site. The libraries are also used with QuickEdit, our front-end editing tool.

    \n\n

    Smart integration means the scripts are only included in the document head when needed - no unnecessary bloat on simple pages!

    \n\nWeb 2.0 today\n

    EVO makes child\'s play of building content managed sites with validating, accessible CSS layouts - so web standards compliance is easy. (You can create a site with excessively nested tables too, if you really want to).

    \n','1','{BOOTSTRAP_SQL_ID}','1','1','1','1','1144904400','1','1159307504','0','0','0','0','0','Ajax','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('16','document','text/html','Ajax','Ajax and Web 2.0 ready','','ajax','','1','1159264800','0','15','0','','

    Ajax ready out-of-the-box

    \n

    EVO empowers users to build engaging sites today, with its pre-integrated jQuery javascript library.

    \n

    Check out the Ajax-powered search in this example site. The libraries are also used with QuickEdit, our front-end editing tool.

    \n

    Smart integration means the scripts are only included in the document head when needed - no unnecessary bloat on simple pages!

    \n

    Web 2.0 today

    \n

    EVO makes child\'s play of building content managed sites with validating, accessible CSS layouts - so web standards compliance is easy. (You can create a site with excessively nested tables too, if you really want to).

    ','1','4','1','1','1','1','1144904400','1','1507726420','0','0','0','1159264800','1','Ajax','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('18','document','text/html','Just a pretend, older post','This post should in fact be archived','','article-1128398162','','1','0','0','2','0','','

    Not so exciting, after all, eh?

    \n','1','{BOOTSTRAP_SQL_ID}','2','1','1','-1','1144904400','1','1159306886','0','0','0','0','0','','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('18','document','text/html','Just a pretend, older post','This post should in fact be archived','','article-1128398162','','1','0','0','2','0','','

    Not so exciting, after all, eh?

    ','1','4','2','1','1','-1','1144904400','1','1509818884','0','0','0','0','0','','0','0','0','0','1','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('22','document','text/html','Menus and Lists','Flexible Menus and Lists','','menus','','1','1159178400','0','15','0','','

    Your documents - listed how you want them

    \n

    EVO\'s document data structure has been designed to allow many different routines to redisplay the information in ways that suit your needs, such as a dynamic menu in your template.

    \n

    Since the last release of EVO, the community has produced many great snippets - reusable functions that you can call in your content or template. Two of the most widely useful are Ditto and Wayfinder.

    \n

    Wayfinder - the menu builder

    \n

    Allows you to template every part of the menu. On this site, Wayfinder is being used to generate the drop-down menus, but many types of menus and sitemaps are possible.

    \n

    Ditto - the document lister

    \n

    Uses include listing the most recent blog posts, producing a site map, listing related documents (using a TV filter) and generating an RSS feed. You could even write a menu with it. On this site, Ditto is being used for the blog posts list on the Blog page, and the list on the right of some templates.

    \n

    Unlimited Customization

    \n

    If you can\'t quite get your desired effect using templating and the many options of Ditto and Wayfinder, you can write your own routine, or look for other snippets in the EVO repository. EVO\'s fields for Menu Title, summaries, menu position etc can be used via the API to produce anything you can imagine.

    ','1','{BOOTSTRAP_SQL_ID}','2','1','1','1','1144904400','1','1160148522','0','0','0','0','0','Menus and Lists','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('22','document','text/html','Menus and Lists','Flexible Menus and Lists','','menus','','1','1159178400','0','15','0','','

    Your documents - listed how you want them

    \n

    EVO\'s document data structure has been designed to allow many different routines to redisplay the information in ways that suit your needs, such as a dynamic menu in your template.

    \n

    Since the last release of EVO, the community has produced many great snippets - reusable functions that you can call in your content or template. Two of the most widely useful are Ditto and Wayfinder.

    \n

    Wayfinder - the menu builder

    \n

    Allows you to template every part of the menu. On this site, Wayfinder is being used to generate the drop-down menus, but many types of menus and sitemaps are possible.

    \n

    Ditto - the document lister

    \n

    Uses include listing the most recent blog posts, producing a site map, listing related documents (using a TV filter) and generating an RSS feed. You could even write a menu with it. On this site, Ditto is being used for the blog posts list on the Blog page, and the list on the right of some templates.

    \n

    Unlimited Customization

    \n

    If you can\'t quite get your desired effect using templating and the many options of Ditto and Wayfinder, you can write your own routine, or look for other snippets in the EVO repository. EVO\'s fields for Menu Title, summaries, menu position etc can be used via the API to produce anything you can imagine.

    ','1','4','2','1','1','1','1144904400','1','1160148522','0','0','0','0','0','Menus and Lists','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('24','document','text/html','Extendable by design','Extendable by design','','extendable','','1','1159092732','0','15','0','','

    The EVO community has created many add-ons which can be found in the Repository, from image galleries and e-commerce to smaller utilities.

    \n

    Template Variables with Bindings

    \n

    TVs - Template Variables - are powerful extra fields that you can use with your documents. As an example of an advanced template element that returns a different thing dependent on code or data, we created an @BINDING for the name of the Login menu item. This changes the menu name from Login to Logout based on your logged in state. The @BINDING as follows was placed in the default value as: @EVAL if ($modx->getLoginUserID()) return \'Logout\'; else return \'Login\';

    \n

    Using jQuery-effects

    \n

    We used some simple effects to highlight various things on the front/home page to demonstrate how easy it is to create a useful way to draw attention to things. To see them in action on the home page, click the Integrated Site Search, Related Links or Newest Documents headers.

    \n

    Custom Forms

    \n

    To demonstrate how to link to custom forms, we customized the calls to the Webuser Registration system and the Login system.

    \n

    And more

    \n

    Rich Text Editor for blog entries. To make it easier to format blog posts with simple text formatting, we modified the blog to use a custom RTE-enabled Template Variable (TV).

    \n

    Smart-Summary logic. When splitting the full blog/news posts you simply insert a \"<!-- splitter -->\" where you want the break to occur. In addition, if that leaves any important tags open, it will try to match them and close them so it doesn\'t mess up your site layout with unclosed OL, UL or DIV tags.

    ','1','{BOOTSTRAP_SQL_ID}','4','1','1','2','1144904400','1','1159309971','0','0','0','0','0','Extendability','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('24','document','text/html','Extendable by design','Extendable by design','','extendable','','1','1159092732','0','15','0','','

    The EVO community has created many add-ons which can be found in the Repository, from image galleries and e-commerce to smaller utilities.

    \n

    Template Variables with Bindings

    \n

    TVs - Template Variables - are powerful extra fields that you can use with your documents. As an example of an advanced template element that returns a different thing dependent on code or data, we created an @BINDING for the name of the Login menu item. This changes the menu name from Login to Logout based on your logged in state. The @BINDING as follows was placed in the default value as: @EVAL if ($modx->getLoginUserID()) return \'Logout\'; else return \'Login\';

    \n

    Using jQuery-effects

    \n

    We used some simple effects to highlight various things on the front/home page to demonstrate how easy it is to create a useful way to draw attention to things. To see them in action on the home page, click the Integrated Site Search, Related Links or Newest Documents headers.

    \n

    Custom Forms

    \n

    To demonstrate how to link to custom forms, we customized the calls to the Webuser Registration system and the Login system.

    \n

    And more

    \n

    Rich Text Editor for blog entries. To make it easier to format blog posts with simple text formatting, we modified the blog to use a custom RTE-enabled Template Variable (TV).

    \n

    Smart-Summary logic. When splitting the full blog/news posts you simply insert a \"<!-- splitter -->\" where you want the break to occur. In addition, if that leaves any important tags open, it will try to match them and close them so it doesn\'t mess up your site layout with unclosed OL, UL or DIV tags.

    ','1','4','4','1','1','2','1144904400','1','1159309971','0','0','0','0','0','Extendability','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('32','document','text/html','Design','Site Design','','design','','1','0','0','0','0','','

    Credits

    \n

    The EVO Starter-theme is based on Bootstrap 3.3.6 and made by graffx.nl and fuseit.de.

    ','1','{BOOTSTRAP_SQL_ID}','4','1','1','2','1144904400','1','1160112322','0','0','0','1144912754','1','Design','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('32','document','text/html','Design','Site Design','','design','','1','0','0','0','0','','

    Credits

    \n

    The EVO Starter-theme is based on Bootstrap 3.3.6 and made by graffx.nl and fuseit.de.

    ','1','4','4','1','1','2','1144904400','1','1160112322','0','0','0','1144912754','1','Design','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('33','document','text/html','Getting Help','Getting Help with EVO','','getting-help','','1','0','0','0','0','','

    The team behind EVO strives to constantly add to and refine the documentation to help you get up to speed with EVO:

    \n
      \n
    • For basic instructions on integrating custom templates into EVO, please see the Designer\'s Guide.
    • \n
    • For an introduction to working in EVO from the content editors perspectve, see the Content Editor\'s Guide.
    • \n
    • For a detailed overview of the backend "manager" and setting up Users and Groups, please peruse the Administration Guide.
    • \n
    • For developers, architecture and API documentation can be found in the Developer\'s Guide.
    • \n
    • And if someone has installed this site for you, but you\'re curious as to the steps they went through, please see the Getting Started Guide.
    • \n
    \n\n

    And don\'t forget, you can always learn and ask questions at the EVO forums. \n','1','{BOOTSTRAP_SQL_ID}','3','1','1','2','1144904400','2','1144904400','0','0','0','0','0','Getting Help','0','0','0','0','0','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('33','document','text/html','Getting Help','Getting Help with EVO','','getting-help','','1','0','0','0','0','','

    The team behind EVO strives to constantly add to and refine the documentation to help you get up to speed with EVO:

    \n
      \n
    • For basic instructions on integrating custom templates into EVO, please see the Designer\'s Guide.
    • \n
    • For an introduction to working in EVO from the content editors perspectve, see the Content Editor\'s Guide.
    • \n
    • For a detailed overview of the backend \"manager\" and setting up Users and Groups, please peruse the Administration Guide.
    • \n
    • For developers, architecture and API documentation can be found in the Developer\'s Guide.
    • \n
    • And if someone has installed this site for you, but you\'re curious as to the steps they went through, please see the Getting Started Guide.
    • \n
    \n

    And don\'t forget, you can always learn and ask questions at the EVO forums.

    ','1','4','3','1','1','2','1144904400','1','1507728208','0','0','0','0','0','Getting Help','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('37','document','text/html','[*loginName*]','The page you\'re trying to reach requires a login','','blog-login','','1','0','0','0','0','','

    In order to add a blog entry, you must be logged in as a Site Admin webuser. Also, commenting on posts requires a login. Contact the site owner for permissions to create new post, or create a web user account to automatically receive commenting privileges. If you already have an account, please login below.

    \n\n[!WebLogin? &tpl=`WebLogin_tplForm` &loginhomeid=`3`!]','1','{BOOTSTRAP_SQL_ID}','8','0','0','1','1144904400','1','1158599931','0','0','0','0','0','','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('37','document','text/html','Forgot Password','','','forgot-password','','1','0','0','4','0','','[!FormLister?\n&controller=`Reminder`\n&formid=`remind`\n&rules=`{\n \"email\":{\n \"required\":\"Be sure to enter email\",\n \"email\":\"Enter email correctly\"\n }\n}`\n&resetRules=`{\n \"password\":{\n \"required\":\"Be sure to enter the password\",\n \"minLength\":{\n \"params\":6,\n \"message\":\"Password must be longer than 6 characters\"\n }\n },\n \"repeatPassword\":{\n \"required\":\"Repeat password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n}`\n&formTpl=`@CODE:\n\n
    \n [+form.messages+]\n \n
    \n \n
    \n \n [+email.error+]\n
    \n\n
    \n \n
    \n
    \n
    `\n\n&resetTpl=`@CODE:\n
    \n [+form.messages+]\n \n
    \n \n
    \n \n [+password.error+]\n \n [+repeatPassword.error+]\n
    \n
    \n \n
    \n
    \n
    \n`\n&messagesOuterTpl=`@CODE:
    [+messages+]
    `\n&successTpl=`@CODE:\n
    \n
    An email with the instructions has been sent to the email you specified when registering!
    \n
    `\n\n&subject=`Password recovery, [(site_name)]`\n&reportTpl=`@CODE:

    To recover your password, click on the link [+reset.url+]

    `\n&resetReportTpl=`@CODE:

    Hello, [+fullname.value+]!

    Your new password: [+newpassword+]

    `\n&resetTo=`37`\n&redirectTo=`4`\n&errorTpl=`@CODE:[+message+]`\n!]','0','4','2','0','1','1','1144904400','1','1509806093','0','0','0','0','0','','0','0','0','0','1','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('46','document','text/html','Thank You','','','thank-you','','1','0','0','0','0','','

    Thank You!

    \n

    We do appreciate your feedback. Your comments have been submitted to our office and hopefully someone will bother to actually read it. You should also receive a copy of the message in your inbox.

    \n

    Please be assured that we will do our best not to ignore you, but if today is a Monday please try again in a few days.

    \n','1','{BOOTSTRAP_SQL_ID}','6','1','1','1','1159302141','1','1159302892','0','0','0','1159302182','1','','0','0','0','0','1','1'); +REPLACE INTO `{PREFIX}site_content` VALUES ('47','document','text/html','New documentation site: docs.evo.im','Multilingual documentation for Evolution CMS ','','new-documentation-site-docs.evo.im','','1','0','0','2','0','You can get documentation here: http://docs.evo.im','

    You can get documentation here: http://docs.evo.im

    \n

    Evolution CMS Docs

    \n

    Evolution is a professional website development tool that allows you to manage content (and the site itself) absolutely 100%! This system is open source, and therefore free. Unlike most free CMS (English Content Management System) - on EVO you can build a site of any complexity, with almost any set of functions, and the system will not in any way influence your html code.

    \n

    How to contribute

    \n
      \n
    1. First of all, you must have an account on GitHub, if not - then it\'s very simple.
    2. \n
    3. Make a fork https://github.com/evolution-cms/docs/ to yourself by clicking the \"Fork\" button on the top right.
    4. \n
    5. Clone the repository to your disk and work with it locally, like everyone else (if you are a developer)
    6. \n
    7. If you are not a developer, you can simply edit the * .md files directly on GitHub.
    8. \n
    9. When you have done everything, you should make a \"Pull Request\" and send it by sending changes to this repository.
    10. \n
    ','1','4','2','1','1','1','1507724288','1','1509818879','0','0','0','1507724288','1','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('48','document','text/xml','sitemap.xml','','','sitemap.xml','','1','0','0','0','0','','[[DLSitemap]]','0','0','11','1','1','1','1507726985','1','1507727020','0','0','0','1507726985','1','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('49','document','text/html','Edit profile','User profile','','editprofile','','1','0','0','4','0','',' Logout\n [!FormLister?\n &formid=`registerForm`\n &controller=`Profile`\n &requiredClass=`has-warning`\n &errorClass=`has-error`\n &errorTpl=`@CODE:[+message+]`\n &allowedFields=`email,username,fullname,country`\n &rules=`{\n \"username\":{\n \"required\":\"Enter your username\",\n \"alphaNumeric\":\"Only letters and numbers\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueUsername\",\n \"message\":\"Name already taken\"\n }\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueEmail\",\n \"message\":\"This email is already in use by another user\"\n }\n },\n \"password\":{\n \"required\":\"Enter password\"\n },\n \"repeatPassword\":{\n \"required\":\"Retype password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n }`\n &formTpl=`@CODE: \n\n
    \n \n

    User Details

    \n \n
    \n \n \n [+username.error+]\n
    \n \n
    \n \n \n [+fullname.error+]\n
    \n \n
    \n \n \n [+email.error+]\n
    \n\n
    \n

    Password

    \n \n \n [+password.error+]\n
    \n
    \n \n \n [+repeatPassword.error+]\n
    \n \n
    \n

    Optional Account Profile Info

    \n \n \n [+country.error+]\n
    \n \n
    \n \n
    \n\n
    \n\n\n\n `!]\n','0','4','0','1','1','1','1509808504','1','1509817993','0','0','0','1509808504','1','','0','0','0','0','1','1'); # # Dumping data for table `site_htmlsnippets` # +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('1','Comments_tplComments','Comments (Jot) Form-Template','0','none','1','0','\n
    \n
    [+comment.title:limit:esc+]\n [+phx:userinfo=`lastlogin`:ifempty=`9999999999`:lt=`[+comment.createdon+]`:then=`\n \n `:else=`\n \n `:strip+]\n \n
    \n
    \n
    \n
    \n [+comment.createdby:isnt=`0`:then=``+][+comment.createdby:userinfo=`username`:ifempty=`[+comment.custom.name:ifempty=`[+jot.guestname+]`:esc+]`+]\n [+comment.createdby:isnt=`0`:then=``+]\n
    Posts: [+comment.userpostcount+]\n
    \n
    \n
    \n [+jot.moderation.enabled:is=`1`:then=`\n \n [+comment.published:is=`0`:then=`\n \n `+]\n [+comment.published:is=`1`:then=`\n \n `+]\n `:strip+]\n [+jot.user.canedit:is=`1`:and:if=`[+comment.createdby+]`:is=`[+jot.user.id+]`:or:if=`[+jot.moderation.enabled+]`:is=`1`:then=`\n \n `:strip+]\n
    \n Reply #[+comment.postnumber+] on : [+comment.createdon:date=`%a %B %d, %Y, %H:%M:%S`+]\n
    \n
    [+comment.content:wordwrap:esc:nl2br+]
    \n
    \n [+comment.editedon:isnt=`0`:then=`\n Last Edit: [+comment.editedon:date=`%B %d, %Y, %H:%M:%S`+] by [+comment.editedby:userinfo=`username`:ifempty=` * `+]\n  `+] [+jot.moderation.enabled:is=`1`:then=`[+comment.secip+]`+]\n
    \n
    \n
    \n
    \n
    ','0','0','0','0'); -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'FormSignup', 'For the weblogin signup', 0, 'none', 2, 0, ' \n\n
    \n\n

    User Details

    \n
    \n \n Items marked by * are required
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n\n
    \n

    Password

    \n \n \n
    \n
    \n \n \n
    \n \n
    \n

    Optional Account Profile Info

    \n \n \n
    \n \n
    \n

    Bot-Patrol

    \n

    Enter the word/number combination shown in the image below.

    \n

    If you have trouble reading the code, click on the code itself to generate a new random code.

    \n \n
    \n \n
    \n \n
    \n\n
    \n\n\n
    \n\n

    Signup completed successfully!
    \nYour account was created. A copy of your signup information was sent to your email address.

    \n', 0, UNIX_TIMESTAMP(), 0, 0); - +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('3','AjaxSearch_tplInput','Input-Form for AjaxSearch','0','none','1','0','[+as.showInputForm:is=`1`:then=`\n
    \n [+as.showAsId:is=`1`:then=``+]\n \n
    \n \n [+as.liveSearch:is=`0`:then=`\n \n \n \n `:else=`\n
    \n `+] \n
    \n
    \n`+]\n[+as.showIntro:is=`1`:then=`\n

    [+as.introMessage+]

    \n`+]','0','0','0','0'); -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'nl_sidebar', 'Default Template TPL for Ditto', 0, 'none', 1, 0, '[+title+]
    \n[+longtitle+]

    ', 0, UNIX_TIMESTAMP(), 0, 0); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('4','AjaxSearch_tplAjaxResult','Result Tpl for AjaxSearch','0','none','1','0','
    \n [+as.pagetitle+]\n[+as.descriptionShow:is=`1`:then=`\n [+as.description+]\n`+]\n[+as.extractShow:is=`1`:then=`\n

    [+as.extract+]

    \n`+]\n[+as.breadcrumbsShow:is=`1`:then=`\n [+as.breadcrumbs+]\n`+]\n
    ','0','0','0','0'); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('5','header','sample header scripts','0','none','3','0',' \n[*titl*]\n[*noIndex*]\n\n\n\n','0','0','0','0'); -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ditto_blog', 'Blog Template', 0, 'none', 1, 0, '
    \n \n \n \n \n

    [+title+]

    \n \n \n [+summary+]\n \n
    ','0', UNIX_TIMESTAMP(), 0, 0); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('6','AjaxSearch_tplAjaxGrpResult','Grp Result Tpl for AjaxSearch','0','none','1','0','[+as.grpResultsDef:is=`1`:then=`\n
    \n[+as.headerGrpResult+]\n[+as.listResults+]\n[+as.footerGrpResult+]\n
    \n`:else=`\n
    [+as.grpResultNameShow:is=`1`:then=`[+as.grpResultName+]`+]\n[+as.grpResultsDisplayedText+]
    \n`+]','0','0','0','0'); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('7','mm_rules','Default ManagerManager rules.','0','none','4','0','// more example rules are in assets/plugins/managermanager/example_mm_rules.inc.php\n// example of how PHP is allowed - check that a TV named documentTags exists before creating rule\n\nif ($modx->db->getValue($modx->db->select(\'count(id)\', $modx->getFullTableName(\'site_tmplvars\'), \"name=\'documentTags\'\"))) {\n mm_widget_tags(\'documentTags\', \' \'); // Give blog tag editing capabilities to the \'documentTags (3)\' TV\n}\nmm_widget_showimagetvs(); // Always give a preview of Image TVs\n\nmm_createTab(\'SEO\', \'seo\', \'\', \'\', \'\', \'\');\nmm_moveFieldsToTab(\'titl,keyw,desc,seoOverride,noIndex,sitemap_changefreq,sitemap_priority,sitemap_exclude\', \'seo\', \'\', \'\');\nmm_widget_tags(\'keyw\',\',\'); // Give blog tag editing capabilities to the \'documentTags (3)\' TV\n\n\n//mm_createTab(\'Images\', \'photos\', \'\', \'\', \'\', \'850\');\n//mm_moveFieldsToTab(\'images,photos\', \'photos\', \'\', \'\');\n\n//mm_hideFields(\'longtitle,description,link_attributes,menutitle,content\', \'\', \'6,7\');\n\n//mm_hideTemplates(\'0,5,8,9,11,12\', \'2,3\');\n\n//mm_hideTabs(\'settings, access\', \'2\');\n','0','0','0','0'); -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'Comments', 'Comments (Jot) showing beneath a blog entry.', 0, 'none', 1, 0, '
    \r\n[!Jot? &customfields=`name,email` &subscribe=`1` &pagination=`4` &badwords=`dotNet` &canmoderate=`Site Admins` &tplForm=`Comments_tplForm` &tplComments=`Comments_tplComments`!]\r\n
    ', 0, UNIX_TIMESTAMP(), 0, 0); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('8','AjaxSearch_tplAjaxResults','Results Tpl for AjaxSearch','0','none','1','0','
    \n
    \n
    \n
    \n \n

    Search Results

    \n
    \n
    \n [+as.noResults:is=`1`:then=`\n
    \n [+as.noResultText+]\n
    \n `:else=`\n

    [+as.resultsFoundText+][+as.resultsDisplayedText+]

    \n [+as.listGrpResults+]\n `+]\n [+as.moreResults:is=`1`:then=`\n \n `+]\n [+as.showCmt:is=`1`:then=`\n [+as.comment+]\n `+]\n
    \n
    \n \n
    \n
    \n
    \n
    \n','0','0','0','0'); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('9','Comments_tplForm','Comments (Jot) Form-Template','0','none','1','0','\n

    [+form.edit:is=`1`:then=`Edit comment`:else=`Write a comment`+]

    \n
    \n
      \n
    • Required fields are marked with *.
    • \n
    \n
    \n[+form.error:isnt=`0`:then=`\n
    \n[+form.error:select=`\n&-3=You are trying to re-submit the same post. You have probably clicked the submit button more than once.\n&-2=Your comment has been rejected.\n&-1=Your comment has been saved, it will first be reviewed before it is published.\n&1=You are trying to re-submit the same post. You have probably clicked the submit button more than once.\n&2=The security code you entered was incorrect.\n&3=You can only post once each [+jot.postdelay+] seconds.\n&4=Your comment has been rejected.\n&5=[+form.errormsg:ifempty=`You didn\'t enter all the required fields`+]\n`+]\n
    \n`:strip+]\n[+form.confirm:isnt=`0`:then=`\n
    \n[+form.confirm:select=`\n&1=Your comment has been published.\n&2=Your comment has been saved, it will first be reviewed before it is published.\n&3=Comment saved.\n`+]\n
    \n`:strip+]\n
    \n
    \n \n \n \n \n [+form.moderation:is=`1`:then=`\n
    \n Created on: [+form.field.createdon:date=`%a %B %d, %Y at %H:%M`+]
    \n Created by: [+form.field.createdby:userinfo=`username`:ifempty=`[+jot.guestname+]`+]
    \n IP address: [+form.field.secip+]
    \n Published: [+form.field.published:select=`0=No&1=Yes`+]
    \n [+form.field.publishedon:gt=`0`:then=`\n Published on: [+form.field.publishedon:date=`%a %B %d, %Y at %H:%M`+]
    \n Published by: [+form.field.publishedby:userinfo=`username`:ifempty=` - `+]
    \n `+]\n [+form.field.editedon:gt=`0`:then=`\n Edited on: [+form.field.editedon:date=`%a %B %d, %Y at %H:%M`+]
    \n Edited by: [+form.field.editedby:userinfo=`username`:ifempty=` -`+]
    \n `+]\n
    \n `:strip+]\n \n [+form.guest:is=`1`:then=`\n
    \n \n \n
    \n
    \n \n \n
    \n `:strip+]\n
    \n \n \n
    \n
    \n \n \n
    \n \n[+jot.captcha:is=`1`:then=`\n
    \n \n \"If\n \n
    \n
    \n \n \n
    \n`:strip+]\n\n \n [+form.edit:is=`1`:then=`\n \n `+] \n
    \n
    ','0','0','0','0'); -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactForm', 'eForm-template for showing contact-form', 0, 'none', 1, 0, '
    \n \n \n \n \n \n
    \n \n \n
    \n
    \n \n \n
    \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n \n \n
    \n
    \n
    \n verification code\n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n\n
    \n\n\n', 0, UNIX_TIMESTAMP(), 0, 0); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('13','Comments','Comments (JotX) showing beneath a blog entry.','2','none','1','0','
    \n[[ifsnippet? &name=`JotX`]] \n[!JotX? &customfields=`name,email` &subscribe=`1` &pagination=`4` &badwords=`dotNet` &canmoderate=`Site Admins` &tplForm=`Comments_tplForm` &tplComments=`Comments_tplComments`!]\n
    ','0','1507723259','1509825745','0'); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('14','ContactForm','eForm-template for showing contact-form','2','none','1','0','
    \n \n

    [+form.messages+]

    \n
    \n \n \n
    [+name.error+]
    \n
    \n
    \n \n \n
    [+email.error+]
    \n
    \n \n
    \n \n \n
    [+subject.error+]
    \n
    \n \n
    \n \n \n
    [+message.error+]
    \n
    \n \n
    \n \n
    \n\n
    ','0','1507723259','1507816800','0'); -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactFormReport', 'eForm-template for sending form-data by mail', 0, 'none', 1, 0, '

    This is a response sent by [+name+] using the feedback form on the website. The details of the message follow below:

    \r\n\r\n\r\n

    Name: [+name+]

    \r\n

    Email: [+email+]

    \r\n

    Regarding: [+subject+]

    \r\n

    comments:
    [+message+]

    \r\n\r\n

    You can use this link to reply: [+email+]

    \r\n', 0, UNIX_TIMESTAMP(), 0, 0); +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('15','ContactFormReport','eForm-template for sending form-data by mail','0','none','1','0','

    This is a response sent by [+name+] using the feedback form on the website. The details of the message follow below:

    \n\n\n

    Name: [+name+]

    \n

    Email: [+email+]

    \n

    Regarding: [+subject+]

    \n

    comments:
    [+message+]

    \n\n

    You can use this link to reply: [+email+]

    \n','0','1507723259','0','0'); +# +# Dumping data for table `site_tmplvar_contentvalues` +# -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'reflect_month_tpl', 'For the yearly archive. Use with Ditto.', 0, 'none', 1, 0, '[+month+] [+year+]', 0, UNIX_TIMESTAMP(), 0, 0); +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('1','3','9','demo miniblog howto tutorial posting'); +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('2','3','18','demo older posting'); -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES (NULL, 'ContactStyles', 'Styles for form validation', 0, 'none', 1, 0, '', 0, UNIX_TIMESTAMP(), 0, 0); +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('3','8','9','assets/images/evo-logo.png'); # -# Dumping data for table `site_tmplvar_contentvalues` +# Table structure for table `site_snippets` # +REPLACE INTO `{PREFIX}site_snippets` VALUES ('24','ifsnippet','','0','1','0','\nif (!isset($modx->snippetCache[$name])) {\n return \'

    For work \'.$name.\' in demo site you need install \'.$name.\' from Extras module

    \';\n}','0','{}',' ','1509819147','1509826185','0'); -REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('1','3','9','demo miniblog howto tutorial posting'); +REPLACE INTO `{PREFIX}site_snippets` VALUES ('23','prepareBlog','','0','1','0','\nif ($data[\'image\'] != \'\'){\n $data[\'blog-image\'] = \'runSnippet(\'phpthumb\', array(\'input\'=>$data[\'image\'], \'options\'=>\'w=600,h=280,zc=1\')).\'\" alt=\"\'.$data[\'pagetitle\'].\'\">\';\n}else{\n $data[\'blog-image\'] = \'\';\n}\nreturn $data;','0','{}',' ','1507723822','1509819933','0'); +# +# Dumping data for table `site_templates` +# -REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('2','3','18','demo older posting'); +REPLACE INTO `{PREFIX}site_templates` VALUES ('4','EVO startup - Bootstrap','1.0 Sample template in Bootstrap','0','1','','0','\n\n \n \n [*titl*]\n [*noIndex*]\n \n \n \n\n \n \n\n [~[*id*]~]<@ENDIF>\" rel=\"canonical\">\n \n \n \n\n \n\n \n \n \n
    \n
    \n
    \n
    \n\n \n \"[(site_name)]\"\n \n\n
    \n\n \n
    \n\n
    \n
    \n
    \n
    \n\n
    \n
    \n\n
    \n
    \n
    \n [[if? &is=`[*id*]:!=:[(site_start)]` &then=`\n [[DLCrumbs? &showCurrent=`1`]]\n `]]\n
    \n
    \n
    \n\n
    \n\n
    \n

    [*#longtitle*]

    \n [*#content*]\n \n [[if? &is=`[*parent*]:=:2` &then=`@TPL:Comments`]]\n
    \n\n \n
    \n
    \n\n
    \n\n
    \n
    \n
    \n
    \n EVO Starter-Template ©2006-[[$_SERVER[\'REQUEST_TIME\']:dateFormat=`Y` ]]\n
    \n
    \n Built with Bootstrap framework.\n
    \n
    \n
    \n
    \n\n
    \n Memory: [^m^], MySQL: [^qt^], [^q^] request(s), PHP: [^p^], total: [^t^], document retrieved from [^s^]. \n
    \n\n \n\n \n \n\n \n','0','1','0','1509819347'); +# +# Dumping data for table `evo_site_plugins` +# + +REPLACE INTO `{PREFIX}site_plugins` VALUES ('12','evoAjax','','0','1','0','switch($_GET[\'q\']){ \n case \'feedbackajaxform\':\n echo $modx->runSnippet(\'FormLister\', array(\n \'formid\' => \'ContactForm\',\n \'to\' => $modx->config[\'emailsender\'],\n \'replyTo\'=> \'[+email.value+]\',\n \'subjectTpl\' => \'@CODE:[+subject.value+], from: \' . $modx->config[\'site_name\'] ,\n \'ccSender\'=>\'1\',\n \'errorClass\'=> \' has-error\',\n \'requiredClass\'=> \' has-warning\',\n \'rules\'=> \'{\n \"name\":{\n \"required\":\"Enter your Name\"\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\"\n },\n \"message\":{\n \"required\":\"Enter message\"\n }\n }\',\n \'formControls\'=>\'subject\',\n \'messagesTpl\' => \'@CODE:
    [+required+]
    [+errors+]
    \',\n \'errorTpl\'=>\'@CODE: [+message+]\',\n \'successTpl\'=> \'@CODE: \n
    \n

    Thanks!

    \n

    your message has been sent.

    \n
    \',\n \'formTpl\' => \'ContactForm\', \n \'reportTpl\'=>\'ContactFormReport\',\n \'ccSenderTpl\'=>\'ContactFormReport\', \n ));\n die();\n break;\n}\n','0','{}','0',' ','1507815395','1507816656'); # # Dumping data for table `system_settings` @@ -102,7 +123,6 @@ REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('2','3','18','demo old REPLACE INTO `{PREFIX}system_settings` VALUES('error_page', '7'); - REPLACE INTO `{PREFIX}system_settings` VALUES('unauthorized_page', '4'); From de1bc422f4b37b1bcd0bafd7e1380e1d94ebc0a6 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sun, 5 Nov 2017 00:29:59 +0300 Subject: [PATCH 337/577] update demo site --- install/setup.data.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install/setup.data.sql b/install/setup.data.sql index c519ac29e7..24df69f8c7 100644 --- a/install/setup.data.sql +++ b/install/setup.data.sql @@ -114,6 +114,8 @@ REPLACE INTO `{PREFIX}site_templates` VALUES ('4','EVO startup - Bootstrap','1.7.8 addition to FormLister','0','7','0','/**\n * userHelper\n * \n * addition to FormLister\n * \n * @category plugin\n * @version 1.7.8\n * @internal @properties &logoutKey=Request key;text;logout &cookieName=Cookie Name;text;WebLoginPE &cookieLifetime=Cookie Lifetime, seconds;text;157680000 &maxFails=Max failed logins;text;3 &blockTime=Block for, seconds;text;3600\n * @internal @events OnWebPageInit,OnPageNotFound,OnWebLogin\n * @internal @disabled 1\n**/\n\nrequire MODX_BASE_PATH.\'assets/snippets/FormLister/plugin.userHelper.php\';','0','{\n \"logoutKey\": [\n {\n \"label\": \"Request key\",\n \"type\": \"text\",\n \"value\": \"logout\",\n \"default\": \"logout\",\n \"desc\": \"\"\n }\n ],\n \"cookieName\": [\n {\n \"label\": \"Cookie Name\",\n \"type\": \"text\",\n \"value\": \"WebLoginPE\",\n \"default\": \"WebLoginPE\",\n \"desc\": \"\"\n }\n ],\n \"cookieLifetime\": [\n {\n \"label\": \"Cookie Lifetime, seconds\",\n \"type\": \"text\",\n \"value\": \"157680000\",\n \"default\": \"157680000\",\n \"desc\": \"\"\n }\n ],\n \"maxFails\": [\n {\n \"label\": \"Max failed logins\",\n \"type\": \"text\",\n \"value\": \"3\",\n \"default\": \"3\",\n \"desc\": \"\"\n }\n ],\n \"blockTime\": [\n {\n \"label\": \"Block for, seconds\",\n \"type\": \"text\",\n \"value\": \"3600\",\n \"default\": \"3600\",\n \"desc\": \"\"\n }\n ]\n}','0',' ','0','1509820119'); + REPLACE INTO `{PREFIX}site_plugins` VALUES ('12','evoAjax','','0','1','0','switch($_GET[\'q\']){ \n case \'feedbackajaxform\':\n echo $modx->runSnippet(\'FormLister\', array(\n \'formid\' => \'ContactForm\',\n \'to\' => $modx->config[\'emailsender\'],\n \'replyTo\'=> \'[+email.value+]\',\n \'subjectTpl\' => \'@CODE:[+subject.value+], from: \' . $modx->config[\'site_name\'] ,\n \'ccSender\'=>\'1\',\n \'errorClass\'=> \' has-error\',\n \'requiredClass\'=> \' has-warning\',\n \'rules\'=> \'{\n \"name\":{\n \"required\":\"Enter your Name\"\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\"\n },\n \"message\":{\n \"required\":\"Enter message\"\n }\n }\',\n \'formControls\'=>\'subject\',\n \'messagesTpl\' => \'@CODE:
    [+required+]
    [+errors+]
    \',\n \'errorTpl\'=>\'@CODE: [+message+]\',\n \'successTpl\'=> \'@CODE: \n
    \n

    Thanks!

    \n

    your message has been sent.

    \n
    \',\n \'formTpl\' => \'ContactForm\', \n \'reportTpl\'=>\'ContactFormReport\',\n \'ccSenderTpl\'=>\'ContactFormReport\', \n ));\n die();\n break;\n}\n','0','{}','0',' ','1507815395','1507816656'); # From dc6efbea3611f503ab28f6c4c975c0df13ac1aa0 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sun, 5 Nov 2017 12:28:05 +0300 Subject: [PATCH 338/577] update extras link --- assets/modules/store/core.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/modules/store/core.php b/assets/modules/store/core.php index d5aec6269a..1e3ae809de 100644 --- a/assets/modules/store/core.php +++ b/assets/modules/store/core.php @@ -28,7 +28,7 @@ if ($file!='%url%' && $file!='' && $file!=' '){ $url = $file; } else { - $url = "http://extras.evolution-cms.com/get.php?get=file&cid=".$id; + $url = "http://extras.evo.im/get.php?get=file&cid=".$id; } if (!$Store->downloadFile($url ,MODX_BASE_PATH."assets/cache/store/temp.zip")){ From b678063bcfc8465a4a20fafa41a85100b9503c9f Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sun, 5 Nov 2017 12:30:06 +0300 Subject: [PATCH 339/577] fix extras link --- install/setup.data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/setup.data.sql b/install/setup.data.sql index 24df69f8c7..6a1e199bff 100644 --- a/install/setup.data.sql +++ b/install/setup.data.sql @@ -100,7 +100,7 @@ REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('3','8','9','assets/im # Table structure for table `site_snippets` # -REPLACE INTO `{PREFIX}site_snippets` VALUES ('24','ifsnippet','','0','1','0','\nif (!isset($modx->snippetCache[$name])) {\n return \'

    For work \'.$name.\' in demo site you need install \'.$name.\' from Extras module

    \';\n}','0','{}',' ','1509819147','1509826185','0'); +REPLACE INTO `{PREFIX}site_snippets` VALUES ('24','ifsnippet','','0','1','0','\nif (!isset($modx->snippetCache[$name])) {\n return \'

    For work \'.$name.\' in demo site you need install \'.$name.\' from Extras module

    \';\n}','0','{}',' ','1509819147','1509826185','0'); REPLACE INTO `{PREFIX}site_snippets` VALUES ('23','prepareBlog','','0','1','0','\nif ($data[\'image\'] != \'\'){\n $data[\'blog-image\'] = \'runSnippet(\'phpthumb\', array(\'input\'=>$data[\'image\'], \'options\'=>\'w=600,h=280,zc=1\')).\'\" alt=\"\'.$data[\'pagetitle\'].\'\">\';\n}else{\n $data[\'blog-image\'] = \'\';\n}\nreturn $data;','0','{}',' ','1507723822','1509819933','0'); From 8b4c4f2a3bd8f8884bebe7cca95f27446cd1f930 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sun, 5 Nov 2017 12:47:51 +0300 Subject: [PATCH 340/577] demosite fix --- install/setup.data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/setup.data.sql b/install/setup.data.sql index 6a1e199bff..4429502c85 100644 --- a/install/setup.data.sql +++ b/install/setup.data.sql @@ -21,7 +21,7 @@ REPLACE INTO `{PREFIX}site_content` VALUES ('1','document','text/html','Home','W REPLACE INTO `{PREFIX}site_content` VALUES ('2','document','text/html','Blog','My Blog','','blog','','1','0','0','0','1','','[[DocLister? \n &jotcount=`1`\n &parents=`2` \n &display=`2`\n &tvPrefix=``\n &tvList=`image`\n &prepare=`prepareBlog`\n &summary=`notags,len:350` \n &tpl=`@CODE:\n
    \n [+blog-image+] \n

    [+e.title+]

    \n
    \n By [+author+] on [+date+].\n Comments [+jotcount+]\n
    \n [+summary+]\n

    [+link+]

    \n
    ` \n &paginate=`1` \n]]\n\n

    Showing [+current+] of [+totalPages+] Pages

    \n
    [+pages+]
    \n

     

    ','0','4','1','0','1','1','1144904400','1','1507727477','0','0','0','0','0','Blog','0','0','0','0','0','1'); -REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','Profile','User profile','','profile','','1','0','0','0','1','','[!FormLister?\n&debug=`1`\n&formid=`login`\n&controller=`Login`\n&loginField=`email`\n&redirectTo=`49`\n&defaults=`{\"rememberme\":1}`\n&rules=`{\n \"email\":{\n \"required\":\"Enter your Email\"\n },\n \"password\":{\n \"required\":\"Enter your password\"\n }\n}`\n&formTpl=`@CODE:\n\n

    In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

    \n\n
    \n [+form.messages+]\n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n\n
    \n \n
    \n \n
    \n
    \n
    \n`\n&skipTpl=`@CODE:\n
    Hello, [!$_SESSION[\'webFullname\']!]!
    \n `\n\n&allowedFields=`email,password`\n&errorTpl=`@CODE:

    [+message+]

    `\n&messagesOuterTpl=`@CODE:\n
    [+messages+]
    `\n\n&errorClass=` has-error` \n&requiredClass=` has-warning`\n!] \n','0','4','6','0','1','1','1144904400','1','1509817775','0','0','0','0','0','','0','0','0','0','0','0'); +REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','Profile','User profile','','profile','','1','0','0','0','1','','[!FormLister?\n&debug=`1`\n&formid=`login`\n&controller=`Login`\n&loginField=`email`\n&redirectTo=`49`\n&defaults=`{\"rememberme\":1}`\n&rules=`{\n \"email\":{\n \"required\":\"Enter your Email\"\n },\n \"password\":{\n \"required\":\"Enter your password\"\n }\n}`\n&formTpl=`@CODE:\n\n

    In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

    \n\n
    \n [+form.messages+]\n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n\n
    \n \n
    \n \n
    \n
    \n
    \n`\n&skipTpl=`@CODE:\n
    Hello!
    \n `\n\n&allowedFields=`email,password`\n&errorTpl=`@CODE:

    [+message+]

    `\n&messagesOuterTpl=`@CODE:\n
    [+messages+]
    `\n\n&errorClass=` has-error` \n&requiredClass=` has-warning`\n!] \n','0','4','6','0','1','1','1144904400','1','1509817775','0','0','0','0','0','','0','0','0','0','0','0'); REPLACE INTO `{PREFIX}site_content` VALUES ('5','document','text/html','Request an Account','Sign Up for Full Site Privileges','','request-an-account','','1','0','0','4','0','',' [!FormLister?\n &formid=`registerForm`\n &controller=`Register`\n &requiredClass=`has-warning`\n &errorClass=`has-error`\n &errorTpl=`@CODE:[+message+]`\n &allowedFields=`email,username,fullname,country`\n &rules=`{\n \"username\":{\n \"required\":\"Enter your username\",\n \"alphaNumeric\":\"Only letters and numbers\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueUsername\",\n \"message\":\"Name already taken\"\n }\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueEmail\",\n \"message\":\"This email is already in use by another user\"\n }\n },\n \"password\":{\n \"required\":\"Enter password\"\n },\n \"repeatPassword\":{\n \"required\":\"Retype password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n }`\n &captcha=`modxCaptcha`\n &formTpl=`@CODE: \n\n
    \n \n

    User Details

    \n
    \n \n Items marked by * are required\n
    \n \n
    \n \n \n [+username.error+]\n
    \n \n
    \n \n \n [+fullname.error+]\n
    \n \n
    \n \n \n [+email.error+]\n
    \n\n
    \n

    Password

    \n \n \n [+password.error+]\n
    \n
    \n \n \n [+repeatPassword.error+]\n
    \n \n
    \n

    Optional Account Profile Info

    \n \n \n [+country.error+]\n
    \n \n
    \n

    Bot-Patrol

    \n

    Enter the word/number combination shown in the image below.

    \n \n

    \"If

    \n \n [+vericode.error+]\n
    \n \n
    \n \n
    \n\n
    \n\n\n\n `\n &successTpl=`@CODE:\n

    Signup completed successfully!
    \n Your account was created. A copy of your signup information was sent to your email address.

    \n `!]','0','4','1','0','1','1','1144904400','1','1509817935','0','0','0','0','0','','0','0','0','0','1','1'); From 50ba90cd87bf5ec26e4943e43d79b2d0d99be31b Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Sun, 5 Nov 2017 16:06:06 +0300 Subject: [PATCH 341/577] fix in demosite --- install/setup.data.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/install/setup.data.sql b/install/setup.data.sql index 4429502c85..2ab2974f2f 100644 --- a/install/setup.data.sql +++ b/install/setup.data.sql @@ -114,8 +114,6 @@ REPLACE INTO `{PREFIX}site_templates` VALUES ('4','EVO startup - Bootstrap','1.7.8 addition to FormLister','0','7','0','/**\n * userHelper\n * \n * addition to FormLister\n * \n * @category plugin\n * @version 1.7.8\n * @internal @properties &logoutKey=Request key;text;logout &cookieName=Cookie Name;text;WebLoginPE &cookieLifetime=Cookie Lifetime, seconds;text;157680000 &maxFails=Max failed logins;text;3 &blockTime=Block for, seconds;text;3600\n * @internal @events OnWebPageInit,OnPageNotFound,OnWebLogin\n * @internal @disabled 1\n**/\n\nrequire MODX_BASE_PATH.\'assets/snippets/FormLister/plugin.userHelper.php\';','0','{\n \"logoutKey\": [\n {\n \"label\": \"Request key\",\n \"type\": \"text\",\n \"value\": \"logout\",\n \"default\": \"logout\",\n \"desc\": \"\"\n }\n ],\n \"cookieName\": [\n {\n \"label\": \"Cookie Name\",\n \"type\": \"text\",\n \"value\": \"WebLoginPE\",\n \"default\": \"WebLoginPE\",\n \"desc\": \"\"\n }\n ],\n \"cookieLifetime\": [\n {\n \"label\": \"Cookie Lifetime, seconds\",\n \"type\": \"text\",\n \"value\": \"157680000\",\n \"default\": \"157680000\",\n \"desc\": \"\"\n }\n ],\n \"maxFails\": [\n {\n \"label\": \"Max failed logins\",\n \"type\": \"text\",\n \"value\": \"3\",\n \"default\": \"3\",\n \"desc\": \"\"\n }\n ],\n \"blockTime\": [\n {\n \"label\": \"Block for, seconds\",\n \"type\": \"text\",\n \"value\": \"3600\",\n \"default\": \"3600\",\n \"desc\": \"\"\n }\n ]\n}','0',' ','0','1509820119'); - REPLACE INTO `{PREFIX}site_plugins` VALUES ('12','evoAjax','','0','1','0','switch($_GET[\'q\']){ \n case \'feedbackajaxform\':\n echo $modx->runSnippet(\'FormLister\', array(\n \'formid\' => \'ContactForm\',\n \'to\' => $modx->config[\'emailsender\'],\n \'replyTo\'=> \'[+email.value+]\',\n \'subjectTpl\' => \'@CODE:[+subject.value+], from: \' . $modx->config[\'site_name\'] ,\n \'ccSender\'=>\'1\',\n \'errorClass\'=> \' has-error\',\n \'requiredClass\'=> \' has-warning\',\n \'rules\'=> \'{\n \"name\":{\n \"required\":\"Enter your Name\"\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\"\n },\n \"message\":{\n \"required\":\"Enter message\"\n }\n }\',\n \'formControls\'=>\'subject\',\n \'messagesTpl\' => \'@CODE:
    [+required+]
    [+errors+]
    \',\n \'errorTpl\'=>\'@CODE: [+message+]\',\n \'successTpl\'=> \'@CODE: \n
    \n

    Thanks!

    \n

    your message has been sent.

    \n
    \',\n \'formTpl\' => \'ContactForm\', \n \'reportTpl\'=>\'ContactFormReport\',\n \'ccSenderTpl\'=>\'ContactFormReport\', \n ));\n die();\n break;\n}\n','0','{}','0',' ','1507815395','1507816656'); # From 26d89b8f5f55a83de2e61439edbb90305231b83f Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Mon, 6 Nov 2017 13:59:02 +0300 Subject: [PATCH 342/577] turnOff warning #301 --- manager/includes/document.parser.class.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 7974bb60d9..d9e4590fba 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1899,9 +1899,9 @@ function evalSnippets($content) if (strpos($content, $s) !== false) { $content = str_replace($s, $value, $content); - } else { + } /*else { $this->addLog('evalSnippets parse error', $_SERVER['REQUEST_URI'] . $s, 2); - } + }*/ } if ($this->dumpSnippets) { From b0ec74843fd06aa4fd266832326b159f9e4badc9 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Mon, 6 Nov 2017 14:02:42 +0300 Subject: [PATCH 343/577] 1.4.0.RC --- manager/includes/version.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/includes/version.inc.php b/manager/includes/version.inc.php index 8d0e8d5279..afbc2844f1 100755 --- a/manager/includes/version.inc.php +++ b/manager/includes/version.inc.php @@ -1,5 +1,5 @@ Date: Mon, 6 Nov 2017 21:04:00 +0900 Subject: [PATCH 344/577] #301 Fix - System Events logs https://github.com/evolution-cms/evolution/issues/301 --- manager/includes/document.parser.class.inc.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index d9e4590fba..6904f64738 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1225,7 +1225,7 @@ function mergeDocumentContent($content, $ph = false) if (strpos($content, $s) !== false) { $content = str_replace($s, $value, $content); - } else { + } elseif($this->debug) { $this->addLog('mergeDocumentContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); } } @@ -1393,7 +1393,7 @@ function mergeSettingsContent($content, $ph = false) $s = &$matches[0][$i]; if (strpos($content, $s) !== false) { $content = str_replace($s, $value, $content); - } else { + } elseif($this->debug) { $this->addLog('mergeSettingsContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); } } @@ -1462,7 +1462,7 @@ function mergeChunkContent($content, $ph = false) $s = &$matches[0][$i]; if (strpos($content, $s) !== false) { $content = str_replace($s, $value, $content); - } else { + } elseif($this->debug) { $this->addLog('mergeChunkContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); } } @@ -1521,7 +1521,7 @@ function mergePlaceholderContent($content, $ph = false) $s = &$matches[0][$i]; if (strpos($content, $s) !== false) { $content = str_replace($s, $value, $content); - } else { + } elseif($this->debug) { $this->addLog('mergePlaceholderContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); } } @@ -1733,7 +1733,7 @@ function escapeLiteralTagsContent($content, $left = '<@LITERAL>', $right = '<@EN $s = &$matches[0][$i]; if (strpos($content, $s) !== false) { $content = str_replace($s, $v, $content); - } else { + } elseif($this->debug) { $this->addLog('ignoreCommentedTagsContent parse error', $_SERVER['REQUEST_URI'] . $s, 2); } } @@ -1887,7 +1887,7 @@ function evalSnippets($content) } if (strpos($content, $s) !== false) { $content = str_replace($s, $value, $content); - } else { + } elseif($this->debug) { $this->addLog('evalSnippetsSGVar parse error', $_SERVER['REQUEST_URI'] . $s, 2); } continue; @@ -1899,9 +1899,9 @@ function evalSnippets($content) if (strpos($content, $s) !== false) { $content = str_replace($s, $value, $content); - } /*else { + } elseif($this->debug) { $this->addLog('evalSnippets parse error', $_SERVER['REQUEST_URI'] . $s, 2); - }*/ + } } if ($this->dumpSnippets) { @@ -4257,7 +4257,7 @@ function parseText($tpl = '', $ph = array(), $left = '[+', $right = '+]', $execM } if (strpos($tpl, $s) !== false) { $tpl = str_replace($s, $value, $tpl); - } else { + } elseif($this->debug) { $this->addLog('parseText parse error', $_SERVER['REQUEST_URI'] . $s, 2); } } From d4d53e0f65c70413894caef27dc5bbb49ca46523 Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 6 Nov 2017 13:47:44 +0100 Subject: [PATCH 345/577] fix picker size --- manager/media/style/default/css/color.switcher.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/media/style/default/css/color.switcher.css b/manager/media/style/default/css/color.switcher.css index a219960eee..14cd460b96 100644 --- a/manager/media/style/default/css/color.switcher.css +++ b/manager/media/style/default/css/color.switcher.css @@ -281,7 +281,7 @@ i.evocpicon:hover { width:200px; border-left:0!important; } -.sp-container {width:270px; background: #f2f2f2; border: 1px solid #dedede;} +.sp-container {width:300px; background: #f2f2f2; border: 1px solid #dedede;} .dark .sp-container {background: #2f323a; border: 1px solid #3e4144;} .evo-cp-replacer, .sp-replacer.sp-light {padding:2px; background: #f2f2f2; border-color: #dedede; margin:3px auto;} .dark .evo-cp-replacer, .dark .sp-replacer.sp-light {background: #2f323a; border-color: #3e4144;} From 43747ad94c95e850582efb05f05f400fb9a98787 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Mon, 6 Nov 2017 15:59:25 +0300 Subject: [PATCH 346/577] Remove undefined function call --- manager/includes/extenders/modifiers.class.inc.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index 8fbdd765f8..fa701df2b0 100644 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -189,9 +189,7 @@ function parsePhx($key,$value,$modifiers) foreach($modifiers as $i=>$a) { - if ($modx->debug) $fstart = $modx->getMicroTime(); $value = $this->Filter($key,$value, $a['cmd'], $a['opt']); - if ($modx->debug) $modx->addLogEntry('$modx->filter->'.__FUNCTION__."(:{$a['cmd']})",$fstart); } $this->tmpCache[$cacheKey] = $value; return $value; From 7b1a8a4fbe850126cb79db9a6f2fef77563c18b1 Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Mon, 6 Nov 2017 16:06:23 +0300 Subject: [PATCH 347/577] #277 Install fails. "Fatal error" by PHP 5.4.x --- manager/includes/document.parser.class.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/includes/document.parser.class.inc.php b/manager/includes/document.parser.class.inc.php index 6904f64738..6fe4fe0b17 100644 --- a/manager/includes/document.parser.class.inc.php +++ b/manager/includes/document.parser.class.inc.php @@ -1670,8 +1670,8 @@ private function _parseCTagCMD($cmd) } } } + $cmd = trim($cmd); if (!preg_match('@^[0-9]+$@', $cmd)) { - $cmd = trim($cmd); // Issue #277 $cmd = empty($cmd) ? 0 : 1; } elseif ($cmd <= 0) { $cmd = 0; From 4764d06fcd52ee3103ba8fbd0ac0559a9bc0d43f Mon Sep 17 00:00:00 2001 From: dmi3yy Date: Mon, 6 Nov 2017 16:37:45 +0300 Subject: [PATCH 348/577] change top menu icons --- manager/frames/1.php | 2 +- manager/frames/mainmenu.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manager/frames/1.php b/manager/frames/1.php index 61f637616f..9cc012de83 100644 --- a/manager/frames/1.php +++ b/manager/frames/1.php @@ -281,7 +281,7 @@ hasPermission('settings') || $modx->hasPermission('view_eventlog') || $modx->hasPermission('logs') || $modx->hasPermission('help')) { ?> hasPermission('settings') || $modx->hasPermission('view_eventlog') || $modx->hasPermission('logs') || $modx->hasPermission('help')) { ?>