CSS & JavaScript Toolbox - Version 8.0

Version Description

  • Show premium extensions list in Dashboard Widget instead of Scripts Packages
  • Framework update that makes CJT functionality more extendable
  • Remove: Editor Toolbox Buttons and Block File, Edit and View menu as it now presented in separated extension
  • Remove: Editor Themes Switcher list as it now presented in separated extension
  • Remove: Import and Export Tools as it not presented in separated extension
  • Fix: Conflict with other themes like X Theme
Download this release

Release Info

Developer xpointer
Plugin Icon 128x128 CSS & JavaScript Toolbox
Version 8.0
Comparing to
See all releases

Code changes from version 7.2 to 8.0

Files changed (169) hide show
  1. access.points/ajax.accesspoint.php +9 -0
  2. access.points/extensions.accesspoint.php +2 -2
  3. access.points/setup.accesspoint.php +69 -0
  4. autoload.inc.php +2 -0
  5. controllers/auto-upgrade.php +25 -24
  6. controllers/blocks-ajax.php +1 -1
  7. controllers/blocks-coupling.php +23 -13
  8. controllers/blocks.php +8 -0
  9. controllers/setup.php +4 -1
  10. css-javascript-toolbox.xml +8 -0
  11. css-js-toolbox.class.php +11 -9
  12. css-js-toolbox.php +6 -22
  13. framework/access-points/access-point.class.php +28 -1
  14. framework/autoload/loader.php +42 -5
  15. framework/db/mysql/xtable.inc.php +9 -0
  16. framework/extensions/extensions.class.php +33 -6
  17. framework/js/ace/theme-ambiance.js +0 -1
  18. framework/js/ace/theme-chaos.js +0 -1
  19. framework/js/ace/theme-chrome.js +0 -1
  20. framework/js/ace/theme-clouds.js +0 -1
  21. framework/js/ace/theme-clouds_midnight.js +0 -1
  22. framework/js/ace/theme-cobalt.js +0 -1
  23. framework/js/ace/theme-crimson_editor.js +0 -1
  24. framework/js/ace/theme-dawn.js +0 -1
  25. framework/js/ace/theme-dreamweaver.js +0 -1
  26. framework/js/ace/theme-eclipse.js +0 -1
  27. framework/js/ace/theme-github.js +0 -1
  28. framework/js/ace/theme-idle_fingers.js +0 -1
  29. framework/js/ace/theme-katzenmilch.js +0 -1
  30. framework/js/ace/theme-kr.js +0 -1
  31. framework/js/ace/theme-kuroir.js +0 -1
  32. framework/js/ace/theme-merbivore.js +0 -1
  33. framework/js/ace/theme-merbivore_soft.js +0 -1
  34. framework/js/ace/theme-mono_industrial.js +0 -1
  35. framework/js/ace/theme-monokai.js +0 -1
  36. framework/js/ace/theme-pastel_on_dark.js +0 -1
  37. framework/js/ace/theme-solarized_dark.js +0 -1
  38. framework/js/ace/theme-solarized_light.js +0 -1
  39. framework/js/ace/theme-terminal.js +0 -1
  40. framework/js/ace/theme-textmate.js +0 -1
  41. framework/js/ace/theme-tomorrow.js +0 -1
  42. framework/js/ace/theme-tomorrow_night.js +0 -1
  43. framework/js/ace/theme-tomorrow_night_blue.js +0 -1
  44. framework/js/ace/theme-tomorrow_night_bright.js +0 -1
  45. framework/js/ace/theme-tomorrow_night_eighties.js +0 -1
  46. framework/js/ace/theme-twilight.js +0 -1
  47. framework/js/ace/theme-vibrant_ink.js +0 -1
  48. framework/js/ace/theme-xcode.js +0 -1
  49. framework/js/ajax/cjt-module-server/cjt-module-server.js +81 -0
  50. framework/js/ajax/cjt-server/cjt-server.js +4 -3
  51. framework/mvc/controller-ajax.inc.php +9 -0
  52. framework/mvc/controller.inc.php +63 -23
  53. framework/mvc/model.inc.php +12 -4
  54. framework/mvc/view.inc.php +18 -10
  55. framework/wordpress/feed.php +44 -6
  56. models/blocks.php +16 -12
  57. models/package-file.php +12 -176
  58. models/package.php +3 -20
  59. models/package/xml/definition/abstract.php +25 -6
  60. models/package/xml/definition/{objects/block/files.php → frag/frag.php} +2 -2
  61. models/package/xml/definition/frag/frag/block.php +50 -0
  62. models/package/xml/definition/{objects/block/params.php → frag/frag/block/files.php} +1 -1
  63. models/package/xml/definition/{objects → frag/frag}/block/files/file.php +1 -1
  64. models/package/xml/definition/frag/frag/block/links.php +19 -0
  65. models/package/xml/definition/frag/frag/block/links/link.php +38 -0
  66. models/package/xml/definition/frag/frag/block/links/link/package.php +61 -0
  67. models/package/xml/definition/frag/frag/block/package.php +34 -0
  68. models/package/xml/definition/{objects/block/params/list/param/typeParams.php → frag/frag/block/params.php} +1 -1
  69. models/package/xml/definition/{objects → frag/frag}/block/params/form.php +1 -1
  70. models/package/xml/definition/frag/frag/block/params/form/groups.php +12 -0
  71. models/package/xml/definition/{objects → frag/frag}/block/params/form/groups/group.php +15 -1
  72. models/package/xml/definition/{objects → frag/frag}/block/params/form/groups/group/xfields.php +1 -1
  73. models/package/xml/definition/frag/frag/block/params/list.php +12 -0
  74. models/package/xml/definition/{objects → frag/frag}/block/params/list/param.php +1 -1
  75. models/package/xml/definition/{objects → frag/frag}/block/params/list/param/group.php +2 -2
  76. models/package/xml/definition/frag/frag/block/params/list/param/group/definition.php +10 -0
  77. models/package/xml/definition/{objects → frag/frag}/block/params/list/param/group/definition/type.php +1 -1
  78. models/package/xml/definition/frag/frag/block/params/list/param/group/rendererParams.php +19 -0
  79. models/package/xml/definition/frag/frag/block/params/list/param/params.php +19 -0
  80. models/package/xml/definition/{objects/block/params/list/param/group/definition.php → frag/frag/block/params/list/param/typeParams.php} +1 -1
  81. models/package/xml/definition/{objects → frag/frag}/block/params/list/param/typeparams/param.php +1 -1
  82. models/package/xml/definition/frag/frag/package.php +32 -0
  83. models/package/xml/definition/frag/frag/template.php +76 -0
  84. models/package/xml/definition/frag/frag/template/folders.php +19 -0
  85. models/package/xml/definition/frag/frag/template/folders/folder.php +48 -0
  86. models/package/xml/definition/frag/frag/template/package.php +34 -0
  87. models/package/xml/definition/fragpackage.php +70 -0
  88. models/package/xml/definition/interface/element.php +5 -0
  89. models/package/xml/definition/objects/block.php +0 -33
  90. models/package/xml/definition/objects/block/params/form/groups.php +0 -12
  91. models/package/xml/definition/objects/block/params/list.php +0 -12
  92. models/package/xml/definition/objects/block/params/list/param/group/rendererParams.php +0 -19
  93. models/package/xml/definition/objects/block/params/list/param/params.php +0 -19
  94. models/package/xml/definition/objects/template.php +0 -28
  95. models/package/xml/definition/package/package.php +10 -0
  96. models/package/xml/definition/package/package/block.php +27 -0
  97. models/package/xml/definition/package/package/block/files.php +10 -0
  98. models/package/xml/definition/package/package/block/files/file.php +10 -0
  99. models/package/xml/definition/package/package/block/links.php +10 -0
  100. models/package/xml/definition/package/package/block/links/link.php +36 -0
  101. models/package/xml/definition/package/package/block/params.php +10 -0
  102. models/package/xml/definition/package/package/block/params/form.php +10 -0
  103. models/package/xml/definition/package/package/block/params/form/groups.php +10 -0
  104. models/package/xml/definition/package/package/block/params/form/groups/group.php +10 -0
  105. models/package/xml/definition/package/package/block/params/form/groups/group/xfields.php +10 -0
  106. models/package/xml/definition/package/package/block/params/list.php +10 -0
  107. models/package/xml/definition/package/package/block/params/list/param.php +10 -0
  108. models/package/xml/definition/package/package/block/params/list/param/group.php +10 -0
  109. models/package/xml/definition/package/package/block/params/list/param/group/definition.php +10 -0
  110. models/package/xml/definition/package/package/block/params/list/param/group/definition/type.php +10 -0
  111. models/package/xml/definition/package/package/block/params/list/param/group/rendererParams.php +19 -0
  112. models/package/xml/definition/package/package/block/params/list/param/params.php +19 -0
  113. models/package/xml/definition/package/package/block/params/list/param/typeParams.php +10 -0
  114. models/package/xml/definition/package/package/block/params/list/param/typeparams/param.php +10 -0
  115. models/package/xml/definition/package/package/objects.php +10 -0
  116. models/package/xml/definition/package/package/objects/object.php +71 -0
  117. models/package/xml/definition/package/package/template.php +27 -0
  118. models/package/xml/definition/package/package/template/folders.php +10 -0
  119. models/package/xml/definition/package/package/template/folders/folder.php +10 -0
  120. models/package/xml/definition/packagehelper.php +72 -0
  121. models/package/xml/factory.php +22 -10
  122. models/setup.php +59 -13
  123. models/statistics-metabox.php +22 -23
  124. models/template.php +6 -4
  125. readme.txt +61 -51
  126. views/blocks/block/public/css/block.css +1 -26
  127. views/blocks/block/public/css/menu.css +0 -61
  128. views/blocks/block/public/images/editor-toolbox/clear-block.png +0 -0
  129. views/blocks/block/public/images/editor-toolbox/font-large.png +0 -0
  130. views/blocks/block/public/images/editor-toolbox/font-reset.png +0 -0
  131. views/blocks/block/public/images/editor-toolbox/font-small.png +0 -0
  132. views/blocks/block/public/images/editor-toolbox/maximise-editor.png +0 -0
  133. views/blocks/block/public/images/editor-toolbox/minimise-editor.png +0 -0
  134. views/blocks/block/public/images/editor-toolbox/theme.png +0 -0
  135. views/blocks/block/public/js/jquery.block/jquery.block.js +13 -319
  136. views/blocks/block/public/js/jquery.block/jquery.block.localization.php +0 -35
  137. views/blocks/block/public/js/menu/block.js +0 -203
  138. views/blocks/block/public/js/menu/menu.js +0 -87
  139. views/blocks/block/public/js/plugins/dockmodule.js +35 -0
  140. views/blocks/block/tmpl/menu/menu.html.tmpl +0 -51
  141. views/blocks/block/tmpl/templates/editor-toolbox.html.tmpl +1 -10
  142. views/blocks/block/view.php +1 -4
  143. views/blocks/cjt-block/public/css/block.css +1 -3
  144. views/blocks/cjt-block/public/images/editor-toolbox/close-panel.png +0 -0
  145. views/blocks/cjt-block/public/images/editor-toolbox/open-panel.png +0 -0
  146. views/blocks/cjt-block/public/js/jquery.block/jquery.block.js +0 -61
  147. views/blocks/cjt-block/public/js/jquery.block/jquery.block.localization.php +0 -2
  148. views/blocks/manager/public/css/blocks.css +2 -24
  149. views/blocks/manager/public/js/blocks-page/blocks-page.js +0 -1
  150. views/blocks/manager/tmpl/blocks.html.tmpl +12 -7
  151. views/blocks/manager/view.php +10 -0
  152. views/blocks/metabox/public/js/jquery.block/jquery.block.js +4 -49
  153. views/blocks/metabox/public/js/metabox/metabox.js +0 -1
  154. views/blocks/metabox/tmpl/metabox.html.tmpl +4 -1
  155. views/blocks/metabox/view.php +10 -0
  156. views/dashboard/metabox/statistics/public/css/default.css +11 -12
  157. views/dashboard/metabox/statistics/tmpl/default.html.tmpl +53 -41
  158. views/extensions/plugins-list/tmpl/default_setup_action.html.tmpl +1 -1
  159. views/extensions/plugins-list/view.php +7 -3
  160. views/packages/install/public/js/install/install.js +19 -0
  161. views/packages/install/tmpl/default.html.tmpl +9 -1
  162. views/packages/install/view.php +34 -0
  163. views/packages/manager/public/js/manager/manager.js +2 -0
  164. views/setup/activation-form/public/js/default/default.js +3 -2
  165. views/setup/activation-form/public/js/default/default.localization.php +1 -1
  166. views/setup/activation-form/tmpl/default.html.tmpl +22 -7
  167. views/setup/activation-form/view.php +9 -1
  168. views/setup/setup/tmpl/default.html.tmpl +2 -2
  169. views/templates/template/public/js/template/template.js +0 -1
access.points/ajax.accesspoint.php CHANGED
@@ -44,6 +44,15 @@ class CJTAjaxAccessPoint extends CJTAccessPoint {
44
  if (CJTPlugin::getInstance()->isInstalled() || in_array($this->controllerName, $notInstalledAllowedControllers)) {
45
  // Connected!
46
  $this->connected();
 
 
 
 
 
 
 
 
 
47
  // Instantiate controller.
48
  $controller = parent::route($loadView, $request);
49
  // Dispatch the call as its originally requested from ajax action!
44
  if (CJTPlugin::getInstance()->isInstalled() || in_array($this->controllerName, $notInstalledAllowedControllers)) {
45
  // Connected!
46
  $this->connected();
47
+ // IF Module-Prefix passed THEN Point to correct Controller path
48
+ if (isset($_REQUEST['cjtajaxmodule'])) {
49
+ # try to get module associated to passed module
50
+ $accessPointClassLoader = CJT_Framework_Autoload_Loader::autoLoad($_REQUEST['cjtajaxmodule']);
51
+ if ($accessPointClassLoader) {
52
+ $this->overrideControllersPath = $accessPointClassLoader->getPath() . DIRECTORY_SEPARATOR . 'controllers';
53
+ $this->overrideControllersPrefix = $accessPointClassLoader->getPrefix();
54
+ }
55
+ }
56
  // Instantiate controller.
57
  $controller = parent::route($loadView, $request);
58
  // Dispatch the call as its originally requested from ajax action!
access.points/extensions.accesspoint.php CHANGED
@@ -14,7 +14,7 @@ class CJTExtensionsAccessPoint extends CJTAccessPoint {
14
  /**
15
  *
16
  */
17
- const MENU_POSITION_INDEX = 2;
18
 
19
  /**
20
  *
@@ -40,7 +40,7 @@ class CJTExtensionsAccessPoint extends CJTAccessPoint {
40
  // Only if permitted!
41
  if ($this->hasAccess()) {
42
  // Add menu pages.
43
- add_action('admin_menu', array(&$this, 'menu'), 12);
44
  }
45
  }
46
 
14
  /**
15
  *
16
  */
17
+ const MENU_POSITION_INDEX = 3;
18
 
19
  /**
20
  *
40
  // Only if permitted!
41
  if ($this->hasAccess()) {
42
  // Add menu pages.
43
+ add_action('admin_menu', array(&$this, 'menu'), 13);
44
  }
45
  }
46
 
access.points/setup.accesspoint.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ // Disallow direct access.
7
+ defined('ABSPATH') or die("Access denied");
8
+
9
+ /**
10
+ *
11
+ */
12
+ class CJTSetupAccessPoint extends CJTPageAccessPoint {
13
+
14
+ /**
15
+ * put your comment there...
16
+ *
17
+ */
18
+ public function __construct() {
19
+ // Initialize Access Point base!
20
+ parent::__construct();
21
+ // Set access point name!
22
+ $this->name = 'setup';
23
+ }
24
+
25
+ /**
26
+ * put your comment there...
27
+ *
28
+ */
29
+ protected function doListen() {
30
+ // Only if permitted!
31
+ if ($this->hasAccess()) {
32
+ // Add menu page.
33
+ add_action('admin_menu', array(&$this, 'menu'), 12);
34
+ }
35
+ }
36
+
37
+ /**
38
+ * put your comment there...
39
+ *
40
+ */
41
+ public function menu() {
42
+ // Setup Page.
43
+ $pageHookId = add_submenu_page(
44
+ CJTPlugin::PLUGIN_REQUEST_ID,
45
+ cssJSToolbox::getText('CSS & Javascript Toolbox - Setup'),
46
+ cssJSToolbox::getText('Setup'),
47
+ 'administrator',
48
+ CJTPlugin::PLUGIN_REQUEST_ID . '-setup',
49
+ array(&$this->controller, '_doAction')
50
+ );
51
+ // Process when its installed!!
52
+ add_action("load-{$pageHookId}", array($this, 'getPage'));
53
+ }
54
+
55
+ /**
56
+ * put your comment there...
57
+ *
58
+ */
59
+ public function route($loadView = null, $request = array('view' => 'setup/setup')) {
60
+ // Set MVC request parameters.
61
+ parent::route($loadView, $request)
62
+ // Set action name.
63
+ ->setAction('setup');
64
+ }
65
+
66
+ } // End class.
67
+
68
+ // Hookable!
69
+ CJTSetupAccessPoint::define('CJTSetupAccessPoint', array('hookType' => CJTWordpressEvents::HOOK_FILTER));
autoload.inc.php CHANGED
@@ -21,3 +21,5 @@ $map->offsetSet('CJTBlocksTable', 'tables/blocks.php');
21
  $map->offsetSet('CJTBlockFilesTable', 'tables/block-files.php');
22
  $map->offsetSet('CJTBlockModel', 'models/block.php');
23
  $map->offsetSet('CJTBlocksModel', 'models/blocks.php');
 
 
21
  $map->offsetSet('CJTBlockFilesTable', 'tables/block-files.php');
22
  $map->offsetSet('CJTBlockModel', 'models/block.php');
23
  $map->offsetSet('CJTBlocksModel', 'models/blocks.php');
24
+ $map->offsetSet('CJTAccessPoint', 'framework/access-points/access-point.class.php');
25
+ $map->offsetSet('CJTPageAccessPoint', 'framework/access-points/page.class.php');
controllers/auto-upgrade.php CHANGED
@@ -26,37 +26,38 @@ class CJTAutoUpgradeController extends CJTController {
26
  // Initializing!
27
  $model = $this->model;
28
  $cjtWebServer = cssJSToolbox::getCJTWebSiteURL();
 
29
  // Get all CJT-Plugins (Include CJT Plugin itself + all its extensions) that has activate
30
  // license key!
31
  $activeLicenses = $model->getStatedLicenses();
32
- // Always REQUEST CJT server even if not key activated yet.
33
- // FREE edition will just do normal check @Wordpress:reporioty
34
- if (!isset($activeLicenses[CJTSetupModel::EDD_PRODUCT_NAME]) && (CJTPlugin::Edition != 'free')) {
35
- $activeLicenses[CJTSetupModel::EDD_PRODUCT_NAME] = array(
36
- 'plugin' => array('Version' => CJTPlugin::VERSION, 'AuthorName' => 'CTK'),
37
- 'license' => array('key' => str_repeat('0', 32)),
38
- 'component' => array('pluginBase' => 'css-javascript-toolbox/css-js-toolbox.php')
39
- );
40
- }
41
  // Import EDD updater Class!
42
  cssJSToolbox::import('framework:third-party:easy-digital-download:auto-upgrade.class.php');
43
  // Activate Automatic upgrade for all activated licenses/components!
44
  foreach ($activeLicenses as $name => $state) {
45
- // Initializingn vars for a single state/component!
46
- $pluginFile = ABSPATH . PLUGINDIR . '/' . $state['component']['pluginBase'];
47
- // Stop using Cached Data as it causes issue, always
48
- // get fresh plugin data.
49
- $plugin = get_plugin_data($pluginFile);
50
- $license =& $state['license'];
51
- // Edd API parameter to be send along with he check!
52
- $requestParams= array(
53
- 'version' => $plugin['Version'],
54
- 'author' => $plugin['AuthorName'],
55
- 'license' => $license['key'],
56
- 'item_name' => $name,
57
- );
58
- // Set EDD Automatic Updater!
59
- $updated = new CJT_EDD_SL_Plugin_Updater($cjtWebServer, $pluginFile, $requestParams);
 
 
 
 
 
 
 
 
 
60
  }
61
  }
62
  } // End class.
26
  // Initializing!
27
  $model = $this->model;
28
  $cjtWebServer = cssJSToolbox::getCJTWebSiteURL();
29
+ $extensions =& CJTPlugin::getInstance()->extensions();
30
  // Get all CJT-Plugins (Include CJT Plugin itself + all its extensions) that has activate
31
  // license key!
32
  $activeLicenses = $model->getStatedLicenses();
 
 
 
 
 
 
 
 
 
33
  // Import EDD updater Class!
34
  cssJSToolbox::import('framework:third-party:easy-digital-download:auto-upgrade.class.php');
35
  // Activate Automatic upgrade for all activated licenses/components!
36
  foreach ($activeLicenses as $name => $state) {
37
+ // Get extension def doc.
38
+ // Act only if extension has XMl DOC! This might happened i fthe extension
39
+ // removed while its key still in the database
40
+ if ($extDef = $extensions->getDefDoc(dirname($state['component']['pluginBase']))) {
41
+ // Check CJT Server only if updateSrc points to Wordpress Repository
42
+ $updateSrcServer = (string) $extDef->license->attributes()->updateSrc;
43
+ if (!$updateSrcServer || ($updateSrcServer == 'CJT')) {
44
+ // Initializingn vars for a single state/component!
45
+ $pluginFile = ABSPATH . PLUGINDIR . '/' . $state['component']['pluginBase'];
46
+ // Stop using Cached Data as it causes issue, always
47
+ // get fresh plugin data.
48
+ $plugin = get_plugin_data($pluginFile);
49
+ $license =& $state['license'];
50
+ // Edd API parameter to be send along with he check!
51
+ $requestParams= array(
52
+ 'version' => $plugin['Version'],
53
+ 'author' => $plugin['AuthorName'],
54
+ 'license' => $license['key'],
55
+ 'item_name' => $name,
56
+ );
57
+ // Set EDD Automatic Updater!
58
+ $updated = new CJT_EDD_SL_Plugin_Updater($cjtWebServer, $pluginFile, $requestParams);
59
+ }
60
+ }
61
  }
62
  }
63
  } // End class.
controllers/blocks-ajax.php CHANGED
@@ -96,7 +96,7 @@ class CJTBlocksAjaxController extends CJTAjaxController {
96
  $block = new CJTBlockModel($blockData);
97
  // Add block.
98
  $blocksModel =& $this->model;
99
- $blockId = $blocksModel->add($block->getValues());
100
  $blocksModel->save();
101
  // Read newly added block from database.
102
  $newBlockData = $blocksModel->getBlock($blockId, array('returnCodeFile' => true));
96
  $block = new CJTBlockModel($blockData);
97
  // Add block.
98
  $blocksModel =& $this->model;
99
+ $blockId = $blocksModel->add($block->getValues(), true);
100
  $blocksModel->save();
101
  // Read newly added block from database.
102
  $newBlockData = $blocksModel->getBlock($blockId, array('returnCodeFile' => true));
controllers/blocks-coupling.php CHANGED
@@ -70,7 +70,14 @@ class CJTBlocksCouplingController extends CJTController {
70
  * @var mixed
71
  */
72
  protected $onappendcode = array('parameters' => array('code'));
73
-
 
 
 
 
 
 
 
74
  /**
75
  * put your comment there...
76
  *
@@ -328,19 +335,22 @@ class CJTBlocksCouplingController extends CJTController {
328
  continue;
329
  }
330
  }
331
- // Retrieve block code-files.
332
- $block->code = $this->model->getBlockCode($block->id);
333
- // Import Executable (PHP and HTML) templates.
334
- $block->code = $block->code . $this->model->getExecTemplatesCode($block->id);
335
- // For every location store blocks code into single string
336
- $evaluatedCode = CJTPHPCodeEvaluator::getInstance($block)->exec()->getOutput();
337
- /** @todo Include Debuging info only if we're in debuging mode! */
338
- if (1) {
339
- $evaluatedCode = "\n<!-- Block ({$blockId}) START-->\n{$evaluatedCode}\n<!-- Block ({$blockId}) END -->\n";
 
 
 
 
 
 
340
  }
341
- $this->blocks['code'][$block->location] .= $this->onappendcode($evaluatedCode);
342
- // Store all used Ids in the CORRECT ORDER.
343
- $this->addOnActionIds($blockId);
344
  }
345
  }
346
  $templates = $this->onActionIds ? $this->model->getLinkedTemplates($this->onActionIds) : array();
70
  * @var mixed
71
  */
72
  protected $onappendcode = array('parameters' => array('code'));
73
+
74
+ /**
75
+ * put your comment there...
76
+ *
77
+ * @var mixed
78
+ */
79
+ protected $onblockmatched = array('parameters' => array('block'));
80
+
81
  /**
82
  * put your comment there...
83
  *
335
  continue;
336
  }
337
  }
338
+ // Allow extensions to control to prevent block from being in the output
339
+ if ($block = $this->onblockmatched($block)) {
340
+ // Retrieve block code-files.
341
+ $block->code = $this->model->getBlockCode($block->id);
342
+ // Import Executable (PHP and HTML) templates.
343
+ $block->code = $block->code . $this->model->getExecTemplatesCode($block->id);
344
+ // For every location store blocks code into single string
345
+ $evaluatedCode = CJTPHPCodeEvaluator::getInstance($block)->exec()->getOutput();
346
+ /** @todo Include Debuging info only if we're in debuging mode! */
347
+ if (1) {
348
+ $evaluatedCode = "\n<!-- Block ({$blockId}) START-->\n{$evaluatedCode}\n<!-- Block ({$blockId}) END -->\n";
349
+ }
350
+ $this->blocks['code'][$block->location] .= $this->onappendcode($evaluatedCode);
351
+ // Store all used Ids in the CORRECT ORDER.
352
+ $this->addOnActionIds($blockId);
353
  }
 
 
 
354
  }
355
  }
356
  $templates = $this->onActionIds ? $this->model->getLinkedTemplates($this->onActionIds) : array();
controllers/blocks.php CHANGED
@@ -95,4 +95,12 @@ class CJTBlocksController extends CJTController {
95
  }
96
  }
97
 
 
 
 
 
 
 
 
 
98
  } // End class.
95
  }
96
  }
97
 
98
+ /**
99
+ * put your comment there...
100
+ *
101
+ */
102
+ public function setupAction() {
103
+ echo parent::displayAction();
104
+ }
105
+
106
  } // End class.
controllers/setup.php CHANGED
@@ -48,7 +48,10 @@ class CJTsetupController extends CJTAjaxController {
48
  *
49
  */
50
  protected function getStateAction() {
51
- $this->response = $this->model->getStateStruct($_REQUEST['component']);
 
 
 
52
  }
53
 
54
  /**
48
  *
49
  */
50
  protected function getStateAction() {
51
+ # Get component product types
52
+ $licenseTypes = $this->model->getExtensionProductTypes($_REQUEST['component']);
53
+ # Return license state back
54
+ $this->response = $this->model->getStateStruct($licenseTypes);
55
  }
56
 
57
  /**
css-javascript-toolbox.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <cjt>
3
+ <license updateSrc="WPR">
4
+ <name text="PRO" description="" link="">CJT Pro</name>
5
+ <name text="PRO 12" description="" link="">CJT Pro12</name>
6
+ <name text="DEV" description="" link="">CJT Dev</name>
7
+ </license>
8
+ </cjt>
css-js-toolbox.class.php CHANGED
@@ -47,12 +47,7 @@ define('CJTOOLBOX_HTML_CONPONENTS_URL', CJTOOLBOX_URL . '/framework/html/compone
47
  * @version 0.3
48
  */
49
  class cssJSToolbox extends CJTHookableClass {
50
-
51
- /**
52
- *
53
- */
54
- const CJT_SCRTIPS_WEB_SITE_DOMAIN = 'cjt-scripts.com';
55
-
56
  /**
57
  *
58
  */
@@ -151,7 +146,7 @@ class cssJSToolbox extends CJTHookableClass {
151
  * put your comment there...
152
  *
153
  */
154
- public function getDBDriver() {
155
  return $this->dbDriver;
156
  }
157
 
@@ -160,7 +155,7 @@ class cssJSToolbox extends CJTHookableClass {
160
  *
161
  * @return cssJSToolbox
162
  */
163
- public static function getInstance() {
164
  if (!self::$instance) {
165
  self::$instance = self::trigger('cssJSToolbox.instantiate', (new cssJSToolbox()));
166
  }
@@ -236,8 +231,15 @@ class cssJSToolbox extends CJTHookableClass {
236
  * @param mixed $base
237
  */
238
  public static function resolvePath($vPath, $base = CJTOOLBOX_PATH) {
 
 
 
 
 
 
 
239
  // Replace all :'s with /'s.
240
- $path = str_replace(':', '/', $vPath);
241
  $path = "{$base}/{$path}";
242
  return self::trigger('cssJSToolbox.resolvepath', $path, $vPath);
243
  }
47
  * @version 0.3
48
  */
49
  class cssJSToolbox extends CJTHookableClass {
50
+
 
 
 
 
 
51
  /**
52
  *
53
  */
146
  * put your comment there...
147
  *
148
  */
149
+ public function & getDBDriver() {
150
  return $this->dbDriver;
151
  }
152
 
155
  *
156
  * @return cssJSToolbox
157
  */
158
+ public static function & getInstance() {
159
  if (!self::$instance) {
160
  self::$instance = self::trigger('cssJSToolbox.instantiate', (new cssJSToolbox()));
161
  }
231
  * @param mixed $base
232
  */
233
  public static function resolvePath($vPath, $base = CJTOOLBOX_PATH) {
234
+ // Resolve CJT extensions path
235
+ if (strpos($vPath, 'extension://') === 0) {
236
+ // Remove extension wrapper
237
+ $vPath = str_replace('extension://', '', $vPath);
238
+ // Point to plugin directory
239
+ $base = WP_PLUGIN_DIR;
240
+ }
241
  // Replace all :'s with /'s.
242
+ $path = preg_replace('/(\w)\:(\w)/', '$1/$2', $vPath);
243
  $path = "{$base}/{$path}";
244
  return self::trigger('cssJSToolbox.resolvepath', $path, $vPath);
245
  }
css-js-toolbox.php CHANGED
@@ -1,27 +1,16 @@
1
  <?php
2
  /*
3
  Plugin Name: CSS & JavaScript Toolbox
4
- Plugin URI: http://css-javascript-toolbox.com/css-javascript-toolbox-free
5
  Description: CJT Plugin for WordPress to easily add custom CSS and JavaScript to individual pages
6
- Version: 7.2
7
  Author: Wipeout Media
8
  Author URI: http://css-javascript-toolbox.com
9
  License:
10
 
11
- Copyright (c) 2011, Wipeout Media.
12
- This program is free software; you can redistribute it and/or
13
- modify it under the terms of the GNU General Public License
14
- as published by the Free Software Foundation; either version 2
15
- of the License, or (at your option) any later version.
16
 
17
- This program is distributed in the hope that it will be useful,
18
- but WITHOUT ANY WARRANTY; without even the implied warranty of
19
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
- GNU General Public License for more details.
21
-
22
- You should have received a copy of the GNU General Public License
23
- along with this program; if not, write to the Free Software
24
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
25
  */
26
 
27
  // Disallow direct access.
@@ -95,17 +84,12 @@ class CJTPlugin extends CJTHookableClass {
95
  /**
96
  *
97
  */
98
- const Edition = 'free';
99
-
100
- /**
101
- *
102
- */
103
- const FW_Version = '3.0';
104
 
105
  /**
106
  *
107
  */
108
- const VERSION = '7.2-CE' ;
109
 
110
  /**
111
  *
1
  <?php
2
  /*
3
  Plugin Name: CSS & JavaScript Toolbox
4
+ Plugin URI: http://css-javascript-toolbox.com/
5
  Description: CJT Plugin for WordPress to easily add custom CSS and JavaScript to individual pages
6
+ Version: 8.0
7
  Author: Wipeout Media
8
  Author URI: http://css-javascript-toolbox.com
9
  License:
10
 
11
+ The Software is package as a WordPress¨ plugin. The PHP code associated with the Software is licensed under the GPL version 2.0 license (as found at http://www.gnu.org/licenses/gpl-2.0.txt GNU/GPLv2 or "GPLv2"). You may redistribute, repackage, and modify the PHP code as you see fit and as consistent with GPLv2.
 
 
 
 
12
 
13
+ The remaining portions of the Software ("Proprietary Portion"), which includes all images, cascading style sheets, and JavaScript are NOT licensed under GPLv2 and are considered proprietary to Licensor and are solely licensed under the remaining terms of this Agreement. The Proprietary Portion may not be redistributed, repackaged, or otherwise modified.
 
 
 
 
 
 
 
14
  */
15
 
16
  // Disallow direct access.
84
  /**
85
  *
86
  */
87
+ const FW_Version = '4.0';
 
 
 
 
 
88
 
89
  /**
90
  *
91
  */
92
+ const VERSION = '8.0' ;
93
 
94
  /**
95
  *
framework/access-points/access-point.class.php CHANGED
@@ -80,6 +80,20 @@ abstract class CJTAccessPoint extends CJTHookableClass implements CJTIAccessPoin
80
  */
81
  protected $onsetcontroller = array('parameters' => array('controller'));
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  /**
84
  * put your comment there...
85
  *
@@ -94,6 +108,12 @@ abstract class CJTAccessPoint extends CJTHookableClass implements CJTIAccessPoin
94
  public function __construct($defaultController = 'blocks') {
95
  // Initialize Hookable.
96
  parent::__construct();
 
 
 
 
 
 
97
  // Initialize!
98
  $this->controllerName = $this->ongetdefaultcontrollername(isset($_REQUEST['controller']) ? $_REQUEST['controller'] : $defaultController);
99
  }
@@ -183,7 +203,14 @@ abstract class CJTAccessPoint extends CJTHookableClass implements CJTIAccessPoin
183
  // Import view class.
184
  require_once CJTOOLBOX_MVC_FRAMEWOK . '/view.inc.php';
185
  // Instantiate controller!
186
- $this->controller = $this->onsetcontroller(CJTController::getInstance($this->controllerName, $loadView, $request));
 
 
 
 
 
 
 
187
  }
188
  return $this->controller;
189
  }
80
  */
81
  protected $onsetcontroller = array('parameters' => array('controller'));
82
 
83
+ /**
84
+ * put your comment there...
85
+ *
86
+ * @var mixed
87
+ */
88
+ protected $overrideControllersPath = null;
89
+
90
+ /**
91
+ * put your comment there...
92
+ *
93
+ * @var mixed
94
+ */
95
+ protected $overrideControllersPrefix = null;
96
+
97
  /**
98
  * put your comment there...
99
  *
108
  public function __construct($defaultController = 'blocks') {
109
  // Initialize Hookable.
110
  parent::__construct();
111
+ // Overrides controllers path using current Access Point model class path
112
+ $accessPointClassLoader =& CJT_Framework_Autoload_Loader::findClassLoader(get_class($this));
113
+ if ($accessPointClassLoader) {
114
+ $this->overrideControllersPath = $accessPointClassLoader->getPath() . DIRECTORY_SEPARATOR . 'controllers';
115
+ $this->overrideControllersPrefix = $accessPointClassLoader->getPrefix();
116
+ }
117
  // Initialize!
118
  $this->controllerName = $this->ongetdefaultcontrollername(isset($_REQUEST['controller']) ? $_REQUEST['controller'] : $defaultController);
119
  }
203
  // Import view class.
204
  require_once CJTOOLBOX_MVC_FRAMEWOK . '/view.inc.php';
205
  // Instantiate controller!
206
+ $this->controller = $this->onsetcontroller(
207
+ CJTController::getInstance(
208
+ $this->controllerName,
209
+ $loadView,
210
+ $request,
211
+ $this->overrideControllersPath,
212
+ $this->overrideControllersPrefix
213
+ ));
214
  }
215
  return $this->controller;
216
  }
framework/autoload/loader.php CHANGED
@@ -14,6 +14,13 @@ defined('ABSPATH') or die("Access denied");
14
  */
15
  class CJT_Framework_Autoload_Loader {
16
 
 
 
 
 
 
 
 
17
  /**
18
  * put your comment there...
19
  *
@@ -59,15 +66,29 @@ class CJT_Framework_Autoload_Loader {
59
  * @param mixed $path
60
  */
61
  public static function autoLoad($prefix = null, $path = null) {
62
- // Hold all auto load instances.
63
- static $instances = array();
64
  // Identify instances by prefixes!
65
- if (!isset($instances[$prefix])) {
66
- $instances[$prefix] = new CJT_Framework_Autoload_Loader($prefix, $path);
67
  }
68
- return $instances[$prefix];
69
  }
70
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  /**
72
  * put your comment there...
73
  *
@@ -120,6 +141,22 @@ class CJT_Framework_Autoload_Loader {
120
  return $path . DIRECTORY_SEPARATOR . $file;
121
  }
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  /**
124
  * put your comment there...
125
  *
14
  */
15
  class CJT_Framework_Autoload_Loader {
16
 
17
+ /**
18
+ *
19
+ *
20
+ * @var mixed
21
+ */
22
+ protected static $instances = array();
23
+
24
  /**
25
  * put your comment there...
26
  *
66
  * @param mixed $path
67
  */
68
  public static function autoLoad($prefix = null, $path = null) {
 
 
69
  // Identify instances by prefixes!
70
+ if (!isset(self::$instances[$prefix])) {
71
+ self::$instances[$prefix] = new CJT_Framework_Autoload_Loader($prefix, $path);
72
  }
73
+ return isset(self::$instances[$prefix]) ? self::$instances[$prefix] : null;
74
  }
75
 
76
+ /**
77
+ * Find ClassAutoloader instance used for loading specific class.
78
+ *
79
+ * The method is using Prefix algorithm for finding class autoloader
80
+ *
81
+ * @param mixed $className
82
+ */
83
+ public static function & findClassLoader($className) {
84
+ # Getting class prefix
85
+ $classComponents = explode('_', $className);
86
+ $prefix = $classComponents[0];
87
+ # Find autoloader
88
+ $instance = isset(self::$instances[$prefix]) ? self::$instances[$prefix] : null;
89
+ return $instance;
90
+ }
91
+
92
  /**
93
  * put your comment there...
94
  *
141
  return $path . DIRECTORY_SEPARATOR . $file;
142
  }
143
 
144
+ /**
145
+ * put your comment there...
146
+ *
147
+ */
148
+ public function getPath() {
149
+ return $this->path;
150
+ }
151
+
152
+ /**
153
+ * put your comment there...
154
+ *
155
+ */
156
+ public function getPrefix() {
157
+ return $this->prefix;
158
+ }
159
+
160
  /**
161
  * put your comment there...
162
  *
framework/db/mysql/xtable.inc.php CHANGED
@@ -327,6 +327,15 @@ abstract class CJTxTable extends CJTHookableClass {
327
  return $this;
328
  }
329
 
 
 
 
 
 
 
 
 
 
330
  /**
331
  * put your comment there...
332
  *
327
  return $this;
328
  }
329
 
330
+ /**
331
+ * put your comment there...
332
+ *
333
+ * @param mixed $values
334
+ */
335
+ public function loadAsKey($values) {
336
+ return $this->setData($values)->load(array_keys($values));
337
+ }
338
+
339
  /**
340
  * put your comment there...
341
  *
framework/extensions/extensions.class.php CHANGED
@@ -26,6 +26,13 @@ class CJTExtensions extends CJTHookableClass {
26
  */
27
  const PREFIX = 'cjte-';
28
 
 
 
 
 
 
 
 
29
  /**
30
  * put your comment there...
31
  *
@@ -184,7 +191,6 @@ class CJTExtensions extends CJTHookableClass {
184
  //Resting!
185
  $this->file2Classmap = array();
186
  $extensions = array();
187
- $edition = CJTPlugin::Edition;
188
  // filter all installed Plugins to fetch all out Extensions!
189
  $activePlugins = $this->ongetactiveplugins(wp_get_active_and_valid_plugins());
190
  foreach ($activePlugins as $file) {
@@ -195,15 +201,15 @@ class CJTExtensions extends CJTHookableClass {
195
  // CJT Extsnsion must has the definition XML file!
196
  // First try for Edition-Specific file
197
  // if not exists try the generic one.
198
- $xmlFile = "{$pluginDir}/{$pluginName}-{$edition}.xml";
199
- if (file_exists($xmlFile) || file_exists($xmlFile = "{$pluginDir}/{$pluginName}.xml")) {
200
  // Get Plugin primary data!
201
  $extension = array();
202
  $extension['pluginFile'] = $file;
203
  $extension['file'] = basename($file);
204
  $extension['defFile'] = basename($pluginDir) . DIRECTORY_SEPARATOR . basename($xmlFile);
205
  // Its useful to use ABS path only at runtime as it might changed as host might get moved.
206
- $extension['dir'] = str_replace((ABSPATH . PLUGINDIR . '/'), '', $pluginDir) ;
207
  $extension['name'] = $pluginName;
208
  // Cache XML file.
209
  $extension['definition']['raw'] = file_get_contents($xmlFile);
@@ -223,8 +229,6 @@ class CJTExtensions extends CJTHookableClass {
223
  }
224
  }
225
  }
226
- // Update the cache Cache!
227
- // ----update_option(self::CACHE_OPTION_NAME, $extensions);
228
  }
229
  $this->extensions = $this->onload($extensions);
230
  // Chaining
@@ -310,6 +314,29 @@ class CJTExtensions extends CJTHookableClass {
310
  }
311
  }
312
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
313
  /**
314
  * put your comment there...
315
  *
26
  */
27
  const PREFIX = 'cjte-';
28
 
29
+ /**
30
+ * put your comment there...
31
+ *
32
+ * @var mixed
33
+ */
34
+ protected $defDocs;
35
+
36
  /**
37
  * put your comment there...
38
  *
191
  //Resting!
192
  $this->file2Classmap = array();
193
  $extensions = array();
 
194
  // filter all installed Plugins to fetch all out Extensions!
195
  $activePlugins = $this->ongetactiveplugins(wp_get_active_and_valid_plugins());
196
  foreach ($activePlugins as $file) {
201
  // CJT Extsnsion must has the definition XML file!
202
  // First try for Edition-Specific file
203
  // if not exists try the generic one.
204
+ $xmlFile = "{$pluginDir}/{$pluginName}.xml";
205
+ if (file_exists($xmlFile)) {
206
  // Get Plugin primary data!
207
  $extension = array();
208
  $extension['pluginFile'] = $file;
209
  $extension['file'] = basename($file);
210
  $extension['defFile'] = basename($pluginDir) . DIRECTORY_SEPARATOR . basename($xmlFile);
211
  // Its useful to use ABS path only at runtime as it might changed as host might get moved.
212
+ $extension['dir'] = basename($pluginDir);
213
  $extension['name'] = $pluginName;
214
  // Cache XML file.
215
  $extension['definition']['raw'] = file_get_contents($xmlFile);
229
  }
230
  }
231
  }
 
 
232
  }
233
  $this->extensions = $this->onload($extensions);
234
  // Chaining
314
  }
315
  }
316
 
317
+ /**
318
+ * put your comment there...
319
+ *
320
+ * @param mixed $pluginName
321
+ */
322
+ public function & getDefDoc($pluginName) {
323
+ # Find if cached or create it
324
+ if (!isset($this->defDocs[$pluginName])) {
325
+ // Add CJT Def doc to def docs list
326
+ $pluginXMLFile = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $pluginName . DIRECTORY_SEPARATOR . "{$pluginName}.xml";
327
+ // Extension might removed while its license key still in the database
328
+ // Make sure the extension still exists
329
+ if (file_exists($pluginXMLFile)) {
330
+ $this->defDocs[$pluginName] = new SimpleXMLElement(file_get_contents($pluginXMLFile));
331
+ }
332
+ else {
333
+ # Return null when extension is absent!
334
+ $this->defDocs[$pluginName] = null;
335
+ }
336
+ }
337
+ return $this->defDocs[$pluginName];
338
+ }
339
+
340
  /**
341
  * put your comment there...
342
  *
framework/js/ace/theme-ambiance.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/ambiance",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-ambiance",t.cssText=".ace-ambiance .ace_gutter {background-color: #3d3d3d;background-image: -moz-linear-gradient(left, #3D3D3D, #333);background-image: -ms-linear-gradient(left, #3D3D3D, #333);background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3D3D3D), to(#333));background-image: -webkit-linear-gradient(left, #3D3D3D, #333);background-image: -o-linear-gradient(left, #3D3D3D, #333);background-image: linear-gradient(left, #3D3D3D, #333);background-repeat: repeat-x;border-right: 1px solid #4d4d4d;text-shadow: 0px 1px 1px #4d4d4d;color: #222;}.ace-ambiance .ace_gutter-layer {background: repeat left top;}.ace-ambiance .ace_fold-widget {text-align: center;}.ace-ambiance .ace_fold-widget:hover {color: #777;}.ace-ambiance .ace_fold-widget.ace_start,.ace-ambiance .ace_fold-widget.ace_end,.ace-ambiance .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-ambiance .ace_fold-widget.ace_start:after {content: '▾'}.ace-ambiance .ace_fold-widget.ace_end:after {content: '▴'}.ace-ambiance .ace_fold-widget.ace_closed:after {content: '‣'}.ace-ambiance .ace_print-margin {border-left: 1px dotted #2D2D2D;right: 0;background: #262626;}.ace-ambiance .ace_scroller {-webkit-box-shadow: inset 0 0 10px black;-moz-box-shadow: inset 0 0 10px black;-o-box-shadow: inset 0 0 10px black;box-shadow: inset 0 0 10px black;}.ace-ambiance {color: #E6E1DC;background-color: #202020;}.ace-ambiance .ace_cursor {border-left: 1px solid #7991E8;}.ace-ambiance .ace_overwrite-cursors .ace_cursor {border: 1px solid #FFE300;background: #766B13;}.ace-ambiance.normal-mode .ace_cursor-layer {z-index: 0;}.ace-ambiance .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20);}.ace-ambiance .ace_marker-layer .ace_selected-word {border-radius: 4px;border: 8px solid #3f475d;box-shadow: 0 0 4px black;}.ace-ambiance .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-ambiance .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25);}.ace-ambiance .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031);}.ace-ambiance .ace_invisible {color: #333;}.ace-ambiance .ace_paren {color: #24C2C7;}.ace-ambiance .ace_keyword {color: #cda869;}.ace-ambiance .ace_keyword.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_punctuation.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_identifier {}.ace-ambiance .ace-statement {color: #cda869;}.ace-ambiance .ace_constant {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_language {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_library {}.ace-ambiance .ace_constant.ace_numeric {color: #78CF8A;}.ace-ambiance .ace_invalid {text-decoration: underline;}.ace-ambiance .ace_invalid.ace_illegal {color:#F8F8F8;background-color: rgba(86, 45, 86, 0.75);}.ace-ambiance .ace_invalid,.ace-ambiance .ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1;}.ace-ambiance .ace_support {color: #9B859D;}.ace-ambiance .ace_support.ace_function {color: #DAD085;}.ace-ambiance .ace_function.ace_buildin {color: #9b859d;}.ace-ambiance .ace_string {color: #8f9d6a;}.ace-ambiance .ace_string.ace_regexp {color: #DAD085;}.ace-ambiance .ace_comment {font-style: italic;color: #555;}.ace-ambiance .ace_comment.ace_doc {}.ace-ambiance .ace_comment.ace_doc.ace_tag {color: #666;font-style: normal;}.ace-ambiance .ace_definition,.ace-ambiance .ace_type {color: #aac6e3;}.ace-ambiance .ace_variable {color: #9999cc;}.ace-ambiance .ace_variable.ace_language {color: #9b859d;}.ace-ambiance .ace_xml-pe {color: #494949;}.ace-ambiance .ace_gutter-layer,.ace-ambiance .ace_text-layer {background-image: url(\"data:image/png;base64,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\");}.ace-ambiance .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\") right repeat-y;}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-chaos.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/chaos",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-chaos",t.cssText=".ace-chaos .ace_gutter {background: #141414;color: #595959;border-right: 1px solid #282828;}.ace-chaos .ace_gutter-cell.ace_warning {background-image: none;background: #FC0;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_gutter-cell.ace_error {background-position: -6px center;background-image: none;background: #F10;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_print-margin {border-left: 1px solid #555;right: 0;background: #1D1D1D;}.ace-chaos {background-color: #161616;color: #E6E1DC;}.ace-chaos .ace_cursor {border-left: 2px solid #FFFFFF;}.ace-chaos .ace_cursor.ace_overwrite {border-left: 0px;border-bottom: 1px solid #FFFFFF;}.ace-chaos .ace_marker-layer .ace_selection {background: #494836;}.ace-chaos .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-chaos .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #FCE94F;}.ace-chaos .ace_marker-layer .ace_active-line {background: #333;}.ace-chaos .ace_gutter-active-line {background-color: #222;}.ace-chaos .ace_invisible {color: #404040;}.ace-chaos .ace_keyword {color:#00698F;}.ace-chaos .ace_keyword.ace_operator {color:#FF308F;}.ace-chaos .ace_constant {color:#1EDAFB;}.ace-chaos .ace_constant.ace_language {color:#FDC251;}.ace-chaos .ace_constant.ace_library {color:#8DFF0A;}.ace-chaos .ace_constant.ace_numeric {color:#58C554;}.ace-chaos .ace_invalid {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_invalid.ace_deprecated {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_support {color: #999;}.ace-chaos .ace_support.ace_function {color:#00AEEF;}.ace-chaos .ace_function {color:#00AEEF;}.ace-chaos .ace_string {color:#58C554;}.ace-chaos .ace_comment {color:#555;font-style:italic;padding-bottom: 0px;}.ace-chaos .ace_variable {color:#997744;}.ace-chaos .ace_meta.ace_tag {color:#BE53E6;}.ace-chaos .ace_entity.ace_other.ace_attribute-name {color:#FFFF89;}.ace-chaos .ace_markup.ace_underline {text-decoration: underline;}.ace-chaos .ace_fold-widget {text-align: center;}.ace-chaos .ace_fold-widget:hover {color: #777;}.ace-chaos .ace_fold-widget.ace_start,.ace-chaos .ace_fold-widget.ace_end,.ace-chaos .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-chaos .ace_fold-widget.ace_start:after {content: '▾'}.ace-chaos .ace_fold-widget.ace_end:after {content: '▴'}.ace-chaos .ace_fold-widget.ace_closed:after {content: '‣'}.ace-chaos .ace_indent-guide {border-right:1px dotted #333;margin-right:-1px;}.ace-chaos .ace_fold { background: #222; border-radius: 3px; color: #7AF; border: none; }.ace-chaos .ace_fold:hover {background: #CCC; color: #000;}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-chrome.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/chrome",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-chrome",t.cssText='.ace-chrome .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-chrome .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-chrome {background-color: #FFFFFF;}.ace-chrome .ace_cursor {color: black;}.ace-chrome .ace_invisible {color: rgb(191, 191, 191);}.ace-chrome .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-chrome .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-chrome .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-chrome .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-chrome .ace_fold {}.ace-chrome .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-chrome .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-chrome .ace_support.ace_type,.ace-chrome .ace_support.ace_class.ace-chrome .ace_support.ace_other {color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter {font-style:italic;color:#FD971F;}.ace-chrome .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-chrome .ace_comment {color: #236e24;}.ace-chrome .ace_comment.ace_doc {color: #236e24;}.ace-chrome .ace_comment.ace_doc.ace_tag {color: #236e24;}.ace-chrome .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-chrome .ace_variable {color: rgb(49, 132, 149);}.ace-chrome .ace_xml-pe {color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-chrome .ace_heading {color: rgb(12, 7, 255);}.ace-chrome .ace_list {color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_gutter-active-line {background-color : #dcdcdc;}.ace-chrome .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_keyword,.ace-chrome .ace_meta.ace_tag {color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-chrome .ace_string {color: #1A1AA6;}.ace-chrome .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-chrome .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-clouds.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/clouds",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-clouds",t.cssText='.ace-clouds .ace_gutter {background: #ebebeb;color: #333}.ace-clouds .ace_print-margin {width: 1px;background: #e8e8e8}.ace-clouds {background-color: #FFFFFF;color: #000000}.ace-clouds .ace_cursor {color: #000000}.ace-clouds .ace_marker-layer .ace_selection {background: #BDD5FC}.ace-clouds.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;border-radius: 2px}.ace-clouds .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-clouds .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds .ace_marker-layer .ace_active-line {background: #FFFBD1}.ace-clouds .ace_gutter-active-line {background-color : #dcdcdc}.ace-clouds .ace_marker-layer .ace_selected-word {border: 1px solid #BDD5FC}.ace-clouds .ace_invisible {color: #BFBFBF}.ace-clouds .ace_keyword,.ace-clouds .ace_meta,.ace-clouds .ace_support.ace_constant.ace_property-value {color: #AF956F}.ace-clouds .ace_keyword.ace_operator {color: #484848}.ace-clouds .ace_keyword.ace_other.ace_unit {color: #96DC5F}.ace-clouds .ace_constant.ace_language {color: #39946A}.ace-clouds .ace_constant.ace_numeric {color: #46A609}.ace-clouds .ace_constant.ace_character.ace_entity {color: #BF78CC}.ace-clouds .ace_invalid {background-color: #FF002A}.ace-clouds .ace_fold {background-color: #AF956F;border-color: #000000}.ace-clouds .ace_storage,.ace-clouds .ace_support.ace_class,.ace-clouds .ace_support.ace_function,.ace-clouds .ace_support.ace_other,.ace-clouds .ace_support.ace_type {color: #C52727}.ace-clouds .ace_string {color: #5D90CD}.ace-clouds .ace_comment {color: #BCC8BA}.ace-clouds .ace_entity.ace_name.ace_tag,.ace-clouds .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-clouds_midnight.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/clouds_midnight",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-clouds-midnight",t.cssText=".ace-clouds-midnight .ace_gutter {background: #232323;color: #929292}.ace-clouds-midnight .ace_print-margin {width: 1px;background: #232323}.ace-clouds-midnight {background-color: #191919;color: #929292}.ace-clouds-midnight .ace_cursor {color: #7DA5DC}.ace-clouds-midnight .ace_marker-layer .ace_selection {background: #000000}.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #191919;border-radius: 2px}.ace-clouds-midnight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-clouds-midnight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds-midnight .ace_marker-layer .ace_active-line {background: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_gutter-active-line {background-color: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_marker-layer .ace_selected-word {border: 1px solid #000000}.ace-clouds-midnight .ace_invisible {color: #BFBFBF}.ace-clouds-midnight .ace_keyword,.ace-clouds-midnight .ace_meta,.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {color: #927C5D}.ace-clouds-midnight .ace_keyword.ace_operator {color: #4B4B4B}.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {color: #366F1A}.ace-clouds-midnight .ace_constant.ace_language {color: #39946A}.ace-clouds-midnight .ace_constant.ace_numeric {color: #46A609}.ace-clouds-midnight .ace_constant.ace_character.ace_entity {color: #A165AC}.ace-clouds-midnight .ace_invalid {color: #FFFFFF;background-color: #E92E2E}.ace-clouds-midnight .ace_fold {background-color: #927C5D;border-color: #929292}.ace-clouds-midnight .ace_storage,.ace-clouds-midnight .ace_support.ace_class,.ace-clouds-midnight .ace_support.ace_function,.ace-clouds-midnight .ace_support.ace_other,.ace-clouds-midnight .ace_support.ace_type {color: #E92E2E}.ace-clouds-midnight .ace_string {color: #5D90CD}.ace-clouds-midnight .ace_comment {color: #3C403B}.ace-clouds-midnight .ace_entity.ace_name.ace_tag,.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds-midnight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-cobalt.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/cobalt",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-cobalt",t.cssText=".ace-cobalt .ace_gutter {background: #011e3a;color: #fff}.ace-cobalt .ace_print-margin {width: 1px;background: #011e3a}.ace-cobalt {background-color: #002240;color: #FFFFFF}.ace-cobalt .ace_cursor {color: #FFFFFF}.ace-cobalt .ace_marker-layer .ace_selection {background: rgba(179, 101, 57, 0.75)}.ace-cobalt.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002240;border-radius: 2px}.ace-cobalt .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-cobalt .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_marker-layer .ace_selected-word {border: 1px solid rgba(179, 101, 57, 0.75)}.ace-cobalt .ace_invisible {color: rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_keyword,.ace-cobalt .ace_meta {color: #FF9D00}.ace-cobalt .ace_constant,.ace-cobalt .ace_constant.ace_character,.ace-cobalt .ace_constant.ace_character.ace_escape,.ace-cobalt .ace_constant.ace_other {color: #FF628C}.ace-cobalt .ace_invalid {color: #F8F8F8;background-color: #800F00}.ace-cobalt .ace_support {color: #80FFBB}.ace-cobalt .ace_support.ace_constant {color: #EB939A}.ace-cobalt .ace_fold {background-color: #FF9D00;border-color: #FFFFFF}.ace-cobalt .ace_support.ace_function {color: #FFB054}.ace-cobalt .ace_storage {color: #FFEE80}.ace-cobalt .ace_entity {color: #FFDD00}.ace-cobalt .ace_string {color: #3AD900}.ace-cobalt .ace_string.ace_regexp {color: #80FFC2}.ace-cobalt .ace_comment {font-style: italic;color: #0088FF}.ace-cobalt .ace_heading,.ace-cobalt .ace_markup.ace_heading {color: #C8E4FD;background-color: #001221}.ace-cobalt .ace_list,.ace-cobalt .ace_markup.ace_list {background-color: #130D26}.ace-cobalt .ace_variable {color: #CCCCCC}.ace-cobalt .ace_variable.ace_language {color: #FF80E1}.ace-cobalt .ace_meta.ace_tag {color: #9EFFFF}.ace-cobalt .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-crimson_editor.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/crimson_editor",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssText='.ace-crimson-editor .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-crimson-editor .ace_gutter-layer {width: 100%;text-align: right;}.ace-crimson-editor .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-crimson-editor {background-color: #FFFFFF;color: rgb(64, 64, 64);}.ace-crimson-editor .ace_cursor {color: black;}.ace-crimson-editor .ace_invisible {color: rgb(191, 191, 191);}.ace-crimson-editor .ace_identifier {color: black;}.ace-crimson-editor .ace_keyword {color: blue;}.ace-crimson-editor .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-crimson-editor .ace_constant.ace_language {color: rgb(255, 156, 0);}.ace-crimson-editor .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_invalid {text-decoration: line-through;color: rgb(224, 0, 0);}.ace-crimson-editor .ace_fold {}.ace-crimson-editor .ace_support.ace_function {color: rgb(192, 0, 0);}.ace-crimson-editor .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_support.ace_type,.ace-crimson-editor .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-crimson-editor .ace_keyword.ace_operator {color: rgb(49, 132, 149);}.ace-crimson-editor .ace_string {color: rgb(128, 0, 128);}.ace-crimson-editor .ace_comment {color: rgb(76, 136, 107);}.ace-crimson-editor .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-crimson-editor .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-crimson-editor .ace_constant.ace_numeric {color: rgb(0, 0, 64);}.ace-crimson-editor .ace_variable {color: rgb(0, 64, 128);}.ace-crimson-editor .ace_xml-pe {color: rgb(104, 104, 91);}.ace-crimson-editor .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-crimson-editor .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-crimson-editor .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-crimson-editor .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-crimson-editor .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254);}.ace-crimson-editor .ace_gutter-active-line {background-color : #dcdcdc;}.ace-crimson-editor .ace_meta.ace_tag {color:rgb(28, 2, 255);}.ace-crimson-editor .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-crimson-editor .ace_string.ace_regex {color: rgb(192, 0, 192);}.ace-crimson-editor .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.cssClass="ace-crimson-editor";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-dawn.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/dawn",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-dawn",t.cssText=".ace-dawn .ace_gutter {background: #ebebeb;color: #333}.ace-dawn .ace_print-margin {width: 1px;background: #e8e8e8}.ace-dawn {background-color: #F9F9F9;color: #080808}.ace-dawn .ace_cursor {color: #000000}.ace-dawn .ace_marker-layer .ace_selection {background: rgba(39, 95, 255, 0.30)}.ace-dawn.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #F9F9F9;border-radius: 2px}.ace-dawn .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-dawn .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(75, 75, 126, 0.50)}.ace-dawn .ace_marker-layer .ace_active-line {background: rgba(36, 99, 180, 0.12)}.ace-dawn .ace_gutter-active-line {background-color : #dcdcdc}.ace-dawn .ace_marker-layer .ace_selected-word {border: 1px solid rgba(39, 95, 255, 0.30)}.ace-dawn .ace_invisible {color: rgba(75, 75, 126, 0.50)}.ace-dawn .ace_keyword,.ace-dawn .ace_meta {color: #794938}.ace-dawn .ace_constant,.ace-dawn .ace_constant.ace_character,.ace-dawn .ace_constant.ace_character.ace_escape,.ace-dawn .ace_constant.ace_other {color: #811F24}.ace-dawn .ace_invalid.ace_illegal {text-decoration: underline;font-style: italic;color: #F8F8F8;background-color: #B52A1D}.ace-dawn .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #B52A1D}.ace-dawn .ace_support {color: #691C97}.ace-dawn .ace_support.ace_constant {color: #B4371F}.ace-dawn .ace_fold {background-color: #794938;border-color: #080808}.ace-dawn .ace_list,.ace-dawn .ace_markup.ace_list,.ace-dawn .ace_support.ace_function {color: #693A17}.ace-dawn .ace_storage {font-style: italic;color: #A71D5D}.ace-dawn .ace_string {color: #0B6125}.ace-dawn .ace_string.ace_regexp {color: #CF5628}.ace-dawn .ace_comment {font-style: italic;color: #5A525F}.ace-dawn .ace_heading,.ace-dawn .ace_markup.ace_heading {color: #19356D}.ace-dawn .ace_variable {color: #234A97}.ace-dawn .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-dreamweaver.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/dreamweaver",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-dreamweaver",t.cssText='.ace-dreamweaver .ace_gutter {background: #e8e8e8;color: #333;}.ace-dreamweaver .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-dreamweaver {background-color: #FFFFFF;}.ace-dreamweaver .ace_fold {background-color: #757AD8;}.ace-dreamweaver .ace_cursor {color: black;}.ace-dreamweaver .ace_invisible {color: rgb(191, 191, 191);}.ace-dreamweaver .ace_storage,.ace-dreamweaver .ace_keyword {color: blue;}.ace-dreamweaver .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-dreamweaver .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-dreamweaver .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-dreamweaver .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-dreamweaver .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_support.ace_type,.ace-dreamweaver .ace_support.ace_class {color: #009;}.ace-dreamweaver .ace_support.ace_php_tag {color: #f00;}.ace-dreamweaver .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-dreamweaver .ace_string {color: #00F;}.ace-dreamweaver .ace_comment {color: rgb(76, 136, 107);}.ace-dreamweaver .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-dreamweaver .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-dreamweaver .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-dreamweaver .ace_variable {color: #06F}.ace-dreamweaver .ace_xml-pe {color: rgb(104, 104, 91);}.ace-dreamweaver .ace_entity.ace_name.ace_function {color: #00F;}.ace-dreamweaver .ace_heading {color: rgb(12, 7, 255);}.ace-dreamweaver .ace_list {color:rgb(185, 6, 144);}.ace-dreamweaver .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-dreamweaver .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-dreamweaver .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-dreamweaver .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-dreamweaver .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-dreamweaver .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-dreamweaver .ace_meta.ace_tag {color:#009;}.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {color:#060;}.ace-dreamweaver .ace_meta.ace_tag.ace_form {color:#F90;}.ace-dreamweaver .ace_meta.ace_tag.ace_image {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_script {color:#900;}.ace-dreamweaver .ace_meta.ace_tag.ace_style {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_table {color:#099;}.ace-dreamweaver .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-dreamweaver .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-eclipse.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/eclipse",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssText='.ace-eclipse .ace_gutter {background: #ebebeb;border-right: 1px solid rgb(159, 159, 159);color: rgb(136, 136, 136);}.ace-eclipse .ace_print-margin {width: 1px;background: #ebebeb;}.ace-eclipse {background-color: #FFFFFF;}.ace-eclipse .ace_fold {background-color: rgb(60, 76, 114);}.ace-eclipse .ace_cursor {color: black;}.ace-eclipse .ace_storage,.ace-eclipse .ace_keyword,.ace-eclipse .ace_variable {color: rgb(127, 0, 85);}.ace-eclipse .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-eclipse .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-eclipse .ace_function {color: rgb(60, 76, 114);}.ace-eclipse .ace_string {color: rgb(42, 0, 255);}.ace-eclipse .ace_comment {color: rgb(113, 150, 130);}.ace-eclipse .ace_comment.ace_doc {color: rgb(63, 95, 191);}.ace-eclipse .ace_comment.ace_doc.ace_tag {color: rgb(127, 159, 191);}.ace-eclipse .ace_constant.ace_numeric {color: darkblue;}.ace-eclipse .ace_tag {color: rgb(25, 118, 116);}.ace-eclipse .ace_type {color: rgb(127, 0, 127);}.ace-eclipse .ace_xml-pe {color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_meta.ace_tag {color:rgb(25, 118, 116);}.ace-eclipse .ace_invisible {color: #ddd;}.ace-eclipse .ace_entity.ace_other.ace_attribute-name {color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_step {background: rgb(255, 255, 0);}.ace-eclipse .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254);}.ace-eclipse .ace_marker-layer .ace_selected-word {border: 1px solid rgb(181, 213, 255);}.ace-eclipse .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.cssClass="ace-eclipse";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-github.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/github",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-github",t.cssText='/* CSS style content from github\'s default pygments highlighter template.Cursor and selection styles from textmate.css. */.ace-github .ace_gutter {background: #e8e8e8;color: #AAA;}.ace-github {background: #fff;color: #000;}.ace-github .ace_keyword {font-weight: bold;}.ace-github .ace_string {color: #D14;}.ace-github .ace_variable.ace_class {color: teal;}.ace-github .ace_constant.ace_numeric {color: #099;}.ace-github .ace_constant.ace_buildin {color: #0086B3;}.ace-github .ace_support.ace_function {color: #0086B3;}.ace-github .ace_comment {color: #998;font-style: italic;}.ace-github .ace_variable.ace_language {color: #0086B3;}.ace-github .ace_paren {font-weight: bold;}.ace-github .ace_boolean {font-weight: bold;}.ace-github .ace_string.ace_regexp {color: #009926;font-weight: normal;}.ace-github .ace_variable.ace_instance {color: teal;}.ace-github .ace_constant.ace_language {font-weight: bold;}.ace-github .ace_cursor {color: black;}.ace-github .ace_marker-layer .ace_active-line {background: rgb(255, 255, 204);}.ace-github .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-github.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}/* bold keywords cause cursor issues for some fonts *//* this disables bold style for editor and keeps for static highlighter */.ace-github.ace_nobold .ace_line > span {font-weight: normal !important;}.ace-github .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-github .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-github .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-github .ace_gutter-active-line {background-color : rgba(0, 0, 0, 0.07);}.ace-github .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-github .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-github .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-idle_fingers.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/idle_fingers",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-idle-fingers",t.cssText=".ace-idle-fingers .ace_gutter {background: #3b3b3b;color: #fff}.ace-idle-fingers .ace_print-margin {width: 1px;background: #3b3b3b}.ace-idle-fingers {background-color: #323232;color: #FFFFFF}.ace-idle-fingers .ace_cursor {color: #91FF00}.ace-idle-fingers .ace_marker-layer .ace_selection {background: rgba(90, 100, 126, 0.88)}.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #323232;border-radius: 2px}.ace-idle-fingers .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-idle-fingers .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-idle-fingers .ace_marker-layer .ace_active-line {background: #353637}.ace-idle-fingers .ace_gutter-active-line {background-color: #353637}.ace-idle-fingers .ace_marker-layer .ace_selected-word {border: 1px solid rgba(90, 100, 126, 0.88)}.ace-idle-fingers .ace_invisible {color: #404040}.ace-idle-fingers .ace_keyword,.ace-idle-fingers .ace_meta {color: #CC7833}.ace-idle-fingers .ace_constant,.ace-idle-fingers .ace_constant.ace_character,.ace-idle-fingers .ace_constant.ace_character.ace_escape,.ace-idle-fingers .ace_constant.ace_other,.ace-idle-fingers .ace_support.ace_constant {color: #6C99BB}.ace-idle-fingers .ace_invalid {color: #FFFFFF;background-color: #FF0000}.ace-idle-fingers .ace_fold {background-color: #CC7833;border-color: #FFFFFF}.ace-idle-fingers .ace_support.ace_function {color: #B83426}.ace-idle-fingers .ace_variable.ace_parameter {font-style: italic}.ace-idle-fingers .ace_string {color: #A5C261}.ace-idle-fingers .ace_string.ace_regexp {color: #CCCC33}.ace-idle-fingers .ace_comment {font-style: italic;color: #BC9458}.ace-idle-fingers .ace_meta.ace_tag {color: #FFE5BB}.ace-idle-fingers .ace_entity.ace_name {color: #FFC66D}.ace-idle-fingers .ace_collab.ace_user1 {color: #323232;background-color: #FFF980}.ace-idle-fingers .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-katzenmilch.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/katzenmilch",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-katzenmilch",t.cssText=".ace-katzenmilch .ace_gutter,/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: ) */.ace-katzenmilch .ace_gutter {background: #e8e8e8;color: #333}.ace-katzenmilch .ace_print-margin {width: 1px;background: #e8e8e8}.ace-katzenmilch {background-color: #f3f2f3;color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_cursor {border-left: 2px solid #100011}.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {border-left: 0px;border-bottom: 1px solid #100011}.ace-katzenmilch .ace_marker-layer .ace_selection {background: rgba(100, 5, 208, 0.27)}.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #f3f2f3;border-radius: 2px}.ace-katzenmilch .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-katzenmilch .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #000000}.ace-katzenmilch .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254)}.ace-katzenmilch .ace_gutter-active-line {background-color: rgb(232, 242, 254)}.ace-katzenmilch .ace_marker-layer .ace_selected-word {border: 1px solid rgba(100, 5, 208, 0.27)}.ace-katzenmilch .ace_fold {background-color: rgba(2, 95, 73, 0.97);border-color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_keyword {color: #674Aa8;rbackground-color: rgba(163, 170, 216, 0.055)}.ace-katzenmilch .ace_constant.ace_language {color: #7D7e52;rbackground-color: rgba(189, 190, 130, 0.059)}.ace-katzenmilch .ace_constant.ace_numeric {color: rgba(79, 130, 123, 0.93);rbackground-color: rgba(119, 194, 187, 0.059)}.ace-katzenmilch .ace_constant.ace_character,.ace-katzenmilch .ace_constant.ace_other {color: rgba(2, 95, 105, 1.0);rbackground-color: rgba(127, 34, 153, 0.063)}.ace-katzenmilch .ace_support.ace_function {color: #9D7e62;rbackground-color: rgba(189, 190, 130, 0.039)}.ace-katzenmilch .ace_support.ace_class {color: rgba(239, 106, 167, 1.0);rbackground-color: rgba(239, 106, 167, 0.063)}.ace-katzenmilch .ace_storage {color: rgba(123, 92, 191, 1.0);rbackground-color: rgba(139, 93, 223, 0.051)}.ace-katzenmilch .ace_invalid {color: #DFDFD5;rbackground-color: #CC1B27}.ace-katzenmilch .ace_string {color: #5a5f9b;rbackground-color: rgba(170, 175, 219, 0.035)}.ace-katzenmilch .ace_comment {font-style: italic;color: rgba(64, 79, 80, 0.67);rbackground-color: rgba(95, 15, 255, 0.0078)}.ace-katzenmilch .ace_entity.ace_name.ace_function,.ace-katzenmilch .ace_variable {color: rgba(2, 95, 73, 0.97);rbackground-color: rgba(34, 255, 73, 0.12)}.ace-katzenmilch .ace_variable.ace_language {color: #316fcf;rbackground-color: rgba(58, 175, 255, 0.039)}.ace-katzenmilch .ace_variable.ace_parameter {font-style: italic;color: rgba(51, 150, 159, 0.87);rbackground-color: rgba(5, 214, 249, 0.043)}.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {color: rgba(73, 70, 194, 0.93);rbackground-color: rgba(73, 134, 194, 0.035)}.ace-katzenmilch .ace_entity.ace_name.ace_tag {color: #3976a2;rbackground-color: rgba(73, 166, 210, 0.039)}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-kr.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/kr",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-kr-theme",t.cssText=".ace-kr-theme .ace_gutter {background: #1c1917;color: #FCFFE0}.ace-kr-theme .ace_print-margin {width: 1px;background: #1c1917}.ace-kr-theme {background-color: #0B0A09;color: #FCFFE0}.ace-kr-theme .ace_cursor {color: #FF9900}.ace-kr-theme .ace_marker-layer .ace_selection {background: rgba(170, 0, 255, 0.45)}.ace-kr-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0B0A09;border-radius: 2px}.ace-kr-theme .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-kr-theme .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_marker-layer .ace_active-line {background: #38403D}.ace-kr-theme .ace_gutter-active-line {background-color : #38403D}.ace-kr-theme .ace_marker-layer .ace_selected-word {border: 1px solid rgba(170, 0, 255, 0.45)}.ace-kr-theme .ace_invisible {color: rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_keyword,.ace-kr-theme .ace_meta {color: #949C8B}.ace-kr-theme .ace_constant,.ace-kr-theme .ace_constant.ace_character,.ace-kr-theme .ace_constant.ace_character.ace_escape,.ace-kr-theme .ace_constant.ace_other {color: rgba(210, 117, 24, 0.76)}.ace-kr-theme .ace_invalid {color: #F8F8F8;background-color: #A41300}.ace-kr-theme .ace_support {color: #9FC28A}.ace-kr-theme .ace_support.ace_constant {color: #C27E66}.ace-kr-theme .ace_fold {background-color: #949C8B;border-color: #FCFFE0}.ace-kr-theme .ace_support.ace_function {color: #85873A}.ace-kr-theme .ace_storage {color: #FFEE80}.ace-kr-theme .ace_string {color: rgba(164, 161, 181, 0.8)}.ace-kr-theme .ace_string.ace_regexp {color: rgba(125, 255, 192, 0.65)}.ace-kr-theme .ace_comment {font-style: italic;color: #706D5B}.ace-kr-theme .ace_variable {color: #D1A796}.ace-kr-theme .ace_list,.ace-kr-theme .ace_markup.ace_list {background-color: #0F0040}.ace-kr-theme .ace_variable.ace_language {color: #FF80E1}.ace-kr-theme .ace_meta.ace_tag {color: #BABD9C}.ace-kr-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-kuroir.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/kuroir",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-kuroir",t.cssText="/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: 467560D0-6ACE-4409-82FD-4791420837AC) */.ace-kuroir .ace_gutter {background: #e8e8e8;color: #333;}.ace-kuroir .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-kuroir {background-color: #E8E9E8;color: #363636;}.ace-kuroir .ace_cursor {color: #202020;}.ace-kuroir .ace_marker-layer .ace_selection {background: rgba(245, 170, 0, 0.57);}.ace-kuroir.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #E8E9E8;border-radius: 2px;}.ace-kuroir .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-kuroir .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(0, 0, 0, 0.29);}.ace-kuroir .ace_marker-layer .ace_active-line {background: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_gutter-active-line {background-color: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_marker-layer .ace_selected-word {border: 1px solid rgba(245, 170, 0, 0.57);}.ace-kuroir .ace_fold {background-color: ;border-color: #363636;}.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;background-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;font-style:italic;color:#FD1732;background-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;background-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);background-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;background-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-merbivore.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/merbivore",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-merbivore",t.cssText=".ace-merbivore .ace_gutter {background: #202020;color: #E6E1DC}.ace-merbivore .ace_print-margin {width: 1px;background: #555651}.ace-merbivore {background-color: #161616;color: #E6E1DC}.ace-merbivore .ace_cursor {color: #FFFFFF}.ace-merbivore .ace_marker-layer .ace_selection {background: #454545}.ace-merbivore.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #161616;border-radius: 2px}.ace-merbivore .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore .ace_gutter-active-line {background-color: #333435}.ace-merbivore .ace_marker-layer .ace_selected-word {border: 1px solid #454545}.ace-merbivore .ace_invisible {color: #404040}.ace-merbivore .ace_entity.ace_name.ace_tag,.ace-merbivore .ace_keyword,.ace-merbivore .ace_meta,.ace-merbivore .ace_meta.ace_tag,.ace-merbivore .ace_storage,.ace-merbivore .ace_support.ace_function {color: #FC6F09}.ace-merbivore .ace_constant,.ace-merbivore .ace_constant.ace_character,.ace-merbivore .ace_constant.ace_character.ace_escape,.ace-merbivore .ace_constant.ace_other,.ace-merbivore .ace_support.ace_type {color: #1EDAFB}.ace-merbivore .ace_constant.ace_character.ace_escape {color: #519F50}.ace-merbivore .ace_constant.ace_language {color: #FDC251}.ace-merbivore .ace_constant.ace_library,.ace-merbivore .ace_string,.ace-merbivore .ace_support.ace_constant {color: #8DFF0A}.ace-merbivore .ace_constant.ace_numeric {color: #58C554}.ace-merbivore .ace_invalid {color: #FFFFFF;background-color: #990000}.ace-merbivore .ace_fold {background-color: #FC6F09;border-color: #E6E1DC}.ace-merbivore .ace_comment {font-style: italic;color: #AD2EA4}.ace-merbivore .ace_entity.ace_other.ace_attribute-name {color: #FFFF89}.ace-merbivore .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-merbivore_soft.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/merbivore_soft",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-merbivore-soft",t.cssText=".ace-merbivore-soft .ace_gutter {background: #262424;color: #E6E1DC}.ace-merbivore-soft .ace_print-margin {width: 1px;background: #262424}.ace-merbivore-soft {background-color: #1C1C1C;color: #E6E1DC}.ace-merbivore-soft .ace_cursor {color: #FFFFFF}.ace-merbivore-soft .ace_marker-layer .ace_selection {background: #494949}.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1C1C1C;border-radius: 2px}.ace-merbivore-soft .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore-soft .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore-soft .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore-soft .ace_gutter-active-line {background-color: #333435}.ace-merbivore-soft .ace_marker-layer .ace_selected-word {border: 1px solid #494949}.ace-merbivore-soft .ace_invisible {color: #404040}.ace-merbivore-soft .ace_entity.ace_name.ace_tag,.ace-merbivore-soft .ace_keyword,.ace-merbivore-soft .ace_meta,.ace-merbivore-soft .ace_meta.ace_tag,.ace-merbivore-soft .ace_storage {color: #FC803A}.ace-merbivore-soft .ace_constant,.ace-merbivore-soft .ace_constant.ace_character,.ace-merbivore-soft .ace_constant.ace_character.ace_escape,.ace-merbivore-soft .ace_constant.ace_other,.ace-merbivore-soft .ace_support.ace_type {color: #68C1D8}.ace-merbivore-soft .ace_constant.ace_character.ace_escape {color: #B3E5B4}.ace-merbivore-soft .ace_constant.ace_language {color: #E1C582}.ace-merbivore-soft .ace_constant.ace_library,.ace-merbivore-soft .ace_string,.ace-merbivore-soft .ace_support.ace_constant {color: #8EC65F}.ace-merbivore-soft .ace_constant.ace_numeric {color: #7FC578}.ace-merbivore-soft .ace_invalid,.ace-merbivore-soft .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #FE3838}.ace-merbivore-soft .ace_fold {background-color: #FC803A;border-color: #E6E1DC}.ace-merbivore-soft .ace_comment,.ace-merbivore-soft .ace_meta {font-style: italic;color: #AC4BB8}.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {color: #EAF1A3}.ace-merbivore-soft .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-mono_industrial.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/mono_industrial",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-mono-industrial",t.cssText=".ace-mono-industrial .ace_gutter {background: #1d2521;color: #C5C9C9}.ace-mono-industrial .ace_print-margin {width: 1px;background: #555651}.ace-mono-industrial {background-color: #222C28;color: #FFFFFF}.ace-mono-industrial .ace_cursor {color: #FFFFFF}.ace-mono-industrial .ace_marker-layer .ace_selection {background: rgba(145, 153, 148, 0.40)}.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #222C28;border-radius: 2px}.ace-mono-industrial .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-mono-industrial .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_marker-layer .ace_active-line {background: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_gutter-active-line {background-color: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_marker-layer .ace_selected-word {border: 1px solid rgba(145, 153, 148, 0.40)}.ace-mono-industrial .ace_invisible {color: rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_string {background-color: #151C19;color: #FFFFFF}.ace-mono-industrial .ace_keyword,.ace-mono-industrial .ace_meta {color: #A39E64}.ace-mono-industrial .ace_constant,.ace-mono-industrial .ace_constant.ace_character,.ace-mono-industrial .ace_constant.ace_character.ace_escape,.ace-mono-industrial .ace_constant.ace_numeric,.ace-mono-industrial .ace_constant.ace_other {color: #E98800}.ace-mono-industrial .ace_entity.ace_name.ace_function,.ace-mono-industrial .ace_keyword.ace_operator,.ace-mono-industrial .ace_variable {color: #A8B3AB}.ace-mono-industrial .ace_invalid {color: #FFFFFF;background-color: rgba(153, 0, 0, 0.68)}.ace-mono-industrial .ace_support.ace_constant {color: #C87500}.ace-mono-industrial .ace_fold {background-color: #A8B3AB;border-color: #FFFFFF}.ace-mono-industrial .ace_support.ace_function {color: #588E60}.ace-mono-industrial .ace_entity.ace_name,.ace-mono-industrial .ace_support.ace_class,.ace-mono-industrial .ace_support.ace_type {color: #5778B6}.ace-mono-industrial .ace_storage {color: #C23B00}.ace-mono-industrial .ace_variable.ace_language,.ace-mono-industrial .ace_variable.ace_parameter {color: #648BD2}.ace-mono-industrial .ace_comment {color: #666C68;background-color: #151C19}.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {color: #909993}.ace-mono-industrial .ace_entity.ace_name.ace_tag {color: #A65EFF}.ace-mono-industrial .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-monokai.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;border-radius: 2px}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-pastel_on_dark.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/pastel_on_dark",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-pastel-on-dark",t.cssText=".ace-pastel-on-dark .ace_gutter {background: #353030;color: #8F938F}.ace-pastel-on-dark .ace_print-margin {width: 1px;background: #353030}.ace-pastel-on-dark {background-color: #2C2828;color: #8F938F}.ace-pastel-on-dark .ace_cursor {color: #A7A7A7}.ace-pastel-on-dark .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2C2828;border-radius: 2px}.ace-pastel-on-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-pastel-on-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_keyword,.ace-pastel-on-dark .ace_meta {color: #757aD8}.ace-pastel-on-dark .ace_constant,.ace-pastel-on-dark .ace_constant.ace_character,.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,.ace-pastel-on-dark .ace_constant.ace_other {color: #4FB7C5}.ace-pastel-on-dark .ace_keyword.ace_operator {color: #797878}.ace-pastel-on-dark .ace_constant.ace_character {color: #AFA472}.ace-pastel-on-dark .ace_constant.ace_language {color: #DE8E30}.ace-pastel-on-dark .ace_constant.ace_numeric {color: #CCCCCC}.ace-pastel-on-dark .ace_invalid,.ace-pastel-on-dark .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-pastel-on-dark .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-pastel-on-dark .ace_fold {background-color: #757aD8;border-color: #8F938F}.ace-pastel-on-dark .ace_support.ace_function {color: #AEB2F8}.ace-pastel-on-dark .ace_string {color: #66A968}.ace-pastel-on-dark .ace_string.ace_regexp {color: #E9C062}.ace-pastel-on-dark .ace_comment {color: #A6C6FF}.ace-pastel-on-dark .ace_variable {color: #BEBF55}.ace-pastel-on-dark .ace_variable.ace_language {color: #C1C144}.ace-pastel-on-dark .ace_xml-pe {color: #494949}.ace-pastel-on-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-solarized_dark.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/solarized_dark",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-solarized-dark",t.cssText=".ace-solarized-dark .ace_gutter {background: #01313f;color: #d0edf7}.ace-solarized-dark .ace_print-margin {width: 1px;background: #33555E}.ace-solarized-dark {background-color: #002B36;color: #93A1A1}.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,.ace-solarized-dark .ace_storage {color: #93A1A1}.ace-solarized-dark .ace_cursor,.ace-solarized-dark .ace_string.ace_regexp {color: #D30102}.ace-solarized-dark .ace_marker-layer .ace_active-line,.ace-solarized-dark .ace_marker-layer .ace_selection {background: rgba(255, 255, 255, 0.1)}.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002B36;border-radius: 2px}.ace-solarized-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-solarized-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_gutter-active-line {background-color: #0d3440}.ace-solarized-dark .ace_marker-layer .ace_selected-word {border: 1px solid #073642}.ace-solarized-dark .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_keyword,.ace-solarized-dark .ace_meta,.ace-solarized-dark .ace_support.ace_class,.ace-solarized-dark .ace_support.ace_type {color: #859900}.ace-solarized-dark .ace_constant.ace_character,.ace-solarized-dark .ace_constant.ace_other {color: #CB4B16}.ace-solarized-dark .ace_constant.ace_language {color: #B58900}.ace-solarized-dark .ace_constant.ace_numeric {color: #D33682}.ace-solarized-dark .ace_fold {background-color: #268BD2;border-color: #93A1A1}.ace-solarized-dark .ace_entity.ace_name.ace_function,.ace-solarized-dark .ace_entity.ace_name.ace_tag,.ace-solarized-dark .ace_support.ace_function,.ace-solarized-dark .ace_variable,.ace-solarized-dark .ace_variable.ace_language {color: #268BD2}.ace-solarized-dark .ace_string {color: #2AA198}.ace-solarized-dark .ace_comment {font-style: italic;color: #657B83}.ace-solarized-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-solarized_light.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/solarized_light",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-solarized-light",t.cssText=".ace-solarized-light .ace_gutter {background: #fbf1d3;color: #333}.ace-solarized-light .ace_print-margin {width: 1px;background: #e8e8e8}.ace-solarized-light {background-color: #FDF6E3;color: #586E75}.ace-solarized-light .ace_cursor {color: #000000}.ace-solarized-light .ace_marker-layer .ace_selection {background: rgba(7, 54, 67, 0.09)}.ace-solarized-light.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FDF6E3;border-radius: 2px}.ace-solarized-light .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-solarized-light .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_marker-layer .ace_active-line {background: #EEE8D5}.ace-solarized-light .ace_gutter-active-line {background-color : #EDE5C1}.ace-solarized-light .ace_marker-layer .ace_selected-word {border: 1px solid #073642}.ace-solarized-light .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_keyword,.ace-solarized-light .ace_meta,.ace-solarized-light .ace_support.ace_class,.ace-solarized-light .ace_support.ace_type {color: #859900}.ace-solarized-light .ace_constant.ace_character,.ace-solarized-light .ace_constant.ace_other {color: #CB4B16}.ace-solarized-light .ace_constant.ace_language {color: #B58900}.ace-solarized-light .ace_constant.ace_numeric {color: #D33682}.ace-solarized-light .ace_fold {background-color: #268BD2;border-color: #586E75}.ace-solarized-light .ace_entity.ace_name.ace_function,.ace-solarized-light .ace_entity.ace_name.ace_tag,.ace-solarized-light .ace_support.ace_function,.ace-solarized-light .ace_variable,.ace-solarized-light .ace_variable.ace_language {color: #268BD2}.ace-solarized-light .ace_storage {color: #073642}.ace-solarized-light .ace_string {color: #2AA198}.ace-solarized-light .ace_string.ace_regexp {color: #D30102}.ace-solarized-light .ace_comment,.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {color: #93A1A1}.ace-solarized-light .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-terminal.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/terminal",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-terminal-theme",t.cssText=".ace-terminal-theme .ace_gutter {background: #1a0005;color: steelblue}.ace-terminal-theme .ace_print-margin {width: 1px;background: #1a1a1a}.ace-terminal-theme {background-color: black;color: #DEDEDE}.ace-terminal-theme .ace_cursor {color: #9F9F9F}.ace-terminal-theme .ace_marker-layer .ace_selection {background: #424242}.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px black;border-radius: 2px}.ace-terminal-theme .ace_marker-layer .ace_step {background: rgb(0, 0, 0)}.ace-terminal-theme .ace_marker-layer .ace_bracket {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-start {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {margin: -1px 0 0 -1px;border: 1px solid #900}.ace-terminal-theme .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-terminal-theme .ace_gutter-active-line {background-color: #2A112A}.ace-terminal-theme .ace_marker-layer .ace_selected-word {border: 1px solid #424242}.ace-terminal-theme .ace_invisible {color: #343434}.ace-terminal-theme .ace_keyword,.ace-terminal-theme .ace_meta,.ace-terminal-theme .ace_storage,.ace-terminal-theme .ace_storage.ace_type,.ace-terminal-theme .ace_support.ace_type {color: tomato}.ace-terminal-theme .ace_keyword.ace_operator {color: deeppink}.ace-terminal-theme .ace_constant.ace_character,.ace-terminal-theme .ace_constant.ace_language,.ace-terminal-theme .ace_constant.ace_numeric,.ace-terminal-theme .ace_keyword.ace_other.ace_unit,.ace-terminal-theme .ace_support.ace_constant,.ace-terminal-theme .ace_variable.ace_parameter {color: #E78C45}.ace-terminal-theme .ace_constant.ace_other {color: gold}.ace-terminal-theme .ace_invalid {color: yellow;background-color: red}.ace-terminal-theme .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-terminal-theme .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-terminal-theme .ace_entity.ace_name.ace_function,.ace-terminal-theme .ace_support.ace_function,.ace-terminal-theme .ace_variable {color: #7AA6DA}.ace-terminal-theme .ace_support.ace_class,.ace-terminal-theme .ace_support.ace_type {color: #E7C547}.ace-terminal-theme .ace_heading,.ace-terminal-theme .ace_string {color: #B9CA4A}.ace-terminal-theme .ace_entity.ace_name.ace_tag,.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,.ace-terminal-theme .ace_meta.ace_tag,.ace-terminal-theme .ace_string.ace_regexp,.ace-terminal-theme .ace_variable {color: #D54E53}.ace-terminal-theme .ace_comment {color: orangered}.ace-terminal-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-textmate.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-tomorrow.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/tomorrow",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-tomorrow",t.cssText=".ace-tomorrow .ace_gutter {background: #f6f6f6;color: #4D4D4C}.ace-tomorrow .ace_print-margin {width: 1px;background: #f6f6f6}.ace-tomorrow {background-color: #FFFFFF;color: #4D4D4C}.ace-tomorrow .ace_cursor {color: #AEAFAD}.ace-tomorrow .ace_marker-layer .ace_selection {background: #D6D6D6}.ace-tomorrow.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;border-radius: 2px}.ace-tomorrow .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-tomorrow .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #D1D1D1}.ace-tomorrow .ace_marker-layer .ace_active-line {background: #EFEFEF}.ace-tomorrow .ace_gutter-active-line {background-color : #dcdcdc}.ace-tomorrow .ace_marker-layer .ace_selected-word {border: 1px solid #D6D6D6}.ace-tomorrow .ace_invisible {color: #D1D1D1}.ace-tomorrow .ace_keyword,.ace-tomorrow .ace_meta,.ace-tomorrow .ace_storage,.ace-tomorrow .ace_storage.ace_type,.ace-tomorrow .ace_support.ace_type {color: #8959A8}.ace-tomorrow .ace_keyword.ace_operator {color: #3E999F}.ace-tomorrow .ace_constant.ace_character,.ace-tomorrow .ace_constant.ace_language,.ace-tomorrow .ace_constant.ace_numeric,.ace-tomorrow .ace_keyword.ace_other.ace_unit,.ace-tomorrow .ace_support.ace_constant,.ace-tomorrow .ace_variable.ace_parameter {color: #F5871F}.ace-tomorrow .ace_constant.ace_other {color: #666969}.ace-tomorrow .ace_invalid {color: #FFFFFF;background-color: #C82829}.ace-tomorrow .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #8959A8}.ace-tomorrow .ace_fold {background-color: #4271AE;border-color: #4D4D4C}.ace-tomorrow .ace_entity.ace_name.ace_function,.ace-tomorrow .ace_support.ace_function,.ace-tomorrow .ace_variable {color: #4271AE}.ace-tomorrow .ace_support.ace_class,.ace-tomorrow .ace_support.ace_type {color: #C99E00}.ace-tomorrow .ace_heading,.ace-tomorrow .ace_markup.ace_heading,.ace-tomorrow .ace_string {color: #718C00}.ace-tomorrow .ace_entity.ace_name.ace_tag,.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow .ace_meta.ace_tag,.ace-tomorrow .ace_string.ace_regexp,.ace-tomorrow .ace_variable {color: #C82829}.ace-tomorrow .ace_comment {color: #8E908C}.ace-tomorrow .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-tomorrow_night.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-tomorrow-night",t.cssText=".ace-tomorrow-night .ace_gutter {background: #25282c;color: #C5C8C6}.ace-tomorrow-night .ace_print-margin {width: 1px;background: #25282c}.ace-tomorrow-night {background-color: #1D1F21;color: #C5C8C6}.ace-tomorrow-night .ace_cursor {color: #AEAFAD}.ace-tomorrow-night .ace_marker-layer .ace_selection {background: #373B41}.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1D1F21;border-radius: 2px}.ace-tomorrow-night .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #4B4E55}.ace-tomorrow-night .ace_marker-layer .ace_active-line {background: #282A2E}.ace-tomorrow-night .ace_gutter-active-line {background-color: #282A2E}.ace-tomorrow-night .ace_marker-layer .ace_selected-word {border: 1px solid #373B41}.ace-tomorrow-night .ace_invisible {color: #4B4E55}.ace-tomorrow-night .ace_keyword,.ace-tomorrow-night .ace_meta,.ace-tomorrow-night .ace_storage,.ace-tomorrow-night .ace_storage.ace_type,.ace-tomorrow-night .ace_support.ace_type {color: #B294BB}.ace-tomorrow-night .ace_keyword.ace_operator {color: #8ABEB7}.ace-tomorrow-night .ace_constant.ace_character,.ace-tomorrow-night .ace_constant.ace_language,.ace-tomorrow-night .ace_constant.ace_numeric,.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night .ace_support.ace_constant,.ace-tomorrow-night .ace_variable.ace_parameter {color: #DE935F}.ace-tomorrow-night .ace_constant.ace_other {color: #CED1CF}.ace-tomorrow-night .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night .ace_fold {background-color: #81A2BE;border-color: #C5C8C6}.ace-tomorrow-night .ace_entity.ace_name.ace_function,.ace-tomorrow-night .ace_support.ace_function,.ace-tomorrow-night .ace_variable {color: #81A2BE}.ace-tomorrow-night .ace_support.ace_class,.ace-tomorrow-night .ace_support.ace_type {color: #F0C674}.ace-tomorrow-night .ace_heading,.ace-tomorrow-night .ace_markup.ace_heading,.ace-tomorrow-night .ace_string {color: #B5BD68}.ace-tomorrow-night .ace_entity.ace_name.ace_tag,.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night .ace_meta.ace_tag,.ace-tomorrow-night .ace_string.ace_regexp,.ace-tomorrow-night .ace_variable {color: #CC6666}.ace-tomorrow-night .ace_comment {color: #969896}.ace-tomorrow-night .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-tomorrow_night_blue.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/tomorrow_night_blue",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-tomorrow-night-blue",t.cssText=".ace-tomorrow-night-blue .ace_gutter {background: #00204b;color: #7388b5}.ace-tomorrow-night-blue .ace_print-margin {width: 1px;background: #00204b}.ace-tomorrow-night-blue {background-color: #002451;color: #FFFFFF}.ace-tomorrow-night-blue .ace_constant.ace_other,.ace-tomorrow-night-blue .ace_cursor {color: #FFFFFF}.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {background: #003F8E}.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002451;border-radius: 2px}.ace-tomorrow-night-blue .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404F7D}.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {background: #00346E}.ace-tomorrow-night-blue .ace_gutter-active-line {background-color: #022040}.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {border: 1px solid #003F8E}.ace-tomorrow-night-blue .ace_invisible {color: #404F7D}.ace-tomorrow-night-blue .ace_keyword,.ace-tomorrow-night-blue .ace_meta,.ace-tomorrow-night-blue .ace_storage,.ace-tomorrow-night-blue .ace_storage.ace_type,.ace-tomorrow-night-blue .ace_support.ace_type {color: #EBBBFF}.ace-tomorrow-night-blue .ace_keyword.ace_operator {color: #99FFFF}.ace-tomorrow-night-blue .ace_constant.ace_character,.ace-tomorrow-night-blue .ace_constant.ace_language,.ace-tomorrow-night-blue .ace_constant.ace_numeric,.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-blue .ace_support.ace_constant,.ace-tomorrow-night-blue .ace_variable.ace_parameter {color: #FFC58F}.ace-tomorrow-night-blue .ace_invalid {color: #FFFFFF;background-color: #F99DA5}.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #EBBBFF}.ace-tomorrow-night-blue .ace_fold {background-color: #BBDAFF;border-color: #FFFFFF}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,.ace-tomorrow-night-blue .ace_support.ace_function,.ace-tomorrow-night-blue .ace_variable {color: #BBDAFF}.ace-tomorrow-night-blue .ace_support.ace_class,.ace-tomorrow-night-blue .ace_support.ace_type {color: #FFEEAD}.ace-tomorrow-night-blue .ace_heading,.ace-tomorrow-night-blue .ace_markup.ace_heading,.ace-tomorrow-night-blue .ace_string {color: #D1F1A9}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-blue .ace_meta.ace_tag,.ace-tomorrow-night-blue .ace_string.ace_regexp,.ace-tomorrow-night-blue .ace_variable {color: #FF9DA4}.ace-tomorrow-night-blue .ace_comment {color: #7285B7}.ace-tomorrow-night-blue .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-tomorrow_night_bright.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/tomorrow_night_bright",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-tomorrow-night-bright",t.cssText=".ace-tomorrow-night-bright .ace_gutter {background: #1a1a1a;color: #DEDEDE}.ace-tomorrow-night-bright .ace_print-margin {width: 1px;background: #1a1a1a}.ace-tomorrow-night-bright {background-color: #000000;color: #DEDEDE}.ace-tomorrow-night-bright .ace_cursor {color: #9F9F9F}.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {background: #424242}.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #000000;border-radius: 2px}.ace-tomorrow-night-bright .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #888888}.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {border: 1px solid rgb(110, 119, 0);border-bottom: 0;box-shadow: inset 0 -1px rgb(110, 119, 0);margin: -1px 0 0 -1px;background: rgba(255, 235, 0, 0.1);}.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-tomorrow-night-bright .ace_gutter-active-line {background-color: #2A2A2A}.ace-tomorrow-night-bright .ace_stack {background-color: rgb(66, 90, 44)}.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {border: 1px solid #888888}.ace-tomorrow-night-bright .ace_invisible {color: #343434}.ace-tomorrow-night-bright .ace_keyword,.ace-tomorrow-night-bright .ace_meta,.ace-tomorrow-night-bright .ace_storage,.ace-tomorrow-night-bright .ace_storage.ace_type,.ace-tomorrow-night-bright .ace_support.ace_type {color: #C397D8}.ace-tomorrow-night-bright .ace_keyword.ace_operator {color: #70C0B1}.ace-tomorrow-night-bright .ace_constant.ace_character,.ace-tomorrow-night-bright .ace_constant.ace_language,.ace-tomorrow-night-bright .ace_constant.ace_numeric,.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-bright .ace_support.ace_constant,.ace-tomorrow-night-bright .ace_variable.ace_parameter {color: #E78C45}.ace-tomorrow-night-bright .ace_constant.ace_other {color: #EEEEEE}.ace-tomorrow-night-bright .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night-bright .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,.ace-tomorrow-night-bright .ace_support.ace_function,.ace-tomorrow-night-bright .ace_variable {color: #7AA6DA}.ace-tomorrow-night-bright .ace_support.ace_class,.ace-tomorrow-night-bright .ace_support.ace_type {color: #E7C547}.ace-tomorrow-night-bright .ace_heading,.ace-tomorrow-night-bright .ace_markup.ace_heading,.ace-tomorrow-night-bright .ace_string {color: #B9CA4A}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-bright .ace_meta.ace_tag,.ace-tomorrow-night-bright .ace_string.ace_regexp,.ace-tomorrow-night-bright .ace_variable {color: #D54E53}.ace-tomorrow-night-bright .ace_comment {color: #969896}.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {color: #C2C280;}.ace-tomorrow-night-bright .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-tomorrow_night_eighties.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/tomorrow_night_eighties",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-tomorrow-night-eighties",t.cssText=".ace-tomorrow-night-eighties .ace_gutter {background: #272727;color: #CCC}.ace-tomorrow-night-eighties .ace_print-margin {width: 1px;background: #272727}.ace-tomorrow-night-eighties {background-color: #2D2D2D;color: #CCCCCC}.ace-tomorrow-night-eighties .ace_constant.ace_other,.ace-tomorrow-night-eighties .ace_cursor {color: #CCCCCC}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {background: #515151}.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2D2D2D;border-radius: 2px}.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #6A6A6A}.ace-tomorrow-night-bright .ace_stack {background: rgb(66, 90, 44)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {background: #393939}.ace-tomorrow-night-eighties .ace_gutter-active-line {background-color: #393939}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {border: 1px solid #515151}.ace-tomorrow-night-eighties .ace_invisible {color: #6A6A6A}.ace-tomorrow-night-eighties .ace_keyword,.ace-tomorrow-night-eighties .ace_meta,.ace-tomorrow-night-eighties .ace_storage,.ace-tomorrow-night-eighties .ace_storage.ace_type,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #CC99CC}.ace-tomorrow-night-eighties .ace_keyword.ace_operator {color: #66CCCC}.ace-tomorrow-night-eighties .ace_constant.ace_character,.ace-tomorrow-night-eighties .ace_constant.ace_language,.ace-tomorrow-night-eighties .ace_constant.ace_numeric,.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-eighties .ace_support.ace_constant,.ace-tomorrow-night-eighties .ace_variable.ace_parameter {color: #F99157}.ace-tomorrow-night-eighties .ace_invalid {color: #CDCDCD;background-color: #F2777A}.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {color: #CDCDCD;background-color: #CC99CC}.ace-tomorrow-night-eighties .ace_fold {background-color: #6699CC;border-color: #CCCCCC}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,.ace-tomorrow-night-eighties .ace_support.ace_function,.ace-tomorrow-night-eighties .ace_variable {color: #6699CC}.ace-tomorrow-night-eighties .ace_support.ace_class,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #FFCC66}.ace-tomorrow-night-eighties .ace_heading,.ace-tomorrow-night-eighties .ace_markup.ace_heading,.ace-tomorrow-night-eighties .ace_string {color: #99CC99}.ace-tomorrow-night-eighties .ace_comment {color: #999999}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-eighties .ace_meta.ace_tag,.ace-tomorrow-night-eighties .ace_variable {color: #F2777A}.ace-tomorrow-night-eighties .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-twilight.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/twilight",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-twilight",t.cssText=".ace-twilight .ace_gutter {background: #232323;color: #E2E2E2}.ace-twilight .ace_print-margin {width: 1px;background: #232323}.ace-twilight {background-color: #141414;color: #F8F8F8}.ace-twilight .ace_cursor {color: #A7A7A7}.ace-twilight .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-twilight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;border-radius: 2px}.ace-twilight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-twilight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-twilight .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-twilight .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-twilight .ace_keyword,.ace-twilight .ace_meta {color: #CDA869}.ace-twilight .ace_constant,.ace-twilight .ace_constant.ace_character,.ace-twilight .ace_constant.ace_character.ace_escape,.ace-twilight .ace_constant.ace_other,.ace-twilight .ace_heading,.ace-twilight .ace_markup.ace_heading,.ace-twilight .ace_support.ace_constant {color: #CF6A4C}.ace-twilight .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-twilight .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-twilight .ace_support {color: #9B859D}.ace-twilight .ace_fold {background-color: #AC885B;border-color: #F8F8F8}.ace-twilight .ace_support.ace_function {color: #DAD085}.ace-twilight .ace_list,.ace-twilight .ace_markup.ace_list,.ace-twilight .ace_storage {color: #F9EE98}.ace-twilight .ace_entity.ace_name.ace_function,.ace-twilight .ace_meta.ace_tag,.ace-twilight .ace_variable {color: #AC885B}.ace-twilight .ace_string {color: #8F9D6A}.ace-twilight .ace_string.ace_regexp {color: #E9C062}.ace-twilight .ace_comment {font-style: italic;color: #5F5A60}.ace-twilight .ace_variable {color: #7587A6}.ace-twilight .ace_xml-pe {color: #494949}.ace-twilight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-vibrant_ink.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/vibrant_ink",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-vibrant-ink",t.cssText=".ace-vibrant-ink .ace_gutter {background: #1a1a1a;color: #BEBEBE}.ace-vibrant-ink .ace_print-margin {width: 1px;background: #1a1a1a}.ace-vibrant-ink {background-color: #0F0F0F;color: #FFFFFF}.ace-vibrant-ink .ace_cursor {color: #FFFFFF}.ace-vibrant-ink .ace_marker-layer .ace_selection {background: #6699CC}.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0F0F0F;border-radius: 2px}.ace-vibrant-ink .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-vibrant-ink .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-vibrant-ink .ace_marker-layer .ace_active-line {background: #333333}.ace-vibrant-ink .ace_gutter-active-line {background-color: #333333}.ace-vibrant-ink .ace_marker-layer .ace_selected-word {border: 1px solid #6699CC}.ace-vibrant-ink .ace_invisible {color: #404040}.ace-vibrant-ink .ace_keyword,.ace-vibrant-ink .ace_meta {color: #FF6600}.ace-vibrant-ink .ace_constant,.ace-vibrant-ink .ace_constant.ace_character,.ace-vibrant-ink .ace_constant.ace_character.ace_escape,.ace-vibrant-ink .ace_constant.ace_other {color: #339999}.ace-vibrant-ink .ace_constant.ace_numeric {color: #99CC99}.ace-vibrant-ink .ace_invalid,.ace-vibrant-ink .ace_invalid.ace_deprecated {color: #CCFF33;background-color: #000000}.ace-vibrant-ink .ace_fold {background-color: #FFCC00;border-color: #FFFFFF}.ace-vibrant-ink .ace_entity.ace_name.ace_function,.ace-vibrant-ink .ace_support.ace_function,.ace-vibrant-ink .ace_variable {color: #FFCC00}.ace-vibrant-ink .ace_variable.ace_parameter {font-style: italic}.ace-vibrant-ink .ace_string {color: #66FF00}.ace-vibrant-ink .ace_string.ace_regexp {color: #44B4CC}.ace-vibrant-ink .ace_comment {color: #9933CC}.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {font-style: italic;color: #99CC99}.ace-vibrant-ink .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ace/theme-xcode.js DELETED
@@ -1 +0,0 @@
1
- ace.define("ace/theme/xcode",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-xcode",t.cssText=".ace-xcode .ace_gutter,/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: EE3AD170-2B7F-4DE1-B724-C75F13FE0085) */.ace-xcode .ace_gutter {background: #e8e8e8;color: #333}.ace-xcode .ace_print-margin {width: 1px;background: #e8e8e8}.ace-xcode {background-color: #FFFFFF;color: #000000}.ace-xcode .ace_cursor {color: #000000}.ace-xcode .ace_marker-layer .ace_selection {background: #B5D5FF}.ace-xcode.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;border-radius: 2px}.ace-xcode .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-xcode .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-xcode .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_marker-layer .ace_selected-word {border: 1px solid #B5D5FF}.ace-xcode .ace_constant.ace_language,.ace-xcode .ace_keyword,.ace-xcode .ace_meta,.ace-xcode .ace_variable.ace_language {color: #C800A4}.ace-xcode .ace_invisible {color: #BFBFBF}.ace-xcode .ace_constant.ace_character,.ace-xcode .ace_constant.ace_other {color: #275A5E}.ace-xcode .ace_constant.ace_numeric {color: #3A00DC}.ace-xcode .ace_entity.ace_other.ace_attribute-name,.ace-xcode .ace_support.ace_constant,.ace-xcode .ace_support.ace_function {color: #450084}.ace-xcode .ace_fold {background-color: #C800A4;border-color: #000000}.ace-xcode .ace_entity.ace_name.ace_tag,.ace-xcode .ace_support.ace_class,.ace-xcode .ace_support.ace_type {color: #790EAD}.ace-xcode .ace_storage {color: #C900A4}.ace-xcode .ace_string {color: #DF0002}.ace-xcode .ace_comment {color: #008E00}.ace-xcode .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
 
framework/js/ajax/cjt-module-server/cjt-module-server.js ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @version $ Id; cjtserver.js 21-03-2012 03:22:10 Ahmed Said $
3
+ *
4
+ * CJT Ajax core class.
5
+ */
6
+
7
+ /*
8
+ * Put CJTServer class at global scope.
9
+ */
10
+ var CJTModuleServer;
11
+
12
+ /*
13
+ * JQuery wrapper for the CJTServer object.
14
+ */
15
+ (function($){
16
+
17
+ /**
18
+ * Module server prototype
19
+ *
20
+ * @param moduleName
21
+ */
22
+ CJTModuleServer = function(moduleName) {
23
+
24
+ /**
25
+ * put your comment there...
26
+ *
27
+ * @param moduleName
28
+ */
29
+ var $this = this;
30
+
31
+ /**
32
+ * put your comment there...
33
+ *
34
+ * @type Object
35
+ */
36
+ var CJTServer = window.top.CJTServer;
37
+
38
+ /**
39
+ *
40
+ */
41
+ this.moduleNameParamName = 'cjtajaxmodule';
42
+
43
+ /**
44
+ * put your comment there...
45
+ *
46
+ * @param data
47
+ */
48
+ var injectModuleName = function(data) {
49
+ // Copy data object
50
+ var newData = $.extend({}, data);
51
+ /// Inject Module
52
+ newData[$this.moduleNameParamName] = moduleName;
53
+ // Return new data
54
+ return newData;
55
+ };
56
+
57
+ /**
58
+ *
59
+ */
60
+ this.getRequestURL = function(controller, action, data) {
61
+ return CJTServer.getRequestURL(controller, action, injectModuleName(data));
62
+ };
63
+
64
+ /**
65
+ *
66
+ */
67
+ this.send = function(controller, action, data, requestMethod, returnType, inSettings) {
68
+ // Add module name to the request parameters
69
+
70
+ // Requesting CJT Service
71
+ return CJTServer.send(controller,
72
+ action,
73
+ injectModuleName(data),
74
+ requestMethod,
75
+ returnType,
76
+ inSettings);
77
+ };
78
+
79
+ };
80
+
81
+ })(jQuery);
framework/js/ajax/cjt-server/cjt-server.js CHANGED
@@ -55,6 +55,7 @@ var CJTServer;
55
  packages : 'packages',
56
  packageFile : 'package-file',
57
  'package' : 'package',
 
58
  },
59
 
60
  /*
@@ -141,12 +142,12 @@ var CJTServer;
141
  getRequestObject : function(controller, action, data) {
142
  var requestObject = {};
143
  var requestTime = new Date();
 
 
144
  // CJT Wordpress Ajax Access Point!
145
  var accessPoint = this.pageId + '_api';
146
  // Action & Controller parameter always in the URL -- not posted.
147
- var queryString = 'action=' + accessPoint +
148
- '&controller=' + CJTServer.controllers[controller] +
149
- '&CJTAjaxAction=' + action;
150
  var url = CJTServer.ajaxURL + '?' + queryString;
151
  // Prepare request object.
152
  var requestToken = {
55
  packages : 'packages',
56
  packageFile : 'package-file',
57
  'package' : 'package',
58
+ tools : 'tools'
59
  },
60
 
61
  /*
142
  getRequestObject : function(controller, action, data) {
143
  var requestObject = {};
144
  var requestTime = new Date();
145
+ // Stop controller name mapping!!!
146
+ controller = (CJTServer.controllers[controller] !== undefined) ? CJTServer.controllers[controller] : controller;
147
  // CJT Wordpress Ajax Access Point!
148
  var accessPoint = this.pageId + '_api';
149
  // Action & Controller parameter always in the URL -- not posted.
150
+ var queryString = 'action=' + accessPoint + '&controller=' + controller + '&CJTAjaxAction=' + action;
 
 
151
  var url = CJTServer.ajaxURL + '?' + queryString;
152
  // Prepare request object.
153
  var requestToken = {
framework/mvc/controller-ajax.inc.php CHANGED
@@ -92,6 +92,15 @@ abstract class CJTAjaxController extends CJTController {
92
  $this->httpCode = "403 Not Authorized";
93
  }
94
  else {
 
 
 
 
 
 
 
 
 
95
  // Dispatch action.
96
  $action = current_filter();
97
  // Get method name from frrom Wordpress action name!
92
  $this->httpCode = "403 Not Authorized";
93
  }
94
  else {
95
+ // Clear Wordpress scripts object when using AJAX
96
+ // This is to solve conflict caused by other Plugins
97
+ // That uses admin_init hook to enqueue their scripts
98
+ // Ajax request here is only for CJT no other Plugin
99
+ // should involve any scripts with CJT
100
+ // Remove all scritps enqueued before CJT Ajax Controller (this) received
101
+ // the controller!
102
+ global $wp_scripts;
103
+ $wp_scripts = new WP_Scripts();
104
  // Dispatch action.
105
  $action = current_filter();
106
  // Get method name from frrom Wordpress action name!
framework/mvc/controller.inc.php CHANGED
@@ -98,9 +98,14 @@ abstract class CJTController extends CJTHookableClass {
98
  *
99
  * @param mixed $hasView
100
  * @param mixed $request
 
 
101
  * @return CJTController
102
  */
103
- public function __construct($hasView = null, $request = null) {
 
 
 
104
  // Initialize hookable!
105
  parent::__construct();
106
  // Read request parameters.
@@ -111,7 +116,11 @@ abstract class CJTController extends CJTHookableClass {
111
  if (!isset($this->controllerInfo['model_file'])) {
112
  $this->controllerInfo['model_file'] = null;
113
  }
114
- $this->model = CJTModel::create($this->controllerInfo['model'], $this->request, $this->controllerInfo['model_file']);
 
 
 
 
115
  }
116
  // Create default view.
117
  if ($hasView === null) { // Default value for $hasView = true
@@ -120,7 +129,10 @@ abstract class CJTController extends CJTHookableClass {
120
  (isset($this->controllerInfo['view']) ? $this->controllerInfo['view'] : null)
121
  );
122
  if ($view) {
123
- $this->view = self::getView($view)
 
 
 
124
  // Push data into view.
125
  ->setModel($this->model)
126
  ->setRequest($this->request);
@@ -151,20 +163,25 @@ abstract class CJTController extends CJTHookableClass {
151
  /**
152
  * put your comment there...
153
  *
154
- * @deprecated Use CJTController::getInstance() instead!
155
- *
156
  * @param mixed $name
 
157
  * @param mixed $request
 
 
158
  */
159
- public static function create($name, $hasView = null, $request = null) {
 
 
 
 
160
  // Import controller file.
161
- $pathToControllers = CJTOOLBOX_CONTROLLERS_PATH;
162
  $controllerFile = "{$pathToControllers}/{$name}.php";
163
  require_once self::trigger('CJTController.loadcontroller', $controllerFile, $name);
164
  // Get controller class name.
165
- $class = self::getClassName($name, 'Controller');
166
  // Instantiate controller class.
167
- return new $class($hasView, $request);
168
  }
169
 
170
  /**
@@ -188,16 +205,21 @@ abstract class CJTController extends CJTHookableClass {
188
  $content = ob_get_clean();
189
  return $content;
190
  }
191
-
192
  /**
193
  * put your comment there...
194
  *
195
  * @param mixed $name
196
  * @param mixed $hasView
197
  * @param mixed $request
 
198
  */
199
- public static function getInstance($name, $hasView = null, $request = null) {
200
- return self::create($name, $hasView, $request);
 
 
 
 
201
  }
202
 
203
  /**
@@ -205,9 +227,13 @@ abstract class CJTController extends CJTHookableClass {
205
  *
206
  * @deprecated No longer used.
207
  */
208
- public static function getModel($name, $params = array(), $file = null) {
 
 
 
 
209
  $model = null;
210
- $pathToModels = CJTOOLBOX_MODELS_PATH;
211
  if (!$file) {
212
  $file = $name;
213
  }
@@ -215,7 +241,7 @@ abstract class CJTController extends CJTHookableClass {
215
  $modelFile = "{$pathToModels}/{$file}.php";
216
  require_once $modelFile;
217
  // Create model object.
218
- $modelClass = self::getClassName($name, 'Model');
219
  if (!class_exists($modelClass)) {
220
  throw new Exception("Model class {$modelClass} doesn't exists!!!");
221
  }
@@ -226,14 +252,19 @@ abstract class CJTController extends CJTHookableClass {
226
  /**
227
  * @deprecated No longer used.
228
  */
229
- public static function getClassName($name, $type) {
 
230
  $className = '';
 
 
 
 
231
  // Every word start with uppercase character.
232
  $sanitizedName = ucfirst(str_replace(array('-', '_'), ' ', "{$name} {$type}"));
233
  // Remove spaces.
234
  $sanitizedName = str_replace(' ', '', $sanitizedName);
235
  // Filter.
236
- $className = self::trigger('CJTController.getclassname', "CJT{$sanitizedName}", $name, $type);
237
  return $className;
238
  }
239
 
@@ -252,14 +283,17 @@ abstract class CJTController extends CJTHookableClass {
252
  *
253
  * @deprecated
254
  */
255
- public static function getView($path, $params = null) {
 
 
 
256
  $view = null;
257
  // Import view file.
258
- $viewInfo = self::getViewInfo($path);
259
  require_once $viewInfo['viewFile'];
260
  // Create view object.
261
  $name = str_replace(' ', '', ucwords(str_replace('/', ' ',$path)));
262
- $viewClass = self::getClassName($name, 'view');
263
  $view = new $viewClass($viewInfo, $params);
264
  return $view;
265
  }
@@ -268,16 +302,22 @@ abstract class CJTController extends CJTHookableClass {
268
  * put your comment there...
269
  *
270
  */
271
- public static function getViewInfo($path) {
 
 
 
 
272
  // Path to views dir.
273
- $pathToViews = CJTOOLBOX_VIEWS_PATH;
274
  // Get view name.
275
  $name = basename($path);
276
  // View info struct.
277
  $viewInfo = array(
278
  'name' => $path,
279
- 'url' => (CJTOOLBOX_VIEWS_URL . "/{$path}"),
280
  'path' => "{$pathToViews}/{$path}",
 
 
281
  'viewFile' => "{$pathToViews}/{$path}/view.php",
282
  );
283
  return $viewInfo;
98
  *
99
  * @param mixed $hasView
100
  * @param mixed $request
101
+ * @param mixed $overrideControllerPath
102
+ * @param mixed $overrideContollerPrefix
103
  * @return CJTController
104
  */
105
+ public function __construct($hasView = null,
106
+ $request = null,
107
+ $overrideControllerPath = null,
108
+ $overrideContollerPrefix = null) {
109
  // Initialize hookable!
110
  parent::__construct();
111
  // Read request parameters.
116
  if (!isset($this->controllerInfo['model_file'])) {
117
  $this->controllerInfo['model_file'] = null;
118
  }
119
+ $this->model = CJTModel::create($this->controllerInfo['model'],
120
+ $this->request,
121
+ $this->controllerInfo['model_file'],
122
+ dirname($overrideControllerPath),
123
+ $overrideContollerPrefix);
124
  }
125
  // Create default view.
126
  if ($hasView === null) { // Default value for $hasView = true
129
  (isset($this->controllerInfo['view']) ? $this->controllerInfo['view'] : null)
130
  );
131
  if ($view) {
132
+ $this->view = self::getView($view,
133
+ null,
134
+ dirname($overrideControllerPath),
135
+ $overrideContollerPrefix)
136
  // Push data into view.
137
  ->setModel($this->model)
138
  ->setRequest($this->request);
163
  /**
164
  * put your comment there...
165
  *
 
 
166
  * @param mixed $name
167
+ * @param mixed $hasView
168
  * @param mixed $request
169
+ * @param mixed $overrideControllersPath
170
+ * @param mixed $overrideControllersPrefix
171
  */
172
+ public static function create($name,
173
+ $hasView = null,
174
+ $request = null,
175
+ $overrideControllersPath = null,
176
+ $overrideControllersPrefix = null) {
177
  // Import controller file.
178
+ $pathToControllers = $overrideControllersPath ? $overrideControllersPath : CJTOOLBOX_CONTROLLERS_PATH;
179
  $controllerFile = "{$pathToControllers}/{$name}.php";
180
  require_once self::trigger('CJTController.loadcontroller', $controllerFile, $name);
181
  // Get controller class name.
182
+ $class = self::getClassName($name, 'Controller', $overrideControllersPrefix);
183
  // Instantiate controller class.
184
+ return new $class($hasView, $request, $overrideControllersPath, $overrideControllersPrefix);
185
  }
186
 
187
  /**
205
  $content = ob_get_clean();
206
  return $content;
207
  }
208
+
209
  /**
210
  * put your comment there...
211
  *
212
  * @param mixed $name
213
  * @param mixed $hasView
214
  * @param mixed $request
215
+ * @param mixed $overrideControllersPath
216
  */
217
+ public static function getInstance($name,
218
+ $hasView = null,
219
+ $request = null,
220
+ $overrideControllersPath = null,
221
+ $overrideControllersPrefix = null) {
222
+ return self::create($name, $hasView, $request, $overrideControllersPath, $overrideControllersPrefix);
223
  }
224
 
225
  /**
227
  *
228
  * @deprecated No longer used.
229
  */
230
+ public static function getModel($name,
231
+ $params = array(),
232
+ $file = null,
233
+ $overrideModelsPath = null,
234
+ $overrideModelsPrefix = null) {
235
  $model = null;
236
+ $pathToModels = $overrideModelsPath ? ($overrideModelsPath . DIRECTORY_SEPARATOR . 'models') : CJTOOLBOX_MODELS_PATH;
237
  if (!$file) {
238
  $file = $name;
239
  }
241
  $modelFile = "{$pathToModels}/{$file}.php";
242
  require_once $modelFile;
243
  // Create model object.
244
+ $modelClass = self::getClassName($name, 'Model', $overrideModelsPrefix);
245
  if (!class_exists($modelClass)) {
246
  throw new Exception("Model class {$modelClass} doesn't exists!!!");
247
  }
252
  /**
253
  * @deprecated No longer used.
254
  */
255
+ public static function getClassName($name, $type, $prefix = null) {
256
+ // Init vars
257
  $className = '';
258
+ // Getting default prefix
259
+ if (!$prefix) {
260
+ $prefix = 'CJT';
261
+ }
262
  // Every word start with uppercase character.
263
  $sanitizedName = ucfirst(str_replace(array('-', '_'), ' ', "{$name} {$type}"));
264
  // Remove spaces.
265
  $sanitizedName = str_replace(' ', '', $sanitizedName);
266
  // Filter.
267
+ $className = self::trigger('CJTController.getclassname', "{$prefix}{$sanitizedName}", $name, $type);
268
  return $className;
269
  }
270
 
283
  *
284
  * @deprecated
285
  */
286
+ public static function getView($path,
287
+ $params = null,
288
+ $overrideViewsPath = null,
289
+ $overrideViewsPrefix = null) {
290
  $view = null;
291
  // Import view file.
292
+ $viewInfo = self::getViewInfo($path, $overrideViewsPath, $overrideViewsPrefix);
293
  require_once $viewInfo['viewFile'];
294
  // Create view object.
295
  $name = str_replace(' ', '', ucwords(str_replace('/', ' ',$path)));
296
+ $viewClass = self::getClassName($name, 'view', $overrideViewsPrefix);
297
  $view = new $viewClass($viewInfo, $params);
298
  return $view;
299
  }
302
  * put your comment there...
303
  *
304
  */
305
+ public static function getViewInfo($path, $overrideViewsPath = null, $overrideViewsPrefix = null) {
306
+ // Plugin views Url
307
+ $viewsUrl = $overrideViewsPath ?
308
+ WP_PLUGIN_URL . '/' . basename(dirname($overrideViewsPath)) :
309
+ CJTOOLBOX_VIEWS_URL;
310
  // Path to views dir.
311
+ $pathToViews = $overrideViewsPath ? ($overrideViewsPath . DIRECTORY_SEPARATOR . 'views') : CJTOOLBOX_VIEWS_PATH;
312
  // Get view name.
313
  $name = basename($path);
314
  // View info struct.
315
  $viewInfo = array(
316
  'name' => $path,
317
+ 'url' => "{$viewsUrl}/{$path}",
318
  'path' => "{$pathToViews}/{$path}",
319
+ 'viewsPath' => $pathToViews,
320
+ 'viewsUrl' => $viewsUrl,
321
  'viewFile' => "{$pathToViews}/{$path}/view.php",
322
  );
323
  return $viewInfo;
framework/mvc/model.inc.php CHANGED
@@ -35,8 +35,12 @@ abstract class CJTModel {
35
  *
36
  * @deprecated Use CJTModel::getInstance.
37
  */
38
- public static function create($model, $params = array(), $file = null) {
39
- return self::getInstance($model, $params, $file);
 
 
 
 
40
  }
41
 
42
  /**
@@ -46,8 +50,12 @@ abstract class CJTModel {
46
  * @param mixed $params
47
  * @param mixed $file
48
  */
49
- public static function getInstance($model, $params = array(), $file = null) {
50
- return CJTController::getModel($model, $params, $file);
 
 
 
 
51
  }
52
 
53
  /**
35
  *
36
  * @deprecated Use CJTModel::getInstance.
37
  */
38
+ public static function create($model,
39
+ $params = array(),
40
+ $file = null,
41
+ $overrideModelsPath = null,
42
+ $overrideModelsPrefix = null) {
43
+ return self::getInstance($model, $params, $file, $overrideModelsPath, $overrideModelsPrefix);
44
  }
45
 
46
  /**
50
  * @param mixed $params
51
  * @param mixed $file
52
  */
53
+ public static function getInstance($model,
54
+ $params = array(),
55
+ $file = null,
56
+ $overrideModelsPath = null,
57
+ $overrideModelsPrefix = null) {
58
+ return CJTController::getModel($model, $params, $file, $overrideModelsPath, $overrideModelsPrefix);
59
  }
60
 
61
  /**
framework/mvc/view.inc.php CHANGED
@@ -203,7 +203,7 @@ abstract class CJTView extends CJTHookableClass {
203
  * @param mixed $destination
204
  */
205
  public function getPath($destination) {
206
- return self::getViewPath($this->viewInfo['name'], $destination);
207
  }
208
 
209
  /**
@@ -236,12 +236,12 @@ abstract class CJTView extends CJTHookableClass {
236
  }
237
  // filter parameters.
238
  $params = $this->ontemplateparameters($params, $name, $dir, $extension);
239
- // Get template content into variable.
240
- ob_start();
241
  // Push params into the local scope.
242
  extract($params);
243
  // Templates collected under the view/tmpl directory.
244
  $templateFile = $this->getPath("{$dir}/{$name}{$extension}");
 
 
245
  require $this->onimporttemplate($templateFile);
246
  $template = $this->onloadtemplate(ob_get_clean(), $name);
247
  return $template;
@@ -252,7 +252,7 @@ abstract class CJTView extends CJTHookableClass {
252
  *
253
  */
254
  public function getURI($destination) {
255
- return self::getViewURI($this->viewInfo['name'], $destination);
256
  }
257
 
258
  /**
@@ -261,8 +261,12 @@ abstract class CJTView extends CJTHookableClass {
261
  * @param mixed $view
262
  * @param mixed $destination
263
  */
264
- public static function getViewPath($view, $destination) {
265
- $viewPath = CJTOOLBOX_VIEWS_PATH . "/{$view}";
 
 
 
 
266
  $destination = $destination ? "/{$destination}" : '';
267
  return "{$viewPath}{$destination}";
268
  }
@@ -270,10 +274,15 @@ abstract class CJTView extends CJTHookableClass {
270
  /**
271
  * put your comment there...
272
  *
273
- * @param mixed $file
 
 
274
  */
275
- public static function getViewURI($view, $destination) {
276
- $viewURI = CJTOOLBOX_VIEWS_URL . "/{$view}/public";
 
 
 
277
  return "{$viewURI}/{$destination}";
278
  }
279
 
@@ -398,7 +407,6 @@ abstract class CJTView extends CJTHookableClass {
398
  // Plugin parts/components can use it to know how script file work.
399
  $stack[$name]->cjt = (object) $stack[$name]->cjt;
400
  }
401
-
402
  // If localization file exists localize JS.
403
  if (file_exists($localizationFile)) {
404
  // Get localization text array.
203
  * @param mixed $destination
204
  */
205
  public function getPath($destination) {
206
+ return self::getViewPath($this->viewInfo['name'], $destination, $this->viewInfo['viewsPath']);
207
  }
208
 
209
  /**
236
  }
237
  // filter parameters.
238
  $params = $this->ontemplateparameters($params, $name, $dir, $extension);
 
 
239
  // Push params into the local scope.
240
  extract($params);
241
  // Templates collected under the view/tmpl directory.
242
  $templateFile = $this->getPath("{$dir}/{$name}{$extension}");
243
+ // Get template content into variable.
244
+ ob_start();
245
  require $this->onimporttemplate($templateFile);
246
  $template = $this->onloadtemplate(ob_get_clean(), $name);
247
  return $template;
252
  *
253
  */
254
  public function getURI($destination) {
255
+ return self::getViewURI($this->viewInfo['name'], $destination, $this->viewInfo['viewsUrl']);
256
  }
257
 
258
  /**
261
  * @param mixed $view
262
  * @param mixed $destination
263
  */
264
+ public static function getViewPath($view, $destination, $overrideViewPath = null) {
265
+ # Use passed view path or use CJT constants if not passed
266
+ if (!$overrideViewPath) {
267
+ $overrideViewPath = CJTOOLBOX_VIEWS_PATH;
268
+ }
269
+ $viewPath = $overrideViewPath . DIRECTORY_SEPARATOR . $view;
270
  $destination = $destination ? "/{$destination}" : '';
271
  return "{$viewPath}{$destination}";
272
  }
274
  /**
275
  * put your comment there...
276
  *
277
+ * @param mixed $view
278
+ * @param mixed $destination
279
+ * @param mixed $overrideViewUrl
280
  */
281
+ public static function getViewURI($view, $destination, $overrideViewUrl = null) {
282
+ if (!$overrideViewUrl) {
283
+ $overrideViewUrl = CJTOOLBOX_VIEWS_URL;
284
+ }
285
+ $viewURI = "{$overrideViewUrl}/{$view}/public";
286
  return "{$viewURI}/{$destination}";
287
  }
288
 
407
  // Plugin parts/components can use it to know how script file work.
408
  $stack[$name]->cjt = (object) $stack[$name]->cjt;
409
  }
 
410
  // If localization file exists localize JS.
411
  if (file_exists($localizationFile)) {
412
  // Get localization text array.
framework/wordpress/feed.php CHANGED
@@ -50,9 +50,42 @@ class CJT_Framework_Wordpress_Feed {
50
  $this->fields = $fields;
51
  # Request server => get raw XML feed
52
  $feed = wp_remote_get("http://{$this->site}/{$this->path}");
53
- if (gettype($feed) !== 'WP_Error') {
54
- $this->feed = new SimpleXMLElement(wp_remote_retrieve_body($feed));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
 
 
56
  }
57
 
58
  /**
@@ -61,12 +94,17 @@ class CJT_Framework_Wordpress_Feed {
61
  * @param mixed $count
62
  */
63
  public function getLatestItems($count) {
64
- // Initialize.
65
  $items = array();
66
- // Read only items count specifed by $count param.
 
 
 
 
 
67
  for ($currentIndex = 0; $currentIndex < $count; $currentIndex++) {
68
  # Copy only title and link.
69
- $xmlItem = $this->feed->channel->item[$currentIndex];
70
  # Read fields.
71
  $item = array();
72
  foreach ($this->fields as $field) {
@@ -100,7 +138,7 @@ class CJT_Framework_Wordpress_Feed {
100
  *
101
  */
102
  public function isError() {
103
- return !$this->feed;
104
  }
105
 
106
  } // End class.
50
  $this->fields = $fields;
51
  # Request server => get raw XML feed
52
  $feed = wp_remote_get("http://{$this->site}/{$this->path}");
53
+ # Getting XML content
54
+ $xmlContent = ((gettype($feed) !== 'WP_Error') && ($feed['response']['code'] == 200)) ?
55
+ wp_remote_retrieve_body($feed) :
56
+ '<cjterrorrequest>
57
+ <channel cjt_error="true">
58
+ <item>
59
+ <title>ERROR</title>
60
+ <description>ERROR</description>
61
+ <link>http://css-javascript-toolbox.com/</link>
62
+ </item>
63
+ </channel>
64
+ </cjterrorrequest>';
65
+ # Creating feed
66
+ $this->feed = new SimpleXMLElement($xmlContent);
67
+ }
68
+
69
+ /**
70
+ * put your comment there...
71
+ *
72
+ */
73
+ public function getAllItems() {
74
+ // Initialize.
75
+ $items = array();
76
+ $xmlItems = $this->feed->channel->xpath('item');
77
+ // Read only items count specifed by $count param.
78
+ foreach ($xmlItems as $xmlItem) {
79
+ # Read fields.
80
+ $item = array();
81
+ foreach ($this->fields as $field) {
82
+ $item[$field] = (string) $xmlItem->$field;
83
+ }
84
+ # Add to list
85
+ $items[] = $item;
86
  }
87
+ # Return items.
88
+ return $items;
89
  }
90
 
91
  /**
94
  * @param mixed $count
95
  */
96
  public function getLatestItems($count) {
97
+ # Initialize.
98
  $items = array();
99
+ $xmlItems = $this->feed->channel->xpath('item');
100
+ # Get all available items if the total items count is less that what is originally requested
101
+ if (count($xmlItems) < $count) {
102
+ $count = count($xmlItems);
103
+ }
104
+ # Read only items count specifed by $count param.
105
  for ($currentIndex = 0; $currentIndex < $count; $currentIndex++) {
106
  # Copy only title and link.
107
+ $xmlItem = $xmlItems[$currentIndex];
108
  # Read fields.
109
  $item = array();
110
  foreach ($this->fields as $field) {
138
  *
139
  */
140
  public function isError() {
141
+ return !$this->feed || $this->feed->channel->attributes()->cjt_error;
142
  }
143
 
144
  } // End class.
models/blocks.php CHANGED
@@ -46,11 +46,10 @@ class CJTBlocksModel {
46
  /**
47
  * put your comment there...
48
  *
49
- * @param mixed $data
50
- * @param mixed $pins
51
- * @param mixed $customPins
52
  */
53
- public function add($block) {
54
  // Make sure it array and not stdClass as it has been used from various areas!
55
  $block = (array) $block;
56
  // Create Tables objects.
@@ -60,16 +59,21 @@ class CJTBlocksModel {
60
  if (!isset($block['id']) || !$block['id']) {
61
  $block['id'] = $blocks->getNextId();
62
  }
63
- // Cache code for MASTER file.
64
- $codeFile->set('code', (isset($block['code']) ? $block['code'] : null));
65
- unset($block['code']); // If it passed it mist be removed from blocks data(avoid field not found)
 
 
 
 
 
 
 
 
 
 
66
  // Add new block.
67
  $blocks->insert($block);
68
- // Add code files.
69
- $codeFile->set('blockId', $block['id'])
70
- ->set('id', 1)
71
- ->set('name', 'Master')
72
- ->save(true, true);
73
  // Return Newly added block id.
74
  return $block['id'];
75
  }
46
  /**
47
  * put your comment there...
48
  *
49
+ * @param mixed $block
50
+ * @param mixed $forceAddCodeBlock
 
51
  */
52
+ public function add($block, $forceAddCodeBlock = false) {
53
  // Make sure it array and not stdClass as it has been used from various areas!
54
  $block = (array) $block;
55
  // Create Tables objects.
59
  if (!isset($block['id']) || !$block['id']) {
60
  $block['id'] = $blocks->getNextId();
61
  }
62
+ // Backward compatibility for old block style
63
+ // that has code field inside blocks table.
64
+ /// if passed create master code file for the code field.
65
+ if ($forceAddCodeBlock || isset($block['code'])) {
66
+ // Cache code for MASTER file.
67
+ $codeFile->set('code', $block['code']);
68
+ unset($block['code']); // If it passed it mist be removed from blocks data(avoid field not found)
69
+ // Add code files.
70
+ $codeFile->set('blockId', $block['id'])
71
+ ->set('id', 1)
72
+ ->set('name', 'Master')
73
+ ->save(true, true);
74
+ }
75
  // Add new block.
76
  $blocks->insert($block);
 
 
 
 
 
77
  // Return Newly added block id.
78
  return $block['id'];
79
  }
models/package-file.php CHANGED
@@ -33,157 +33,19 @@ class CJTPackageFileModel extends CJTHookableClass {
33
  * @param CJTPackageFile
34
  */
35
  public function install($package) {
36
- // Initialize.
37
- $model = null; // Current model for the element under the loop!
38
- $item = array(); // Object Item array to be inserted in the database.
39
- $addedObjects = array('template' => array(), 'block' => array()); // All the added objects mapped by object 'TYPE'.
40
- // Fetch package information with all readme and license tags locatted if
41
- // bundled with external files!
42
- $packageInfo = $package->getItem(null, array('readme' => 'readme.txt', 'license' => 'license.txt'));
43
- // Install only if the package record if not exists.
44
- $modelPackage = CJTModel::getInstance('package');
45
- if ($modelPackage->exists($packageInfo['name'])) {
46
- // State error!
47
- $this->state['error']['msg'] = cssJSToolbox::getText('The uploaded package is already installed!');
48
- // Terminate!
49
- return $this;
50
- }
51
- // Map definition xml TYPE attribute to CJT Model object to handle addding
52
- // objecs types.
53
- $objectModels = array('template' => 'template', 'block' => 'blocks');
54
- // Initialize Wordpress file system object.
55
- WP_Filesystem();
56
- $fileSystem =& $GLOBALS['wp_filesystem'];
57
- // Read all objects defined by the package.
58
- foreach ($package->document()->objects->object as $object) {
59
- // Prepare object + getting item to be saved into database.
60
- $item = $package->getItem($object);
61
- // Get current object type name.
62
- $objectType = (string) $object->attributes()->type;
63
- // Instantiate template model if not previously instantiated.
64
- if (!is_object($objectModels[$objectType])) {
65
- $objectModels[$objectType] = CJTModel::getInstance($objectModels[$objectType]);
66
- }
67
- // Referencing the model for current object type.
68
- $model = $objectModels[$objectType];
69
- $objectId = 0; // Always reset -- to don't map to package if nothing added!
70
- // Handle different object types.
71
- switch ($objectType) {
72
- case 'template':
73
- // Insert template only if not exists.
74
- if (!$model->exists($item['name'])) {
75
- // Import template(s) helper.
76
- cssJSToolbox::import('includes:templates:templates.class.php');
77
- // Set template revision.
78
- $model->inputs['item']['revision']['code'] = $item['code'];
79
- unset($item['code']);
80
- // Set template main data.
81
- $model->inputs['item']['template'] = $item;
82
- /** Get template Type!
83
- * Get type from external file extension if
84
- * the template code was linked to file.
85
- * If the template code were inline
86
- * then the type must be provided under
87
- * TYPE element!
88
- */
89
- // If no type specified get it from the external file extension
90
- if (!isset($model->inputs['item']['template']['type'])) {
91
- // @WARNING: Get locatted file!
92
- $codeFileName = (string) $object->code->attributes()->locatted;
93
- if ($codeFileName) {
94
- // Get type from extension.
95
- $fileComponent = pathinfo($codeFileName);
96
- $model->inputs['item']['template']['type'] = CJTTemplates::getExtensionType($fileComponent['extension']);
97
- }
98
- }
99
- // Add template.
100
- $addedTemplate = $model->save();
101
- // Expose Object ID to be added to the addedObjects List.
102
- $objectId = $addedTemplate->templateId;
103
- // Copy template folders.
104
- if ($foldersCollection = $object->folders) {
105
- // Get absolute path to template directory!
106
- $templateDirectory = ABSPATH . dirname($addedTemplate->file);
107
- // Process all <folders> tags!
108
- foreach ($foldersCollection as $folders) {
109
- // Get <folders> tag common path.
110
- $foldersPath = (string) $folders->attributes()->path;
111
- // Process <folder> tag.
112
- foreach ($folders as $folder) {
113
- // Folder absolute path.
114
- if ($detinationName = (string) $folder->attributes()->destination) {
115
- $folderPath = $detinationName;
116
- }
117
- else {
118
- $folderPath = $folder->attributes()->path;
119
- }
120
- $folderAbsPath = $package->getDirectory() . "/{$foldersPath}/{$folderPath}";
121
- // Create destination path.
122
- $folderDestinationPath = "{$templateDirectory}/{$folderPath}";
123
- if (!file_exists($folderDestinationPath)) {
124
- mkdir($folderDestinationPath, 0775);
125
- }
126
- // Copy files (FLAT)!!.
127
- foreach (new DirectoryIterator($folderAbsPath) as $file) {
128
- if (!$file->isDot() && $file->isFile()) {
129
- $fileSystem->copy($file->getPathName(), "{$folderDestinationPath}/{$file->getFileName()}");
130
- }
131
- }
132
- }
133
- }
134
- }
135
- }
136
- break;
137
- case 'block';
138
- // Set other block internal data.
139
- $item['created'] = $item['lastModified'] = current_time('mysql');
140
- $item['owner'] = get_current_user_id();
141
- // Insert block into database.
142
- $objectId = $model->add($item);
143
- $model->save();
144
- // Initialize for linking templates.
145
- $modelTemplate = $objectModels['template'];
146
- // Link block templates.
147
- $links = $object->links->link ? $object->links->link : array();
148
- foreach ($links as $link) {
149
- // Get template object to link.
150
- $templateToLinkAttributes = (array) $link->attributes();
151
- $templateToLinkAttributes = $templateToLinkAttributes['@attributes'];
152
- $tblTemplate = CJTxTable::getInstance('template')
153
- ->setData($templateToLinkAttributes) // Query by the given attributes.
154
- ->load(array_keys($templateToLinkAttributes));
155
- if ($tblTemplate->get('id')) {
156
- // Cache template id.
157
- $templateId = $tblTemplate->get('id');
158
- // Always link as the block should be newely added
159
- // and in the normal cases its impossible to be alread linked!
160
- $tableBlockTemplate = CJTxTable::getInstance('block-template');
161
- $tableBlockTemplate->set('blockId', $objectId)
162
- ->set('templateId', $templateId)
163
- ->save();
164
- // Add only LINKED objects to the package objects map table!
165
- if (!key_exists($templateId, $addedObjects['template'])) {
166
- $addedObjects['template'][$templateId] = array('objectId' => $templateId, 'relType' => 'link');
167
- }
168
- }
169
- }
170
- break;
171
- default:
172
- //throw new Exception('Invalid object type specified!');
173
- break;
174
- }
175
- // Support pluggable nodes that will parsed only when it really used.
176
- $this->pluggables($object, $objectId, $package);
177
- // Add (associate with the package) last objectId only if the object is added
178
- // as a part of the package.
179
- if ($objectId) {
180
- $addedObjects[$objectType][$objectId] = array('objectId' => $objectId);
181
- }
182
- }
183
- // Add package to database!
184
- $packageId = $modelPackage->save($packageInfo, $addedObjects);
185
  // Return package Id
186
- return $packageId;
187
  }
188
 
189
  /**
@@ -210,32 +72,6 @@ class CJTPackageFileModel extends CJTHookableClass {
210
  return $package;
211
  }
212
 
213
- /**
214
- * put your comment there...
215
- *
216
- * @param mixed $node
217
- * @param mixed $objectId
218
- * @param mixed $package
219
- * @return CJTPackageFileModel
220
- */
221
- public function pluggables($node, $objectId, & $package) {
222
- // Get packages definition xml factory.
223
- $factory = new CJT_Models_Package_Xml_Factory('models/package/xml/definition/objects');
224
- // Based on the object type get instance of the object
225
- // parser with the object node passed.
226
- // call plug method so the object would start parsing the
227
- // and plug the child elements.
228
- $object = $factory->create(null, (string) $node->attributes()->type, $node); // OBJECT CONSTR&UCTED HERE!
229
- // Set object id!
230
- $object->register()->offsetSet('id', $objectId);
231
- $object->register()->offsetSet('packageParser', $package);
232
- // Plug it!
233
- $object->transit()
234
- ->processInners();
235
- // Chaining.
236
- return $this;
237
- }
238
-
239
  /**
240
  * put your comment there...
241
  *
33
  * @param CJTPackageFile
34
  */
35
  public function install($package) {
36
+ // Get packages definition xml factory.
37
+ $factory = new CJT_Models_Package_Xml_Factory('models/package/xml/definition/package');
38
+ // Process the full document starting by the ROOT package tag down to the latest descendant.
39
+ $packageObject = $factory->create(null, 'package', $package->document()); // OBJECT CONSTR&UCTED HERE!
40
+ // Share vars to nodes.
41
+ $register = $packageObject->register();
42
+ $register->offsetSet('packageParser', $package);
43
+ // Process package object.
44
+ $packageObject->transit()
45
+ // Go down the tree.
46
+ ->processInners();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  // Return package Id
48
+ return $register['packageId'];
49
  }
50
 
51
  /**
72
  return $package;
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  /**
76
  * put your comment there...
77
  *
models/package.php CHANGED
@@ -108,29 +108,12 @@ class CJTPackageModel extends CJTHookableClass {
108
  * put your comment there...
109
  *
110
  * @param mixed $package
111
- * @param mixed $objects
112
- * @return CJTxTable
113
  */
114
- public function save($package, $types) {
115
  // Add package.
116
- $tablePackage = CJTxTable::getInstance('package')
117
  ->setData($package)
118
- ->save();
119
- // Add package objects map.
120
- $tablePackageObjects = CJTxTable::getInstance('package-objects');
121
- // Fetch objects under each type (block ,template).
122
- foreach ($types as $type => $objects) {
123
- // For each types get all object IDs!
124
- foreach ($objects as $object) {
125
- $tablePackageObjects->setItem() // Reset is needed as the object used accross multiple records
126
- // and might cause interfering between records!
127
- ->setData($object)
128
- ->set('packageId', $tablePackage->get('id'))
129
- ->set('objectType', $type)
130
- ->save();
131
- }
132
- }
133
- return $tablePackage->get('id');
134
  }
135
 
136
  /**
108
  * put your comment there...
109
  *
110
  * @param mixed $package
 
 
111
  */
112
+ public function save($package) {
113
  // Add package.
114
+ return CJTxTable::getInstance('package')
115
  ->setData($package)
116
+ ->save()->get('id');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  }
118
 
119
  /**
models/package/xml/definition/abstract.php CHANGED
@@ -30,6 +30,13 @@ implements CJT_Models_Package_Xml_Definition_Interface_Element {
30
  */
31
  protected $factory = null;
32
 
 
 
 
 
 
 
 
33
  /**
34
  * put your comment there...
35
  *
@@ -144,11 +151,11 @@ implements CJT_Models_Package_Xml_Definition_Interface_Element {
144
  $childs = $this->getNode()->children();
145
  // For every child node that has childs create an object!
146
  foreach ($childs as $childNode) {
147
- // Process only childs with childs nexted!
148
- // Don't process scalars!
149
- if (count($childNode->children())) {
150
- // Get node name.
151
- $nodeName = $childNode->getName();
152
  // Initialize object factory details.
153
  $objectInfo = array();
154
  // Get rule.
@@ -177,7 +184,7 @@ implements CJT_Models_Package_Xml_Definition_Interface_Element {
177
  * put your comment there...
178
  *
179
  */
180
- public function register() {
181
  return $this->register;
182
  }
183
 
@@ -189,4 +196,16 @@ implements CJT_Models_Package_Xml_Definition_Interface_Element {
189
  return $this;
190
  }
191
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  } // End class.
30
  */
31
  protected $factory = null;
32
 
33
+ /**
34
+ * put your comment there...
35
+ *
36
+ * @var mixed
37
+ */
38
+ protected $forceProcess = array();
39
+
40
  /**
41
  * put your comment there...
42
  *
151
  $childs = $this->getNode()->children();
152
  // For every child node that has childs create an object!
153
  foreach ($childs as $childNode) {
154
+ // Get node name.
155
+ $nodeName = $childNode->getName();
156
+ // Process only childs with childs neested or what added to the force-process-map.
157
+ // Don't process scalars until they're on the force-process-map!
158
+ if (in_array($nodeName, $this->forceProcess) || count($childNode->children())) {
159
  // Initialize object factory details.
160
  $objectInfo = array();
161
  // Get rule.
184
  * put your comment there...
185
  *
186
  */
187
+ public function & register() {
188
  return $this->register;
189
  }
190
 
196
  return $this;
197
  }
198
 
199
+ /**
200
+ * Default implementation to return physical path
201
+ * relative to the current package document.
202
+ *
203
+ */
204
+ public function virtualPath() {
205
+ // Initialize.
206
+ $factory =& $this->factory;
207
+ // Return physical path relative to package document.
208
+ return $factory->getClassRelativePath(get_class($this));
209
+ }
210
+
211
  } // End class.
models/package/xml/definition/{objects/block/files.php → frag/frag.php} RENAMED
@@ -6,5 +6,5 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Files
10
- extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {} // End class.
models/package/xml/definition/frag/frag/block.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ *
14
+ */
15
+ const VIRTUAL_PATH = 'block';
16
+
17
+ /**
18
+ * put your comment there...
19
+ *
20
+ */
21
+ public function transit() {
22
+ // Initialize.
23
+ $model = CJTModel::getInstance('blocks');
24
+ $register = $this->register();
25
+ // Prepare object + getting item to be saved into database.
26
+ $block = $register['packageParser']->getItem($this->getNode());
27
+ // Set other block internal data.
28
+ $block['created'] = $block['lastModified'] = current_time('mysql');
29
+ $block['owner'] = get_current_user_id();
30
+ // Create Block.
31
+ /// Expose BlockId for other nodes.
32
+ $register['blockId'] = $model->add($block);
33
+ $model->save();
34
+ // Chaining.
35
+ return $this;
36
+ }
37
+
38
+ /**
39
+ * put your comment there...
40
+ *
41
+ */
42
+ public function virtualPath() {
43
+ // Block object is unique accross all the file
44
+ // use unique global path that can be accessed from everywhere
45
+ // without knowing the real path as it might change based on the
46
+ // child model!
47
+ return self::VIRTUAL_PATH;
48
+ }
49
+
50
+ } // End class
models/package/xml/definition/{objects/block/params.php → frag/frag/block/files.php} RENAMED
@@ -6,5 +6,5 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params
10
  extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Files
10
  extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
models/package/xml/definition/{objects → frag/frag}/block/files/file.php RENAMED
@@ -6,7 +6,7 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Files_File
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Files_File
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
models/package/xml/definition/frag/frag/block/links.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Links
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ * @var mixed
16
+ */
17
+ protected $forceProcess = array('link');
18
+
19
+ } // End class
models/package/xml/definition/frag/frag/block/links/link.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Links_Link
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ */
16
+ public function transit() {
17
+ // Initialize for linking templates.
18
+ $register = $this->register();
19
+ $link = $this->getNode();
20
+ // Link block templates.
21
+ // Get template object to link.
22
+ $templateToLinkAttributes = (array) $link->attributes();
23
+ $templateToLinkAttributes = $templateToLinkAttributes['@attributes'];
24
+ $tblTemplate = CJTxTable::getInstance('template')
25
+ ->setData($templateToLinkAttributes) // Query by the given attributes.
26
+ ->load(array_keys($templateToLinkAttributes));
27
+ if ($register['linkedTemplateId'] = $tblTemplate->get('id')) {
28
+ // Always link as the block should be newely added
29
+ // and in the normal cases its impossible to be alread linked!
30
+ $tableBlockTemplate = CJTxTable::getInstance('block-template');
31
+ $tableBlockTemplate->set('blockId', $register['blockId'])
32
+ ->set('templateId', $register['linkedTemplateId'])
33
+ ->save();
34
+ }
35
+ return $this;
36
+ }
37
+
38
+ } // End class
models/package/xml/definition/frag/frag/block/links/link/package.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Links_Link_Package
10
+ extends CJT_Models_Package_Xml_Definition_FragPackage {
11
+
12
+
13
+ /**
14
+ * put your comment there...
15
+ *
16
+ * @var mixed
17
+ */
18
+ protected $objectIdKeyName = 'linkedTemplateId';
19
+
20
+ /**
21
+ * put your comment there...
22
+ *
23
+ * @var mixed
24
+ */
25
+ protected $objectTypeName = 'template';
26
+
27
+ /**
28
+ * put your comment there...
29
+ *
30
+ * @var mixed
31
+ */
32
+ protected $relationTypeName = 'link';
33
+
34
+ /**
35
+ * put your comment there...
36
+ *
37
+ * @param mixed $tblPackage
38
+ * @param mixed $packageId
39
+ */
40
+ protected function save(CJTxTable & $tblPckObjects, $packageId) {
41
+ // Initialize.
42
+ $register =& $this->register();
43
+ // Add Package Ref record,
44
+ // only if this template is not bundled with the package.
45
+ $data = array(
46
+ 'packageId' => $packageId,
47
+ 'objectId' => $register[$this->objectIdKeyName],
48
+ 'objectType' => $this->objectTypeName
49
+ );
50
+ $tblPckObjects->loadAsKey($data);
51
+ if (!$tblPckObjects->get('relType')) {
52
+ // Reset object.
53
+ $tblPckObjects->setItem();
54
+ // Save package object ref.
55
+ parent::save($tblPckObjects, $packageId);
56
+ }
57
+ // Chain.
58
+ return $this;
59
+ }
60
+
61
+ } // End class
models/package/xml/definition/frag/frag/block/package.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Package
10
+ extends CJT_Models_Package_Xml_Definition_FragPackage {
11
+
12
+
13
+ /**
14
+ * put your comment there...
15
+ *
16
+ * @var mixed
17
+ */
18
+ protected $objectIdKeyName = 'blockId';
19
+
20
+ /**
21
+ * put your comment there...
22
+ *
23
+ * @var mixed
24
+ */
25
+ protected $objectTypeName = 'block';
26
+
27
+ /**
28
+ * put your comment there...
29
+ *
30
+ * @var mixed
31
+ */
32
+ protected $relationTypeName = 'add';
33
+
34
+ } // End class
models/package/xml/definition/{objects/block/params/list/param/typeParams.php → frag/frag/block/params.php} RENAMED
@@ -6,5 +6,5 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param_TypeParams
10
  extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params
10
  extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
models/package/xml/definition/{objects → frag/frag}/block/params/form.php RENAMED
@@ -6,7 +6,7 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_Form
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
models/package/xml/definition/frag/frag/block/params/form/groups.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form_Groups
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ } // End class
models/package/xml/definition/{objects → frag/frag}/block/params/form/groups/group.php RENAMED
@@ -6,9 +6,14 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_Form_Groups_Group
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
 
 
 
 
 
12
  /**
13
  * Required by block/params/list/param/params/group object
14
  * to search for the associated group!
@@ -50,5 +55,14 @@ extends CJT_Models_Package_Xml_Definition_Abstract {
50
  // Chaining.
51
  return $this;
52
  }
 
 
 
 
 
 
 
 
 
53
 
54
  } // End class
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form_Groups_Group
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
+ /**
13
+ *
14
+ */
15
+ const VIRTUA_PATH = 'form/group';
16
+
17
  /**
18
  * Required by block/params/list/param/params/group object
19
  * to search for the associated group!
55
  // Chaining.
56
  return $this;
57
  }
58
+
59
+ /**
60
+ * put your comment there...
61
+ *
62
+ */
63
+ public function virtualPath() {
64
+ return self::VIRTUA_PATH;
65
+ }
66
+
67
 
68
  } // End class
models/package/xml/definition/{objects → frag/frag}/block/params/form/groups/group/xfields.php RENAMED
@@ -6,7 +6,7 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_Form_Groups_Group_xFields
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form_Groups_Group_xFields
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
models/package/xml/definition/frag/frag/block/params/list.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ } // End class
models/package/xml/definition/{objects → frag/frag}/block/params/list/param.php RENAMED
@@ -6,7 +6,7 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
models/package/xml/definition/{objects → frag/frag}/block/params/list/param/group.php RENAMED
@@ -6,7 +6,7 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param_Group
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
@@ -20,7 +20,7 @@ extends CJT_Models_Package_Xml_Definition_Abstract {
20
  $groupParamData = new CJT_Framework_Xml_Fetchscalars($this->getNode());
21
  // Find group!
22
  $factory = $this->getFactory();
23
- $groups = $factory->getCreatedObjects('block/params/form/groups/group');
24
  $paramGroupName = (string) $this->getNode()->attributes()->name;
25
  // Find the group to be associated with the parameter.
26
  foreach ($groups as $group) {
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
20
  $groupParamData = new CJT_Framework_Xml_Fetchscalars($this->getNode());
21
  // Find group!
22
  $factory = $this->getFactory();
23
+ $groups = $factory->getCreatedObjects('form/group');
24
  $paramGroupName = (string) $this->getNode()->attributes()->name;
25
  // Find the group to be associated with the parameter.
26
  foreach ($groups as $group) {
models/package/xml/definition/frag/frag/block/params/list/param/group/definition.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group_Definition
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
models/package/xml/definition/{objects → frag/frag}/block/params/list/param/group/definition/type.php RENAMED
@@ -6,7 +6,7 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param_Group_Definition_Type
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group_Definition_Type
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
models/package/xml/definition/frag/frag/block/params/list/param/group/rendererParams.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group_RendererParams
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ * @var mixed
16
+ */
17
+ protected $map = array('param' => 'frag/block/params/list/param/typeparams/param');
18
+
19
+ } // End class
models/package/xml/definition/frag/frag/block/params/list/param/params.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Params
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ * @var mixed
16
+ */
17
+ protected $map = array('param' => 'frag/block/params/list/param');
18
+
19
+ } // End class
models/package/xml/definition/{objects/block/params/list/param/group/definition.php → frag/frag/block/params/list/param/typeParams.php} RENAMED
@@ -6,5 +6,5 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param_Group_Definition
10
  extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_TypeParams
10
  extends CJT_Models_Package_Xml_Definition_Abstract {} // End class
models/package/xml/definition/{objects → frag/frag}/block/params/list/param/typeparams/param.php RENAMED
@@ -6,7 +6,7 @@
6
  /**
7
  *
8
  */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param_TypeParams_Param
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
6
  /**
7
  *
8
  */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_TypeParams_Param
10
  extends CJT_Models_Package_Xml_Definition_Abstract {
11
 
12
  /**
models/package/xml/definition/frag/frag/package.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Package
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * Do nothing!
14
+ *
15
+ */
16
+ public function transit() {
17
+ // Initialize.
18
+ $register = $this->register();
19
+ $modelPackage = CJTModel::getInstance('package');
20
+ // Fetch package information with all readme and license tags locatted if
21
+ // bundled with external files!
22
+ $packageInfo = $register['packageParser']->getItem(
23
+ $this->getNode(),
24
+ array('readme' => 'readme.txt', 'license' => 'license.txt')
25
+ );
26
+ // Add package to database!
27
+ $register['packageId'] = $modelPackage->save($packageInfo);
28
+ // Chain.
29
+ return $this;
30
+ }
31
+
32
+ } // End class
models/package/xml/definition/frag/frag/template.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Template
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ *
14
+ */
15
+ const VIRTUAL_PATH = 'template';
16
+
17
+ /**
18
+ * Do nothing!
19
+ *
20
+ */
21
+ public function transit() {
22
+ // Initialize.
23
+ $model = CJTModel::getInstance('template');
24
+ $node = $this->getNode();
25
+ $register = $this->register();
26
+ // Prepare object + getting item to be saved into database.
27
+ $template = $register['packageParser']->getItem($node);
28
+ // Insert template only if not exists.
29
+ if (!$model->exists($template['name'])) {
30
+ // Import template(s) helper.
31
+ cssJSToolbox::import('includes:templates:templates.class.php');
32
+ // Set template revision.
33
+ $model->inputs['item']['revision']['code'] = $template['code'];
34
+ unset($template['code']);
35
+ // Set template main data.
36
+ $model->inputs['item']['template'] = $template;
37
+ /** Get template Type!
38
+ * Get type from external file extension if
39
+ * the template code was linked to file.
40
+ * If the template code were inline
41
+ * then the type must be provided under
42
+ * TYPE element!
43
+ */
44
+ // If no type specified get it from the external file extension
45
+ if (!isset($model->inputs['item']['template']['type'])) {
46
+ // @WARNING: Get locatted file!
47
+ $codeFileName = (string) $node->code->attributes()->locatted;
48
+ if ($codeFileName) {
49
+ // Get type from extension.
50
+ $fileComponent = pathinfo($codeFileName);
51
+ $model->inputs['item']['template']['type'] = CJTTemplates::getExtensionType($fileComponent['extension']);
52
+ }
53
+ }
54
+ // Add template.
55
+ $addedTemplate = $model->save();
56
+ // Expose template fields to be by used by other objects.
57
+ $register['templateId'] = $addedTemplate->templateId;
58
+ $register['templateFile'] = $addedTemplate->file;
59
+ }
60
+ // Chaining.
61
+ return $this;
62
+ }
63
+
64
+ /**
65
+ * put your comment there...
66
+ *
67
+ */
68
+ public function virtualPath() {
69
+ // Block object is unique accross all the file
70
+ // use unique global path that can be accessed from everywhere
71
+ // without knowing the real path as it might change based on the
72
+ // child model!
73
+ return self::VIRTUAL_PATH;
74
+ }
75
+
76
+ } // End class
models/package/xml/definition/frag/frag/template/folders.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Template_Folders
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ * @var mixed
16
+ */
17
+ protected $forceProcess = array('folder');
18
+
19
+ } // End class
models/package/xml/definition/frag/frag/template/folders/folder.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Template_Folders_Folder
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ */
16
+ public function transit() {
17
+ // Initialize.
18
+ $register = $this->register();
19
+ $node = $this->getNode();
20
+ $fileSystem =& $GLOBALS['wp_filesystem'];
21
+ // Get absolute path to template directory!
22
+ $templateDirectory = ABSPATH . dirname($register['templateFile']);
23
+ // Get <folders> tag common path.
24
+ $foldersPath = (string) $this->getParent()->getNode()->attributes()->path;
25
+ // Folder absolute path.
26
+ if ($detinationName = (string) $node->attributes()->destination) {
27
+ $folderPath = $detinationName;
28
+ }
29
+ else {
30
+ $folderPath = $node->attributes()->path;
31
+ }
32
+ $folderAbsPath = $register['packageParser']->getDirectory() . "/{$foldersPath}/{$folderPath}";
33
+ // Create destination path.
34
+ $folderDestinationPath = "{$templateDirectory}/{$folderPath}";
35
+ if (!file_exists($folderDestinationPath)) {
36
+ mkdir($folderDestinationPath, 0775);
37
+ }
38
+ // Copy files (FLAT)!!.
39
+ foreach (new DirectoryIterator($folderAbsPath) as $file) {
40
+ if (!$file->isDot() && $file->isFile()) {
41
+ $fileSystem->copy($file->getPathName(), "{$folderDestinationPath}/{$file->getFileName()}");
42
+ }
43
+ }
44
+ // Chain.
45
+ return $this;
46
+ }
47
+
48
+ } // End class
models/package/xml/definition/frag/frag/template/package.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Frag_Frag_Template_Package
10
+ extends CJT_Models_Package_Xml_Definition_FragPackage {
11
+
12
+
13
+ /**
14
+ * put your comment there...
15
+ *
16
+ * @var mixed
17
+ */
18
+ protected $objectIdKeyName = 'templateId';
19
+
20
+ /**
21
+ * put your comment there...
22
+ *
23
+ * @var mixed
24
+ */
25
+ protected $objectTypeName = 'template';
26
+
27
+ /**
28
+ * put your comment there...
29
+ *
30
+ * @var mixed
31
+ */
32
+ protected $relationTypeName = 'add';
33
+
34
+ } // End class
models/package/xml/definition/fragpackage.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ abstract class CJT_Models_Package_Xml_Definition_FragPackage
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ * @var mixed
16
+ */
17
+ protected $objectIdKeyName;
18
+
19
+ /**
20
+ * put your comment there...
21
+ *
22
+ * @var mixed
23
+ */
24
+ protected $objectTypeName;
25
+
26
+ /**
27
+ * put your comment there...
28
+ *
29
+ * @var mixed
30
+ */
31
+ protected $relationTypeName;
32
+
33
+ /**
34
+ * put your comment there...
35
+ *
36
+ * @param mixed $tblPackage
37
+ * @param mixed $packageId
38
+ */
39
+ protected function save(CJTxTable & $tblPckObjects, $packageId) {
40
+ // Initialize.
41
+ $register =& $this->register();
42
+ // Save Package object ref
43
+ $tblPckObjects->setData(array(
44
+ 'packageId' => $packageId,
45
+ 'objectId' => $register[$this->objectIdKeyName],
46
+ 'objectType' => $this->objectTypeName,
47
+ 'relType' => $this->relationTypeName,
48
+ ))->save();
49
+ // Chain/
50
+ return $this;
51
+ }
52
+ /**
53
+ * Do nothing!
54
+ *
55
+ */
56
+ public function transit() {
57
+ // Initialize.
58
+ $tblPckObjects = CJTxTable::getInstance('package-objects');
59
+ // Query package id.
60
+ $tblPck = CJTxTable::getInstance('package');
61
+ $pckData = new CJT_Framework_Xml_Fetchscalars($this->getNode());
62
+ $tblPck->setData($pckData)
63
+ ->load(array('name'));
64
+ // Add Block-Template-Link=>Package reference.
65
+ $this->save($tblPckObjects, $tblPck->get('id'));
66
+ // Chain.
67
+ return $this;
68
+ }
69
+
70
+ }
models/package/xml/definition/interface/element.php CHANGED
@@ -34,4 +34,9 @@ interface CJT_Models_Package_Xml_Definition_Interface_Element {
34
  */
35
  public function transit();
36
 
 
 
 
 
 
37
  } // End class.
34
  */
35
  public function transit();
36
 
37
+ /**
38
+ * Return virual path to current doc object
39
+ */
40
+ public function virtualPath();
41
+
42
  } // End class.
models/package/xml/definition/objects/block.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
- /**
3
- *
4
- */
5
-
6
- /**
7
- *
8
- */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block
10
- extends CJT_Models_Package_Xml_Definition_Abstract {
11
-
12
- /**
13
- * put your comment there...
14
- *
15
- * @var mixed
16
- */
17
- protected $rules = array('links' => false);
18
-
19
- /**
20
- * put your comment there...
21
- *
22
- */
23
- public function transit() {
24
- // Do transit.
25
- parent::transit();
26
- // Use blockId key instead of 'id' key.
27
- $register = $this->register();
28
- $register['blockId'] = $register['id'];
29
- unset($register['id']);
30
- // Chaining.
31
- return $this;
32
- }
33
- } // End class
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/package/xml/definition/objects/block/params/form/groups.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
- /**
3
- *
4
- */
5
-
6
- /**
7
- *
8
- */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_Form_Groups
10
- extends CJT_Models_Package_Xml_Definition_Abstract {
11
-
12
- } // End class
 
 
 
 
 
 
 
 
 
 
 
 
models/package/xml/definition/objects/block/params/list.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
- /**
3
- *
4
- */
5
-
6
- /**
7
- *
8
- */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List
10
- extends CJT_Models_Package_Xml_Definition_Abstract {
11
-
12
- } // End class
 
 
 
 
 
 
 
 
 
 
 
 
models/package/xml/definition/objects/block/params/list/param/group/rendererParams.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
- /**
3
- *
4
- */
5
-
6
- /**
7
- *
8
- */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param_Group_RendererParams
10
- extends CJT_Models_Package_Xml_Definition_Abstract {
11
-
12
- /**
13
- * put your comment there...
14
- *
15
- * @var mixed
16
- */
17
- protected $map = array('param' => 'block/params/list/param/typeParams/param');
18
-
19
- } // End class
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/package/xml/definition/objects/block/params/list/param/params.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
- /**
3
- *
4
- */
5
-
6
- /**
7
- *
8
- */
9
- class CJT_Models_Package_Xml_Definition_Objects_Block_Params_List_Param_Params
10
- extends CJT_Models_Package_Xml_Definition_Abstract {
11
-
12
- /**
13
- * put your comment there...
14
- *
15
- * @var mixed
16
- */
17
- protected $map = array('param' => 'block/params/list/param');
18
-
19
- } // End class
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/package/xml/definition/objects/template.php DELETED
@@ -1,28 +0,0 @@
1
- <?php
2
- /**
3
- *
4
- */
5
-
6
- /**
7
- *
8
- */
9
- class CJT_Models_Package_Xml_Definition_Objects_Template
10
- extends CJT_Models_Package_Xml_Definition_Abstract {
11
-
12
- /**
13
- * Do nothing!
14
- *
15
- */
16
- public function processInners() {
17
- return $this;
18
- }
19
-
20
- /**
21
- * Do nothing!
22
- *
23
- */
24
- public function transit() {
25
- return $this;
26
- }
27
-
28
- } // End class
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/package/xml/definition/package/package.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Package {} // End class
models/package/xml/definition/package/package/block.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ */
16
+ public function transit() {
17
+ // Transit Block.
18
+ parent::transit();
19
+ $register = $this->register();
20
+ // Add Package Ref record.
21
+ $pckHelper = new CJT_Models_Package_Xml_Definition_PackageHelper($register['packageId']);
22
+ $pckHelper->associateObject($register['blockId'], 'block', 'add');
23
+ // Chaining.
24
+ return $this;
25
+ }
26
+
27
+ } // End class
models/package/xml/definition/package/package/block/files.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Files
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Files {} // End class
models/package/xml/definition/package/package/block/files/file.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Files_File
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Files_File {} // End class
models/package/xml/definition/package/package/block/links.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Links
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Links {} // End class
models/package/xml/definition/package/package/block/links/link.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Links_Link
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Links_Link {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ */
16
+ public function transit() {
17
+ // Transit Link.
18
+ parent::transit();
19
+ $register = $this->register();
20
+ // Add Package Ref record
21
+ // ,only if this template is not bundled with the package.
22
+ $packObjectsTbl = CJTxTable::getInstance('package-objects')
23
+ ->loadAsKey(array(
24
+ 'packageId' => $register['packageId'],
25
+ 'objectId' => $register['linkedTemplateId'],
26
+ 'objectType' => 'template'
27
+ ));
28
+ if (!$packObjectsTbl->get('relType')) {
29
+ $pckHelper = new CJT_Models_Package_Xml_Definition_PackageHelper($register['packageId']);
30
+ $pckHelper->associateObject($register['linkedTemplateId'], 'template', 'link');
31
+ }
32
+ // Chaining.
33
+ return $this;
34
+ }
35
+
36
+ } // End class
models/package/xml/definition/package/package/block/params.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params {} // End class
models/package/xml/definition/package/package/block/params/form.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_Form
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form {} // End class
models/package/xml/definition/package/package/block/params/form/groups.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_Form_Groups
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form_Groups {} // End class
models/package/xml/definition/package/package/block/params/form/groups/group.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_Form_Groups_Group
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form_Groups_Group {} // End class
models/package/xml/definition/package/package/block/params/form/groups/group/xfields.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_Form_Groups_Group_xFields
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_Form_Groups_Group_xFields {} // End class
models/package/xml/definition/package/package/block/params/list.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List {} // End class
models/package/xml/definition/package/package/block/params/list/param.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param {} // End class
models/package/xml/definition/package/package/block/params/list/param/group.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param_Group
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group {} // End class
models/package/xml/definition/package/package/block/params/list/param/group/definition.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param_Group_Definition
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group_Definition {} // End class
models/package/xml/definition/package/package/block/params/list/param/group/definition/type.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param_Group_Definition_Type
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group_Definition_Type {} // End class
models/package/xml/definition/package/package/block/params/list/param/group/rendererParams.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param_Group_RendererParams
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Group_RendererParams {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ * @var mixed
16
+ */
17
+ protected $map = array('param' => 'package/block/params/list/param/typeParams/param');
18
+
19
+ } // End class
models/package/xml/definition/package/package/block/params/list/param/params.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param_Params
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_Params {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ * @var mixed
16
+ */
17
+ protected $map = array('param' => 'package/block/params/list/param');
18
+
19
+ } // End class
models/package/xml/definition/package/package/block/params/list/param/typeParams.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param_TypeParams
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_TypeParams {} // End class
models/package/xml/definition/package/package/block/params/list/param/typeparams/param.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Block_Params_List_Param_TypeParams_Param
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Block_Params_List_Param_TypeParams_Param {} // End class
models/package/xml/definition/package/package/objects.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Objects
10
+ extends CJT_Models_Package_Xml_Definition_Abstract {}
models/package/xml/definition/package/package/objects/object.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ * As the package definition xml file is initially created
8
+ * to use <object> tag for both <block> and <template> type objects
9
+ * and then it start to use a tag for evey object type CJT has it then needs
10
+ * a way to redirect/proxing the call to the new implementation objects
11
+ * <block> and <template>
12
+ *
13
+ */
14
+ class CJT_Models_Package_Xml_Definition_Package_Package_Objects_Object
15
+ implements CJT_Models_Package_Xml_Definition_Interface_Element {
16
+
17
+ /**
18
+ * put your comment there...
19
+ *
20
+ * @var mixed
21
+ */
22
+ protected $object;
23
+
24
+ /**
25
+ * put your comment there...
26
+ *
27
+ * @param SimpleXMLElement $node
28
+ * @param mixed $parent
29
+ * @param mixed $factory
30
+ * @return CJT_Models_Package_Xml_Definition_Package_Package_Object
31
+ */
32
+ public function __construct(SimpleXMLElement $node, $parent, $factory) {
33
+ // Construct type object.
34
+ $objectTypeName = (string) $node->attributes()->type;
35
+ $objectTypeClass = "CJT_Models_Package_Xml_Definition_Package_Package_{$objectTypeName}";
36
+ $this->object = new $objectTypeClass($node, $parent, $factory);
37
+ }
38
+
39
+ /**
40
+ * put your comment there...
41
+ *
42
+ */
43
+ public function processInners() {
44
+ return $this->object->processInner();
45
+ }
46
+
47
+ /**
48
+ * put your comment there...
49
+ *
50
+ */
51
+ public function register() {
52
+ return $this->object->register();
53
+ }
54
+
55
+ /**
56
+ * put your comment there...
57
+ *
58
+ */
59
+ public function transit() {
60
+ return $this->object->transit();
61
+ }
62
+
63
+ /**
64
+ * put your comment there...
65
+ *
66
+ */
67
+ public function virtualPath() {
68
+ return $this->object->virtualPath();
69
+ }
70
+
71
+ } // End class.
models/package/xml/definition/package/package/template.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Template
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Template {
11
+
12
+ /**
13
+ * put your comment there...
14
+ *
15
+ */
16
+ public function transit() {
17
+ // Transit Template.
18
+ parent::transit();
19
+ $register = $this->register();
20
+ // Add Package Ref record.
21
+ $pckHelper = new CJT_Models_Package_Xml_Definition_PackageHelper($register['packageId']);
22
+ $pckHelper->associateObject($register['templateId'], 'template', 'add');
23
+ // Chaining.
24
+ return $this;
25
+ }
26
+
27
+ } // End class
models/package/xml/definition/package/package/template/folders.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Template_Folders
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Template_Folders {} // End class
models/package/xml/definition/package/package/template/folders/folder.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_Package_Package_Template_Folders_Folder
10
+ extends CJT_Models_Package_Xml_Definition_Frag_Frag_Template_Folders_Folder {} // End class
models/package/xml/definition/packagehelper.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ class CJT_Models_Package_Xml_Definition_PackageHelper {
10
+
11
+ /**
12
+ * put your comment there...
13
+ *
14
+ * @var mixed
15
+ */
16
+ protected $id;
17
+
18
+ /**
19
+ * put your comment there...
20
+ *
21
+ * @var mixed
22
+ */
23
+ protected $name;
24
+
25
+ /**
26
+ * put your comment there...
27
+ *
28
+ * @param mixed $packageId
29
+ * @return CJT_Models_Package_Xml_Definition_Package_Helper
30
+ */
31
+ public function __construct($id) {
32
+ $this->id = $id;
33
+ }
34
+
35
+ /**
36
+ * put your comment there...
37
+ *
38
+ * @param mixed $objectId
39
+ * @param mixed $objectType
40
+ * @param mixed $relType
41
+ */
42
+ public function associateObject($objectId, $objectType, $relType) {
43
+ // Initialize.
44
+ $tblPckObjects = CJTxTable::getInstance('package-objects');
45
+ // Add Block-Template-Link=>Package reference.
46
+ $tblPckObjects->setData(array(
47
+ 'packageId' => $this->getId(),
48
+ 'objectId' => $objectId,
49
+ 'objectType' => $objectType,
50
+ 'relType' => $relType,
51
+ ))->save();
52
+ // Chain.
53
+ return $this;
54
+ }
55
+
56
+ /**
57
+ * put your comment there...
58
+ *
59
+ */
60
+ public function getId() {
61
+ return $this->id;
62
+ }
63
+
64
+ /**
65
+ * put your comment there...
66
+ *
67
+ */
68
+ public function getName() {
69
+ return $this->name;
70
+ }
71
+
72
+ } // ENd class.
models/package/xml/factory.php CHANGED
@@ -41,19 +41,18 @@ class CJT_Models_Package_Xml_Factory {
41
  * @param mixed $node
42
  */
43
  public function create($current, $path, $node) {
44
- // Get loader.
45
- $loader = CJT_Framework_Autoload_Loader::autoLoad('CJT');
46
  // Get object element class name
47
  $classPath = "{$this->basePath}/{$path}";
48
  $className = 'CJT_' . str_replace(' ', '_', ucwords(str_replace('/', ' ', $classPath)));
49
  // Instantiate class.
50
  $object = new $className($node, $current, $this);
 
51
  // Cache all instantiated objects so it can be accessed
52
  // anywhere inside!
53
- if (!isset($this->yields[$path])) {
54
- $this->yields[$path] = array();
55
  }
56
- $this->yields[$path][] = $object;
57
  // Return new object.
58
  return $object;
59
  }
@@ -66,12 +65,26 @@ class CJT_Models_Package_Xml_Factory {
66
  return $this->basePath;
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  /**
70
  * put your comment there...
71
  *
72
  * @param mixed $path
73
  */
74
- public function getCreatedObjects($path) {
75
  // Initialize.
76
  $objects = array();
77
  /// E_ALL complans
@@ -81,6 +94,7 @@ class CJT_Models_Package_Xml_Factory {
81
  // Return objects.
82
  return $objects;
83
  }
 
84
  /**
85
  * put your comment there...
86
  *
@@ -88,10 +102,8 @@ class CJT_Models_Package_Xml_Factory {
88
  * @param mixed $path
89
  */
90
  public function obtainRelativePath($class, $innerPath) {
91
- // Get class path.
92
- $classPath = strtolower(str_replace('_', '/', $class));
93
- // Remove base path from the class path.
94
- $classRelativePath = str_replace("cjt/{$this->basePath}/", '', $classPath);
95
  // Build child relatoive path.
96
  $path = "{$classRelativePath}/{$innerPath}";
97
  return $path;
41
  * @param mixed $node
42
  */
43
  public function create($current, $path, $node) {
 
 
44
  // Get object element class name
45
  $classPath = "{$this->basePath}/{$path}";
46
  $className = 'CJT_' . str_replace(' ', '_', ucwords(str_replace('/', ' ', $classPath)));
47
  // Instantiate class.
48
  $object = new $className($node, $current, $this);
49
+ $objectPath = $object->virtualPath();
50
  // Cache all instantiated objects so it can be accessed
51
  // anywhere inside!
52
+ if (!isset($this->yields[$objectPath])) {
53
+ $this->yields[$objectPath] = array();
54
  }
55
+ $this->yields[$objectPath][] = $object;
56
  // Return new object.
57
  return $object;
58
  }
65
  return $this->basePath;
66
  }
67
 
68
+ /**
69
+ * put your comment there...
70
+ *
71
+ * @param mixed $class
72
+ */
73
+ public function getClassRelativePath($class) {
74
+ // Get class path.
75
+ $classPath = strtolower(str_replace('_', '/', $class));
76
+ // Remove base path from the class path.
77
+ $classRelativePath = str_replace("cjt/{$this->basePath}/", '', $classPath);
78
+ // returns
79
+ return $classRelativePath;
80
+ }
81
+
82
  /**
83
  * put your comment there...
84
  *
85
  * @param mixed $path
86
  */
87
+ public function & getCreatedObjects($path) {
88
  // Initialize.
89
  $objects = array();
90
  /// E_ALL complans
94
  // Return objects.
95
  return $objects;
96
  }
97
+
98
  /**
99
  * put your comment there...
100
  *
102
  * @param mixed $path
103
  */
104
  public function obtainRelativePath($class, $innerPath) {
105
+ // Get class path relative to the package doc.
106
+ $classRelativePath = $this->getClassRelativePath($class);
 
 
107
  // Build child relatoive path.
108
  $path = "{$classRelativePath}/{$innerPath}";
109
  return $path;
models/setup.php CHANGED
@@ -11,11 +11,6 @@ defined('ABSPATH') or die("Access denied");
11
  */
12
  class CJTSetupModel {
13
 
14
- /**
15
- *
16
- */
17
- const EDD_PRODUCT_NAME = 'CJT Free';
18
-
19
  /**
20
  *
21
  */
@@ -78,7 +73,7 @@ class CJTSetupModel {
78
  $request['item_name'] = urlencode($component['name']);
79
  $request['license'] = $license['key'];
80
  /* CJT Extra Fields For EDD */
81
- $request['CJTEFFEDD_licenseName'] = $license['name'];
82
  // Request the server!
83
  $response = wp_remote_get(add_query_arg($request, cssJSToolbox::getCJTWebSiteURL()));
84
  // We need only the JSON object returned by EDD APIs.
@@ -97,11 +92,45 @@ class CJTSetupModel {
97
  public function getCJTComponentData() {
98
  $component = array();
99
  // Set info!
100
- $component['name'] = self::EDD_PRODUCT_NAME;
101
  $component['pluginBase'] = CJTOOLBOX_PLUGIN_BASE;
 
102
  return $component;
103
  }
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  /**
106
  * put your comment there...
107
  *
@@ -133,16 +162,33 @@ class CJTSetupModel {
133
  /**
134
  * put your comment there...
135
  *
 
136
  * @param mixed $compoment
137
- * @param mixed $field
138
  */
139
- public function getStateStruct($compoment, $struct = null) {
 
 
140
  // Read all licenses from db!
141
  $licensesCache =& $this->getLicenses();
142
- // If not set return clean empty array!
143
- $componentName = $compoment['name'];
144
- $state = isset($licensesCache[$componentName]) ? $licensesCache[$componentName] : false;
145
- return ($struct ? ($state[$struct] ? $state[$struct] : false) : $state);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  }
147
 
148
  /**
11
  */
12
  class CJTSetupModel {
13
 
 
 
 
 
 
14
  /**
15
  *
16
  */
73
  $request['item_name'] = urlencode($component['name']);
74
  $request['license'] = $license['key'];
75
  /* CJT Extra Fields For EDD */
76
+ //$request['CJTEFFEDD_licenseName'] = $license['name'];
77
  // Request the server!
78
  $response = wp_remote_get(add_query_arg($request, cssJSToolbox::getCJTWebSiteURL()));
79
  // We need only the JSON object returned by EDD APIs.
92
  public function getCJTComponentData() {
93
  $component = array();
94
  // Set info!
 
95
  $component['pluginBase'] = CJTOOLBOX_PLUGIN_BASE;
96
+ $component['title'] = 'CSS & Javascript Toolbox';
97
  return $component;
98
  }
99
 
100
+ /**
101
+ * put your comment there...
102
+ *
103
+ * @param mixed $component
104
+ */
105
+ public function getExtensionProductTypes($component) {
106
+ # Initialize
107
+ $types = array();
108
+ # Extension plugin file
109
+ $pluginDirName = dirname($component['pluginBase']);
110
+ $pluginXMLFile = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR .
111
+ $pluginDirName . DIRECTORY_SEPARATOR .
112
+ $pluginDirName . '.xml';
113
+ # Use XML
114
+ $exDef = new SimpleXMLElement(file_get_contents($pluginXMLFile));
115
+ # Register XPath namespace
116
+ $license = $exDef->license;
117
+ $license->registerXPathNamespace('ext', 'http://css-javascript-toolbox.com/extensions/xmldeffile');
118
+ # Get types
119
+ $typesSrc = $exDef->license->xpath('name');
120
+ foreach ($typesSrc as $type) {
121
+ # Product name
122
+ $name = (string) $type;
123
+ # Old Definiton document doesnt support text attributes.
124
+ # If not there use name node value as TEXT
125
+ if (!$text = ((string) $type->attributes()->text)) {
126
+ $text = $name;
127
+ }
128
+ # Add to list
129
+ $types[$name] = array('name' => $name, 'text' => $text);
130
+ }
131
+ return $types;
132
+ }
133
+
134
  /**
135
  * put your comment there...
136
  *
162
  /**
163
  * put your comment there...
164
  *
165
+ * @param mixed $licenseTypes
166
  * @param mixed $compoment
167
+ * @param mixed $struct
168
  */
169
+ public function getStateStruct($licenseTypes, $struct = null) {
170
+ // INit
171
+ $state = null;
172
  // Read all licenses from db!
173
  $licensesCache =& $this->getLicenses();
174
+ // Find license
175
+ foreach ($licenseTypes as $type) {
176
+ # Get product name to search
177
+ $productName = $type['name'];
178
+ if (isset($licensesCache[$productName])) {
179
+ # Get product state
180
+ $state = $licensesCache[$productName];
181
+ # Filter to section
182
+ if ($struct) {
183
+ $state = $state[$struct];
184
+ }
185
+ # ALways push product name
186
+ $state['productName'] = $productName;
187
+ # Exit for
188
+ break;
189
+ }
190
+ }
191
+ return $state;
192
  }
193
 
194
  /**
models/statistics-metabox.php CHANGED
@@ -57,35 +57,34 @@ class CJTStatisticsMetaboxModel {
57
  */
58
  public function getFeed() {
59
  // Initialize.
60
- $widgetTransitFeed = get_option(self::CJT_LASTEST_SCRIPT_OPTION_NAME, array(
61
- 'scripts' => array(array('title' => 'cjt-script.com', 'link' => 'http://' . cssJSToolbox::CJT_SCRTIPS_WEB_SITE_DOMAIN)),
62
- 'news' => array(array('title' => 'css-javascript-toolbox.com', 'link' => 'http://' . cssJSToolbox::CJT_WEB_SITE_DOMAIN)),
63
- 'time' => 0
64
- ));
65
  // Only if cache is expires read feed from server.
66
  if ((time() - $widgetTransitFeed['time']) > self::LATEST_SCRIPT_EXPIRES) {
 
 
67
  # Get Latest Scripts/Packages from feed.
68
- $scriptsFeed = new CJT_Framework_Wordpress_Feed(
69
- cssJSToolbox::CJT_SCRTIPS_WEB_SITE_DOMAIN,
70
- 'forums/script-packages/user-scripts/feed/',
71
- array('title', 'link')
72
- );
73
- if (!$scriptsFeed->isError()) {
74
- $widgetTransitFeed['scripts'] = $scriptsFeed->getLatestItems(1);
75
- }
76
  # Get latest news from news feed.
77
- $newsFeed = new CJT_Framework_Wordpress_Feed(
78
- cssJSToolbox::CJT_WEB_SITE_DOMAIN,
79
- 'category/news/feed/',
80
- array('title', 'link', 'description')
81
- );
82
- if (!$newsFeed->isError()) {
83
- $widgetTransitFeed['news'] = $newsFeed->getLatestItems(1);
84
  }
85
- # Store cache time.
86
- $widgetTransitFeed['time'] = time();
87
- update_option(self::CJT_LASTEST_SCRIPT_OPTION_NAME, $widgetTransitFeed);
88
  }
 
 
 
 
 
 
 
89
  return $widgetTransitFeed;
90
  }
91
 
57
  */
58
  public function getFeed() {
59
  // Initialize.
60
+ $widgetTransitFeed = get_option(self::CJT_LASTEST_SCRIPT_OPTION_NAME, array('time' => 0));
 
 
 
 
61
  // Only if cache is expires read feed from server.
62
  if ((time() - $widgetTransitFeed['time']) > self::LATEST_SCRIPT_EXPIRES) {
63
+ # INitiaize
64
+ $fieldsNames = array('title', 'link', 'description');
65
  # Get Latest Scripts/Packages from feed.
66
+ $scriptsFeed = new CJT_Framework_Wordpress_Feed(cssJSToolbox::CJT_WEB_SITE_DOMAIN, 'category/scripts/feed/', $fieldsNames);
67
+ $widgetTransitFeed['scripts'] = $scriptsFeed->getLatestItems(7);
68
+ # Get latest extensions from feed
69
+ $extensionsFeed = new CJT_Framework_Wordpress_Feed(cssJSToolbox::CJT_WEB_SITE_DOMAIN, 'category/extensions/feed/', $fieldsNames);
70
+ $widgetTransitFeed['extensions'] = $extensionsFeed->getLatestItems(7);
 
 
 
71
  # Get latest news from news feed.
72
+ $newsFeed = new CJT_Framework_Wordpress_Feed(cssJSToolbox::CJT_WEB_SITE_DOMAIN, 'category/news/feed/', $fieldsNames);
73
+ $widgetTransitFeed['news'] = $newsFeed->getLatestItems(1);
74
+ # Cache only if there is no errors.
75
+ if (!$newsFeed->isError() && !$scriptsFeed->isError() && !$extensionsFeed->isError()) {
76
+ # Store cache time.
77
+ $widgetTransitFeed['time'] = time();
78
+ update_option(self::CJT_LASTEST_SCRIPT_OPTION_NAME, $widgetTransitFeed);
79
  }
 
 
 
80
  }
81
+ # For versions 8.0 it will produce PHP notice because extensions item is not being exists in the cache
82
+ # The error will be always visible until next caching cycle!
83
+ # temporary solution
84
+ else if (!isset($widgetTransitFeed['extensions'])) {
85
+ $widgetTransitFeed['extensions'] = array();
86
+ }
87
+ # Returns
88
  return $widgetTransitFeed;
89
  }
90
 
models/template.php CHANGED
@@ -136,10 +136,12 @@ class CJTTemplateModel extends CJTHookableClass {
136
  $dbDriver = cssJSToolbox::getInstance()->getDBDriver();
137
  $saveId = isset($this->inputs['item']['template']['id']) ? $this->inputs['item']['template']['id'] : null;
138
  // Load template data is exists (load), change values (setData).
139
- $template = CJTxTable::getInstance('template')->set('id', $saveId)
140
- ->load()
141
- ->setData($this->inputs['item']['template'])
142
- ->setQueueName();
 
 
143
  $templateDirName = $template->get('queueName');
144
  $templateDir = "wp-content/{$fSConfig->contentDir}/{$fSConfig->templatesDir}/{$templateDirName}";
145
  if (!$template->get('id')) { // Add new Template
136
  $dbDriver = cssJSToolbox::getInstance()->getDBDriver();
137
  $saveId = isset($this->inputs['item']['template']['id']) ? $this->inputs['item']['template']['id'] : null;
138
  // Load template data is exists (load), change values (setData).
139
+ $template = CJTxTable::getInstance('template');
140
+ if ($saveId) {
141
+ $template->set('id', $saveId)->load();
142
+ }
143
+ $template->setData($this->inputs['item']['template'])
144
+ ->setQueueName();
145
  $templateDirName = $template->get('queueName');
146
  $templateDir = "wp-content/{$fSConfig->contentDir}/{$fSConfig->templatesDir}/{$templateDirName}";
147
  if (!$template->get('id')) { // Add new Template
readme.txt CHANGED
@@ -2,44 +2,52 @@
2
  Contributors: wipeoutmedia
3
  Author URL: http://css-javascript-toolbox.com
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EWDWF75JHT9Q6
5
- Tags: post, posts, admin, sidebar, page, pages, image, plug, plugin, customise, style, scripts, hack, Wordpress, HTML, CSS, JavaScript, HTML5, jQuery, PHP, code, script, scripts, manage, management, display, output, header, footer, apply, requests, match, hook, execute, run
6
  License: GPLv2 or later
7
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
  Requires at least: 3.9
9
- Tested up to: 3.9.2
10
- Stable tag: 7.2
11
 
12
  Easily add custom CSS, JavaScript, HTML and PHP code to unique CJT code blocks and assign them wherever you want.
13
 
14
  == Description ==
15
- CSS & JavaScript Toolbox is a powerful code management plugin that gives you the tools to easily and safely modify or extend the functionality and appearance of your WordPress-powered website. You do this by adding custom code directly into unique code blocks and assign them to pages, posts, custom posts, categories, URLs, expressions, and loads more!
16
 
17
- = CJT Comes with Unlimited number of Extensions =
18
- CJT is providing a cool extensions that can be used through CJT Shortcode Form. Both [FREE CJT Extensions](https://wordpress.org/plugins/search.php?q=cjte) and [Premium CJT Extensions](http://css-javascript-toolbox.com/script-extensions/) are available for downloads.
19
 
20
- = Like CJT Free Upgrade to CJT Pro/Dev =
21
- If you like CJT Free, we hope you can support the continued development by upgrading to CJT Pro or CJT Dev.
22
- Click to learn about the [benefits of upgrading to CJT Pro/Dev](http://css-javascript-toolbox.com/pricing).
23
 
24
- [youtube http://www.youtube.com/watch?v=iyjq7IXBC5E]
 
25
 
26
- = So what exactly is CJT? =
27
- Just like plugins, scripts can modify or extend the functionality and appearance of your website. Unlike plugins, adding and configuring script code files can be frustrating. CJT makes this process pleasant and easy. In fact, adding scripts and styles with CJT can be done in as little as two steps:
28
- 1) Add your code
29
- 2) Assign where it goes
30
 
31
- = Who is this plugin for? =
32
- This plugin is primarily intended for WordPress website developers and designers. But that is not to say that others would not be able to get use out of it. CJT can be used for a lot of things from; teachers teaching and students learning to code, to mum and dad bloggers wanting to add Google Analytics or other scripts to their website. So whether it be adding free/premium scripts, creating and testing new scripts, streamlining development work, making front-end customisations, or even teaching and learning WordPress – CJT is extremely flexible and versatile.
33
 
34
- = Features =
35
- There are way too many features to list on this CJT description page, so if you want to learn more, please click into the [CSS & JavaScript Toolbox website](http://css-javascript-toolbox.com).
 
 
 
 
 
36
 
37
- = Thank You =
38
- We would first like to thank you for installing our WordPress plugin. If you like this plugin, find it useful, and appreciate the huge amount of work that has gone into creating it, you can certainly support our efforts by:
39
 
40
- - Clicking here to [purchase a copy of CJT Pro or CJT Dev](http://css-javascript-toolbox.com/pricing)
41
- - Provide a [feedback review and rating](http://wordpress.org/support/view/plugin-reviews/css-javascript-toolbox) on WordPress.org
42
- - Spreading the word and recommending the CJT plugin to others.
 
 
 
 
 
 
43
 
44
  = Follow the Developments =
45
  If you like to know more about the development state, issues and to track future versions code please follow us on [GitHub Plugin repository](https://github.com/css-javascript-toolbox/css-javascript-toolbox-plugin).
@@ -97,39 +105,41 @@ Make sure you have copied and pasted the Page, Post, or Category URL exactly as
97
  Hook location feature gives you control over the location of outputting the CSS/JS code. This is useful in case overriding another plugins' CSS is required. Also sometimes its better to put your JS code in the footer to avoid slowing down your page load.
98
 
99
  = I received a weird error, what do I do now? =
100
- Due to the overwhelming amount of emails we get for users requesting support for our CJT plugins, we cannot provide support for the CJT Free plugin (hosted here on WordPress.org) at this stage unfortunately. If you wish to receive priority support, please visit our CJT website and [purchase a license for any of our plugins](http://css-javascript-toolbox.com/pricing).
101
 
102
  == Screenshots ==
103
 
104
- 1. Code Block
105
- 2. Create code blocks
106
- 3. Blocks List
107
- 4. Editor Syntax Highlights and Error Checker
108
- 5. Code Auto Completion and Code Snippets Extension
109
- 6. Editing Tools
110
- 7. Save Load Code Tools
111
- 8. Assigning Wordpress Pages
112
- 9. Assigning Wordpress Posts
113
- 10. Assigning Custom Posts
114
- 11. Assigning Categories
115
- 12. Auxiliary Assignments
116
- 13. Advanced Assignment (URLs and Regular Expressions)
117
- 14. Change State Batch Tools
118
- 15. Change Location/Hook Batch Tools
119
- 16. Delete and Backup Tools
120
- 17. Block Code-Files Manager Form
121
- 18. Hide/Show Assignment Panel window
122
- 19. Single Window Full Screen Mode
123
- 20. Change Editor Theme
124
- 21. Templates Manager Form
125
- 22. Templates Lookup Form
126
- 23. Insert Block Shortcode via TinyMCE Button
127
- 24. Create Metabox Block At Edit post Level
128
- 25. Blocks Screenshor by creating Backup from all existing Code Blocks
129
- 26. Block Revisions Dialog
130
- 27. Block Info Dialog
131
 
132
  == Changelog ==
 
 
 
 
 
 
 
 
133
  = 7.2 =
134
  * Fix: Block Code file name moving away when open/close Block metabox
135
  * Fix: Shortcode list is too small for Shortcode names
2
  Contributors: wipeoutmedia
3
  Author URL: http://css-javascript-toolbox.com
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EWDWF75JHT9Q6
5
+ Tags: post, posts, admin, sidebar, page, pages, widget, image, shortcode, plugin, google, customise, style, scripts, hack, Wordpress, HTML, CSS, JavaScript, HTML5, jQuery, PHP, code, script, scripts, manage, management, display, output, header, footer, apply, requests, match, hook, execute, run
6
  License: GPLv2 or later
7
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
  Requires at least: 3.9
9
+ Tested up to: 4.0
10
+ Stable tag: 8.0
11
 
12
  Easily add custom CSS, JavaScript, HTML and PHP code to unique CJT code blocks and assign them wherever you want.
13
 
14
  == Description ==
15
+ CSS & JavaScript Toolbox (or CJT) is a powerful code management plugin that gives you the tools to easily and safely modify or extend the functionality and appearance of your WordPress-powered website.
16
 
17
+ = Perfect for WordPress website development =
18
+ Whether it be adding free/premium scripts, creating and testing new scripts, streamlining development work, making front-end customisations, or even teaching and learning WordPress – CJT is extremely flexible and versatile.
19
 
20
+ = How does it work? =
21
+ Since CJT was designed to be easy, adding scripts and styles can be done in as little as two steps.
 
22
 
23
+ - adding your code directly into unique CJT code blocks
24
+ - assigning where these code blocks go
25
 
26
+ CJT code blocks can be assigned to pages, posts, custom posts, categories, URLs, expressions, and practically anywhere you want on your website. Code block shortcodes can also provide you with further placement accuracy.
 
 
 
27
 
28
+ = Want more features? =
29
+ Get CJT extension plugins that provide more features such as:
30
 
31
+ - [Editor Toolbox](http://css-javascript-toolbox.com/extensions/editor-toolbox)
32
+ - [Editor Themes](http://css-javascript-toolbox.com/extensions/editor-themes)
33
+ - [Block Widget Linker](http://css-javascript-toolbox.com/extensions/block-widget-linker)
34
+ - [Import Export Tool](http://css-javascript-toolbox.com/extensions/import-export-tool)
35
+ - [Code Auto Completion](http://css-javascript-toolbox.com/extensions/code-auto-completion)
36
+ - [Advanced Theme Editor](http://css-javascript-toolbox.com/extensions/advanced-theme-editor)
37
+ - [Advanced Plugins Editor](http://css-javascript-toolbox.com/extensions/advanced-plugins-editor)
38
 
39
+ = Want to add great scripts? =
40
+ Get script plugins that can be installed on your website running CJT:
41
 
42
+ - [Image Zoomer](https://wordpress.org/plugins/cjte-image-zoomer/)
43
+ - [Black & White Image Effect](https://wordpress.org/plugins/cjte-black-white-image-effect/)
44
+
45
+ = Support Us =
46
+ Thank you for your interest in CSS & JavaScript Toolbox.
47
+ Please support us by:
48
+
49
+ - Providing a [feedback review and rating](http://wordpress.org/support/view/plugin-reviews/css-javascript-toolbox) on WordPress.org
50
+ - Spreading the word and recommending CJT to others.
51
 
52
  = Follow the Developments =
53
  If you like to know more about the development state, issues and to track future versions code please follow us on [GitHub Plugin repository](https://github.com/css-javascript-toolbox/css-javascript-toolbox-plugin).
105
  Hook location feature gives you control over the location of outputting the CSS/JS code. This is useful in case overriding another plugins' CSS is required. Also sometimes its better to put your JS code in the footer to avoid slowing down your page load.
106
 
107
  = I received a weird error, what do I do now? =
108
+ Due to the overwhelming amount of emails we get for users requesting support for our CJT plugins, we cannot provide support for the CJT Free plugin (hosted here on WordPress.org) at this stage unfortunately. If you wish to receive priority support, please visit our CJT website and [purchase a license for any of our products](http://css-javascript-toolbox.com/pricing).
109
 
110
  == Screenshots ==
111
 
112
+ 1. Add your code, then assign where it goes
113
+ 2. Create New Code Block dialog box
114
+ 3. Master Admin Toolbar at top, and minimised Code Blocks below
115
+ 4. Change editor language for syntax highlighting and error checking
116
+ 5. Assigning WordPress Pages and sub-pages
117
+ 6. Assigning WordPress Posts
118
+ 7. Assigning Custom Posts
119
+ 8. Assigning Categories and sub-categories
120
+ 9. Auxiliary Assignments
121
+ 10. Advanced Assignments (URLs and Regular Expressions)
122
+ 11. Change State batch tools
123
+ 12. Change Location/Hook batch tools
124
+ 13. Delete and Backup Tools
125
+ 14. Code-Files management form (within each Code Block)
126
+ 15. Templates Manager form to store all of your Code Templates
127
+ 16. Templates Lookup form to embed or link Code Templates to Code Blocks
128
+ 17. Insert Code Block shortcodes via TinyMCE button
129
+ 18. Metabox Code Block at the Edit Page/Post level
130
+ 19. Create backups of all your existing Code Blocks
131
+ 20. Create/Restore Code Block revisions
132
+ 21. See Code Block information at a glance
 
 
 
 
 
 
133
 
134
  == Changelog ==
135
+ = 8.0 =
136
+ * Show premium extensions list in Dashboard Widget instead of Scripts Packages
137
+ * Framework update that makes CJT functionality more extendable
138
+ * Remove: Editor Toolbox Buttons and Block File, Edit and View menu as it now presented in separated extension
139
+ * Remove: Editor Themes Switcher list as it now presented in separated extension
140
+ * Remove: Import and Export Tools as it not presented in separated extension
141
+ * Fix: Conflict with other themes like X Theme
142
+
143
  = 7.2 =
144
  * Fix: Block Code file name moving away when open/close Block metabox
145
  * Fix: Shortcode list is too small for Shortcode names
views/blocks/block/public/css/block.css CHANGED
@@ -136,24 +136,6 @@
136
  top: -2px;
137
  background-position: center center;
138
  }
139
- .popup-menu.editor-themes-list {
140
- left: 10px !important;
141
- background-color: transparent !important;
142
- border: none !important;
143
- display: block;
144
- width: 196px;
145
- height: 220px;
146
- overflow: auto;
147
- padding: 20px !important;
148
- margin-left: -202px;
149
- margin-top: -25px !important;
150
- }
151
- .popup-menu.editor-themes-list ul {margin: 0px; overflow: auto; height: 182px; border: 1px solid #bbb; padding: 13px;}
152
- .popup-menu.editor-themes-list a {
153
- padding-top: 0px !important;
154
- margin: 0px !important;
155
- }
156
- .popup-menu.editor-themes-list a.selected {color: #0074a2 !important;}
157
 
158
  .block-toolbox a.cjttbl-save.cjttbs-disabled {background: url(../images/toolbox/save-inactive.png); }
159
  .block-toolbox a.cjttbl-revisions { background-image: url(../images/toolbox/revisions.png); }
@@ -174,15 +156,8 @@
174
  height: 350px;
175
  top: 5px;
176
  margin-left: 10px;
 
177
  }
178
- .cjt-toolbox.editor-toolbox .icons-group a.cjt-tb-link {margin: 6px 0 0 6px;}
179
- .cjt-toolbox.editor-toolbox a.cjttbl-fullscreen {background-image: url(../images/editor-toolbox/maximise-editor.png);}
180
- .cjt-toolbox.editor-toolbox a.cjttbl-fullscreen.maximized {background-image: url(../images/editor-toolbox/minimise-editor.png);}
181
- .cjt-toolbox.editor-toolbox a.cjttbl-font-large {background-image: url(../images/editor-toolbox/font-large.png);}
182
- .cjt-toolbox.editor-toolbox a.cjttbl-font-small {background-image: url(../images/editor-toolbox/font-small.png);}
183
- .cjt-toolbox.editor-toolbox a.cjttbl-reset-font {background-image: url(../images/editor-toolbox/font-reset.png);}
184
- .cjt-toolbox.editor-toolbox a.cjttbl-clear-block {background-image: url(../images/editor-toolbox/clear-block.png);}
185
- .cjt-toolbox.editor-toolbox a.cjttbl-editor-theme {background-image: url(../images/editor-toolbox/theme.png);}
186
 
187
  .loading-block{
188
  font-weight: bold;
136
  top: -2px;
137
  background-position: center center;
138
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  .block-toolbox a.cjttbl-save.cjttbs-disabled {background: url(../images/toolbox/save-inactive.png); }
141
  .block-toolbox a.cjttbl-revisions { background-image: url(../images/toolbox/revisions.png); }
156
  height: 350px;
157
  top: 5px;
158
  margin-left: 10px;
159
+ display: none;
160
  }
 
 
 
 
 
 
 
 
161
 
162
  .loading-block{
163
  font-weight: bold;
views/blocks/block/public/css/menu.css DELETED
@@ -1,61 +0,0 @@
1
- #block-menu {
2
- display: none;
3
- position: absolute;
4
- top: 2px;
5
- left: 358px;
6
- padding: 10px;
7
- margin: 0px 0 0 0;
8
- z-index: 10;
9
- border: none;
10
- background-color: transparent;
11
- }
12
-
13
- #block-menu>li {
14
- display: inline-block;
15
- margin: 0px;
16
- float: none;
17
- clear: none;
18
- width: initial;
19
- }
20
- #block-menu>li li {
21
- margin: 4px 0px 3px 0px;
22
- float: none;
23
- }
24
-
25
- #block-menu a {
26
- padding: 0px 7px 0px 5px !important;
27
- font-size: 13px;
28
- text-decoration: none;
29
- font-family: sans-serif;
30
- display: inline-block;
31
- border: none;
32
- background-color: transparent !important;
33
- line-height: 0;
34
- }
35
- #block-menu li ul {
36
- position: absolute !important;
37
- width: 206px;
38
- margin-bottom: 0px;
39
- border: 1px solid #bbb;
40
- margin-top: 12px;
41
- padding: 2px 0px 6px 0px;
42
- }
43
-
44
- .ui-menu-divider {
45
- /* background-color: #bbb !important; */
46
- height: 1px;
47
- width: 70px;
48
- margin: 7px 0px 0px 5px !important;
49
- border: none;
50
- }
51
-
52
- #block-menu>li a span {
53
- width: initial;
54
- height: initial;
55
- background-image: none;
56
- }
57
-
58
- #block-menu a:hover {
59
- background-image: none;
60
- background-color: transparent !important;
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/blocks/block/public/images/editor-toolbox/clear-block.png DELETED
Binary file
views/blocks/block/public/images/editor-toolbox/font-large.png DELETED
Binary file
views/blocks/block/public/images/editor-toolbox/font-reset.png DELETED
Binary file
views/blocks/block/public/images/editor-toolbox/font-small.png DELETED
Binary file
views/blocks/block/public/images/editor-toolbox/maximise-editor.png DELETED
Binary file
views/blocks/block/public/images/editor-toolbox/minimise-editor.png DELETED
Binary file
views/blocks/block/public/images/editor-toolbox/theme.png DELETED
Binary file
views/blocks/block/public/js/jquery.block/jquery.block.js CHANGED
@@ -110,222 +110,6 @@
110
  blockName : 'span.block-name',
111
  insideMetabox : 'div.inside'
112
  };
113
-
114
- /**
115
- * put your comment there...
116
- *
117
- * @type Object
118
- */
119
- var Buttons = new function() {
120
-
121
- /**
122
- * put your comment there...
123
- *
124
- * @type T_JS_FUNCTION
125
- */
126
- this.EditorToolbox = new function() {
127
-
128
- /**
129
- *
130
- */
131
- this.EditorThemes = new function() {
132
- // Initialize.
133
- this.block = null;
134
- // Create Unattached Themes list
135
- // to be used accross all the blocks.
136
- var theme = null;
137
- var themesUIListContainer = $('<div class="popup-menu editor-themes-list"></div>').css({display: 'none'});
138
- var themesUIList = $('<ul></ul>').appendTo(themesUIListContainer);
139
- var themesAnchorsMap = {}, themes = [
140
- 'ambiance',
141
- 'chaos',
142
- 'chrome',
143
- 'clouds',
144
- 'clouds_midnight',
145
- 'cobalt',
146
- 'crimson_editor',
147
- 'dawn',
148
- 'dreamweaver',
149
- 'eclipse',
150
- 'github',
151
- 'idle_fingers',
152
- 'katzenmilch',
153
- 'kr',
154
- 'kuroir',
155
- 'merbivore',
156
- 'merbivore_soft',
157
- 'mono_industrial',
158
- 'monokai',
159
- 'pastel_on_dark',
160
- 'solarized_dark',
161
- 'solarized_light',
162
- 'terminal',
163
- 'textmate',
164
- 'tomorrow',
165
- 'tomorrow_night',
166
- 'tomorrow_night_blue',
167
- 'tomorrow_night_bright',
168
- 'tomorrow_night_eighties',
169
- 'twilight',
170
- 'vibrant_ink',
171
- 'xcode'
172
- ];
173
-
174
- /**
175
- * put your comment there...
176
- *
177
- * @param event
178
- */
179
- var _onswitchtheme = function(event) {
180
- // Get theme name associated with the link.
181
- var editorTheme = $(event.target).data('ace-theme-key');
182
- var $this = Buttons.EditorToolbox.EditorThemes;
183
- // Save theme.
184
- $this.block.block.set('editorTheme', editorTheme);
185
- // Select menu theme.
186
- $this.selectMenuTheme();
187
- // Set editor theme.
188
- $this.setEditorTheme();
189
- // Link Inactive.
190
- return false;
191
- };
192
-
193
- /**
194
- * put your comment there...
195
- *
196
- * @param button
197
- */
198
- var _oncallback = function(targetList, button) {
199
- // Init.
200
- var cObject = Buttons.EditorToolbox.EditorThemes;
201
- // Associate list to current activate block.
202
- cObject.block = this;
203
- // Select default.
204
- cObject.selectMenuTheme();
205
- // ACE Themes list style.
206
- cObject.applyTheme(this);
207
- // Add the list just after the button.
208
- button.jButton.after(targetList);
209
- }
210
-
211
- /**
212
- *
213
- */
214
- this.applyTheme = function(block) {
215
- // Apply theme to Themes list.
216
- themesUIList.css('background-color', block.theme.backgroundColor);
217
- // Apply to block components
218
- CJTBlockCodeFileView.applyTheme(block);
219
- CJTBlockMenuView.applyTheme(block);
220
- };
221
-
222
- /**
223
- *
224
- */
225
- this.getEditorTheme = function() {
226
- return this.block.block.get('editorTheme', 'chrome');
227
- };
228
-
229
- /**
230
- *
231
- */
232
- this.getType = function(block) {
233
- // Associate block for initialize.
234
- // block would be changed again everytime
235
- // a block is initialized
236
- // or menu is selected.
237
- this.block = block;
238
- // Bind to themeLoaded event.
239
- var model = block.block;
240
- var editor = model.aceEditor;
241
- editor.renderer.addEventListener('themeLoaded', $.proxy(
242
- function() {
243
- var jEditor = $(editor.container);
244
- // Set theme colors.
245
- block.theme = {};
246
- block.theme.backgroundColor = jEditor.css('background-color');
247
- block.theme.color = jEditor.css('color');
248
- // Apply Theme to block element.
249
- model.box.css('background-color', block.theme.backgroundColor);
250
- block.block.box.find('.hndle').css('color', block.theme.color);
251
- // ACE Themes list theme.
252
- this.applyTheme(block);
253
- }, this)
254
- );
255
- // Set default theme.
256
- this.setEditorTheme();
257
- // Type object.
258
- return {
259
-
260
- // Callback
261
- callback : _oncallback,
262
-
263
- /**
264
- * put your comment there...
265
- *
266
- * @type String
267
- */
268
- type : 'Popup',
269
-
270
- /**
271
- *
272
- */
273
- params : {
274
- // Parameters for PopupList type button.
275
- _type : {
276
- targetElement : themesUIListContainer,
277
- targetElementObject : true
278
- }
279
- }
280
- }
281
- };
282
-
283
- /**
284
- *
285
- */
286
- this.selectMenuTheme = function() {
287
- // Get editor theme.
288
- var editorTheme = this.getEditorTheme();
289
- // Clear any previously selected item.
290
- themesUIList.find('a').removeClass('active');
291
- // Select default.
292
- themesAnchorsMap[editorTheme].addClass('active');
293
- };
294
-
295
- /**
296
- *
297
- */
298
- this.setEditorTheme = function() {
299
- // INitialize.
300
- var model = this.block.block;
301
- var editor = model.aceEditor;
302
- // Set editor theme.
303
- // TODO: Full theme name might be saved somewhere!
304
- var themePath = 'ace/theme/' + this.getEditorTheme();
305
- // Change theme.
306
- editor.setTheme(themePath);
307
- };
308
-
309
- // Build list.
310
- $.each(themes, $.proxy(
311
- function(index, themeName) {
312
- // Add item to list.
313
- var listItem = $('<li></li>').appendTo(themesUIList);
314
- // Create link + replace name with the anchor.
315
- themesAnchorsMap[themeName] = $('<a href="#">' + CJTJqueryBlockI18N['ace_theme-' + themeName] + '</a>').appendTo(listItem)
316
- // Class.
317
- .addClass('cjt-link')
318
- // Store theme key.
319
- .data('ace-theme-key', themeName)
320
- // Handle item click.
321
- .click(_onswitchtheme);
322
- }, this)
323
- );
324
-
325
- };
326
-
327
- }
328
- };
329
 
330
  /**
331
  * Block jQuery Plugin.
@@ -391,6 +175,9 @@
391
  */
392
  this.toolbox = null;
393
 
 
 
 
394
  /**
395
  * Event handler for cancel edit block name.
396
  *
@@ -408,19 +195,6 @@
408
  this.block.box.find('.file').css({visibility : 'visible'});
409
  }
410
 
411
- /**
412
- *
413
- */
414
- this._onclearblock = function() {
415
- var aceEditor = this.block.aceEditor;
416
- //Directly clear using setValue('') won't save the history!
417
- // Select all text.
418
- aceEditor.selectAll();
419
- // Replace content with empty string!
420
- aceEditor.getSession().replace(aceEditor.getSelectionRange(), '');
421
- aceEditor.focus();
422
- }
423
-
424
  /**
425
  *
426
  *
@@ -562,71 +336,6 @@
562
  inputText.focus();
563
  }
564
  }
565
-
566
- /**
567
- *
568
- */
569
- this._onfontsize = function(event, params) {
570
- var editor = $(this.block.aceEditor.container);
571
- // Reset font size to default.
572
- if (params.reset) {
573
- // Remove fontSize and Line-Height rules!
574
- fontSize = '';
575
- }
576
- else {
577
- var tick = 2;
578
- // Get current font-size.
579
- var fontSize = editor.css('font-size'); // Font size in pixels!
580
- fontSize = (parseInt(fontSize) + (params.direction * tick)) + 'px';
581
- }
582
- // Reset Or Increase (+) Or decrease (-) font size based on the given parameter.
583
- editor.css({'font-size' : fontSize, 'line-height' : fontSize});
584
- }
585
-
586
- /**
587
- *
588
- */
589
- this._onfullscreen = function(event) {
590
- // Initialize vars!
591
- var block = this.block;
592
- var elementsToDock = $.merge($.merge([], this.extraDocks), this.defaultDocks);
593
- var newMode = '';
594
- // Document body.
595
- $('body').toggleClass('fullscreen').hasClass('fullscreen');
596
- // Enter/Exit Full Screen mode!
597
- if (block.box.toggleClass('fullscreen').hasClass('fullscreen')) {
598
- newMode = 'fullscreen';
599
- // Defined resize handler.
600
- var resizer = $.proxy(
601
- function() {
602
- $.each(elementsToDock, $.proxy(
603
- function(index, item) {
604
- // Dock all defined elements!
605
- this.dock(item.element, item.pixels);
606
- }, this)
607
- );
608
- }, this);
609
- // Bind to handler.
610
- $(window).bind('resize.cjtfullscreen', resizer);
611
- // Call it.
612
- resizer();
613
- }
614
- else {
615
- // Reset to normal height.
616
- $.each(elementsToDock, $.proxy(
617
- function(index, item) {
618
- $(item.element).css('height', '');
619
- }, this)
620
- );
621
- $(window).unbind('resize.cjtfullscreen');
622
- }
623
- // Screen mode title.
624
- $(event.target).attr('title', CJTJqueryBlockI18N['screenmode_' + newMode + 'Title']);
625
- // Refresh/Redraw editor.
626
- block.aceEditor.resize();
627
- // Toggle Toolbox fullscreen button icon.
628
- this.editorToolbox.buttons['fullscreen'].jButton.toggleClass('maximized');
629
- }
630
 
631
  /**
632
  *
@@ -895,19 +604,6 @@
895
  );
896
  }
897
 
898
- /**
899
- *
900
- */
901
- this.dock = function(elements, pixelsToRemove) {
902
- // Initialize.
903
- var alwaysRemove = 33;
904
- pixelsToRemove = (pixelsToRemove != undefined) ? (pixelsToRemove + alwaysRemove) : alwaysRemove;
905
- // There're always 33 pixels need to be removed from the Code area
906
- var fixedHeight = this.block.box.height() - pixelsToRemove;
907
- var heightInPixels = fixedHeight + 'px';
908
- $(elements).css('height', heightInPixels);
909
- }
910
-
911
  /**
912
  *
913
  *
@@ -1053,19 +749,12 @@
1053
  var model = this.block;
1054
  // LOAD MODEL.
1055
  model.load();
1056
- // Load ACE Editor Settings.
1057
- model.aceEditor.setOptions(model.get('aceEditorMenuSettings', {showPrintMargin : false}));
1058
  // Initialize editor toolbox.
1059
  this.editorToolbox = model.box.find('.editor-toolbox').CJTToolBox({
1060
  context : this,
1061
- handlers : {
1062
- 'fullscreen' : {callback : this._onfullscreen},
1063
- 'font-large' : {callback : this._onfontsize, params : {direction: 1}},
1064
- 'font-small' : {callback : this._onfontsize, params : {direction: -1}},
1065
- 'reset-font' : {callback : this._onfontsize, params : {reset : true}},
1066
- 'clear-block' : {callback : this._onclearblock},
1067
- 'editor-theme' : Buttons.EditorToolbox.EditorThemes.getType(this)
1068
- }
1069
  }).get(0).CJTToolBox;
1070
  // Default to DOCK!!
1071
  this.defaultDocks = [{element : this.block.aceEditor.container, pixels : 7}];
@@ -1082,10 +771,15 @@
1082
  this.switchState(this.features.state);
1083
  // Prepare input elements for notifying user changes.
1084
  this.notifySaveChanges = (new notifySaveChangesProto(this)).initDIFields();
 
 
 
 
1085
  // LOAD EVENT.
1086
- this.onLoad();
 
 
1087
  // Block Code File.
1088
- this.menu = new CJTBlockMenu(this);
1089
  this.codeFile = new CJTBlockFile(this);
1090
  }
1091
 
110
  blockName : 'span.block-name',
111
  insideMetabox : 'div.inside'
112
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
  /**
115
  * Block jQuery Plugin.
175
  */
176
  this.toolbox = null;
177
 
178
+ // Block Plugins
179
+ CJTBlockObjectPluginDockModule.plug(this);
180
+
181
  /**
182
  * Event handler for cancel edit block name.
183
  *
195
  this.block.box.find('.file').css({visibility : 'visible'});
196
  }
197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  /**
199
  *
200
  *
336
  inputText.focus();
337
  }
338
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
 
340
  /**
341
  *
604
  );
605
  }
606
 
 
 
 
 
 
 
 
 
 
 
 
 
 
607
  /**
608
  *
609
  *
749
  var model = this.block;
750
  // LOAD MODEL.
751
  model.load();
752
+ // Editor default options.
753
+ this.block.aceEditor.setOptions({showPrintMargin : false});
754
  // Initialize editor toolbox.
755
  this.editorToolbox = model.box.find('.editor-toolbox').CJTToolBox({
756
  context : this,
757
+ handlers : {}
 
 
 
 
 
 
 
758
  }).get(0).CJTToolBox;
759
  // Default to DOCK!!
760
  this.defaultDocks = [{element : this.block.aceEditor.container, pixels : 7}];
771
  this.switchState(this.features.state);
772
  // Prepare input elements for notifying user changes.
773
  this.notifySaveChanges = (new notifySaveChangesProto(this)).initDIFields();
774
+ // Set theme object.
775
+ this.theme = {};
776
+ this.theme.backgroundColor = 'white';
777
+ this.theme.color = 'black';
778
  // LOAD EVENT.
779
+ if (this.onLoad !== undefined) {
780
+ this.onLoad();
781
+ }
782
  // Block Code File.
 
783
  this.codeFile = new CJTBlockFile(this);
784
  }
785
 
views/blocks/block/public/js/jquery.block/jquery.block.localization.php CHANGED
@@ -18,42 +18,7 @@ return array(
18
  'location_headerTitle' => cssJSToolbox::getText('Set output location hook to footer'),
19
  'location_footerTitle' => cssJSToolbox::getText('Set output location hook to header'),
20
  'invalidBlockName' => cssJSToolbox::getText('Invalid block name'),
21
- 'screenmode_fullscreenTitle' => cssJSToolbox::getText('Revert code editor to default mode'),
22
- 'screenmode_Title' => cssJSToolbox::getText('Switch code editor to fullscreen mode'),
23
  'linkExternalMessage' => cssJSToolbox::getText('Please enter a list of the external URLs you want to link separated by comma!'),
24
  'couldNotLinkExternals' => cssJSToolbox::getText('Couldn\'t link the externals URI you requested!! Reason:'),
25
  'loadingBlock' => cssJSToolbox::getText('Loading'),
26
- // ACE Themes.
27
- 'ace_theme-ambiance' => cssJSToolbox::getText('Ambiance'),
28
- 'ace_theme-chaos' => cssJSToolbox::getText('Chaos'),
29
- 'ace_theme-chrome' => cssJSToolbox::getText('Chrome'),
30
- 'ace_theme-clouds' => cssJSToolbox::getText('Clouds'),
31
- 'ace_theme-clouds_midnight' => cssJSToolbox::getText('Clouds Midnight'),
32
- 'ace_theme-cobalt' => cssJSToolbox::getText('Cobalt'),
33
- 'ace_theme-crimson_editor' => cssJSToolbox::getText('Crimson Editor'),
34
- 'ace_theme-dawn' => cssJSToolbox::getText('Dawn'),
35
- 'ace_theme-dreamweaver' => cssJSToolbox::getText('Dreamweaver'),
36
- 'ace_theme-eclipse' => cssJSToolbox::getText('Eclipse'),
37
- 'ace_theme-github' => cssJSToolbox::getText('Github'),
38
- 'ace_theme-idle_fingers' => cssJSToolbox::getText('Idle Fingers'),
39
- 'ace_theme-katzenmilch' => cssJSToolbox::getText('Katzenmilch'),
40
- 'ace_theme-kr' => cssJSToolbox::getText('Kr'),
41
- 'ace_theme-kuroir' => cssJSToolbox::getText('Kuroir'),
42
- 'ace_theme-merbivore' => cssJSToolbox::getText('Merbivore'),
43
- 'ace_theme-merbivore_soft' => cssJSToolbox::getText('Merbivore Soft'),
44
- 'ace_theme-mono_industrial' => cssJSToolbox::getText('Mono Industrial'),
45
- 'ace_theme-monokai' => cssJSToolbox::getText('Monokai'),
46
- 'ace_theme-pastel_on_dark' => cssJSToolbox::getText('Pastel On Dark'),
47
- 'ace_theme-solarized_dark' => cssJSToolbox::getText('Solarized dark'),
48
- 'ace_theme-solarized_light' => cssJSToolbox::getText('Solarized Light'),
49
- 'ace_theme-terminal' => cssJSToolbox::getText('Terminal'),
50
- 'ace_theme-textmate' => cssJSToolbox::getText('Textmate'),
51
- 'ace_theme-tomorrow' => cssJSToolbox::getText('Tomorrow'),
52
- 'ace_theme-tomorrow_night' => cssJSToolbox::getText('Tomorrow Night'),
53
- 'ace_theme-tomorrow_night_blue' => cssJSToolbox::getText('Tomorrow Night Blue'),
54
- 'ace_theme-tomorrow_night_bright' => cssJSToolbox::getText('Tomorrow Night Bright'),
55
- 'ace_theme-tomorrow_night_eighties' => cssJSToolbox::getText('Tomorrow Night Eighties'),
56
- 'ace_theme-twilight' => cssJSToolbox::getText('Twilight'),
57
- 'ace_theme-vibrant_ink' => cssJSToolbox::getText('Vibrant Ink'),
58
- 'ace_theme-xcode' => cssJSToolbox::getText('XCode'),
59
  );
18
  'location_headerTitle' => cssJSToolbox::getText('Set output location hook to footer'),
19
  'location_footerTitle' => cssJSToolbox::getText('Set output location hook to header'),
20
  'invalidBlockName' => cssJSToolbox::getText('Invalid block name'),
 
 
21
  'linkExternalMessage' => cssJSToolbox::getText('Please enter a list of the external URLs you want to link separated by comma!'),
22
  'couldNotLinkExternals' => cssJSToolbox::getText('Couldn\'t link the externals URI you requested!! Reason:'),
23
  'loadingBlock' => cssJSToolbox::getText('Loading'),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  );
views/blocks/block/public/js/menu/block.js DELETED
@@ -1,203 +0,0 @@
1
- /**
2
- *
3
- *
4
- *
5
- */
6
-
7
- (function($) {
8
-
9
- /**
10
- *
11
- *
12
- *
13
- */
14
- CJTBlockMenu = function(block) {
15
-
16
- /**
17
- *
18
- */
19
- this.block = block;
20
-
21
- /**
22
- * put your comment there...
23
- *
24
- */
25
- var _onclicked = function() {
26
- // Initialize.
27
- var blockBox = this.block.block.box;
28
- // Switch only if not closed.
29
- if (!blockBox.hasClass('closed')) {
30
- CJTBlockMenuView.switchTo(blockBox.get(0));
31
- }
32
- };
33
-
34
- this.ondeleteblock = function() {
35
- // Don't delete MENU if it being appended under current block.
36
- if (CJTBlockMenuView.block === this.block) {
37
- CJTBlockMenuView.deattach();
38
- }
39
- };
40
-
41
- /**
42
- * File Menu
43
- */
44
- this.file = new (function(menu) {
45
-
46
- /**
47
- *
48
- *
49
- */
50
- this.delete = function() {
51
- // Delete Block.
52
- block._ondelete();
53
- };
54
-
55
- /**
56
- *
57
- */
58
- this.load = function(method) {
59
- // Initialize.
60
- var model = menu.block.block;
61
- var aceEditor = model.aceEditor;
62
- var editSession = aceEditor.getSession();
63
- // Process related file actions.
64
- switch (method) {
65
- case 'file': // Load file into block.
66
- // Find popup element and clean it up.
67
- var popup = $('#cjt-inline-popup').empty();
68
- var file = $('<input type="file" id="block-file" />').appendTo(popup).change($.proxy(
69
- function() {
70
- if (window.FileReader) {
71
- var reader = new window.FileReader();
72
- var loaded = $.proxy(function(event) {
73
- // Set value.
74
- aceEditor.setValuePossibleUndo(event.target.result);
75
- // Close popup.
76
- tb_remove();
77
- }, this);
78
- reader.addEventListener('loadend', loaded);
79
- reader.addEventListener('load', loaded);
80
- // Read file x
81
- reader.readAsText(file.get(0).files[0]);
82
- }
83
- }, this)
84
- );
85
- tb_show('Load Block From File', '?TB_inline&width=300&height=40&inlineId=cjt-inline-popup');
86
- break;
87
- case 'url':
88
- var inUrl = prompt('Please enter Url to load code from');
89
- if (inUrl) {
90
- CJTBlocksPage.server.send('block', 'loadUrl', {url : inUrl}).done($.proxy(
91
- function(url) {
92
- aceEditor.setValuePossibleUndo(url.content);
93
- }, this)
94
- );
95
- }
96
- break;
97
- default: // Load from server
98
- var requestData = {
99
- blockId : model.get('id'),
100
- fileId : menu.block.codeFile.file.activeFileId,
101
- returnAs : 'json'
102
- };
103
- CJTBlocksPage.server.send('block', 'downloadCodeFile', requestData)
104
- .success($.proxy(
105
- function(code) {
106
- // Set value.
107
- aceEditor.setValuePossibleUndo(code);
108
- }, this)
109
- );
110
- break;
111
- }
112
- }
113
-
114
- /**
115
- *
116
- */
117
- this.save = function(method) {
118
- // initialize.
119
- var block = menu.block;
120
- // Process different save actions.
121
- switch (method) {
122
- case 'file': // Download Code File from server.
123
- var model = block.block;
124
- var requestData = {
125
- blockId : model.get('id'),
126
- fileId : block.codeFile.file.activeFileId,
127
- returnAs : 'file'
128
- };
129
- // Get Download URL.
130
- var codeFileURL = CJTBlocksPage.server.getRequestURL('block', 'downloadCodeFile', requestData);
131
- // Download via new Window.
132
- window.open(codeFileURL);
133
- break;
134
- default: // Save block
135
- block._onsavechanges();
136
- break;
137
- }
138
- };
139
-
140
- })(this);
141
-
142
- /**
143
- *
144
- */
145
- this.edit = new (function(menu) {
146
-
147
- /**
148
- * Directly execute ACE Command
149
- */
150
- this.ace = function(command) {
151
- // Ace Editor.
152
- var model = menu.block.block;
153
- var aceEditor = model.aceEditor;
154
- // Exec command.
155
- aceEditor.execCommand(command);
156
- // Save ACE Settings
157
- switch (command) {
158
- case 'showSettingsMenu':
159
- $('#ace_settingsmenu').parent().parent().click($.proxy(
160
- function(event) {
161
- if (event.shiftKey) { // Save with Shift!
162
- model.set('aceEditorMenuSettings', aceEditor.getOptions());
163
- }
164
- }, this)
165
- );
166
- break;
167
- }
168
- }
169
-
170
- })(this);
171
-
172
- /**
173
- *
174
- */
175
- this.view = new (function(menu) {
176
-
177
- /**
178
- *
179
- */
180
- this.statusVisible = false;
181
-
182
- /**
183
- * Directly execute ACE Command
184
- */
185
- this.statusBar = function() {
186
- if (!this.statusVisible) {
187
- ace.config.loadModule(['ext', 'statusbar'], $.proxy(
188
- function() {
189
- var StatusBar = ace.require('ace/ext/statusbar').StatusBar;
190
- var statusBar = new StatusBar(menu.block.block.aceEditor, menu.block.block.box.find('.inside').get(0));
191
- }, this)
192
- );
193
- this.statusVisible = true;
194
- }
195
- }
196
-
197
- })(this);
198
-
199
- // Switch Menu item when block is clicked.
200
- this.block.block.box.click($.proxy(_onclicked, this));
201
- };
202
-
203
- })(jQuery)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/blocks/block/public/js/menu/menu.js DELETED
@@ -1,87 +0,0 @@
1
- /**
2
- *
3
- *
4
- *
5
- */
6
-
7
- (function($) {
8
-
9
- /**
10
- *
11
- *
12
- *
13
- */
14
- CJTBlockMenuView = new function() {
15
-
16
- /**
17
- *
18
- */
19
- this.block;
20
-
21
- /**
22
- *
23
- */
24
- this.menu;
25
-
26
- /**
27
- *
28
- */
29
- this.applyTheme = function(themeBlock) {
30
- // Switch only if displayed for the current block that changing the theme.
31
- if(themeBlock == this.block) {
32
- this.menu.find('li>ul').css({'background-color' : this.block.theme.backgroundColor});
33
- }
34
- };
35
-
36
-
37
- this.deattach = function() {
38
- // Daettach.
39
- this.block = null;
40
- this.menu.css({'display' : 'none'}).detach();
41
- };
42
-
43
- /**
44
- * put your comment there...
45
- *
46
- */
47
- this.initialize = function() {
48
- // Menu Id.
49
- var id = 'block-menu';
50
- // Apply jQueryMenu.
51
- this.menu = $('#' + id).menu({
52
- 'position' : {'my' : 'left top', 'at' : 'left bottom'},
53
- 'select' : $.proxy(
54
- function (event, ui) {
55
- // Get all parents menu.
56
- var parents = $(ui.item).parentsUntil('div.cjt-block').filter('ul').prev('a').get().reverse();
57
- var menuObject = this.block.menu;
58
- // Reach menu object.
59
- $.each(parents, function(index, parent) {
60
- menuObject = menuObject[parent.href.split('#')[1]];
61
- });
62
- // Fire block event.
63
- var itemKeyStruct = ui.item.find('a').prop('href').split('#')[1].split('-');
64
- // Dipatch event handler.
65
- menuObject[itemKeyStruct[0]](itemKeyStruct[1], event, ui);
66
- return false;
67
- }, this)
68
- });
69
- // chain.
70
- return this;
71
- };
72
-
73
- /**
74
- *
75
- */
76
- this.switchTo = function(element) {
77
- // Initialize.
78
- this.block = element.CJTBlock;
79
- // Display menu for that block.
80
- this.block.elements.editBlockName.after(this.menu);
81
- this.applyTheme(this.block);
82
- this.menu.css({'display' : 'block'});
83
- };
84
-
85
- };
86
-
87
- })(jQuery)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/blocks/block/public/js/plugins/dockmodule.js ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ *
3
+ */
4
+
5
+ /**
6
+ * put your comment there...
7
+ *
8
+ * @type T_JS_FUNCTION
9
+ */
10
+ (function($) {
11
+
12
+ /**
13
+ *
14
+ */
15
+ CJTBlockObjectPluginDockModule = new function() {
16
+
17
+ /**
18
+ *
19
+ */
20
+ this.plug = function(block) {
21
+ // Define Dock method
22
+ block.dock = function(elements, pixelsToRemove) {
23
+ // Initialize.
24
+ var alwaysRemove = 33;
25
+ pixelsToRemove = (pixelsToRemove != undefined) ? (pixelsToRemove + alwaysRemove) : alwaysRemove;
26
+ // There're always 33 pixels need to be removed from the Code area
27
+ var fixedHeight = this.block.box.height() - pixelsToRemove;
28
+ var heightInPixels = fixedHeight + 'px';
29
+ $(elements).css('height', heightInPixels);
30
+ }
31
+ };
32
+
33
+ };
34
+
35
+ })(jQuery);
views/blocks/block/tmpl/menu/menu.html.tmpl DELETED
@@ -1,51 +0,0 @@
1
- <ul id="block-menu">
2
- <li>
3
- <a href="#file"><?php echo cssJSToolbox::getText('File') ?></a>
4
- <ul>
5
- <li><a href="#load"><?php echo cssJSToolbox::getText('ReLoad') ?></a></li>
6
- <li><a href="#load-file"><?php echo cssJSToolbox::getText('Load Local') ?></a></li>
7
- <li><a href="#load-url"><?php echo cssJSToolbox::getText('Load Url') ?></a></li>
8
- <li></li>
9
- <li><a href="#save"><?php echo cssJSToolbox::getText('Save') ?></a></li>
10
- <li><a href="#save-file"><?php echo cssJSToolbox::getText('Save File') ?></a></li>
11
- <li></li>
12
- <li><a href="#delete"><?php echo cssJSToolbox::getText('Delete') ?></a></li>
13
- </ul>
14
- </li>
15
- <li>
16
- <a href="#edit"><?php echo cssJSToolbox::getText('Edit') ?></a>
17
- <ul>
18
- <li><a href="#ace-undo"><?php echo cssJSToolbox::getText('Undo') ?></a></li>
19
- <li><a href="#ace-redo"><?php echo cssJSToolbox::getText('Redo') ?></a></li>
20
- <li></li>
21
- <li><a href="#ace-find"><?php echo cssJSToolbox::getText('Find') ?></a></li>
22
- <li><a href="#ace-findnext"><?php echo cssJSToolbox::getText('Find Next') ?></a></li>
23
- <li><a href="#ace-findprevious"><?php echo cssJSToolbox::getText('Find Previous') ?></a></li>
24
- <li></li>
25
- <li><a href="#ace-replace"><?php echo cssJSToolbox::getText('Replace') ?></a></li>
26
- <li></li>
27
- <li><a href="#ace-gotoline"><?php echo cssJSToolbox::getText('Go To Line') ?></a></li>
28
- <li><a href="#ace-golineup"><?php echo cssJSToolbox::getText('Go Line Up') ?></a></li>
29
- <li><a href="#ace-golinedown"><?php echo cssJSToolbox::getText('Go Line down') ?></a></li>
30
- <li></li>
31
- <li><a href="#ace-goToNextError"><?php echo cssJSToolbox::getText('Go To Next Error') ?></a></li>
32
- <li><a href="#ace-goToPreviousError"><?php echo cssJSToolbox::getText('Go To Previous Error') ?></a></li>
33
- <li></li>
34
- <li><a href="#ace-fold"><?php echo cssJSToolbox::getText('Fold') ?></a></li>
35
- <li><a href="#ace-foldall"><?php echo cssJSToolbox::getText('Fold All') ?></a></li>
36
- <li><a href="#ace-unfold"><?php echo cssJSToolbox::getText('UnFold') ?></a></li>
37
- <li><a href="#ace-unfoldall"><?php echo cssJSToolbox::getText('UnFold All') ?></a></li>
38
- <li></li>
39
- <li><a href="#ace-tolowercase"><?php echo cssJSToolbox::getText('To Lower Case') ?></a></li>
40
- <li><a href="#ace-touppercase"><?php echo cssJSToolbox::getText('To Upper Case') ?></a></li>
41
- <li></li>
42
- <li><a href="#ace-showSettingsMenu"><?php echo cssJSToolbox::getText('Settings') ?></a></li>
43
- </ul>
44
- </li>
45
- <li>
46
- <a href="#view"><?php echo cssJSToolbox::getText('View') ?></a>
47
- <ul>
48
- <li><a href="#statusBar"><?php echo cssJSToolbox::getText('Status Bar') ?></a></li>
49
- </ul>
50
- </li>
51
- </ul>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/blocks/block/tmpl/templates/editor-toolbox.html.tmpl CHANGED
@@ -6,13 +6,4 @@
6
  // Disallow direct access.
7
  defined('ABSPATH') or die('Restricted Access');
8
  ?>
9
- <div class="cjt-toolbox editor-toolbox">
10
- <div class="icons-group">
11
- <a href="#" class="cjt-tb-link cjttbl-fullscreen" title="<?php echo $this->localization['screenmode_Title'] ?>"></a>
12
- <a href="#" class="cjt-tb-link cjttbl-editor-theme" title="<?php echo cssJSToolbox::getText('Switch Editor Theme') ?>"></a>
13
- <a href="#" class="cjt-tb-link cjttbl-font-large" title="<?php echo cssJSToolbox::getText('Increase font size in code editor') ?>"></a>
14
- <a href="#" class="cjt-tb-link cjttbl-font-small" title="<?php echo cssJSToolbox::getText('Decrease font size in code editor') ?>"></a>
15
- <a href="#" class="cjt-tb-link cjttbl-reset-font" title="<?php echo cssJSToolbox::getText('Reset font size in code editor') ?>"></a>
16
- <a href="#" class="cjt-tb-link cjttbl-clear-block" title="<?php echo cssJSToolbox::getText('Clear all text in code editor. To undo, click Command-Z for Mac or Ctrl-Z for Windows. Click Save to permanently take affect') ?>"></a>
17
- </div>
18
- </div>
6
  // Disallow direct access.
7
  defined('ABSPATH') or die('Restricted Access');
8
  ?>
9
+ <div class="cjt-toolbox editor-toolbox"><div class="icons-group"></div></div>
 
 
 
 
 
 
 
 
 
views/blocks/block/view.php CHANGED
@@ -81,7 +81,6 @@ class CJTBlocksBlockView extends CJTView {
81
  // Use related scripts.
82
  self::useScripts(__CLASS__,
83
  'jquery',
84
- 'jquery-ui-menu',
85
  'common',
86
  'wp-lists',
87
  'postbox',
@@ -96,11 +95,10 @@ class CJTBlocksBlockView extends CJTView {
96
  'views:blocks:block:public:js:{CJT-}ajax',
97
  'views:blocks:block:public:js:{CJT-}blockproperty',
98
  'views:blocks:block:public:js:optional:{CJT-}revision',
99
- 'views:blocks:block:public:js:{CJT-}menu',
100
- 'views:blocks:block:public:js:menu:{CJT-}_block',
101
  'views:blocks:block:public:js:{CJT-}codefile-manager',
102
  'views:blocks:block:public:js:{CJT-}codefile',
103
  'views:blocks:block:public:js:{CJT-}block',
 
104
  'views:blocks:block:public:js:{CJT-}jquery.block'
105
  );
106
  }
@@ -114,7 +112,6 @@ class CJTBlocksBlockView extends CJTView {
114
  $styles = array(
115
  'thickbox',
116
  'views:blocks:block:public:css:{CJT-}block',
117
- 'views:blocks:block:public:css:{CJT-}menu',
118
  'views:blocks:block:public:css:{CJT-}codefile'
119
  );
120
  // IF WP < 3.8 add compatibility CSS file.
81
  // Use related scripts.
82
  self::useScripts(__CLASS__,
83
  'jquery',
 
84
  'common',
85
  'wp-lists',
86
  'postbox',
95
  'views:blocks:block:public:js:{CJT-}ajax',
96
  'views:blocks:block:public:js:{CJT-}blockproperty',
97
  'views:blocks:block:public:js:optional:{CJT-}revision',
 
 
98
  'views:blocks:block:public:js:{CJT-}codefile-manager',
99
  'views:blocks:block:public:js:{CJT-}codefile',
100
  'views:blocks:block:public:js:{CJT-}block',
101
+ 'views:blocks:block:public:js:plugins:{CJT-}_dockmodule',
102
  'views:blocks:block:public:js:{CJT-}jquery.block'
103
  );
104
  }
112
  $styles = array(
113
  'thickbox',
114
  'views:blocks:block:public:css:{CJT-}block',
 
115
  'views:blocks:block:public:css:{CJT-}codefile'
116
  );
117
  // IF WP < 3.8 add compatibility CSS file.
views/blocks/cjt-block/public/css/block.css CHANGED
@@ -1,9 +1,7 @@
1
  .postbox .inside { margin-right: 6px !important; }
2
  /** reserve Objects Panel space */
3
  .cjcodeblock {margin-right:310px;}
4
- /** Editor toolbox **/
5
- .editor-toolbox a.cjttbl-toggle-objects-panel {background-image: url(../images/editor-toolbox/close-panel.png);}
6
- .editor-toolbox a.cjttbl-toggle-objects-panel.closed {background-image: url(../images/editor-toolbox/open-panel.png);}
7
  /* Pages Panel */
8
  .cjpageblock {width: 315px; height: 100%; position: absolute; right: 3px;}
9
 
1
  .postbox .inside { margin-right: 6px !important; }
2
  /** reserve Objects Panel space */
3
  .cjcodeblock {margin-right:310px;}
4
+
 
 
5
  /* Pages Panel */
6
  .cjpageblock {width: 315px; height: 100%; position: absolute; right: 3px;}
7
 
views/blocks/cjt-block/public/images/editor-toolbox/close-panel.png DELETED
Binary file
views/blocks/cjt-block/public/images/editor-toolbox/open-panel.png DELETED
Binary file
views/blocks/cjt-block/public/js/jquery.block/jquery.block.js CHANGED
@@ -28,12 +28,6 @@
28
  // Plug the assigment panel, get the jQuery ELement for it
29
  var assigmentPanelElement = this.block.box.find('#tabs-' + this.block.get('id'));
30
  this.pagesPanel = assigmentPanelElement.CJTBlockAssignmentPanel({block : this}).get(0).CJTBlockAssignmentPanel;
31
- // Add toolbox button.
32
- var tbIconsGroup = this.block.box.find('.editor-toolbox .icons-group')
33
- tbIconsGroup.children().first().after('<a href="#" class="cjt-tb-link cjttbl-toggle-objects-panel"></a>')
34
- var toggler = this.editorToolbox.add('toggle-objects-panel', {callback : this._ontogglepagespanel});
35
- // Close it if it were closed.
36
- this._ontogglepagespanel({target : toggler.jButton}, this.block.get('pagesPanelToggleState', ''));
37
  // More to Dock with Fullscreen mode!
38
  this.extraDocks = [
39
  {element : assigmentPanelElement.find('.ui-tabs-panel'), pixels : 78},
@@ -47,61 +41,6 @@
47
  {element : assigmentPanelElement.find('.advanced-accordion .ui-accordion-content textarea'), pixels : 182}
48
  ];
49
  };
50
-
51
- /**
52
- *
53
- *
54
- *
55
- *
56
- */
57
- this._ontogglepagespanel = function(event, initialState) {
58
- var toggler = $(event.target);
59
- var block = this.block;
60
- var tabs = block.box.find('.cjt-pages-tab');
61
- var pagesBlock = block.box.find('.cjpageblock');
62
- var codeBlock = block.box.find('.cjcodeblock');
63
- var aceEditor = block.aceEditor;
64
- var newState = '';
65
- // Hide pages panel when:
66
- if (tabs.css('display') != 'none') {
67
- // Hide if initial value == undefined or initial value == closed.
68
- if ((initialState != '') && (initialState != 'undefined')) {
69
- // Hide elements.
70
- tabs.hide();
71
- pagesBlock.css('width', '0px');
72
- codeBlock.animate({'margin-right' : 0}, undefined, undefined,
73
- function() {
74
- toggler.addClass('closed');
75
- // Refresh editor.
76
- aceEditor.resize();
77
- }
78
- );
79
- // Save state.
80
- newState = 'closed';
81
- }
82
- }
83
- else {
84
- // Show elements.
85
- codeBlock.animate({'margin-right' : 320}, undefined, undefined,
86
- function() {
87
- // Use CSS class margin not inline style!
88
- codeBlock.css('margin-right', '');
89
- // Show panel!
90
- pagesBlock.css('width', '');
91
- tabs.show();
92
- toggler.removeClass('closed');
93
- // Refresh editor.
94
- aceEditor.resize();
95
- }
96
- );
97
- }
98
- // Set title based on the new STATE!
99
- toggler.attr('title', CJT_CJT_BLOCKJqueryBlockI18N['assigmentPanel_' + newState + 'Title']);
100
- // Save state.
101
- block.set('pagesPanelToggleState', newState);
102
- // For link to behave inactive.
103
- return false;
104
- }
105
 
106
  // Load block only when loaded by parent model.
107
  this.onLoad = _onload;
28
  // Plug the assigment panel, get the jQuery ELement for it
29
  var assigmentPanelElement = this.block.box.find('#tabs-' + this.block.get('id'));
30
  this.pagesPanel = assigmentPanelElement.CJTBlockAssignmentPanel({block : this}).get(0).CJTBlockAssignmentPanel;
 
 
 
 
 
 
31
  // More to Dock with Fullscreen mode!
32
  this.extraDocks = [
33
  {element : assigmentPanelElement.find('.ui-tabs-panel'), pixels : 78},
41
  {element : assigmentPanelElement.find('.advanced-accordion .ui-accordion-content textarea'), pixels : 182}
42
  ];
43
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
  // Load block only when loaded by parent model.
46
  this.onLoad = _onload;
views/blocks/cjt-block/public/js/jquery.block/jquery.block.localization.php CHANGED
@@ -10,7 +10,5 @@
10
  * Localization text for backups script.
11
  */
12
  return array(
13
- 'assigmentPanel_Title' => cssJSToolbox::getText('Switch code editor to fullwidth mode (hides assignment panel)'),
14
- 'assigmentPanel_closedTitle' => cssJSToolbox::getText('Revert code editor to default mode (show assignment panel)'),
15
  'changesDetectedConfirmMessage' => cssJSToolbox::getText('Changes has been made to the assignment objects. Switching display mode would reset all those changes as it never made. Would you like to discard those changes'),
16
  );
10
  * Localization text for backups script.
11
  */
12
  return array(
 
 
13
  'changesDetectedConfirmMessage' => cssJSToolbox::getText('Changes has been made to the assignment objects. Switching display mode would reset all those changes as it never made. Would you like to discard those changes'),
14
  );
views/blocks/manager/public/css/blocks.css CHANGED
@@ -2,7 +2,7 @@
2
  /* Wordpress Page */
3
  .wrap { position: relative; }
4
  .cjt-banner-bar .cjt-banner-link a, .cjt-banner-bar a:hover, .cjt-banner-bar a:visited{color: #A5581B;}
5
- #cjt-banner-bar-right {right: 0px;position: absolute;top: 2px;text-align: right;}
6
  #cjt-banner-bar-right .cjt-banner-link {float: right; margin-bottom: 6px;}
7
 
8
  #get-packages-icon {display: inline-block; width: 13px; height: 15px; background-image: url('../images/get-packages.png'); margin-left: 3px;margin-bottom: -4px; margin-right: 5px;}
@@ -100,26 +100,4 @@
100
 
101
  /* No Blocks Intro Help text */
102
  cjt-noblocks-intro h2 {font-weight: bold; margin: 4px 0px;}
103
- cjt-noblocks-intro h4 {font-weight: bold; font-size: 15px;}
104
-
105
- h2 {}
106
- #cjtoolbox-admin h2 {
107
- display: inline-block;
108
- }
109
- div#cjtoolbox-admin {}
110
- a#docs-link {
111
- position: relative;
112
- top: -2px;
113
- font-size: 16px;
114
- }
115
- span.cjt-banner-link {
116
- }
117
- span#dicount-code {
118
- font-weight: bold;
119
- font-size: 14px;
120
- background-color: #DFDFDF;
121
- padding: 1px 8px;
122
- }
123
-
124
- #main-title-links {margin-left: 20px;}
125
- #main-title-links a {margin-right: 30px; font-size: 14px;font-weight: bold;}
2
  /* Wordpress Page */
3
  .wrap { position: relative; }
4
  .cjt-banner-bar .cjt-banner-link a, .cjt-banner-bar a:hover, .cjt-banner-bar a:visited{color: #A5581B;}
5
+ #cjt-banner-bar-right {right: 0px;position: absolute;top: 2px;}
6
  #cjt-banner-bar-right .cjt-banner-link {float: right; margin-bottom: 6px;}
7
 
8
  #get-packages-icon {display: inline-block; width: 13px; height: 15px; background-image: url('../images/get-packages.png'); margin-left: 3px;margin-bottom: -4px; margin-right: 5px;}
100
 
101
  /* No Blocks Intro Help text */
102
  cjt-noblocks-intro h2 {font-weight: bold; margin: 4px 0px;}
103
+ cjt-noblocks-intro h4 {font-weight: bold; font-size: 15px;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/blocks/manager/public/js/blocks-page/blocks-page.js CHANGED
@@ -601,7 +601,6 @@ var CJTBlocksPage;
601
  CJTBlocksPage.server = CJTServer;
602
  CJTBlocksPage.server.multiOperation = new CJTBlocksAjaxMultiOperations('blocksPage', 'save_blocks');
603
  // Initilize Global-Blocks Conponents.
604
- CJTBlockMenuView.initialize();
605
  CJTBlockCodeFileView.initialize();
606
  // Make sure CJTBlocks is ready.
607
  CJTBlocksPage.blocks = new CJTBlocks();
601
  CJTBlocksPage.server = CJTServer;
602
  CJTBlocksPage.server.multiOperation = new CJTBlocksAjaxMultiOperations('blocksPage', 'save_blocks');
603
  // Initilize Global-Blocks Conponents.
 
604
  CJTBlockCodeFileView.initialize();
605
  // Make sure CJTBlocks is ready.
606
  CJTBlocksPage.blocks = new CJTBlocks();
views/blocks/manager/tmpl/blocks.html.tmpl CHANGED
@@ -7,14 +7,19 @@
7
  defined('ABSPATH') or die("Access denied");
8
  ?>
9
  <div id="cjtoolbox-admin" class="wrap">
10
- <?php require CJTOOLBOX_VIEWS_PATH . '/blocks/block/tmpl/menu/menu.html.tmpl' ?>
 
 
 
11
  <?php require CJTOOLBOX_VIEWS_PATH . '/blocks/block/tmpl/codefile/codefile.html.tmpl' ?>
12
- <h2><?php echo cssJSToolbox::getText('CSS & Javascript Toolbox Free') ?></h2>
13
- <span id="main-title-links">
14
- <a id="docs-link" target="_blank" href="http://<?php echo cssJSToolbox::CJT_WEB_SITE_DOMAIN ?>/pricing/"><?php echo cssJSToolbox::getText('Upgrade to CJT Pro or CJT Dev') ?></a>
15
- <a id="docs-link" target="_blank" href="http://<?php echo cssJSToolbox::CJT_SCRTIPS_WEB_SITE_DOMAIN ?>/"><?php echo cssJSToolbox::getText('Get Free Script Packages') ?></a>
16
- <a id="docs-link" target="_blank" href="http://<?php echo cssJSToolbox::CJT_WEB_SITE_DOMAIN ?>/documentation/"><?php echo cssJSToolbox::getText('Get Help') ?></a>
17
- </span>
 
 
18
  <div id="cjtoolbox-blocks-page-form" method="post">
19
  <?php wp_nonce_field('cjtoolbox'); ?>
20
  <?php wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false); ?>
7
  defined('ABSPATH') or die("Access denied");
8
  ?>
9
  <div id="cjtoolbox-admin" class="wrap">
10
+ <?php
11
+ $content = '';
12
+ echo CJTBlocksManagerView::trigger('CJTBlocksManagerView.loadglobalcomponents', $content);
13
+ ?>
14
  <?php require CJTOOLBOX_VIEWS_PATH . '/blocks/block/tmpl/codefile/codefile.html.tmpl' ?>
15
+ <div id="custom-icon" class="icon32 blocks-icon32"></div>
16
+ <h2><?php echo cssJSToolbox::getText('CSS & Javascript Toolbox') ?></h2>
17
+ <div id="cjt-banner-bar-right">
18
+ <span class="cjt-banner-link">
19
+ <a target="_blank" href="http://<?php echo cssJSToolbox::CJT_WEB_SITE_DOMAIN ?>/support/"><?php echo cssJSToolbox::getText('Support Forum') ?></a>&nbsp;&nbsp;|&nbsp;&nbsp;
20
+ <a target="_blank" href="http://<?php echo cssJSToolbox::CJT_WEB_SITE_DOMAIN ?>/documentation/"><?php echo cssJSToolbox::getText('Online Documentation') ?></a>
21
+ </span>
22
+ </div>
23
  <div id="cjtoolbox-blocks-page-form" method="post">
24
  <?php wp_nonce_field('cjtoolbox'); ?>
25
  <?php wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false); ?>
views/blocks/manager/view.php CHANGED
@@ -35,6 +35,16 @@ class CJTBlocksManagerView extends CJTView {
35
  */
36
  public $hasBlocks = false;
37
 
 
 
 
 
 
 
 
 
 
 
38
  /**
39
  * put your comment there...
40
  *
35
  */
36
  public $hasBlocks = false;
37
 
38
+ /**
39
+ * put your comment there...
40
+ *
41
+ * @var mixed
42
+ */
43
+ protected static $onloadglobalcomponents = array(
44
+ 'hookType' => CJTWordpressEvents::HOOK_FILTER,
45
+ 'parameters' => array('content')
46
+ );
47
+
48
  /**
49
  * put your comment there...
50
  *
views/blocks/metabox/public/js/jquery.block/jquery.block.js CHANGED
@@ -14,55 +14,10 @@
14
  * @param args
15
  */
16
  CJTBlockPlugin = function(node, args) {
17
-
18
-
19
- /**
20
- * put your comment there...
21
- *
22
- */
23
- var _onload = function() {
24
- // Add toolbox button.
25
- var tbIconsGroup = this.block.box.find('.editor-toolbox .icons-group')
26
- tbIconsGroup.children().first().after('<a href="#" class="cjt-tb-link cjttbl-preview"></a>');
27
- this.editorToolbox.add('preview', {callback : this._onpreviewchanges})
28
- // Set Title.
29
- .jButton.attr('title', CJT_METABOX_BLOCKJqueryBlockI18N.previewLinkTitle);
30
- // Register COMMAND-KEYS.
31
- this.registerMetaboxCommands();
32
- };
33
-
34
- /**
35
- *
36
- */
37
- this._onpreviewchanges = function() {
38
- // Save changes and preview changes when successed!
39
- this._onsavechanges().success(
40
- function() {
41
- $('#post-preview').click();
42
- }
43
- );
44
- }
45
-
46
- /**
47
- *
48
- */
49
- this.registerMetaboxCommands = function() {
50
- // Preview Changes!
51
- this.block.aceEditor.commands.addCommand({
52
- name: 'Preview Changes',
53
- bindKey: {
54
- win : 'Ctrl-I',
55
- mac : 'Command-I'
56
- },
57
- exec: $.proxy(this._onpreviewchanges, this)
58
- });
59
- }
60
-
61
- /**
62
- *
63
- */
64
- this.onLoad = _onload;
65
-
66
  // Initialize base class.
67
  this.initCJTPluginBase(node, args);
68
 
14
  * @param args
15
  */
16
  CJTBlockPlugin = function(node, args) {
17
+ // Code has been removed to CJTe Editor Toolbox extension
18
+ // .
19
+ // .
20
+ // .
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  // Initialize base class.
22
  this.initCJTPluginBase(node, args);
23
 
views/blocks/metabox/public/js/metabox/metabox.js CHANGED
@@ -186,7 +186,6 @@ var CJTBlocksPage;
186
  this.blocks = new CJTBlocks();
187
  this.server = CJTServer;
188
  // Initilize Global-Blocks Conponents.
189
- CJTBlockMenuView.initialize();
190
  CJTBlockCodeFileView.initialize();
191
  // Put CJT code block into actions!
192
  var blocks = this.blocks.getBlocks().CJTBlock({calculatePinPoint : 0});
186
  this.blocks = new CJTBlocks();
187
  this.server = CJTServer;
188
  // Initilize Global-Blocks Conponents.
 
189
  CJTBlockCodeFileView.initialize();
190
  // Put CJT code block into actions!
191
  var blocks = this.blocks.getBlocks().CJTBlock({calculatePinPoint : 0});
views/blocks/metabox/tmpl/metabox.html.tmpl CHANGED
@@ -6,8 +6,11 @@
6
  // Disallow direct access.
7
  defined('ABSPATH') or die("Access denied");
8
 
 
 
 
 
9
  // Block Templates.
10
- require CJTOOLBOX_VIEWS_PATH . '/blocks/block/tmpl/menu/menu.html.tmpl';
11
  require CJTOOLBOX_VIEWS_PATH . '/blocks/block/tmpl/codefile/codefile.html.tmpl';
12
 
13
  // Display as metabox without using Wordpress Metabox APIs.
6
  // Disallow direct access.
7
  defined('ABSPATH') or die("Access denied");
8
 
9
+ // Global Comonents eent
10
+ $content = '';
11
+ echo CJTBlocksMetaBoxView::trigger('CJTBlocksMetaBoxView.loadglobalcomponents', $content);
12
+
13
  // Block Templates.
 
14
  require CJTOOLBOX_VIEWS_PATH . '/blocks/block/tmpl/codefile/codefile.html.tmpl';
15
 
16
  // Display as metabox without using Wordpress Metabox APIs.
views/blocks/metabox/view.php CHANGED
@@ -15,6 +15,16 @@ class CJTBlocksMetaBoxView extends CJTView {
15
  */
16
  protected $blockView = null;
17
 
 
 
 
 
 
 
 
 
 
 
18
  /**
19
  * put your comment there...
20
  *
15
  */
16
  protected $blockView = null;
17
 
18
+ /**
19
+ * put your comment there...
20
+ *
21
+ * @var mixed
22
+ */
23
+ protected static $onloadglobalcomponents = array(
24
+ 'hookType' => CJTWordpressEvents::HOOK_FILTER,
25
+ 'parameters' => array('content')
26
+ );
27
+
28
  /**
29
  * put your comment there...
30
  *
views/dashboard/metabox/statistics/public/css/default.css CHANGED
@@ -1,18 +1,17 @@
1
- table#cjt-statcs-metabox {
2
- width: 100%;
3
- padding: 0 14px 8px;
4
- border-bottom: 1px solid #eeeeee;
5
- color: #999999;
6
- font-size: 14px;
7
- border-top: 1px solid #eeeeee;
8
- }
9
  table#cjt-statcs-metabox strong {color: black;}
10
  #cjt-statcs-metabox th {text-align: right;}
11
  #cjt-statcs-metabox th {padding-bottom: 10px;}
12
  div#cjt-statcs-metabox-info {padding-top: 14px;}
13
- .latest-scripts {padding-left: 22px;}
14
- .latest-scripts a {font-size: 13px;}
15
 
16
- #cjt-statcs-metabox-news {margin-left: 20px;}
17
  .cjt_dw_latestnewstitle {color: #999999; font-size: 14px;}
18
- .cjt_dw_description {color: black; margin-left: 31px;}
 
 
 
 
 
 
 
1
+ .inside > div {margin-left: 20px;}
2
+
3
+ table#cjt-statcs-metabox {width: 100%;padding: 0 14px 8px 0;color: #999999;font-size: 13px;}
 
 
 
 
 
4
  table#cjt-statcs-metabox strong {color: black;}
5
  #cjt-statcs-metabox th {text-align: right;}
6
  #cjt-statcs-metabox th {padding-bottom: 10px;}
7
  div#cjt-statcs-metabox-info {padding-top: 14px;}
 
 
8
 
 
9
  .cjt_dw_latestnewstitle {color: #999999; font-size: 14px;}
10
+ .cjt_dw_description {color: black; margin-left: 21px;}
11
+
12
+ #cjt-statcs-metabox ul, #cjt-statcs-metabox ul li {margin: 0;}
13
+ #cjt-statistics ul.components-list {margin-left: 4px;}
14
+ #cjt-statcs-metabox ul li {margin-top: 5px;}
15
+
16
+ .components-list-container {display: inline-block;}
17
+ .scripts-extensions-container {vertical-align: top; margin-left: 34px !important;}
views/dashboard/metabox/statistics/tmpl/default.html.tmpl CHANGED
@@ -6,48 +6,60 @@
6
  <span class="cjt_dw_latestnewstitle"><?php echo cssJSToolbox::getText('Latest News:') ?> <a target="_blank" href="<?php echo $latestNew['link'] ?>"><?php echo $latestNew['title'] ?></a></span>
7
  <p class="cjt_dw_description"><?php echo $latestNew['description'] ?></p>
8
  </div>
9
- <table id="cjt-statcs-metabox">
10
- <thead>
11
- <tr>
12
- <th colspan="2"><strong><?php echo cssJSToolbox::getText('Total') ?></strong></th>
13
- </tr>
14
- </thead>
15
- <tbody>
16
- <tr>
17
- <td><?php echo cssJSToolbox::getText('Active Code Blocks') ?></td>
18
- <td><strong><?php echo $this->activeBlocks ?></strong></td>
19
- </tr>
20
- <tr>
21
- <td><?php echo cssJSToolbox::getText('Active Metabox Code Blocks') ?></td>
22
- <td><strong><?php echo $this->activeMetaboxBlocks ?></strong></td>
23
- </tr>
24
- <tr>
25
- <td><?php echo cssJSToolbox::getText('Inactive Code Blocks') ?></td>
26
- <td><strong><?php echo $this->inactiveBlocks ?></strong></td>
27
- </tr>
28
- <tr>
29
- <td><?php echo cssJSToolbox::getText('Inactive Metabox Code Blocks') ?></td>
30
- <td><strong><?php echo $this->inactiveMetaboxBlocks ?></strong></td>
31
- </tr>
32
- <tr>
33
- <td><?php echo cssJSToolbox::getText('Code Templates') ?></td>
34
- <td><strong><?php echo $this->templates ?></strong></td>
35
- </tr>
36
- <tr>
37
- <td><?php echo cssJSToolbox::getText('Script Packages') ?></td>
38
- <td><strong><?php echo $this->scriptsPackage ?></strong></td>
39
- </tr>
40
- <tr>
41
- <td class="latest-scripts" colspan="2">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  <?php foreach ($this->feed['scripts'] as $item) : ?>
43
- <em><?php echo cssJSToolbox::getText('Latest') ?>:</em> <a target="_blank" href="<?php echo $item['link'] ?>"><?php echo $item['title'] ?></a>
44
  <?php endforeach; ?>
45
- </td>
46
- </tr>
47
- </tbody>
48
- </table>
49
  <div id="cjt-statcs-metabox-info">
50
- <a target="blank" href="http://<?php echo cssJSToolbox::CJT_WEB_SITE_DOMAIN ?>/pricing/"><?php echo cssJSToolbox::getText('Upgrade to CJT Pro or CJT Dev') ?></a>
51
- <a target="blank" style="float: right;" href="http://<?php echo cssJSToolbox::CJT_SCRTIPS_WEB_SITE_DOMAIN ?>/"><?php echo cssJSToolbox::getText('Get Script Packages') ?></a>
52
- <p><?php echo cssJSToolbox::getText('You\'re using') ?> <strong><?php echo cssJSToolbox::getText('CSS & Javascript Toolbox v') . CJTPlugin::VERSION ?></strong></p>
53
  </div>
6
  <span class="cjt_dw_latestnewstitle"><?php echo cssJSToolbox::getText('Latest News:') ?> <a target="_blank" href="<?php echo $latestNew['link'] ?>"><?php echo $latestNew['title'] ?></a></span>
7
  <p class="cjt_dw_description"><?php echo $latestNew['description'] ?></p>
8
  </div>
9
+ <hr />
10
+ <div>
11
+ <table id="cjt-statcs-metabox">
12
+ <thead>
13
+ <tr>
14
+ <th colspan="2"><strong><?php echo cssJSToolbox::getText('Total') ?></strong></th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <tr>
19
+ <td><?php echo cssJSToolbox::getText('Active Code Blocks') ?></td>
20
+ <td><strong><?php echo $this->activeBlocks ?></strong></td>
21
+ </tr>
22
+ <tr>
23
+ <td><?php echo cssJSToolbox::getText('Active Metabox Code Blocks') ?></td>
24
+ <td><strong><?php echo $this->activeMetaboxBlocks ?></strong></td>
25
+ </tr>
26
+ <tr>
27
+ <td><?php echo cssJSToolbox::getText('Inactive Code Blocks') ?></td>
28
+ <td><strong><?php echo $this->inactiveBlocks ?></strong></td>
29
+ </tr>
30
+ <tr>
31
+ <td><?php echo cssJSToolbox::getText('Inactive Metabox Code Blocks') ?></td>
32
+ <td><strong><?php echo $this->inactiveMetaboxBlocks ?></strong></td>
33
+ </tr>
34
+ <tr>
35
+ <td><?php echo cssJSToolbox::getText('Code Templates') ?></td>
36
+ <td><strong><?php echo $this->templates ?></strong></td>
37
+ </tr>
38
+ <tr>
39
+ <td><?php echo cssJSToolbox::getText('Script Packages') ?></td>
40
+ <td><strong><?php echo $this->scriptsPackage ?></strong></td>
41
+ </tr>
42
+ </tbody>
43
+ </table>
44
+ </div>
45
+ <hr />
46
+ <div id="cjt-statcs-metabox-latest-extensions" class="components-list-container utility-extensions-container">
47
+ <em><?php echo cssJSToolbox::getText('CJT Extensions Plugins') ?>:</em>
48
+ <ul class="components-list">
49
+ <?php foreach ($this->feed['extensions'] as $item) : ?>
50
+ <li><a target="_blank" href="<?php echo $item['link'] ?>" title="<?php echo strip_tags($item['description']) ?>"><?php echo $item['title'] ?></a></li>
51
+ <?php endforeach; ?>
52
+ </ul>
53
+ </div>
54
+ <div id="cjt-statcs-metabox-latest-scripts" class="components-list-container scripts-extensions-container">
55
+ <em><?php echo cssJSToolbox::getText('CJT Script Plugins') ?>:</em>
56
+ <ul class="components-list">
57
  <?php foreach ($this->feed['scripts'] as $item) : ?>
58
+ <li><a target="_blank" href="<?php echo $item['link'] ?>" title="<?php echo strip_tags($item['description']) ?>"><?php echo $item['title'] ?></a></li>
59
  <?php endforeach; ?>
60
+ </ul>
61
+ </div>
62
+ <hr />
 
63
  <div id="cjt-statcs-metabox-info">
64
+ <a target="blank" href="http://<?php echo cssJSToolbox::CJT_WEB_SITE_DOMAIN ?>/pricing/"><?php echo cssJSToolbox::getText('Save on CJT Extension Bundles') ?></a>
 
 
65
  </div>
views/extensions/plugins-list/tmpl/default_setup_action.html.tmpl CHANGED
@@ -7,4 +7,4 @@
7
  defined('ABSPATH') or die("Access denied");
8
  ?>
9
 
10
- <a href="#<?php echo htmlentities("name={$component['name']}&pluginBase={$component['pluginBase']}") ?>"><?php echo cssJSToolbox::getText('Setup') ?></a>
7
  defined('ABSPATH') or die("Access denied");
8
  ?>
9
 
10
+ <a href="#<?php echo htmlentities("pluginBase={$component['pluginBase']}&title={$component['title']}") ?>"><?php echo cssJSToolbox::getText('Setup') ?></a>
views/extensions/plugins-list/view.php CHANGED
@@ -78,9 +78,13 @@ class CJTExtensionsPluginsListView extends CJTView {
78
  // We only work with extensions that required license key!
79
  if ($extension['definition']['primary']['requiredLicense']) {
80
  // Load license
81
- $definition = new SimpleXMLElement($extension['definition']['raw']);
82
- $component['name'] = (string) $definition->license->name;
83
- $component['pluginBase'] = $file;
 
 
 
 
84
  // Get action Markup!
85
  $links['license-key'] = $this->getTemplate('default_setup_action', array('component' => $component));
86
  }
78
  // We only work with extensions that required license key!
79
  if ($extension['definition']['primary']['requiredLicense']) {
80
  // Load license
81
+ $definition = new SimpleXMLElement($extension['definition']['raw']);
82
+ $component['pluginBase'] = $file;
83
+ // Get extension title
84
+ // Use first license type name for old extensions that doesnt
85
+ // provide title attribute
86
+ $defTitle = (string) $definition->license->attributes()->title;
87
+ $component['title'] = $defTitle ? $defTitle : ((string) $definition->license->name[0]);
88
  // Get action Markup!
89
  $links['license-key'] = $this->getTemplate('default_setup_action', array('component' => $component));
90
  }
views/packages/install/public/js/install/install.js CHANGED
@@ -52,6 +52,25 @@
52
  init : function() {
53
  // Initialize vars.
54
  this.fileUploader = $('#fileUploader')[0];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  // Set file uploaded src, load uploaded view!
56
  this.fileUploader.src = parent.CJTServer.getRequestURL('packageFile', 'install', {view : 'uploader/single'});
57
  // Install package!
52
  init : function() {
53
  // Initialize vars.
54
  this.fileUploader = $('#fileUploader')[0];
55
+ // Set uploader form action when ready
56
+ this.fileUploader.addEventListener('load', $.proxy(
57
+ function() {
58
+ // Repoint to module if required
59
+ if (CJTPackageInstallationFormParams.uploaderModuleName) {
60
+ // Get form
61
+ var uploadForm = this.fileUploader.contentDocument.getElementsByTagName('form')[0];
62
+ // Query string
63
+ var queryString = {};
64
+ queryString[CJTPackageInstallationFormParams.cjtModuleParamName] = CJTPackageInstallationFormParams.uploaderModuleName;
65
+ // Repoint uploader frame to embeddeder action
66
+ uploadForm.action = parent.CJTServer.getRequestURL(
67
+ CJTPackageInstallationFormParams.uploaderControllerName,
68
+ CJTPackageInstallationFormParams.uploaderActionName,
69
+ queryString
70
+ );
71
+ }
72
+ }, this)
73
+ );
74
  // Set file uploaded src, load uploaded view!
75
  this.fileUploader.src = parent.CJTServer.getRequestURL('packageFile', 'install', {view : 'uploader/single'});
76
  // Install package!
views/packages/install/tmpl/default.html.tmpl CHANGED
@@ -13,6 +13,14 @@ $this->suppressPrintScriptsHook();
13
  ?>
14
  <html xmlns="http://www.w3.org/1999/xhtml">
15
  <head>
 
 
 
 
 
 
 
 
16
  <?php wp_print_head_scripts() ?>
17
  <?php wp_print_styles() ?>
18
  </head>
@@ -26,7 +34,7 @@ $this->suppressPrintScriptsHook();
26
  <fieldset>
27
  <ul>
28
  <li>
29
- <label for="fileUploader"><?php echo cssJSToolbox::getText('Package File') ?>:</label>
30
  <iframe id="fileUploader" frameborder="0"></iframe>
31
  </li>
32
  <li class="buttons">
13
  ?>
14
  <html xmlns="http://www.w3.org/1999/xhtml">
15
  <head>
16
+ <script type="text/javascript">
17
+ window.CJTPackageInstallationFormParams = {
18
+ uploaderControllerName : "<?php echo $this->uploaderControllerName; ?>",
19
+ uploaderActionName : "<?php echo $this->uploaderActionName; ?>",
20
+ uploaderModuleName : "<?php echo $this->uploaderModuleName; ?>",
21
+ cjtModuleParamName : "<?php echo $this->moduleParamName; ?>"
22
+ };
23
+ </script>
24
  <?php wp_print_head_scripts() ?>
25
  <?php wp_print_styles() ?>
26
  </head>
34
  <fieldset>
35
  <ul>
36
  <li>
37
+ <label for="fileUploader"><?php echo cssJSToolbox::getText('File') ?>:</label>
38
  <iframe id="fileUploader" frameborder="0"></iframe>
39
  </li>
40
  <li class="buttons">
views/packages/install/view.php CHANGED
@@ -11,12 +11,46 @@ defined('ABSPATH') or die('Access denied');
11
  */
12
  class CJTPackagesInstallView extends CJTView {
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  /**
15
  * put your comment there...
16
  *
17
  * @param mixed $tpl
18
  */
19
  public function display($tpl = null) {
 
 
 
 
 
 
20
  echo $this->getTemplate($tpl);
21
  }
22
 
11
  */
12
  class CJTPackagesInstallView extends CJTView {
13
 
14
+ /**
15
+ * put your comment there...
16
+ *
17
+ * @var mixed
18
+ */
19
+ protected $moduleParamName;
20
+
21
+ /**
22
+ * put your comment there...
23
+ *
24
+ * @var mixed
25
+ */
26
+ protected $uploaderModuleName;
27
+
28
+ /**
29
+ * put your comment there...
30
+ *
31
+ * @var mixed
32
+ */
33
+ protected $uploaderActionName;
34
+
35
+ /**
36
+ * put your comment there...
37
+ *
38
+ * @var mixed
39
+ */
40
+ protected $uploaderControllerName;
41
+
42
  /**
43
  * put your comment there...
44
  *
45
  * @param mixed $tpl
46
  */
47
  public function display($tpl = null) {
48
+ // Get uploader parameters.
49
+ $this->uploaderControllerName = $this->getRequestParameter('uploaderControllerName');
50
+ $this->uploaderActionName = $this->getRequestParameter('uploaderActionName');
51
+ $this->uploaderModuleName = $this->getRequestParameter('uploaderModuleName');
52
+ $this->moduleParamName = 'cjtajaxmodule';
53
+ // Display form.
54
  echo $this->getTemplate($tpl);
55
  }
56
 
views/packages/manager/public/js/manager/manager.js CHANGED
@@ -99,6 +99,8 @@
99
  installPackage : function (templateId) {
100
  var query = {
101
  view : 'packages/install',
 
 
102
  width : 470,
103
  height: 115,
104
  TB_iframe : true
99
  installPackage : function (templateId) {
100
  var query = {
101
  view : 'packages/install',
102
+ uploaderControllerName : 'packageFile',
103
+ uploaderActionName : 'install',
104
  width : 470,
105
  height: 115,
106
  TB_iframe : true
views/setup/activation-form/public/js/default/default.js CHANGED
@@ -181,7 +181,7 @@
181
  */
182
  readState : function() {
183
  // Gathering request parameters!
184
- var request = {'component[name]' : this.activationForm.prop('component[name]').value};
185
  // Read current license state!
186
  var promise = this.server.send('setup', 'getState', request)
187
  .success($.proxy(
@@ -205,7 +205,7 @@
205
  this.buttonsState(state.action);
206
  }
207
  // Reflect the request state (valid license, invalid license and request error) by text message.
208
- var currentActionName = this.todo ? this.todo : state.action;
209
  var requestStateMessage = CJTSetupActivationFormViewDefaultI18N[currentActionName + state.response.license + 'RequestMessage'];
210
  $('#request-state').text(requestStateMessage)
211
  .css({visibility : 'visible'});
@@ -223,6 +223,7 @@
223
  this.activationForm.find('input:text[name="license[key]"]').attr('title', requestStateMessage);
224
  }
225
  else {
 
226
  this.buttonsState('reset');
227
  }
228
  }
181
  */
182
  readState : function() {
183
  // Gathering request parameters!
184
+ var request = {'component[pluginBase]' : this.activationForm.prop('component[pluginBase]').value};
185
  // Read current license state!
186
  var promise = this.server.send('setup', 'getState', request)
187
  .success($.proxy(
205
  this.buttonsState(state.action);
206
  }
207
  // Reflect the request state (valid license, invalid license and request error) by text message.
208
+ var currentActionName = this.todo ? this.todo : state.action;
209
  var requestStateMessage = CJTSetupActivationFormViewDefaultI18N[currentActionName + state.response.license + 'RequestMessage'];
210
  $('#request-state').text(requestStateMessage)
211
  .css({visibility : 'visible'});
223
  this.activationForm.find('input:text[name="license[key]"]').attr('title', requestStateMessage);
224
  }
225
  else {
226
+ // Reset
227
  this.buttonsState('reset');
228
  }
229
  }
views/setup/activation-form/public/js/default/default.localization.php CHANGED
@@ -55,5 +55,5 @@ return array(
55
  /* Validation */
56
  'invalidName' => cssJSToolbox::getText('Invalid License name!'),
57
  'invalidKey' => cssJSToolbox::getText('Invalid License key!'),
58
- 'componentNameIsAbsolute' => cssJSToolbox::getText('Component name is absolute!!! Invalid Request Specified!!!'),
59
  );
55
  /* Validation */
56
  'invalidName' => cssJSToolbox::getText('Invalid License name!'),
57
  'invalidKey' => cssJSToolbox::getText('Invalid License key!'),
58
+ 'componentNameIsAbsolute' => cssJSToolbox::getText('Component name is absolute!'),
59
  );
views/setup/activation-form/tmpl/default.html.tmpl CHANGED
@@ -20,20 +20,30 @@ $this->suppressPrintScriptsHook();
20
  <div id="cjtoolbox_popup">
21
  <form id="cjt-setup-activation-form-view" class="cjt-form">
22
  <input type="hidden" id="cjt-securityToken" value="<?php echo $this->securityToken ?>" />
23
- <input type="hidden" name="component[name]" value="<?php echo $this->component['name'] ?>" />
24
  <input type="hidden" name="component[pluginBase]" value="<?php echo $this->component['pluginBase'] ?>" />
25
  <fieldset>
26
- <strong><?php echo cssJSToolbox::getText('License Key') ?> <span class="component-name">&quot;<?php echo $this->component['name'] ?>&quot;</span></strong>
27
  <p>
28
  <?php echo cssJSToolbox::getText('In order to get the benefits from the premium services we provide you\'ve to obtain your license key from') ?>
29
  <a target="_blank" href="<?php echo $this->cjtWebSite ?>"> <?php echo cssJSToolbox::getText('CSS & Javascript Toolbox') ?> </a><?php echo cssJSToolbox::getText('web site') ?>.
30
  </p>
31
  <ul class="fields-list">
32
- <li>
33
- <label for="license-name"><?php echo cssJSToolbox::getText('Your Name') ?> <sub>*</sub></label>
34
- <br>
35
- <input type="text" id="license-name" name="license[name]" value="<?php echo $this->license['name'] ?>">
36
- </li>
 
 
 
 
 
 
 
 
 
 
 
37
  <li>
38
  <label for="license-key"><?php echo cssJSToolbox::getText('Key') ?> <sub>*</sub></label>
39
  <br>
@@ -42,6 +52,11 @@ $this->suppressPrintScriptsHook();
42
  <br>
43
  <span id="request-state"></span>
44
  </li>
 
 
 
 
 
45
  <li>
46
  <input type="submit" id="action-button" name="" />
47
  <input type="submit" id="check-button" name="check" value="<?php echo cssJSToolbox::getText('Check') ?>" />
20
  <div id="cjtoolbox_popup">
21
  <form id="cjt-setup-activation-form-view" class="cjt-form">
22
  <input type="hidden" id="cjt-securityToken" value="<?php echo $this->securityToken ?>" />
 
23
  <input type="hidden" name="component[pluginBase]" value="<?php echo $this->component['pluginBase'] ?>" />
24
  <fieldset>
25
+ <strong><?php echo cssJSToolbox::getText('License Key') ?> <span class="component-name">&quot;<?php echo $this->component['title'] ?>&quot;</span></strong>
26
  <p>
27
  <?php echo cssJSToolbox::getText('In order to get the benefits from the premium services we provide you\'ve to obtain your license key from') ?>
28
  <a target="_blank" href="<?php echo $this->cjtWebSite ?>"> <?php echo cssJSToolbox::getText('CSS & Javascript Toolbox') ?> </a><?php echo cssJSToolbox::getText('web site') ?>.
29
  </p>
30
  <ul class="fields-list">
31
+ <li>
32
+ <label for="product-type"><?php echo cssJSToolbox::getText('License Type') ?> <sub>*</sub></label>
33
+ <br>
34
+ <select id="product-type" name="component[name]">
35
+ <?php
36
+ # select nothing by default
37
+ $licenseTypes[''] = array('name' => '', 'text' => '');
38
+ $licenseTypes = array_merge($licenseTypes, $this->licenseTypes);
39
+ # List license types
40
+ foreach ($licenseTypes as $type) :
41
+ $selected = ($this->license['productName'] == $type['name']) ? " selected='selected'" : '';
42
+ ?>
43
+ <option value="<?php echo $type['name'] ?>"<?php echo $selected ?>><?php echo $type['text'] ?></option>
44
+ <?php endforeach; ?>
45
+ </select>
46
+ </li>
47
  <li>
48
  <label for="license-key"><?php echo cssJSToolbox::getText('Key') ?> <sub>*</sub></label>
49
  <br>
52
  <br>
53
  <span id="request-state"></span>
54
  </li>
55
+ <li>
56
+ <label for="license-name"><?php echo cssJSToolbox::getText('Your Name') ?> <sub>*</sub></label>
57
+ <br>
58
+ <input type="text" id="license-name" name="license[name]" value="<?php echo $this->license['name'] ?>">
59
+ </li>
60
  <li>
61
  <input type="submit" id="action-button" name="" />
62
  <input type="submit" id="check-button" name="check" value="<?php echo cssJSToolbox::getText('Check') ?>" />
views/setup/activation-form/view.php CHANGED
@@ -32,6 +32,13 @@ class CJTSetupActivationFormView extends CJTView {
32
  */
33
  protected $license;
34
 
 
 
 
 
 
 
 
35
  /**
36
  * put your comment there...
37
  *
@@ -51,7 +58,8 @@ class CJTSetupActivationFormView extends CJTView {
51
  $this->securityToken = cssJSToolbox::getSecurityToken();
52
  $this->component = $this->getRequestParameter('component');
53
  $this->cjtWebSite = cssJSToolbox::getCJTWebSiteURL();
54
- $this->license = $model->getStateStruct($this->component, 'license');
 
55
  // Display view.
56
  echo $this->getTemplate($tpl);
57
  }
32
  */
33
  protected $license;
34
 
35
+ /**
36
+ * put your comment there...
37
+ *
38
+ * @var mixed
39
+ */
40
+ protected $licenseTypes;
41
+
42
  /**
43
  * put your comment there...
44
  *
58
  $this->securityToken = cssJSToolbox::getSecurityToken();
59
  $this->component = $this->getRequestParameter('component');
60
  $this->cjtWebSite = cssJSToolbox::getCJTWebSiteURL();
61
+ $this->licenseTypes = $model->getExtensionProductTypes($this->component);
62
+ $this->license = $model->getStateStruct($this->licenseTypes, 'license');
63
  // Display view.
64
  echo $this->getTemplate($tpl);
65
  }
views/setup/setup/tmpl/default.html.tmpl CHANGED
@@ -8,9 +8,9 @@ defined('ABSPATH') or die("Access denied");
8
  ?>
9
  <div class="cjt-setup-page"><br>
10
  <form id="setup-form">
11
- <input type="hidden" name="component[name]" value="<?php echo $this->component['name'] ?>" />
12
  <input type="hidden" name="component[pluginBase]" value="<?php echo $this->component['pluginBase'] ?>" />
 
13
  <input type="hidden" id="cjt-securityToken" value="<?php echo $this->securityToken ?>" />
14
- <iframe id="activation-form" NOBORDER="true" style="width:100%;height:250px; display:none"></iframe>
15
  </form>
16
  </div>
8
  ?>
9
  <div class="cjt-setup-page"><br>
10
  <form id="setup-form">
 
11
  <input type="hidden" name="component[pluginBase]" value="<?php echo $this->component['pluginBase'] ?>" />
12
+ <input type="hidden" name="component[title]" value="<?php echo $this->component['title'] ?>" />
13
  <input type="hidden" id="cjt-securityToken" value="<?php echo $this->securityToken ?>" />
14
+ <iframe id="activation-form" NOBORDER="true" style="width:100%;height:280px; display:none"></iframe>
15
  </form>
16
  </div>
views/templates/template/public/js/template/template.js CHANGED
@@ -89,7 +89,6 @@
89
  this.form.find('#form-tabs').tabs();
90
  // ACE Editor.
91
  this.aceEditor = ace.edit('code');
92
- this.aceEditor.setTheme('ace/theme/chrome');
93
  this.aceEditor.setShowPrintMargin(false);
94
  // Update button.
95
  $('#save').click($.proxy(this.save, this));
89
  this.form.find('#form-tabs').tabs();
90
  // ACE Editor.
91
  this.aceEditor = ace.edit('code');
 
92
  this.aceEditor.setShowPrintMargin(false);
93
  // Update button.
94
  $('#save').click($.proxy(this.save, this));