Version Notes
Just migrated the extension to be able to work under Magento community 1.7.0.0.
Download this release
Release Info
| Developer | Finjon Kiang |
| Extension | Olctw_Debug |
| Version | 1.1.0 |
| Comparing to | |
| See all releases | |
Version 1.1.0
- app/code/community/Olctw/Debug/Block/Abstract.php +15 -0
- app/code/community/Olctw/Debug/Block/Blocks.php +38 -0
- app/code/community/Olctw/Debug/Block/Config.php +91 -0
- app/code/community/Olctw/Debug/Block/Controller.php +13 -0
- app/code/community/Olctw/Debug/Block/Debug.php +220 -0
- app/code/community/Olctw/Debug/Block/Layout.php +16 -0
- app/code/community/Olctw/Debug/Block/Models.php +46 -0
- app/code/community/Olctw/Debug/Block/Preferences.php +15 -0
- app/code/community/Olctw/Debug/Block/Versions.php +29 -0
- app/code/community/Olctw/Debug/Helper/Data.php +236 -0
- app/code/community/Olctw/Debug/Model/Observer.php +242 -0
- app/code/community/Olctw/Debug/controllers/IndexController.php +496 -0
- app/code/community/Olctw/Debug/controllers/PreferencesController.php +18 -0
- app/code/community/Olctw/Debug/etc/config.xml +197 -0
- app/code/community/Olctw/Debug/etc/system.xml +127 -0
- app/design/adminhtml/default/default/layout/olctw_debug/debug.xml +21 -0
- app/design/adminhtml/default/default/template/olctw_debug/arrayformat.phtml +34 -0
- app/design/adminhtml/default/default/template/olctw_debug/blocks.phtml +89 -0
- app/design/adminhtml/default/default/template/olctw_debug/config.phtml +58 -0
- app/design/adminhtml/default/default/template/olctw_debug/configsearch.phtml +26 -0
- app/design/adminhtml/default/default/template/olctw_debug/controller.phtml +148 -0
- app/design/adminhtml/default/default/template/olctw_debug/debug.phtml +65 -0
- app/design/adminhtml/default/default/template/olctw_debug/groupedclasssearch.phtml +28 -0
- app/design/adminhtml/default/default/template/olctw_debug/handledetails.phtml +33 -0
- app/design/adminhtml/default/default/template/olctw_debug/layout.phtml +85 -0
- app/design/adminhtml/default/default/template/olctw_debug/logdetails.phtml +21 -0
- app/design/adminhtml/default/default/template/olctw_debug/logs.phtml +10 -0
- app/design/adminhtml/default/default/template/olctw_debug/models.phtml +92 -0
- app/design/adminhtml/default/default/template/olctw_debug/performance.phtml +10 -0
- app/design/adminhtml/default/default/template/olctw_debug/preferences.phtml +18 -0
- app/design/adminhtml/default/default/template/olctw_debug/simplepanel.phtml +9 -0
- app/design/adminhtml/default/default/template/olctw_debug/utils.phtml +41 -0
- app/design/adminhtml/default/default/template/olctw_debug/versions.phtml +22 -0
- app/design/frontend/base/default/layout/olctw_debug/debug.xml +21 -0
- app/design/frontend/base/default/template/olctw_debug/arrayformat.phtml +34 -0
- app/design/frontend/base/default/template/olctw_debug/blocks.phtml +89 -0
- app/design/frontend/base/default/template/olctw_debug/config.phtml +58 -0
- app/design/frontend/base/default/template/olctw_debug/configsearch.phtml +26 -0
- app/design/frontend/base/default/template/olctw_debug/controller.phtml +148 -0
- app/design/frontend/base/default/template/olctw_debug/debug.phtml +65 -0
- app/design/frontend/base/default/template/olctw_debug/groupedclasssearch.phtml +28 -0
- app/design/frontend/base/default/template/olctw_debug/handledetails.phtml +33 -0
- app/design/frontend/base/default/template/olctw_debug/layout.phtml +85 -0
- app/design/frontend/base/default/template/olctw_debug/logdetails.phtml +21 -0
- app/design/frontend/base/default/template/olctw_debug/logs.phtml +10 -0
- app/design/frontend/base/default/template/olctw_debug/models.phtml +92 -0
- app/design/frontend/base/default/template/olctw_debug/performance.phtml +10 -0
- app/design/frontend/base/default/template/olctw_debug/preferences.phtml +18 -0
- app/design/frontend/base/default/template/olctw_debug/simplepanel.phtml +9 -0
- app/design/frontend/base/default/template/olctw_debug/utils.phtml +41 -0
- app/design/frontend/base/default/template/olctw_debug/versions.phtml +22 -0
- app/etc/modules/Olctw_Debug.xml +9 -0
- package.xml +18 -0
- skin/frontend/base/default/olctw_debug/css/toolbar.css +402 -0
- skin/frontend/base/default/olctw_debug/img/back.png +0 -0
- skin/frontend/base/default/olctw_debug/img/back_hover.png +0 -0
- skin/frontend/base/default/olctw_debug/img/close.png +0 -0
- skin/frontend/base/default/olctw_debug/img/close_hover.png +0 -0
- skin/frontend/base/default/olctw_debug/img/djdt_vertical.png +0 -0
- skin/frontend/base/default/olctw_debug/img/indicator.png +0 -0
- skin/frontend/base/default/olctw_debug/img/loader.gif +0 -0
- skin/frontend/base/default/olctw_debug/img/panel_bg.png +0 -0
- skin/frontend/base/default/olctw_debug/js/jquery.cookie.js +96 -0
- skin/frontend/base/default/olctw_debug/js/jquery.js +3180 -0
- skin/frontend/base/default/olctw_debug/js/toolbar.js +190 -0
app/code/community/Olctw/Debug/Block/Abstract.php
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Abstract extends Mage_Core_Block_Template {
|
| 4 |
+
|
| 5 |
+
const DEFAULT_STORE_ID = 1;
|
| 6 |
+
|
| 7 |
+
public function _getViewVars() {
|
| 8 |
+
return $this->_viewVars;
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
public function getShowTemplateHints() {
|
| 12 |
+
return false;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
}
|
app/code/community/Olctw/Debug/Block/Blocks.php
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Blocks extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
public function getItems() {
|
| 6 |
+
$blocks = Mage::getSingleton('debug/observer')->getBlocks();
|
| 7 |
+
return $blocks;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
public function getLayoutBlocks() {
|
| 11 |
+
return Mage::getSingleton('debug/observer')->getLayoutBlocks();
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
public function getTemplateDirs() {
|
| 15 |
+
return array(Mage::getBaseDir('design'));
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
public function getViewBlockUrl($blockClass) {
|
| 19 |
+
return Mage::getUrl('debug/index/viewBlock', array(
|
| 20 |
+
'block' => $blockClass,
|
| 21 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 22 |
+
'_nosid' => true));
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
public function getViewTemplateUrl($template) {
|
| 26 |
+
return Mage::getUrl('debug/index/viewTemplate', array(
|
| 27 |
+
'_query' => array('template' => $template),
|
| 28 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 29 |
+
'_nosid' => true));
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
public function getRenderingTime($block) {
|
| 33 |
+
if (array_key_exists('rendered_in', $block)) {
|
| 34 |
+
return number_format($block['rendered_in'], 3);
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
}
|
app/code/community/Olctw/Debug/Block/Config.php
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Config extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
static function xml2array($xml, &$arr, $parentKey = '') {
|
| 6 |
+
if (!$xml)
|
| 7 |
+
return;
|
| 8 |
+
|
| 9 |
+
if (count($xml->children()) == 0) {
|
| 10 |
+
$arr[$parentKey] = (string) $xml;
|
| 11 |
+
} else {
|
| 12 |
+
foreach ($xml->children() as $key => $item) {
|
| 13 |
+
$key = $parentKey ? $parentKey . DS . $key : $key;
|
| 14 |
+
self::xml2array($item, $arr, $key);
|
| 15 |
+
}
|
| 16 |
+
}
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
public function getToggleHintsUrl($forStore = null) {
|
| 20 |
+
if (!$forStore) {
|
| 21 |
+
$forStore = Mage::app()->getStore()->getId();
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
return Mage::getUrl('debug/index/toggleTemplateHints', array(
|
| 25 |
+
'store' => $forStore,
|
| 26 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 27 |
+
'_nosid' => true));
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
public function getToggleTranslateHintsUrl($forStore = null) {
|
| 31 |
+
if (!$forStore) {
|
| 32 |
+
$forStore = Mage::app()->getStore()->getId();
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
return Mage::getUrl('debug/index/toggleTranslateInline', array(
|
| 36 |
+
'store' => $forStore,
|
| 37 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 38 |
+
'_nosid' => true));
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
public function getDownloadConfigUrl() {
|
| 42 |
+
return Mage::getUrl('debug/index/downloadConfig', array(
|
| 43 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 44 |
+
'_nosid' => true));
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function getDownloadConfigAsTextUrl() {
|
| 48 |
+
return Mage::getUrl('debug/index/downloadConfigAsText', array(
|
| 49 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 50 |
+
'_nosid' => true));
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
public function getSearchConfigUrl() {
|
| 54 |
+
return Mage::getUrl('debug/index/searchConfig', array(
|
| 55 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 56 |
+
'_nosid' => true));
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
public function hasFullPageCache() {
|
| 60 |
+
return class_exists('Enterprise_PageCache_Model_Processor', false);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
/**
|
| 64 |
+
* FIXME: Find a better idea
|
| 65 |
+
* Currently not very useful because FPC is caching our block and status is displayed incorrectly.
|
| 66 |
+
*
|
| 67 |
+
* @return string
|
| 68 |
+
*/
|
| 69 |
+
public function getFullPacheDebugStatus() {
|
| 70 |
+
if ($this->hasFullPageCache()) {
|
| 71 |
+
return Mage::getStoreConfig(Enterprise_PageCache_Model_Processor::XML_PATH_CACHE_DEBUG) ? $this->__('Now: On') :
|
| 72 |
+
$this->__('Now: Off');
|
| 73 |
+
} else {
|
| 74 |
+
return '';
|
| 75 |
+
}
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
public function getFullPageDebugUrl($forStore = null) {
|
| 79 |
+
if (!$forStore) {
|
| 80 |
+
$forStore = Mage::app()->getStore()->getId();
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
return Mage::getUrl('debug/index/togglePageCacheDebug', array('store' => $forStore,
|
| 84 |
+
'query' => rand(0, 1000000), // To bypass fpc
|
| 85 |
+
'_store' => self::DEFAULT_STORE_ID,
|
| 86 |
+
'_nosid' => true
|
| 87 |
+
)
|
| 88 |
+
);
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
}
|
app/code/community/Olctw/Debug/Block/Controller.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Controller extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
protected function getItems() {
|
| 6 |
+
return Mage::getSingleton('debug/debug')->getBlocks();
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
protected function getTemplateDirs() {
|
| 10 |
+
return NULL;
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
}
|
app/code/community/Olctw/Debug/Block/Debug.php
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Debug extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
public function _prepareLayout() {
|
| 6 |
+
return parent::_prepareLayout();
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
public function renderView() {
|
| 10 |
+
// Render Debug toolbar only if allowed
|
| 11 |
+
if (Mage::helper('debug')->isRequestAllowed()) {
|
| 12 |
+
return parent::renderView();
|
| 13 |
+
}
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
public function getVersion() {
|
| 17 |
+
return (string) Mage::getConfig()->getNode('modules/Olctw_Debug/version');
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
private function createDummyPanel($title) {
|
| 21 |
+
$panel = array(
|
| 22 |
+
'title' => $title,
|
| 23 |
+
'has_content' => true,
|
| 24 |
+
'url' => NULL,
|
| 25 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 26 |
+
'nav_title' => $title,
|
| 27 |
+
'nav_subtitle' => 'Subtitle for ' . $title,
|
| 28 |
+
'content' => 'Some content for ' . $title,
|
| 29 |
+
'template' => 'olctw_debug_versions_panel'
|
| 30 |
+
);
|
| 31 |
+
return $panel;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
protected function createVersionsPanel() {
|
| 35 |
+
$title = 'Versions';
|
| 36 |
+
$content = '';
|
| 37 |
+
$panel = array(
|
| 38 |
+
'title' => $title,
|
| 39 |
+
'has_content' => true,
|
| 40 |
+
'url' => NULL,
|
| 41 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 42 |
+
'nav_title' => $title,
|
| 43 |
+
'nav_subtitle' => 'Magento modules',
|
| 44 |
+
'template' => 'olctw_debug_versions_panel', // child block defined in layout xml
|
| 45 |
+
);
|
| 46 |
+
return $panel;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
protected function createPerformancePanel() {
|
| 50 |
+
$title = 'Performance';
|
| 51 |
+
$helper = Mage::helper('debug');
|
| 52 |
+
$panel = array(
|
| 53 |
+
'title' => $title,
|
| 54 |
+
'has_content' => true,
|
| 55 |
+
'url' => NULL,
|
| 56 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 57 |
+
'nav_title' => $title,
|
| 58 |
+
'nav_subtitle' => "TIME: {$helper->getScriptDuration()}s MEM: {$helper->getMemoryUsage()}",
|
| 59 |
+
'template' => 'olctw_debug_performance_panel',
|
| 60 |
+
);
|
| 61 |
+
return $panel;
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
protected function createConfigPanel() {
|
| 65 |
+
$title = 'Configuration';
|
| 66 |
+
$content = '';
|
| 67 |
+
$panel = array(
|
| 68 |
+
'title' => $title,
|
| 69 |
+
'has_content' => true,
|
| 70 |
+
'url' => NULL,
|
| 71 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 72 |
+
'nav_title' => $title,
|
| 73 |
+
'nav_subtitle' => "Search configurations",
|
| 74 |
+
'template' => 'olctw_debug_config_panel', // child block defined in layout xml
|
| 75 |
+
);
|
| 76 |
+
return $panel;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
protected function createBlocksPanel() {
|
| 80 |
+
$title = 'Blocks';
|
| 81 |
+
$nBlocks = count(Mage::getSingleton('debug/observer')->getBlocks());
|
| 82 |
+
|
| 83 |
+
$panel = array(
|
| 84 |
+
'title' => $title,
|
| 85 |
+
'has_content' => true,
|
| 86 |
+
'url' => NULL,
|
| 87 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 88 |
+
'nav_title' => $title,
|
| 89 |
+
'nav_subtitle' => "{$nBlocks} used blocks",
|
| 90 |
+
'template' => 'olctw_debug_blocks_panel', // child block defined in layout xml
|
| 91 |
+
);
|
| 92 |
+
return $panel;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
protected function createLayoutPanel() {
|
| 96 |
+
$title = 'Layout';
|
| 97 |
+
$panel = array(
|
| 98 |
+
'title' => $title,
|
| 99 |
+
'has_content' => true,
|
| 100 |
+
'url' => NULL,
|
| 101 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 102 |
+
'nav_title' => $title,
|
| 103 |
+
'nav_subtitle' => "Layout handlers",
|
| 104 |
+
'template' => 'olctw_debug_layout_panel', // child block defined in layout xml
|
| 105 |
+
);
|
| 106 |
+
return $panel;
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
protected function createControllerPanel() {
|
| 110 |
+
$title = 'Controller';
|
| 111 |
+
$content = '';
|
| 112 |
+
$panel = array(
|
| 113 |
+
'title' => $title,
|
| 114 |
+
'has_content' => true,
|
| 115 |
+
'url' => NULL,
|
| 116 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 117 |
+
'nav_title' => $title,
|
| 118 |
+
'nav_subtitle' => 'Controller and request',
|
| 119 |
+
'template' => 'olctw_debug_controller_panel', // child block defined in layout xml
|
| 120 |
+
);
|
| 121 |
+
return $panel;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
protected function createModelsPanel() {
|
| 125 |
+
$title = 'Models';
|
| 126 |
+
$nModels = count(Mage::getSingleton('debug/observer')->getModels());
|
| 127 |
+
$nQueries = count(Mage::getSingleton('debug/observer')->getQueries());
|
| 128 |
+
$panel = array(
|
| 129 |
+
'title' => $title,
|
| 130 |
+
'has_content' => true,
|
| 131 |
+
'url' => NULL,
|
| 132 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 133 |
+
'nav_title' => $title,
|
| 134 |
+
'nav_subtitle' => "{$nModels} models, {$nQueries} queries",
|
| 135 |
+
'template' => 'olctw_debug_models_panel', // child block defined in layout xml
|
| 136 |
+
);
|
| 137 |
+
return $panel;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
protected function createUtilsPanel() {
|
| 141 |
+
$title = 'Utilities';
|
| 142 |
+
|
| 143 |
+
$panel = array(
|
| 144 |
+
'title' => $title,
|
| 145 |
+
'has_content' => true,
|
| 146 |
+
'url' => NULL,
|
| 147 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 148 |
+
'nav_title' => $title,
|
| 149 |
+
'nav_subtitle' => "Quick actions",
|
| 150 |
+
'template' => 'olctw_debug_utils_panel', // child block defined in layout xml
|
| 151 |
+
);
|
| 152 |
+
return $panel;
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
protected function createLogsPanel() {
|
| 156 |
+
$title = 'Logs';
|
| 157 |
+
|
| 158 |
+
$panel = array(
|
| 159 |
+
'title' => $title,
|
| 160 |
+
'has_content' => true,
|
| 161 |
+
'url' => NULL,
|
| 162 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 163 |
+
'nav_title' => $title,
|
| 164 |
+
'nav_subtitle' => "View logs",
|
| 165 |
+
'template' => 'olctw_debug_logs_panel', // child block defined in layout xml
|
| 166 |
+
);
|
| 167 |
+
return $panel;
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
protected function createPreferencesPanel() {
|
| 171 |
+
$title = 'Preferences';
|
| 172 |
+
$panel = array(
|
| 173 |
+
'title' => $title,
|
| 174 |
+
'has_content' => true,
|
| 175 |
+
'url' => NULL,
|
| 176 |
+
'dom_id' => 'debug-panel-' . $title,
|
| 177 |
+
'nav_title' => $title,
|
| 178 |
+
'nav_subtitle' => "Customize Magneto Debug",
|
| 179 |
+
'template' => 'olctw_debug_preferences_panel', // child block defined in layout xml
|
| 180 |
+
);
|
| 181 |
+
return $panel;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
public function getPanels() {
|
| 185 |
+
$panels = array();
|
| 186 |
+
$panels[] = $this->createVersionsPanel();
|
| 187 |
+
$panels[] = $this->createPerformancePanel();
|
| 188 |
+
$panels[] = $this->createConfigPanel();
|
| 189 |
+
$panels[] = $this->createControllerPanel();
|
| 190 |
+
$panels[] = $this->createModelsPanel();
|
| 191 |
+
$panels[] = $this->createLayoutPanel();
|
| 192 |
+
$panels[] = $this->createBlocksPanel();
|
| 193 |
+
$panels[] = $this->createUtilsPanel();
|
| 194 |
+
$panels[] = $this->createLogsPanel();
|
| 195 |
+
// TODO: Implement preferences panel (toggle panels visibility from toolbar)
|
| 196 |
+
// $panels[] = $this->createPreferencesPanel();
|
| 197 |
+
|
| 198 |
+
return $panels;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
public function getVisiblePanels() {
|
| 202 |
+
/* @var $helper Olctw_Debug_Helper_Data */
|
| 203 |
+
$helper = Mage::helper('debug');
|
| 204 |
+
$panels = $this->getPanels();
|
| 205 |
+
$visiblePanels = array();
|
| 206 |
+
|
| 207 |
+
foreach ($panels as $panel) {
|
| 208 |
+
if ($helper->isPanelVisible($panel['title'])) {
|
| 209 |
+
$visiblePanels[] = $panel;
|
| 210 |
+
}
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
return $visiblePanels;
|
| 214 |
+
}
|
| 215 |
+
|
| 216 |
+
public function getDebugMediaUrl() {
|
| 217 |
+
return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN) . 'frontend/base/default/olctw_debug/';
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
}
|
app/code/community/Olctw/Debug/Block/Layout.php
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Layout extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
public function getViewHandleUrl($layoutHandle) {
|
| 6 |
+
$designPackage = Mage::getSingleton('core/design_package');
|
| 7 |
+
|
| 8 |
+
return $this->getUrl('debug/index/viewFilesWithHandle', array(
|
| 9 |
+
'layout' => $layoutHandle,
|
| 10 |
+
'storeId' => $designPackage->getStore()->getId(),
|
| 11 |
+
'area' => $designPackage->getArea(),
|
| 12 |
+
'_store' => self::DEFAULT_STORE_ID
|
| 13 |
+
));
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
}
|
app/code/community/Olctw/Debug/Block/Models.php
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Models extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
const SQL_SELECT_ACTION = 'viewSqlSelect';
|
| 6 |
+
const SQL_EXPLAIN_ACTION = 'viewSqlExplain';
|
| 7 |
+
|
| 8 |
+
protected function getItems() {
|
| 9 |
+
return Mage::getSingleton('debug/observer')->getModels();
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
protected function getQueries() {
|
| 13 |
+
return Mage::getSingleton('debug/observer')->getQueries();
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
protected function getCollections() {
|
| 17 |
+
return Mage::getSingleton('debug/observer')->getCollections();
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
/**
|
| 21 |
+
* $viewType can be 'Select' or 'Explain'
|
| 22 |
+
* @param \Zend_Db_Profiler_Query $query
|
| 23 |
+
* @param string $viewType
|
| 24 |
+
* @return string
|
| 25 |
+
*/
|
| 26 |
+
protected function getSqlUrl(Zend_Db_Profiler_Query $query, $viewType = self::SQL_SELECT_ACTION) {
|
| 27 |
+
$queryType = $query->getQueryType();
|
| 28 |
+
if ($queryType == Zend_Db_Profiler::SELECT) {
|
| 29 |
+
return Mage::getUrl('debug/index/' . $viewType, array(
|
| 30 |
+
'_query' => array('sql' => $query->getQuery(), 'params' => $query->getQueryParams()),
|
| 31 |
+
'_store' => self::DEFAULT_STORE_ID
|
| 32 |
+
));
|
| 33 |
+
} else {
|
| 34 |
+
return '';
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
public function getSqlSelectUrl(Zend_Db_Profiler_Query $query) {
|
| 39 |
+
return $this->getSqlUrl($query, self::SQL_SELECT_ACTION);
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
public function getSqlExplainUrl(Zend_Db_Profiler_Query $query) {
|
| 43 |
+
return $this->getSqlUrl($query, self::SQL_EXPLAIN_ACTION);
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
}
|
app/code/community/Olctw/Debug/Block/Preferences.php
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Preferences extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
public function getPanels() {
|
| 6 |
+
/* @var $debugBlock Olctw_Debug_Block_Debug */
|
| 7 |
+
$debugBlock = $this->getParentBlock();
|
| 8 |
+
return $debugBlock->getPanels();
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
public function getFormUrl() {
|
| 12 |
+
return Mage::getUrl('debug/preferences/updatePost');
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
}
|
app/code/community/Olctw/Debug/Block/Versions.php
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Block_Versions extends Olctw_Debug_Block_Abstract {
|
| 4 |
+
|
| 5 |
+
protected function getItems() {
|
| 6 |
+
$items = array();
|
| 7 |
+
$items[] = array(
|
| 8 |
+
'module' => 'Magento',
|
| 9 |
+
'codePool' => 'core',
|
| 10 |
+
'active' => true,
|
| 11 |
+
'version' => Mage::getVersion());
|
| 12 |
+
|
| 13 |
+
$modulesConfig = Mage::getConfig()->getModuleConfig();
|
| 14 |
+
foreach ($modulesConfig as $node) {
|
| 15 |
+
foreach ($node as $module => $data) {
|
| 16 |
+
$items[] = array(
|
| 17 |
+
"module" => $module,
|
| 18 |
+
"codePool" => $data->codePool,
|
| 19 |
+
"active" => $data->active,
|
| 20 |
+
"version" => $data->version
|
| 21 |
+
);
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
return $items;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
}
|
| 29 |
+
|
app/code/community/Olctw/Debug/Helper/Data.php
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Helper_Data extends Mage_Core_Helper_Abstract {
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Cleans Magento's cache
|
| 7 |
+
*
|
| 8 |
+
* @return void
|
| 9 |
+
*/
|
| 10 |
+
public function cleanCache() {
|
| 11 |
+
Mage::app()->cleanCache();
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Check if client's ip is whitelisted
|
| 16 |
+
*
|
| 17 |
+
* @return bool
|
| 18 |
+
*/
|
| 19 |
+
function isRequestAllowed() {
|
| 20 |
+
$isDebugEnable = (int) Mage::getStoreConfig('debug/options/enable');
|
| 21 |
+
$clientIp = $this->_getRequest()->getClientIp();
|
| 22 |
+
$allow = false;
|
| 23 |
+
|
| 24 |
+
if ($isDebugEnable) {
|
| 25 |
+
$allow = true;
|
| 26 |
+
|
| 27 |
+
// Code copy-pasted from core/helper, isDevAllowed method
|
| 28 |
+
// I cannot use that method because the client ip is not always correct (e.g varnish)
|
| 29 |
+
$allowedIps = Mage::getStoreConfig('dev/restrict/allow_ips');
|
| 30 |
+
if ($isDebugEnable && !empty($allowedIps) && !empty($clientIp)) {
|
| 31 |
+
$allowedIps = preg_split('#\s*,\s*#', $allowedIps, null, PREG_SPLIT_NO_EMPTY);
|
| 32 |
+
if (array_search($clientIp, $allowedIps) === false
|
| 33 |
+
&& array_search(Mage::helper('core/http')->getHttpHost(), $allowedIps) === false) {
|
| 34 |
+
$allow = false;
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
return $allow;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Return readable file size
|
| 44 |
+
*
|
| 45 |
+
* @param int $size size in bytes
|
| 46 |
+
*
|
| 47 |
+
* @return string
|
| 48 |
+
*/
|
| 49 |
+
function formatSize($size) {
|
| 50 |
+
$sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
|
| 51 |
+
if ($size == 0) {
|
| 52 |
+
return('n/a');
|
| 53 |
+
} else {
|
| 54 |
+
return ( round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]);
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
public function getMemoryUsage() {
|
| 59 |
+
return $this->formatSize(memory_get_peak_usage(TRUE));
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
public function getScriptDuration() {
|
| 63 |
+
if (function_exists('xdebug_time_index')) {
|
| 64 |
+
return sprintf("%0.2f", xdebug_time_index());
|
| 65 |
+
} else {
|
| 66 |
+
return 'n/a';
|
| 67 |
+
}
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
public static function sortModelCmp($a, $b) {
|
| 71 |
+
if ($a['occurrences'] == $b['occurrences'])
|
| 72 |
+
return 0;
|
| 73 |
+
return ($a['occurrences'] < $b['occurrences']) ? 1 : -1;
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
public function sortModelsByOccurrences(&$models) {
|
| 77 |
+
usort($models, array('Olctw_Debug_Helper_Data', 'sortModelCmp'));
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
public function getBlockFilename($blockClass) {
|
| 81 |
+
return mageFindClassFile($blockClass);
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* Returns all xml files that contains layout updates.
|
| 86 |
+
*
|
| 87 |
+
* @param int|null $storeId store identifier
|
| 88 |
+
*
|
| 89 |
+
* @param $designArea
|
| 90 |
+
* @return array
|
| 91 |
+
*/
|
| 92 |
+
function getLayoutUpdatesFiles($storeId, $designArea) {
|
| 93 |
+
if (null === $storeId) {
|
| 94 |
+
$storeId = Mage::app()->getStore()->getId();
|
| 95 |
+
}
|
| 96 |
+
$updatesRoot = Mage::app()->getConfig()->getNode($designArea . '/layout/updates');
|
| 97 |
+
|
| 98 |
+
// Find files with layout updates
|
| 99 |
+
$updateFiles = array();
|
| 100 |
+
foreach ($updatesRoot->children() as $updateNode) {
|
| 101 |
+
if ($updateNode->file) {
|
| 102 |
+
$module = $updateNode->getAttribute('module');
|
| 103 |
+
if ($module && Mage::getStoreConfigFlag('advanced/modules_disable_output/' . $module, $storeId)) {
|
| 104 |
+
continue;
|
| 105 |
+
}
|
| 106 |
+
$updateFiles[] = (string) $updateNode->file;
|
| 107 |
+
}
|
| 108 |
+
}
|
| 109 |
+
// custom local layout updates file - load always last
|
| 110 |
+
$updateFiles[] = 'local.xml';
|
| 111 |
+
|
| 112 |
+
return $updateFiles;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
/**
|
| 116 |
+
* Read last lines of file (able to read huge file)
|
| 117 |
+
*
|
| 118 |
+
* @param string $file
|
| 119 |
+
* @param int $lines
|
| 120 |
+
* @param null|string $header
|
| 121 |
+
*
|
| 122 |
+
* @return array|int
|
| 123 |
+
*/
|
| 124 |
+
public function getLastRows($file, $lines, $header = null) {
|
| 125 |
+
// Number of lines read per time
|
| 126 |
+
$bufferlength = 1024;
|
| 127 |
+
$aliq = "";
|
| 128 |
+
$line_arr = array();
|
| 129 |
+
$tmp = array();
|
| 130 |
+
$tmp2 = array();
|
| 131 |
+
|
| 132 |
+
if (!($handle = fopen($file, "r"))) {
|
| 133 |
+
return "Could not fopen $file";
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
if (!$handle) {
|
| 137 |
+
return "Bad file handle";
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
// Get size of file
|
| 141 |
+
fseek($handle, 0, SEEK_END);
|
| 142 |
+
$filesize = ftell($handle);
|
| 143 |
+
|
| 144 |
+
$position = - min($bufferlength, $filesize);
|
| 145 |
+
|
| 146 |
+
while ($lines > 0) {
|
| 147 |
+
if (fseek($handle, $position, SEEK_END)) {
|
| 148 |
+
return "Could not fseek";
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
unset($buffer);
|
| 152 |
+
$buffer = "";
|
| 153 |
+
// Read some data starting fromt he end of the file
|
| 154 |
+
if (!($buffer = fread($handle, $bufferlength))) {
|
| 155 |
+
return "File is empty";
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
// Split by line
|
| 159 |
+
$cnt = (count($tmp) - 1);
|
| 160 |
+
for ($i = 0; $i < count($tmp); $i++) {
|
| 161 |
+
unset($tmp[0]);
|
| 162 |
+
}
|
| 163 |
+
unset($tmp);
|
| 164 |
+
$tmp = explode("\n", $buffer);
|
| 165 |
+
|
| 166 |
+
// Handle case of partial previous line read
|
| 167 |
+
if ($aliq != "") {
|
| 168 |
+
$tmp[count($tmp) - 1] .= $aliq;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
unset($aliq);
|
| 172 |
+
// Take out the first line which may be partial
|
| 173 |
+
$aliq = array_shift($tmp);
|
| 174 |
+
$read = count($tmp);
|
| 175 |
+
|
| 176 |
+
// Read too much (exceeded indicated lines to read)
|
| 177 |
+
if ($read >= $lines) {
|
| 178 |
+
// Slice off the lines we need and merge with current results
|
| 179 |
+
unset($tmp2);
|
| 180 |
+
$tmp2 = array_slice($tmp, $read - $lines);
|
| 181 |
+
$line_arr = array_merge($tmp2, $line_arr);
|
| 182 |
+
|
| 183 |
+
// Discard the header line if it is there
|
| 184 |
+
if ($header &&
|
| 185 |
+
(count($line_arr) <= $lines)) {
|
| 186 |
+
array_shift($line_arr);
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
// Break the loop
|
| 190 |
+
$lines = 0;
|
| 191 |
+
}
|
| 192 |
+
// Reached start of file
|
| 193 |
+
elseif (-$position >= $filesize) {
|
| 194 |
+
// Get back $aliq which contains the very first line of the file
|
| 195 |
+
unset($tmp2);
|
| 196 |
+
$tmp2[0] = $aliq;
|
| 197 |
+
|
| 198 |
+
$line_arr = array_merge($tmp2, $tmp, $line_arr);
|
| 199 |
+
|
| 200 |
+
// Discard the header line if it is there
|
| 201 |
+
if ($header &&
|
| 202 |
+
(count($line_arr) <= $lines)) {
|
| 203 |
+
array_shift($line_arr);
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
// Break the loop
|
| 207 |
+
$lines = 0;
|
| 208 |
+
}
|
| 209 |
+
// Continue reading
|
| 210 |
+
else {
|
| 211 |
+
// Add the freshly grabbed lines on top of the others
|
| 212 |
+
$line_arr = array_merge($tmp, $line_arr);
|
| 213 |
+
$lines -= $read;
|
| 214 |
+
|
| 215 |
+
// No longer a full buffer's worth of data to read
|
| 216 |
+
if ($position - $bufferlength < -$filesize) {
|
| 217 |
+
$bufferlength = $filesize + $position;
|
| 218 |
+
$position = -$filesize;
|
| 219 |
+
}
|
| 220 |
+
// Still >= $bufferlength worth of data to read
|
| 221 |
+
else {
|
| 222 |
+
$position -= $bufferlength;
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
}
|
| 226 |
+
|
| 227 |
+
fclose($handle);
|
| 228 |
+
|
| 229 |
+
return $line_arr;
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
public function isPanelVisible($panelTitle) {
|
| 233 |
+
return Mage::getStoreConfig('debug/options/debug_panel_' . strtolower($panelTitle) . '_visibility');
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
}
|
app/code/community/Olctw/Debug/Model/Observer.php
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_Model_Observer {
|
| 4 |
+
|
| 5 |
+
private $_actions = array();
|
| 6 |
+
// List of assoc array with class, type and sql keys
|
| 7 |
+
private $collections = array();
|
| 8 |
+
// private $layoutUpdates = array();
|
| 9 |
+
private $models = array();
|
| 10 |
+
private $blocks = array();
|
| 11 |
+
private $layoutBlocks = array();
|
| 12 |
+
|
| 13 |
+
public function getModels() {
|
| 14 |
+
return $this->models;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
public function getBlocks() {
|
| 18 |
+
return $this->blocks;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
public function getLayoutBlocks() {
|
| 22 |
+
return $this->layoutBlocks;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
public function getCollections() {
|
| 26 |
+
return $this->collections;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
// public function getLayoutUpdates() { return $this->layoutUpdates; }
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
*
|
| 33 |
+
* TODO: Make this a setting
|
| 34 |
+
*
|
| 35 |
+
* @return bool
|
| 36 |
+
*/
|
| 37 |
+
protected function _skipCoreBlocks() {
|
| 38 |
+
return false;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Logic that checks if we should ignore this block
|
| 43 |
+
*
|
| 44 |
+
* @param $block Mage_Core_Block_Abstract
|
| 45 |
+
* @return bool
|
| 46 |
+
*/
|
| 47 |
+
protected function _skipBlock($block) {
|
| 48 |
+
$blockClass = get_class($block);
|
| 49 |
+
|
| 50 |
+
if ($this->_skipCoreBlocks() && strpos($blockClass, 'Mage_') === 0) {
|
| 51 |
+
return true;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
// Don't list blocks from Debug module
|
| 55 |
+
if (strpos($blockClass, 'Olctw_Debug_Block') === 0) {
|
| 56 |
+
return true;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
return false;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
public function getQueries() {
|
| 63 |
+
//TODO: implement profiler for connections other than 'core_write'
|
| 64 |
+
$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
|
| 65 |
+
$queries = array();
|
| 66 |
+
|
| 67 |
+
if ($profiler) {
|
| 68 |
+
$queries = $profiler->getQueryProfiles();
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
return $queries;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
public function onLayoutGenerate(Varien_Event_Observer $observer) {
|
| 75 |
+
$layout = $observer->getEvent()->getLayout();
|
| 76 |
+
$layoutBlocks = $layout->getAllBlocks();
|
| 77 |
+
|
| 78 |
+
// After layout generates all the blocks
|
| 79 |
+
foreach ($layoutBlocks as $block) {
|
| 80 |
+
$blockStruct = array();
|
| 81 |
+
$blockStruct['class'] = get_class($block);
|
| 82 |
+
$blockStruct['layout_name'] = $block->getNameInLayout();
|
| 83 |
+
if (method_exists($block, 'getTemplateFile')) {
|
| 84 |
+
$blockStruct['template'] = $block->getTemplateFile();
|
| 85 |
+
} else {
|
| 86 |
+
$blockStruct['template'] = '';
|
| 87 |
+
}
|
| 88 |
+
if (method_exists($block, 'getViewVars')) {
|
| 89 |
+
$blockStruct['context'] = $block->getViewVars();
|
| 90 |
+
} else {
|
| 91 |
+
$blockStruct['context'] = NULL;
|
| 92 |
+
}
|
| 93 |
+
$this->layoutBlocks[] = $blockStruct;
|
| 94 |
+
}
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
/**
|
| 98 |
+
* Listens to core_block_abstract_to_html_before event and records blocks
|
| 99 |
+
* that are about to being rendered.
|
| 100 |
+
*
|
| 101 |
+
* @param Varien_Event_Observer $observer
|
| 102 |
+
* @return Olctw_Debug_Model_Observer
|
| 103 |
+
*/
|
| 104 |
+
public function onBlockToHtml(Varien_Event_Observer $observer) {
|
| 105 |
+
/** @var $event Varien_Event */
|
| 106 |
+
$event = $observer->getEvent();
|
| 107 |
+
/* @var $block Mage_Core_Block_Abstract */
|
| 108 |
+
$block = $event->getBlock();
|
| 109 |
+
|
| 110 |
+
if ($this->_skipBlock($block)) {
|
| 111 |
+
return $this;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
$blockStruct = array();
|
| 115 |
+
$blockStruct['class'] = get_class($block);
|
| 116 |
+
$blockStruct['layout_name'] = $block->getNameInLayout();
|
| 117 |
+
$blockStruct['rendered_at'] = microtime(true);
|
| 118 |
+
|
| 119 |
+
if (method_exists($block, 'getTemplateFile')) {
|
| 120 |
+
$blockStruct['template'] = $block->getTemplateFile();
|
| 121 |
+
} else {
|
| 122 |
+
$blockStruct['template'] = '';
|
| 123 |
+
}
|
| 124 |
+
if (method_exists($block, 'getViewVars')) {
|
| 125 |
+
$blockStruct['context'] = $block->getViewVars();
|
| 126 |
+
} else {
|
| 127 |
+
$blockStruct['context'] = NULL;
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
$this->blocks[$block->getNameInLayout()] = $blockStruct;
|
| 131 |
+
|
| 132 |
+
return $this;
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
/**
|
| 136 |
+
* Listens to core_block_abstract_to_html_after event end computes the time
|
| 137 |
+
* spent in block's _toHtml (rendering time).
|
| 138 |
+
*
|
| 139 |
+
* @param Varien_Event_Observer $observer
|
| 140 |
+
* @return Olctw_Debug_Model_Observer
|
| 141 |
+
*/
|
| 142 |
+
public function onBlockToHtmlAfter(Varien_Event_Observer $observer) {
|
| 143 |
+
$event = $observer->getEvent();
|
| 144 |
+
/* @var $block Mage_Core_Block_Abstract */
|
| 145 |
+
$block = $event->getBlock();
|
| 146 |
+
|
| 147 |
+
// Don't list blocks from Debug module
|
| 148 |
+
if ($this->_skipBlock($block)) {
|
| 149 |
+
return $this;
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
$blockStruct = $this->blocks[$block->getNameInLayout()];
|
| 153 |
+
|
| 154 |
+
$duration = microtime(true) - $blockStruct['rendered_at'];
|
| 155 |
+
$this->blocks[$block->getNameInLayout()]['rendered_in'] = $duration;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
function onActionPostDispatch(Varien_Event_Observer $event) {
|
| 159 |
+
$action = $event->getControllerAction();
|
| 160 |
+
|
| 161 |
+
$actionStruct = array();
|
| 162 |
+
$actionStruct['class'] = get_class($action);
|
| 163 |
+
$actionStruct['action_name'] = $action->getFullActionName();
|
| 164 |
+
$actionStruct['route_name'] = $action->getRequest()->getRouteName();
|
| 165 |
+
|
| 166 |
+
$this->_actions[] = $actionStruct;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
// controller_action_layout_generate_blocks_after
|
| 170 |
+
function onCollectionLoad(Varien_Event_Observer $event) {
|
| 171 |
+
/** @var Mage_Core_Model_Mysql4_Store_Collection */
|
| 172 |
+
$collection = $event->getCollection();
|
| 173 |
+
|
| 174 |
+
$collectionStruct = array();
|
| 175 |
+
$collectionStruct['sql'] = $collection->getSelectSql(true);
|
| 176 |
+
$collectionStruct['type'] = 'mysql';
|
| 177 |
+
$collectionStruct['class'] = get_class($collection);
|
| 178 |
+
$this->collections[] = $collectionStruct;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
function onEavCollectionLoad(Varien_Event_Observer $event) {
|
| 182 |
+
$collection = $event->getCollection();
|
| 183 |
+
$sqlStruct = array();
|
| 184 |
+
$sqlStruct['sql'] = $collection->getSelectSql(true);
|
| 185 |
+
$sqlStruct['type'] = 'eav';
|
| 186 |
+
$sqlStruct['class'] = get_class($collection);
|
| 187 |
+
$this->collections[] = $sqlStruct;
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
/* function onPrepareLayout(Varien_Event_Observer $observer){
|
| 191 |
+
$block = $observer->getEvent()->getBlock();
|
| 192 |
+
var_dump(array_keys($observer->getEvent()->getData()));
|
| 193 |
+
// Mage::log('onPrepareLayout: ' . get_class($observer) . 'block=";
|
| 194 |
+
|
| 195 |
+
$layoutUpdate = array();
|
| 196 |
+
$layoutUpdate['block'] = get_class($observer->getBlock());
|
| 197 |
+
$layoutUpdate['name'] = get_class($observer->getName());
|
| 198 |
+
$this->layoutUpdates[] = $layoutUpdate;
|
| 199 |
+
} */
|
| 200 |
+
|
| 201 |
+
function onModelLoad(Varien_Event_Observer $observer) {
|
| 202 |
+
$event = $observer->getEvent();
|
| 203 |
+
$object = $event->getObject();
|
| 204 |
+
$key = get_class($object);
|
| 205 |
+
|
| 206 |
+
if (array_key_exists($key, $this->models)) {
|
| 207 |
+
$this->models[$key]['occurrences']++;
|
| 208 |
+
} else {
|
| 209 |
+
$model = array();
|
| 210 |
+
$model['class'] = get_class($object);
|
| 211 |
+
$model['resource_name'] = $object->getResourceName();
|
| 212 |
+
$model['occurrences'] = 1;
|
| 213 |
+
$this->models[$key] = $model;
|
| 214 |
+
}
|
| 215 |
+
|
| 216 |
+
return $this;
|
| 217 |
+
}
|
| 218 |
+
|
| 219 |
+
/**
|
| 220 |
+
* We listen to this event to filter access to actions defined by Debug module.
|
| 221 |
+
* We allow only actions if debug toolbar is on and ip is listed in Developer Client Restrictions
|
| 222 |
+
*
|
| 223 |
+
* @param Varien_Event_Observer $observer
|
| 224 |
+
*
|
| 225 |
+
* @return void
|
| 226 |
+
*/
|
| 227 |
+
function onActionPreDispatch(Varien_Event_Observer $observer) {
|
| 228 |
+
$action = $observer->getEvent()->getControllerAction();
|
| 229 |
+
$moduleName = $action->getRequest()->getControllerModule();
|
| 230 |
+
if (strpos($moduleName, "Olctw_Debug") === 0 && !Mage::helper('debug')->isRequestAllowed()) {
|
| 231 |
+
|
| 232 |
+
Mage::log("Access to Olctw_Debug's actions blocked: dev mode is set to false.");
|
| 233 |
+
// $response = $action->getResponse();
|
| 234 |
+
// $response->setHttpResponseCode(404);
|
| 235 |
+
// $response->setBody('Site access denied.');
|
| 236 |
+
//$action->setDispatched(true)
|
| 237 |
+
//
|
| 238 |
+
exit();
|
| 239 |
+
}
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
}
|
app/code/community/Olctw/Debug/controllers/IndexController.php
ADDED
|
@@ -0,0 +1,496 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_IndexController extends Mage_Core_Controller_Front_Action {
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Return block content
|
| 7 |
+
*
|
| 8 |
+
* @param string $title block title
|
| 9 |
+
* @param string $content body content
|
| 10 |
+
*
|
| 11 |
+
* @return string
|
| 12 |
+
*/
|
| 13 |
+
private function _debugPanel($title, $content) {
|
| 14 |
+
$block = $this->getLayout()->createBlock('debug/abstract');
|
| 15 |
+
$block->setTemplate('olctw_debug/simplepanel.phtml');
|
| 16 |
+
$block->assign('title', $title);
|
| 17 |
+
$block->assign('content', $content);
|
| 18 |
+
return $block->toHtml();
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* @param null $defaultUrl
|
| 23 |
+
* @return Mage_Core_Controller_Varien_Action
|
| 24 |
+
*/
|
| 25 |
+
protected function _redirectReferer($defaultUrl = null) {
|
| 26 |
+
if ($store = $this->getRequest()->getParam('store')) {
|
| 27 |
+
Mage::app()->setCurrentStore($store);
|
| 28 |
+
}
|
| 29 |
+
return parent::_redirectReferer($defaultUrl);
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Show source code of template
|
| 34 |
+
*
|
| 35 |
+
* @return string
|
| 36 |
+
*/
|
| 37 |
+
public function viewTemplateAction() {
|
| 38 |
+
$fileName = $this->getRequest()->get('template');
|
| 39 |
+
|
| 40 |
+
$absoluteFilePath = realpath(Mage::getBaseDir('design') . DS . $fileName);
|
| 41 |
+
$source = highlight_string(file_get_contents($absoluteFilePath), true);
|
| 42 |
+
|
| 43 |
+
$content = $this->_debugPanel("Template Source: <code>$fileName</code>", $source);
|
| 44 |
+
$this->getResponse()->setBody($content);
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Show source code of block
|
| 49 |
+
*
|
| 50 |
+
* @return string
|
| 51 |
+
*/
|
| 52 |
+
public function viewBlockAction() {
|
| 53 |
+
$blockClass = $this->getRequest()->get('block');
|
| 54 |
+
$absoluteFilePath = Mage::helper('debug')->getBlockFilename($blockClass);
|
| 55 |
+
|
| 56 |
+
$source = highlight_string(file_get_contents($absoluteFilePath), true);
|
| 57 |
+
|
| 58 |
+
$content = $this->_debugPanel("Block Source: <code>{$blockClass}</code>", $source);
|
| 59 |
+
$this->getResponse()->setBody($content);
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* View sql query
|
| 64 |
+
*
|
| 65 |
+
* @return void
|
| 66 |
+
*/
|
| 67 |
+
public function viewSqlSelectAction() {
|
| 68 |
+
$con = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 69 |
+
$query = $this->getRequest()->getParam('sql');
|
| 70 |
+
$queryParams = $this->getRequest()->getParam('params');
|
| 71 |
+
|
| 72 |
+
$result = $con->query($query, $queryParams);
|
| 73 |
+
|
| 74 |
+
$items = array();
|
| 75 |
+
$headers = array();
|
| 76 |
+
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
|
| 77 |
+
$items[] = $row;
|
| 78 |
+
|
| 79 |
+
if (empty($headers)) {
|
| 80 |
+
$headers = array_keys($row);
|
| 81 |
+
}
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
$block = $this->getLayout()->createBlock('debug/abstract');
|
| 85 |
+
$block->setTemplate('olctw_debug/arrayformat.phtml');
|
| 86 |
+
$block->assign('title', 'SQL Select');
|
| 87 |
+
$block->assign('headers', $headers);
|
| 88 |
+
$block->assign('items', $items);
|
| 89 |
+
$block->assign('query', $query);
|
| 90 |
+
$this->getResponse()->setBody($block->toHtml());
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
/**
|
| 94 |
+
* @return void
|
| 95 |
+
*/
|
| 96 |
+
public function viewFilesWithHandleAction() {
|
| 97 |
+
$layoutHandle = $this->getRequest()->getParam('layout');
|
| 98 |
+
$storeId = $this->getRequest()->getParam('storeId');
|
| 99 |
+
$designArea = $this->getRequest()->getParam('area');
|
| 100 |
+
|
| 101 |
+
$title = "Files with layout updates for handle {$layoutHandle}";
|
| 102 |
+
if (!$layoutHandle) {
|
| 103 |
+
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
$updateFiles = Mage::helper('debug')->getLayoutUpdatesFiles($storeId, $designArea);
|
| 107 |
+
|
| 108 |
+
/* @var $designPackage Mage_Core_Model_Design_Package */
|
| 109 |
+
$designPackage = Mage::getModel('core/design_package');
|
| 110 |
+
$designPackage->setStore(Mage::app()->getStore($storeId));
|
| 111 |
+
$designPackage->setArea($designArea);
|
| 112 |
+
|
| 113 |
+
// search handle in these files
|
| 114 |
+
$handleFiles = array();
|
| 115 |
+
foreach ($updateFiles as $file) {
|
| 116 |
+
$filename = $designPackage->getLayoutFilename($file, array(
|
| 117 |
+
'_area' => $designPackage->getArea(),
|
| 118 |
+
'_package' => $designPackage->getPackageName(),
|
| 119 |
+
'_theme' => $designPackage->getTheme('layout')
|
| 120 |
+
));
|
| 121 |
+
if (!is_readable($filename)) {
|
| 122 |
+
continue;
|
| 123 |
+
}
|
| 124 |
+
$fileStr = file_get_contents($filename);
|
| 125 |
+
|
| 126 |
+
$fileXml = simplexml_load_string($fileStr, Mage::getConfig()->getModelClassName('core/layout_element'));
|
| 127 |
+
if (!$fileXml instanceof SimpleXMLElement) {
|
| 128 |
+
continue;
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
$result = $fileXml->xpath("/layout/" . $layoutHandle);
|
| 132 |
+
if ($result) {
|
| 133 |
+
$handleFiles[$filename] = $result;
|
| 134 |
+
}
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
// Search updates for handle in DB
|
| 138 |
+
$bind = array(
|
| 139 |
+
'store_id' => $storeId,
|
| 140 |
+
'area' => $designArea,
|
| 141 |
+
'package' => $designPackage->getPackageName(),
|
| 142 |
+
'theme' => $designPackage->getTheme('layout'),
|
| 143 |
+
'layout_update_handle' => $layoutHandle
|
| 144 |
+
);
|
| 145 |
+
|
| 146 |
+
/* @var $layoutResourceModel Mage_Core_Model_Resource_Layout */
|
| 147 |
+
$layoutResourceModel = Mage::getResourceModel('core/layout');
|
| 148 |
+
|
| 149 |
+
/* @var $readAdapter Varien_Db_Adapter_Pdo_Mysql */
|
| 150 |
+
$readAdapter = Mage::getSingleton('core/resource')->getConnection('core_read');
|
| 151 |
+
|
| 152 |
+
/* @var $select Varien_Db_Select */
|
| 153 |
+
$select = $readAdapter->select()
|
| 154 |
+
->from(array('layout_update' => $layoutResourceModel->getMainTable()), array('xml'))
|
| 155 |
+
->join(array('link' => $layoutResourceModel->getTable('core/layout_link')), 'link.layout_update_id=layout_update.layout_update_id', '')
|
| 156 |
+
->where('link.store_id IN (0, :store_id)')
|
| 157 |
+
->where('link.area = :area')
|
| 158 |
+
->where('link.package = :package')
|
| 159 |
+
->where('link.theme = :theme')
|
| 160 |
+
->where('layout_update.handle = :layout_update_handle')
|
| 161 |
+
->order('layout_update.sort_order ' . Varien_Db_Select::SQL_ASC);
|
| 162 |
+
|
| 163 |
+
$result = $readAdapter->fetchCol($select, $bind);
|
| 164 |
+
|
| 165 |
+
if (count($result)) {
|
| 166 |
+
$handleFiles['DATABASE'] = array();
|
| 167 |
+
foreach ($result as $dbLayoutUpdate) {
|
| 168 |
+
$handleFiles['DATABASE'][] = new Varien_Simplexml_Element($dbLayoutUpdate);
|
| 169 |
+
}
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
$block = $this->getLayout()->createBlock('debug/abstract');
|
| 173 |
+
$block->setTemplate('olctw_debug/handledetails.phtml');
|
| 174 |
+
$block->assign('title', $title);
|
| 175 |
+
$block->assign('handleFiles', $handleFiles);
|
| 176 |
+
|
| 177 |
+
$this->getResponse()->setBody($block->toHtml());
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
/**
|
| 181 |
+
* Show explain of sql query
|
| 182 |
+
*
|
| 183 |
+
* @return void
|
| 184 |
+
*/
|
| 185 |
+
public function viewSqlExplainAction() {
|
| 186 |
+
$con = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 187 |
+
$query = $this->getRequest()->getParam('sql');
|
| 188 |
+
$queryParams = $this->getRequest()->getParam('params');
|
| 189 |
+
|
| 190 |
+
$result = $con->query("EXPLAIN {$query}", $queryParams);
|
| 191 |
+
|
| 192 |
+
$items = array();
|
| 193 |
+
$headers = array();
|
| 194 |
+
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
|
| 195 |
+
$items[] = $row;
|
| 196 |
+
|
| 197 |
+
if (empty($headers)) {
|
| 198 |
+
$headers = array_keys($row);
|
| 199 |
+
}
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
$block = $this->getLayout()->createBlock('debug/abstract');
|
| 203 |
+
$block->setTemplate('olctw_debug/arrayformat.phtml');
|
| 204 |
+
$block->assign('title', 'SQL Explain');
|
| 205 |
+
$block->assign('headers', $headers);
|
| 206 |
+
$block->assign('items', $items);
|
| 207 |
+
$block->assign('query', $query);
|
| 208 |
+
|
| 209 |
+
$this->getResponse()->setBody($block->toHtml());
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
/**
|
| 213 |
+
* Clear Magento cache
|
| 214 |
+
*
|
| 215 |
+
* @return void
|
| 216 |
+
*/
|
| 217 |
+
public function clearCacheAction() {
|
| 218 |
+
$content = Mage::helper('debug')->cleanCache();
|
| 219 |
+
Mage::getSingleton('core/session')->addSuccess("Magento's caches were cleared.");
|
| 220 |
+
$this->_redirectReferer();
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
/**
|
| 224 |
+
* Turn on/off translate inline
|
| 225 |
+
*
|
| 226 |
+
* @return void
|
| 227 |
+
*/
|
| 228 |
+
public function toggleTranslateInlineAction() {
|
| 229 |
+
$forStore = $this->getRequest()->getParam('store', 1);
|
| 230 |
+
|
| 231 |
+
$currentStatus = Mage::getStoreConfig('dev/translate_inline/active', $forStore);
|
| 232 |
+
$newStatus = !$currentStatus;
|
| 233 |
+
|
| 234 |
+
$config = Mage::app()->getConfig();
|
| 235 |
+
$config->saveConfig('dev/translate_inline/active', $newStatus, 'stores', $forStore);
|
| 236 |
+
$config->saveConfig('dev/translate_inline/active_admin', $newStatus, 'stores', $forStore);
|
| 237 |
+
|
| 238 |
+
// Toggle translate cache too
|
| 239 |
+
$allTypes = Mage::app()->useCache();
|
| 240 |
+
$allTypes['translate'] = !$newStatus; // Cache off when translate is on
|
| 241 |
+
Mage::app()->saveUseCache($allTypes);
|
| 242 |
+
|
| 243 |
+
// clear cache
|
| 244 |
+
Mage::app()->cleanCache(array(Mage_Core_Model_Config::CACHE_TAG, Mage_Core_Model_Translate::CACHE_TAG));
|
| 245 |
+
|
| 246 |
+
Mage::getSingleton('core/session')->addSuccess('Translate inline set to ' . var_export($newStatus, true));
|
| 247 |
+
$this->_redirectReferer();
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
/**
|
| 251 |
+
* Turn on/off template hints
|
| 252 |
+
*
|
| 253 |
+
* @return void
|
| 254 |
+
*/
|
| 255 |
+
public function toggleTemplateHintsAction() {
|
| 256 |
+
$forStore = $this->getRequest()->getParam('store', 1);
|
| 257 |
+
|
| 258 |
+
$currentStatus = Mage::app()->getStore($forStore)->getConfig('dev/debug/template_hints');
|
| 259 |
+
$newStatus = !$currentStatus;
|
| 260 |
+
|
| 261 |
+
$config = Mage::getModel('core/config');
|
| 262 |
+
$config->saveConfig('dev/debug/template_hints', $newStatus, 'stores', $forStore);
|
| 263 |
+
$config->saveConfig('dev/debug/template_hints_blocks', $newStatus, 'stores', $forStore);
|
| 264 |
+
Mage::app()->cleanCache(array(Mage_Core_Model_Config::CACHE_TAG));
|
| 265 |
+
|
| 266 |
+
Mage::getSingleton('core/session')->addSuccess('Template hints set to ' . var_export($newStatus, true));
|
| 267 |
+
|
| 268 |
+
$this->_redirectReferer();
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
/**
|
| 272 |
+
* Turn on/off modules
|
| 273 |
+
*
|
| 274 |
+
* @return Olctw_Debug_IndexController|string
|
| 275 |
+
*/
|
| 276 |
+
public function toggleModuleStatusAction() {
|
| 277 |
+
$title = "Toggle Module Status";
|
| 278 |
+
$moduleName = $this->getRequest()->getParam('module');
|
| 279 |
+
if (!$moduleName) {
|
| 280 |
+
echo $this->_debugPanel($title, "Invalid module name supplied. ");
|
| 281 |
+
return;
|
| 282 |
+
}
|
| 283 |
+
$config = Mage::getConfig();
|
| 284 |
+
|
| 285 |
+
$moduleConfig = Mage::getConfig()->getModuleConfig($moduleName);
|
| 286 |
+
if (!$moduleConfig) {
|
| 287 |
+
echo $this->_debugPanel($title, "Unable to load supplied module. ");
|
| 288 |
+
return;
|
| 289 |
+
}
|
| 290 |
+
|
| 291 |
+
$moduleCurrentStatus = $moduleConfig->is('active');
|
| 292 |
+
$moduleNewStatus = !$moduleCurrentStatus;
|
| 293 |
+
$moduleConfigFile = $config->getOptions()->getEtcDir() . DS . 'modules' . DS . $moduleName . '.xml';
|
| 294 |
+
$configContent = file_get_contents($moduleConfigFile);
|
| 295 |
+
|
| 296 |
+
function strbool($value) {
|
| 297 |
+
return $value ? 'true' : 'false';
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
$contents = '<br/>Active status switched to ' . (string) $moduleNewStatus . ' for module {$moduleName} in file {$moduleConfigFile}:';
|
| 301 |
+
$contents .= '<br/><code>' . htmlspecialchars($configContent) . '</code>';
|
| 302 |
+
|
| 303 |
+
$configContent = str_replace('<active>' . (string) $moduleCurrentStatus . '</active>', '<active>' . (string) $moduleNewStatus . '</active>', $configContent);
|
| 304 |
+
|
| 305 |
+
if (file_put_contents($moduleConfigFile, $configContent) === FALSE) {
|
| 306 |
+
echo $this->_debugPanel($title, "Failed to write configuration. (Web Server's permissions for {$moduleConfigFile}?!)");
|
| 307 |
+
return $this;
|
| 308 |
+
}
|
| 309 |
+
|
| 310 |
+
Mage::helper('debug')->cleanCache();
|
| 311 |
+
|
| 312 |
+
$contents .= '<br/><code>' . htmlspecialchars($configContent) . '</code>';
|
| 313 |
+
$contents .= '<br/><br/><i>WARNING: This feature doesn\'t support usage of multiple frontends.</i>';
|
| 314 |
+
|
| 315 |
+
$this->getResponse()->setBody($this->_debugPanel($title, $contents));
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
/**
|
| 319 |
+
* Download config as XML file
|
| 320 |
+
*
|
| 321 |
+
* @return string
|
| 322 |
+
*/
|
| 323 |
+
public function downloadConfigAction() {
|
| 324 |
+
$this->getResponse()->setHeader('Content-type', 'text/xml', true);
|
| 325 |
+
$this->getResponse()->setBody(Mage::app()->getConfig()->getNode()->asXML());
|
| 326 |
+
}
|
| 327 |
+
|
| 328 |
+
/**
|
| 329 |
+
* Download config as text
|
| 330 |
+
*
|
| 331 |
+
* @return void
|
| 332 |
+
*/
|
| 333 |
+
public function downloadConfigAsTextAction() {
|
| 334 |
+
$items = array();
|
| 335 |
+
$configs = Mage::app()->getConfig()->getNode();
|
| 336 |
+
Olctw_Debug_Block_Config::xml2array($configs, $items);
|
| 337 |
+
|
| 338 |
+
$content = '';
|
| 339 |
+
foreach ($items as $key => $value) {
|
| 340 |
+
$content .= "$key = $value\n";
|
| 341 |
+
}
|
| 342 |
+
|
| 343 |
+
$this->getResponse()->setHeader('Content-type', 'text/plain', true);
|
| 344 |
+
$this->getResponse()->setBody($content);
|
| 345 |
+
}
|
| 346 |
+
|
| 347 |
+
/**
|
| 348 |
+
* Toggle Sql profiler
|
| 349 |
+
*
|
| 350 |
+
* @return void
|
| 351 |
+
*/
|
| 352 |
+
public function toggleSqlProfilerAction() {
|
| 353 |
+
$localConfigFile = Mage::getBaseDir('etc') . DS . 'local.xml';
|
| 354 |
+
$localConfigBackupFile = Mage::getBaseDir('etc') . DS . 'local-magneto.xml_';
|
| 355 |
+
|
| 356 |
+
$configContent = file_get_contents($localConfigFile);
|
| 357 |
+
$xml = new SimpleXMLElement($configContent);
|
| 358 |
+
|
| 359 |
+
if ((int) $xml->global->resources->default_setup->connection->profiler != 1) {
|
| 360 |
+
$xml->global->resources->default_setup->connection->addChild('profiler', 1);
|
| 361 |
+
} else {
|
| 362 |
+
unset($xml->global->resources->default_setup->connection->profiler);
|
| 363 |
+
}
|
| 364 |
+
|
| 365 |
+
// backup config file
|
| 366 |
+
if (file_put_contents($localConfigBackupFile, $configContent) === FALSE) {
|
| 367 |
+
Mage::getSingleton('core/session')->addError($this->__('Operation aborted: couldn\'t create backup for config file'));
|
| 368 |
+
$this->_redirectReferer();
|
| 369 |
+
}
|
| 370 |
+
|
| 371 |
+
if ($xml->saveXML($localConfigFile) === FALSE) {
|
| 372 |
+
Mage::getSingleton('core/session')->addError($this->__("Couldn't save {$localConfigFile}: check write permissions."));
|
| 373 |
+
$this->_redirectReferer();
|
| 374 |
+
}
|
| 375 |
+
Mage::getSingleton('core/session')->addSuccess($this->__('SQL profiler status changed in local.xml'));
|
| 376 |
+
|
| 377 |
+
// Assure config cache and all full page cache is emptied
|
| 378 |
+
Mage::app()->cleanCache();
|
| 379 |
+
$this->_redirectReferer();
|
| 380 |
+
}
|
| 381 |
+
|
| 382 |
+
/**
|
| 383 |
+
* Search grouped class
|
| 384 |
+
*
|
| 385 |
+
* @return void
|
| 386 |
+
*/
|
| 387 |
+
public function searchGroupedClassAction() {
|
| 388 |
+
if ($this->getRequest()->isPost()) {
|
| 389 |
+
$uri = $this->getRequest()->getPost('uri');
|
| 390 |
+
$groupType = $this->getRequest()->getPost('group');
|
| 391 |
+
|
| 392 |
+
if ($groupType == 'all') {
|
| 393 |
+
$groupTypes = array('model', 'block', 'helper');
|
| 394 |
+
} else {
|
| 395 |
+
$groupTypes = array($groupType);
|
| 396 |
+
}
|
| 397 |
+
|
| 398 |
+
$items = array();
|
| 399 |
+
|
| 400 |
+
if (!empty($uri)) {
|
| 401 |
+
foreach ($groupTypes as $type) {
|
| 402 |
+
$items[$type]['class'] = Mage::getConfig()->getGroupedClassName($type, $uri);
|
| 403 |
+
$items[$type]['filepath'] = mageFindClassFile($items[$type]['class']);
|
| 404 |
+
}
|
| 405 |
+
|
| 406 |
+
$block = $this->getLayout()->createBlock('debug/abstract');
|
| 407 |
+
$block->setTemplate('olctw_debug/groupedclasssearch.phtml');
|
| 408 |
+
$block->assign('items', $items);
|
| 409 |
+
$this->getResponse()->setBody($block->toHtml());
|
| 410 |
+
} else {
|
| 411 |
+
$this->getResponse()->setBody($this->__('Please fill in a search query'));
|
| 412 |
+
}
|
| 413 |
+
}
|
| 414 |
+
}
|
| 415 |
+
|
| 416 |
+
/**
|
| 417 |
+
* Seach config
|
| 418 |
+
*
|
| 419 |
+
* @return void
|
| 420 |
+
*/
|
| 421 |
+
public function searchConfigAction() {
|
| 422 |
+
if ($this->getRequest()->isPost()) {
|
| 423 |
+
$result['error'] = 0;
|
| 424 |
+
|
| 425 |
+
$query = $this->getRequest()->getPost('query');
|
| 426 |
+
|
| 427 |
+
if (!empty($query)) {
|
| 428 |
+
$configs = Mage::app()->getConfig()->getNode();
|
| 429 |
+
$configArray = array();
|
| 430 |
+
|
| 431 |
+
Olctw_Debug_Block_Config::xml2array($configs, $configArray);
|
| 432 |
+
$configKeys = array_keys($configArray);
|
| 433 |
+
|
| 434 |
+
$items = array();
|
| 435 |
+
|
| 436 |
+
foreach ($configKeys as $configKey) {
|
| 437 |
+
if (strpos($configKey, $query) !== FALSE) {
|
| 438 |
+
$items[$configKey] = $configArray[$configKey];
|
| 439 |
+
}
|
| 440 |
+
}
|
| 441 |
+
$block = $this->getLayout()->createBlock('debug/abstract');
|
| 442 |
+
$block->setTemplate('olctw_debug/configsearch.phtml');
|
| 443 |
+
$block->assign('items', $items);
|
| 444 |
+
$this->getResponse()->setBody($block->toHtml());
|
| 445 |
+
} else {
|
| 446 |
+
$result['error'] = 1;
|
| 447 |
+
$result['message'] = $this->__('Search query cannot be empty.');
|
| 448 |
+
}
|
| 449 |
+
}
|
| 450 |
+
}
|
| 451 |
+
|
| 452 |
+
/**
|
| 453 |
+
* Return last 100 lines of log file.
|
| 454 |
+
*
|
| 455 |
+
*/
|
| 456 |
+
public function viewLogAction() {
|
| 457 |
+
$file = $this->getRequest()->getParam('file');
|
| 458 |
+
|
| 459 |
+
if (!empty($file)) {
|
| 460 |
+
// Accept only specific files
|
| 461 |
+
if ($file == Mage::getStoreConfig('dev/log/file') || $file == Mage::getStoreConfig('dev/log/exception_file')) {
|
| 462 |
+
// TODO: Review this..
|
| 463 |
+
$result = Mage::helper('debug')->getLastRows(Mage::getBaseDir('var') . DS . 'log' . DS . $file, 10);
|
| 464 |
+
|
| 465 |
+
if (!is_array($result)) {
|
| 466 |
+
$result = array($result);
|
| 467 |
+
}
|
| 468 |
+
|
| 469 |
+
$block = $this->getLayout()->createBlock('debug/abstract');
|
| 470 |
+
$block->setTemplate('olctw_debug/logdetails.phtml');
|
| 471 |
+
$block->assign('title', 'Log details : ' . $file);
|
| 472 |
+
$block->assign('items', $result);
|
| 473 |
+
|
| 474 |
+
$this->getResponse()->setBody($block->toHtml());
|
| 475 |
+
} else {
|
| 476 |
+
$this->getResponse()->setHttpResponseCode(418)->setBody('I\'m a teapot.');
|
| 477 |
+
}
|
| 478 |
+
}
|
| 479 |
+
}
|
| 480 |
+
|
| 481 |
+
public function togglePageCacheDebugAction() {
|
| 482 |
+
$forStore = $this->getRequest()->getParam('store', 1);
|
| 483 |
+
|
| 484 |
+
if (class_exists('Enterprise_PageCache_Model_Processor')) {
|
| 485 |
+
$configPath = Enterprise_PageCache_Model_Processor::XML_PATH_CACHE_DEBUG;
|
| 486 |
+
$currentStatus = Mage::getStoreConfig($configPath);
|
| 487 |
+
|
| 488 |
+
$config = Mage::getModel('core/config');
|
| 489 |
+
$config->saveConfig($configPath, !$currentStatus, 'stores', $forStore);
|
| 490 |
+
Mage::getModel('core/cache')->flush();
|
| 491 |
+
|
| 492 |
+
$this->_redirectReferer();
|
| 493 |
+
}
|
| 494 |
+
}
|
| 495 |
+
|
| 496 |
+
}
|
app/code/community/Olctw/Debug/controllers/PreferencesController.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Olctw_Debug_PreferencesController extends Mage_Core_Controller_Front_Action {
|
| 4 |
+
|
| 5 |
+
public function updatePostAction() {
|
| 6 |
+
$request = $this->getRequest();
|
| 7 |
+
if ($request->isPost()) {
|
| 8 |
+
$form = $request->getPost();
|
| 9 |
+
|
| 10 |
+
/* @var $helper Olctw_Debug_Helper_Data */
|
| 11 |
+
$helper = Mage::helper('debug');
|
| 12 |
+
// $panels = $helper->getPanels();
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
$this->_redirectReferer();
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
}
|
app/code/community/Olctw/Debug/etc/config.xml
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Olctw_Debug>
|
| 5 |
+
<version>1.1.0</version>
|
| 6 |
+
</Olctw_Debug>
|
| 7 |
+
</modules>
|
| 8 |
+
<frontend>
|
| 9 |
+
<routers>
|
| 10 |
+
<debug>
|
| 11 |
+
<use>standard</use>
|
| 12 |
+
<args>
|
| 13 |
+
<module>Olctw_Debug</module>
|
| 14 |
+
<frontName>debug</frontName>
|
| 15 |
+
</args>
|
| 16 |
+
</debug>
|
| 17 |
+
</routers>
|
| 18 |
+
<layout>
|
| 19 |
+
<updates>
|
| 20 |
+
<olctw_debug_frontend_layout>
|
| 21 |
+
<file>olctw_debug/debug.xml</file>
|
| 22 |
+
</olctw_debug_frontend_layout>
|
| 23 |
+
</updates>
|
| 24 |
+
</layout>
|
| 25 |
+
</frontend>
|
| 26 |
+
<global>
|
| 27 |
+
<models>
|
| 28 |
+
<debug>
|
| 29 |
+
<class>Olctw_Debug_Model</class>
|
| 30 |
+
</debug>
|
| 31 |
+
</models>
|
| 32 |
+
<resources>
|
| 33 |
+
<debug_write>
|
| 34 |
+
<connection>
|
| 35 |
+
<use>core_write</use>
|
| 36 |
+
</connection>
|
| 37 |
+
</debug_write>
|
| 38 |
+
<debug_read>
|
| 39 |
+
<connection>
|
| 40 |
+
<use>core_read</use>
|
| 41 |
+
</connection>
|
| 42 |
+
</debug_read>
|
| 43 |
+
</resources>
|
| 44 |
+
<blocks>
|
| 45 |
+
<debug>
|
| 46 |
+
<class>Olctw_Debug_Block</class>
|
| 47 |
+
</debug>
|
| 48 |
+
</blocks>
|
| 49 |
+
<helpers>
|
| 50 |
+
<debug>
|
| 51 |
+
<class>Olctw_Debug_Helper</class>
|
| 52 |
+
</debug>
|
| 53 |
+
</helpers>
|
| 54 |
+
|
| 55 |
+
<events>
|
| 56 |
+
<controller_action_layout_generate_blocks_after>
|
| 57 |
+
<observers>
|
| 58 |
+
<olctw_debug_observer>
|
| 59 |
+
<type>singleton</type>
|
| 60 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 61 |
+
<method>onLayoutGenerate</method>
|
| 62 |
+
</olctw_debug_observer>
|
| 63 |
+
</observers>
|
| 64 |
+
</controller_action_layout_generate_blocks_after>
|
| 65 |
+
|
| 66 |
+
<core_block_abstract_to_html_before>
|
| 67 |
+
<observers>
|
| 68 |
+
<olctw_debug_observer>
|
| 69 |
+
<type>singleton</type>
|
| 70 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 71 |
+
<method>onBlockToHtml</method>
|
| 72 |
+
</olctw_debug_observer>
|
| 73 |
+
</observers>
|
| 74 |
+
</core_block_abstract_to_html_before>
|
| 75 |
+
|
| 76 |
+
<core_block_abstract_to_html_after>
|
| 77 |
+
<observers>
|
| 78 |
+
<olctw_debug_observer>
|
| 79 |
+
<type>singleton</type>
|
| 80 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 81 |
+
<method>onBlockToHtmlAfter</method>
|
| 82 |
+
</olctw_debug_observer>
|
| 83 |
+
</observers>
|
| 84 |
+
</core_block_abstract_to_html_after>
|
| 85 |
+
|
| 86 |
+
<controller_action_postdispatch>
|
| 87 |
+
<observers>
|
| 88 |
+
<olctw_debug_observer>
|
| 89 |
+
<type>singleton</type>
|
| 90 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 91 |
+
<method>onActionPostDispatch</method>
|
| 92 |
+
</olctw_debug_observer>
|
| 93 |
+
</observers>
|
| 94 |
+
</controller_action_postdispatch>
|
| 95 |
+
|
| 96 |
+
<core_collection_abstract_load_before>
|
| 97 |
+
<observers>
|
| 98 |
+
<olctw_debug_observer>
|
| 99 |
+
<type>singleton</type>
|
| 100 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 101 |
+
<method>onCollectionLoad</method>
|
| 102 |
+
</olctw_debug_observer>
|
| 103 |
+
</observers>
|
| 104 |
+
</core_collection_abstract_load_before>
|
| 105 |
+
|
| 106 |
+
<eav_collection_abstract_load_before>
|
| 107 |
+
<observers>
|
| 108 |
+
<olctw_debug_observer>
|
| 109 |
+
<type>singleton</type>
|
| 110 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 111 |
+
<method>onEavCollectionLoad</method>
|
| 112 |
+
</olctw_debug_observer>
|
| 113 |
+
</observers>
|
| 114 |
+
</eav_collection_abstract_load_before>
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
<!-- <core_block_abstract_prepare_layout_after> -->
|
| 118 |
+
<!-- <observers> -->
|
| 119 |
+
<!-- <olctw_debug_observer> -->
|
| 120 |
+
<!-- <type>singleton</type> -->
|
| 121 |
+
<!-- <class>Olctw_Debug_Model_Observer</class> -->
|
| 122 |
+
<!-- <method>onPrepareLayout</method> -->
|
| 123 |
+
<!-- </olctw_debug_observer> -->
|
| 124 |
+
<!-- </observers> -->
|
| 125 |
+
<!-- </core_block_abstract_prepare_layout_after> -->
|
| 126 |
+
|
| 127 |
+
<model_load_after>
|
| 128 |
+
<observers>
|
| 129 |
+
<olctw_debug_observer>
|
| 130 |
+
<type>singleton</type>
|
| 131 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 132 |
+
<method>onModelLoad</method>
|
| 133 |
+
</olctw_debug_observer>
|
| 134 |
+
</observers>
|
| 135 |
+
</model_load_after>
|
| 136 |
+
|
| 137 |
+
<controller_action_predispatch>
|
| 138 |
+
<observers>
|
| 139 |
+
<olctw_debug_observer>
|
| 140 |
+
<type>singleton</type>
|
| 141 |
+
<class>Olctw_Debug_Model_Observer</class>
|
| 142 |
+
<method>onActionPreDispatch</method>
|
| 143 |
+
</olctw_debug_observer>
|
| 144 |
+
</observers>
|
| 145 |
+
</controller_action_predispatch>
|
| 146 |
+
</events>
|
| 147 |
+
</global>
|
| 148 |
+
|
| 149 |
+
<default>
|
| 150 |
+
<debug>
|
| 151 |
+
<options>
|
| 152 |
+
<enable>1</enable>
|
| 153 |
+
<debug_panel_versions_visibility>1</debug_panel_versions_visibility>
|
| 154 |
+
<debug_panel_performance_visibility>1</debug_panel_performance_visibility>
|
| 155 |
+
<debug_panel_configuration_visibility>1</debug_panel_configuration_visibility>
|
| 156 |
+
<debug_panel_blocks_visibility>1</debug_panel_blocks_visibility>
|
| 157 |
+
<debug_panel_layout_visibility>1</debug_panel_layout_visibility>
|
| 158 |
+
<debug_panel_controller_visibility>1</debug_panel_controller_visibility>
|
| 159 |
+
<debug_panel_models_visibility>1</debug_panel_models_visibility>
|
| 160 |
+
<debug_panel_utilities_visibility>1</debug_panel_utilities_visibility>
|
| 161 |
+
<debug_panel_preferences_visibility>1</debug_panel_preferences_visibility>
|
| 162 |
+
<debug_panel_logs_visibility>1</debug_panel_logs_visibility>
|
| 163 |
+
</options>
|
| 164 |
+
</debug>
|
| 165 |
+
</default>
|
| 166 |
+
|
| 167 |
+
<adminhtml>
|
| 168 |
+
<acl>
|
| 169 |
+
<resources>
|
| 170 |
+
<admin>
|
| 171 |
+
<children>
|
| 172 |
+
<debug>
|
| 173 |
+
<title>Debug Toolbar</title>
|
| 174 |
+
<sort_order>10</sort_order>
|
| 175 |
+
</debug>
|
| 176 |
+
<system>
|
| 177 |
+
<children>
|
| 178 |
+
<config>
|
| 179 |
+
<children>
|
| 180 |
+
<debug>Debug Toolbar Options</debug>
|
| 181 |
+
</children>
|
| 182 |
+
</config>
|
| 183 |
+
</children>
|
| 184 |
+
</system>
|
| 185 |
+
</children>
|
| 186 |
+
</admin>
|
| 187 |
+
</resources>
|
| 188 |
+
</acl>
|
| 189 |
+
<layout>
|
| 190 |
+
<updates>
|
| 191 |
+
<olctw_debug_admin_layout>
|
| 192 |
+
<file>olctw_debug/debug.xml</file>
|
| 193 |
+
</olctw_debug_admin_layout>
|
| 194 |
+
</updates>
|
| 195 |
+
</layout>
|
| 196 |
+
</adminhtml>
|
| 197 |
+
</config>
|
app/code/community/Olctw/Debug/etc/system.xml
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<config>
|
| 2 |
+
<sections>
|
| 3 |
+
<debug translate="label" module="debug">
|
| 4 |
+
<label>Debug Toolbar</label>
|
| 5 |
+
<tab>advanced</tab>
|
| 6 |
+
<sort_order>100</sort_order>
|
| 7 |
+
<show_in_default>1</show_in_default>
|
| 8 |
+
<show_in_website>1</show_in_website>
|
| 9 |
+
<show_in_store>1</show_in_store>
|
| 10 |
+
|
| 11 |
+
<groups>
|
| 12 |
+
<options translate="label">
|
| 13 |
+
<label>Debug Toolbar Options</label>
|
| 14 |
+
<sort_order>100</sort_order>
|
| 15 |
+
<show_in_default>1</show_in_default>
|
| 16 |
+
<show_in_website>1</show_in_website>
|
| 17 |
+
<show_in_store>1</show_in_store>
|
| 18 |
+
<expanded>1</expanded>
|
| 19 |
+
<fields>
|
| 20 |
+
<enable>
|
| 21 |
+
<label>Enable Debug Toolbar</label>
|
| 22 |
+
<frontend_type>select</frontend_type>
|
| 23 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 24 |
+
<sort_order>1</sort_order>
|
| 25 |
+
<show_in_default>1</show_in_default>
|
| 26 |
+
<show_in_website>1</show_in_website>
|
| 27 |
+
<show_in_store>1</show_in_store>
|
| 28 |
+
<comment><![CDATA[Display Debug Toolbar if set to Yes and client's ip is whitelisted in
|
| 29 |
+
System / Configuration / Developer / Developer Client Restrictions - Allowed IPS.]]>
|
| 30 |
+
</comment>
|
| 31 |
+
<sort_order>0</sort_order>
|
| 32 |
+
</enable>
|
| 33 |
+
|
| 34 |
+
<debug_panel_versions_visibility>
|
| 35 |
+
<label>Show Versions Panel</label>
|
| 36 |
+
<frontend_type>select</frontend_type>
|
| 37 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 38 |
+
<sort_order>1</sort_order>
|
| 39 |
+
<show_in_default>1</show_in_default>
|
| 40 |
+
<show_in_website>1</show_in_website>
|
| 41 |
+
<show_in_store>1</show_in_store>
|
| 42 |
+
<sort_order>1</sort_order>
|
| 43 |
+
</debug_panel_versions_visibility>
|
| 44 |
+
|
| 45 |
+
<debug_panel_performance_visibility>
|
| 46 |
+
<label>Show Performance Panel</label>
|
| 47 |
+
<frontend_type>select</frontend_type>
|
| 48 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 49 |
+
<sort_order>1</sort_order>
|
| 50 |
+
<show_in_default>1</show_in_default>
|
| 51 |
+
<show_in_website>1</show_in_website>
|
| 52 |
+
<show_in_store>1</show_in_store>
|
| 53 |
+
<sort_order>2</sort_order>
|
| 54 |
+
</debug_panel_performance_visibility>
|
| 55 |
+
|
| 56 |
+
<debug_panel_configuration_visibility>
|
| 57 |
+
<label>Show Configuration Panel</label>
|
| 58 |
+
<frontend_type>select</frontend_type>
|
| 59 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 60 |
+
<sort_order>1</sort_order>
|
| 61 |
+
<show_in_default>1</show_in_default>
|
| 62 |
+
<show_in_website>1</show_in_website>
|
| 63 |
+
<show_in_store>1</show_in_store>
|
| 64 |
+
<sort_order>3</sort_order>
|
| 65 |
+
</debug_panel_configuration_visibility>
|
| 66 |
+
|
| 67 |
+
<debug_panel_controller_visibility>
|
| 68 |
+
<label>Show Controller Panel</label>
|
| 69 |
+
<frontend_type>select</frontend_type>
|
| 70 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 71 |
+
<sort_order>1</sort_order>
|
| 72 |
+
<show_in_default>1</show_in_default>
|
| 73 |
+
<show_in_website>1</show_in_website>
|
| 74 |
+
<show_in_store>1</show_in_store>
|
| 75 |
+
<sort_order>4</sort_order>
|
| 76 |
+
</debug_panel_controller_visibility>
|
| 77 |
+
|
| 78 |
+
<debug_panel_models_visibility>
|
| 79 |
+
<label>Show Models Panel</label>
|
| 80 |
+
<frontend_type>select</frontend_type>
|
| 81 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 82 |
+
<sort_order>1</sort_order>
|
| 83 |
+
<show_in_default>1</show_in_default>
|
| 84 |
+
<show_in_website>1</show_in_website>
|
| 85 |
+
<show_in_store>1</show_in_store>
|
| 86 |
+
<sort_order>5</sort_order>
|
| 87 |
+
</debug_panel_models_visibility>
|
| 88 |
+
|
| 89 |
+
<debug_panel_layout_visibility>
|
| 90 |
+
<label>Show Layout Panel</label>
|
| 91 |
+
<frontend_type>select</frontend_type>
|
| 92 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 93 |
+
<sort_order>1</sort_order>
|
| 94 |
+
<show_in_default>1</show_in_default>
|
| 95 |
+
<show_in_website>1</show_in_website>
|
| 96 |
+
<show_in_store>1</show_in_store>
|
| 97 |
+
<sort_order>6</sort_order>
|
| 98 |
+
</debug_panel_layout_visibility>
|
| 99 |
+
|
| 100 |
+
<debug_panel_blocks_visibility>
|
| 101 |
+
<label>Show Blocks Panel</label>
|
| 102 |
+
<frontend_type>select</frontend_type>
|
| 103 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 104 |
+
<sort_order>1</sort_order>
|
| 105 |
+
<show_in_default>1</show_in_default>
|
| 106 |
+
<show_in_website>1</show_in_website>
|
| 107 |
+
<show_in_store>1</show_in_store>
|
| 108 |
+
<sort_order>7</sort_order>
|
| 109 |
+
</debug_panel_blocks_visibility>
|
| 110 |
+
|
| 111 |
+
<debug_panel_logs_visibility>
|
| 112 |
+
<label>Show Logs Panel</label>
|
| 113 |
+
<frontend_type>select</frontend_type>
|
| 114 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 115 |
+
<sort_order>1</sort_order>
|
| 116 |
+
<show_in_default>1</show_in_default>
|
| 117 |
+
<show_in_website>1</show_in_website>
|
| 118 |
+
<show_in_store>1</show_in_store>
|
| 119 |
+
<sort_order>8</sort_order>
|
| 120 |
+
</debug_panel_logs_visibility>
|
| 121 |
+
</fields>
|
| 122 |
+
</options>
|
| 123 |
+
</groups>
|
| 124 |
+
</debug>
|
| 125 |
+
</sections>
|
| 126 |
+
</config>
|
| 127 |
+
|
app/design/adminhtml/default/default/layout/olctw_debug/debug.xml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout version="0.1.1">
|
| 3 |
+
<default>
|
| 4 |
+
<reference name="before_body_end">
|
| 5 |
+
<block type="debug/debug" name="olctw_debug_panels" template="olctw_debug/debug.phtml">
|
| 6 |
+
<block type="debug/versions" name="olctw_debug_versions_panel" template="olctw_debug/versions.phtml"/>
|
| 7 |
+
<block type="debug/config" name="olctw_debug_config_panel" template="olctw_debug/config.phtml"/>
|
| 8 |
+
<block type="debug/blocks" name="olctw_debug_blocks_panel" template="olctw_debug/blocks.phtml"/>
|
| 9 |
+
<block type="debug/controller" name="olctw_debug_controller_panel" template="olctw_debug/controller.phtml"/>
|
| 10 |
+
<block type="debug/models" name="olctw_debug_models_panel" template="olctw_debug/models.phtml"/>
|
| 11 |
+
<block type="debug/layout" name="olctw_debug_layout_panel" template="olctw_debug/layout.phtml"/>
|
| 12 |
+
<block type="debug/abstract" name="olctw_debug_performance_panel" template="olctw_debug/performance.phtml"/>
|
| 13 |
+
<block type="debug/abstract" name="olctw_debug_utils_panel" template="olctw_debug/utils.phtml"/>
|
| 14 |
+
<block type="debug/abstract" name="olctw_debug_logs_panel" template="olctw_debug/logs.phtml"/>
|
| 15 |
+
|
| 16 |
+
<!-- Preferences panel is not implemented yet -->
|
| 17 |
+
<!--<block type="debug/preferences" name="olctw_debug_preferences_panel" template="olctw_debug/preferences.phtml"/>-->
|
| 18 |
+
</block>
|
| 19 |
+
</reference>
|
| 20 |
+
</default>
|
| 21 |
+
</layout>
|
app/design/adminhtml/default/default/template/olctw_debug/arrayformat.phtml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $title ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
|
| 6 |
+
<div class="djDebugPanelContent">
|
| 7 |
+
<div class="scroll">
|
| 8 |
+
<dl>
|
| 9 |
+
<dt><?php echo $this->__("Executed SQL") ?></dt>
|
| 10 |
+
<dd><?php echo htmlspecialchars($query); ?></dd>
|
| 11 |
+
</dl>
|
| 12 |
+
|
| 13 |
+
<table class="djSqlExplain">
|
| 14 |
+
<thead>
|
| 15 |
+
<tr>
|
| 16 |
+
<?php foreach ($headers as $header): ?>
|
| 17 |
+
<th><?php echo htmlspecialchars($header); ?></th>
|
| 18 |
+
<?php endforeach; ?>
|
| 19 |
+
</tr>
|
| 20 |
+
</thead>
|
| 21 |
+
<tbody>
|
| 22 |
+
<?php $row = 0; ?>
|
| 23 |
+
<?php foreach ($items as $row): ?>
|
| 24 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 25 |
+
<?php foreach ($row as $key => $value): ?>
|
| 26 |
+
<td><?php echo htmlspecialchars($value); ?></td>
|
| 27 |
+
<?php endforeach; ?>
|
| 28 |
+
</tr>
|
| 29 |
+
<?php endforeach; ?>
|
| 30 |
+
</tbody>
|
| 31 |
+
</table>
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
| 34 |
+
|
app/design/adminhtml/default/default/template/olctw_debug/blocks.phtml
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Blocks */
|
| 3 |
+
|
| 4 |
+
$templateDirs = $this->getTemplateDirs();
|
| 5 |
+
$blocks = $this->getItems();
|
| 6 |
+
$layoutBlocks = $this->getLayoutBlocks();
|
| 7 |
+
?>
|
| 8 |
+
|
| 9 |
+
<h4><?php echo $this->__('Template path') ?></h4>
|
| 10 |
+
<?php if ($templateDirs): ?>
|
| 11 |
+
<ol>
|
| 12 |
+
<?php foreach ($templateDirs as $template): ?>
|
| 13 |
+
<li><?php echo $template; ?></li>
|
| 14 |
+
</ol>
|
| 15 |
+
<?php endforeach; ?>
|
| 16 |
+
<?php else: ?>
|
| 17 |
+
<p>None</p>
|
| 18 |
+
<?php endif; ?>
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
<h4><?php echo $this->__('Rendered Blocks') ?></h4>
|
| 22 |
+
<p>List of all rendered blocks.</p>
|
| 23 |
+
<table>
|
| 24 |
+
<thead>
|
| 25 |
+
<tr>
|
| 26 |
+
<th>#</th>
|
| 27 |
+
<th><?php echo $this->__('name in layout') ?></th>
|
| 28 |
+
<th><?php echo $this->__('block class') ?></th>
|
| 29 |
+
<th><?php echo $this->__('template') ?></th>
|
| 30 |
+
<th><?php echo $this->__('rendering in') ?></th>
|
| 31 |
+
</tr>
|
| 32 |
+
</thead>
|
| 33 |
+
<tbody>
|
| 34 |
+
<?php $row = 0; ?>
|
| 35 |
+
<?php foreach ($blocks as $block): ?>
|
| 36 |
+
<tr class="<?php echo ( ($row % 2 ? 'djdebugodd' : 'djdebugeven')) ?>">
|
| 37 |
+
<td><?php echo $row ?></td>
|
| 38 |
+
<td><?php echo $block['layout_name'] ?></td>
|
| 39 |
+
<td>
|
| 40 |
+
<a href="<?php echo $this->getViewBlockUrl($block['class']) ?>"
|
| 41 |
+
class="remoteCall"><?php echo $block['class'] ?></a>
|
| 42 |
+
</td>
|
| 43 |
+
<td>
|
| 44 |
+
<?php if ($block['template']): ?>
|
| 45 |
+
<a href="<?php echo $this->getViewTemplateUrl($block['template']) ?>"
|
| 46 |
+
class="remoteCall toggletemplate"><?php echo $block['template'] ?></a>
|
| 47 |
+
<?php endif; ?>
|
| 48 |
+
</td>
|
| 49 |
+
<td>
|
| 50 |
+
<?php echo $this->getRenderingTime($block) ?>
|
| 51 |
+
</td>
|
| 52 |
+
</tr>
|
| 53 |
+
<?php $row++; ?>
|
| 54 |
+
<?php endforeach ?>
|
| 55 |
+
</tbody>
|
| 56 |
+
</table>
|
| 57 |
+
|
| 58 |
+
<h4><?php echo $this->__('Layout Blocks') ?></h4>
|
| 59 |
+
<p>List of all instantiated blocks, few of them might not be rendered.</p>
|
| 60 |
+
<table>
|
| 61 |
+
<thead>
|
| 62 |
+
<tr>
|
| 63 |
+
<th>#</th>
|
| 64 |
+
<th><?php echo $this->__('name in layout') ?></th>
|
| 65 |
+
<th><?php echo $this->__('block class') ?></th>
|
| 66 |
+
<th><?php echo $this->__('template') ?></th>
|
| 67 |
+
</tr>
|
| 68 |
+
</thead>
|
| 69 |
+
<tbody>
|
| 70 |
+
<?php $row = 0; ?>
|
| 71 |
+
<?php foreach ($layoutBlocks as $block): ?>
|
| 72 |
+
<tr class="<?php echo ( ($row % 2 ? 'djdebugodd' : 'djdebugeven')) ?>">
|
| 73 |
+
<td><?php echo $row ?></td>
|
| 74 |
+
<td><?php echo $block['layout_name'] ?></td>
|
| 75 |
+
<td>
|
| 76 |
+
<a href="<?php echo $this->getViewBlockUrl($block['class']) ?>"
|
| 77 |
+
class="remoteCall"><?php echo $block['class'] ?></a>
|
| 78 |
+
</td>
|
| 79 |
+
<td>
|
| 80 |
+
<?php if ($block['template']): ?>
|
| 81 |
+
<a href="<?php echo $this->getViewTemplateUrl($block['template']) ?>"
|
| 82 |
+
class="remoteCall toggletemplate"><?php echo $block['template'] ?></a>
|
| 83 |
+
<?php endif; ?>
|
| 84 |
+
</td>
|
| 85 |
+
</tr>
|
| 86 |
+
<?php $row++; ?>
|
| 87 |
+
<?php endforeach ?>
|
| 88 |
+
</tbody>
|
| 89 |
+
</table>
|
app/design/adminhtml/default/default/template/olctw_debug/config.phtml
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php /* @var $this Magneto_Debug_Block_Config */ ?>
|
| 2 |
+
<dl>
|
| 3 |
+
<dt><strong>
|
| 4 |
+
<a class="toggleTemplate" href="<?php echo $this->getToggleHintsUrl() ?>">
|
| 5 |
+
<?php echo $this->__('Toggle Template Hints') ?>
|
| 6 |
+
</a>
|
| 7 |
+
<a class="toggleTemplate" href="<?php echo $this->getToggleTranslateHintsUrl() ?>">
|
| 8 |
+
<?php echo $this->__('Toggle Translate Inline') ?>
|
| 9 |
+
</a>
|
| 10 |
+
<?php if ($this->hasFullPageCache()): ?>
|
| 11 |
+
<a class="toggleTemplate" href="<?php echo $this->getFullPageDebugUrl() ?>">
|
| 12 |
+
<?php echo $this->__('Toggle FPC Debug') ?>
|
| 13 |
+
</a>
|
| 14 |
+
<?php endif ?>
|
| 15 |
+
</strong></dt>
|
| 16 |
+
</dl>
|
| 17 |
+
<dl>
|
| 18 |
+
<dt><strong>
|
| 19 |
+
<a class="toggleTemplate" href="<?php echo $this->getDownloadConfigUrl() ?>" target="_blank">Download Config (XML)</a>
|
| 20 |
+
</strong>
|
| 21 |
+
<strong>
|
| 22 |
+
<a class="toggleTemplate" href="<?php echo $this->getDownloadConfigAsTextUrl() ?>" target="_blank">Download Config (TEXT)</a>
|
| 23 |
+
</strong></dt>
|
| 24 |
+
</dl>
|
| 25 |
+
<br/>
|
| 26 |
+
|
| 27 |
+
<form action="#" id="config-search-form" onSubmit="handlerFunction(); return false;">
|
| 28 |
+
<input name="query" class="input-text required-entry" type="search" size="40" />
|
| 29 |
+
<input type="button" onClick="handlerFunction()" value="<?php echo $this->__('Search Config') ?>" />
|
| 30 |
+
</form>
|
| 31 |
+
<p>
|
| 32 |
+
Search examples: <em>default/system</em>, <em>global/resources/default_setup</em>, <em>frontend/events</em> or <em>modules</em>. If you don't know what to search check all the <a class="toggleTemplate" href="<?php echo $this->getDownloadConfigAsTextUrl() ?>" target="_blank">configuration keys</a>.
|
| 33 |
+
</p>
|
| 34 |
+
|
| 35 |
+
<script type="text/javascript">
|
| 36 |
+
function handlerFunction(){
|
| 37 |
+
var request = new Ajax.Updater(
|
| 38 |
+
'config-search-results',
|
| 39 |
+
'<?php echo $this->getSearchConfigUrl() ?>',
|
| 40 |
+
{
|
| 41 |
+
method: 'post',
|
| 42 |
+
parameters: Form.serialize($('config-search-form'))
|
| 43 |
+
});
|
| 44 |
+
}
|
| 45 |
+
</script>
|
| 46 |
+
<div id="config-search-results">
|
| 47 |
+
<table>
|
| 48 |
+
<thead>
|
| 49 |
+
<tr>
|
| 50 |
+
<th><?php echo $this->__("#") ?></th>
|
| 51 |
+
<th><?php echo $this->__("Config") ?></th>
|
| 52 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 53 |
+
</tr>
|
| 54 |
+
</thead>
|
| 55 |
+
<tbody>
|
| 56 |
+
</tbody>
|
| 57 |
+
</table>
|
| 58 |
+
</div>
|
app/design/adminhtml/default/default/template/olctw_debug/configsearch.phtml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<table>
|
| 2 |
+
<thead>
|
| 3 |
+
<tr>
|
| 4 |
+
<th><?php echo $this->__("#") ?></th>
|
| 5 |
+
<th><?php echo $this->__("Config") ?></th>
|
| 6 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 7 |
+
</tr>
|
| 8 |
+
</thead>
|
| 9 |
+
<tbody>
|
| 10 |
+
<div id="config-search-results">
|
| 11 |
+
<?php if (count($items)): ?>
|
| 12 |
+
<?php $row = 0 ?>
|
| 13 |
+
<?php foreach ($items as $key => $value): ?>
|
| 14 |
+
<tr>
|
| 15 |
+
<td><?php echo $row ?></td>
|
| 16 |
+
<td><?php echo $key ?></td>
|
| 17 |
+
<td><?php echo htmlspecialchars($value) ?></td>
|
| 18 |
+
</tr>
|
| 19 |
+
<?php $row++ ?>
|
| 20 |
+
<?php endforeach; ?>
|
| 21 |
+
<?php else: ?>
|
| 22 |
+
<tr><td colspan="3">Configurations not found for this query.</td></tr>
|
| 23 |
+
<?php endif; ?>
|
| 24 |
+
</div>
|
| 25 |
+
</tbody>
|
| 26 |
+
</table>
|
app/design/adminhtml/default/default/template/olctw_debug/controller.phtml
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$controller = Mage::registry('controller');
|
| 3 |
+
$request = $controller->getRequest();
|
| 4 |
+
$cookies = $_COOKIE;
|
| 5 |
+
$session = Mage::getSingleton('core/session');
|
| 6 |
+
?>
|
| 7 |
+
<h4><?php $this->__('Controller information') ?></h4>
|
| 8 |
+
<table>
|
| 9 |
+
<thead>
|
| 10 |
+
<tr>
|
| 11 |
+
<th><?php echo $this->__('Variable') ?></th>
|
| 12 |
+
<th><?php echo $this->__('Value') ?></th>
|
| 13 |
+
</tr>
|
| 14 |
+
</thead>
|
| 15 |
+
<tbody>
|
| 16 |
+
<tr class="djDebugOdd">
|
| 17 |
+
<td><?php echo $this->__('Route Name') ?></td>
|
| 18 |
+
<td><?php echo $request->getRouteName() ?></td>
|
| 19 |
+
</tr>
|
| 20 |
+
<tr class="djDebugEven">
|
| 21 |
+
<td><?php echo $this->__('Controller Module/Name') ?></td>
|
| 22 |
+
<td><?php echo $request->getControllerModule() ?> / <?php echo $request->getControllerName() ?></td>
|
| 23 |
+
</tr>
|
| 24 |
+
<tr class="djDebugOdd">
|
| 25 |
+
<td><?php echo $this->__('Action Name') ?></td>
|
| 26 |
+
<td><?php echo $request->getActionName() ?></td>
|
| 27 |
+
</tr>
|
| 28 |
+
<tr class="djDebugEven">
|
| 29 |
+
<td><?php echo $this->__('Request Path') ?></td>
|
| 30 |
+
<td><?php echo $request->getPathInfo() ?></td>
|
| 31 |
+
</tr>
|
| 32 |
+
</tbody>
|
| 33 |
+
</table>
|
| 34 |
+
|
| 35 |
+
<h4><?php echo $this->__('COOKIES Variables') ?></h4>
|
| 36 |
+
<?php if ($cookies): ?>
|
| 37 |
+
<table>
|
| 38 |
+
<colgroup>
|
| 39 |
+
<col style="width:20%"/>
|
| 40 |
+
<col/>
|
| 41 |
+
</colgroup>
|
| 42 |
+
<thead>
|
| 43 |
+
<tr>
|
| 44 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 45 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 46 |
+
</tr>
|
| 47 |
+
</thead>
|
| 48 |
+
<tbody>
|
| 49 |
+
<?php $row = 0; ?>
|
| 50 |
+
<?php foreach ($cookies as $key => $value): ?>
|
| 51 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 52 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 53 |
+
<td><?php echo htmlspecialchars($value) ?></td>
|
| 54 |
+
</tr>
|
| 55 |
+
<?php $row++; ?>
|
| 56 |
+
<?php endforeach ?>
|
| 57 |
+
</tbody>
|
| 58 |
+
</table>
|
| 59 |
+
<?php else: ?>
|
| 60 |
+
<p><?php echo $this->__("No COOKIE data") ?></p>
|
| 61 |
+
<?php endif ?>
|
| 62 |
+
|
| 63 |
+
<h4><?php echo $this->__('SESSION Variables') ?></h4>
|
| 64 |
+
<?php if (count($_SESSION)): ?>
|
| 65 |
+
<table>
|
| 66 |
+
<colgroup>
|
| 67 |
+
<col style="width:20%"/>
|
| 68 |
+
<col/>
|
| 69 |
+
</colgroup>
|
| 70 |
+
<thead>
|
| 71 |
+
<tr>
|
| 72 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 73 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 74 |
+
</tr>
|
| 75 |
+
</thead>
|
| 76 |
+
<?php foreach ($_SESSION as $namespace => $data): ?>
|
| 77 |
+
<tbody>
|
| 78 |
+
<tr><th colspan="2" style="text-align: center; font-size: 120%; font-weight: bold;"><?php echo $namespace ?></th></tr>
|
| 79 |
+
<?php $row = 0; ?>
|
| 80 |
+
<?php foreach ($data as $key => $value): ?>
|
| 81 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 82 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 83 |
+
<td>
|
| 84 |
+
<?php if (is_array($value)): ?>
|
| 85 |
+
<?php foreach ($value as $key => $_value): ?>
|
| 86 |
+
<?php echo $key . ' => ' . $this->escapeHtml(json_encode($_value)); ?><br/>
|
| 87 |
+
<?php endforeach; ?>
|
| 88 |
+
<?php elseif (is_object($value)): ?>
|
| 89 |
+
<?php echo get_class($value) ?>
|
| 90 |
+
<?php else: ?>
|
| 91 |
+
<?php echo htmlspecialchars($value) ?>
|
| 92 |
+
<?php endif ?>
|
| 93 |
+
</td>
|
| 94 |
+
</tr>
|
| 95 |
+
<?php $row++; ?>
|
| 96 |
+
<?php endforeach; ?>
|
| 97 |
+
</tbody>
|
| 98 |
+
<?php endforeach; ?>
|
| 99 |
+
</table>
|
| 100 |
+
<?php else: ?>
|
| 101 |
+
<p><?php echo $this->__("No SESSION data") ?></p>
|
| 102 |
+
<?php endif ?>
|
| 103 |
+
|
| 104 |
+
<h4><?php echo $this->__("GET Variables") ?></h4>
|
| 105 |
+
<?php if ($_GET): ?>
|
| 106 |
+
<table>
|
| 107 |
+
<thead>
|
| 108 |
+
<tr>
|
| 109 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 110 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 111 |
+
</tr>
|
| 112 |
+
</thead>
|
| 113 |
+
<tbody>
|
| 114 |
+
<?php $row = 0; ?>
|
| 115 |
+
<?php foreach ($_GET as $key => $value): ?>
|
| 116 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 117 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 118 |
+
<td><?php echo htmlspecialchars(var_export($value, true)) ?></td>
|
| 119 |
+
</tr>
|
| 120 |
+
<?php endforeach; ?>
|
| 121 |
+
</tbody>
|
| 122 |
+
</table>
|
| 123 |
+
<?php else: ?>
|
| 124 |
+
<p><?php echo $this->__("No GET data") ?></p>
|
| 125 |
+
<?php endif ?>
|
| 126 |
+
|
| 127 |
+
<h4><?php echo $this->__("POST Variables") ?></h4>
|
| 128 |
+
<?php if ($_POST): ?>
|
| 129 |
+
<table>
|
| 130 |
+
<thead>
|
| 131 |
+
<tr>
|
| 132 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 133 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 134 |
+
</tr>
|
| 135 |
+
</thead>
|
| 136 |
+
<tbody>
|
| 137 |
+
<?php $row = 0; ?>
|
| 138 |
+
<?php foreach ($_POST as $key => $value): ?>
|
| 139 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 140 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 141 |
+
<td><?php echo htmlspecialchars(var_export($value, true)) ?></td>
|
| 142 |
+
</tr>
|
| 143 |
+
<?php endforeach; ?>
|
| 144 |
+
</tbody>
|
| 145 |
+
</table>
|
| 146 |
+
<?php else: ?>
|
| 147 |
+
<p><?php echo $this->__("No POST data") ?></p>
|
| 148 |
+
<?php endif ?>
|
app/design/adminhtml/default/default/template/olctw_debug/debug.phtml
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Debug */
|
| 3 |
+
$panels = $this->getVisiblePanels();
|
| 4 |
+
?>
|
| 5 |
+
<style type="text/css">@media print { #djDebug {display:none;}}</style>
|
| 6 |
+
<script type="text/javascript">
|
| 7 |
+
// <![CDATA[
|
| 8 |
+
var DEBUG_TOOLBAR_MEDIA_URL = "<?php echo $this->getDebugMediaUrl(); ?>";
|
| 9 |
+
// ]]>
|
| 10 |
+
</script>
|
| 11 |
+
<script type="text/javascript" src="<?php echo $this->getDebugMediaUrl(); ?>js/toolbar.js"></script>
|
| 12 |
+
<div id="djDebug" style="display:none;">
|
| 13 |
+
<div style="display:none;" id="djDebugToolbar">
|
| 14 |
+
<ul id="djDebugPanelList">
|
| 15 |
+
<?php if ($panels): ?>
|
| 16 |
+
<li><a id="djHideToolBarButton" href="#" title="<?php echo $this->__("Hide Toolbar"); ?>"><?php echo $this->__("Hide") ?> »</a></li>
|
| 17 |
+
<?php else: ?>
|
| 18 |
+
<li id="djDebugButton">DEBUG</li>
|
| 19 |
+
<?php endif; ?>
|
| 20 |
+
<?php foreach ($panels as $panel): ?>
|
| 21 |
+
<li>
|
| 22 |
+
<?php if ($panel['has_content']): ?>
|
| 23 |
+
<a href="<?php echo $panel['url'] ? $panel['url'] : "#" ?>" title="<?php echo $panel['title']; ?>" class="<?php echo $panel['dom_id'] ?>">
|
| 24 |
+
<?php else: ?>
|
| 25 |
+
<div class="contentless">
|
| 26 |
+
<?php endif; ?>
|
| 27 |
+
<?php echo $panel['nav_title']; ?>
|
| 28 |
+
<?php if ($panel['nav_subtitle']): ?>
|
| 29 |
+
<br /><small><?php echo $panel['nav_subtitle']; ?></small>
|
| 30 |
+
<?php endif; ?>
|
| 31 |
+
<?php if ($panel['has_content']): ?>
|
| 32 |
+
</a>
|
| 33 |
+
<?php else: ?>
|
| 34 |
+
</div>
|
| 35 |
+
<?php endif; ?>
|
| 36 |
+
</li>
|
| 37 |
+
<?php endforeach; ?>
|
| 38 |
+
<li>
|
| 39 |
+
<a href="#" class="">About
|
| 40 |
+
<br/><small>Version <?php echo $this->getVersion() ?></a></small>
|
| 41 |
+
</a>
|
| 42 |
+
</li>
|
| 43 |
+
</ul>
|
| 44 |
+
</div>
|
| 45 |
+
<div style="display:none;" id="djDebugToolbarHandle">
|
| 46 |
+
<a title="<?php echo $this->__("Show Toolbar"); ?>" id="djShowToolBarButton" href="#">«</a>
|
| 47 |
+
</div>
|
| 48 |
+
<?php foreach ($panels as $panel): ?>
|
| 49 |
+
<?php if ($panel['has_content']): ?>
|
| 50 |
+
<div id="<?php echo $panel['dom_id'] ?>" class="panelContent">
|
| 51 |
+
<div class="djDebugPanelTitle">
|
| 52 |
+
<a href="" class="djDebugClose"><?php echo $this->__("Close"); ?></a>
|
| 53 |
+
<h3><?php echo $panel['title'] ?></h3>
|
| 54 |
+
</div>
|
| 55 |
+
<div class="djDebugPanelContent">
|
| 56 |
+
<div class="scroll">
|
| 57 |
+
<?php echo $this->getChildHtml($panel['template']) ?>
|
| 58 |
+
</div>
|
| 59 |
+
</div>
|
| 60 |
+
</div>
|
| 61 |
+
<?php endif; ?>
|
| 62 |
+
|
| 63 |
+
<?php endforeach; ?>
|
| 64 |
+
<div id="djDebugWindow" class="panelContent"></div>
|
| 65 |
+
</div>
|
app/design/adminhtml/default/default/template/olctw_debug/groupedclasssearch.phtml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<table>
|
| 2 |
+
<thead>
|
| 3 |
+
<tr>
|
| 4 |
+
<th><?php echo $this->__('#') ?></th>
|
| 5 |
+
<th><?php echo $this->__('Group Type') ?></th>
|
| 6 |
+
<th><?php echo $this->__('Search Results') ?></th>
|
| 7 |
+
<th><?php echo $this->__('File path') ?></th>
|
| 8 |
+
</tr>
|
| 9 |
+
</thead>
|
| 10 |
+
<tbody>
|
| 11 |
+
<div id="class-search-results">
|
| 12 |
+
<?php if (count($items)): ?>
|
| 13 |
+
<?php $row = 0 ?>
|
| 14 |
+
<?php foreach ($items as $key => $value): ?>
|
| 15 |
+
<tr>
|
| 16 |
+
<td><?php echo $row ?></td>
|
| 17 |
+
<td><?php echo $key ?></td>
|
| 18 |
+
<td><?php echo htmlspecialchars($value['class']) ?></td>
|
| 19 |
+
<td><?php echo htmlspecialchars($value['filepath']) ?></td>
|
| 20 |
+
</tr>
|
| 21 |
+
<?php $row++ ?>
|
| 22 |
+
<?php endforeach; ?>
|
| 23 |
+
<?php else: ?>
|
| 24 |
+
<tr><td colspan="3">Grouped classes not found for this uri.</td></tr>
|
| 25 |
+
<?php endif; ?>
|
| 26 |
+
</div>
|
| 27 |
+
</tbody>
|
| 28 |
+
</table>
|
app/design/adminhtml/default/default/template/olctw_debug/handledetails.phtml
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $title ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
|
| 6 |
+
<div class="djDebugPanelContent">
|
| 7 |
+
<div class="scroll">
|
| 8 |
+
<h4><?php echo $this->__('Layout Updates For This Handle') ?> (<?php echo count($handleFiles); ?>)</h4>
|
| 9 |
+
<table>
|
| 10 |
+
<thead>
|
| 11 |
+
<tr>
|
| 12 |
+
<th><?php echo $this->__('Update xml file') ?></th>
|
| 13 |
+
</tr>
|
| 14 |
+
</thead>
|
| 15 |
+
<tbody>
|
| 16 |
+
<?php $row = 0; ?>
|
| 17 |
+
<?php foreach ($handleFiles as $filename => $handleUpdates): ?>
|
| 18 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 19 |
+
<td class="syntax"><h5><?php echo $filename ?></h5></td>
|
| 20 |
+
</tr>
|
| 21 |
+
|
| 22 |
+
<?php foreach ($handleUpdates as $update): ?>
|
| 23 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>"><td>
|
| 24 |
+
<code><?php echo htmlspecialchars($update->asXML()) ?></code>
|
| 25 |
+
</td></tr>
|
| 26 |
+
<?php endforeach; ?>
|
| 27 |
+
<?php $row++; ?>
|
| 28 |
+
<?php endforeach ?>
|
| 29 |
+
</tbody>
|
| 30 |
+
</table>
|
| 31 |
+
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
app/design/adminhtml/default/default/template/olctw_debug/layout.phtml
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Layout */
|
| 3 |
+
$layout = Mage::getSingleton('core/layout');
|
| 4 |
+
$layoutHandles = Mage::getSingleton('core/layout')->getUpdate()->getHandles();
|
| 5 |
+
$layoutUpdates = Mage::getSingleton('core/layout')->getUpdate()->asArray();
|
| 6 |
+
|
| 7 |
+
/* @var $designPackage Mage_Core_Model_Design_Package */
|
| 8 |
+
$designPackage = Mage::getSingleton('core/design_package');
|
| 9 |
+
?>
|
| 10 |
+
|
| 11 |
+
<h4><?php echo $this->__('Package information') ?></h4>
|
| 12 |
+
<table>
|
| 13 |
+
<thead>
|
| 14 |
+
<tr>
|
| 15 |
+
<th><?php echo $this->__('Variable') ?></th>
|
| 16 |
+
<th><?php echo $this->__('Value') ?></th>
|
| 17 |
+
</tr>
|
| 18 |
+
</thead>
|
| 19 |
+
<tbody>
|
| 20 |
+
<tr class="djDebugOdd">
|
| 21 |
+
<td><?php echo $this->__('Design Area') ?></td>
|
| 22 |
+
<td><?php echo $designPackage->getArea() ?></td>
|
| 23 |
+
</tr>
|
| 24 |
+
<tr class="djDebugEven">
|
| 25 |
+
<td><?php echo $this->__('Package Name') ?></td>
|
| 26 |
+
<td><?php echo $designPackage->getPackageName() ?></td>
|
| 27 |
+
</tr>
|
| 28 |
+
<tr class="djDebugOdd">
|
| 29 |
+
<td><?php echo $this->__('Template Theme') ?></td>
|
| 30 |
+
<td><?php echo $designPackage->getTheme('template') ?></td>
|
| 31 |
+
</tr>
|
| 32 |
+
</tbody>
|
| 33 |
+
</table>
|
| 34 |
+
|
| 35 |
+
<h4><?php echo $this->__('Handles for this request');
|
| 36 |
+
echo "(" . count($layoutHandles) . ")" ?></h4>
|
| 37 |
+
<table>
|
| 38 |
+
<thead>
|
| 39 |
+
<tr>
|
| 40 |
+
<th><?php echo $this->__('Handle') ?></th>
|
| 41 |
+
</tr>
|
| 42 |
+
</thead>
|
| 43 |
+
<tbody>
|
| 44 |
+
<?php $row = 0; ?>
|
| 45 |
+
<?php foreach ($layoutHandles as $item): ?>
|
| 46 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 47 |
+
<td><a class="remoteCall toggleTemplate" href="<?php echo $this->getViewHandleUrl($item) ?>"><?php echo $item ?></a></td>
|
| 48 |
+
</tr>
|
| 49 |
+
<?php $row++; ?>
|
| 50 |
+
<?php endforeach ?>
|
| 51 |
+
</tbody>
|
| 52 |
+
</table>
|
| 53 |
+
|
| 54 |
+
<dl>
|
| 55 |
+
<dt><strong>Page Layout</strong></dt>
|
| 56 |
+
<dd>
|
| 57 |
+
<div class="djTemplateShowContextDiv"><a class="djTemplateShowContext"><span class="toggleArrow">▶</span>View Page Layout</a></div>
|
| 58 |
+
<div class="djTemplateHideContextDiv" style="display:none;">
|
| 59 |
+
<code><?php echo htmlspecialchars($layout->getNode()->asXML()) ?></code>
|
| 60 |
+
</div>
|
| 61 |
+
</dd>
|
| 62 |
+
</dl>
|
| 63 |
+
|
| 64 |
+
<h4><?php echo $this->__('Layout updates') ?> (<?php echo count($layoutUpdates); ?>)</h4>
|
| 65 |
+
<table>
|
| 66 |
+
<thead>
|
| 67 |
+
<tr>
|
| 68 |
+
<th><?php echo $this->__('#'); ?></th>
|
| 69 |
+
<th><?php echo $this->__('Update') ?></th>
|
| 70 |
+
</tr>
|
| 71 |
+
</thead>
|
| 72 |
+
<tbody>
|
| 73 |
+
<?php $row = 0; ?>
|
| 74 |
+
<?php foreach ($layoutUpdates as $item): ?>
|
| 75 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 76 |
+
<td><?php echo $row ?>.</td>
|
| 77 |
+
<td class="syntax">
|
| 78 |
+
<code><?php echo htmlspecialchars($item) ?></code>
|
| 79 |
+
</td>
|
| 80 |
+
</tr>
|
| 81 |
+
<?php $row++; ?>
|
| 82 |
+
<?php endforeach ?>
|
| 83 |
+
</tbody>
|
| 84 |
+
</table>
|
| 85 |
+
|
app/design/adminhtml/default/default/template/olctw_debug/logdetails.phtml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $title ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
|
| 6 |
+
<div class="djDebugPanelContent">
|
| 7 |
+
<div class="scroll">
|
| 8 |
+
|
| 9 |
+
<table class="djSqlExplain">
|
| 10 |
+
<tbody>
|
| 11 |
+
<?php $row = 0; ?>
|
| 12 |
+
<?php foreach ($items as $index => $row): ?>
|
| 13 |
+
<tr class="<?php echo ( ($index % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 14 |
+
<td><?php echo $row; ?></td>
|
| 15 |
+
</tr>
|
| 16 |
+
<?php endforeach; ?>
|
| 17 |
+
</tbody>
|
| 18 |
+
</table>
|
| 19 |
+
</div>
|
| 20 |
+
</div>
|
| 21 |
+
|
app/design/adminhtml/default/default/template/olctw_debug/logs.phtml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<h4><?php echo $this->__('View content of logs file'); ?></h4>
|
| 2 |
+
|
| 3 |
+
<a class="remoteCall toggleTemplate"
|
| 4 |
+
href="<?php echo Mage::getUrl('debug/index/viewLog', array('file' => Mage::getStoreConfig('dev/log/file'))); ?>">
|
| 5 |
+
<?php echo Mage::getStoreConfig('dev/log/file'); ?>
|
| 6 |
+
</a>
|
| 7 |
+
<a class="remoteCall toggleTemplate"
|
| 8 |
+
href="<?php echo Mage::getUrl('debug/index/viewLog', array('file' => Mage::getStoreConfig('dev/log/exception_file'))); ?>">
|
| 9 |
+
<?php echo Mage::getStoreConfig('dev/log/exception_file'); ?>
|
| 10 |
+
</a>
|
app/design/adminhtml/default/default/template/olctw_debug/models.phtml
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Models */
|
| 3 |
+
|
| 4 |
+
$items = $this->getItems();
|
| 5 |
+
Mage::helper('debug')->sortModelsByOccurrences($items);
|
| 6 |
+
$collections = $this->getCollections();
|
| 7 |
+
$queries = $this->getQueries();
|
| 8 |
+
?>
|
| 9 |
+
<h4><?php echo $this->__('MODELS') ?></h4>
|
| 10 |
+
<table>
|
| 11 |
+
<thead>
|
| 12 |
+
<tr>
|
| 13 |
+
<th><?php echo $this->__('Resource Name') ?></th>
|
| 14 |
+
<th><?php echo $this->__('Model Class') ?></th>
|
| 15 |
+
<th><?php echo $this->__('Times Instantiated') ?></th>
|
| 16 |
+
</tr>
|
| 17 |
+
</thead>
|
| 18 |
+
<tbody>
|
| 19 |
+
<?php $row = 0; ?>
|
| 20 |
+
<?php foreach ($items as $item): ?>
|
| 21 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 22 |
+
<td><?php echo $item['resource_name'] ?></td>
|
| 23 |
+
<td><?php echo $item['class'] ?></td>
|
| 24 |
+
<td><?php echo $item['occurrences'] ?></td>
|
| 25 |
+
</tr>
|
| 26 |
+
<?php $row++; ?>
|
| 27 |
+
<?php endforeach ?>
|
| 28 |
+
</tbody>
|
| 29 |
+
</table>
|
| 30 |
+
|
| 31 |
+
<h4><?php echo $this->__('COLLECTIONS') ?></h4>
|
| 32 |
+
<table>
|
| 33 |
+
<thead>
|
| 34 |
+
<tr>
|
| 35 |
+
<th><?php echo $this->__('Type') ?></th>
|
| 36 |
+
<th><?php echo $this->__('Class') ?></th>
|
| 37 |
+
<th><?php echo $this->__('SQL') ?></th>
|
| 38 |
+
</tr>
|
| 39 |
+
</thead>
|
| 40 |
+
<tbody>
|
| 41 |
+
<?php $row = 0; ?>
|
| 42 |
+
<?php foreach ($collections as $item): ?>
|
| 43 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 44 |
+
<td><?php echo $item['type'] ?></td>
|
| 45 |
+
<td><?php echo $item['class'] ?></td>
|
| 46 |
+
<td><?php echo $item['sql'] ?></td>
|
| 47 |
+
</tr>
|
| 48 |
+
<?php $row++; ?>
|
| 49 |
+
<?php endforeach ?>
|
| 50 |
+
</tbody>
|
| 51 |
+
</table>
|
| 52 |
+
<h4><?php echo $this->__('QUERIES') ?></h4>
|
| 53 |
+
<?php if ($queries): ?>
|
| 54 |
+
<p><a class="toggleTemplate" href="<?php echo Mage::getUrl('debug/index/toggleSqlProfiler') ?>">Disable SQL Profiler</a></p>
|
| 55 |
+
<table>
|
| 56 |
+
<thead>
|
| 57 |
+
<tr>
|
| 58 |
+
<th><?php echo $this->__('Time') ?></th>
|
| 59 |
+
<th><?php echo $this->__('Action') ?></th>
|
| 60 |
+
<th><?php echo $this->__('Query') ?></th>
|
| 61 |
+
</tr>
|
| 62 |
+
</thead>
|
| 63 |
+
<tbody>
|
| 64 |
+
<?php $row = 0; ?>
|
| 65 |
+
<?php foreach ($queries as $item): ?>
|
| 66 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 67 |
+
<td>
|
| 68 |
+
<div class=""><?php echo sprintf("%.4f", $item->getElapsedSecs()) ?> s</div>
|
| 69 |
+
</td>
|
| 70 |
+
<td>
|
| 71 |
+
<?php if ($item->getQueryType() == Zend_Db_Profiler::SELECT): ?>
|
| 72 |
+
<a class="remoteCall" href="<?php echo $this->getSqlSelectUrl($item) ?>">SELECT</a><br />
|
| 73 |
+
<a class="remoteCall" href="<?php echo $this->getSqlExplainUrl($item) ?>">EXPLAIN</a><br />
|
| 74 |
+
<?php endif; ?>
|
| 75 |
+
</td>
|
| 76 |
+
<td class="syntax">
|
| 77 |
+
<div class="djDebugSqlWrap">
|
| 78 |
+
<div class="djDebugSql"><?php echo $item->getQuery() ?>
|
| 79 |
+
<?php if (count($item->getQueryParams())): ?>
|
| 80 |
+
<br/><strong>Params:</strong> <?php echo implode(', ', $item->getQueryParams()); ?>
|
| 81 |
+
<?php endif; ?>
|
| 82 |
+
</div>
|
| 83 |
+
</div>
|
| 84 |
+
</td>
|
| 85 |
+
</tr>
|
| 86 |
+
<?php $row++; ?>
|
| 87 |
+
<?php endforeach ?>
|
| 88 |
+
</tbody>
|
| 89 |
+
</table>
|
| 90 |
+
<?php else: ?>
|
| 91 |
+
<p>SQL Profiler is not enabled. <a class="toggleTemplate" href="<?php echo Mage::getUrl('debug/index/toggleSqlProfiler') ?>">Enable SQL Profiler</a></p>
|
| 92 |
+
<?php endif; ?>
|
app/design/adminhtml/default/default/template/olctw_debug/performance.phtml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php ?>
|
| 2 |
+
<h4><?php $this->__('Performance') ?></h4>
|
| 3 |
+
<dl>
|
| 4 |
+
<dt><strong>
|
| 5 |
+
<a class="toggleTemplate" href="<?php echo Mage::getUrl('debug/index/clearCache') ?>">
|
| 6 |
+
<?php echo $this->__('Clear Magento Cache'); ?>
|
| 7 |
+
</a>
|
| 8 |
+
</strong></dt>
|
| 9 |
+
</dl>
|
| 10 |
+
|
app/design/adminhtml/default/default/template/olctw_debug/preferences.phtml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Preferences */
|
| 3 |
+
$panels = $this->getPanels();
|
| 4 |
+
|
| 5 |
+
/* @var $helper Magneto_Debug_Helper_Data */
|
| 6 |
+
$helper = Mage::helper('debug');
|
| 7 |
+
?>
|
| 8 |
+
|
| 9 |
+
<h4><?php echo $this->__('Visible Panels') ?></h4>
|
| 10 |
+
<form method="post" action="<?php echo $this->getFormUrl() ?>" name="preferences-form">
|
| 11 |
+
<?php foreach ($panels as $panel): ?>
|
| 12 |
+
<input type="checkbox" name="<?php echo strtolower($panel['title']) ?>" id="<?php echo $panel['dom_id'] . '_visibility' ?>"
|
| 13 |
+
<?php if ($helper->isPanelVisible($panel['title'])): ?>checked<?php endif ?>>
|
| 14 |
+
<label for="<?php echo $panel['dom_id'] . '_visibility' ?>"><?php echo $panel['title'] ?></label><br>
|
| 15 |
+
<?php endforeach ?>
|
| 16 |
+
|
| 17 |
+
<button class="form-button" type="submit"><span>Update</span></button>
|
| 18 |
+
</form>
|
app/design/adminhtml/default/default/template/olctw_debug/simplepanel.phtml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $this->__($title) ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
<div class="djDebugPanelContent">
|
| 6 |
+
<div class="scroll">
|
| 7 |
+
<code><?php echo $this->__($content) ?></code>
|
| 8 |
+
</div>
|
| 9 |
+
</div>
|
app/design/adminhtml/default/default/template/olctw_debug/utils.phtml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php ?>
|
| 2 |
+
<h4>Grouped Class Search</h4>
|
| 3 |
+
<form action="#" id="class-search-form" onSubmit="submitGroupedClassSearch(); return false;">
|
| 4 |
+
<input name="uri" class="input-text required-entry" type="search" size="40" />
|
| 5 |
+
<select name="group" class="input-select required-entry">
|
| 6 |
+
<option>all</option>
|
| 7 |
+
<option>model</option>
|
| 8 |
+
<option>block</option>
|
| 9 |
+
<option>helper</option>
|
| 10 |
+
</select>
|
| 11 |
+
<input type="button" onClick="submitGroupedClassSearch()" value="<?php echo $this->__('Search Grouped Class Name') ?>" />
|
| 12 |
+
</form>
|
| 13 |
+
<p>
|
| 14 |
+
Search examples: <em>catalog/product</em>, <em>core/url</em>, etc.
|
| 15 |
+
</p>
|
| 16 |
+
|
| 17 |
+
<script type="text/javascript">
|
| 18 |
+
function submitGroupedClassSearch(){
|
| 19 |
+
var request = new Ajax.Updater(
|
| 20 |
+
'class-search-results',
|
| 21 |
+
'<?php echo $this->getUrl("debug/index/searchGroupedClass") ?>',
|
| 22 |
+
{
|
| 23 |
+
method: 'post',
|
| 24 |
+
parameters: Form.serialize($('class-search-form'))
|
| 25 |
+
});
|
| 26 |
+
}
|
| 27 |
+
</script>
|
| 28 |
+
<div id="class-search-results">
|
| 29 |
+
<table>
|
| 30 |
+
<thead>
|
| 31 |
+
<tr>
|
| 32 |
+
<th><?php echo $this->__('#') ?></th>
|
| 33 |
+
<th><?php echo $this->__('Group Type') ?></th>
|
| 34 |
+
<th><?php echo $this->__('Class') ?></th>
|
| 35 |
+
<th><?php echo $this->__('File path') ?></th>
|
| 36 |
+
</tr>
|
| 37 |
+
</thead>
|
| 38 |
+
<tbody>
|
| 39 |
+
</tbody>
|
| 40 |
+
</table>
|
| 41 |
+
</div>
|
app/design/adminhtml/default/default/template/olctw_debug/versions.phtml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<table>
|
| 2 |
+
<thead>
|
| 3 |
+
<tr>
|
| 4 |
+
<th><?php echo $this->__("Module") ?></th>
|
| 5 |
+
<th><?php echo $this->__("Version") ?></th>
|
| 6 |
+
<th><?php echo $this->__("Status") ?></th>
|
| 7 |
+
<th><?php echo $this->__("Actions") ?></th>
|
| 8 |
+
</tr>
|
| 9 |
+
</thead>
|
| 10 |
+
<tbody>
|
| 11 |
+
<?php $row = 0; ?>
|
| 12 |
+
<?php foreach ($this->getItems() as $item): ?>
|
| 13 |
+
<tr class="<?php echo (($row % 2) ? 'djDebugOdd' : 'djDebugEven') ?>">
|
| 14 |
+
<td><?php echo $item['module'] ?></td>
|
| 15 |
+
<td><?php echo $item['version'] ?></td>
|
| 16 |
+
<td><?php echo $item['active'] ?></td>
|
| 17 |
+
<td><a class="remoteCall" href="<?php echo Mage::getUrl('debug/index/toggleModuleStatus', array('_query' => array('module' => $item['module']))) ?>">Toggle Status</a><td>
|
| 18 |
+
</tr>
|
| 19 |
+
<?php $row++; ?>
|
| 20 |
+
<?php endforeach; ?>
|
| 21 |
+
</tbody>
|
| 22 |
+
</table>
|
app/design/frontend/base/default/layout/olctw_debug/debug.xml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout version="0.1.1">
|
| 3 |
+
<default>
|
| 4 |
+
<reference name="before_body_end">
|
| 5 |
+
<block type="debug/debug" name="olctw_debug_panels" template="olctw_debug/debug.phtml">
|
| 6 |
+
<block type="debug/versions" name="olctw_debug_versions_panel" template="olctw_debug/versions.phtml"/>
|
| 7 |
+
<block type="debug/config" name="olctw_debug_config_panel" template="olctw_debug/config.phtml"/>
|
| 8 |
+
<block type="debug/blocks" name="olctw_debug_blocks_panel" template="olctw_debug/blocks.phtml"/>
|
| 9 |
+
<block type="debug/controller" name="olctw_debug_controller_panel" template="olctw_debug/controller.phtml"/>
|
| 10 |
+
<block type="debug/models" name="olctw_debug_models_panel" template="olctw_debug/models.phtml"/>
|
| 11 |
+
<block type="debug/layout" name="olctw_debug_layout_panel" template="olctw_debug/layout.phtml"/>
|
| 12 |
+
<block type="debug/abstract" name="olctw_debug_performance_panel" template="olctw_debug/performance.phtml"/>
|
| 13 |
+
<block type="debug/abstract" name="olctw_debug_utils_panel" template="olctw_debug/utils.phtml"/>
|
| 14 |
+
<block type="debug/abstract" name="olctw_debug_logs_panel" template="olctw_debug/logs.phtml"/>
|
| 15 |
+
|
| 16 |
+
<!-- Preferences panel is not implemented yet -->
|
| 17 |
+
<!--<block type="debug/preferences" name="olctw_debug_preferences_panel" template="olctw_debug/preferences.phtml"/>-->
|
| 18 |
+
</block>
|
| 19 |
+
</reference>
|
| 20 |
+
</default>
|
| 21 |
+
</layout>
|
app/design/frontend/base/default/template/olctw_debug/arrayformat.phtml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $title ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
|
| 6 |
+
<div class="djDebugPanelContent">
|
| 7 |
+
<div class="scroll">
|
| 8 |
+
<dl>
|
| 9 |
+
<dt><?php echo $this->__("Executed SQL") ?></dt>
|
| 10 |
+
<dd><?php echo htmlspecialchars($query); ?></dd>
|
| 11 |
+
</dl>
|
| 12 |
+
|
| 13 |
+
<table class="djSqlExplain">
|
| 14 |
+
<thead>
|
| 15 |
+
<tr>
|
| 16 |
+
<?php foreach ($headers as $header): ?>
|
| 17 |
+
<th><?php echo htmlspecialchars($header); ?></th>
|
| 18 |
+
<?php endforeach; ?>
|
| 19 |
+
</tr>
|
| 20 |
+
</thead>
|
| 21 |
+
<tbody>
|
| 22 |
+
<?php $row = 0; ?>
|
| 23 |
+
<?php foreach ($items as $row): ?>
|
| 24 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 25 |
+
<?php foreach ($row as $key => $value): ?>
|
| 26 |
+
<td><?php echo htmlspecialchars($value); ?></td>
|
| 27 |
+
<?php endforeach; ?>
|
| 28 |
+
</tr>
|
| 29 |
+
<?php endforeach; ?>
|
| 30 |
+
</tbody>
|
| 31 |
+
</table>
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
| 34 |
+
|
app/design/frontend/base/default/template/olctw_debug/blocks.phtml
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Blocks */
|
| 3 |
+
|
| 4 |
+
$templateDirs = $this->getTemplateDirs();
|
| 5 |
+
$blocks = $this->getItems();
|
| 6 |
+
$layoutBlocks = $this->getLayoutBlocks();
|
| 7 |
+
?>
|
| 8 |
+
|
| 9 |
+
<h4><?php echo $this->__('Template path') ?></h4>
|
| 10 |
+
<?php if ($templateDirs): ?>
|
| 11 |
+
<ol>
|
| 12 |
+
<?php foreach ($templateDirs as $template): ?>
|
| 13 |
+
<li><?php echo $template; ?></li>
|
| 14 |
+
</ol>
|
| 15 |
+
<?php endforeach; ?>
|
| 16 |
+
<?php else: ?>
|
| 17 |
+
<p>None</p>
|
| 18 |
+
<?php endif; ?>
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
<h4><?php echo $this->__('Rendered Blocks') ?></h4>
|
| 22 |
+
<p>List of all rendered blocks.</p>
|
| 23 |
+
<table>
|
| 24 |
+
<thead>
|
| 25 |
+
<tr>
|
| 26 |
+
<th>#</th>
|
| 27 |
+
<th><?php echo $this->__('name in layout') ?></th>
|
| 28 |
+
<th><?php echo $this->__('block class') ?></th>
|
| 29 |
+
<th><?php echo $this->__('template') ?></th>
|
| 30 |
+
<th><?php echo $this->__('rendering in') ?></th>
|
| 31 |
+
</tr>
|
| 32 |
+
</thead>
|
| 33 |
+
<tbody>
|
| 34 |
+
<?php $row = 0; ?>
|
| 35 |
+
<?php foreach ($blocks as $block): ?>
|
| 36 |
+
<tr class="<?php echo ( ($row % 2 ? 'djdebugodd' : 'djdebugeven')) ?>">
|
| 37 |
+
<td><?php echo $row ?></td>
|
| 38 |
+
<td><?php echo $block['layout_name'] ?></td>
|
| 39 |
+
<td>
|
| 40 |
+
<a href="<?php echo $this->getViewBlockUrl($block['class']) ?>"
|
| 41 |
+
class="remoteCall"><?php echo $block['class'] ?></a>
|
| 42 |
+
</td>
|
| 43 |
+
<td>
|
| 44 |
+
<?php if ($block['template']): ?>
|
| 45 |
+
<a href="<?php echo $this->getViewTemplateUrl($block['template']) ?>"
|
| 46 |
+
class="remoteCall toggletemplate"><?php echo $block['template'] ?></a>
|
| 47 |
+
<?php endif; ?>
|
| 48 |
+
</td>
|
| 49 |
+
<td>
|
| 50 |
+
<?php echo $this->getRenderingTime($block) ?>
|
| 51 |
+
</td>
|
| 52 |
+
</tr>
|
| 53 |
+
<?php $row++; ?>
|
| 54 |
+
<?php endforeach ?>
|
| 55 |
+
</tbody>
|
| 56 |
+
</table>
|
| 57 |
+
|
| 58 |
+
<h4><?php echo $this->__('Layout Blocks') ?></h4>
|
| 59 |
+
<p>List of all instantiated blocks, few of them might not be rendered.</p>
|
| 60 |
+
<table>
|
| 61 |
+
<thead>
|
| 62 |
+
<tr>
|
| 63 |
+
<th>#</th>
|
| 64 |
+
<th><?php echo $this->__('name in layout') ?></th>
|
| 65 |
+
<th><?php echo $this->__('block class') ?></th>
|
| 66 |
+
<th><?php echo $this->__('template') ?></th>
|
| 67 |
+
</tr>
|
| 68 |
+
</thead>
|
| 69 |
+
<tbody>
|
| 70 |
+
<?php $row = 0; ?>
|
| 71 |
+
<?php foreach ($layoutBlocks as $block): ?>
|
| 72 |
+
<tr class="<?php echo ( ($row % 2 ? 'djdebugodd' : 'djdebugeven')) ?>">
|
| 73 |
+
<td><?php echo $row ?></td>
|
| 74 |
+
<td><?php echo $block['layout_name'] ?></td>
|
| 75 |
+
<td>
|
| 76 |
+
<a href="<?php echo $this->getViewBlockUrl($block['class']) ?>"
|
| 77 |
+
class="remoteCall"><?php echo $block['class'] ?></a>
|
| 78 |
+
</td>
|
| 79 |
+
<td>
|
| 80 |
+
<?php if ($block['template']): ?>
|
| 81 |
+
<a href="<?php echo $this->getViewTemplateUrl($block['template']) ?>"
|
| 82 |
+
class="remoteCall toggletemplate"><?php echo $block['template'] ?></a>
|
| 83 |
+
<?php endif; ?>
|
| 84 |
+
</td>
|
| 85 |
+
</tr>
|
| 86 |
+
<?php $row++; ?>
|
| 87 |
+
<?php endforeach ?>
|
| 88 |
+
</tbody>
|
| 89 |
+
</table>
|
app/design/frontend/base/default/template/olctw_debug/config.phtml
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php /* @var $this Magneto_Debug_Block_Config */ ?>
|
| 2 |
+
<dl>
|
| 3 |
+
<dt><strong>
|
| 4 |
+
<a class="toggleTemplate" href="<?php echo $this->getToggleHintsUrl() ?>">
|
| 5 |
+
<?php echo $this->__('Toggle Template Hints') ?>
|
| 6 |
+
</a>
|
| 7 |
+
<a class="toggleTemplate" href="<?php echo $this->getToggleTranslateHintsUrl() ?>">
|
| 8 |
+
<?php echo $this->__('Toggle Translate Inline') ?>
|
| 9 |
+
</a>
|
| 10 |
+
<?php if ($this->hasFullPageCache()): ?>
|
| 11 |
+
<a class="toggleTemplate" href="<?php echo $this->getFullPageDebugUrl() ?>">
|
| 12 |
+
<?php echo $this->__('Toggle FPC Debug') ?>
|
| 13 |
+
</a>
|
| 14 |
+
<?php endif ?>
|
| 15 |
+
</strong></dt>
|
| 16 |
+
</dl>
|
| 17 |
+
<dl>
|
| 18 |
+
<dt><strong>
|
| 19 |
+
<a class="toggleTemplate" href="<?php echo $this->getDownloadConfigUrl() ?>" target="_blank">Download Config (XML)</a>
|
| 20 |
+
</strong>
|
| 21 |
+
<strong>
|
| 22 |
+
<a class="toggleTemplate" href="<?php echo $this->getDownloadConfigAsTextUrl() ?>" target="_blank">Download Config (TEXT)</a>
|
| 23 |
+
</strong></dt>
|
| 24 |
+
</dl>
|
| 25 |
+
<br/>
|
| 26 |
+
|
| 27 |
+
<form action="#" id="config-search-form" onSubmit="handlerFunction(); return false;">
|
| 28 |
+
<input name="query" class="input-text required-entry" type="search" size="40" />
|
| 29 |
+
<input type="button" onClick="handlerFunction()" value="<?php echo $this->__('Search Config') ?>" />
|
| 30 |
+
</form>
|
| 31 |
+
<p>
|
| 32 |
+
Search examples: <em>default/system</em>, <em>global/resources/default_setup</em>, <em>frontend/events</em> or <em>modules</em>. If you don't know what to search check all the <a class="toggleTemplate" href="<?php echo $this->getDownloadConfigAsTextUrl() ?>" target="_blank">configuration keys</a>.
|
| 33 |
+
</p>
|
| 34 |
+
|
| 35 |
+
<script type="text/javascript">
|
| 36 |
+
function handlerFunction(){
|
| 37 |
+
var request = new Ajax.Updater(
|
| 38 |
+
'config-search-results',
|
| 39 |
+
'<?php echo $this->getSearchConfigUrl() ?>',
|
| 40 |
+
{
|
| 41 |
+
method: 'post',
|
| 42 |
+
parameters: Form.serialize($('config-search-form'))
|
| 43 |
+
});
|
| 44 |
+
}
|
| 45 |
+
</script>
|
| 46 |
+
<div id="config-search-results">
|
| 47 |
+
<table>
|
| 48 |
+
<thead>
|
| 49 |
+
<tr>
|
| 50 |
+
<th><?php echo $this->__("#") ?></th>
|
| 51 |
+
<th><?php echo $this->__("Config") ?></th>
|
| 52 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 53 |
+
</tr>
|
| 54 |
+
</thead>
|
| 55 |
+
<tbody>
|
| 56 |
+
</tbody>
|
| 57 |
+
</table>
|
| 58 |
+
</div>
|
app/design/frontend/base/default/template/olctw_debug/configsearch.phtml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<table>
|
| 2 |
+
<thead>
|
| 3 |
+
<tr>
|
| 4 |
+
<th><?php echo $this->__("#") ?></th>
|
| 5 |
+
<th><?php echo $this->__("Config") ?></th>
|
| 6 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 7 |
+
</tr>
|
| 8 |
+
</thead>
|
| 9 |
+
<tbody>
|
| 10 |
+
<div id="config-search-results">
|
| 11 |
+
<?php if (count($items)): ?>
|
| 12 |
+
<?php $row = 0 ?>
|
| 13 |
+
<?php foreach ($items as $key => $value): ?>
|
| 14 |
+
<tr>
|
| 15 |
+
<td><?php echo $row ?></td>
|
| 16 |
+
<td><?php echo $key ?></td>
|
| 17 |
+
<td><?php echo htmlspecialchars($value) ?></td>
|
| 18 |
+
</tr>
|
| 19 |
+
<?php $row++ ?>
|
| 20 |
+
<?php endforeach; ?>
|
| 21 |
+
<?php else: ?>
|
| 22 |
+
<tr><td colspan="3">Configurations not found for this query.</td></tr>
|
| 23 |
+
<?php endif; ?>
|
| 24 |
+
</div>
|
| 25 |
+
</tbody>
|
| 26 |
+
</table>
|
app/design/frontend/base/default/template/olctw_debug/controller.phtml
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$controller = Mage::registry('controller');
|
| 3 |
+
$request = $controller->getRequest();
|
| 4 |
+
$cookies = $_COOKIE;
|
| 5 |
+
$session = Mage::getSingleton('core/session');
|
| 6 |
+
?>
|
| 7 |
+
<h4><?php $this->__('Controller information') ?></h4>
|
| 8 |
+
<table>
|
| 9 |
+
<thead>
|
| 10 |
+
<tr>
|
| 11 |
+
<th><?php echo $this->__('Variable') ?></th>
|
| 12 |
+
<th><?php echo $this->__('Value') ?></th>
|
| 13 |
+
</tr>
|
| 14 |
+
</thead>
|
| 15 |
+
<tbody>
|
| 16 |
+
<tr class="djDebugOdd">
|
| 17 |
+
<td><?php echo $this->__('Route Name') ?></td>
|
| 18 |
+
<td><?php echo $request->getRouteName() ?></td>
|
| 19 |
+
</tr>
|
| 20 |
+
<tr class="djDebugEven">
|
| 21 |
+
<td><?php echo $this->__('Controller Module/Name') ?></td>
|
| 22 |
+
<td><?php echo $request->getControllerModule() ?> / <?php echo $request->getControllerName() ?></td>
|
| 23 |
+
</tr>
|
| 24 |
+
<tr class="djDebugOdd">
|
| 25 |
+
<td><?php echo $this->__('Action Name') ?></td>
|
| 26 |
+
<td><?php echo $request->getActionName() ?></td>
|
| 27 |
+
</tr>
|
| 28 |
+
<tr class="djDebugEven">
|
| 29 |
+
<td><?php echo $this->__('Request Path') ?></td>
|
| 30 |
+
<td><?php echo $request->getPathInfo() ?></td>
|
| 31 |
+
</tr>
|
| 32 |
+
</tbody>
|
| 33 |
+
</table>
|
| 34 |
+
|
| 35 |
+
<h4><?php echo $this->__('COOKIES Variables') ?></h4>
|
| 36 |
+
<?php if ($cookies): ?>
|
| 37 |
+
<table>
|
| 38 |
+
<colgroup>
|
| 39 |
+
<col style="width:20%"/>
|
| 40 |
+
<col/>
|
| 41 |
+
</colgroup>
|
| 42 |
+
<thead>
|
| 43 |
+
<tr>
|
| 44 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 45 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 46 |
+
</tr>
|
| 47 |
+
</thead>
|
| 48 |
+
<tbody>
|
| 49 |
+
<?php $row = 0; ?>
|
| 50 |
+
<?php foreach ($cookies as $key => $value): ?>
|
| 51 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 52 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 53 |
+
<td><?php echo htmlspecialchars($value) ?></td>
|
| 54 |
+
</tr>
|
| 55 |
+
<?php $row++; ?>
|
| 56 |
+
<?php endforeach ?>
|
| 57 |
+
</tbody>
|
| 58 |
+
</table>
|
| 59 |
+
<?php else: ?>
|
| 60 |
+
<p><?php echo $this->__("No COOKIE data") ?></p>
|
| 61 |
+
<?php endif ?>
|
| 62 |
+
|
| 63 |
+
<h4><?php echo $this->__('SESSION Variables') ?></h4>
|
| 64 |
+
<?php if (count($_SESSION)): ?>
|
| 65 |
+
<table>
|
| 66 |
+
<colgroup>
|
| 67 |
+
<col style="width:20%"/>
|
| 68 |
+
<col/>
|
| 69 |
+
</colgroup>
|
| 70 |
+
<thead>
|
| 71 |
+
<tr>
|
| 72 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 73 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 74 |
+
</tr>
|
| 75 |
+
</thead>
|
| 76 |
+
<?php foreach ($_SESSION as $namespace => $data): ?>
|
| 77 |
+
<tbody>
|
| 78 |
+
<tr><th colspan="2" style="text-align: center; font-size: 120%; font-weight: bold;"><?php echo $namespace ?></th></tr>
|
| 79 |
+
<?php $row = 0; ?>
|
| 80 |
+
<?php foreach ($data as $key => $value): ?>
|
| 81 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 82 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 83 |
+
<td>
|
| 84 |
+
<?php if (is_array($value)): ?>
|
| 85 |
+
<?php foreach ($value as $key => $_value): ?>
|
| 86 |
+
<?php echo $key . ' => ' . $this->escapeHtml(json_encode($_value)); ?><br/>
|
| 87 |
+
<?php endforeach; ?>
|
| 88 |
+
<?php elseif (is_object($value)): ?>
|
| 89 |
+
<?php echo get_class($value) ?>
|
| 90 |
+
<?php else: ?>
|
| 91 |
+
<?php echo htmlspecialchars($value) ?>
|
| 92 |
+
<?php endif ?>
|
| 93 |
+
</td>
|
| 94 |
+
</tr>
|
| 95 |
+
<?php $row++; ?>
|
| 96 |
+
<?php endforeach; ?>
|
| 97 |
+
</tbody>
|
| 98 |
+
<?php endforeach; ?>
|
| 99 |
+
</table>
|
| 100 |
+
<?php else: ?>
|
| 101 |
+
<p><?php echo $this->__("No SESSION data") ?></p>
|
| 102 |
+
<?php endif ?>
|
| 103 |
+
|
| 104 |
+
<h4><?php echo $this->__("GET Variables") ?></h4>
|
| 105 |
+
<?php if ($_GET): ?>
|
| 106 |
+
<table>
|
| 107 |
+
<thead>
|
| 108 |
+
<tr>
|
| 109 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 110 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 111 |
+
</tr>
|
| 112 |
+
</thead>
|
| 113 |
+
<tbody>
|
| 114 |
+
<?php $row = 0; ?>
|
| 115 |
+
<?php foreach ($_GET as $key => $value): ?>
|
| 116 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 117 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 118 |
+
<td><?php echo htmlspecialchars(var_export($value, true)) ?></td>
|
| 119 |
+
</tr>
|
| 120 |
+
<?php endforeach; ?>
|
| 121 |
+
</tbody>
|
| 122 |
+
</table>
|
| 123 |
+
<?php else: ?>
|
| 124 |
+
<p><?php echo $this->__("No GET data") ?></p>
|
| 125 |
+
<?php endif ?>
|
| 126 |
+
|
| 127 |
+
<h4><?php echo $this->__("POST Variables") ?></h4>
|
| 128 |
+
<?php if ($_POST): ?>
|
| 129 |
+
<table>
|
| 130 |
+
<thead>
|
| 131 |
+
<tr>
|
| 132 |
+
<th><?php echo $this->__("Variable") ?></th>
|
| 133 |
+
<th><?php echo $this->__("Value") ?></th>
|
| 134 |
+
</tr>
|
| 135 |
+
</thead>
|
| 136 |
+
<tbody>
|
| 137 |
+
<?php $row = 0; ?>
|
| 138 |
+
<?php foreach ($_POST as $key => $value): ?>
|
| 139 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 140 |
+
<td><?php echo htmlspecialchars($key) ?></td>
|
| 141 |
+
<td><?php echo htmlspecialchars(var_export($value, true)) ?></td>
|
| 142 |
+
</tr>
|
| 143 |
+
<?php endforeach; ?>
|
| 144 |
+
</tbody>
|
| 145 |
+
</table>
|
| 146 |
+
<?php else: ?>
|
| 147 |
+
<p><?php echo $this->__("No POST data") ?></p>
|
| 148 |
+
<?php endif ?>
|
app/design/frontend/base/default/template/olctw_debug/debug.phtml
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Debug */
|
| 3 |
+
$panels = $this->getVisiblePanels();
|
| 4 |
+
?>
|
| 5 |
+
<style type="text/css">@media print { #djDebug {display:none;}}</style>
|
| 6 |
+
<script type="text/javascript">
|
| 7 |
+
// <![CDATA[
|
| 8 |
+
var DEBUG_TOOLBAR_MEDIA_URL = "<?php echo $this->getDebugMediaUrl(); ?>";
|
| 9 |
+
// ]]>
|
| 10 |
+
</script>
|
| 11 |
+
<script type="text/javascript" src="<?php echo $this->getDebugMediaUrl(); ?>js/toolbar.js"></script>
|
| 12 |
+
<div id="djDebug" style="display:none;">
|
| 13 |
+
<div style="display:none;" id="djDebugToolbar">
|
| 14 |
+
<ul id="djDebugPanelList">
|
| 15 |
+
<?php if ($panels): ?>
|
| 16 |
+
<li><a id="djHideToolBarButton" href="#" title="<?php echo $this->__("Hide Toolbar"); ?>"><?php echo $this->__("Hide") ?> »</a></li>
|
| 17 |
+
<?php else: ?>
|
| 18 |
+
<li id="djDebugButton">DEBUG</li>
|
| 19 |
+
<?php endif; ?>
|
| 20 |
+
<?php foreach ($panels as $panel): ?>
|
| 21 |
+
<li>
|
| 22 |
+
<?php if ($panel['has_content']): ?>
|
| 23 |
+
<a href="<?php echo $panel['url'] ? $panel['url'] : "#" ?>" title="<?php echo $panel['title']; ?>" class="<?php echo $panel['dom_id'] ?>">
|
| 24 |
+
<?php else: ?>
|
| 25 |
+
<div class="contentless">
|
| 26 |
+
<?php endif; ?>
|
| 27 |
+
<?php echo $panel['nav_title']; ?>
|
| 28 |
+
<?php if ($panel['nav_subtitle']): ?>
|
| 29 |
+
<br /><small><?php echo $panel['nav_subtitle']; ?></small>
|
| 30 |
+
<?php endif; ?>
|
| 31 |
+
<?php if ($panel['has_content']): ?>
|
| 32 |
+
</a>
|
| 33 |
+
<?php else: ?>
|
| 34 |
+
</div>
|
| 35 |
+
<?php endif; ?>
|
| 36 |
+
</li>
|
| 37 |
+
<?php endforeach; ?>
|
| 38 |
+
<li>
|
| 39 |
+
<a href="#" class="">About
|
| 40 |
+
<br/><small>Version <?php echo $this->getVersion() ?></a></small>
|
| 41 |
+
</a>
|
| 42 |
+
</li>
|
| 43 |
+
</ul>
|
| 44 |
+
</div>
|
| 45 |
+
<div style="display:none;" id="djDebugToolbarHandle">
|
| 46 |
+
<a title="<?php echo $this->__("Show Toolbar"); ?>" id="djShowToolBarButton" href="#">«</a>
|
| 47 |
+
</div>
|
| 48 |
+
<?php foreach ($panels as $panel): ?>
|
| 49 |
+
<?php if ($panel['has_content']): ?>
|
| 50 |
+
<div id="<?php echo $panel['dom_id'] ?>" class="panelContent">
|
| 51 |
+
<div class="djDebugPanelTitle">
|
| 52 |
+
<a href="" class="djDebugClose"><?php echo $this->__("Close"); ?></a>
|
| 53 |
+
<h3><?php echo $panel['title'] ?></h3>
|
| 54 |
+
</div>
|
| 55 |
+
<div class="djDebugPanelContent">
|
| 56 |
+
<div class="scroll">
|
| 57 |
+
<?php echo $this->getChildHtml($panel['template']) ?>
|
| 58 |
+
</div>
|
| 59 |
+
</div>
|
| 60 |
+
</div>
|
| 61 |
+
<?php endif; ?>
|
| 62 |
+
|
| 63 |
+
<?php endforeach; ?>
|
| 64 |
+
<div id="djDebugWindow" class="panelContent"></div>
|
| 65 |
+
</div>
|
app/design/frontend/base/default/template/olctw_debug/groupedclasssearch.phtml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<table>
|
| 2 |
+
<thead>
|
| 3 |
+
<tr>
|
| 4 |
+
<th><?php echo $this->__('#') ?></th>
|
| 5 |
+
<th><?php echo $this->__('Group Type') ?></th>
|
| 6 |
+
<th><?php echo $this->__('Search Results') ?></th>
|
| 7 |
+
<th><?php echo $this->__('File path') ?></th>
|
| 8 |
+
</tr>
|
| 9 |
+
</thead>
|
| 10 |
+
<tbody>
|
| 11 |
+
<div id="class-search-results">
|
| 12 |
+
<?php if (count($items)): ?>
|
| 13 |
+
<?php $row = 0 ?>
|
| 14 |
+
<?php foreach ($items as $key => $value): ?>
|
| 15 |
+
<tr>
|
| 16 |
+
<td><?php echo $row ?></td>
|
| 17 |
+
<td><?php echo $key ?></td>
|
| 18 |
+
<td><?php echo htmlspecialchars($value['class']) ?></td>
|
| 19 |
+
<td><?php echo htmlspecialchars($value['filepath']) ?></td>
|
| 20 |
+
</tr>
|
| 21 |
+
<?php $row++ ?>
|
| 22 |
+
<?php endforeach; ?>
|
| 23 |
+
<?php else: ?>
|
| 24 |
+
<tr><td colspan="3">Grouped classes not found for this uri.</td></tr>
|
| 25 |
+
<?php endif; ?>
|
| 26 |
+
</div>
|
| 27 |
+
</tbody>
|
| 28 |
+
</table>
|
app/design/frontend/base/default/template/olctw_debug/handledetails.phtml
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $title ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
|
| 6 |
+
<div class="djDebugPanelContent">
|
| 7 |
+
<div class="scroll">
|
| 8 |
+
<h4><?php echo $this->__('Layout Updates For This Handle') ?> (<?php echo count($handleFiles); ?>)</h4>
|
| 9 |
+
<table>
|
| 10 |
+
<thead>
|
| 11 |
+
<tr>
|
| 12 |
+
<th><?php echo $this->__('Update xml file') ?></th>
|
| 13 |
+
</tr>
|
| 14 |
+
</thead>
|
| 15 |
+
<tbody>
|
| 16 |
+
<?php $row = 0; ?>
|
| 17 |
+
<?php foreach ($handleFiles as $filename => $handleUpdates): ?>
|
| 18 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 19 |
+
<td class="syntax"><h5><?php echo $filename ?></h5></td>
|
| 20 |
+
</tr>
|
| 21 |
+
|
| 22 |
+
<?php foreach ($handleUpdates as $update): ?>
|
| 23 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>"><td>
|
| 24 |
+
<code><?php echo htmlspecialchars($update->asXML()) ?></code>
|
| 25 |
+
</td></tr>
|
| 26 |
+
<?php endforeach; ?>
|
| 27 |
+
<?php $row++; ?>
|
| 28 |
+
<?php endforeach ?>
|
| 29 |
+
</tbody>
|
| 30 |
+
</table>
|
| 31 |
+
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
app/design/frontend/base/default/template/olctw_debug/layout.phtml
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Layout */
|
| 3 |
+
$layout = Mage::getSingleton('core/layout');
|
| 4 |
+
$layoutHandles = Mage::getSingleton('core/layout')->getUpdate()->getHandles();
|
| 5 |
+
$layoutUpdates = Mage::getSingleton('core/layout')->getUpdate()->asArray();
|
| 6 |
+
|
| 7 |
+
/* @var $designPackage Mage_Core_Model_Design_Package */
|
| 8 |
+
$designPackage = Mage::getSingleton('core/design_package');
|
| 9 |
+
?>
|
| 10 |
+
|
| 11 |
+
<h4><?php echo $this->__('Package information') ?></h4>
|
| 12 |
+
<table>
|
| 13 |
+
<thead>
|
| 14 |
+
<tr>
|
| 15 |
+
<th><?php echo $this->__('Variable') ?></th>
|
| 16 |
+
<th><?php echo $this->__('Value') ?></th>
|
| 17 |
+
</tr>
|
| 18 |
+
</thead>
|
| 19 |
+
<tbody>
|
| 20 |
+
<tr class="djDebugOdd">
|
| 21 |
+
<td><?php echo $this->__('Design Area') ?></td>
|
| 22 |
+
<td><?php echo $designPackage->getArea() ?></td>
|
| 23 |
+
</tr>
|
| 24 |
+
<tr class="djDebugEven">
|
| 25 |
+
<td><?php echo $this->__('Package Name') ?></td>
|
| 26 |
+
<td><?php echo $designPackage->getPackageName() ?></td>
|
| 27 |
+
</tr>
|
| 28 |
+
<tr class="djDebugOdd">
|
| 29 |
+
<td><?php echo $this->__('Template Theme') ?></td>
|
| 30 |
+
<td><?php echo $designPackage->getTheme('template') ?></td>
|
| 31 |
+
</tr>
|
| 32 |
+
</tbody>
|
| 33 |
+
</table>
|
| 34 |
+
|
| 35 |
+
<h4><?php echo $this->__('Handles for this request');
|
| 36 |
+
echo "(" . count($layoutHandles) . ")" ?></h4>
|
| 37 |
+
<table>
|
| 38 |
+
<thead>
|
| 39 |
+
<tr>
|
| 40 |
+
<th><?php echo $this->__('Handle') ?></th>
|
| 41 |
+
</tr>
|
| 42 |
+
</thead>
|
| 43 |
+
<tbody>
|
| 44 |
+
<?php $row = 0; ?>
|
| 45 |
+
<?php foreach ($layoutHandles as $item): ?>
|
| 46 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 47 |
+
<td><a class="remoteCall toggleTemplate" href="<?php echo $this->getViewHandleUrl($item) ?>"><?php echo $item ?></a></td>
|
| 48 |
+
</tr>
|
| 49 |
+
<?php $row++; ?>
|
| 50 |
+
<?php endforeach ?>
|
| 51 |
+
</tbody>
|
| 52 |
+
</table>
|
| 53 |
+
|
| 54 |
+
<dl>
|
| 55 |
+
<dt><strong>Page Layout</strong></dt>
|
| 56 |
+
<dd>
|
| 57 |
+
<div class="djTemplateShowContextDiv"><a class="djTemplateShowContext"><span class="toggleArrow">▶</span>View Page Layout</a></div>
|
| 58 |
+
<div class="djTemplateHideContextDiv" style="display:none;">
|
| 59 |
+
<code><?php echo htmlspecialchars($layout->getNode()->asXML()) ?></code>
|
| 60 |
+
</div>
|
| 61 |
+
</dd>
|
| 62 |
+
</dl>
|
| 63 |
+
|
| 64 |
+
<h4><?php echo $this->__('Layout updates') ?> (<?php echo count($layoutUpdates); ?>)</h4>
|
| 65 |
+
<table>
|
| 66 |
+
<thead>
|
| 67 |
+
<tr>
|
| 68 |
+
<th><?php echo $this->__('#'); ?></th>
|
| 69 |
+
<th><?php echo $this->__('Update') ?></th>
|
| 70 |
+
</tr>
|
| 71 |
+
</thead>
|
| 72 |
+
<tbody>
|
| 73 |
+
<?php $row = 0; ?>
|
| 74 |
+
<?php foreach ($layoutUpdates as $item): ?>
|
| 75 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 76 |
+
<td><?php echo $row ?>.</td>
|
| 77 |
+
<td class="syntax">
|
| 78 |
+
<code><?php echo htmlspecialchars($item) ?></code>
|
| 79 |
+
</td>
|
| 80 |
+
</tr>
|
| 81 |
+
<?php $row++; ?>
|
| 82 |
+
<?php endforeach ?>
|
| 83 |
+
</tbody>
|
| 84 |
+
</table>
|
| 85 |
+
|
app/design/frontend/base/default/template/olctw_debug/logdetails.phtml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $title ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
|
| 6 |
+
<div class="djDebugPanelContent">
|
| 7 |
+
<div class="scroll">
|
| 8 |
+
|
| 9 |
+
<table class="djSqlExplain">
|
| 10 |
+
<tbody>
|
| 11 |
+
<?php $row = 0; ?>
|
| 12 |
+
<?php foreach ($items as $index => $row): ?>
|
| 13 |
+
<tr class="<?php echo ( ($index % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 14 |
+
<td><?php echo $row; ?></td>
|
| 15 |
+
</tr>
|
| 16 |
+
<?php endforeach; ?>
|
| 17 |
+
</tbody>
|
| 18 |
+
</table>
|
| 19 |
+
</div>
|
| 20 |
+
</div>
|
| 21 |
+
|
app/design/frontend/base/default/template/olctw_debug/logs.phtml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<h4><?php echo $this->__('View content of logs file'); ?></h4>
|
| 2 |
+
|
| 3 |
+
<a class="remoteCall toggleTemplate"
|
| 4 |
+
href="<?php echo Mage::getUrl('debug/index/viewLog', array('file' => Mage::getStoreConfig('dev/log/file'))); ?>">
|
| 5 |
+
<?php echo Mage::getStoreConfig('dev/log/file'); ?>
|
| 6 |
+
</a>
|
| 7 |
+
<a class="remoteCall toggleTemplate"
|
| 8 |
+
href="<?php echo Mage::getUrl('debug/index/viewLog', array('file' => Mage::getStoreConfig('dev/log/exception_file'))); ?>">
|
| 9 |
+
<?php echo Mage::getStoreConfig('dev/log/exception_file'); ?>
|
| 10 |
+
</a>
|
app/design/frontend/base/default/template/olctw_debug/models.phtml
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Models */
|
| 3 |
+
|
| 4 |
+
$items = $this->getItems();
|
| 5 |
+
Mage::helper('debug')->sortModelsByOccurrences($items);
|
| 6 |
+
$collections = $this->getCollections();
|
| 7 |
+
$queries = $this->getQueries();
|
| 8 |
+
?>
|
| 9 |
+
<h4><?php echo $this->__('MODELS') ?></h4>
|
| 10 |
+
<table>
|
| 11 |
+
<thead>
|
| 12 |
+
<tr>
|
| 13 |
+
<th><?php echo $this->__('Resource Name') ?></th>
|
| 14 |
+
<th><?php echo $this->__('Model Class') ?></th>
|
| 15 |
+
<th><?php echo $this->__('Times Instantiated') ?></th>
|
| 16 |
+
</tr>
|
| 17 |
+
</thead>
|
| 18 |
+
<tbody>
|
| 19 |
+
<?php $row = 0; ?>
|
| 20 |
+
<?php foreach ($items as $item): ?>
|
| 21 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 22 |
+
<td><?php echo $item['resource_name'] ?></td>
|
| 23 |
+
<td><?php echo $item['class'] ?></td>
|
| 24 |
+
<td><?php echo $item['occurrences'] ?></td>
|
| 25 |
+
</tr>
|
| 26 |
+
<?php $row++; ?>
|
| 27 |
+
<?php endforeach ?>
|
| 28 |
+
</tbody>
|
| 29 |
+
</table>
|
| 30 |
+
|
| 31 |
+
<h4><?php echo $this->__('COLLECTIONS') ?></h4>
|
| 32 |
+
<table>
|
| 33 |
+
<thead>
|
| 34 |
+
<tr>
|
| 35 |
+
<th><?php echo $this->__('Type') ?></th>
|
| 36 |
+
<th><?php echo $this->__('Class') ?></th>
|
| 37 |
+
<th><?php echo $this->__('SQL') ?></th>
|
| 38 |
+
</tr>
|
| 39 |
+
</thead>
|
| 40 |
+
<tbody>
|
| 41 |
+
<?php $row = 0; ?>
|
| 42 |
+
<?php foreach ($collections as $item): ?>
|
| 43 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 44 |
+
<td><?php echo $item['type'] ?></td>
|
| 45 |
+
<td><?php echo $item['class'] ?></td>
|
| 46 |
+
<td><?php echo $item['sql'] ?></td>
|
| 47 |
+
</tr>
|
| 48 |
+
<?php $row++; ?>
|
| 49 |
+
<?php endforeach ?>
|
| 50 |
+
</tbody>
|
| 51 |
+
</table>
|
| 52 |
+
<h4><?php echo $this->__('QUERIES') ?></h4>
|
| 53 |
+
<?php if ($queries): ?>
|
| 54 |
+
<p><a class="toggleTemplate" href="<?php echo Mage::getUrl('debug/index/toggleSqlProfiler') ?>">Disable SQL Profiler</a></p>
|
| 55 |
+
<table>
|
| 56 |
+
<thead>
|
| 57 |
+
<tr>
|
| 58 |
+
<th><?php echo $this->__('Time') ?></th>
|
| 59 |
+
<th><?php echo $this->__('Action') ?></th>
|
| 60 |
+
<th><?php echo $this->__('Query') ?></th>
|
| 61 |
+
</tr>
|
| 62 |
+
</thead>
|
| 63 |
+
<tbody>
|
| 64 |
+
<?php $row = 0; ?>
|
| 65 |
+
<?php foreach ($queries as $item): ?>
|
| 66 |
+
<tr class="<?php echo ( ($row % 2 ? 'djDebugOdd' : 'djDebugEven')) ?>">
|
| 67 |
+
<td>
|
| 68 |
+
<div class=""><?php echo sprintf("%.4f", $item->getElapsedSecs()) ?> s</div>
|
| 69 |
+
</td>
|
| 70 |
+
<td>
|
| 71 |
+
<?php if ($item->getQueryType() == Zend_Db_Profiler::SELECT): ?>
|
| 72 |
+
<a class="remoteCall" href="<?php echo $this->getSqlSelectUrl($item) ?>">SELECT</a><br />
|
| 73 |
+
<a class="remoteCall" href="<?php echo $this->getSqlExplainUrl($item) ?>">EXPLAIN</a><br />
|
| 74 |
+
<?php endif; ?>
|
| 75 |
+
</td>
|
| 76 |
+
<td class="syntax">
|
| 77 |
+
<div class="djDebugSqlWrap">
|
| 78 |
+
<div class="djDebugSql"><?php echo $item->getQuery() ?>
|
| 79 |
+
<?php if (count($item->getQueryParams())): ?>
|
| 80 |
+
<br/><strong>Params:</strong> <?php echo implode(', ', $item->getQueryParams()); ?>
|
| 81 |
+
<?php endif; ?>
|
| 82 |
+
</div>
|
| 83 |
+
</div>
|
| 84 |
+
</td>
|
| 85 |
+
</tr>
|
| 86 |
+
<?php $row++; ?>
|
| 87 |
+
<?php endforeach ?>
|
| 88 |
+
</tbody>
|
| 89 |
+
</table>
|
| 90 |
+
<?php else: ?>
|
| 91 |
+
<p>SQL Profiler is not enabled. <a class="toggleTemplate" href="<?php echo Mage::getUrl('debug/index/toggleSqlProfiler') ?>">Enable SQL Profiler</a></p>
|
| 92 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/olctw_debug/performance.phtml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php ?>
|
| 2 |
+
<h4><?php $this->__('Performance') ?></h4>
|
| 3 |
+
<dl>
|
| 4 |
+
<dt><strong>
|
| 5 |
+
<a class="toggleTemplate" href="<?php echo Mage::getUrl('debug/index/clearCache') ?>">
|
| 6 |
+
<?php echo $this->__('Clear Magento Cache'); ?>
|
| 7 |
+
</a>
|
| 8 |
+
</strong></dt>
|
| 9 |
+
</dl>
|
| 10 |
+
|
app/design/frontend/base/default/template/olctw_debug/preferences.phtml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* @var $this Magneto_Debug_Block_Preferences */
|
| 3 |
+
$panels = $this->getPanels();
|
| 4 |
+
|
| 5 |
+
/* @var $helper Magneto_Debug_Helper_Data */
|
| 6 |
+
$helper = Mage::helper('debug');
|
| 7 |
+
?>
|
| 8 |
+
|
| 9 |
+
<h4><?php echo $this->__('Visible Panels') ?></h4>
|
| 10 |
+
<form method="post" action="<?php echo $this->getFormUrl() ?>" name="preferences-form">
|
| 11 |
+
<?php foreach ($panels as $panel): ?>
|
| 12 |
+
<input type="checkbox" name="<?php echo strtolower($panel['title']) ?>" id="<?php echo $panel['dom_id'] . '_visibility' ?>"
|
| 13 |
+
<?php if ($helper->isPanelVisible($panel['title'])): ?>checked<?php endif ?>>
|
| 14 |
+
<label for="<?php echo $panel['dom_id'] . '_visibility' ?>"><?php echo $panel['title'] ?></label><br>
|
| 15 |
+
<?php endforeach ?>
|
| 16 |
+
|
| 17 |
+
<button class="form-button" type="submit"><span>Update</span></button>
|
| 18 |
+
</form>
|
app/design/frontend/base/default/template/olctw_debug/simplepanel.phtml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="djDebugPanelTitle">
|
| 2 |
+
<a class="djDebugClose djDebugBack" href="">"Back"</a>
|
| 3 |
+
<h3><?php echo $this->__($title) ?></h3>
|
| 4 |
+
</div>
|
| 5 |
+
<div class="djDebugPanelContent">
|
| 6 |
+
<div class="scroll">
|
| 7 |
+
<code><?php echo $this->__($content) ?></code>
|
| 8 |
+
</div>
|
| 9 |
+
</div>
|
app/design/frontend/base/default/template/olctw_debug/utils.phtml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php ?>
|
| 2 |
+
<h4>Grouped Class Search</h4>
|
| 3 |
+
<form action="#" id="class-search-form" onSubmit="submitGroupedClassSearch(); return false;">
|
| 4 |
+
<input name="uri" class="input-text required-entry" type="search" size="40" />
|
| 5 |
+
<select name="group" class="input-select required-entry">
|
| 6 |
+
<option>all</option>
|
| 7 |
+
<option>model</option>
|
| 8 |
+
<option>block</option>
|
| 9 |
+
<option>helper</option>
|
| 10 |
+
</select>
|
| 11 |
+
<input type="button" onClick="submitGroupedClassSearch()" value="<?php echo $this->__('Search Grouped Class Name') ?>" />
|
| 12 |
+
</form>
|
| 13 |
+
<p>
|
| 14 |
+
Search examples: <em>catalog/product</em>, <em>core/url</em>, etc.
|
| 15 |
+
</p>
|
| 16 |
+
|
| 17 |
+
<script type="text/javascript">
|
| 18 |
+
function submitGroupedClassSearch(){
|
| 19 |
+
var request = new Ajax.Updater(
|
| 20 |
+
'class-search-results',
|
| 21 |
+
'<?php echo $this->getUrl("debug/index/searchGroupedClass") ?>',
|
| 22 |
+
{
|
| 23 |
+
method: 'post',
|
| 24 |
+
parameters: Form.serialize($('class-search-form'))
|
| 25 |
+
});
|
| 26 |
+
}
|
| 27 |
+
</script>
|
| 28 |
+
<div id="class-search-results">
|
| 29 |
+
<table>
|
| 30 |
+
<thead>
|
| 31 |
+
<tr>
|
| 32 |
+
<th><?php echo $this->__('#') ?></th>
|
| 33 |
+
<th><?php echo $this->__('Group Type') ?></th>
|
| 34 |
+
<th><?php echo $this->__('Class') ?></th>
|
| 35 |
+
<th><?php echo $this->__('File path') ?></th>
|
| 36 |
+
</tr>
|
| 37 |
+
</thead>
|
| 38 |
+
<tbody>
|
| 39 |
+
</tbody>
|
| 40 |
+
</table>
|
| 41 |
+
</div>
|
app/design/frontend/base/default/template/olctw_debug/versions.phtml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<table>
|
| 2 |
+
<thead>
|
| 3 |
+
<tr>
|
| 4 |
+
<th><?php echo $this->__("Module") ?></th>
|
| 5 |
+
<th><?php echo $this->__("Version") ?></th>
|
| 6 |
+
<th><?php echo $this->__("Status") ?></th>
|
| 7 |
+
<th><?php echo $this->__("Actions") ?></th>
|
| 8 |
+
</tr>
|
| 9 |
+
</thead>
|
| 10 |
+
<tbody>
|
| 11 |
+
<?php $row = 0; ?>
|
| 12 |
+
<?php foreach ($this->getItems() as $item): ?>
|
| 13 |
+
<tr class="<?php echo (($row % 2) ? 'djDebugOdd' : 'djDebugEven') ?>">
|
| 14 |
+
<td><?php echo $item['module'] ?></td>
|
| 15 |
+
<td><?php echo $item['version'] ?></td>
|
| 16 |
+
<td><?php echo $item['active'] ?></td>
|
| 17 |
+
<td><a class="remoteCall" href="<?php echo Mage::getUrl('debug/index/toggleModuleStatus', array('_query' => array('module' => $item['module']))) ?>">Toggle Status</a><td>
|
| 18 |
+
</tr>
|
| 19 |
+
<?php $row++; ?>
|
| 20 |
+
<?php endforeach; ?>
|
| 21 |
+
</tbody>
|
| 22 |
+
</table>
|
app/etc/modules/Olctw_Debug.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Olctw_Debug>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
</Olctw_Debug>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
package.xml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Olctw_Debug</name>
|
| 4 |
+
<version>1.1.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license>Open Software License (OSL 3.0)</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>A debug tool bar for developers of magento commerce community 1.7 or higher.</summary>
|
| 10 |
+
<description>Based on the version provided from https://github.com/madalinoprea/magneto-debug . We first try to make it working under 1.7 or higher version. Everyone is welcome to report issue and fork it in https://github.com/kiang/magneto-debug .</description>
|
| 11 |
+
<notes>Just migrated the extension to be able to work under Magento community 1.7.0.0.</notes>
|
| 12 |
+
<authors><author><name>Just This Computer Studio ( http://olc.tw )</name><user>kiang</user><email>service@olc.tw</email></author></authors>
|
| 13 |
+
<date>2013-05-01</date>
|
| 14 |
+
<time>16:02:43</time>
|
| 15 |
+
<contents><target name="magecommunity"><dir name="Olctw"><dir name="Debug"><dir name="Block"><file name="Abstract.php" hash="e28c82e3bccc26c80917b94b50629439"/><file name="Blocks.php" hash="101756f33cbe798b305e387357492741"/><file name="Config.php" hash="726a712eb85246e55640a53bff33ea25"/><file name="Controller.php" hash="01394f0e5b7df1226fe71702426c43d0"/><file name="Debug.php" hash="763d11c18b44ca39db67a39e01e61e62"/><file name="Layout.php" hash="37978bc6b5f192409a0bd53f66f3bcf9"/><file name="Models.php" hash="62efb9f7b8c07de7e4afc7d72ae32d34"/><file name="Preferences.php" hash="db4df2f0eed05ee017b5f7dca3dc09f1"/><file name="Versions.php" hash="d9e101822db6b6f14fd3e3bdc78d6693"/></dir><dir name="Helper"><file name="Data.php" hash="1030805541b82c93cb53641f6c18f322"/></dir><dir name="Model"><file name="Observer.php" hash="7a2e2574e1261a9171ceba04b6454bcb"/></dir><dir name="controllers"><file name="IndexController.php" hash="7439129c897fac87d3412fd96cf48480"/><file name="PreferencesController.php" hash="b22689eb701cdf246399e08729b5cad2"/></dir><dir name="etc"><file name="config.xml" hash="a87e7e9b642e7b56e54dc51dbf8320a3"/><file name="system.xml" hash="0e7a9cb88940c60e555b69e917218386"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="olctw_debug"><file name="arrayformat.phtml" hash="182e206b9e3298c75b842cded4d0e082"/><file name="blocks.phtml" hash="e303425969eb0aafb47e744e5e7b19e5"/><file name="config.phtml" hash="ae389d2f340a5fe7d3ae40a683368065"/><file name="configsearch.phtml" hash="ca657bd4f91e6d8726c551c69ba4d576"/><file name="controller.phtml" hash="2c66129f8fa003b18bf32d3e4a85aa7d"/><file name="debug.phtml" hash="73011bb170e7611b8bb9c70e5ab82d6c"/><file name="groupedclasssearch.phtml" hash="9a15022d9cb41805b42ad3a6a645fb6f"/><file name="handledetails.phtml" hash="e24e48a597817fdbff2c474fa5cf2c9a"/><file name="layout.phtml" hash="cabae1232ed3c36df2194b7c8ed1aeba"/><file name="logdetails.phtml" hash="ed71a2facfe2a2b630e9f532ae84f1fa"/><file name="logs.phtml" hash="1f165856e61b67db3456acd5e23bf4a1"/><file name="models.phtml" hash="496cb60e17b91e967153450b2c8e44dd"/><file name="performance.phtml" hash="ba09274957f58ff223233bcc60e18ad4"/><file name="preferences.phtml" hash="c3234a8eab0ab61ec5a9baf1cbdd1c0c"/><file name="simplepanel.phtml" hash="e25f827850caeeb542caa6c3e389379c"/><file name="utils.phtml" hash="d3554c17eed75cdcb87c1d9351b9666a"/><file name="versions.phtml" hash="37c089ff3dca334f887c0fdb230ce6da"/></dir></dir><dir name="layout"><dir name="olctw_debug"><file name="debug.xml" hash="b775c800fecf8b2d0fef6ed9da9f4690"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="olctw_debug"><file name="arrayformat.phtml" hash="182e206b9e3298c75b842cded4d0e082"/><file name="blocks.phtml" hash="e303425969eb0aafb47e744e5e7b19e5"/><file name="config.phtml" hash="ae389d2f340a5fe7d3ae40a683368065"/><file name="configsearch.phtml" hash="ca657bd4f91e6d8726c551c69ba4d576"/><file name="controller.phtml" hash="2c66129f8fa003b18bf32d3e4a85aa7d"/><file name="debug.phtml" hash="73011bb170e7611b8bb9c70e5ab82d6c"/><file name="groupedclasssearch.phtml" hash="9a15022d9cb41805b42ad3a6a645fb6f"/><file name="handledetails.phtml" hash="e24e48a597817fdbff2c474fa5cf2c9a"/><file name="layout.phtml" hash="cabae1232ed3c36df2194b7c8ed1aeba"/><file name="logdetails.phtml" hash="ed71a2facfe2a2b630e9f532ae84f1fa"/><file name="logs.phtml" hash="1f165856e61b67db3456acd5e23bf4a1"/><file name="models.phtml" hash="496cb60e17b91e967153450b2c8e44dd"/><file name="performance.phtml" hash="ba09274957f58ff223233bcc60e18ad4"/><file name="preferences.phtml" hash="c3234a8eab0ab61ec5a9baf1cbdd1c0c"/><file name="simplepanel.phtml" hash="e25f827850caeeb542caa6c3e389379c"/><file name="utils.phtml" hash="d3554c17eed75cdcb87c1d9351b9666a"/><file name="versions.phtml" hash="37c089ff3dca334f887c0fdb230ce6da"/></dir></dir><dir name="layout"><dir name="olctw_debug"><file name="debug.xml" hash="b775c800fecf8b2d0fef6ed9da9f4690"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Olctw_Debug.xml" hash="fa7f2e82090d08d7d22b29cc33967249"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="olctw_debug"><dir name="css"><file name="toolbar.css" hash="a27ddb92c1a40d7f939259f3bf918419"/></dir><dir name="img"><file name="back.png" hash="64efd4aff01ee220183867b295390dc9"/><file name="back_hover.png" hash="2f40a29790969f1dc280740f2351cb34"/><file name="close.png" hash="6c12b2e804cc3027942473db15a03f48"/><file name="close_hover.png" hash="cc81bbd1cf1acb56325f590a55f88988"/><file name="djdt_vertical.png" hash="504d215839926b66de611020af6de7f0"/><file name="indicator.png" hash="b5677e8869a359a8941fd2fc3b5553f4"/><file name="loader.gif" hash="31f39e1edfd811606e45e4de38f16a49"/><file name="panel_bg.png" hash="0eabad5fe24f2dab304977b924040b8d"/></dir><dir name="js"><file name="jquery.cookie.js" hash="384772142d1907d7d3aea3ac11fad9d0"/><file name="jquery.js" hash="03733a1e6214125f2ebb5eade76b2561"/><file name="toolbar.js" hash="fafa0a4862e046c9aad1cb4d64ee9a4f"/></dir></dir></dir></dir></dir></target></contents>
|
| 16 |
+
<compatible/>
|
| 17 |
+
<dependencies><required><php><min>5.0.0</min><max>6.0.0</max></php></required></dependencies>
|
| 18 |
+
</package>
|
skin/frontend/base/default/olctw_debug/css/toolbar.css
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Debug Toolbar CSS Reset, adapted from Eric Meyer's CSS Reset */
|
| 2 |
+
#djDebug {color:#000;background:#FFF;}
|
| 3 |
+
#djDebug, #djDebug div, #djDebug span, #djDebug applet, #djDebug object, #djDebug iframe,
|
| 4 |
+
#djDebug h1, #djDebug h2, #djDebug h3, #djDebug h4, #djDebug h5, #djDebug h6, #djDebug p, #djDebug blockquote, #djDebug pre,
|
| 5 |
+
#djDebug a, #djDebug abbr, #djDebug acronym, #djDebug address, #djDebug big, #djDebug cite, #djDebug code,
|
| 6 |
+
#djDebug del, #djDebug dfn, #djDebug em, #djDebug font, #djDebug img, #djDebug ins, #djDebug kbd, #djDebug q, #djDebug s, #djDebug samp,
|
| 7 |
+
#djDebug small, #djDebug strike, #djDebug strong, #djDebug sub, #djDebug sup, #djDebug tt, #djDebug var,
|
| 8 |
+
#djDebug b, #djDebug u, #djDebug i, #djDebug center,
|
| 9 |
+
#djDebug dl, #djDebug dt, #djDebug dd, #djDebug ol, #djDebug ul, #djDebug li,
|
| 10 |
+
#djDebug fieldset, #djDebug form, #djDebug label, #djDebug legend,
|
| 11 |
+
#djDebug table, #djDebug caption, #djDebug tbody, #djDebug tfoot, #djDebug thead, #djDebug tr, #djDebug th, #djDebug td {
|
| 12 |
+
margin:0;
|
| 13 |
+
padding:0;
|
| 14 |
+
border:0;
|
| 15 |
+
outline:0;
|
| 16 |
+
font-size:12px;
|
| 17 |
+
line-height:1.5em;
|
| 18 |
+
color:#000;
|
| 19 |
+
vertical-align:baseline;
|
| 20 |
+
background:transparent;
|
| 21 |
+
font-family:sans-serif;
|
| 22 |
+
text-align:left;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
#djDebug #djDebugToolbar {
|
| 26 |
+
background:#111;
|
| 27 |
+
width:200px;
|
| 28 |
+
z-index:100000000;
|
| 29 |
+
position:fixed;
|
| 30 |
+
top:0;
|
| 31 |
+
bottom:0;
|
| 32 |
+
right:0;
|
| 33 |
+
opacity:0.9;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
#djDebug #djDebugToolbar small {
|
| 37 |
+
color:#999;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
#djDebug #djDebugToolbar ul {
|
| 41 |
+
margin:0;
|
| 42 |
+
padding:0;
|
| 43 |
+
list-style:none;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
#djDebug #djDebugToolbar li {
|
| 47 |
+
border-bottom:1px solid #222;
|
| 48 |
+
color:#fff;
|
| 49 |
+
display:block;
|
| 50 |
+
font-weight:bold;
|
| 51 |
+
float:none;
|
| 52 |
+
margin:0;
|
| 53 |
+
padding:0;
|
| 54 |
+
position:relative;
|
| 55 |
+
width:auto;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
#djDebug #djDebugToolbar li>a,
|
| 59 |
+
#djDebug #djDebugToolbar li>div.contentless {
|
| 60 |
+
font-weight:normal;
|
| 61 |
+
font-style:normal;
|
| 62 |
+
text-decoration:none;
|
| 63 |
+
display:block;
|
| 64 |
+
font-size:16px;
|
| 65 |
+
padding:10px 10px 5px 25px;
|
| 66 |
+
color:#fff;
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
#djDebug #djDebugToolbar li a:hover {
|
| 70 |
+
color:#111;
|
| 71 |
+
background-color:#ffc;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
#djDebug #djDebugToolbar li.active {
|
| 75 |
+
background-image:url(../img/indicator.png);
|
| 76 |
+
background-repeat:no-repeat;
|
| 77 |
+
background-position:left center;
|
| 78 |
+
background-color:#333;
|
| 79 |
+
padding-left:10px;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
#djDebug #djDebugToolbar li.active a:hover {
|
| 83 |
+
color:#b36a60;
|
| 84 |
+
background-color:transparent;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
#djDebug #djDebugToolbar li small {
|
| 88 |
+
font-size:12px;
|
| 89 |
+
color:#999;
|
| 90 |
+
font-style:normal;
|
| 91 |
+
text-decoration:none;
|
| 92 |
+
font-variant:small-caps;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
#djDebug #djDebugToolbarHandle {
|
| 96 |
+
position:fixed;
|
| 97 |
+
background:#fff;
|
| 98 |
+
border:1px solid #111;
|
| 99 |
+
top:30px;
|
| 100 |
+
right:0;
|
| 101 |
+
z-index:100000000;
|
| 102 |
+
opacity:0.75;
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
#djDebug a#djShowToolBarButton {
|
| 106 |
+
display:block;
|
| 107 |
+
height:75px;
|
| 108 |
+
width:30px;
|
| 109 |
+
border-right:none;
|
| 110 |
+
border-bottom:4px solid #fff;
|
| 111 |
+
border-top:4px solid #fff;
|
| 112 |
+
border-left:4px solid #fff;
|
| 113 |
+
color:#fff;
|
| 114 |
+
font-size:10px;
|
| 115 |
+
font-weight:bold;
|
| 116 |
+
text-decoration:none;
|
| 117 |
+
text-align:center;
|
| 118 |
+
text-indent:-999999px;
|
| 119 |
+
background:#000 url(../img/djdt_vertical.png) no-repeat left center;
|
| 120 |
+
opacity:0.5;
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
#djDebug a#djShowToolBarButton:hover {
|
| 124 |
+
background-color:#111;
|
| 125 |
+
padding-right:6px;
|
| 126 |
+
border-top-color:#FFE761;
|
| 127 |
+
border-left-color:#FFE761;
|
| 128 |
+
border-bottom-color:#FFE761;
|
| 129 |
+
opacity:1.0;
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
#djDebug code {
|
| 133 |
+
display:block;
|
| 134 |
+
font-family:Consolas, Monaco, "Bitstream Vera Sans Mono", "Lucida Console", monospace;
|
| 135 |
+
white-space:pre;
|
| 136 |
+
overflow:auto;
|
| 137 |
+
}
|
| 138 |
+
|
| 139 |
+
#djDebug code span {
|
| 140 |
+
font-family:Consolas, Monaco, "Bitstream Vera Sans Mono", "Lucida Console", monospace;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
#djDebug tr.djDebugOdd {
|
| 144 |
+
background-color:#f5f5f5;
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
#djDebug .panelContent {
|
| 148 |
+
display:none;
|
| 149 |
+
position:fixed;
|
| 150 |
+
margin:0;
|
| 151 |
+
top:0;
|
| 152 |
+
right:200px;
|
| 153 |
+
bottom:0;
|
| 154 |
+
left:0px;
|
| 155 |
+
background-color:#eee;
|
| 156 |
+
color:#666;
|
| 157 |
+
z-index:100000000;
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
#djDebug .panelContent > div {
|
| 161 |
+
border-bottom:1px solid #ddd;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
#djDebug .djDebugPanelTitle {
|
| 165 |
+
position:absolute;
|
| 166 |
+
background-color:#ffc;
|
| 167 |
+
color:#666;
|
| 168 |
+
padding-left:20px;
|
| 169 |
+
top:0;
|
| 170 |
+
right:0;
|
| 171 |
+
left:0;
|
| 172 |
+
height:50px;
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
#djDebug .djDebugPanelTitle code {
|
| 176 |
+
display:inline;
|
| 177 |
+
font-size:inherit;
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
#djDebug .djDebugPanelContent {
|
| 181 |
+
position:absolute;
|
| 182 |
+
top:50px;
|
| 183 |
+
right:0;
|
| 184 |
+
bottom:0;
|
| 185 |
+
left:0;
|
| 186 |
+
height:auto;
|
| 187 |
+
padding:0 0 0 20px;
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
#djDebug .djDebugPanelContent .scroll {
|
| 191 |
+
height:100%;
|
| 192 |
+
overflow:auto;
|
| 193 |
+
display:block;
|
| 194 |
+
padding:0 10px 0 0;
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
#djDebug h3 {
|
| 198 |
+
font-size:24px;
|
| 199 |
+
font-weight:normal;
|
| 200 |
+
line-height:50px;
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
#djDebug h4 {
|
| 204 |
+
font-size:20px;
|
| 205 |
+
font-weight:bold;
|
| 206 |
+
margin-top:0.8em;
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
#djDebug .panelContent table {
|
| 210 |
+
border:1px solid #ccc;
|
| 211 |
+
border-collapse:collapse;
|
| 212 |
+
width:100%;
|
| 213 |
+
background-color:#fff;
|
| 214 |
+
display:block;
|
| 215 |
+
margin-top:0.8em;
|
| 216 |
+
overflow: auto;
|
| 217 |
+
}
|
| 218 |
+
#djDebug .panelContent tbody td,
|
| 219 |
+
#djDebug .panelContent tbody th {
|
| 220 |
+
vertical-align:top;
|
| 221 |
+
padding:2px 3px;
|
| 222 |
+
}
|
| 223 |
+
#djDebug .panelContent thead th {
|
| 224 |
+
padding:1px 6px 1px 3px;
|
| 225 |
+
text-align:left;
|
| 226 |
+
font-weight:bold;
|
| 227 |
+
font-size:14px;
|
| 228 |
+
}
|
| 229 |
+
#djDebug .panelContent tbody th {
|
| 230 |
+
width:12em;
|
| 231 |
+
text-align:right;
|
| 232 |
+
color:#666;
|
| 233 |
+
padding-right:.5em;
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
#djDebug .djTemplateHideContextDiv {
|
| 237 |
+
background-color:#fff;
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
/*
|
| 241 |
+
#djDebug .panelContent p a:hover, #djDebug .panelContent dd a:hover {
|
| 242 |
+
color:#111;
|
| 243 |
+
background-color:#ffc;
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
#djDebug .panelContent p {
|
| 247 |
+
padding:0 5px;
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
#djDebug .panelContent p, #djDebug .panelContent table, #djDebug .panelContent ol, #djDebug .panelContent ul, #djDebug .panelContent dl {
|
| 251 |
+
margin:5px 0 15px;
|
| 252 |
+
background-color:#fff;
|
| 253 |
+
}
|
| 254 |
+
#djDebug .panelContent table {
|
| 255 |
+
clear:both;
|
| 256 |
+
border:0;
|
| 257 |
+
padding:0;
|
| 258 |
+
margin:0;
|
| 259 |
+
border-collapse:collapse;
|
| 260 |
+
border-spacing:0;
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
#djDebug .panelContent table a {
|
| 264 |
+
color:#000;
|
| 265 |
+
padding:2px 4px;
|
| 266 |
+
}
|
| 267 |
+
#djDebug .panelContent table a:hover {
|
| 268 |
+
background-color:#ffc;
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
#djDebug .panelContent table th {
|
| 272 |
+
background-color:#333;
|
| 273 |
+
font-weight:bold;
|
| 274 |
+
color:#fff;
|
| 275 |
+
padding:3px 7px 3px;
|
| 276 |
+
text-align:left;
|
| 277 |
+
cursor:pointer;
|
| 278 |
+
}
|
| 279 |
+
#djDebug .panelContent table td {
|
| 280 |
+
padding:5px 10px;
|
| 281 |
+
font-size:14px;
|
| 282 |
+
background:#fff;
|
| 283 |
+
color:#000;
|
| 284 |
+
vertical-align:top;
|
| 285 |
+
border:0;
|
| 286 |
+
}
|
| 287 |
+
#djDebug .panelContent table tr.djDebugOdd td {
|
| 288 |
+
background:#eee;
|
| 289 |
+
}
|
| 290 |
+
*/
|
| 291 |
+
|
| 292 |
+
#djDebug .panelContent .djDebugClose {
|
| 293 |
+
text-indent:-9999999px;
|
| 294 |
+
display:block;
|
| 295 |
+
position:absolute;
|
| 296 |
+
top:4px;
|
| 297 |
+
right:15px;
|
| 298 |
+
height:40px;
|
| 299 |
+
width:40px;
|
| 300 |
+
background:url(../img/close.png) no-repeat center center;
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
#djDebug .panelContent .djDebugClose:hover {
|
| 304 |
+
background-image:url(../img/close_hover.png);
|
| 305 |
+
}
|
| 306 |
+
|
| 307 |
+
#djDebug .panelContent .djDebugClose.djDebugBack {
|
| 308 |
+
background-image:url(../img/back.png);
|
| 309 |
+
}
|
| 310 |
+
|
| 311 |
+
#djDebug .panelContent .djDebugClose.djDebugBack:hover {
|
| 312 |
+
background-image:url(../img/back_hover.png);
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
+
#djDebug .panelContent dt, #djDebug .panelContent dd {
|
| 316 |
+
display:block;
|
| 317 |
+
}
|
| 318 |
+
|
| 319 |
+
#djDebug .panelContent dt {
|
| 320 |
+
margin-top:0.75em;
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
#djDebug .panelContent dd {
|
| 324 |
+
margin-left:10px;
|
| 325 |
+
}
|
| 326 |
+
|
| 327 |
+
#djDebug a.toggleTemplate {
|
| 328 |
+
padding:4px;
|
| 329 |
+
background-color:#bbb;
|
| 330 |
+
-moz-border-radius:3px;
|
| 331 |
+
-webkit-border-radius:3px;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
#djDebug a.toggleTemplate:hover {
|
| 335 |
+
padding:4px;
|
| 336 |
+
background-color:#444;
|
| 337 |
+
color:#ffe761;
|
| 338 |
+
-moz-border-radius:3px;
|
| 339 |
+
-webkit-border-radius:3px;
|
| 340 |
+
}
|
| 341 |
+
|
| 342 |
+
|
| 343 |
+
#djDebug a.djTemplateShowContext, #djDebug a.djTemplateShowContext span.toggleArrow {
|
| 344 |
+
color:#999;
|
| 345 |
+
}
|
| 346 |
+
|
| 347 |
+
#djDebug a.djTemplateShowContext:hover, #djDebug a.djTemplateShowContext:hover span.toggleArrow {
|
| 348 |
+
color:#000;
|
| 349 |
+
cursor:pointer;
|
| 350 |
+
}
|
| 351 |
+
|
| 352 |
+
#djDebug .djDebugSqlWrap {
|
| 353 |
+
position:relative;
|
| 354 |
+
}
|
| 355 |
+
|
| 356 |
+
#djDebug .djDebugSql {
|
| 357 |
+
z-index:100000002;
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
#djDebug .djSQLHideStacktraceDiv tbody th {
|
| 361 |
+
text-align: left;
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
#djDebug .djSqlExplain td {
|
| 365 |
+
white-space: pre;
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
#djDebug span.djDebugLineChart {
|
| 369 |
+
background-color:#777;
|
| 370 |
+
height:3px;
|
| 371 |
+
position:absolute;
|
| 372 |
+
bottom:0;
|
| 373 |
+
top:0;
|
| 374 |
+
left:0;
|
| 375 |
+
display:block;
|
| 376 |
+
z-index:1000000001;
|
| 377 |
+
}
|
| 378 |
+
#djDebug span.djDebugLineChartWarning {
|
| 379 |
+
background-color:#900;
|
| 380 |
+
}
|
| 381 |
+
|
| 382 |
+
#djDebug .highlight { color:#000; }
|
| 383 |
+
#djDebug .highlight .err { color:#000; } /* Error */
|
| 384 |
+
#djDebug .highlight .g { color:#000; } /* Generic */
|
| 385 |
+
#djDebug .highlight .k { color:#000; font-weight:bold } /* Keyword */
|
| 386 |
+
#djDebug .highlight .o { color:#000; } /* Operator */
|
| 387 |
+
#djDebug .highlight .n { color:#000; } /* Name */
|
| 388 |
+
#djDebug .highlight .mi { color:#000; font-weight:bold } /* Literal.Number.Integer */
|
| 389 |
+
#djDebug .highlight .l { color:#000; } /* Literal */
|
| 390 |
+
#djDebug .highlight .x { color:#000; } /* Other */
|
| 391 |
+
#djDebug .highlight .p { color:#000; } /* Punctuation */
|
| 392 |
+
#djDebug .highlight .m { color:#000; font-weight:bold } /* Literal.Number */
|
| 393 |
+
#djDebug .highlight .s { color:#333 } /* Literal.String */
|
| 394 |
+
#djDebug .highlight .w { color:#888888 } /* Text.Whitespace */
|
| 395 |
+
#djDebug .highlight .il { color:#000; font-weight:bold } /* Literal.Number.Integer.Long */
|
| 396 |
+
#djDebug .highlight .na { color:#333 } /* Name.Attribute */
|
| 397 |
+
#djDebug .highlight .nt { color:#000; font-weight:bold } /* Name.Tag */
|
| 398 |
+
#djDebug .highlight .nv { color:#333 } /* Name.Variable */
|
| 399 |
+
#djDebug .highlight .s2 { color:#333 } /* Literal.String.Double */
|
| 400 |
+
#djDebug .highlight .cp { color:#333 } /* Comment.Preproc */
|
| 401 |
+
|
| 402 |
+
#djDebug div.loader { background: url(../img/loader.gif); margin: 100px auto; width: 64px; height: 64px; border: none; }
|
skin/frontend/base/default/olctw_debug/img/back.png
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/img/back_hover.png
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/img/close.png
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/img/close_hover.png
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/img/djdt_vertical.png
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/img/indicator.png
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/img/loader.gif
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/img/panel_bg.png
ADDED
|
Binary file
|
skin/frontend/base/default/olctw_debug/js/jquery.cookie.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* Cookie plugin
|
| 3 |
+
*
|
| 4 |
+
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
|
| 5 |
+
* Dual licensed under the MIT and GPL licenses:
|
| 6 |
+
* http://www.opensource.org/licenses/mit-license.php
|
| 7 |
+
* http://www.gnu.org/licenses/gpl.html
|
| 8 |
+
*
|
| 9 |
+
*/
|
| 10 |
+
|
| 11 |
+
/**
|
| 12 |
+
* Create a cookie with the given name and value and other optional parameters.
|
| 13 |
+
*
|
| 14 |
+
* @example $.cookie('the_cookie', 'the_value');
|
| 15 |
+
* @desc Set the value of a cookie.
|
| 16 |
+
* @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
|
| 17 |
+
* @desc Create a cookie with all available options.
|
| 18 |
+
* @example $.cookie('the_cookie', 'the_value');
|
| 19 |
+
* @desc Create a session cookie.
|
| 20 |
+
* @example $.cookie('the_cookie', null);
|
| 21 |
+
* @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
|
| 22 |
+
* used when the cookie was set.
|
| 23 |
+
*
|
| 24 |
+
* @param String name The name of the cookie.
|
| 25 |
+
* @param String value The value of the cookie.
|
| 26 |
+
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
|
| 27 |
+
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
|
| 28 |
+
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
|
| 29 |
+
* If set to null or omitted, the cookie will be a session cookie and will not be retained
|
| 30 |
+
* when the the browser exits.
|
| 31 |
+
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
|
| 32 |
+
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
|
| 33 |
+
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
|
| 34 |
+
* require a secure protocol (like HTTPS).
|
| 35 |
+
* @type undefined
|
| 36 |
+
*
|
| 37 |
+
* @name $.cookie
|
| 38 |
+
* @cat Plugins/Cookie
|
| 39 |
+
* @author Klaus Hartl/klaus.hartl@stilbuero.de
|
| 40 |
+
*/
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Get the value of a cookie with the given name.
|
| 44 |
+
*
|
| 45 |
+
* @example $.cookie('the_cookie');
|
| 46 |
+
* @desc Get the value of a cookie.
|
| 47 |
+
*
|
| 48 |
+
* @param String name The name of the cookie.
|
| 49 |
+
* @return The value of the cookie.
|
| 50 |
+
* @type String
|
| 51 |
+
*
|
| 52 |
+
* @name $.cookie
|
| 53 |
+
* @cat Plugins/Cookie
|
| 54 |
+
* @author Klaus Hartl/klaus.hartl@stilbuero.de
|
| 55 |
+
*/
|
| 56 |
+
jQuery.cookie = function(name, value, options) {
|
| 57 |
+
if (typeof value != 'undefined') { // name and value given, set cookie
|
| 58 |
+
options = options || {};
|
| 59 |
+
if (value === null) {
|
| 60 |
+
value = '';
|
| 61 |
+
options.expires = -1;
|
| 62 |
+
}
|
| 63 |
+
var expires = '';
|
| 64 |
+
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
|
| 65 |
+
var date;
|
| 66 |
+
if (typeof options.expires == 'number') {
|
| 67 |
+
date = new Date();
|
| 68 |
+
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
|
| 69 |
+
} else {
|
| 70 |
+
date = options.expires;
|
| 71 |
+
}
|
| 72 |
+
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
|
| 73 |
+
}
|
| 74 |
+
// CAUTION: Needed to parenthesize options.path and options.domain
|
| 75 |
+
// in the following expressions, otherwise they evaluate to undefined
|
| 76 |
+
// in the packed version for some reason...
|
| 77 |
+
var path = options.path ? '; path=' + (options.path) : '';
|
| 78 |
+
var domain = options.domain ? '; domain=' + (options.domain) : '';
|
| 79 |
+
var secure = options.secure ? '; secure' : '';
|
| 80 |
+
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
|
| 81 |
+
} else { // only name given, get cookie
|
| 82 |
+
var cookieValue = null;
|
| 83 |
+
if (document.cookie && document.cookie != '') {
|
| 84 |
+
var cookies = document.cookie.split(';');
|
| 85 |
+
for (var i = 0; i < cookies.length; i++) {
|
| 86 |
+
var cookie = jQuery.trim(cookies[i]);
|
| 87 |
+
// Does this cookie string begin with the name we want?
|
| 88 |
+
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
| 89 |
+
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
| 90 |
+
break;
|
| 91 |
+
}
|
| 92 |
+
}
|
| 93 |
+
}
|
| 94 |
+
return cookieValue;
|
| 95 |
+
}
|
| 96 |
+
};
|
skin/frontend/base/default/olctw_debug/js/jquery.js
ADDED
|
@@ -0,0 +1,3180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* jQuery JavaScript Library v1.4.1
|
| 3 |
+
* http://jquery.com/
|
| 4 |
+
*
|
| 5 |
+
* Copyright 2010, John Resig
|
| 6 |
+
* Dual licensed under the MIT or GPL Version 2 licenses.
|
| 7 |
+
* http://jquery.org/license
|
| 8 |
+
*
|
| 9 |
+
* Includes Sizzle.js
|
| 10 |
+
* http://sizzlejs.com/
|
| 11 |
+
* Copyright 2010, The Dojo Foundation
|
| 12 |
+
* Released under the MIT, BSD, and GPL Licenses.
|
| 13 |
+
*
|
| 14 |
+
* Date: Mon Jan 25 19:43:33 2010 -0500
|
| 15 |
+
*/
|
| 16 |
+
(function(z,v){
|
| 17 |
+
function la(){
|
| 18 |
+
if(!c.isReady){
|
| 19 |
+
try{
|
| 20 |
+
r.documentElement.doScroll("left")
|
| 21 |
+
}catch(a){
|
| 22 |
+
setTimeout(la,1);
|
| 23 |
+
return
|
| 24 |
+
}
|
| 25 |
+
c.ready()
|
| 26 |
+
}
|
| 27 |
+
}
|
| 28 |
+
function Ma(a,b){
|
| 29 |
+
b.src?c.ajax({
|
| 30 |
+
url:b.src,
|
| 31 |
+
async:false,
|
| 32 |
+
dataType:"script"
|
| 33 |
+
}):c.globalEval(b.text||b.textContent||b.innerHTML||"");
|
| 34 |
+
b.parentNode&&b.parentNode.removeChild(b)
|
| 35 |
+
}
|
| 36 |
+
function X(a,b,d,f,e,i){
|
| 37 |
+
var j=a.length;
|
| 38 |
+
if(typeof b==="object"){
|
| 39 |
+
for(var n in b)X(a,n,b[n],f,e,d);return a
|
| 40 |
+
}
|
| 41 |
+
if(d!==v){
|
| 42 |
+
f=!i&&f&&c.isFunction(d);
|
| 43 |
+
for(n=0;n<j;n++)e(a[n],b,f?d.call(a[n],n,e(a[n],b)):d,i);
|
| 44 |
+
return a
|
| 45 |
+
}
|
| 46 |
+
return j?
|
| 47 |
+
e(a[0],b):null
|
| 48 |
+
}
|
| 49 |
+
function J(){
|
| 50 |
+
return(new Date).getTime()
|
| 51 |
+
}
|
| 52 |
+
function Y(){
|
| 53 |
+
return false
|
| 54 |
+
}
|
| 55 |
+
function Z(){
|
| 56 |
+
return true
|
| 57 |
+
}
|
| 58 |
+
function ma(a,b,d){
|
| 59 |
+
d[0].type=a;
|
| 60 |
+
return c.event.handle.apply(b,d)
|
| 61 |
+
}
|
| 62 |
+
function na(a){
|
| 63 |
+
var b,d=[],f=[],e=arguments,i,j,n,o,m,s,x=c.extend({},c.data(this,"events").live);
|
| 64 |
+
if(!(a.button&&a.type==="click")){
|
| 65 |
+
for(o in x){
|
| 66 |
+
j=x[o];
|
| 67 |
+
if(j.live===a.type||j.altLive&&c.inArray(a.type,j.altLive)>-1){
|
| 68 |
+
i=j.data;
|
| 69 |
+
i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)
|
| 70 |
+
}else delete x[o]
|
| 71 |
+
}
|
| 72 |
+
i=c(a.target).closest(f,
|
| 73 |
+
a.currentTarget);
|
| 74 |
+
m=0;
|
| 75 |
+
for(s=i.length;m<s;m++)for(o in x){
|
| 76 |
+
j=x[o];
|
| 77 |
+
n=i[m].elem;
|
| 78 |
+
f=null;
|
| 79 |
+
if(i[m].selector===j.selector){
|
| 80 |
+
if(j.live==="mouseenter"||j.live==="mouseleave")f=c(a.relatedTarget).closest(j.selector)[0];
|
| 81 |
+
if(!f||f!==n)d.push({
|
| 82 |
+
elem:n,
|
| 83 |
+
fn:j
|
| 84 |
+
})
|
| 85 |
+
}
|
| 86 |
+
}
|
| 87 |
+
m=0;
|
| 88 |
+
for(s=d.length;m<s;m++){
|
| 89 |
+
i=d[m];
|
| 90 |
+
a.currentTarget=i.elem;
|
| 91 |
+
a.data=i.fn.data;
|
| 92 |
+
if(i.fn.apply(i.elem,e)===false){
|
| 93 |
+
b=false;
|
| 94 |
+
break
|
| 95 |
+
}
|
| 96 |
+
}
|
| 97 |
+
return b
|
| 98 |
+
}
|
| 99 |
+
}
|
| 100 |
+
function oa(a,b){
|
| 101 |
+
return"live."+(a?a+".":"")+b.replace(/\./g,"`").replace(/ /g,"&")
|
| 102 |
+
}
|
| 103 |
+
function pa(a){
|
| 104 |
+
return!a||!a.parentNode||a.parentNode.nodeType===
|
| 105 |
+
11
|
| 106 |
+
}
|
| 107 |
+
function qa(a,b){
|
| 108 |
+
var d=0;
|
| 109 |
+
b.each(function(){
|
| 110 |
+
if(this.nodeName===(a[d]&&a[d].nodeName)){
|
| 111 |
+
var f=c.data(a[d++]),e=c.data(this,f);
|
| 112 |
+
if(f=f&&f.events){
|
| 113 |
+
delete e.handle;
|
| 114 |
+
e.events={};
|
| 115 |
+
|
| 116 |
+
for(var i in f)for(var j in f[i])c.event.add(this,i,f[i][j],f[i][j].data)
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
})
|
| 120 |
+
}
|
| 121 |
+
function ra(a,b,d){
|
| 122 |
+
var f,e,i;
|
| 123 |
+
if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&a[0].indexOf("<option")<0&&(c.support.checkClone||!sa.test(a[0]))){
|
| 124 |
+
e=true;
|
| 125 |
+
if(i=c.fragments[a[0]])if(i!==1)f=i
|
| 126 |
+
}
|
| 127 |
+
if(!f){
|
| 128 |
+
b=b&&b[0]?b[0].ownerDocument||b[0]:r;
|
| 129 |
+
f=b.createDocumentFragment();
|
| 130 |
+
c.clean(a,b,f,d)
|
| 131 |
+
}
|
| 132 |
+
if(e)c.fragments[a[0]]=i?f:1;
|
| 133 |
+
return{
|
| 134 |
+
fragment:f,
|
| 135 |
+
cacheable:e
|
| 136 |
+
}
|
| 137 |
+
}
|
| 138 |
+
function K(a,b){
|
| 139 |
+
var d={};
|
| 140 |
+
|
| 141 |
+
c.each(ta.concat.apply([],ta.slice(0,b)),function(){
|
| 142 |
+
d[this]=a
|
| 143 |
+
});
|
| 144 |
+
return d
|
| 145 |
+
}
|
| 146 |
+
function ua(a){
|
| 147 |
+
return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false
|
| 148 |
+
}
|
| 149 |
+
var c=function(a,b){
|
| 150 |
+
return new c.fn.init(a,b)
|
| 151 |
+
},Na=z.jQuery,Oa=z.$,r=z.document,S,Pa=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Qa=/^.[^:#\[\.,]*$/,Ra=/\S/,Sa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Ta=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,O=navigator.userAgent,
|
| 152 |
+
va=false,P=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,Q=Array.prototype.slice,wa=Array.prototype.indexOf;
|
| 153 |
+
c.fn=c.prototype={
|
| 154 |
+
init:function(a,b){
|
| 155 |
+
var d,f;
|
| 156 |
+
if(!a)return this;
|
| 157 |
+
if(a.nodeType){
|
| 158 |
+
this.context=this[0]=a;
|
| 159 |
+
this.length=1;
|
| 160 |
+
return this
|
| 161 |
+
}
|
| 162 |
+
if(typeof a==="string")if((d=Pa.exec(a))&&(d[1]||!b))if(d[1]){
|
| 163 |
+
f=b?b.ownerDocument||b:r;
|
| 164 |
+
if(a=Ta.exec(a))if(c.isPlainObject(b)){
|
| 165 |
+
a=[r.createElement(a[1])];
|
| 166 |
+
c.fn.attr.call(a,b,true)
|
| 167 |
+
}else a=[f.createElement(a[1])];
|
| 168 |
+
else{
|
| 169 |
+
a=ra([d[1]],
|
| 170 |
+
[f]);
|
| 171 |
+
a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes
|
| 172 |
+
}
|
| 173 |
+
}else{
|
| 174 |
+
if(b=r.getElementById(d[2])){
|
| 175 |
+
if(b.id!==d[2])return S.find(a);
|
| 176 |
+
this.length=1;
|
| 177 |
+
this[0]=b
|
| 178 |
+
}
|
| 179 |
+
this.context=r;
|
| 180 |
+
this.selector=a;
|
| 181 |
+
return this
|
| 182 |
+
}else if(!b&&/^\w+$/.test(a)){
|
| 183 |
+
this.selector=a;
|
| 184 |
+
this.context=r;
|
| 185 |
+
a=r.getElementsByTagName(a)
|
| 186 |
+
}else return!b||b.jquery?(b||S).find(a):c(b).find(a);
|
| 187 |
+
else if(c.isFunction(a))return S.ready(a);
|
| 188 |
+
if(a.selector!==v){
|
| 189 |
+
this.selector=a.selector;
|
| 190 |
+
this.context=a.context
|
| 191 |
+
}
|
| 192 |
+
return c.isArray(a)?this.setArray(a):c.makeArray(a,
|
| 193 |
+
this)
|
| 194 |
+
},
|
| 195 |
+
selector:"",
|
| 196 |
+
jquery:"1.4.1",
|
| 197 |
+
length:0,
|
| 198 |
+
size:function(){
|
| 199 |
+
return this.length
|
| 200 |
+
},
|
| 201 |
+
toArray:function(){
|
| 202 |
+
return Q.call(this,0)
|
| 203 |
+
},
|
| 204 |
+
get:function(a){
|
| 205 |
+
return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]
|
| 206 |
+
},
|
| 207 |
+
pushStack:function(a,b,d){
|
| 208 |
+
a=c(a||null);
|
| 209 |
+
a.prevObject=this;
|
| 210 |
+
a.context=this.context;
|
| 211 |
+
if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;
|
| 212 |
+
else if(b)a.selector=this.selector+"."+b+"("+d+")";
|
| 213 |
+
return a
|
| 214 |
+
},
|
| 215 |
+
setArray:function(a){
|
| 216 |
+
this.length=0;
|
| 217 |
+
ba.apply(this,a);
|
| 218 |
+
return this
|
| 219 |
+
},
|
| 220 |
+
each:function(a,b){
|
| 221 |
+
return c.each(this,
|
| 222 |
+
a,b)
|
| 223 |
+
},
|
| 224 |
+
ready:function(a){
|
| 225 |
+
c.bindReady();
|
| 226 |
+
if(c.isReady)a.call(r,c);else P&&P.push(a);
|
| 227 |
+
return this
|
| 228 |
+
},
|
| 229 |
+
eq:function(a){
|
| 230 |
+
return a===-1?this.slice(a):this.slice(a,+a+1)
|
| 231 |
+
},
|
| 232 |
+
first:function(){
|
| 233 |
+
return this.eq(0)
|
| 234 |
+
},
|
| 235 |
+
last:function(){
|
| 236 |
+
return this.eq(-1)
|
| 237 |
+
},
|
| 238 |
+
slice:function(){
|
| 239 |
+
return this.pushStack(Q.apply(this,arguments),"slice",Q.call(arguments).join(","))
|
| 240 |
+
},
|
| 241 |
+
map:function(a){
|
| 242 |
+
return this.pushStack(c.map(this,function(b,d){
|
| 243 |
+
return a.call(b,d,b)
|
| 244 |
+
}))
|
| 245 |
+
},
|
| 246 |
+
end:function(){
|
| 247 |
+
return this.prevObject||c(null)
|
| 248 |
+
},
|
| 249 |
+
push:ba,
|
| 250 |
+
sort:[].sort,
|
| 251 |
+
splice:[].splice
|
| 252 |
+
};
|
| 253 |
+
c.fn.init.prototype=c.fn;
|
| 254 |
+
c.extend=c.fn.extend=function(){
|
| 255 |
+
var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,n;
|
| 256 |
+
if(typeof a==="boolean"){
|
| 257 |
+
f=a;
|
| 258 |
+
a=arguments[1]||{};
|
| 259 |
+
|
| 260 |
+
b=2
|
| 261 |
+
}
|
| 262 |
+
if(typeof a!=="object"&&!c.isFunction(a))a={};
|
| 263 |
+
|
| 264 |
+
if(d===b){
|
| 265 |
+
a=this;
|
| 266 |
+
--b
|
| 267 |
+
}
|
| 268 |
+
for(;b<d;b++)if((e=arguments[b])!=null)for(i in e){
|
| 269 |
+
j=a[i];
|
| 270 |
+
n=e[i];
|
| 271 |
+
if(a!==n)if(f&&n&&(c.isPlainObject(n)||c.isArray(n))){
|
| 272 |
+
j=j&&(c.isPlainObject(j)||c.isArray(j))?j:c.isArray(n)?[]:{};
|
| 273 |
+
|
| 274 |
+
a[i]=c.extend(f,j,n)
|
| 275 |
+
}else if(n!==v)a[i]=n
|
| 276 |
+
}
|
| 277 |
+
return a
|
| 278 |
+
};
|
| 279 |
+
|
| 280 |
+
c.extend({
|
| 281 |
+
noConflict:function(a){
|
| 282 |
+
z.$=
|
| 283 |
+
Oa;
|
| 284 |
+
if(a)z.jQuery=Na;
|
| 285 |
+
return c
|
| 286 |
+
},
|
| 287 |
+
isReady:false,
|
| 288 |
+
ready:function(){
|
| 289 |
+
if(!c.isReady){
|
| 290 |
+
if(!r.body)return setTimeout(c.ready,13);
|
| 291 |
+
c.isReady=true;
|
| 292 |
+
if(P){
|
| 293 |
+
for(var a,b=0;a=P[b++];)a.call(r,c);
|
| 294 |
+
P=null
|
| 295 |
+
}
|
| 296 |
+
c.fn.triggerHandler&&c(r).triggerHandler("ready")
|
| 297 |
+
}
|
| 298 |
+
},
|
| 299 |
+
bindReady:function(){
|
| 300 |
+
if(!va){
|
| 301 |
+
va=true;
|
| 302 |
+
if(r.readyState==="complete")return c.ready();
|
| 303 |
+
if(r.addEventListener){
|
| 304 |
+
r.addEventListener("DOMContentLoaded",L,false);
|
| 305 |
+
z.addEventListener("load",c.ready,false)
|
| 306 |
+
}else if(r.attachEvent){
|
| 307 |
+
r.attachEvent("onreadystatechange",L);
|
| 308 |
+
z.attachEvent("onload",
|
| 309 |
+
c.ready);
|
| 310 |
+
var a=false;
|
| 311 |
+
try{
|
| 312 |
+
a=z.frameElement==null
|
| 313 |
+
}catch(b){}
|
| 314 |
+
r.documentElement.doScroll&&a&&la()
|
| 315 |
+
}
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
isFunction:function(a){
|
| 319 |
+
return $.call(a)==="[object Function]"
|
| 320 |
+
},
|
| 321 |
+
isArray:function(a){
|
| 322 |
+
return $.call(a)==="[object Array]"
|
| 323 |
+
},
|
| 324 |
+
isPlainObject:function(a){
|
| 325 |
+
if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;
|
| 326 |
+
if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,"isPrototypeOf"))return false;
|
| 327 |
+
var b;
|
| 328 |
+
for(b in a);return b===v||aa.call(a,b)
|
| 329 |
+
},
|
| 330 |
+
isEmptyObject:function(a){
|
| 331 |
+
for(var b in a)return false;
|
| 332 |
+
return true
|
| 333 |
+
},
|
| 334 |
+
error:function(a){
|
| 335 |
+
throw a;
|
| 336 |
+
},
|
| 337 |
+
parseJSON:function(a){
|
| 338 |
+
if(typeof a!=="string"||!a)return null;
|
| 339 |
+
if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return z.JSON&&z.JSON.parse?z.JSON.parse(a):(new Function("return "+a))();else c.error("Invalid JSON: "+a)
|
| 340 |
+
},
|
| 341 |
+
noop:function(){},
|
| 342 |
+
globalEval:function(a){
|
| 343 |
+
if(a&&Ra.test(a)){
|
| 344 |
+
var b=r.getElementsByTagName("head")[0]||
|
| 345 |
+
r.documentElement,d=r.createElement("script");
|
| 346 |
+
d.type="text/javascript";
|
| 347 |
+
if(c.support.scriptEval)d.appendChild(r.createTextNode(a));else d.text=a;
|
| 348 |
+
b.insertBefore(d,b.firstChild);
|
| 349 |
+
b.removeChild(d)
|
| 350 |
+
}
|
| 351 |
+
},
|
| 352 |
+
nodeName:function(a,b){
|
| 353 |
+
return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()
|
| 354 |
+
},
|
| 355 |
+
each:function(a,b,d){
|
| 356 |
+
var f,e=0,i=a.length,j=i===v||c.isFunction(a);
|
| 357 |
+
if(d)if(j)for(f in a){
|
| 358 |
+
if(b.apply(a[f],d)===false)break
|
| 359 |
+
}else for(;e<i;){
|
| 360 |
+
if(b.apply(a[e++],d)===false)break
|
| 361 |
+
}else if(j)for(f in a){
|
| 362 |
+
if(b.call(a[f],f,a[f])===false)break
|
| 363 |
+
}else for(d=
|
| 364 |
+
a[0];e<i&&b.call(d,e,d)!==false;d=a[++e]);
|
| 365 |
+
return a
|
| 366 |
+
},
|
| 367 |
+
trim:function(a){
|
| 368 |
+
return(a||"").replace(Sa,"")
|
| 369 |
+
},
|
| 370 |
+
makeArray:function(a,b){
|
| 371 |
+
b=b||[];
|
| 372 |
+
if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);
|
| 373 |
+
return b
|
| 374 |
+
},
|
| 375 |
+
inArray:function(a,b){
|
| 376 |
+
if(b.indexOf)return b.indexOf(a);
|
| 377 |
+
for(var d=0,f=b.length;d<f;d++)if(b[d]===a)return d;return-1
|
| 378 |
+
},
|
| 379 |
+
merge:function(a,b){
|
| 380 |
+
var d=a.length,f=0;
|
| 381 |
+
if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==
|
| 382 |
+
v;)a[d++]=b[f++];
|
| 383 |
+
a.length=d;
|
| 384 |
+
return a
|
| 385 |
+
},
|
| 386 |
+
grep:function(a,b,d){
|
| 387 |
+
for(var f=[],e=0,i=a.length;e<i;e++)!d!==!b(a[e],e)&&f.push(a[e]);
|
| 388 |
+
return f
|
| 389 |
+
},
|
| 390 |
+
map:function(a,b,d){
|
| 391 |
+
for(var f=[],e,i=0,j=a.length;i<j;i++){
|
| 392 |
+
e=b(a[i],i,d);
|
| 393 |
+
if(e!=null)f[f.length]=e
|
| 394 |
+
}
|
| 395 |
+
return f.concat.apply([],f)
|
| 396 |
+
},
|
| 397 |
+
guid:1,
|
| 398 |
+
proxy:function(a,b,d){
|
| 399 |
+
if(arguments.length===2)if(typeof b==="string"){
|
| 400 |
+
d=a;
|
| 401 |
+
a=d[b];
|
| 402 |
+
b=v
|
| 403 |
+
}else if(b&&!c.isFunction(b)){
|
| 404 |
+
d=b;
|
| 405 |
+
b=v
|
| 406 |
+
}
|
| 407 |
+
if(!b&&a)b=function(){
|
| 408 |
+
return a.apply(d||this,arguments)
|
| 409 |
+
};
|
| 410 |
+
|
| 411 |
+
if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;
|
| 412 |
+
return b
|
| 413 |
+
},
|
| 414 |
+
uaMatch:function(a){
|
| 415 |
+
a=a.toLowerCase();
|
| 416 |
+
a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];
|
| 417 |
+
return{
|
| 418 |
+
browser:a[1]||"",
|
| 419 |
+
version:a[2]||"0"
|
| 420 |
+
}
|
| 421 |
+
},
|
| 422 |
+
browser:{}
|
| 423 |
+
});
|
| 424 |
+
O=c.uaMatch(O);
|
| 425 |
+
if(O.browser){
|
| 426 |
+
c.browser[O.browser]=true;
|
| 427 |
+
c.browser.version=O.version
|
| 428 |
+
}
|
| 429 |
+
if(c.browser.webkit)c.browser.safari=true;
|
| 430 |
+
if(wa)c.inArray=function(a,b){
|
| 431 |
+
return wa.call(b,a)
|
| 432 |
+
};
|
| 433 |
+
|
| 434 |
+
S=c(r);
|
| 435 |
+
if(r.addEventListener)L=function(){
|
| 436 |
+
r.removeEventListener("DOMContentLoaded",
|
| 437 |
+
L,false);
|
| 438 |
+
c.ready()
|
| 439 |
+
};
|
| 440 |
+
else if(r.attachEvent)L=function(){
|
| 441 |
+
if(r.readyState==="complete"){
|
| 442 |
+
r.detachEvent("onreadystatechange",L);
|
| 443 |
+
c.ready()
|
| 444 |
+
}
|
| 445 |
+
};
|
| 446 |
+
(function(){
|
| 447 |
+
c.support={};
|
| 448 |
+
|
| 449 |
+
var a=r.documentElement,b=r.createElement("script"),d=r.createElement("div"),f="script"+J();
|
| 450 |
+
d.style.display="none";
|
| 451 |
+
d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
| 452 |
+
var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];
|
| 453 |
+
if(!(!e||!e.length||!i)){
|
| 454 |
+
c.support=
|
| 455 |
+
|
| 456 |
+
{
|
| 457 |
+
leadingWhitespace:d.firstChild.nodeType===3,
|
| 458 |
+
tbody:!d.getElementsByTagName("tbody").length,
|
| 459 |
+
htmlSerialize:!!d.getElementsByTagName("link").length,
|
| 460 |
+
style:/red/.test(i.getAttribute("style")),
|
| 461 |
+
hrefNormalized:i.getAttribute("href")==="/a",
|
| 462 |
+
opacity:/^0.55$/.test(i.style.opacity),
|
| 463 |
+
cssFloat:!!i.style.cssFloat,
|
| 464 |
+
checkOn:d.getElementsByTagName("input")[0].value==="on",
|
| 465 |
+
optSelected:r.createElement("select").appendChild(r.createElement("option")).selected,
|
| 466 |
+
checkClone:false,
|
| 467 |
+
scriptEval:false,
|
| 468 |
+
noCloneEvent:true,
|
| 469 |
+
boxModel:null
|
| 470 |
+
};
|
| 471 |
+
b.type="text/javascript";
|
| 472 |
+
try{
|
| 473 |
+
b.appendChild(r.createTextNode("window."+f+"=1;"))
|
| 474 |
+
}catch(j){}
|
| 475 |
+
a.insertBefore(b,a.firstChild);
|
| 476 |
+
if(z[f]){
|
| 477 |
+
c.support.scriptEval=true;
|
| 478 |
+
delete z[f]
|
| 479 |
+
}
|
| 480 |
+
a.removeChild(b);
|
| 481 |
+
if(d.attachEvent&&d.fireEvent){
|
| 482 |
+
d.attachEvent("onclick",function n(){
|
| 483 |
+
c.support.noCloneEvent=false;
|
| 484 |
+
d.detachEvent("onclick",n)
|
| 485 |
+
});
|
| 486 |
+
d.cloneNode(true).fireEvent("onclick")
|
| 487 |
+
}
|
| 488 |
+
d=r.createElement("div");
|
| 489 |
+
d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";
|
| 490 |
+
a=r.createDocumentFragment();
|
| 491 |
+
a.appendChild(d.firstChild);
|
| 492 |
+
c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;
|
| 493 |
+
c(function(){
|
| 494 |
+
var n=r.createElement("div");
|
| 495 |
+
n.style.width=n.style.paddingLeft="1px";
|
| 496 |
+
r.body.appendChild(n);
|
| 497 |
+
c.boxModel=c.support.boxModel=n.offsetWidth===2;
|
| 498 |
+
r.body.removeChild(n).style.display="none"
|
| 499 |
+
});
|
| 500 |
+
a=function(n){
|
| 501 |
+
var o=r.createElement("div");
|
| 502 |
+
n="on"+n;
|
| 503 |
+
var m=n in o;
|
| 504 |
+
if(!m){
|
| 505 |
+
o.setAttribute(n,"return;");
|
| 506 |
+
m=typeof o[n]==="function"
|
| 507 |
+
}
|
| 508 |
+
return m
|
| 509 |
+
};
|
| 510 |
+
|
| 511 |
+
c.support.submitBubbles=a("submit");
|
| 512 |
+
c.support.changeBubbles=a("change");
|
| 513 |
+
a=b=d=e=i=null
|
| 514 |
+
}
|
| 515 |
+
})();
|
| 516 |
+
c.props=
|
| 517 |
+
{
|
| 518 |
+
"for":"htmlFor",
|
| 519 |
+
"class":"className",
|
| 520 |
+
readonly:"readOnly",
|
| 521 |
+
maxlength:"maxLength",
|
| 522 |
+
cellspacing:"cellSpacing",
|
| 523 |
+
rowspan:"rowSpan",
|
| 524 |
+
colspan:"colSpan",
|
| 525 |
+
tabindex:"tabIndex",
|
| 526 |
+
usemap:"useMap",
|
| 527 |
+
frameborder:"frameBorder"
|
| 528 |
+
};
|
| 529 |
+
|
| 530 |
+
var G="jQuery"+J(),Ua=0,xa={},Va={};
|
| 531 |
+
|
| 532 |
+
c.extend({
|
| 533 |
+
cache:{},
|
| 534 |
+
expando:G,
|
| 535 |
+
noData:{
|
| 536 |
+
embed:true,
|
| 537 |
+
object:true,
|
| 538 |
+
applet:true
|
| 539 |
+
},
|
| 540 |
+
data:function(a,b,d){
|
| 541 |
+
if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){
|
| 542 |
+
a=a==z?xa:a;
|
| 543 |
+
var f=a[G],e=c.cache;
|
| 544 |
+
if(!b&&!f)return null;
|
| 545 |
+
f||(f=++Ua);
|
| 546 |
+
if(typeof b==="object"){
|
| 547 |
+
a[G]=f;
|
| 548 |
+
e=e[f]=c.extend(true,
|
| 549 |
+
|
| 550 |
+
{},b)
|
| 551 |
+
}else e=e[f]?e[f]:typeof d==="undefined"?Va:(e[f]={});
|
| 552 |
+
if(d!==v){
|
| 553 |
+
a[G]=f;
|
| 554 |
+
e[b]=d
|
| 555 |
+
}
|
| 556 |
+
return typeof b==="string"?e[b]:e
|
| 557 |
+
}
|
| 558 |
+
},
|
| 559 |
+
removeData:function(a,b){
|
| 560 |
+
if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){
|
| 561 |
+
a=a==z?xa:a;
|
| 562 |
+
var d=a[G],f=c.cache,e=f[d];
|
| 563 |
+
if(b){
|
| 564 |
+
if(e){
|
| 565 |
+
delete e[b];
|
| 566 |
+
c.isEmptyObject(e)&&c.removeData(a)
|
| 567 |
+
}
|
| 568 |
+
}else{
|
| 569 |
+
try{
|
| 570 |
+
delete a[G]
|
| 571 |
+
}catch(i){
|
| 572 |
+
a.removeAttribute&&a.removeAttribute(G)
|
| 573 |
+
}
|
| 574 |
+
delete f[d]
|
| 575 |
+
}
|
| 576 |
+
}
|
| 577 |
+
}
|
| 578 |
+
});
|
| 579 |
+
c.fn.extend({
|
| 580 |
+
data:function(a,b){
|
| 581 |
+
if(typeof a==="undefined"&&this.length)return c.data(this[0]);
|
| 582 |
+
else if(typeof a==="object")return this.each(function(){
|
| 583 |
+
c.data(this,
|
| 584 |
+
a)
|
| 585 |
+
});
|
| 586 |
+
var d=a.split(".");
|
| 587 |
+
d[1]=d[1]?"."+d[1]:"";
|
| 588 |
+
if(b===v){
|
| 589 |
+
var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);
|
| 590 |
+
if(f===v&&this.length)f=c.data(this[0],a);
|
| 591 |
+
return f===v&&d[1]?this.data(d[0]):f
|
| 592 |
+
}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){
|
| 593 |
+
c.data(this,a,b)
|
| 594 |
+
})
|
| 595 |
+
},
|
| 596 |
+
removeData:function(a){
|
| 597 |
+
return this.each(function(){
|
| 598 |
+
c.removeData(this,a)
|
| 599 |
+
})
|
| 600 |
+
}
|
| 601 |
+
});
|
| 602 |
+
c.extend({
|
| 603 |
+
queue:function(a,b,d){
|
| 604 |
+
if(a){
|
| 605 |
+
b=(b||"fx")+"queue";
|
| 606 |
+
var f=c.data(a,b);
|
| 607 |
+
if(!d)return f||[];
|
| 608 |
+
if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);
|
| 609 |
+
return f
|
| 610 |
+
}
|
| 611 |
+
},
|
| 612 |
+
dequeue:function(a,b){
|
| 613 |
+
b=b||"fx";
|
| 614 |
+
var d=c.queue(a,b),f=d.shift();
|
| 615 |
+
if(f==="inprogress")f=d.shift();
|
| 616 |
+
if(f){
|
| 617 |
+
b==="fx"&&d.unshift("inprogress");
|
| 618 |
+
f.call(a,function(){
|
| 619 |
+
c.dequeue(a,b)
|
| 620 |
+
})
|
| 621 |
+
}
|
| 622 |
+
}
|
| 623 |
+
});
|
| 624 |
+
c.fn.extend({
|
| 625 |
+
queue:function(a,b){
|
| 626 |
+
if(typeof a!=="string"){
|
| 627 |
+
b=a;
|
| 628 |
+
a="fx"
|
| 629 |
+
}
|
| 630 |
+
if(b===v)return c.queue(this[0],a);
|
| 631 |
+
return this.each(function(){
|
| 632 |
+
var d=c.queue(this,a,b);
|
| 633 |
+
a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)
|
| 634 |
+
})
|
| 635 |
+
},
|
| 636 |
+
dequeue:function(a){
|
| 637 |
+
return this.each(function(){
|
| 638 |
+
c.dequeue(this,a)
|
| 639 |
+
})
|
| 640 |
+
},
|
| 641 |
+
delay:function(a,b){
|
| 642 |
+
a=c.fx?c.fx.speeds[a]||
|
| 643 |
+
a:a;
|
| 644 |
+
b=b||"fx";
|
| 645 |
+
return this.queue(b,function(){
|
| 646 |
+
var d=this;
|
| 647 |
+
setTimeout(function(){
|
| 648 |
+
c.dequeue(d,b)
|
| 649 |
+
},a)
|
| 650 |
+
})
|
| 651 |
+
},
|
| 652 |
+
clearQueue:function(a){
|
| 653 |
+
return this.queue(a||"fx",[])
|
| 654 |
+
}
|
| 655 |
+
});
|
| 656 |
+
var ya=/[\n\t]/g,ca=/\s+/,Wa=/\r/g,Xa=/href|src|style/,Ya=/(button|input)/i,Za=/(button|input|object|select|textarea)/i,$a=/^(a|area)$/i,za=/radio|checkbox/;
|
| 657 |
+
c.fn.extend({
|
| 658 |
+
attr:function(a,b){
|
| 659 |
+
return X(this,a,b,true,c.attr)
|
| 660 |
+
},
|
| 661 |
+
removeAttr:function(a){
|
| 662 |
+
return this.each(function(){
|
| 663 |
+
c.attr(this,a,"");
|
| 664 |
+
this.nodeType===1&&this.removeAttribute(a)
|
| 665 |
+
})
|
| 666 |
+
},
|
| 667 |
+
addClass:function(a){
|
| 668 |
+
if(c.isFunction(a))return this.each(function(o){
|
| 669 |
+
var m=
|
| 670 |
+
c(this);
|
| 671 |
+
m.addClass(a.call(this,o,m.attr("class")))
|
| 672 |
+
});
|
| 673 |
+
if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){
|
| 674 |
+
var e=this[d];
|
| 675 |
+
if(e.nodeType===1)if(e.className)for(var i=" "+e.className+" ",j=0,n=b.length;j<n;j++){
|
| 676 |
+
if(i.indexOf(" "+b[j]+" ")<0)e.className+=" "+b[j]
|
| 677 |
+
}else e.className=a
|
| 678 |
+
}
|
| 679 |
+
return this
|
| 680 |
+
},
|
| 681 |
+
removeClass:function(a){
|
| 682 |
+
if(c.isFunction(a))return this.each(function(o){
|
| 683 |
+
var m=c(this);
|
| 684 |
+
m.removeClass(a.call(this,o,m.attr("class")))
|
| 685 |
+
});
|
| 686 |
+
if(a&&typeof a==="string"||a===v)for(var b=(a||"").split(ca),
|
| 687 |
+
d=0,f=this.length;d<f;d++){
|
| 688 |
+
var e=this[d];
|
| 689 |
+
if(e.nodeType===1&&e.className)if(a){
|
| 690 |
+
for(var i=(" "+e.className+" ").replace(ya," "),j=0,n=b.length;j<n;j++)i=i.replace(" "+b[j]+" "," ");
|
| 691 |
+
e.className=i.substring(1,i.length-1)
|
| 692 |
+
}else e.className=""
|
| 693 |
+
}
|
| 694 |
+
return this
|
| 695 |
+
},
|
| 696 |
+
toggleClass:function(a,b){
|
| 697 |
+
var d=typeof a,f=typeof b==="boolean";
|
| 698 |
+
if(c.isFunction(a))return this.each(function(e){
|
| 699 |
+
var i=c(this);
|
| 700 |
+
i.toggleClass(a.call(this,e,i.attr("class"),b),b)
|
| 701 |
+
});
|
| 702 |
+
return this.each(function(){
|
| 703 |
+
if(d==="string")for(var e,i=0,j=c(this),n=b,o=
|
| 704 |
+
a.split(ca);e=o[i++];){
|
| 705 |
+
n=f?n:!j.hasClass(e);
|
| 706 |
+
j[n?"addClass":"removeClass"](e)
|
| 707 |
+
}else if(d==="undefined"||d==="boolean"){
|
| 708 |
+
this.className&&c.data(this,"__className__",this.className);
|
| 709 |
+
this.className=this.className||a===false?"":c.data(this,"__className__")||""
|
| 710 |
+
}
|
| 711 |
+
})
|
| 712 |
+
},
|
| 713 |
+
hasClass:function(a){
|
| 714 |
+
a=" "+a+" ";
|
| 715 |
+
for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(ya," ").indexOf(a)>-1)return true;return false
|
| 716 |
+
},
|
| 717 |
+
val:function(a){
|
| 718 |
+
if(a===v){
|
| 719 |
+
var b=this[0];
|
| 720 |
+
if(b){
|
| 721 |
+
if(c.nodeName(b,"option"))return(b.attributes.value||
|
| 722 |
+
|
| 723 |
+
{}).specified?b.value:b.text;
|
| 724 |
+
if(c.nodeName(b,"select")){
|
| 725 |
+
var d=b.selectedIndex,f=[],e=b.options;
|
| 726 |
+
b=b.type==="select-one";
|
| 727 |
+
if(d<0)return null;
|
| 728 |
+
var i=b?d:0;
|
| 729 |
+
for(d=b?d+1:e.length;i<d;i++){
|
| 730 |
+
var j=e[i];
|
| 731 |
+
if(j.selected){
|
| 732 |
+
a=c(j).val();
|
| 733 |
+
if(b)return a;
|
| 734 |
+
f.push(a)
|
| 735 |
+
}
|
| 736 |
+
}
|
| 737 |
+
return f
|
| 738 |
+
}
|
| 739 |
+
if(za.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;
|
| 740 |
+
return(b.value||"").replace(Wa,"")
|
| 741 |
+
}
|
| 742 |
+
return v
|
| 743 |
+
}
|
| 744 |
+
var n=c.isFunction(a);
|
| 745 |
+
return this.each(function(o){
|
| 746 |
+
var m=c(this),s=a;
|
| 747 |
+
if(this.nodeType===1){
|
| 748 |
+
if(n)s=a.call(this,o,m.val());
|
| 749 |
+
if(typeof s==="number")s+="";
|
| 750 |
+
if(c.isArray(s)&&za.test(this.type))this.checked=c.inArray(m.val(),s)>=0;
|
| 751 |
+
else if(c.nodeName(this,"select")){
|
| 752 |
+
var x=c.makeArray(s);
|
| 753 |
+
c("option",this).each(function(){
|
| 754 |
+
this.selected=c.inArray(c(this).val(),x)>=0
|
| 755 |
+
});
|
| 756 |
+
if(!x.length)this.selectedIndex=-1
|
| 757 |
+
}else this.value=s
|
| 758 |
+
}
|
| 759 |
+
})
|
| 760 |
+
}
|
| 761 |
+
});
|
| 762 |
+
c.extend({
|
| 763 |
+
attrFn:{
|
| 764 |
+
val:true,
|
| 765 |
+
css:true,
|
| 766 |
+
html:true,
|
| 767 |
+
text:true,
|
| 768 |
+
data:true,
|
| 769 |
+
width:true,
|
| 770 |
+
height:true,
|
| 771 |
+
offset:true
|
| 772 |
+
},
|
| 773 |
+
attr:function(a,b,d,f){
|
| 774 |
+
if(!a||a.nodeType===3||a.nodeType===8)return v;
|
| 775 |
+
if(f&&b in c.attrFn)return c(a)[b](d);
|
| 776 |
+
f=a.nodeType!==1||!c.isXMLDoc(a);
|
| 777 |
+
var e=d!==v;
|
| 778 |
+
b=f&&c.props[b]||b;
|
| 779 |
+
if(a.nodeType===1){
|
| 780 |
+
var i=Xa.test(b);
|
| 781 |
+
if(b in a&&f&&!i){
|
| 782 |
+
if(e){
|
| 783 |
+
b==="type"&&Ya.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
|
| 784 |
+
a[b]=d
|
| 785 |
+
}
|
| 786 |
+
if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;
|
| 787 |
+
if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Za.test(a.nodeName)||$a.test(a.nodeName)&&a.href?0:v;
|
| 788 |
+
return a[b]
|
| 789 |
+
}
|
| 790 |
+
if(!c.support.style&&f&&b==="style"){
|
| 791 |
+
if(e)a.style.cssText=
|
| 792 |
+
""+d;
|
| 793 |
+
return a.style.cssText
|
| 794 |
+
}
|
| 795 |
+
e&&a.setAttribute(b,""+d);
|
| 796 |
+
a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);
|
| 797 |
+
return a===null?v:a
|
| 798 |
+
}
|
| 799 |
+
return c.style(a,b,d)
|
| 800 |
+
}
|
| 801 |
+
});
|
| 802 |
+
var ab=function(a){
|
| 803 |
+
return a.replace(/[^\w\s\.\|`]/g,function(b){
|
| 804 |
+
return"\\"+b
|
| 805 |
+
})
|
| 806 |
+
};
|
| 807 |
+
|
| 808 |
+
c.event={
|
| 809 |
+
add:function(a,b,d,f){
|
| 810 |
+
if(!(a.nodeType===3||a.nodeType===8)){
|
| 811 |
+
if(a.setInterval&&a!==z&&!a.frameElement)a=z;
|
| 812 |
+
if(!d.guid)d.guid=c.guid++;
|
| 813 |
+
if(f!==v){
|
| 814 |
+
d=c.proxy(d);
|
| 815 |
+
d.data=f
|
| 816 |
+
}
|
| 817 |
+
var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;
|
| 818 |
+
if(!i){
|
| 819 |
+
j=
|
| 820 |
+
function(){
|
| 821 |
+
return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):v
|
| 822 |
+
};
|
| 823 |
+
|
| 824 |
+
i=c.data(a,"handle",j)
|
| 825 |
+
}
|
| 826 |
+
if(i){
|
| 827 |
+
i.elem=a;
|
| 828 |
+
b=b.split(/\s+/);
|
| 829 |
+
for(var n,o=0;n=b[o++];){
|
| 830 |
+
var m=n.split(".");
|
| 831 |
+
n=m.shift();
|
| 832 |
+
if(o>1){
|
| 833 |
+
d=c.proxy(d);
|
| 834 |
+
if(f!==v)d.data=f
|
| 835 |
+
}
|
| 836 |
+
d.type=m.slice(0).sort().join(".");
|
| 837 |
+
var s=e[n],x=this.special[n]||{};
|
| 838 |
+
|
| 839 |
+
if(!s){
|
| 840 |
+
s=e[n]={};
|
| 841 |
+
|
| 842 |
+
if(!x.setup||x.setup.call(a,f,m,d)===false)if(a.addEventListener)a.addEventListener(n,i,false);else a.attachEvent&&a.attachEvent("on"+n,i)
|
| 843 |
+
}
|
| 844 |
+
if(x.add)if((m=x.add.call(a,
|
| 845 |
+
d,f,m,s))&&c.isFunction(m)){
|
| 846 |
+
m.guid=m.guid||d.guid;
|
| 847 |
+
m.data=m.data||d.data;
|
| 848 |
+
m.type=m.type||d.type;
|
| 849 |
+
d=m
|
| 850 |
+
}
|
| 851 |
+
s[d.guid]=d;
|
| 852 |
+
this.global[n]=true
|
| 853 |
+
}
|
| 854 |
+
a=null
|
| 855 |
+
}
|
| 856 |
+
}
|
| 857 |
+
},
|
| 858 |
+
global:{},
|
| 859 |
+
remove:function(a,b,d){
|
| 860 |
+
if(!(a.nodeType===3||a.nodeType===8)){
|
| 861 |
+
var f=c.data(a,"events"),e,i,j;
|
| 862 |
+
if(f){
|
| 863 |
+
if(b===v||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{
|
| 864 |
+
if(b.type){
|
| 865 |
+
d=b.handler;
|
| 866 |
+
b=b.type
|
| 867 |
+
}
|
| 868 |
+
b=b.split(/\s+/);
|
| 869 |
+
for(var n=0;i=b[n++];){
|
| 870 |
+
var o=i.split(".");
|
| 871 |
+
i=o.shift();
|
| 872 |
+
var m=!o.length,s=c.map(o.slice(0).sort(),ab);
|
| 873 |
+
s=new RegExp("(^|\\.)"+
|
| 874 |
+
s.join("\\.(?:.*\\.)?")+"(\\.|$)");
|
| 875 |
+
var x=this.special[i]||{};
|
| 876 |
+
|
| 877 |
+
if(f[i]){
|
| 878 |
+
if(d){
|
| 879 |
+
j=f[i][d.guid];
|
| 880 |
+
delete f[i][d.guid]
|
| 881 |
+
}else for(var A in f[i])if(m||s.test(f[i][A].type))delete f[i][A];x.remove&&x.remove.call(a,o,j);
|
| 882 |
+
for(e in f[i])break;if(!e){
|
| 883 |
+
if(!x.teardown||x.teardown.call(a,o)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+i,c.data(a,"handle"));
|
| 884 |
+
e=null;
|
| 885 |
+
delete f[i]
|
| 886 |
+
}
|
| 887 |
+
}
|
| 888 |
+
}
|
| 889 |
+
}
|
| 890 |
+
for(e in f)break;if(!e){
|
| 891 |
+
if(A=c.data(a,"handle"))A.elem=null;
|
| 892 |
+
c.removeData(a,
|
| 893 |
+
"events");
|
| 894 |
+
c.removeData(a,"handle")
|
| 895 |
+
}
|
| 896 |
+
}
|
| 897 |
+
}
|
| 898 |
+
},
|
| 899 |
+
trigger:function(a,b,d,f){
|
| 900 |
+
var e=a.type||a;
|
| 901 |
+
if(!f){
|
| 902 |
+
a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);
|
| 903 |
+
if(e.indexOf("!")>=0){
|
| 904 |
+
a.type=e=e.slice(0,-1);
|
| 905 |
+
a.exclusive=true
|
| 906 |
+
}
|
| 907 |
+
if(!d){
|
| 908 |
+
a.stopPropagation();
|
| 909 |
+
this.global[e]&&c.each(c.cache,function(){
|
| 910 |
+
this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)
|
| 911 |
+
})
|
| 912 |
+
}
|
| 913 |
+
if(!d||d.nodeType===3||d.nodeType===8)return v;
|
| 914 |
+
a.result=v;
|
| 915 |
+
a.target=d;
|
| 916 |
+
b=c.makeArray(b);
|
| 917 |
+
b.unshift(a)
|
| 918 |
+
}
|
| 919 |
+
a.currentTarget=d;
|
| 920 |
+
(f=c.data(d,"handle"))&&f.apply(d,
|
| 921 |
+
b);
|
| 922 |
+
f=d.parentNode||d.ownerDocument;
|
| 923 |
+
try{
|
| 924 |
+
if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false
|
| 925 |
+
}catch(i){}
|
| 926 |
+
if(!a.isPropagationStopped()&&f)c.event.trigger(a,b,f,true);
|
| 927 |
+
else if(!a.isDefaultPrevented()){
|
| 928 |
+
d=a.target;
|
| 929 |
+
var j;
|
| 930 |
+
if(!(c.nodeName(d,"a")&&e==="click")&&!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){
|
| 931 |
+
try{
|
| 932 |
+
if(d[e]){
|
| 933 |
+
if(j=d["on"+e])d["on"+e]=null;
|
| 934 |
+
this.triggered=true;
|
| 935 |
+
d[e]()
|
| 936 |
+
}
|
| 937 |
+
}catch(n){}
|
| 938 |
+
if(j)d["on"+e]=j;
|
| 939 |
+
this.triggered=false
|
| 940 |
+
}
|
| 941 |
+
}
|
| 942 |
+
},
|
| 943 |
+
handle:function(a){
|
| 944 |
+
var b,
|
| 945 |
+
d;
|
| 946 |
+
a=arguments[0]=c.event.fix(a||z.event);
|
| 947 |
+
a.currentTarget=this;
|
| 948 |
+
d=a.type.split(".");
|
| 949 |
+
a.type=d.shift();
|
| 950 |
+
b=!d.length&&!a.exclusive;
|
| 951 |
+
var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");
|
| 952 |
+
d=(c.data(this,"events")||{})[a.type];
|
| 953 |
+
for(var e in d){
|
| 954 |
+
var i=d[e];
|
| 955 |
+
if(b||f.test(i.type)){
|
| 956 |
+
a.handler=i;
|
| 957 |
+
a.data=i.data;
|
| 958 |
+
i=i.apply(this,arguments);
|
| 959 |
+
if(i!==v){
|
| 960 |
+
a.result=i;
|
| 961 |
+
if(i===false){
|
| 962 |
+
a.preventDefault();
|
| 963 |
+
a.stopPropagation()
|
| 964 |
+
}
|
| 965 |
+
}
|
| 966 |
+
if(a.isImmediatePropagationStopped())break
|
| 967 |
+
}
|
| 968 |
+
}
|
| 969 |
+
return a.result
|
| 970 |
+
},
|
| 971 |
+
props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
| 972 |
+
fix:function(a){
|
| 973 |
+
if(a[G])return a;
|
| 974 |
+
var b=a;
|
| 975 |
+
a=c.Event(b);
|
| 976 |
+
for(var d=this.props.length,f;d;){
|
| 977 |
+
f=this.props[--d];
|
| 978 |
+
a[f]=b[f]
|
| 979 |
+
}
|
| 980 |
+
if(!a.target)a.target=a.srcElement||r;
|
| 981 |
+
if(a.target.nodeType===3)a.target=a.target.parentNode;
|
| 982 |
+
if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;
|
| 983 |
+
if(a.pageX==null&&a.clientX!=null){
|
| 984 |
+
b=r.documentElement;
|
| 985 |
+
d=r.body;
|
| 986 |
+
a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);
|
| 987 |
+
a.pageY=a.clientY+(b&&b.scrollTop||
|
| 988 |
+
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)
|
| 989 |
+
}
|
| 990 |
+
if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;
|
| 991 |
+
if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;
|
| 992 |
+
if(!a.which&&a.button!==v)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;
|
| 993 |
+
return a
|
| 994 |
+
},
|
| 995 |
+
guid:1E8,
|
| 996 |
+
proxy:c.proxy,
|
| 997 |
+
special:{
|
| 998 |
+
ready:{
|
| 999 |
+
setup:c.bindReady,
|
| 1000 |
+
teardown:c.noop
|
| 1001 |
+
},
|
| 1002 |
+
live:{
|
| 1003 |
+
add:function(a,b){
|
| 1004 |
+
c.extend(a,b||{});
|
| 1005 |
+
a.guid+=b.selector+b.live;
|
| 1006 |
+
b.liveProxy=a;
|
| 1007 |
+
c.event.add(this,b.live,na,b)
|
| 1008 |
+
},
|
| 1009 |
+
remove:function(a){
|
| 1010 |
+
if(a.length){
|
| 1011 |
+
var b=
|
| 1012 |
+
0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");
|
| 1013 |
+
c.each(c.data(this,"events").live||{},function(){
|
| 1014 |
+
d.test(this.type)&&b++
|
| 1015 |
+
});
|
| 1016 |
+
b<1&&c.event.remove(this,a[0],na)
|
| 1017 |
+
}
|
| 1018 |
+
},
|
| 1019 |
+
special:{}
|
| 1020 |
+
},
|
| 1021 |
+
beforeunload:{
|
| 1022 |
+
setup:function(a,b,d){
|
| 1023 |
+
if(this.setInterval)this.onbeforeunload=d;
|
| 1024 |
+
return false
|
| 1025 |
+
},
|
| 1026 |
+
teardown:function(a,b){
|
| 1027 |
+
if(this.onbeforeunload===b)this.onbeforeunload=null
|
| 1028 |
+
}
|
| 1029 |
+
}
|
| 1030 |
+
}
|
| 1031 |
+
};
|
| 1032 |
+
|
| 1033 |
+
c.Event=function(a){
|
| 1034 |
+
if(!this.preventDefault)return new c.Event(a);
|
| 1035 |
+
if(a&&a.type){
|
| 1036 |
+
this.originalEvent=a;
|
| 1037 |
+
this.type=a.type
|
| 1038 |
+
}else this.type=a;
|
| 1039 |
+
this.timeStamp=J();
|
| 1040 |
+
this[G]=true
|
| 1041 |
+
};
|
| 1042 |
+
c.Event.prototype={
|
| 1043 |
+
preventDefault:function(){
|
| 1044 |
+
this.isDefaultPrevented=Z;
|
| 1045 |
+
var a=this.originalEvent;
|
| 1046 |
+
if(a){
|
| 1047 |
+
a.preventDefault&&a.preventDefault();
|
| 1048 |
+
a.returnValue=false
|
| 1049 |
+
}
|
| 1050 |
+
},
|
| 1051 |
+
stopPropagation:function(){
|
| 1052 |
+
this.isPropagationStopped=Z;
|
| 1053 |
+
var a=this.originalEvent;
|
| 1054 |
+
if(a){
|
| 1055 |
+
a.stopPropagation&&a.stopPropagation();
|
| 1056 |
+
a.cancelBubble=true
|
| 1057 |
+
}
|
| 1058 |
+
},
|
| 1059 |
+
stopImmediatePropagation:function(){
|
| 1060 |
+
this.isImmediatePropagationStopped=Z;
|
| 1061 |
+
this.stopPropagation()
|
| 1062 |
+
},
|
| 1063 |
+
isDefaultPrevented:Y,
|
| 1064 |
+
isPropagationStopped:Y,
|
| 1065 |
+
isImmediatePropagationStopped:Y
|
| 1066 |
+
};
|
| 1067 |
+
|
| 1068 |
+
var Aa=function(a){
|
| 1069 |
+
for(var b=
|
| 1070 |
+
a.relatedTarget;b&&b!==this;)try{
|
| 1071 |
+
b=b.parentNode
|
| 1072 |
+
}catch(d){
|
| 1073 |
+
break
|
| 1074 |
+
}
|
| 1075 |
+
if(b!==this){
|
| 1076 |
+
a.type=a.data;
|
| 1077 |
+
c.event.handle.apply(this,arguments)
|
| 1078 |
+
}
|
| 1079 |
+
},Ba=function(a){
|
| 1080 |
+
a.type=a.data;
|
| 1081 |
+
c.event.handle.apply(this,arguments)
|
| 1082 |
+
};
|
| 1083 |
+
|
| 1084 |
+
c.each({
|
| 1085 |
+
mouseenter:"mouseover",
|
| 1086 |
+
mouseleave:"mouseout"
|
| 1087 |
+
},function(a,b){
|
| 1088 |
+
c.event.special[a]={
|
| 1089 |
+
setup:function(d){
|
| 1090 |
+
c.event.add(this,b,d&&d.selector?Ba:Aa,a)
|
| 1091 |
+
},
|
| 1092 |
+
teardown:function(d){
|
| 1093 |
+
c.event.remove(this,b,d&&d.selector?Ba:Aa)
|
| 1094 |
+
}
|
| 1095 |
+
}
|
| 1096 |
+
});
|
| 1097 |
+
if(!c.support.submitBubbles)c.event.special.submit={
|
| 1098 |
+
setup:function(a,b,d){
|
| 1099 |
+
if(this.nodeName.toLowerCase()!==
|
| 1100 |
+
"form"){
|
| 1101 |
+
c.event.add(this,"click.specialSubmit."+d.guid,function(f){
|
| 1102 |
+
var e=f.target,i=e.type;
|
| 1103 |
+
if((i==="submit"||i==="image")&&c(e).closest("form").length)return ma("submit",this,arguments)
|
| 1104 |
+
});
|
| 1105 |
+
c.event.add(this,"keypress.specialSubmit."+d.guid,function(f){
|
| 1106 |
+
var e=f.target,i=e.type;
|
| 1107 |
+
if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return ma("submit",this,arguments)
|
| 1108 |
+
})
|
| 1109 |
+
}else return false
|
| 1110 |
+
},
|
| 1111 |
+
remove:function(a,b){
|
| 1112 |
+
c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));
|
| 1113 |
+
c.event.remove(this,
|
| 1114 |
+
"keypress.specialSubmit"+(b?"."+b.guid:""))
|
| 1115 |
+
}
|
| 1116 |
+
};
|
| 1117 |
+
|
| 1118 |
+
if(!c.support.changeBubbles){
|
| 1119 |
+
var da=/textarea|input|select/i;
|
| 1120 |
+
function Ca(a){
|
| 1121 |
+
var b=a.type,d=a.value;
|
| 1122 |
+
if(b==="radio"||b==="checkbox")d=a.checked;
|
| 1123 |
+
else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){
|
| 1124 |
+
return f.selected
|
| 1125 |
+
}).join("-"):"";
|
| 1126 |
+
else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;
|
| 1127 |
+
return d
|
| 1128 |
+
}
|
| 1129 |
+
function ea(a,b){
|
| 1130 |
+
var d=a.target,f,e;
|
| 1131 |
+
if(!(!da.test(d.nodeName)||d.readOnly)){
|
| 1132 |
+
f=c.data(d,"_change_data");
|
| 1133 |
+
e=Ca(d);
|
| 1134 |
+
if(a.type!=="focusout"||
|
| 1135 |
+
d.type!=="radio")c.data(d,"_change_data",e);
|
| 1136 |
+
if(!(f===v||e===f))if(f!=null||e){
|
| 1137 |
+
a.type="change";
|
| 1138 |
+
return c.event.trigger(a,b,d)
|
| 1139 |
+
}
|
| 1140 |
+
}
|
| 1141 |
+
}
|
| 1142 |
+
c.event.special.change={
|
| 1143 |
+
filters:{
|
| 1144 |
+
focusout:ea,
|
| 1145 |
+
click:function(a){
|
| 1146 |
+
var b=a.target,d=b.type;
|
| 1147 |
+
if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ea.call(this,a)
|
| 1148 |
+
},
|
| 1149 |
+
keydown:function(a){
|
| 1150 |
+
var b=a.target,d=b.type;
|
| 1151 |
+
if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ea.call(this,a)
|
| 1152 |
+
},
|
| 1153 |
+
beforeactivate:function(a){
|
| 1154 |
+
a=
|
| 1155 |
+
a.target;
|
| 1156 |
+
a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Ca(a))
|
| 1157 |
+
}
|
| 1158 |
+
},
|
| 1159 |
+
setup:function(a,b,d){
|
| 1160 |
+
for(var f in T)c.event.add(this,f+".specialChange."+d.guid,T[f]);return da.test(this.nodeName)
|
| 1161 |
+
},
|
| 1162 |
+
remove:function(a,b){
|
| 1163 |
+
for(var d in T)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),T[d]);return da.test(this.nodeName)
|
| 1164 |
+
}
|
| 1165 |
+
};
|
| 1166 |
+
|
| 1167 |
+
var T=c.event.special.change.filters
|
| 1168 |
+
}
|
| 1169 |
+
r.addEventListener&&c.each({
|
| 1170 |
+
focus:"focusin",
|
| 1171 |
+
blur:"focusout"
|
| 1172 |
+
},function(a,b){
|
| 1173 |
+
function d(f){
|
| 1174 |
+
f=c.event.fix(f);
|
| 1175 |
+
f.type=b;
|
| 1176 |
+
return c.event.handle.call(this,
|
| 1177 |
+
f)
|
| 1178 |
+
}
|
| 1179 |
+
c.event.special[b]={
|
| 1180 |
+
setup:function(){
|
| 1181 |
+
this.addEventListener(a,d,true)
|
| 1182 |
+
},
|
| 1183 |
+
teardown:function(){
|
| 1184 |
+
this.removeEventListener(a,d,true)
|
| 1185 |
+
}
|
| 1186 |
+
}
|
| 1187 |
+
});
|
| 1188 |
+
c.each(["bind","one"],function(a,b){
|
| 1189 |
+
c.fn[b]=function(d,f,e){
|
| 1190 |
+
if(typeof d==="object"){
|
| 1191 |
+
for(var i in d)this[b](i,f,d[i],e);return this
|
| 1192 |
+
}
|
| 1193 |
+
if(c.isFunction(f)){
|
| 1194 |
+
e=f;
|
| 1195 |
+
f=v
|
| 1196 |
+
}
|
| 1197 |
+
var j=b==="one"?c.proxy(e,function(n){
|
| 1198 |
+
c(this).unbind(n,j);
|
| 1199 |
+
return e.apply(this,arguments)
|
| 1200 |
+
}):e;
|
| 1201 |
+
return d==="unload"&&b!=="one"?this.one(d,f,e):this.each(function(){
|
| 1202 |
+
c.event.add(this,d,j,f)
|
| 1203 |
+
})
|
| 1204 |
+
}
|
| 1205 |
+
});
|
| 1206 |
+
c.fn.extend({
|
| 1207 |
+
unbind:function(a,
|
| 1208 |
+
b){
|
| 1209 |
+
if(typeof a==="object"&&!a.preventDefault){
|
| 1210 |
+
for(var d in a)this.unbind(d,a[d]);return this
|
| 1211 |
+
}
|
| 1212 |
+
return this.each(function(){
|
| 1213 |
+
c.event.remove(this,a,b)
|
| 1214 |
+
})
|
| 1215 |
+
},
|
| 1216 |
+
trigger:function(a,b){
|
| 1217 |
+
return this.each(function(){
|
| 1218 |
+
c.event.trigger(a,b,this)
|
| 1219 |
+
})
|
| 1220 |
+
},
|
| 1221 |
+
triggerHandler:function(a,b){
|
| 1222 |
+
if(this[0]){
|
| 1223 |
+
a=c.Event(a);
|
| 1224 |
+
a.preventDefault();
|
| 1225 |
+
a.stopPropagation();
|
| 1226 |
+
c.event.trigger(a,b,this[0]);
|
| 1227 |
+
return a.result
|
| 1228 |
+
}
|
| 1229 |
+
},
|
| 1230 |
+
toggle:function(a){
|
| 1231 |
+
for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);
|
| 1232 |
+
return this.click(c.proxy(a,function(f){
|
| 1233 |
+
var e=(c.data(this,"lastToggle"+
|
| 1234 |
+
a.guid)||0)%d;
|
| 1235 |
+
c.data(this,"lastToggle"+a.guid,e+1);
|
| 1236 |
+
f.preventDefault();
|
| 1237 |
+
return b[e].apply(this,arguments)||false
|
| 1238 |
+
}))
|
| 1239 |
+
},
|
| 1240 |
+
hover:function(a,b){
|
| 1241 |
+
return this.mouseenter(a).mouseleave(b||a)
|
| 1242 |
+
}
|
| 1243 |
+
});
|
| 1244 |
+
c.each(["live","die"],function(a,b){
|
| 1245 |
+
c.fn[b]=function(d,f,e){
|
| 1246 |
+
var i,j=0;
|
| 1247 |
+
if(c.isFunction(f)){
|
| 1248 |
+
e=f;
|
| 1249 |
+
f=v
|
| 1250 |
+
}
|
| 1251 |
+
for(d=(d||"").split(/\s+/);(i=d[j++])!=null;){
|
| 1252 |
+
i=i==="focus"?"focusin":i==="blur"?"focusout":i==="hover"?d.push("mouseleave")&&"mouseenter":i;
|
| 1253 |
+
b==="live"?c(this.context).bind(oa(i,this.selector),{
|
| 1254 |
+
data:f,
|
| 1255 |
+
selector:this.selector,
|
| 1256 |
+
live:i
|
| 1257 |
+
},e):c(this.context).unbind(oa(i,this.selector),e?{
|
| 1258 |
+
guid:e.guid+this.selector+i
|
| 1259 |
+
}:null)
|
| 1260 |
+
}
|
| 1261 |
+
return this
|
| 1262 |
+
}
|
| 1263 |
+
});
|
| 1264 |
+
c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){
|
| 1265 |
+
c.fn[b]=function(d){
|
| 1266 |
+
return d?this.bind(b,d):this.trigger(b)
|
| 1267 |
+
};
|
| 1268 |
+
|
| 1269 |
+
if(c.attrFn)c.attrFn[b]=true
|
| 1270 |
+
});
|
| 1271 |
+
z.attachEvent&&!z.addEventListener&&z.attachEvent("onunload",function(){
|
| 1272 |
+
for(var a in c.cache)if(c.cache[a].handle)try{
|
| 1273 |
+
c.event.remove(c.cache[a].handle.elem)
|
| 1274 |
+
}catch(b){}
|
| 1275 |
+
});
|
| 1276 |
+
(function(){
|
| 1277 |
+
function a(g){
|
| 1278 |
+
for(var h="",k,l=0;g[l];l++){
|
| 1279 |
+
k=g[l];
|
| 1280 |
+
if(k.nodeType===3||k.nodeType===4)h+=k.nodeValue;
|
| 1281 |
+
else if(k.nodeType!==8)h+=a(k.childNodes)
|
| 1282 |
+
}
|
| 1283 |
+
return h
|
| 1284 |
+
}
|
| 1285 |
+
function b(g,h,k,l,q,p){
|
| 1286 |
+
q=0;
|
| 1287 |
+
for(var u=l.length;q<u;q++){
|
| 1288 |
+
var t=l[q];
|
| 1289 |
+
if(t){
|
| 1290 |
+
t=t[g];
|
| 1291 |
+
for(var y=false;t;){
|
| 1292 |
+
if(t.sizcache===k){
|
| 1293 |
+
y=l[t.sizset];
|
| 1294 |
+
break
|
| 1295 |
+
}
|
| 1296 |
+
if(t.nodeType===1&&!p){
|
| 1297 |
+
t.sizcache=k;
|
| 1298 |
+
t.sizset=q
|
| 1299 |
+
}
|
| 1300 |
+
if(t.nodeName.toLowerCase()===h){
|
| 1301 |
+
y=t;
|
| 1302 |
+
break
|
| 1303 |
+
}
|
| 1304 |
+
t=t[g]
|
| 1305 |
+
}
|
| 1306 |
+
l[q]=y
|
| 1307 |
+
}
|
| 1308 |
+
}
|
| 1309 |
+
}
|
| 1310 |
+
function d(g,h,k,l,q,p){
|
| 1311 |
+
q=0;
|
| 1312 |
+
for(var u=l.length;q<u;q++){
|
| 1313 |
+
var t=l[q];
|
| 1314 |
+
if(t){
|
| 1315 |
+
t=t[g];
|
| 1316 |
+
for(var y=false;t;){
|
| 1317 |
+
if(t.sizcache===
|
| 1318 |
+
k){
|
| 1319 |
+
y=l[t.sizset];
|
| 1320 |
+
break
|
| 1321 |
+
}
|
| 1322 |
+
if(t.nodeType===1){
|
| 1323 |
+
if(!p){
|
| 1324 |
+
t.sizcache=k;
|
| 1325 |
+
t.sizset=q
|
| 1326 |
+
}
|
| 1327 |
+
if(typeof h!=="string"){
|
| 1328 |
+
if(t===h){
|
| 1329 |
+
y=true;
|
| 1330 |
+
break
|
| 1331 |
+
}
|
| 1332 |
+
}else if(o.filter(h,[t]).length>0){
|
| 1333 |
+
y=t;
|
| 1334 |
+
break
|
| 1335 |
+
}
|
| 1336 |
+
}
|
| 1337 |
+
t=t[g]
|
| 1338 |
+
}
|
| 1339 |
+
l[q]=y
|
| 1340 |
+
}
|
| 1341 |
+
}
|
| 1342 |
+
}
|
| 1343 |
+
var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,i=Object.prototype.toString,j=false,n=true;
|
| 1344 |
+
[0,0].sort(function(){
|
| 1345 |
+
n=false;
|
| 1346 |
+
return 0
|
| 1347 |
+
});
|
| 1348 |
+
var o=function(g,h,k,l){
|
| 1349 |
+
k=k||[];
|
| 1350 |
+
var q=h=h||r;
|
| 1351 |
+
if(h.nodeType!==1&&h.nodeType!==9)return[];
|
| 1352 |
+
if(!g||
|
| 1353 |
+
typeof g!=="string")return k;
|
| 1354 |
+
for(var p=[],u,t,y,R,H=true,M=w(h),I=g;(f.exec(""),u=f.exec(I))!==null;){
|
| 1355 |
+
I=u[3];
|
| 1356 |
+
p.push(u[1]);
|
| 1357 |
+
if(u[2]){
|
| 1358 |
+
R=u[3];
|
| 1359 |
+
break
|
| 1360 |
+
}
|
| 1361 |
+
}
|
| 1362 |
+
if(p.length>1&&s.exec(g))if(p.length===2&&m.relative[p[0]])t=fa(p[0]+p[1],h);else for(t=m.relative[p[0]]?[h]:o(p.shift(),h);p.length;){
|
| 1363 |
+
g=p.shift();
|
| 1364 |
+
if(m.relative[g])g+=p.shift();
|
| 1365 |
+
t=fa(g,t)
|
| 1366 |
+
}else{
|
| 1367 |
+
if(!l&&p.length>1&&h.nodeType===9&&!M&&m.match.ID.test(p[0])&&!m.match.ID.test(p[p.length-1])){
|
| 1368 |
+
u=o.find(p.shift(),h,M);
|
| 1369 |
+
h=u.expr?o.filter(u.expr,u.set)[0]:u.set[0]
|
| 1370 |
+
}
|
| 1371 |
+
if(h){
|
| 1372 |
+
u=
|
| 1373 |
+
l?{
|
| 1374 |
+
expr:p.pop(),
|
| 1375 |
+
set:A(l)
|
| 1376 |
+
}:o.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);
|
| 1377 |
+
t=u.expr?o.filter(u.expr,u.set):u.set;
|
| 1378 |
+
if(p.length>0)y=A(t);else H=false;
|
| 1379 |
+
for(;p.length;){
|
| 1380 |
+
var D=p.pop();
|
| 1381 |
+
u=D;
|
| 1382 |
+
if(m.relative[D])u=p.pop();else D="";
|
| 1383 |
+
if(u==null)u=h;
|
| 1384 |
+
m.relative[D](y,u,M)
|
| 1385 |
+
}
|
| 1386 |
+
}else y=[]
|
| 1387 |
+
}
|
| 1388 |
+
y||(y=t);
|
| 1389 |
+
y||o.error(D||g);
|
| 1390 |
+
if(i.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){
|
| 1391 |
+
if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))k.push(t[g])
|
| 1392 |
+
}else for(g=0;y[g]!=null;g++)y[g]&&
|
| 1393 |
+
y[g].nodeType===1&&k.push(t[g]);else k.push.apply(k,y);else A(y,k);
|
| 1394 |
+
if(R){
|
| 1395 |
+
o(R,q,k,l);
|
| 1396 |
+
o.uniqueSort(k)
|
| 1397 |
+
}
|
| 1398 |
+
return k
|
| 1399 |
+
};
|
| 1400 |
+
|
| 1401 |
+
o.uniqueSort=function(g){
|
| 1402 |
+
if(C){
|
| 1403 |
+
j=n;
|
| 1404 |
+
g.sort(C);
|
| 1405 |
+
if(j)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)
|
| 1406 |
+
}
|
| 1407 |
+
return g
|
| 1408 |
+
};
|
| 1409 |
+
|
| 1410 |
+
o.matches=function(g,h){
|
| 1411 |
+
return o(g,null,null,h)
|
| 1412 |
+
};
|
| 1413 |
+
|
| 1414 |
+
o.find=function(g,h,k){
|
| 1415 |
+
var l,q;
|
| 1416 |
+
if(!g)return[];
|
| 1417 |
+
for(var p=0,u=m.order.length;p<u;p++){
|
| 1418 |
+
var t=m.order[p];
|
| 1419 |
+
if(q=m.leftMatch[t].exec(g)){
|
| 1420 |
+
var y=q[1];
|
| 1421 |
+
q.splice(1,1);
|
| 1422 |
+
if(y.substr(y.length-1)!=="\\"){
|
| 1423 |
+
q[1]=(q[1]||"").replace(/\\/g,"");
|
| 1424 |
+
l=m.find[t](q,
|
| 1425 |
+
h,k);
|
| 1426 |
+
if(l!=null){
|
| 1427 |
+
g=g.replace(m.match[t],"");
|
| 1428 |
+
break
|
| 1429 |
+
}
|
| 1430 |
+
}
|
| 1431 |
+
}
|
| 1432 |
+
}
|
| 1433 |
+
l||(l=h.getElementsByTagName("*"));
|
| 1434 |
+
return{
|
| 1435 |
+
set:l,
|
| 1436 |
+
expr:g
|
| 1437 |
+
}
|
| 1438 |
+
};
|
| 1439 |
+
|
| 1440 |
+
o.filter=function(g,h,k,l){
|
| 1441 |
+
for(var q=g,p=[],u=h,t,y,R=h&&h[0]&&w(h[0]);g&&h.length;){
|
| 1442 |
+
for(var H in m.filter)if((t=m.leftMatch[H].exec(g))!=null&&t[2]){
|
| 1443 |
+
var M=m.filter[H],I,D;
|
| 1444 |
+
D=t[1];
|
| 1445 |
+
y=false;
|
| 1446 |
+
t.splice(1,1);
|
| 1447 |
+
if(D.substr(D.length-1)!=="\\"){
|
| 1448 |
+
if(u===p)p=[];
|
| 1449 |
+
if(m.preFilter[H])if(t=m.preFilter[H](t,u,k,p,l,R)){
|
| 1450 |
+
if(t===true)continue
|
| 1451 |
+
}else y=I=true;
|
| 1452 |
+
if(t)for(var U=0;(D=u[U])!=null;U++)if(D){
|
| 1453 |
+
I=M(D,t,U,u);
|
| 1454 |
+
var Da=
|
| 1455 |
+
l^!!I;
|
| 1456 |
+
if(k&&I!=null)if(Da)y=true;else u[U]=false;
|
| 1457 |
+
else if(Da){
|
| 1458 |
+
p.push(D);
|
| 1459 |
+
y=true
|
| 1460 |
+
}
|
| 1461 |
+
}
|
| 1462 |
+
if(I!==v){
|
| 1463 |
+
k||(u=p);
|
| 1464 |
+
g=g.replace(m.match[H],"");
|
| 1465 |
+
if(!y)return[];
|
| 1466 |
+
break
|
| 1467 |
+
}
|
| 1468 |
+
}
|
| 1469 |
+
}
|
| 1470 |
+
if(g===q)if(y==null)o.error(g);else break;
|
| 1471 |
+
q=g
|
| 1472 |
+
}
|
| 1473 |
+
return u
|
| 1474 |
+
};
|
| 1475 |
+
|
| 1476 |
+
o.error=function(g){
|
| 1477 |
+
throw"Syntax error, unrecognized expression: "+g;
|
| 1478 |
+
};
|
| 1479 |
+
|
| 1480 |
+
var m=o.selectors={
|
| 1481 |
+
order:["ID","NAME","TAG"],
|
| 1482 |
+
match:{
|
| 1483 |
+
ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
| 1484 |
+
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
| 1485 |
+
NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
|
| 1486 |
+
ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
|
| 1487 |
+
TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
|
| 1488 |
+
CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
|
| 1489 |
+
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
|
| 1490 |
+
PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
|
| 1491 |
+
},
|
| 1492 |
+
leftMatch:{},
|
| 1493 |
+
attrMap:{
|
| 1494 |
+
"class":"className",
|
| 1495 |
+
"for":"htmlFor"
|
| 1496 |
+
},
|
| 1497 |
+
attrHandle:{
|
| 1498 |
+
href:function(g){
|
| 1499 |
+
return g.getAttribute("href")
|
| 1500 |
+
}
|
| 1501 |
+
},
|
| 1502 |
+
relative:{
|
| 1503 |
+
"+":function(g,h){
|
| 1504 |
+
var k=typeof h==="string",l=k&&!/\W/.test(h);
|
| 1505 |
+
k=k&&!l;
|
| 1506 |
+
if(l)h=h.toLowerCase();
|
| 1507 |
+
l=0;
|
| 1508 |
+
for(var q=g.length,
|
| 1509 |
+
p;l<q;l++)if(p=g[l]){
|
| 1510 |
+
for(;(p=p.previousSibling)&&p.nodeType!==1;);
|
| 1511 |
+
g[l]=k||p&&p.nodeName.toLowerCase()===h?p||false:p===h
|
| 1512 |
+
}
|
| 1513 |
+
k&&o.filter(h,g,true)
|
| 1514 |
+
},
|
| 1515 |
+
">":function(g,h){
|
| 1516 |
+
var k=typeof h==="string";
|
| 1517 |
+
if(k&&!/\W/.test(h)){
|
| 1518 |
+
h=h.toLowerCase();
|
| 1519 |
+
for(var l=0,q=g.length;l<q;l++){
|
| 1520 |
+
var p=g[l];
|
| 1521 |
+
if(p){
|
| 1522 |
+
k=p.parentNode;
|
| 1523 |
+
g[l]=k.nodeName.toLowerCase()===h?k:false
|
| 1524 |
+
}
|
| 1525 |
+
}
|
| 1526 |
+
}else{
|
| 1527 |
+
l=0;
|
| 1528 |
+
for(q=g.length;l<q;l++)if(p=g[l])g[l]=k?p.parentNode:p.parentNode===h;k&&o.filter(h,g,true)
|
| 1529 |
+
}
|
| 1530 |
+
},
|
| 1531 |
+
"":function(g,h,k){
|
| 1532 |
+
var l=e++,q=d;
|
| 1533 |
+
if(typeof h==="string"&&!/\W/.test(h)){
|
| 1534 |
+
var p=
|
| 1535 |
+
h=h.toLowerCase();
|
| 1536 |
+
q=b
|
| 1537 |
+
}
|
| 1538 |
+
q("parentNode",h,l,g,p,k)
|
| 1539 |
+
},
|
| 1540 |
+
"~":function(g,h,k){
|
| 1541 |
+
var l=e++,q=d;
|
| 1542 |
+
if(typeof h==="string"&&!/\W/.test(h)){
|
| 1543 |
+
var p=h=h.toLowerCase();
|
| 1544 |
+
q=b
|
| 1545 |
+
}
|
| 1546 |
+
q("previousSibling",h,l,g,p,k)
|
| 1547 |
+
}
|
| 1548 |
+
},
|
| 1549 |
+
find:{
|
| 1550 |
+
ID:function(g,h,k){
|
| 1551 |
+
if(typeof h.getElementById!=="undefined"&&!k)return(g=h.getElementById(g[1]))?[g]:[]
|
| 1552 |
+
},
|
| 1553 |
+
NAME:function(g,h){
|
| 1554 |
+
if(typeof h.getElementsByName!=="undefined"){
|
| 1555 |
+
var k=[];
|
| 1556 |
+
h=h.getElementsByName(g[1]);
|
| 1557 |
+
for(var l=0,q=h.length;l<q;l++)h[l].getAttribute("name")===g[1]&&k.push(h[l]);
|
| 1558 |
+
return k.length===0?null:k
|
| 1559 |
+
}
|
| 1560 |
+
},
|
| 1561 |
+
TAG:function(g,h){
|
| 1562 |
+
return h.getElementsByTagName(g[1])
|
| 1563 |
+
}
|
| 1564 |
+
},
|
| 1565 |
+
preFilter:{
|
| 1566 |
+
CLASS:function(g,h,k,l,q,p){
|
| 1567 |
+
g=" "+g[1].replace(/\\/g,"")+" ";
|
| 1568 |
+
if(p)return g;
|
| 1569 |
+
p=0;
|
| 1570 |
+
for(var u;(u=h[p])!=null;p++)if(u)if(q^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))k||l.push(u);
|
| 1571 |
+
else if(k)h[p]=false;return false
|
| 1572 |
+
},
|
| 1573 |
+
ID:function(g){
|
| 1574 |
+
return g[1].replace(/\\/g,"")
|
| 1575 |
+
},
|
| 1576 |
+
TAG:function(g){
|
| 1577 |
+
return g[1].toLowerCase()
|
| 1578 |
+
},
|
| 1579 |
+
CHILD:function(g){
|
| 1580 |
+
if(g[1]==="nth"){
|
| 1581 |
+
var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&
|
| 1582 |
+
"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);
|
| 1583 |
+
g[2]=h[1]+(h[2]||1)-0;
|
| 1584 |
+
g[3]=h[3]-0
|
| 1585 |
+
}
|
| 1586 |
+
g[0]=e++;
|
| 1587 |
+
return g
|
| 1588 |
+
},
|
| 1589 |
+
ATTR:function(g,h,k,l,q,p){
|
| 1590 |
+
h=g[1].replace(/\\/g,"");
|
| 1591 |
+
if(!p&&m.attrMap[h])g[1]=m.attrMap[h];
|
| 1592 |
+
if(g[2]==="~=")g[4]=" "+g[4]+" ";
|
| 1593 |
+
return g
|
| 1594 |
+
},
|
| 1595 |
+
PSEUDO:function(g,h,k,l,q){
|
| 1596 |
+
if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=o(g[3],null,null,h);
|
| 1597 |
+
else{
|
| 1598 |
+
g=o.filter(g[3],h,k,true^q);
|
| 1599 |
+
k||l.push.apply(l,g);
|
| 1600 |
+
return false
|
| 1601 |
+
}else if(m.match.POS.test(g[0])||m.match.CHILD.test(g[0]))return true;
|
| 1602 |
+
return g
|
| 1603 |
+
},
|
| 1604 |
+
POS:function(g){
|
| 1605 |
+
g.unshift(true);
|
| 1606 |
+
return g
|
| 1607 |
+
}
|
| 1608 |
+
},
|
| 1609 |
+
filters:{
|
| 1610 |
+
enabled:function(g){
|
| 1611 |
+
return g.disabled===false&&g.type!=="hidden"
|
| 1612 |
+
},
|
| 1613 |
+
disabled:function(g){
|
| 1614 |
+
return g.disabled===true
|
| 1615 |
+
},
|
| 1616 |
+
checked:function(g){
|
| 1617 |
+
return g.checked===true
|
| 1618 |
+
},
|
| 1619 |
+
selected:function(g){
|
| 1620 |
+
return g.selected===true
|
| 1621 |
+
},
|
| 1622 |
+
parent:function(g){
|
| 1623 |
+
return!!g.firstChild
|
| 1624 |
+
},
|
| 1625 |
+
empty:function(g){
|
| 1626 |
+
return!g.firstChild
|
| 1627 |
+
},
|
| 1628 |
+
has:function(g,h,k){
|
| 1629 |
+
return!!o(k[3],g).length
|
| 1630 |
+
},
|
| 1631 |
+
header:function(g){
|
| 1632 |
+
return/h\d/i.test(g.nodeName)
|
| 1633 |
+
},
|
| 1634 |
+
text:function(g){
|
| 1635 |
+
return"text"===g.type
|
| 1636 |
+
},
|
| 1637 |
+
radio:function(g){
|
| 1638 |
+
return"radio"===g.type
|
| 1639 |
+
},
|
| 1640 |
+
checkbox:function(g){
|
| 1641 |
+
return"checkbox"===
|
| 1642 |
+
g.type
|
| 1643 |
+
},
|
| 1644 |
+
file:function(g){
|
| 1645 |
+
return"file"===g.type
|
| 1646 |
+
},
|
| 1647 |
+
password:function(g){
|
| 1648 |
+
return"password"===g.type
|
| 1649 |
+
},
|
| 1650 |
+
submit:function(g){
|
| 1651 |
+
return"submit"===g.type
|
| 1652 |
+
},
|
| 1653 |
+
image:function(g){
|
| 1654 |
+
return"image"===g.type
|
| 1655 |
+
},
|
| 1656 |
+
reset:function(g){
|
| 1657 |
+
return"reset"===g.type
|
| 1658 |
+
},
|
| 1659 |
+
button:function(g){
|
| 1660 |
+
return"button"===g.type||g.nodeName.toLowerCase()==="button"
|
| 1661 |
+
},
|
| 1662 |
+
input:function(g){
|
| 1663 |
+
return/input|select|textarea|button/i.test(g.nodeName)
|
| 1664 |
+
}
|
| 1665 |
+
},
|
| 1666 |
+
setFilters:{
|
| 1667 |
+
first:function(g,h){
|
| 1668 |
+
return h===0
|
| 1669 |
+
},
|
| 1670 |
+
last:function(g,h,k,l){
|
| 1671 |
+
return h===l.length-1
|
| 1672 |
+
},
|
| 1673 |
+
even:function(g,h){
|
| 1674 |
+
return h%2===
|
| 1675 |
+
0
|
| 1676 |
+
},
|
| 1677 |
+
odd:function(g,h){
|
| 1678 |
+
return h%2===1
|
| 1679 |
+
},
|
| 1680 |
+
lt:function(g,h,k){
|
| 1681 |
+
return h<k[3]-0
|
| 1682 |
+
},
|
| 1683 |
+
gt:function(g,h,k){
|
| 1684 |
+
return h>k[3]-0
|
| 1685 |
+
},
|
| 1686 |
+
nth:function(g,h,k){
|
| 1687 |
+
return k[3]-0===h
|
| 1688 |
+
},
|
| 1689 |
+
eq:function(g,h,k){
|
| 1690 |
+
return k[3]-0===h
|
| 1691 |
+
}
|
| 1692 |
+
},
|
| 1693 |
+
filter:{
|
| 1694 |
+
PSEUDO:function(g,h,k,l){
|
| 1695 |
+
var q=h[1],p=m.filters[q];
|
| 1696 |
+
if(p)return p(g,k,h,l);
|
| 1697 |
+
else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;
|
| 1698 |
+
else if(q==="not"){
|
| 1699 |
+
h=h[3];
|
| 1700 |
+
k=0;
|
| 1701 |
+
for(l=h.length;k<l;k++)if(h[k]===g)return false;return true
|
| 1702 |
+
}else o.error("Syntax error, unrecognized expression: "+
|
| 1703 |
+
q)
|
| 1704 |
+
},
|
| 1705 |
+
CHILD:function(g,h){
|
| 1706 |
+
var k=h[1],l=g;
|
| 1707 |
+
switch(k){
|
| 1708 |
+
case "only":case "first":
|
| 1709 |
+
for(;l=l.previousSibling;)if(l.nodeType===1)return false;if(k==="first")return true;
|
| 1710 |
+
l=g;
|
| 1711 |
+
case "last":
|
| 1712 |
+
for(;l=l.nextSibling;)if(l.nodeType===1)return false;return true;
|
| 1713 |
+
case "nth":
|
| 1714 |
+
k=h[2];
|
| 1715 |
+
var q=h[3];
|
| 1716 |
+
if(k===1&&q===0)return true;
|
| 1717 |
+
h=h[0];
|
| 1718 |
+
var p=g.parentNode;
|
| 1719 |
+
if(p&&(p.sizcache!==h||!g.nodeIndex)){
|
| 1720 |
+
var u=0;
|
| 1721 |
+
for(l=p.firstChild;l;l=l.nextSibling)if(l.nodeType===1)l.nodeIndex=++u;p.sizcache=h
|
| 1722 |
+
}
|
| 1723 |
+
g=g.nodeIndex-q;
|
| 1724 |
+
return k===0?g===0:g%k===0&&g/k>=
|
| 1725 |
+
0
|
| 1726 |
+
}
|
| 1727 |
+
},
|
| 1728 |
+
ID:function(g,h){
|
| 1729 |
+
return g.nodeType===1&&g.getAttribute("id")===h
|
| 1730 |
+
},
|
| 1731 |
+
TAG:function(g,h){
|
| 1732 |
+
return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h
|
| 1733 |
+
},
|
| 1734 |
+
CLASS:function(g,h){
|
| 1735 |
+
return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1
|
| 1736 |
+
},
|
| 1737 |
+
ATTR:function(g,h){
|
| 1738 |
+
var k=h[1];
|
| 1739 |
+
g=m.attrHandle[k]?m.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);
|
| 1740 |
+
k=g+"";
|
| 1741 |
+
var l=h[2];
|
| 1742 |
+
h=h[4];
|
| 1743 |
+
return g==null?l==="!=":l==="="?k===h:l==="*="?k.indexOf(h)>=0:l==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:l==="!="?k!==h:l==="^="?
|
| 1744 |
+
k.indexOf(h)===0:l==="$="?k.substr(k.length-h.length)===h:l==="|="?k===h||k.substr(0,h.length+1)===h+"-":false
|
| 1745 |
+
},
|
| 1746 |
+
POS:function(g,h,k,l){
|
| 1747 |
+
var q=m.setFilters[h[2]];
|
| 1748 |
+
if(q)return q(g,k,h,l)
|
| 1749 |
+
}
|
| 1750 |
+
}
|
| 1751 |
+
},s=m.match.POS;
|
| 1752 |
+
for(var x in m.match){
|
| 1753 |
+
m.match[x]=new RegExp(m.match[x].source+/(?![^\[]*\])(?![^\(]*\))/.source);
|
| 1754 |
+
m.leftMatch[x]=new RegExp(/(^(?:.|\r|\n)*?)/.source+m.match[x].source.replace(/\\(\d+)/g,function(g,h){
|
| 1755 |
+
return"\\"+(h-0+1)
|
| 1756 |
+
}))
|
| 1757 |
+
}
|
| 1758 |
+
var A=function(g,h){
|
| 1759 |
+
g=Array.prototype.slice.call(g,0);
|
| 1760 |
+
if(h){
|
| 1761 |
+
h.push.apply(h,g);
|
| 1762 |
+
return h
|
| 1763 |
+
}
|
| 1764 |
+
return g
|
| 1765 |
+
};
|
| 1766 |
+
try{
|
| 1767 |
+
Array.prototype.slice.call(r.documentElement.childNodes,0)
|
| 1768 |
+
}catch(B){
|
| 1769 |
+
A=function(g,h){
|
| 1770 |
+
h=h||[];
|
| 1771 |
+
if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);
|
| 1772 |
+
else if(typeof g.length==="number")for(var k=0,l=g.length;k<l;k++)h.push(g[k]);else for(k=0;g[k];k++)h.push(g[k]);
|
| 1773 |
+
return h
|
| 1774 |
+
}
|
| 1775 |
+
}
|
| 1776 |
+
var C;
|
| 1777 |
+
if(r.documentElement.compareDocumentPosition)C=function(g,h){
|
| 1778 |
+
if(!g.compareDocumentPosition||!h.compareDocumentPosition){
|
| 1779 |
+
if(g==h)j=true;
|
| 1780 |
+
return g.compareDocumentPosition?-1:1
|
| 1781 |
+
}
|
| 1782 |
+
g=g.compareDocumentPosition(h)&4?-1:g===
|
| 1783 |
+
h?0:1;
|
| 1784 |
+
if(g===0)j=true;
|
| 1785 |
+
return g
|
| 1786 |
+
};
|
| 1787 |
+
else if("sourceIndex"in r.documentElement)C=function(g,h){
|
| 1788 |
+
if(!g.sourceIndex||!h.sourceIndex){
|
| 1789 |
+
if(g==h)j=true;
|
| 1790 |
+
return g.sourceIndex?-1:1
|
| 1791 |
+
}
|
| 1792 |
+
g=g.sourceIndex-h.sourceIndex;
|
| 1793 |
+
if(g===0)j=true;
|
| 1794 |
+
return g
|
| 1795 |
+
};
|
| 1796 |
+
else if(r.createRange)C=function(g,h){
|
| 1797 |
+
if(!g.ownerDocument||!h.ownerDocument){
|
| 1798 |
+
if(g==h)j=true;
|
| 1799 |
+
return g.ownerDocument?-1:1
|
| 1800 |
+
}
|
| 1801 |
+
var k=g.ownerDocument.createRange(),l=h.ownerDocument.createRange();
|
| 1802 |
+
k.setStart(g,0);
|
| 1803 |
+
k.setEnd(g,0);
|
| 1804 |
+
l.setStart(h,0);
|
| 1805 |
+
l.setEnd(h,0);
|
| 1806 |
+
g=k.compareBoundaryPoints(Range.START_TO_END,
|
| 1807 |
+
l);
|
| 1808 |
+
if(g===0)j=true;
|
| 1809 |
+
return g
|
| 1810 |
+
};
|
| 1811 |
+
(function(){
|
| 1812 |
+
var g=r.createElement("div"),h="script"+(new Date).getTime();
|
| 1813 |
+
g.innerHTML="<a name='"+h+"'/>";
|
| 1814 |
+
var k=r.documentElement;
|
| 1815 |
+
k.insertBefore(g,k.firstChild);
|
| 1816 |
+
if(r.getElementById(h)){
|
| 1817 |
+
m.find.ID=function(l,q,p){
|
| 1818 |
+
if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(l[1]))?q.id===l[1]||typeof q.getAttributeNode!=="undefined"&&q.getAttributeNode("id").nodeValue===l[1]?[q]:v:[]
|
| 1819 |
+
};
|
| 1820 |
+
|
| 1821 |
+
m.filter.ID=function(l,q){
|
| 1822 |
+
var p=typeof l.getAttributeNode!=="undefined"&&l.getAttributeNode("id");
|
| 1823 |
+
return l.nodeType===1&&p&&p.nodeValue===q
|
| 1824 |
+
}
|
| 1825 |
+
}
|
| 1826 |
+
k.removeChild(g);
|
| 1827 |
+
k=g=null
|
| 1828 |
+
})();
|
| 1829 |
+
(function(){
|
| 1830 |
+
var g=r.createElement("div");
|
| 1831 |
+
g.appendChild(r.createComment(""));
|
| 1832 |
+
if(g.getElementsByTagName("*").length>0)m.find.TAG=function(h,k){
|
| 1833 |
+
k=k.getElementsByTagName(h[1]);
|
| 1834 |
+
if(h[1]==="*"){
|
| 1835 |
+
h=[];
|
| 1836 |
+
for(var l=0;k[l];l++)k[l].nodeType===1&&h.push(k[l]);
|
| 1837 |
+
k=h
|
| 1838 |
+
}
|
| 1839 |
+
return k
|
| 1840 |
+
};
|
| 1841 |
+
|
| 1842 |
+
g.innerHTML="<a href='#'></a>";
|
| 1843 |
+
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")m.attrHandle.href=function(h){
|
| 1844 |
+
return h.getAttribute("href",
|
| 1845 |
+
2)
|
| 1846 |
+
};
|
| 1847 |
+
|
| 1848 |
+
g=null
|
| 1849 |
+
})();
|
| 1850 |
+
r.querySelectorAll&&function(){
|
| 1851 |
+
var g=o,h=r.createElement("div");
|
| 1852 |
+
h.innerHTML="<p class='TEST'></p>";
|
| 1853 |
+
if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){
|
| 1854 |
+
o=function(l,q,p,u){
|
| 1855 |
+
q=q||r;
|
| 1856 |
+
if(!u&&q.nodeType===9&&!w(q))try{
|
| 1857 |
+
return A(q.querySelectorAll(l),p)
|
| 1858 |
+
}catch(t){}
|
| 1859 |
+
return g(l,q,p,u)
|
| 1860 |
+
};
|
| 1861 |
+
|
| 1862 |
+
for(var k in g)o[k]=g[k];h=null
|
| 1863 |
+
}
|
| 1864 |
+
}();
|
| 1865 |
+
(function(){
|
| 1866 |
+
var g=r.createElement("div");
|
| 1867 |
+
g.innerHTML="<div class='test e'></div><div class='test'></div>";
|
| 1868 |
+
if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
|
| 1869 |
+
0)){
|
| 1870 |
+
g.lastChild.className="e";
|
| 1871 |
+
if(g.getElementsByClassName("e").length!==1){
|
| 1872 |
+
m.order.splice(1,0,"CLASS");
|
| 1873 |
+
m.find.CLASS=function(h,k,l){
|
| 1874 |
+
if(typeof k.getElementsByClassName!=="undefined"&&!l)return k.getElementsByClassName(h[1])
|
| 1875 |
+
};
|
| 1876 |
+
|
| 1877 |
+
g=null
|
| 1878 |
+
}
|
| 1879 |
+
}
|
| 1880 |
+
})();
|
| 1881 |
+
var E=r.compareDocumentPosition?function(g,h){
|
| 1882 |
+
return g.compareDocumentPosition(h)&16
|
| 1883 |
+
}:function(g,h){
|
| 1884 |
+
return g!==h&&(g.contains?g.contains(h):true)
|
| 1885 |
+
},w=function(g){
|
| 1886 |
+
return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false
|
| 1887 |
+
},fa=function(g,h){
|
| 1888 |
+
var k=[],
|
| 1889 |
+
l="",q;
|
| 1890 |
+
for(h=h.nodeType?[h]:h;q=m.match.PSEUDO.exec(g);){
|
| 1891 |
+
l+=q[0];
|
| 1892 |
+
g=g.replace(m.match.PSEUDO,"")
|
| 1893 |
+
}
|
| 1894 |
+
g=m.relative[g]?g+"*":g;
|
| 1895 |
+
q=0;
|
| 1896 |
+
for(var p=h.length;q<p;q++)o(g,h[q],k);
|
| 1897 |
+
return o.filter(l,k)
|
| 1898 |
+
};
|
| 1899 |
+
|
| 1900 |
+
c.find=o;
|
| 1901 |
+
c.expr=o.selectors;
|
| 1902 |
+
c.expr[":"]=c.expr.filters;
|
| 1903 |
+
c.unique=o.uniqueSort;
|
| 1904 |
+
c.getText=a;
|
| 1905 |
+
c.isXMLDoc=w;
|
| 1906 |
+
c.contains=E
|
| 1907 |
+
})();
|
| 1908 |
+
var bb=/Until$/,cb=/^(?:parents|prevUntil|prevAll)/,db=/,/;
|
| 1909 |
+
Q=Array.prototype.slice;
|
| 1910 |
+
var Ea=function(a,b,d){
|
| 1911 |
+
if(c.isFunction(b))return c.grep(a,function(e,i){
|
| 1912 |
+
return!!b.call(e,i,e)===d
|
| 1913 |
+
});
|
| 1914 |
+
else if(b.nodeType)return c.grep(a,
|
| 1915 |
+
function(e){
|
| 1916 |
+
return e===b===d
|
| 1917 |
+
});
|
| 1918 |
+
else if(typeof b==="string"){
|
| 1919 |
+
var f=c.grep(a,function(e){
|
| 1920 |
+
return e.nodeType===1
|
| 1921 |
+
});
|
| 1922 |
+
if(Qa.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)
|
| 1923 |
+
}
|
| 1924 |
+
return c.grep(a,function(e){
|
| 1925 |
+
return c.inArray(e,b)>=0===d
|
| 1926 |
+
})
|
| 1927 |
+
};
|
| 1928 |
+
|
| 1929 |
+
c.fn.extend({
|
| 1930 |
+
find:function(a){
|
| 1931 |
+
for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){
|
| 1932 |
+
d=b.length;
|
| 1933 |
+
c.find(a,this[f],b);
|
| 1934 |
+
if(f>0)for(var i=d;i<b.length;i++)for(var j=0;j<d;j++)if(b[j]===b[i]){
|
| 1935 |
+
b.splice(i--,1);
|
| 1936 |
+
break
|
| 1937 |
+
}
|
| 1938 |
+
}
|
| 1939 |
+
return b
|
| 1940 |
+
},
|
| 1941 |
+
has:function(a){
|
| 1942 |
+
var b=c(a);
|
| 1943 |
+
return this.filter(function(){
|
| 1944 |
+
for(var d=
|
| 1945 |
+
0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true
|
| 1946 |
+
})
|
| 1947 |
+
},
|
| 1948 |
+
not:function(a){
|
| 1949 |
+
return this.pushStack(Ea(this,a,false),"not",a)
|
| 1950 |
+
},
|
| 1951 |
+
filter:function(a){
|
| 1952 |
+
return this.pushStack(Ea(this,a,true),"filter",a)
|
| 1953 |
+
},
|
| 1954 |
+
is:function(a){
|
| 1955 |
+
return!!a&&c.filter(a,this).length>0
|
| 1956 |
+
},
|
| 1957 |
+
closest:function(a,b){
|
| 1958 |
+
if(c.isArray(a)){
|
| 1959 |
+
var d=[],f=this[0],e,i={},j;
|
| 1960 |
+
if(f&&a.length){
|
| 1961 |
+
e=0;
|
| 1962 |
+
for(var n=a.length;e<n;e++){
|
| 1963 |
+
j=a[e];
|
| 1964 |
+
i[j]||(i[j]=c.expr.match.POS.test(j)?c(j,b||this.context):j)
|
| 1965 |
+
}
|
| 1966 |
+
for(;f&&f.ownerDocument&&f!==b;){
|
| 1967 |
+
for(j in i){
|
| 1968 |
+
e=i[j];
|
| 1969 |
+
if(e.jquery?e.index(f)>
|
| 1970 |
+
-1:c(f).is(e)){
|
| 1971 |
+
d.push({
|
| 1972 |
+
selector:j,
|
| 1973 |
+
elem:f
|
| 1974 |
+
});
|
| 1975 |
+
delete i[j]
|
| 1976 |
+
}
|
| 1977 |
+
}
|
| 1978 |
+
f=f.parentNode
|
| 1979 |
+
}
|
| 1980 |
+
}
|
| 1981 |
+
return d
|
| 1982 |
+
}
|
| 1983 |
+
var o=c.expr.match.POS.test(a)?c(a,b||this.context):null;
|
| 1984 |
+
return this.map(function(m,s){
|
| 1985 |
+
for(;s&&s.ownerDocument&&s!==b;){
|
| 1986 |
+
if(o?o.index(s)>-1:c(s).is(a))return s;
|
| 1987 |
+
s=s.parentNode
|
| 1988 |
+
}
|
| 1989 |
+
return null
|
| 1990 |
+
})
|
| 1991 |
+
},
|
| 1992 |
+
index:function(a){
|
| 1993 |
+
if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());
|
| 1994 |
+
return c.inArray(a.jquery?a[0]:a,this)
|
| 1995 |
+
},
|
| 1996 |
+
add:function(a,b){
|
| 1997 |
+
a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);
|
| 1998 |
+
b=c.merge(this.get(),
|
| 1999 |
+
a);
|
| 2000 |
+
return this.pushStack(pa(a[0])||pa(b[0])?b:c.unique(b))
|
| 2001 |
+
},
|
| 2002 |
+
andSelf:function(){
|
| 2003 |
+
return this.add(this.prevObject)
|
| 2004 |
+
}
|
| 2005 |
+
});
|
| 2006 |
+
c.each({
|
| 2007 |
+
parent:function(a){
|
| 2008 |
+
return(a=a.parentNode)&&a.nodeType!==11?a:null
|
| 2009 |
+
},
|
| 2010 |
+
parents:function(a){
|
| 2011 |
+
return c.dir(a,"parentNode")
|
| 2012 |
+
},
|
| 2013 |
+
parentsUntil:function(a,b,d){
|
| 2014 |
+
return c.dir(a,"parentNode",d)
|
| 2015 |
+
},
|
| 2016 |
+
next:function(a){
|
| 2017 |
+
return c.nth(a,2,"nextSibling")
|
| 2018 |
+
},
|
| 2019 |
+
prev:function(a){
|
| 2020 |
+
return c.nth(a,2,"previousSibling")
|
| 2021 |
+
},
|
| 2022 |
+
nextAll:function(a){
|
| 2023 |
+
return c.dir(a,"nextSibling")
|
| 2024 |
+
},
|
| 2025 |
+
prevAll:function(a){
|
| 2026 |
+
return c.dir(a,"previousSibling")
|
| 2027 |
+
},
|
| 2028 |
+
nextUntil:function(a,b,d){
|
| 2029 |
+
return c.dir(a,"nextSibling",d)
|
| 2030 |
+
},
|
| 2031 |
+
prevUntil:function(a,b,d){
|
| 2032 |
+
return c.dir(a,"previousSibling",d)
|
| 2033 |
+
},
|
| 2034 |
+
siblings:function(a){
|
| 2035 |
+
return c.sibling(a.parentNode.firstChild,a)
|
| 2036 |
+
},
|
| 2037 |
+
children:function(a){
|
| 2038 |
+
return c.sibling(a.firstChild)
|
| 2039 |
+
},
|
| 2040 |
+
contents:function(a){
|
| 2041 |
+
return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)
|
| 2042 |
+
}
|
| 2043 |
+
},function(a,b){
|
| 2044 |
+
c.fn[a]=function(d,f){
|
| 2045 |
+
var e=c.map(this,b,d);
|
| 2046 |
+
bb.test(a)||(f=d);
|
| 2047 |
+
if(f&&typeof f==="string")e=c.filter(f,e);
|
| 2048 |
+
e=this.length>1?c.unique(e):
|
| 2049 |
+
e;
|
| 2050 |
+
if((this.length>1||db.test(f))&&cb.test(a))e=e.reverse();
|
| 2051 |
+
return this.pushStack(e,a,Q.call(arguments).join(","))
|
| 2052 |
+
}
|
| 2053 |
+
});
|
| 2054 |
+
c.extend({
|
| 2055 |
+
filter:function(a,b,d){
|
| 2056 |
+
if(d)a=":not("+a+")";
|
| 2057 |
+
return c.find.matches(a,b)
|
| 2058 |
+
},
|
| 2059 |
+
dir:function(a,b,d){
|
| 2060 |
+
var f=[];
|
| 2061 |
+
for(a=a[b];a&&a.nodeType!==9&&(d===v||a.nodeType!==1||!c(a).is(d));){
|
| 2062 |
+
a.nodeType===1&&f.push(a);
|
| 2063 |
+
a=a[b]
|
| 2064 |
+
}
|
| 2065 |
+
return f
|
| 2066 |
+
},
|
| 2067 |
+
nth:function(a,b,d){
|
| 2068 |
+
b=b||1;
|
| 2069 |
+
for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a
|
| 2070 |
+
},
|
| 2071 |
+
sibling:function(a,b){
|
| 2072 |
+
for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==
|
| 2073 |
+
b&&d.push(a);
|
| 2074 |
+
return d
|
| 2075 |
+
}
|
| 2076 |
+
});
|
| 2077 |
+
var Fa=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ga=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/<tbody/i,gb=/<|&\w+;/,sa=/checked\s*(?:[^=]|=\s*.checked.)/i,Ia=function(a,b,d){
|
| 2078 |
+
return eb.test(d)?a:b+"></"+d+">"
|
| 2079 |
+
},F={
|
| 2080 |
+
option:[1,"<select multiple='multiple'>","</select>"],
|
| 2081 |
+
legend:[1,"<fieldset>","</fieldset>"],
|
| 2082 |
+
thead:[1,"<table>","</table>"],
|
| 2083 |
+
tr:[2,"<table><tbody>","</tbody></table>"],
|
| 2084 |
+
td:[3,"<table><tbody><tr>","</tr></tbody></table>"],
|
| 2085 |
+
col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],
|
| 2086 |
+
area:[1,"<map>","</map>"],
|
| 2087 |
+
_default:[0,"",""]
|
| 2088 |
+
};
|
| 2089 |
+
|
| 2090 |
+
F.optgroup=F.option;
|
| 2091 |
+
F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;
|
| 2092 |
+
F.th=F.td;
|
| 2093 |
+
if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];
|
| 2094 |
+
c.fn.extend({
|
| 2095 |
+
text:function(a){
|
| 2096 |
+
if(c.isFunction(a))return this.each(function(b){
|
| 2097 |
+
var d=c(this);
|
| 2098 |
+
d.text(a.call(this,b,d.text()))
|
| 2099 |
+
});
|
| 2100 |
+
if(typeof a!=="object"&&a!==v)return this.empty().append((this[0]&&this[0].ownerDocument||r).createTextNode(a));
|
| 2101 |
+
return c.getText(this)
|
| 2102 |
+
},
|
| 2103 |
+
wrapAll:function(a){
|
| 2104 |
+
if(c.isFunction(a))return this.each(function(d){
|
| 2105 |
+
c(this).wrapAll(a.call(this,d))
|
| 2106 |
+
});
|
| 2107 |
+
if(this[0]){
|
| 2108 |
+
var b=c(a,this[0].ownerDocument).eq(0).clone(true);
|
| 2109 |
+
this[0].parentNode&&b.insertBefore(this[0]);
|
| 2110 |
+
b.map(function(){
|
| 2111 |
+
for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;
|
| 2112 |
+
return d
|
| 2113 |
+
}).append(this)
|
| 2114 |
+
}
|
| 2115 |
+
return this
|
| 2116 |
+
},
|
| 2117 |
+
wrapInner:function(a){
|
| 2118 |
+
if(c.isFunction(a))return this.each(function(b){
|
| 2119 |
+
c(this).wrapInner(a.call(this,b))
|
| 2120 |
+
});
|
| 2121 |
+
return this.each(function(){
|
| 2122 |
+
var b=c(this),d=b.contents();
|
| 2123 |
+
d.length?
|
| 2124 |
+
d.wrapAll(a):b.append(a)
|
| 2125 |
+
})
|
| 2126 |
+
},
|
| 2127 |
+
wrap:function(a){
|
| 2128 |
+
return this.each(function(){
|
| 2129 |
+
c(this).wrapAll(a)
|
| 2130 |
+
})
|
| 2131 |
+
},
|
| 2132 |
+
unwrap:function(){
|
| 2133 |
+
return this.parent().each(function(){
|
| 2134 |
+
c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)
|
| 2135 |
+
}).end()
|
| 2136 |
+
},
|
| 2137 |
+
append:function(){
|
| 2138 |
+
return this.domManip(arguments,true,function(a){
|
| 2139 |
+
this.nodeType===1&&this.appendChild(a)
|
| 2140 |
+
})
|
| 2141 |
+
},
|
| 2142 |
+
prepend:function(){
|
| 2143 |
+
return this.domManip(arguments,true,function(a){
|
| 2144 |
+
this.nodeType===1&&this.insertBefore(a,this.firstChild)
|
| 2145 |
+
})
|
| 2146 |
+
},
|
| 2147 |
+
before:function(){
|
| 2148 |
+
if(this[0]&&this[0].parentNode)return this.domManip(arguments,
|
| 2149 |
+
false,function(b){
|
| 2150 |
+
this.parentNode.insertBefore(b,this)
|
| 2151 |
+
});
|
| 2152 |
+
else if(arguments.length){
|
| 2153 |
+
var a=c(arguments[0]);
|
| 2154 |
+
a.push.apply(a,this.toArray());
|
| 2155 |
+
return this.pushStack(a,"before",arguments)
|
| 2156 |
+
}
|
| 2157 |
+
},
|
| 2158 |
+
after:function(){
|
| 2159 |
+
if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){
|
| 2160 |
+
this.parentNode.insertBefore(b,this.nextSibling)
|
| 2161 |
+
});
|
| 2162 |
+
else if(arguments.length){
|
| 2163 |
+
var a=this.pushStack(this,"after",arguments);
|
| 2164 |
+
a.push.apply(a,c(arguments[0]).toArray());
|
| 2165 |
+
return a
|
| 2166 |
+
}
|
| 2167 |
+
},
|
| 2168 |
+
clone:function(a){
|
| 2169 |
+
var b=this.map(function(){
|
| 2170 |
+
if(!c.support.noCloneEvent&&
|
| 2171 |
+
!c.isXMLDoc(this)){
|
| 2172 |
+
var d=this.outerHTML,f=this.ownerDocument;
|
| 2173 |
+
if(!d){
|
| 2174 |
+
d=f.createElement("div");
|
| 2175 |
+
d.appendChild(this.cloneNode(true));
|
| 2176 |
+
d=d.innerHTML
|
| 2177 |
+
}
|
| 2178 |
+
return c.clean([d.replace(Fa,"").replace(V,"")],f)[0]
|
| 2179 |
+
}else return this.cloneNode(true)
|
| 2180 |
+
});
|
| 2181 |
+
if(a===true){
|
| 2182 |
+
qa(this,b);
|
| 2183 |
+
qa(this.find("*"),b.find("*"))
|
| 2184 |
+
}
|
| 2185 |
+
return b
|
| 2186 |
+
},
|
| 2187 |
+
html:function(a){
|
| 2188 |
+
if(a===v)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Fa,""):null;
|
| 2189 |
+
else if(typeof a==="string"&&!/<script/i.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(Ha.exec(a)||
|
| 2190 |
+
["",""])[1].toLowerCase()]){
|
| 2191 |
+
a=a.replace(Ga,Ia);
|
| 2192 |
+
try{
|
| 2193 |
+
for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){
|
| 2194 |
+
c.cleanData(this[b].getElementsByTagName("*"));
|
| 2195 |
+
this[b].innerHTML=a
|
| 2196 |
+
}
|
| 2197 |
+
}catch(f){
|
| 2198 |
+
this.empty().append(a)
|
| 2199 |
+
}
|
| 2200 |
+
}else c.isFunction(a)?this.each(function(e){
|
| 2201 |
+
var i=c(this),j=i.html();
|
| 2202 |
+
i.empty().append(function(){
|
| 2203 |
+
return a.call(this,e,j)
|
| 2204 |
+
})
|
| 2205 |
+
}):this.empty().append(a);
|
| 2206 |
+
return this
|
| 2207 |
+
},
|
| 2208 |
+
replaceWith:function(a){
|
| 2209 |
+
if(this[0]&&this[0].parentNode){
|
| 2210 |
+
if(c.isFunction(a))return this.each(function(b){
|
| 2211 |
+
var d=c(this),f=d.html();
|
| 2212 |
+
d.replaceWith(a.call(this,
|
| 2213 |
+
b,f))
|
| 2214 |
+
});else a=c(a).detach();
|
| 2215 |
+
return this.each(function(){
|
| 2216 |
+
var b=this.nextSibling,d=this.parentNode;
|
| 2217 |
+
c(this).remove();
|
| 2218 |
+
b?c(b).before(a):c(d).append(a)
|
| 2219 |
+
})
|
| 2220 |
+
}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)
|
| 2221 |
+
},
|
| 2222 |
+
detach:function(a){
|
| 2223 |
+
return this.remove(a,true)
|
| 2224 |
+
},
|
| 2225 |
+
domManip:function(a,b,d){
|
| 2226 |
+
function f(s){
|
| 2227 |
+
return c.nodeName(s,"table")?s.getElementsByTagName("tbody")[0]||s.appendChild(s.ownerDocument.createElement("tbody")):s
|
| 2228 |
+
}
|
| 2229 |
+
var e,i,j=a[0],n=[];
|
| 2230 |
+
if(!c.support.checkClone&&arguments.length===3&&typeof j===
|
| 2231 |
+
"string"&&sa.test(j))return this.each(function(){
|
| 2232 |
+
c(this).domManip(a,b,d,true)
|
| 2233 |
+
});
|
| 2234 |
+
if(c.isFunction(j))return this.each(function(s){
|
| 2235 |
+
var x=c(this);
|
| 2236 |
+
a[0]=j.call(this,s,b?x.html():v);
|
| 2237 |
+
x.domManip(a,b,d)
|
| 2238 |
+
});
|
| 2239 |
+
if(this[0]){
|
| 2240 |
+
e=a[0]&&a[0].parentNode&&a[0].parentNode.nodeType===11?{
|
| 2241 |
+
fragment:a[0].parentNode
|
| 2242 |
+
}:ra(a,this,n);
|
| 2243 |
+
if(i=e.fragment.firstChild){
|
| 2244 |
+
b=b&&c.nodeName(i,"tr");
|
| 2245 |
+
for(var o=0,m=this.length;o<m;o++)d.call(b?f(this[o],i):this[o],e.cacheable||this.length>1||o>0?e.fragment.cloneNode(true):e.fragment)
|
| 2246 |
+
}
|
| 2247 |
+
n&&c.each(n,
|
| 2248 |
+
Ma)
|
| 2249 |
+
}
|
| 2250 |
+
return this
|
| 2251 |
+
}
|
| 2252 |
+
});
|
| 2253 |
+
c.fragments={};
|
| 2254 |
+
|
| 2255 |
+
c.each({
|
| 2256 |
+
appendTo:"append",
|
| 2257 |
+
prependTo:"prepend",
|
| 2258 |
+
insertBefore:"before",
|
| 2259 |
+
insertAfter:"after",
|
| 2260 |
+
replaceAll:"replaceWith"
|
| 2261 |
+
},function(a,b){
|
| 2262 |
+
c.fn[a]=function(d){
|
| 2263 |
+
var f=[];
|
| 2264 |
+
d=c(d);
|
| 2265 |
+
for(var e=0,i=d.length;e<i;e++){
|
| 2266 |
+
var j=(e>0?this.clone(true):this).get();
|
| 2267 |
+
c.fn[b].apply(c(d[e]),j);
|
| 2268 |
+
f=f.concat(j)
|
| 2269 |
+
}
|
| 2270 |
+
return this.pushStack(f,a,d.selector)
|
| 2271 |
+
}
|
| 2272 |
+
});
|
| 2273 |
+
c.each({
|
| 2274 |
+
remove:function(a,b){
|
| 2275 |
+
if(!a||c.filter(a,[this]).length){
|
| 2276 |
+
if(!b&&this.nodeType===1){
|
| 2277 |
+
c.cleanData(this.getElementsByTagName("*"));
|
| 2278 |
+
c.cleanData([this])
|
| 2279 |
+
}
|
| 2280 |
+
this.parentNode&&
|
| 2281 |
+
this.parentNode.removeChild(this)
|
| 2282 |
+
}
|
| 2283 |
+
},
|
| 2284 |
+
empty:function(){
|
| 2285 |
+
for(this.nodeType===1&&c.cleanData(this.getElementsByTagName("*"));this.firstChild;)this.removeChild(this.firstChild)
|
| 2286 |
+
}
|
| 2287 |
+
},function(a,b){
|
| 2288 |
+
c.fn[a]=function(){
|
| 2289 |
+
return this.each(b,arguments)
|
| 2290 |
+
}
|
| 2291 |
+
});
|
| 2292 |
+
c.extend({
|
| 2293 |
+
clean:function(a,b,d,f){
|
| 2294 |
+
b=b||r;
|
| 2295 |
+
if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||r;
|
| 2296 |
+
var e=[];
|
| 2297 |
+
c.each(a,function(i,j){
|
| 2298 |
+
if(typeof j==="number")j+="";
|
| 2299 |
+
if(j){
|
| 2300 |
+
if(typeof j==="string"&&!gb.test(j))j=b.createTextNode(j);
|
| 2301 |
+
else if(typeof j===
|
| 2302 |
+
"string"){
|
| 2303 |
+
j=j.replace(Ga,Ia);
|
| 2304 |
+
var n=(Ha.exec(j)||["",""])[1].toLowerCase(),o=F[n]||F._default,m=o[0];
|
| 2305 |
+
i=b.createElement("div");
|
| 2306 |
+
for(i.innerHTML=o[1]+j+o[2];m--;)i=i.lastChild;
|
| 2307 |
+
if(!c.support.tbody){
|
| 2308 |
+
m=fb.test(j);
|
| 2309 |
+
n=n==="table"&&!m?i.firstChild&&i.firstChild.childNodes:o[1]==="<table>"&&!m?i.childNodes:[];
|
| 2310 |
+
for(o=n.length-1;o>=0;--o)c.nodeName(n[o],"tbody")&&!n[o].childNodes.length&&n[o].parentNode.removeChild(n[o])
|
| 2311 |
+
}!c.support.leadingWhitespace&&V.test(j)&&i.insertBefore(b.createTextNode(V.exec(j)[0]),i.firstChild);
|
| 2312 |
+
j=c.makeArray(i.childNodes)
|
| 2313 |
+
}
|
| 2314 |
+
if(j.nodeType)e.push(j);else e=c.merge(e,j)
|
| 2315 |
+
}
|
| 2316 |
+
});
|
| 2317 |
+
if(d)for(a=0;e[a];a++)if(f&&c.nodeName(e[a],"script")&&(!e[a].type||e[a].type.toLowerCase()==="text/javascript"))f.push(e[a].parentNode?e[a].parentNode.removeChild(e[a]):e[a]);
|
| 2318 |
+
else{
|
| 2319 |
+
e[a].nodeType===1&&e.splice.apply(e,[a+1,0].concat(c.makeArray(e[a].getElementsByTagName("script"))));
|
| 2320 |
+
d.appendChild(e[a])
|
| 2321 |
+
}
|
| 2322 |
+
return e
|
| 2323 |
+
},
|
| 2324 |
+
cleanData:function(a){
|
| 2325 |
+
for(var b=0,d;(d=a[b])!=null;b++){
|
| 2326 |
+
c.event.remove(d);
|
| 2327 |
+
c.removeData(d)
|
| 2328 |
+
}
|
| 2329 |
+
}
|
| 2330 |
+
});
|
| 2331 |
+
var hb=/z-?index|font-?weight|opacity|zoom|line-?height/i,
|
| 2332 |
+
Ja=/alpha\([^)]*\)/,Ka=/opacity=([^)]*)/,ga=/float/i,ha=/-([a-z])/ig,ib=/([A-Z])/g,jb=/^-?\d+(?:px)?$/i,kb=/^-?\d/,lb={
|
| 2333 |
+
position:"absolute",
|
| 2334 |
+
visibility:"hidden",
|
| 2335 |
+
display:"block"
|
| 2336 |
+
},mb=["Left","Right"],nb=["Top","Bottom"],ob=r.defaultView&&r.defaultView.getComputedStyle,La=c.support.cssFloat?"cssFloat":"styleFloat",ia=function(a,b){
|
| 2337 |
+
return b.toUpperCase()
|
| 2338 |
+
};
|
| 2339 |
+
|
| 2340 |
+
c.fn.css=function(a,b){
|
| 2341 |
+
return X(this,a,b,true,function(d,f,e){
|
| 2342 |
+
if(e===v)return c.curCSS(d,f);
|
| 2343 |
+
if(typeof e==="number"&&!hb.test(f))e+="px";
|
| 2344 |
+
c.style(d,f,e)
|
| 2345 |
+
})
|
| 2346 |
+
};
|
| 2347 |
+
c.extend({
|
| 2348 |
+
style:function(a,b,d){
|
| 2349 |
+
if(!a||a.nodeType===3||a.nodeType===8)return v;
|
| 2350 |
+
if((b==="width"||b==="height")&&parseFloat(d)<0)d=v;
|
| 2351 |
+
var f=a.style||a,e=d!==v;
|
| 2352 |
+
if(!c.support.opacity&&b==="opacity"){
|
| 2353 |
+
if(e){
|
| 2354 |
+
f.zoom=1;
|
| 2355 |
+
b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";
|
| 2356 |
+
a=f.filter||c.curCSS(a,"filter")||"";
|
| 2357 |
+
f.filter=Ja.test(a)?a.replace(Ja,b):b
|
| 2358 |
+
}
|
| 2359 |
+
return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Ka.exec(f.filter)[1])/100+"":""
|
| 2360 |
+
}
|
| 2361 |
+
if(ga.test(b))b=La;
|
| 2362 |
+
b=b.replace(ha,ia);
|
| 2363 |
+
if(e)f[b]=d;
|
| 2364 |
+
return f[b]
|
| 2365 |
+
},
|
| 2366 |
+
css:function(a,
|
| 2367 |
+
b,d,f){
|
| 2368 |
+
if(b==="width"||b==="height"){
|
| 2369 |
+
var e,i=b==="width"?mb:nb;
|
| 2370 |
+
function j(){
|
| 2371 |
+
e=b==="width"?a.offsetWidth:a.offsetHeight;
|
| 2372 |
+
f!=="border"&&c.each(i,function(){
|
| 2373 |
+
f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);
|
| 2374 |
+
if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,"border"+this+"Width",true))||0
|
| 2375 |
+
})
|
| 2376 |
+
}
|
| 2377 |
+
a.offsetWidth!==0?j():c.swap(a,lb,j);
|
| 2378 |
+
return Math.max(0,Math.round(e))
|
| 2379 |
+
}
|
| 2380 |
+
return c.curCSS(a,b,d)
|
| 2381 |
+
},
|
| 2382 |
+
curCSS:function(a,b,d){
|
| 2383 |
+
var f,e=a.style;
|
| 2384 |
+
if(!c.support.opacity&&b==="opacity"&&
|
| 2385 |
+
a.currentStyle){
|
| 2386 |
+
f=Ka.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";
|
| 2387 |
+
return f===""?"1":f
|
| 2388 |
+
}
|
| 2389 |
+
if(ga.test(b))b=La;
|
| 2390 |
+
if(!d&&e&&e[b])f=e[b];
|
| 2391 |
+
else if(ob){
|
| 2392 |
+
if(ga.test(b))b="float";
|
| 2393 |
+
b=b.replace(ib,"-$1").toLowerCase();
|
| 2394 |
+
e=a.ownerDocument.defaultView;
|
| 2395 |
+
if(!e)return null;
|
| 2396 |
+
if(a=e.getComputedStyle(a,null))f=a.getPropertyValue(b);
|
| 2397 |
+
if(b==="opacity"&&f==="")f="1"
|
| 2398 |
+
}else if(a.currentStyle){
|
| 2399 |
+
d=b.replace(ha,ia);
|
| 2400 |
+
f=a.currentStyle[b]||a.currentStyle[d];
|
| 2401 |
+
if(!jb.test(f)&&kb.test(f)){
|
| 2402 |
+
b=e.left;
|
| 2403 |
+
var i=a.runtimeStyle.left;
|
| 2404 |
+
a.runtimeStyle.left=
|
| 2405 |
+
a.currentStyle.left;
|
| 2406 |
+
e.left=d==="fontSize"?"1em":f||0;
|
| 2407 |
+
f=e.pixelLeft+"px";
|
| 2408 |
+
e.left=b;
|
| 2409 |
+
a.runtimeStyle.left=i
|
| 2410 |
+
}
|
| 2411 |
+
}
|
| 2412 |
+
return f
|
| 2413 |
+
},
|
| 2414 |
+
swap:function(a,b,d){
|
| 2415 |
+
var f={};
|
| 2416 |
+
|
| 2417 |
+
for(var e in b){
|
| 2418 |
+
f[e]=a.style[e];
|
| 2419 |
+
a.style[e]=b[e]
|
| 2420 |
+
}
|
| 2421 |
+
d.call(a);
|
| 2422 |
+
for(e in b)a.style[e]=f[e]
|
| 2423 |
+
}
|
| 2424 |
+
});
|
| 2425 |
+
if(c.expr&&c.expr.filters){
|
| 2426 |
+
c.expr.filters.hidden=function(a){
|
| 2427 |
+
var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";
|
| 2428 |
+
return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"
|
| 2429 |
+
};
|
| 2430 |
+
|
| 2431 |
+
c.expr.filters.visible=function(a){
|
| 2432 |
+
return!c.expr.filters.hidden(a)
|
| 2433 |
+
}
|
| 2434 |
+
}
|
| 2435 |
+
var pb=
|
| 2436 |
+
J(),qb=/<script(.|\s)*?\/script>/gi,rb=/select|textarea/i,sb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ja=/\?/,tb=/(\?|&)_=.*?(&|$)/,ub=/^(\w+:)?\/\/([^\/?#]+)/,vb=/%20/g;
|
| 2437 |
+
c.fn.extend({
|
| 2438 |
+
_load:c.fn.load,
|
| 2439 |
+
load:function(a,b,d){
|
| 2440 |
+
if(typeof a!=="string")return this._load(a);
|
| 2441 |
+
else if(!this.length)return this;
|
| 2442 |
+
var f=a.indexOf(" ");
|
| 2443 |
+
if(f>=0){
|
| 2444 |
+
var e=a.slice(f,a.length);
|
| 2445 |
+
a=a.slice(0,f)
|
| 2446 |
+
}
|
| 2447 |
+
f="GET";
|
| 2448 |
+
if(b)if(c.isFunction(b)){
|
| 2449 |
+
d=b;
|
| 2450 |
+
b=null
|
| 2451 |
+
}else if(typeof b==="object"){
|
| 2452 |
+
b=
|
| 2453 |
+
c.param(b,c.ajaxSettings.traditional);
|
| 2454 |
+
f="POST"
|
| 2455 |
+
}
|
| 2456 |
+
var i=this;
|
| 2457 |
+
c.ajax({
|
| 2458 |
+
url:a,
|
| 2459 |
+
type:f,
|
| 2460 |
+
dataType:"html",
|
| 2461 |
+
data:b,
|
| 2462 |
+
complete:function(j,n){
|
| 2463 |
+
if(n==="success"||n==="notmodified")i.html(e?c("<div />").append(j.responseText.replace(qb,"")).find(e):j.responseText);
|
| 2464 |
+
d&&i.each(d,[j.responseText,n,j])
|
| 2465 |
+
}
|
| 2466 |
+
});
|
| 2467 |
+
return this
|
| 2468 |
+
},
|
| 2469 |
+
serialize:function(){
|
| 2470 |
+
return c.param(this.serializeArray())
|
| 2471 |
+
},
|
| 2472 |
+
serializeArray:function(){
|
| 2473 |
+
return this.map(function(){
|
| 2474 |
+
return this.elements?c.makeArray(this.elements):this
|
| 2475 |
+
}).filter(function(){
|
| 2476 |
+
return this.name&&!this.disabled&&
|
| 2477 |
+
(this.checked||rb.test(this.nodeName)||sb.test(this.type))
|
| 2478 |
+
}).map(function(a,b){
|
| 2479 |
+
a=c(this).val();
|
| 2480 |
+
return a==null?null:c.isArray(a)?c.map(a,function(d){
|
| 2481 |
+
return{
|
| 2482 |
+
name:b.name,
|
| 2483 |
+
value:d
|
| 2484 |
+
}
|
| 2485 |
+
}):{
|
| 2486 |
+
name:b.name,
|
| 2487 |
+
value:a
|
| 2488 |
+
}
|
| 2489 |
+
}).get()
|
| 2490 |
+
}
|
| 2491 |
+
});
|
| 2492 |
+
c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){
|
| 2493 |
+
c.fn[b]=function(d){
|
| 2494 |
+
return this.bind(b,d)
|
| 2495 |
+
}
|
| 2496 |
+
});
|
| 2497 |
+
c.extend({
|
| 2498 |
+
get:function(a,b,d,f){
|
| 2499 |
+
if(c.isFunction(b)){
|
| 2500 |
+
f=f||d;
|
| 2501 |
+
d=b;
|
| 2502 |
+
b=null
|
| 2503 |
+
}
|
| 2504 |
+
return c.ajax({
|
| 2505 |
+
type:"GET",
|
| 2506 |
+
url:a,
|
| 2507 |
+
data:b,
|
| 2508 |
+
success:d,
|
| 2509 |
+
dataType:f
|
| 2510 |
+
})
|
| 2511 |
+
},
|
| 2512 |
+
getScript:function(a,
|
| 2513 |
+
b){
|
| 2514 |
+
return c.get(a,null,b,"script")
|
| 2515 |
+
},
|
| 2516 |
+
getJSON:function(a,b,d){
|
| 2517 |
+
return c.get(a,b,d,"json")
|
| 2518 |
+
},
|
| 2519 |
+
post:function(a,b,d,f){
|
| 2520 |
+
if(c.isFunction(b)){
|
| 2521 |
+
f=f||d;
|
| 2522 |
+
d=b;
|
| 2523 |
+
b={}
|
| 2524 |
+
}
|
| 2525 |
+
return c.ajax({
|
| 2526 |
+
type:"POST",
|
| 2527 |
+
url:a,
|
| 2528 |
+
data:b,
|
| 2529 |
+
success:d,
|
| 2530 |
+
dataType:f
|
| 2531 |
+
})
|
| 2532 |
+
},
|
| 2533 |
+
ajaxSetup:function(a){
|
| 2534 |
+
c.extend(c.ajaxSettings,a)
|
| 2535 |
+
},
|
| 2536 |
+
ajaxSettings:{
|
| 2537 |
+
url:location.href,
|
| 2538 |
+
global:true,
|
| 2539 |
+
type:"GET",
|
| 2540 |
+
contentType:"application/x-www-form-urlencoded",
|
| 2541 |
+
processData:true,
|
| 2542 |
+
async:true,
|
| 2543 |
+
xhr:z.XMLHttpRequest&&(z.location.protocol!=="file:"||!z.ActiveXObject)?function(){
|
| 2544 |
+
return new z.XMLHttpRequest
|
| 2545 |
+
}:
|
| 2546 |
+
function(){
|
| 2547 |
+
try{
|
| 2548 |
+
return new z.ActiveXObject("Microsoft.XMLHTTP")
|
| 2549 |
+
}catch(a){}
|
| 2550 |
+
},
|
| 2551 |
+
accepts:{
|
| 2552 |
+
xml:"application/xml, text/xml",
|
| 2553 |
+
html:"text/html",
|
| 2554 |
+
script:"text/javascript, application/javascript",
|
| 2555 |
+
json:"application/json, text/javascript",
|
| 2556 |
+
text:"text/plain",
|
| 2557 |
+
_default:"*/*"
|
| 2558 |
+
}
|
| 2559 |
+
},
|
| 2560 |
+
lastModified:{},
|
| 2561 |
+
etag:{},
|
| 2562 |
+
ajax:function(a){
|
| 2563 |
+
function b(){
|
| 2564 |
+
e.success&&e.success.call(o,n,j,w);
|
| 2565 |
+
e.global&&f("ajaxSuccess",[w,e])
|
| 2566 |
+
}
|
| 2567 |
+
function d(){
|
| 2568 |
+
e.complete&&e.complete.call(o,w,j);
|
| 2569 |
+
e.global&&f("ajaxComplete",[w,e]);
|
| 2570 |
+
e.global&&!--c.active&&c.event.trigger("ajaxStop")
|
| 2571 |
+
}
|
| 2572 |
+
function f(q,p){
|
| 2573 |
+
(e.context?c(e.context):c.event).trigger(q,p)
|
| 2574 |
+
}
|
| 2575 |
+
var e=c.extend(true,{},c.ajaxSettings,a),i,j,n,o=a&&a.context||e,m=e.type.toUpperCase();
|
| 2576 |
+
if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);
|
| 2577 |
+
if(e.dataType==="jsonp"){
|
| 2578 |
+
if(m==="GET")N.test(e.url)||(e.url+=(ja.test(e.url)?"&":"?")+(e.jsonp||"callback")+"=?");
|
| 2579 |
+
else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";
|
| 2580 |
+
e.dataType="json"
|
| 2581 |
+
}
|
| 2582 |
+
if(e.dataType==="json"&&(e.data&&N.test(e.data)||
|
| 2583 |
+
N.test(e.url))){
|
| 2584 |
+
i=e.jsonpCallback||"jsonp"+pb++;
|
| 2585 |
+
if(e.data)e.data=(e.data+"").replace(N,"="+i+"$1");
|
| 2586 |
+
e.url=e.url.replace(N,"="+i+"$1");
|
| 2587 |
+
e.dataType="script";
|
| 2588 |
+
z[i]=z[i]||function(q){
|
| 2589 |
+
n=q;
|
| 2590 |
+
b();
|
| 2591 |
+
d();
|
| 2592 |
+
z[i]=v;
|
| 2593 |
+
try{
|
| 2594 |
+
delete z[i]
|
| 2595 |
+
}catch(p){}
|
| 2596 |
+
A&&A.removeChild(B)
|
| 2597 |
+
}
|
| 2598 |
+
}
|
| 2599 |
+
if(e.dataType==="script"&&e.cache===null)e.cache=false;
|
| 2600 |
+
if(e.cache===false&&m==="GET"){
|
| 2601 |
+
var s=J(),x=e.url.replace(tb,"$1_="+s+"$2");
|
| 2602 |
+
e.url=x+(x===e.url?(ja.test(e.url)?"&":"?")+"_="+s:"")
|
| 2603 |
+
}
|
| 2604 |
+
if(e.data&&m==="GET")e.url+=(ja.test(e.url)?"&":"?")+e.data;
|
| 2605 |
+
e.global&&!c.active++&&
|
| 2606 |
+
c.event.trigger("ajaxStart");
|
| 2607 |
+
s=(s=ub.exec(e.url))&&(s[1]&&s[1]!==location.protocol||s[2]!==location.host);
|
| 2608 |
+
if(e.dataType==="script"&&m==="GET"&&s){
|
| 2609 |
+
var A=r.getElementsByTagName("head")[0]||r.documentElement,B=r.createElement("script");
|
| 2610 |
+
B.src=e.url;
|
| 2611 |
+
if(e.scriptCharset)B.charset=e.scriptCharset;
|
| 2612 |
+
if(!i){
|
| 2613 |
+
var C=false;
|
| 2614 |
+
B.onload=B.onreadystatechange=function(){
|
| 2615 |
+
if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){
|
| 2616 |
+
C=true;
|
| 2617 |
+
b();
|
| 2618 |
+
d();
|
| 2619 |
+
B.onload=B.onreadystatechange=null;
|
| 2620 |
+
A&&B.parentNode&&
|
| 2621 |
+
A.removeChild(B)
|
| 2622 |
+
}
|
| 2623 |
+
}
|
| 2624 |
+
}
|
| 2625 |
+
A.insertBefore(B,A.firstChild);
|
| 2626 |
+
return v
|
| 2627 |
+
}
|
| 2628 |
+
var E=false,w=e.xhr();
|
| 2629 |
+
if(w){
|
| 2630 |
+
e.username?w.open(m,e.url,e.async,e.username,e.password):w.open(m,e.url,e.async);
|
| 2631 |
+
try{
|
| 2632 |
+
if(e.data||a&&a.contentType)w.setRequestHeader("Content-Type",e.contentType);
|
| 2633 |
+
if(e.ifModified){
|
| 2634 |
+
c.lastModified[e.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[e.url]);
|
| 2635 |
+
c.etag[e.url]&&w.setRequestHeader("If-None-Match",c.etag[e.url])
|
| 2636 |
+
}
|
| 2637 |
+
s||w.setRequestHeader("X-Requested-With","XMLHttpRequest");
|
| 2638 |
+
w.setRequestHeader("Accept",
|
| 2639 |
+
e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)
|
| 2640 |
+
}catch(fa){}
|
| 2641 |
+
if(e.beforeSend&&e.beforeSend.call(o,w,e)===false){
|
| 2642 |
+
e.global&&!--c.active&&c.event.trigger("ajaxStop");
|
| 2643 |
+
w.abort();
|
| 2644 |
+
return false
|
| 2645 |
+
}
|
| 2646 |
+
e.global&&f("ajaxSend",[w,e]);
|
| 2647 |
+
var g=w.onreadystatechange=function(q){
|
| 2648 |
+
if(!w||w.readyState===0||q==="abort"){
|
| 2649 |
+
E||d();
|
| 2650 |
+
E=true;
|
| 2651 |
+
if(w)w.onreadystatechange=c.noop
|
| 2652 |
+
}else if(!E&&w&&(w.readyState===4||q==="timeout")){
|
| 2653 |
+
E=true;
|
| 2654 |
+
w.onreadystatechange=c.noop;
|
| 2655 |
+
j=q==="timeout"?"timeout":!c.httpSuccess(w)?
|
| 2656 |
+
"error":e.ifModified&&c.httpNotModified(w,e.url)?"notmodified":"success";
|
| 2657 |
+
var p;
|
| 2658 |
+
if(j==="success")try{
|
| 2659 |
+
n=c.httpData(w,e.dataType,e)
|
| 2660 |
+
}catch(u){
|
| 2661 |
+
j="parsererror";
|
| 2662 |
+
p=u
|
| 2663 |
+
}
|
| 2664 |
+
if(j==="success"||j==="notmodified")i||b();else c.handleError(e,w,j,p);
|
| 2665 |
+
d();
|
| 2666 |
+
q==="timeout"&&w.abort();
|
| 2667 |
+
if(e.async)w=null
|
| 2668 |
+
}
|
| 2669 |
+
};
|
| 2670 |
+
|
| 2671 |
+
try{
|
| 2672 |
+
var h=w.abort;
|
| 2673 |
+
w.abort=function(){
|
| 2674 |
+
w&&h.call(w);
|
| 2675 |
+
g("abort")
|
| 2676 |
+
}
|
| 2677 |
+
}catch(k){}
|
| 2678 |
+
e.async&&e.timeout>0&&setTimeout(function(){
|
| 2679 |
+
w&&!E&&g("timeout")
|
| 2680 |
+
},e.timeout);
|
| 2681 |
+
try{
|
| 2682 |
+
w.send(m==="POST"||m==="PUT"||m==="DELETE"?e.data:null)
|
| 2683 |
+
}catch(l){
|
| 2684 |
+
c.handleError(e,
|
| 2685 |
+
w,null,l);
|
| 2686 |
+
d()
|
| 2687 |
+
}
|
| 2688 |
+
e.async||g();
|
| 2689 |
+
return w
|
| 2690 |
+
}
|
| 2691 |
+
},
|
| 2692 |
+
handleError:function(a,b,d,f){
|
| 2693 |
+
if(a.error)a.error.call(a.context||a,b,d,f);
|
| 2694 |
+
if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])
|
| 2695 |
+
},
|
| 2696 |
+
active:0,
|
| 2697 |
+
httpSuccess:function(a){
|
| 2698 |
+
try{
|
| 2699 |
+
return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223||a.status===0
|
| 2700 |
+
}catch(b){}
|
| 2701 |
+
return false
|
| 2702 |
+
},
|
| 2703 |
+
httpNotModified:function(a,b){
|
| 2704 |
+
var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");
|
| 2705 |
+
if(d)c.lastModified[b]=d;
|
| 2706 |
+
if(f)c.etag[b]=
|
| 2707 |
+
f;
|
| 2708 |
+
return a.status===304||a.status===0
|
| 2709 |
+
},
|
| 2710 |
+
httpData:function(a,b,d){
|
| 2711 |
+
var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;
|
| 2712 |
+
a=e?a.responseXML:a.responseText;
|
| 2713 |
+
e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");
|
| 2714 |
+
if(d&&d.dataFilter)a=d.dataFilter(a,b);
|
| 2715 |
+
if(typeof a==="string")if(b==="json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);
|
| 2716 |
+
else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);
|
| 2717 |
+
return a
|
| 2718 |
+
},
|
| 2719 |
+
param:function(a,b){
|
| 2720 |
+
function d(j,n){
|
| 2721 |
+
if(c.isArray(n))c.each(n,
|
| 2722 |
+
function(o,m){
|
| 2723 |
+
b?f(j,m):d(j+"["+(typeof m==="object"||c.isArray(m)?o:"")+"]",m)
|
| 2724 |
+
});else!b&&n!=null&&typeof n==="object"?c.each(n,function(o,m){
|
| 2725 |
+
d(j+"["+o+"]",m)
|
| 2726 |
+
}):f(j,n)
|
| 2727 |
+
}
|
| 2728 |
+
function f(j,n){
|
| 2729 |
+
n=c.isFunction(n)?n():n;
|
| 2730 |
+
e[e.length]=encodeURIComponent(j)+"="+encodeURIComponent(n)
|
| 2731 |
+
}
|
| 2732 |
+
var e=[];
|
| 2733 |
+
if(b===v)b=c.ajaxSettings.traditional;
|
| 2734 |
+
if(c.isArray(a)||a.jquery)c.each(a,function(){
|
| 2735 |
+
f(this.name,this.value)
|
| 2736 |
+
});else for(var i in a)d(i,a[i]);return e.join("&").replace(vb,"+")
|
| 2737 |
+
}
|
| 2738 |
+
});
|
| 2739 |
+
var ka={},wb=/toggle|show|hide/,xb=/^([+-]=)?([\d+-.]+)(.*)$/,
|
| 2740 |
+
W,ta=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];
|
| 2741 |
+
c.fn.extend({
|
| 2742 |
+
show:function(a,b){
|
| 2743 |
+
if(a||a===0)return this.animate(K("show",3),a,b);
|
| 2744 |
+
else{
|
| 2745 |
+
a=0;
|
| 2746 |
+
for(b=this.length;a<b;a++){
|
| 2747 |
+
var d=c.data(this[a],"olddisplay");
|
| 2748 |
+
this[a].style.display=d||"";
|
| 2749 |
+
if(c.css(this[a],"display")==="none"){
|
| 2750 |
+
d=this[a].nodeName;
|
| 2751 |
+
var f;
|
| 2752 |
+
if(ka[d])f=ka[d];
|
| 2753 |
+
else{
|
| 2754 |
+
var e=c("<"+d+" />").appendTo("body");
|
| 2755 |
+
f=e.css("display");
|
| 2756 |
+
if(f==="none")f="block";
|
| 2757 |
+
e.remove();
|
| 2758 |
+
ka[d]=f
|
| 2759 |
+
}
|
| 2760 |
+
c.data(this[a],"olddisplay",f)
|
| 2761 |
+
}
|
| 2762 |
+
}
|
| 2763 |
+
a=0;
|
| 2764 |
+
for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";
|
| 2765 |
+
return this
|
| 2766 |
+
}
|
| 2767 |
+
},
|
| 2768 |
+
hide:function(a,b){
|
| 2769 |
+
if(a||a===0)return this.animate(K("hide",3),a,b);
|
| 2770 |
+
else{
|
| 2771 |
+
a=0;
|
| 2772 |
+
for(b=this.length;a<b;a++){
|
| 2773 |
+
var d=c.data(this[a],"olddisplay");
|
| 2774 |
+
!d&&d!=="none"&&c.data(this[a],"olddisplay",c.css(this[a],"display"))
|
| 2775 |
+
}
|
| 2776 |
+
a=0;
|
| 2777 |
+
for(b=this.length;a<b;a++)this[a].style.display="none";
|
| 2778 |
+
return this
|
| 2779 |
+
}
|
| 2780 |
+
},
|
| 2781 |
+
_toggle:c.fn.toggle,
|
| 2782 |
+
toggle:function(a,b){
|
| 2783 |
+
var d=typeof a==="boolean";
|
| 2784 |
+
if(c.isFunction(a)&&
|
| 2785 |
+
c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){
|
| 2786 |
+
var f=d?a:c(this).is(":hidden");
|
| 2787 |
+
c(this)[f?"show":"hide"]()
|
| 2788 |
+
}):this.animate(K("toggle",3),a,b);
|
| 2789 |
+
return this
|
| 2790 |
+
},
|
| 2791 |
+
fadeTo:function(a,b,d){
|
| 2792 |
+
return this.filter(":hidden").css("opacity",0).show().end().animate({
|
| 2793 |
+
opacity:b
|
| 2794 |
+
},a,d)
|
| 2795 |
+
},
|
| 2796 |
+
animate:function(a,b,d,f){
|
| 2797 |
+
var e=c.speed(b,d,f);
|
| 2798 |
+
if(c.isEmptyObject(a))return this.each(e.complete);
|
| 2799 |
+
return this[e.queue===false?"each":"queue"](function(){
|
| 2800 |
+
var i=c.extend({},e),j,n=this.nodeType===1&&c(this).is(":hidden"),
|
| 2801 |
+
o=this;
|
| 2802 |
+
for(j in a){
|
| 2803 |
+
var m=j.replace(ha,ia);
|
| 2804 |
+
if(j!==m){
|
| 2805 |
+
a[m]=a[j];
|
| 2806 |
+
delete a[j];
|
| 2807 |
+
j=m
|
| 2808 |
+
}
|
| 2809 |
+
if(a[j]==="hide"&&n||a[j]==="show"&&!n)return i.complete.call(this);
|
| 2810 |
+
if((j==="height"||j==="width")&&this.style){
|
| 2811 |
+
i.display=c.css(this,"display");
|
| 2812 |
+
i.overflow=this.style.overflow
|
| 2813 |
+
}
|
| 2814 |
+
if(c.isArray(a[j])){
|
| 2815 |
+
(i.specialEasing=i.specialEasing||{})[j]=a[j][1];
|
| 2816 |
+
a[j]=a[j][0]
|
| 2817 |
+
}
|
| 2818 |
+
}
|
| 2819 |
+
if(i.overflow!=null)this.style.overflow="hidden";
|
| 2820 |
+
i.curAnim=c.extend({},a);
|
| 2821 |
+
c.each(a,function(s,x){
|
| 2822 |
+
var A=new c.fx(o,i,s);
|
| 2823 |
+
if(wb.test(x))A[x==="toggle"?n?"show":"hide":x](a);
|
| 2824 |
+
else{
|
| 2825 |
+
var B=xb.exec(x),C=A.cur(true)||0;
|
| 2826 |
+
if(B){
|
| 2827 |
+
x=parseFloat(B[2]);
|
| 2828 |
+
var E=B[3]||"px";
|
| 2829 |
+
if(E!=="px"){
|
| 2830 |
+
o.style[s]=(x||1)+E;
|
| 2831 |
+
C=(x||1)/A.cur(true)*C;
|
| 2832 |
+
o.style[s]=C+E
|
| 2833 |
+
}
|
| 2834 |
+
if(B[1])x=(B[1]==="-="?-1:1)*x+C;
|
| 2835 |
+
A.custom(C,x,E)
|
| 2836 |
+
}else A.custom(C,x,"")
|
| 2837 |
+
}
|
| 2838 |
+
});
|
| 2839 |
+
return true
|
| 2840 |
+
})
|
| 2841 |
+
},
|
| 2842 |
+
stop:function(a,b){
|
| 2843 |
+
var d=c.timers;
|
| 2844 |
+
a&&this.queue([]);
|
| 2845 |
+
this.each(function(){
|
| 2846 |
+
for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){
|
| 2847 |
+
b&&d[f](true);
|
| 2848 |
+
d.splice(f,1)
|
| 2849 |
+
}
|
| 2850 |
+
});
|
| 2851 |
+
b||this.dequeue();
|
| 2852 |
+
return this
|
| 2853 |
+
}
|
| 2854 |
+
});
|
| 2855 |
+
c.each({
|
| 2856 |
+
slideDown:K("show",1),
|
| 2857 |
+
slideUp:K("hide",1),
|
| 2858 |
+
slideToggle:K("toggle",
|
| 2859 |
+
1),
|
| 2860 |
+
fadeIn:{
|
| 2861 |
+
opacity:"show"
|
| 2862 |
+
},
|
| 2863 |
+
fadeOut:{
|
| 2864 |
+
opacity:"hide"
|
| 2865 |
+
}
|
| 2866 |
+
},function(a,b){
|
| 2867 |
+
c.fn[a]=function(d,f){
|
| 2868 |
+
return this.animate(b,d,f)
|
| 2869 |
+
}
|
| 2870 |
+
});
|
| 2871 |
+
c.extend({
|
| 2872 |
+
speed:function(a,b,d){
|
| 2873 |
+
var f=a&&typeof a==="object"?a:{
|
| 2874 |
+
complete:d||!d&&b||c.isFunction(a)&&a,
|
| 2875 |
+
duration:a,
|
| 2876 |
+
easing:d&&b||b&&!c.isFunction(b)&&b
|
| 2877 |
+
};
|
| 2878 |
+
|
| 2879 |
+
f.duration=c.fx.off?0:typeof f.duration==="number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;
|
| 2880 |
+
f.old=f.complete;
|
| 2881 |
+
f.complete=function(){
|
| 2882 |
+
f.queue!==false&&c(this).dequeue();
|
| 2883 |
+
c.isFunction(f.old)&&f.old.call(this)
|
| 2884 |
+
};
|
| 2885 |
+
|
| 2886 |
+
return f
|
| 2887 |
+
},
|
| 2888 |
+
easing:{
|
| 2889 |
+
linear:function(a,
|
| 2890 |
+
b,d,f){
|
| 2891 |
+
return d+f*a
|
| 2892 |
+
},
|
| 2893 |
+
swing:function(a,b,d,f){
|
| 2894 |
+
return(-Math.cos(a*Math.PI)/2+0.5)*f+d
|
| 2895 |
+
}
|
| 2896 |
+
},
|
| 2897 |
+
timers:[],
|
| 2898 |
+
fx:function(a,b,d){
|
| 2899 |
+
this.options=b;
|
| 2900 |
+
this.elem=a;
|
| 2901 |
+
this.prop=d;
|
| 2902 |
+
if(!b.orig)b.orig={}
|
| 2903 |
+
}
|
| 2904 |
+
});
|
| 2905 |
+
c.fx.prototype={
|
| 2906 |
+
update:function(){
|
| 2907 |
+
this.options.step&&this.options.step.call(this.elem,this.now,this);
|
| 2908 |
+
(c.fx.step[this.prop]||c.fx.step._default)(this);
|
| 2909 |
+
if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"
|
| 2910 |
+
},
|
| 2911 |
+
cur:function(a){
|
| 2912 |
+
if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==
|
| 2913 |
+
null))return this.elem[this.prop];
|
| 2914 |
+
return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0
|
| 2915 |
+
},
|
| 2916 |
+
custom:function(a,b,d){
|
| 2917 |
+
function f(i){
|
| 2918 |
+
return e.step(i)
|
| 2919 |
+
}
|
| 2920 |
+
this.startTime=J();
|
| 2921 |
+
this.start=a;
|
| 2922 |
+
this.end=b;
|
| 2923 |
+
this.unit=d||this.unit||"px";
|
| 2924 |
+
this.now=this.start;
|
| 2925 |
+
this.pos=this.state=0;
|
| 2926 |
+
var e=this;
|
| 2927 |
+
f.elem=this.elem;
|
| 2928 |
+
if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)
|
| 2929 |
+
},
|
| 2930 |
+
show:function(){
|
| 2931 |
+
this.options.orig[this.prop]=c.style(this.elem,this.prop);
|
| 2932 |
+
this.options.show=true;
|
| 2933 |
+
this.custom(this.prop===
|
| 2934 |
+
"width"||this.prop==="height"?1:0,this.cur());
|
| 2935 |
+
c(this.elem).show()
|
| 2936 |
+
},
|
| 2937 |
+
hide:function(){
|
| 2938 |
+
this.options.orig[this.prop]=c.style(this.elem,this.prop);
|
| 2939 |
+
this.options.hide=true;
|
| 2940 |
+
this.custom(this.cur(),0)
|
| 2941 |
+
},
|
| 2942 |
+
step:function(a){
|
| 2943 |
+
var b=J(),d=true;
|
| 2944 |
+
if(a||b>=this.options.duration+this.startTime){
|
| 2945 |
+
this.now=this.end;
|
| 2946 |
+
this.pos=this.state=1;
|
| 2947 |
+
this.update();
|
| 2948 |
+
this.options.curAnim[this.prop]=true;
|
| 2949 |
+
for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){
|
| 2950 |
+
if(this.options.display!=null){
|
| 2951 |
+
this.elem.style.overflow=
|
| 2952 |
+
this.options.overflow;
|
| 2953 |
+
a=c.data(this.elem,"olddisplay");
|
| 2954 |
+
this.elem.style.display=a?a:this.options.display;
|
| 2955 |
+
if(c.css(this.elem,"display")==="none")this.elem.style.display="block"
|
| 2956 |
+
}
|
| 2957 |
+
this.options.hide&&c(this.elem).hide();
|
| 2958 |
+
if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,e,this.options.orig[e]);this.options.complete.call(this.elem)
|
| 2959 |
+
}
|
| 2960 |
+
return false
|
| 2961 |
+
}else{
|
| 2962 |
+
e=b-this.startTime;
|
| 2963 |
+
this.state=e/this.options.duration;
|
| 2964 |
+
a=this.options.easing||(c.easing.swing?"swing":"linear");
|
| 2965 |
+
this.pos=
|
| 2966 |
+
c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);
|
| 2967 |
+
this.now=this.start+(this.end-this.start)*this.pos;
|
| 2968 |
+
this.update()
|
| 2969 |
+
}
|
| 2970 |
+
return true
|
| 2971 |
+
}
|
| 2972 |
+
};
|
| 2973 |
+
|
| 2974 |
+
c.extend(c.fx,{
|
| 2975 |
+
tick:function(){
|
| 2976 |
+
for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);
|
| 2977 |
+
a.length||c.fx.stop()
|
| 2978 |
+
},
|
| 2979 |
+
stop:function(){
|
| 2980 |
+
clearInterval(W);
|
| 2981 |
+
W=null
|
| 2982 |
+
},
|
| 2983 |
+
speeds:{
|
| 2984 |
+
slow:600,
|
| 2985 |
+
fast:200,
|
| 2986 |
+
_default:400
|
| 2987 |
+
},
|
| 2988 |
+
step:{
|
| 2989 |
+
opacity:function(a){
|
| 2990 |
+
c.style(a.elem,"opacity",a.now)
|
| 2991 |
+
},
|
| 2992 |
+
_default:function(a){
|
| 2993 |
+
if(a.elem.style&&a.elem.style[a.prop]!=
|
| 2994 |
+
null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now
|
| 2995 |
+
}
|
| 2996 |
+
}
|
| 2997 |
+
});
|
| 2998 |
+
if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){
|
| 2999 |
+
return c.grep(c.timers,function(b){
|
| 3000 |
+
return a===b.elem
|
| 3001 |
+
}).length
|
| 3002 |
+
};
|
| 3003 |
+
|
| 3004 |
+
c.fn.offset="getBoundingClientRect"in r.documentElement?function(a){
|
| 3005 |
+
var b=this[0];
|
| 3006 |
+
if(a)return this.each(function(e){
|
| 3007 |
+
c.offset.setOffset(this,a,e)
|
| 3008 |
+
});
|
| 3009 |
+
if(!b||!b.ownerDocument)return null;
|
| 3010 |
+
if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);
|
| 3011 |
+
var d=b.getBoundingClientRect(),
|
| 3012 |
+
f=b.ownerDocument;
|
| 3013 |
+
b=f.body;
|
| 3014 |
+
f=f.documentElement;
|
| 3015 |
+
return{
|
| 3016 |
+
top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),
|
| 3017 |
+
left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)
|
| 3018 |
+
}
|
| 3019 |
+
}:function(a){
|
| 3020 |
+
var b=this[0];
|
| 3021 |
+
if(a)return this.each(function(s){
|
| 3022 |
+
c.offset.setOffset(this,a,s)
|
| 3023 |
+
});
|
| 3024 |
+
if(!b||!b.ownerDocument)return null;
|
| 3025 |
+
if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);
|
| 3026 |
+
c.offset.initialize();
|
| 3027 |
+
var d=b.offsetParent,f=
|
| 3028 |
+
b,e=b.ownerDocument,i,j=e.documentElement,n=e.body;
|
| 3029 |
+
f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;
|
| 3030 |
+
for(var o=b.offsetTop,m=b.offsetLeft;(b=b.parentNode)&&b!==n&&b!==j;){
|
| 3031 |
+
if(c.offset.supportsFixedPosition&&f.position==="fixed")break;
|
| 3032 |
+
i=e?e.getComputedStyle(b,null):b.currentStyle;
|
| 3033 |
+
o-=b.scrollTop;
|
| 3034 |
+
m-=b.scrollLeft;
|
| 3035 |
+
if(b===d){
|
| 3036 |
+
o+=b.offsetTop;
|
| 3037 |
+
m+=b.offsetLeft;
|
| 3038 |
+
if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){
|
| 3039 |
+
o+=parseFloat(i.borderTopWidth)||
|
| 3040 |
+
0;
|
| 3041 |
+
m+=parseFloat(i.borderLeftWidth)||0
|
| 3042 |
+
}
|
| 3043 |
+
f=d;
|
| 3044 |
+
d=b.offsetParent
|
| 3045 |
+
}
|
| 3046 |
+
if(c.offset.subtractsBorderForOverflowNotVisible&&i.overflow!=="visible"){
|
| 3047 |
+
o+=parseFloat(i.borderTopWidth)||0;
|
| 3048 |
+
m+=parseFloat(i.borderLeftWidth)||0
|
| 3049 |
+
}
|
| 3050 |
+
f=i
|
| 3051 |
+
}
|
| 3052 |
+
if(f.position==="relative"||f.position==="static"){
|
| 3053 |
+
o+=n.offsetTop;
|
| 3054 |
+
m+=n.offsetLeft
|
| 3055 |
+
}
|
| 3056 |
+
if(c.offset.supportsFixedPosition&&f.position==="fixed"){
|
| 3057 |
+
o+=Math.max(j.scrollTop,n.scrollTop);
|
| 3058 |
+
m+=Math.max(j.scrollLeft,n.scrollLeft)
|
| 3059 |
+
}
|
| 3060 |
+
return{
|
| 3061 |
+
top:o,
|
| 3062 |
+
left:m
|
| 3063 |
+
}
|
| 3064 |
+
};
|
| 3065 |
+
|
| 3066 |
+
c.offset={
|
| 3067 |
+
initialize:function(){
|
| 3068 |
+
var a=r.body,b=r.createElement("div"),
|
| 3069 |
+
d,f,e,i=parseFloat(c.curCSS(a,"marginTop",true))||0;
|
| 3070 |
+
c.extend(b.style,{
|
| 3071 |
+
position:"absolute",
|
| 3072 |
+
top:0,
|
| 3073 |
+
left:0,
|
| 3074 |
+
margin:0,
|
| 3075 |
+
border:0,
|
| 3076 |
+
width:"1px",
|
| 3077 |
+
height:"1px",
|
| 3078 |
+
visibility:"hidden"
|
| 3079 |
+
});
|
| 3080 |
+
b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
|
| 3081 |
+
a.insertBefore(b,a.firstChild);
|
| 3082 |
+
d=b.firstChild;
|
| 3083 |
+
f=d.firstChild;
|
| 3084 |
+
e=d.nextSibling.firstChild.firstChild;
|
| 3085 |
+
this.doesNotAddBorder=f.offsetTop!==5;
|
| 3086 |
+
this.doesAddBorderForTableAndCells=e.offsetTop===5;
|
| 3087 |
+
f.style.position="fixed";
|
| 3088 |
+
f.style.top="20px";
|
| 3089 |
+
this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;
|
| 3090 |
+
f.style.position=f.style.top="";
|
| 3091 |
+
d.style.overflow="hidden";
|
| 3092 |
+
d.style.position="relative";
|
| 3093 |
+
this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;
|
| 3094 |
+
this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i;
|
| 3095 |
+
a.removeChild(b);
|
| 3096 |
+
c.offset.initialize=c.noop
|
| 3097 |
+
},
|
| 3098 |
+
bodyOffset:function(a){
|
| 3099 |
+
var b=a.offsetTop,d=a.offsetLeft;
|
| 3100 |
+
c.offset.initialize();
|
| 3101 |
+
if(c.offset.doesNotIncludeMarginInBodyOffset){
|
| 3102 |
+
b+=parseFloat(c.curCSS(a,"marginTop",true))||0;
|
| 3103 |
+
d+=parseFloat(c.curCSS(a,"marginLeft",true))||0
|
| 3104 |
+
}
|
| 3105 |
+
return{
|
| 3106 |
+
top:b,
|
| 3107 |
+
left:d
|
| 3108 |
+
}
|
| 3109 |
+
},
|
| 3110 |
+
setOffset:function(a,b,d){
|
| 3111 |
+
if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";
|
| 3112 |
+
var f=c(a),e=f.offset(),i=parseInt(c.curCSS(a,"top",true),10)||0,j=parseInt(c.curCSS(a,"left",true),10)||0;
|
| 3113 |
+
if(c.isFunction(b))b=b.call(a,d,e);
|
| 3114 |
+
d={
|
| 3115 |
+
top:b.top-e.top+i,
|
| 3116 |
+
left:b.left-
|
| 3117 |
+
e.left+j
|
| 3118 |
+
};
|
| 3119 |
+
|
| 3120 |
+
"using"in b?b.using.call(a,d):f.css(d)
|
| 3121 |
+
}
|
| 3122 |
+
};
|
| 3123 |
+
|
| 3124 |
+
c.fn.extend({
|
| 3125 |
+
position:function(){
|
| 3126 |
+
if(!this[0])return null;
|
| 3127 |
+
var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{
|
| 3128 |
+
top:0,
|
| 3129 |
+
left:0
|
| 3130 |
+
}:b.offset();
|
| 3131 |
+
d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;
|
| 3132 |
+
d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;
|
| 3133 |
+
f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;
|
| 3134 |
+
f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;
|
| 3135 |
+
return{
|
| 3136 |
+
top:d.top-f.top,
|
| 3137 |
+
left:d.left-f.left
|
| 3138 |
+
}
|
| 3139 |
+
},
|
| 3140 |
+
offsetParent:function(){
|
| 3141 |
+
return this.map(function(){
|
| 3142 |
+
for(var a=
|
| 3143 |
+
this.offsetParent||r.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;
|
| 3144 |
+
return a
|
| 3145 |
+
})
|
| 3146 |
+
}
|
| 3147 |
+
});
|
| 3148 |
+
c.each(["Left","Top"],function(a,b){
|
| 3149 |
+
var d="scroll"+b;
|
| 3150 |
+
c.fn[d]=function(f){
|
| 3151 |
+
var e=this[0],i;
|
| 3152 |
+
if(!e)return null;
|
| 3153 |
+
if(f!==v)return this.each(function(){
|
| 3154 |
+
if(i=ua(this))i.scrollTo(!a?f:c(i).scrollLeft(),a?f:c(i).scrollTop());else this[d]=f
|
| 3155 |
+
});else return(i=ua(e))?"pageXOffset"in i?i[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&i.document.documentElement[d]||i.document.body[d]:e[d]
|
| 3156 |
+
}
|
| 3157 |
+
});
|
| 3158 |
+
c.each(["Height","Width"],function(a,b){
|
| 3159 |
+
var d=b.toLowerCase();
|
| 3160 |
+
c.fn["inner"+b]=function(){
|
| 3161 |
+
return this[0]?c.css(this[0],d,false,"padding"):null
|
| 3162 |
+
};
|
| 3163 |
+
|
| 3164 |
+
c.fn["outer"+b]=function(f){
|
| 3165 |
+
return this[0]?c.css(this[0],d,false,f?"margin":"border"):null
|
| 3166 |
+
};
|
| 3167 |
+
|
| 3168 |
+
c.fn[d]=function(f){
|
| 3169 |
+
var e=this[0];
|
| 3170 |
+
if(!e)return f==null?null:this;
|
| 3171 |
+
if(c.isFunction(f))return this.each(function(i){
|
| 3172 |
+
var j=c(this);
|
| 3173 |
+
j[d](f.call(this,i,j[d]()))
|
| 3174 |
+
});
|
| 3175 |
+
return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||
|
| 3176 |
+
e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===v?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")
|
| 3177 |
+
}
|
| 3178 |
+
});
|
| 3179 |
+
z.jQuery=z.$=c
|
| 3180 |
+
})(window);
|
skin/frontend/base/default/olctw_debug/js/toolbar.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
(function(window, document, version, callback) {
|
| 2 |
+
var j, d;
|
| 3 |
+
var loaded = false;
|
| 4 |
+
if (!(j = window.jQuery) || version > j.fn.jquery || callback(j)) {
|
| 5 |
+
var script = document.createElement("script");
|
| 6 |
+
script.type = "text/javascript";
|
| 7 |
+
script.src = DEBUG_TOOLBAR_MEDIA_URL + "js/jquery.js";
|
| 8 |
+
script.onload = script.onreadystatechange = function() {
|
| 9 |
+
if (!loaded && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
|
| 10 |
+
callback((j = window.jQuery).noConflict(1), loaded = true);
|
| 11 |
+
j(script).remove();
|
| 12 |
+
}
|
| 13 |
+
};
|
| 14 |
+
document.getElementsByTagName('head')[0].appendChild(script)
|
| 15 |
+
}
|
| 16 |
+
})(window, document, "1.3", function($, jquery_loaded) {
|
| 17 |
+
|
| 18 |
+
$.cookie = function(name, value, options) {
|
| 19 |
+
if (typeof value != 'undefined') {
|
| 20 |
+
options = options || {};
|
| 21 |
+
if (value === null) {
|
| 22 |
+
value = '';
|
| 23 |
+
options.expires = -1;
|
| 24 |
+
}
|
| 25 |
+
var expires = '';
|
| 26 |
+
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
|
| 27 |
+
var date;
|
| 28 |
+
if (typeof options.expires == 'number') {
|
| 29 |
+
date = new Date();
|
| 30 |
+
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
|
| 31 |
+
} else {
|
| 32 |
+
date = options.expires;
|
| 33 |
+
}
|
| 34 |
+
expires = '; expires=' + date.toUTCString();
|
| 35 |
+
}
|
| 36 |
+
var path = options.path ? '; path=' + (options.path) : '';
|
| 37 |
+
var domain = options.domain ? '; domain=' + (options.domain) : '';
|
| 38 |
+
var secure = options.secure ? '; secure' : '';
|
| 39 |
+
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
|
| 40 |
+
} else {
|
| 41 |
+
var cookieValue = null;
|
| 42 |
+
if (document.cookie && document.cookie != '') {
|
| 43 |
+
var cookies = document.cookie.split(';');
|
| 44 |
+
for (var i = 0; i < cookies.length; i++) {
|
| 45 |
+
var cookie = $.trim(cookies[i]);
|
| 46 |
+
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
| 47 |
+
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
| 48 |
+
break;
|
| 49 |
+
}
|
| 50 |
+
}
|
| 51 |
+
}
|
| 52 |
+
return cookieValue;
|
| 53 |
+
}
|
| 54 |
+
};
|
| 55 |
+
$('head').append('<link rel="stylesheet" href="'+DEBUG_TOOLBAR_MEDIA_URL+'css/toolbar.css" type="text/css" />');
|
| 56 |
+
var COOKIE_NAME = 'djdt';
|
| 57 |
+
var djdt = {
|
| 58 |
+
init: function() {
|
| 59 |
+
$('#djDebug').show();
|
| 60 |
+
var current = null;
|
| 61 |
+
$('#djDebugPanelList li a').click(function() {
|
| 62 |
+
if (!this.className) {
|
| 63 |
+
return false;
|
| 64 |
+
}
|
| 65 |
+
current = $('#djDebug #' + this.className);
|
| 66 |
+
if (current.is(':visible')) {
|
| 67 |
+
$(document).trigger('close.djDebug');
|
| 68 |
+
$(this).parent().removeClass('active');
|
| 69 |
+
} else {
|
| 70 |
+
$('.panelContent').hide(); // Hide any that are already open
|
| 71 |
+
current.show();
|
| 72 |
+
$('#djDebugToolbar li').removeClass('active');
|
| 73 |
+
$(this).parent().addClass('active');
|
| 74 |
+
}
|
| 75 |
+
return false;
|
| 76 |
+
});
|
| 77 |
+
$('#djDebug a.djDebugClose').click(function() {
|
| 78 |
+
$(document).trigger('close.djDebug');
|
| 79 |
+
$('#djDebugToolbar li').removeClass('active');
|
| 80 |
+
return false;
|
| 81 |
+
});
|
| 82 |
+
$('#djDebug a.remoteCall').click(function() {
|
| 83 |
+
$('#djDebugWindow').html('<div class="loader"></div>');
|
| 84 |
+
$('#djDebugWindow').load(this.href, {}, function() {
|
| 85 |
+
$('#djDebugWindow a.djDebugBack').click(function() {
|
| 86 |
+
$(this).parent().parent().hide();
|
| 87 |
+
return false;
|
| 88 |
+
});
|
| 89 |
+
});
|
| 90 |
+
$('#djDebugWindow').show();
|
| 91 |
+
return false;
|
| 92 |
+
});
|
| 93 |
+
$('#debug-panel-Layout a.djTemplateShowContext').click(function() {
|
| 94 |
+
djdt.toggle_arrow($(this).children('.toggleArrow'))
|
| 95 |
+
djdt.toggle_content($(this).parent().next());
|
| 96 |
+
return false;
|
| 97 |
+
});
|
| 98 |
+
$('#djDebugSQLPanel a.djSQLShowStacktrace').click(function() {
|
| 99 |
+
djdt.toggle_content($('.djSQLHideStacktraceDiv', $(this).parents('tr')));
|
| 100 |
+
return false;
|
| 101 |
+
});
|
| 102 |
+
$('#djHideToolBarButton').click(function() {
|
| 103 |
+
djdt.hide_toolbar(true);
|
| 104 |
+
return false;
|
| 105 |
+
});
|
| 106 |
+
$('#djShowToolBarButton').click(function() {
|
| 107 |
+
djdt.show_toolbar();
|
| 108 |
+
return false;
|
| 109 |
+
});
|
| 110 |
+
$(document).bind('close.djDebug', function() {
|
| 111 |
+
// If a sub-panel is open, close that
|
| 112 |
+
if ($('#djDebugWindow').is(':visible')) {
|
| 113 |
+
$('#djDebugWindow').hide();
|
| 114 |
+
return;
|
| 115 |
+
}
|
| 116 |
+
// If a panel is open, close that
|
| 117 |
+
if ($('.panelContent').is(':visible')) {
|
| 118 |
+
$('.panelContent').hide();
|
| 119 |
+
return;
|
| 120 |
+
}
|
| 121 |
+
// Otherwise, just minimize the toolbar
|
| 122 |
+
if ($('#djDebugToolbar').is(':visible')) {
|
| 123 |
+
djdt.hide_toolbar(true);
|
| 124 |
+
return;
|
| 125 |
+
}
|
| 126 |
+
});
|
| 127 |
+
if ($.cookie(COOKIE_NAME)) {
|
| 128 |
+
djdt.hide_toolbar(false);
|
| 129 |
+
} else {
|
| 130 |
+
djdt.show_toolbar(false);
|
| 131 |
+
}
|
| 132 |
+
},
|
| 133 |
+
toggle_content: function(elem) {
|
| 134 |
+
if (elem.is(':visible')) {
|
| 135 |
+
elem.hide();
|
| 136 |
+
} else {
|
| 137 |
+
elem.show();
|
| 138 |
+
}
|
| 139 |
+
},
|
| 140 |
+
close: function() {
|
| 141 |
+
$(document).trigger('close.djDebug');
|
| 142 |
+
return false;
|
| 143 |
+
},
|
| 144 |
+
hide_toolbar: function(setCookie) {
|
| 145 |
+
// close any sub panels
|
| 146 |
+
$('#djDebugWindow').hide();
|
| 147 |
+
// close all panels
|
| 148 |
+
$('.panelContent').hide();
|
| 149 |
+
$('#djDebugToolbar li').removeClass('active');
|
| 150 |
+
// finally close toolbar
|
| 151 |
+
$('#djDebugToolbar').hide('fast');
|
| 152 |
+
$('#djDebugToolbarHandle').show();
|
| 153 |
+
// Unbind keydown
|
| 154 |
+
$(document).unbind('keydown.djDebug');
|
| 155 |
+
if (setCookie) {
|
| 156 |
+
$.cookie(COOKIE_NAME, 'hide', {
|
| 157 |
+
path: '/',
|
| 158 |
+
expires: 10
|
| 159 |
+
});
|
| 160 |
+
}
|
| 161 |
+
},
|
| 162 |
+
show_toolbar: function(animate) {
|
| 163 |
+
// Set up keybindings
|
| 164 |
+
$(document).bind('keydown.djDebug', function(e) {
|
| 165 |
+
if (e.keyCode == 27) {
|
| 166 |
+
djdt.close();
|
| 167 |
+
}
|
| 168 |
+
});
|
| 169 |
+
$('#djDebugToolbarHandle').hide();
|
| 170 |
+
if (animate) {
|
| 171 |
+
$('#djDebugToolbar').show('fast');
|
| 172 |
+
} else {
|
| 173 |
+
$('#djDebugToolbar').show();
|
| 174 |
+
}
|
| 175 |
+
$.cookie(COOKIE_NAME, null, {
|
| 176 |
+
path: '/',
|
| 177 |
+
expires: -1
|
| 178 |
+
});
|
| 179 |
+
},
|
| 180 |
+
toggle_arrow: function(elem) {
|
| 181 |
+
var uarr = String.fromCharCode(0x25b6);
|
| 182 |
+
var darr = String.fromCharCode(0x25bc);
|
| 183 |
+
elem.html(elem.html() == uarr ? darr : uarr);
|
| 184 |
+
}
|
| 185 |
+
};
|
| 186 |
+
$(document).ready(function() {
|
| 187 |
+
djdt.init();
|
| 188 |
+
});
|
| 189 |
+
});
|
| 190 |
+
|
