markdown - Version 2.1.0

Version Notes

https://github.com/SchumacherFM/Magento-Markdown

Tons of new features! See the github pages for the version history.

- Enable/Disable markdown rendering in email template. (by Paul Hachmang)
- Update marked.js
- Bug fix: HTML Preview code markup
- Bug fix: HTML preview button should be removed
- Bug fix: When there is no content, the Preview and Live Preview tabs show incorrect request
- Feature: Feedback and ideas after being used in the wild.
- Feature: Settings to enable/disable Preview, Live Preview and - - HTML Preview tabs (See Permissions -> Roles)
- Merged Pull Request More native-like styling
- Add new option for styling of the backend textarea field
- Major changes in the backend Github Issue #18
- Renaming of buttons
- EpicEditor disabled by default
- Better style for the textarea field with outer glow
- Besides image Drag'n'Drop added file upload and copy and paste for images
- Enhanced preview mode

Download this release

Release Info

Developer Cyrill Schumacher
Extension markdown
Version 2.1.0
Comparing to
See all releases


Code changes from version 2.0.0 to 2.1.0

Files changed (65) hide show
  1. app/code/community/SchumacherFM/Markdown/.DS_Store +0 -0
  2. app/code/community/SchumacherFM/Markdown/Block/Adminhtml/Form/Renderer/Fieldset/Element/Textarea.php +116 -0
  3. app/code/community/SchumacherFM/Markdown/Helper/Data.php +96 -5
  4. app/code/community/SchumacherFM/Markdown/Model/Markdown/Abstract.php +39 -3
  5. app/code/community/SchumacherFM/Markdown/Model/Markdown/Observer.php +2 -2
  6. app/code/community/SchumacherFM/Markdown/Model/Observer/Adminhtml/Block.php +185 -121
  7. app/code/community/SchumacherFM/Markdown/Model/Observer/Adminhtml/EpicEditor.php +0 -1
  8. app/code/community/SchumacherFM/Markdown/Model/Options/Styles/AbstractStyles.php +45 -0
  9. app/code/community/SchumacherFM/Markdown/Model/Options/Styles/HighLightStyles.php +19 -0
  10. app/code/community/SchumacherFM/Markdown/Model/Options/Styles/MarkdownStyles.php +19 -0
  11. app/code/community/SchumacherFM/Markdown/Model/Options/Styles/TextareaStyles.php +36 -0
  12. app/code/community/SchumacherFM/Markdown/controllers/Adminhtml/MarkdownController.php +4 -9
  13. app/code/community/SchumacherFM/Markdown/etc/adminhtml.xml +42 -21
  14. app/code/community/SchumacherFM/Markdown/etc/config.xml +24 -1
  15. app/code/community/SchumacherFM/Markdown/etc/system.xml +60 -2
  16. app/design/adminhtml/default/default/layout/markdown.xml +6 -0
  17. js/markdown/adminhtml/beautify-html.js +840 -0
  18. js/markdown/adminhtml/filereader.js +34 -48
  19. js/markdown/adminhtml/highlight.pack.js +1 -2
  20. js/markdown/adminhtml/markdown.js +545 -69
  21. js/markdown/adminhtml/marked.js +221 -135
  22. js/markdown/adminhtml/reMarked.js +52 -23
  23. package.xml +21 -5
  24. skin/adminhtml/default/default/markdown/highlight/styles/arta.css +160 -0
  25. skin/adminhtml/default/default/markdown/highlight/styles/ascetic.css +50 -0
  26. skin/adminhtml/default/default/markdown/highlight/styles/brown_paper.css +105 -0
  27. skin/adminhtml/default/default/markdown/highlight/styles/dark.css +105 -0
  28. skin/adminhtml/default/default/{epiceditor → markdown}/highlight/styles/default.css +21 -3
  29. skin/adminhtml/default/default/markdown/highlight/styles/docco.css +132 -0
  30. skin/adminhtml/default/default/markdown/highlight/styles/far.css +113 -0
  31. skin/adminhtml/default/default/markdown/highlight/styles/foundation.css +133 -0
  32. skin/adminhtml/default/default/{epiceditor → markdown}/highlight/styles/github.css +4 -1
  33. skin/adminhtml/default/default/{epiceditor → markdown}/highlight/styles/googlecode.css +4 -2
  34. skin/adminhtml/default/default/markdown/highlight/styles/idea.css +122 -0
  35. skin/adminhtml/default/default/markdown/highlight/styles/ir_black.css +105 -0
  36. skin/adminhtml/default/default/markdown/highlight/styles/magula.css +123 -0
  37. skin/adminhtml/default/default/markdown/highlight/styles/mono-blue.css +62 -0
  38. skin/adminhtml/default/default/markdown/highlight/styles/monokai.css +127 -0
  39. skin/adminhtml/default/default/markdown/highlight/styles/monokai_sublime.css +102 -0
  40. skin/adminhtml/default/default/markdown/highlight/styles/obsidian.css +154 -0
  41. skin/adminhtml/default/default/markdown/highlight/styles/pojoaque.css +105 -0
  42. skin/adminhtml/default/default/markdown/highlight/styles/railscasts.css +182 -0
  43. skin/adminhtml/default/default/markdown/highlight/styles/rainbow.css +115 -0
  44. skin/adminhtml/default/default/markdown/highlight/styles/school_book.css +113 -0
  45. skin/adminhtml/default/default/markdown/highlight/styles/solarized_dark.css +92 -0
  46. skin/adminhtml/default/default/markdown/highlight/styles/solarized_light.css +92 -0
  47. skin/adminhtml/default/default/markdown/highlight/styles/sunburst.css +160 -0
  48. skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night-blue.css +52 -0
  49. skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night-bright.css +51 -0
  50. skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night-eighties.css +51 -0
  51. skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night.css +52 -0
  52. skin/adminhtml/default/default/markdown/highlight/styles/tomorrow.css +49 -0
  53. skin/adminhtml/default/default/markdown/highlight/styles/vs.css +89 -0
  54. {js/markdown/adminhtml → skin/adminhtml/default/default/markdown}/highlight/styles/xcode.css +5 -2
  55. skin/adminhtml/default/default/markdown/highlight/styles/zenburn.css +117 -0
  56. skin/adminhtml/default/default/markdown/mdm.css +131 -3
  57. skin/adminhtml/default/default/markdown/styles/github.css +389 -0
  58. skin/adminhtml/default/default/markdown/styles/jasonm23-dark.css +258 -0
  59. skin/adminhtml/default/default/markdown/styles/jasonm23-foghorn.css +142 -0
  60. skin/adminhtml/default/default/markdown/styles/jasonm23-markdown.css +102 -0
  61. skin/adminhtml/default/default/markdown/styles/jasonm23-swiss.css +112 -0
  62. skin/adminhtml/default/default/markdown/styles/kevinburke.css +298 -0
  63. skin/adminhtml/default/default/markdown/styles/markedapp-byword.css +314 -0
  64. skin/adminhtml/default/default/markdown/styles/thomasf-solarizedcssdark.css +296 -0
  65. skin/adminhtml/default/default/markdown/styles/thomasf-solarizedcsslight.css +296 -0
app/code/community/SchumacherFM/Markdown/.DS_Store DELETED
Binary file
app/code/community/SchumacherFM/Markdown/Block/Adminhtml/Form/Renderer/Fieldset/Element/Textarea.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category SchumacherFM_Markdown
5
+ * @package Block
6
+ * @author Cyrill at Schumacher dot fm / @SchumacherFM
7
+ * @copyright Copyright (c)
8
+ *
9
+ * @method SchumacherFM_Markdown_Block_Adminhtml_Form_Renderer_Fieldset_Element_Textarea setElementId($id)
10
+ * @method string getElementId()
11
+ */
12
+ class SchumacherFM_Markdown_Block_Adminhtml_Form_Renderer_Fieldset_Element_Textarea extends Mage_Adminhtml_Block_Template
13
+ {
14
+
15
+ /**
16
+ * @var SchumacherFM_Markdown_Helper_Data
17
+ */
18
+ protected $_helper = NULL;
19
+
20
+ /**
21
+ * Class constructor
22
+ *
23
+ */
24
+ public function _construct()
25
+ {
26
+ parent::_construct();
27
+ $this->setTemplate('markdown/edit/form/renderer/textarea.phtml');
28
+ $this->_helper = Mage::helper('markdown');
29
+ }
30
+
31
+ protected function _toHtml()
32
+ {
33
+ if ($this->isEditorAllowed()) {
34
+ return parent::_toHtml();
35
+ }
36
+ return '<!-- Markdown Editor Disabled. See System -> Permission -> Roles -->';
37
+ }
38
+
39
+ /**
40
+ * @param $translation
41
+ *
42
+ * @return string
43
+ */
44
+ public function ___($translation)
45
+ {
46
+ return $this->_helper->__($translation);
47
+ }
48
+
49
+ /**
50
+ * @return string
51
+ */
52
+ public function getFileReaderInputId()
53
+ {
54
+ return 'man_chooser_' . $this->getElementId();
55
+ }
56
+
57
+ /**
58
+ * @param $name
59
+ *
60
+ * @return string
61
+ */
62
+ public function getIframe($name)
63
+ {
64
+ // $sandBox = $useSandBox === TRUE ? ' sandbox' : ''; // ="allow-same-origin"
65
+ return '<iframe class="iframePreview" name="' . $name . '" src="" style="' .
66
+ $this->_helper->getPreviewIframeCSS() . '"></iframe>';
67
+ }
68
+
69
+ /**
70
+ * @return string
71
+ */
72
+ public function getDocsLinks()
73
+ {
74
+ $template = '<a target="_blank" href="%s">%s</a>';
75
+ $markdownLink = sprintf($template, $this->_helper->getCheatSheetUrl(), 'Markdown');
76
+
77
+ if (FALSE === $this->_helper->isMarkdownExtra()) {
78
+ return $this->__('Content is parsed with %s', $markdownLink);
79
+ } else {
80
+ $markdownExtraLink = sprintf($template, $this->_helper->getMdExtraDocUrl(), 'Markdown Extra');
81
+ return $this->__('Content is parsed with %s and %s', $markdownLink, $markdownExtraLink);
82
+ }
83
+ }
84
+
85
+ /**
86
+ * @return bool
87
+ */
88
+ public function isEditorAllowed()
89
+ {
90
+ return (boolean)Mage::getSingleton('admin/session')->isAllowed('admin/markdown_editor');
91
+ }
92
+
93
+ /**
94
+ * @return bool
95
+ */
96
+ public function isPreviewAllowed()
97
+ {
98
+ return $this->isEditorAllowed() && (boolean)Mage::getSingleton('admin/session')->isAllowed('admin/markdown_editor/preview');
99
+ }
100
+
101
+ /**
102
+ * @return bool
103
+ */
104
+ public function isLivePreviewAllowed()
105
+ {
106
+ return $this->isEditorAllowed() && (boolean)Mage::getSingleton('admin/session')->isAllowed('admin/markdown_editor/livepreview');
107
+ }
108
+
109
+ /**
110
+ * @return bool
111
+ */
112
+ public function isHtmlPreviewAllowed()
113
+ {
114
+ return $this->isEditorAllowed() && (boolean)Mage::getSingleton('admin/session')->isAllowed('admin/markdown_editor/htmlpreview');
115
+ }
116
+ }
app/code/community/SchumacherFM/Markdown/Helper/Data.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * @category SchumacherFM_Markdown
4
  * @package Helper
@@ -27,13 +28,71 @@ class SchumacherFM_Markdown_Helper_Data extends Mage_Core_Helper_Abstract
27
  }
28
 
29
  /**
30
- * @return mixed|string
31
  */
32
  public function getCheatSheetUrl()
33
  {
34
  return Mage::getStoreConfig('markdown/markdown/cheatsheet');
35
  }
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  /**
38
  * @param bool $encoded
39
  *
@@ -57,7 +116,17 @@ class SchumacherFM_Markdown_Helper_Data extends Mage_Core_Helper_Abstract
57
  */
58
  public function isDisabled()
59
  {
60
- return !(boolean)Mage::getStoreConfig('markdown/markdown/enable');
 
 
 
 
 
 
 
 
 
 
61
  }
62
 
63
  /**
@@ -67,7 +136,15 @@ class SchumacherFM_Markdown_Helper_Data extends Mage_Core_Helper_Abstract
67
  */
68
  public function isMarkdownExtra($type = NULL)
69
  {
70
- return (boolean)Mage::getStoreConfig('markdown/markdown_extra/enable' . (!empty($type) ? '_' . $type : ''));
 
 
 
 
 
 
 
 
71
  }
72
 
73
  /**
@@ -147,8 +224,8 @@ class SchumacherFM_Markdown_Helper_Data extends Mage_Core_Helper_Abstract
147
  */
148
  public function getEpicEditorConfig()
149
  {
150
- $config = $this->_getJsonConfig('epiceditor');
151
- $config = FALSE !== $config ? json_decode($config, TRUE) : array();
152
  $config['basePath'] = Mage::getBaseUrl('skin') . 'adminhtml/default/default/epiceditor/';
153
  return json_encode($config);
154
  }
@@ -230,4 +307,18 @@ class SchumacherFM_Markdown_Helper_Data extends Mage_Core_Helper_Abstract
230
  }
231
  return $handles;
232
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  }
1
  <?php
2
+
3
  /**
4
  * @category SchumacherFM_Markdown
5
  * @package Helper
28
  }
29
 
30
  /**
31
+ * @return string
32
  */
33
  public function getCheatSheetUrl()
34
  {
35
  return Mage::getStoreConfig('markdown/markdown/cheatsheet');
36
  }
37
 
38
+ /**
39
+ * not DRY ;-)
40
+ *
41
+ * @param bool $fullPath
42
+ *
43
+ * @return string
44
+ */
45
+ public function getHighLightStyleCss($fullPath = FALSE)
46
+ {
47
+ $styleFile = Mage::getStoreConfig('markdown/markdown/highlight_style');
48
+ $return = 'markdown' . DS . 'highlight' . DS . 'styles' . DS . $styleFile;
49
+ if (TRUE === $fullPath) {
50
+ return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN) . DS . 'adminhtml' . DS . 'default' . DS . 'default' . DS . $return;
51
+ }
52
+ return $return;
53
+ }
54
+
55
+ /**
56
+ * not DRY ;-)
57
+ *
58
+ * @param bool $fullPath
59
+ *
60
+ * @return string
61
+ */
62
+ public function getMarkdownStyleCss($fullPath = FALSE)
63
+ {
64
+ $styleFile = Mage::getStoreConfig('markdown/markdown/preview_style');
65
+ $return = 'markdown' . DS . 'styles' . DS . $styleFile;
66
+ if (TRUE === $fullPath) {
67
+ return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN) . DS . 'adminhtml' . DS . 'default' . DS . 'default' . DS . $return;
68
+ }
69
+ return $return;
70
+ }
71
+
72
+ /**
73
+ * @return string
74
+ */
75
+ public function getPreviewIframeCSS()
76
+ {
77
+ return trim(Mage::getStoreConfig('markdown/markdown/preview_iframe_css'));
78
+ }
79
+
80
+ /**
81
+ * @return string
82
+ */
83
+ public function getTextareaStyle()
84
+ {
85
+ return trim(Mage::getStoreConfig('markdown/markdown/textarea_style'));
86
+ }
87
+
88
+ /**
89
+ * @return string
90
+ */
91
+ public function getMdExtraDocUrl()
92
+ {
93
+ return self::URL_MD_EXTRA_SYNTAX;
94
+ }
95
+
96
  /**
97
  * @param bool $encoded
98
  *
116
  */
117
  public function isDisabled()
118
  {
119
+ return !Mage::getStoreConfigFlag('markdown/markdown/enable');
120
+ }
121
+
122
+ /**
123
+ * Check if Markdown is enabled for emails
124
+ *
125
+ * @return bool
126
+ */
127
+ public function isEmailDisabled()
128
+ {
129
+ return !Mage::getStoreConfigFlag('markdown/markdown/enable_email');
130
  }
131
 
132
  /**
136
  */
137
  public function isMarkdownExtra($type = NULL)
138
  {
139
+ return Mage::getStoreConfigFlag('markdown/markdown_extra/enable' . (!empty($type) ? '_' . $type : ''));
140
+ }
141
+
142
+ /**
143
+ * @return bool
144
+ */
145
+ public function isHiddenInsertImageButton()
146
+ {
147
+ return Mage::getStoreConfigFlag('markdown/markdown/hide_insert_image_button');
148
  }
149
 
150
  /**
224
  */
225
  public function getEpicEditorConfig()
226
  {
227
+ $config = $this->_getJsonConfig('epiceditor');
228
+ $config = FALSE !== $config ? json_decode($config, TRUE) : array();
229
  $config['basePath'] = Mage::getBaseUrl('skin') . 'adminhtml/default/default/epiceditor/';
230
  return json_encode($config);
231
  }
307
  }
308
  return $handles;
309
  }
310
+
311
+ /**
312
+ * @return array
313
+ */
314
+ public function getStoreCodes()
315
+ {
316
+ $stores = array();
317
+ $appStores = Mage::app()->getStores(TRUE, FALSE);
318
+ foreach ($appStores as $store) {
319
+ /** @var $store Mage_Core_Model_Store */
320
+ $stores[] = $store->getCode();
321
+ }
322
+ return $stores;
323
+ }
324
  }
app/code/community/SchumacherFM/Markdown/Model/Markdown/Abstract.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * @category SchumacherFM_Markdown
4
  * @package Model
@@ -9,6 +10,7 @@ abstract class SchumacherFM_Markdown_Model_Markdown_Abstract
9
  {
10
  protected $_tag = '';
11
  protected $_isDisabled = FALSE;
 
12
 
13
  /**
14
  * @var string
@@ -36,8 +38,9 @@ abstract class SchumacherFM_Markdown_Model_Markdown_Abstract
36
  /**
37
  * due to some weired parsings ... every text field which should contain MD must start with this tag
38
  */
39
- $this->_tag = Mage::helper('markdown')->getDetectionTag();
40
- $this->_isDisabled = Mage::helper('markdown')->isDisabled();
 
41
  }
42
 
43
  /**
@@ -83,7 +86,9 @@ abstract class SchumacherFM_Markdown_Model_Markdown_Abstract
83
  */
84
  public function setOptions(array $options = NULL)
85
  {
86
- $this->_options = array_merge($this->_options, $options);
 
 
87
  return $this;
88
  }
89
 
@@ -110,6 +115,16 @@ abstract class SchumacherFM_Markdown_Model_Markdown_Abstract
110
  $force = isset($this->_options['force']) && $this->_options['force'] === TRUE;
111
  $protectMagento = isset($this->_options['protectMagento']) && $this->_options['protectMagento'] === TRUE;
112
  $this->_currentRenderedText = $text;
 
 
 
 
 
 
 
 
 
 
113
 
114
  if (!$this->_isMarkdown() && $force === FALSE) {
115
  return $this->_currentRenderedText;
@@ -125,6 +140,11 @@ abstract class SchumacherFM_Markdown_Model_Markdown_Abstract
125
  if ($protectMagento === TRUE) {
126
  $this->_preserveMagentoVariablesDecode();
127
  }
 
 
 
 
 
128
  Varien_Profiler::stop('renderMarkdown');
129
  return $this->_currentRenderedText;
130
  }
@@ -206,4 +226,20 @@ abstract class SchumacherFM_Markdown_Model_Markdown_Abstract
206
  {
207
  return strpos($text, $this->_tag) !== FALSE;
208
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  }
1
  <?php
2
+
3
  /**
4
  * @category SchumacherFM_Markdown
5
  * @package Model
10
  {
11
  protected $_tag = '';
12
  protected $_isDisabled = FALSE;
13
+ protected $_isEmailDisabled = FALSE;
14
 
15
  /**
16
  * @var string
38
  /**
39
  * due to some weired parsings ... every text field which should contain MD must start with this tag
40
  */
41
+ $this->_tag = Mage::helper('markdown')->getDetectionTag();
42
+ $this->_isDisabled = Mage::helper('markdown')->isDisabled();
43
+ $this->_isEmailDisabled = Mage::helper('markdown')->isEmailDisabled();
44
  }
45
 
46
  /**
86
  */
87
  public function setOptions(array $options = NULL)
88
  {
89
+ if (FALSE === empty($options)) {
90
+ $this->_options = array_merge($this->_options, $options);
91
+ }
92
  return $this;
93
  }
94
 
115
  $force = isset($this->_options['force']) && $this->_options['force'] === TRUE;
116
  $protectMagento = isset($this->_options['protectMagento']) && $this->_options['protectMagento'] === TRUE;
117
  $this->_currentRenderedText = $text;
118
+ $cacheKey = $this->getCacheKey();
119
+ $useCache = Mage::app()->useCache('markdown') && FALSE !== $cacheKey;
120
+
121
+ if (TRUE === $useCache) {
122
+ $renderedCachedText = Mage::app()->loadCache($cacheKey);
123
+ if (FALSE === empty($renderedCachedText)) {
124
+ Varien_Profiler::stop('renderMarkdown');
125
+ return $renderedCachedText;
126
+ }
127
+ }
128
 
129
  if (!$this->_isMarkdown() && $force === FALSE) {
130
  return $this->_currentRenderedText;
140
  if ($protectMagento === TRUE) {
141
  $this->_preserveMagentoVariablesDecode();
142
  }
143
+
144
+ if (TRUE === $useCache) {
145
+ Mage::app()->saveCache($this->_currentRenderedText, $cacheKey, array('markdown'), (int)Mage::getStoreConfig('markdown/markdown/cache_lifetime'));
146
+ }
147
+
148
  Varien_Profiler::stop('renderMarkdown');
149
  return $this->_currentRenderedText;
150
  }
226
  {
227
  return strpos($text, $this->_tag) !== FALSE;
228
  }
229
+
230
+ /**
231
+ * @return string|boolean
232
+ */
233
+ public function getCacheKey()
234
+ {
235
+ //Checking if we are in secure area
236
+ $store = Mage::app()->getStore();
237
+ if ($store->isAdmin()) {
238
+ return FALSE; // don't cache in the backend
239
+ } else {
240
+ $secure = $store->isFrontUrlSecure() && Mage::app()->getRequest()->isSecure();
241
+ }
242
+ $cacheKeyInfo = $store->getId() . DS . $secure . DS . $this->_currentRenderedText;
243
+ return sha1($cacheKeyInfo);
244
+ }
245
  }
app/code/community/SchumacherFM/Markdown/Model/Markdown/Observer.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * @category SchumacherFM_Markdown
4
  * @package Model
@@ -54,7 +55,7 @@ class SchumacherFM_Markdown_Model_Markdown_Observer extends SchumacherFM_Markdow
54
  public function renderEmailTemplate(Varien_Event_Observer $observer)
55
  {
56
  $this->_currentObserverMethod = __FUNCTION__;
57
- if ($this->_isDisabled) {
58
  return NULL;
59
  }
60
 
@@ -66,7 +67,6 @@ class SchumacherFM_Markdown_Model_Markdown_Observer extends SchumacherFM_Markdow
66
  $template = $object->getData('template_text');
67
 
68
  if ($this->isMarkdown($template)) {
69
-
70
  $this->setOptions(array(
71
  'extra' => Mage::helper('markdown')->isMarkdownExtra('email')
72
  ));
1
  <?php
2
+
3
  /**
4
  * @category SchumacherFM_Markdown
5
  * @package Model
55
  public function renderEmailTemplate(Varien_Event_Observer $observer)
56
  {
57
  $this->_currentObserverMethod = __FUNCTION__;
58
+ if ($this->_isDisabled || $this->_isEmailDisabled) {
59
  return NULL;
60
  }
61
 
67
  $template = $object->getData('template_text');
68
 
69
  if ($this->isMarkdown($template)) {
 
70
  $this->setOptions(array(
71
  'extra' => Mage::helper('markdown')->isMarkdownExtra('email')
72
  ));
app/code/community/SchumacherFM/Markdown/Model/Observer/Adminhtml/Block.php CHANGED
@@ -18,6 +18,23 @@ class SchumacherFM_Markdown_Model_Observer_Adminhtml_Block
18
  */
19
  protected $_afterElementHtml = array();
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  /**
22
  * adminhtml_block_html_before
23
  *
@@ -27,13 +44,13 @@ class SchumacherFM_Markdown_Model_Observer_Adminhtml_Block
27
  */
28
  public function alterTextareaBlockTemplate(Varien_Event_Observer $observer)
29
  {
30
- if (Mage::helper('markdown')->isDisabled()) {
 
31
  return NULL;
32
  }
33
 
34
  /** @var $block Mage_Adminhtml_Block_Template */
35
- $block = $observer->getEvent()->getBlock();
36
-
37
  $isWidgetElement = $block instanceof Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element;
38
  $isCatalogElement = $block instanceof Mage_Adminhtml_Block_Catalog_Form_Renderer_Fieldset_Element;
39
 
@@ -43,71 +60,132 @@ class SchumacherFM_Markdown_Model_Observer_Adminhtml_Block
43
  $isLayoutHandleAllowed = Mage::getSingleton('markdown/observer_adminhtml_layoutUpdate')->isAllowed();
44
 
45
  if ($isWidgetElement || $isCatalogElement) {
46
- /** @var Varien_Data_Form_Element_Abstract $element */
47
- $element = $block->getElement();
48
 
49
- $_isElementEditor = $this->_isElementEditor($element);
50
- $_isCatalogElementAllowed = $this->_isCatalogElementAllowed($element);
51
- $_isEmailTemplateElementAllowed = $this->_isEmailTemplateElementAllowed($element);
52
 
53
  if ($_isElementEditor || $_isCatalogElementAllowed || $_isEmailTemplateElementAllowed) {
 
54
  $method = $isLayoutHandleAllowed ? '_integrate' : '_addMarkdownHint';
55
- $this->$method($element);
56
  }
57
  }
58
  }
59
 
60
  /**
61
- * @param Varien_Data_Form_Element_Abstract $element
 
 
62
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  * @return $this
64
  */
65
- protected function _addMarkdownHint(Varien_Data_Form_Element_Abstract $element)
66
  {
67
- $element->setData('after_element_html', '<small>' .
68
- Mage::helper('markdown')->__('Markdown feature may be available here!')
69
- . '</small>' . $element->getData('after_element_html'));
70
-
71
- /* not sure if useful ...
72
- $params = array(
73
- 'layoutHandle' => '@todo',
74
- 'returnUrl' => Mage::app()->getRequest()->getRequestUri(),
75
- );
76
- $url = Mage::helper('markdown')->getAdminEnableUrl($params);
77
- $element->setData('after_element_html', '<small><a href="' . $url . '">' .
78
- Mage::helper('markdown')->__('Click to add Markdown feature!')
79
- . '</a></small>');
80
- */
81
  return $this;
82
  }
83
 
84
  /**
85
- * @param Varien_Data_Form_Element_Abstract $element
86
- *
87
  * @return $this
88
  */
89
- protected function _integrate(Varien_Data_Form_Element_Abstract $element)
90
  {
91
- $uniqueEntityId = $this->_getUniqueEntityId($element);
92
- $idPrefix = $element->getForm()->getHtmlIdPrefix();
93
- $element->setId(str_replace($idPrefix, '', $element->getHtmlId()) . $uniqueEntityId);
94
 
95
  // adds to every Element the MD buttons at the bottom of the textarea
96
- return $this->_getMarkdownButtons($element)->_addEpicEditorHtml($element)->_mergeAfterElementHtml($element);
 
 
 
97
  }
98
 
99
  /**
100
- * @param Varien_Data_Form_Element_Abstract $element
101
- *
102
  * @return $this
103
  */
104
- protected function _mergeAfterElementHtml(Varien_Data_Form_Element_Abstract $element)
105
  {
106
- $this->_afterElementHtml[90] = $element->getData('after_element_html');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
 
108
  $config = array();
109
- $config['dt'] = Mage::helper('markdown')->getDetectionTag(TRUE);
110
- $config['fuu'] = Mage::helper('markdown')->getAdminFileUploadUrl(); // file upload url
111
 
112
  /**
113
  * when rendering via marked.js include that place holder ... if rendere via PHP replace {{media url...}}
@@ -115,59 +193,66 @@ class SchumacherFM_Markdown_Model_Observer_Adminhtml_Block
115
  */
116
  $config['phi'] = Mage::getBaseUrl('media');
117
 
118
- if ($this->_isMarkdownExtra($element)) {
119
- $config['eru'] = Mage::helper('markdown')->getAdminRenderUrl(array('markdownExtra' => 1)); // extra renderer url
120
  }
121
 
122
- $config['eeloc'] = Mage::helper('markdown')->isEpicEditorLoadOnClick();
 
 
 
 
 
 
123
 
124
- if (Mage::helper('markdown')->isReMarkedEnabled() === TRUE) {
125
- $config['rmc'] = Mage::helper('markdown')->getReMarkedConfig();
126
  }
127
 
128
- if ($this->_configInserted === FALSE) {
129
- $this->_afterElementHtml[1000] = '<div id="markdownGlobalConfig" data-config=\'' .
130
- Zend_Json_Encoder::encode($config)
131
- . '\' style="display:none;"></div>';
132
- $this->_configInserted = TRUE;
133
- }
134
 
135
- ksort($this->_afterElementHtml);
136
- $element->setData('after_element_html', implode(' ', $this->_afterElementHtml));
137
- $this->_afterElementHtml = array();
138
- $element->addClass('initFileReader');
139
- return $this;
 
 
 
 
 
140
  }
141
 
142
  /**
143
- * @param Varien_Data_Form_Element_Abstract $element
144
- *
145
  * @return $this
146
  */
147
- protected function _addEpicEditorHtml(Varien_Data_Form_Element_Abstract $element)
148
  {
149
- if (!Mage::helper('markdown')->isEpicEditorEnabled()) {
150
  return $this;
151
  }
152
 
153
- $id = $element->getHtmlId();
154
 
155
- $element->addClass('initEpicEditor');
156
- $this->_afterElementHtml[100] = '<div id="epiceditor_EE_' . $id . '"' . $this->_getEpicEditorHtmlConfig($element) . '></div>';
157
  return $this;
158
  }
159
 
160
  /**
161
- * @param Varien_Data_Form_Element_Abstract $element
162
- *
163
  * @return string
164
  */
165
- protected function _getEpicEditorHtmlConfig(Varien_Data_Form_Element_Abstract $element)
166
  {
167
- $config = Mage::helper('markdown')->getEpicEditorConfig();
168
  $dataConfig = '';
169
  if ($config) {
170
- $dataConfig = ' data-config=\'' . $config . '\'';
171
  }
172
  return $dataConfig;
173
  }
@@ -208,111 +293,90 @@ class SchumacherFM_Markdown_Model_Observer_Adminhtml_Block
208
  }
209
 
210
  /**
211
- * @param Varien_Data_Form_Element_Abstract $element
212
- *
213
  * @return bool
214
  */
215
- protected function _isEmailTemplateElementAllowed(Varien_Data_Form_Element_Abstract $element)
216
  {
217
- $trueOne = $element instanceof Varien_Data_Form_Element_Textarea;
218
- $trueTwo = stristr($element->getHtmlId(), 'template_text') !== FALSE;
219
  return $trueOne && $trueTwo;
220
  }
221
 
222
  /**
223
- * @param Varien_Data_Form_Element_Abstract $element
224
- *
225
  * @return bool
226
  */
227
- protected function _isCatalogElementAllowed(Varien_Data_Form_Element_Abstract $element)
228
  {
229
- $isTextArea = $element instanceof Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg;
230
- $isDescription = stristr($element->getName(), 'description') !== FALSE && stristr($element->getName(), 'meta') === FALSE;
231
  return $isDescription && $isTextArea;
232
  }
233
 
234
  /**
235
- * @param Varien_Data_Form_Element_Abstract $element
236
- *
237
  * @return bool
238
  */
239
- protected function _isElementEditor(Varien_Data_Form_Element_Abstract $element)
240
  {
241
- return $element instanceof Varien_Data_Form_Element_Editor;
242
  }
243
 
244
  /**
245
- * checks if md extra is enabled
246
- *
247
- * @param Varien_Data_Form_Element_Abstract $element
248
- *
249
  * @return bool
250
  */
251
- protected function _isMarkdownExtra(Varien_Data_Form_Element_Abstract $element)
252
  {
253
- $_isEmailTemplateElementAllowed = $this->_isEmailTemplateElementAllowed($element);
254
 
255
- return Mage::helper('markdown')->isMarkdownExtra() ||
256
- (Mage::helper('markdown')->isMarkdownExtra('email') && $_isEmailTemplateElementAllowed);
257
  }
258
 
259
  /**
260
- * @param Varien_Data_Form_Element_Abstract $element
261
  */
262
- protected function _getMarkdownButtons(Varien_Data_Form_Element_Abstract $element)
263
  {
264
- $htmlId = $element->getHtmlId();
265
 
266
- if (Mage::helper('markdown')->getDetectionTag() !== '') {
267
  $this->_afterElementHtml[200] = Mage::getSingleton('core/layout')
268
  ->createBlock('adminhtml/widget_button', '', array(
269
- 'label' => Mage::helper('markdown')->__('[M↓] enable'),
270
  'type' => 'button',
 
271
  'onclick' => 'toggleMarkdown(\'' . $htmlId . '\');'
272
  ))->toHtml();
273
  }
274
 
275
- $this->_afterElementHtml[210] = Mage::getSingleton('core/layout')
276
- ->createBlock('adminhtml/widget_button', '', array(
277
- 'label' => Mage::helper('markdown')->__('[M↓] Source'),
278
- 'type' => 'button',
279
- 'title' => Mage::helper('markdown')->__('View generated HTML source code'),
280
- 'onclick' => 'toggleMarkdownSource(this,\'' . $htmlId . '\');'
281
- ))->toHtml();
282
-
283
- $this->_afterElementHtml[300] = Mage::getSingleton('core/layout')
284
- ->createBlock('adminhtml/widget_button', '', array(
285
- 'label' => Mage::helper('markdown')->__('[M↓] Syntax'),
286
- 'type' => 'button',
287
- 'onclick' => 'mdExternalUrl(\'' . Mage::helper('markdown')->getCheatSheetUrl() . '\');'
288
- ))->toHtml();
289
-
290
- if ($this->_isMarkdownExtra($element)) {
291
- $this->_afterElementHtml[400] = Mage::getSingleton('core/layout')
292
- ->createBlock('adminhtml/widget_button', '', array(
293
- 'label' => Mage::helper('markdown')->__('[M↓] Extra Syntax'),
294
- 'type' => 'button',
295
- 'onclick' => 'mdExternalUrl(\'' . SchumacherFM_Markdown_Helper_Data::URL_MD_EXTRA_SYNTAX . '\');'
296
- ))->toHtml();
297
- }
298
-
299
- if (Mage::helper('markdown')->isEpicEditorEnabled()) {
300
  $this->_afterElementHtml[500] = Mage::getSingleton('core/layout')
301
  ->createBlock('adminhtml/widget_button', '', array(
302
- 'label' => Mage::helper('markdown')->__('EpicEditor'),
 
303
  'type' => 'button',
304
  'onclick' => 'toggleEpicEditor(this,\'' . $htmlId . '\');'
305
  ))->toHtml();
306
  }
307
 
308
- if (Mage::helper('markdown')->isReMarkedEnabled() === TRUE) {
309
  $this->_afterElementHtml[600] = Mage::getSingleton('core/layout')
310
  ->createBlock('adminhtml/widget_button', '', array(
311
- 'label' => Mage::helper('markdown')->__('HTML2[M↓]'),
 
312
  'type' => 'button',
313
  'onclick' => 'htmlToMarkDown(this,\'' . $htmlId . '\');'
314
  ))->toHtml();
315
  }
316
  return $this;
317
  }
 
 
 
 
 
 
 
 
 
 
318
  }
18
  */
19
  protected $_afterElementHtml = array();
20
 
21
+ /**
22
+ * @var SchumacherFM_Markdown_Helper_Data
23
+ */
24
+ protected $_helper = NULL;
25
+
26
+ /**
27
+ * @var Varien_Data_Form_Element_Abstract
28
+ */
29
+ protected $_currentElement = NULL;
30
+
31
+ /**
32
+ * contains the base live preview URL
33
+ *
34
+ * @var array
35
+ */
36
+ protected $_livePreviewUrl = NULL;
37
+
38
  /**
39
  * adminhtml_block_html_before
40
  *
44
  */
45
  public function alterTextareaBlockTemplate(Varien_Event_Observer $observer)
46
  {
47
+ $this->_helper = Mage::helper('markdown');
48
+ if ($this->_helper->isDisabled()) {
49
  return NULL;
50
  }
51
 
52
  /** @var $block Mage_Adminhtml_Block_Template */
53
+ $block = $observer->getEvent()->getBlock();
 
54
  $isWidgetElement = $block instanceof Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element;
55
  $isCatalogElement = $block instanceof Mage_Adminhtml_Block_Catalog_Form_Renderer_Fieldset_Element;
56
 
60
  $isLayoutHandleAllowed = Mage::getSingleton('markdown/observer_adminhtml_layoutUpdate')->isAllowed();
61
 
62
  if ($isWidgetElement || $isCatalogElement) {
63
+ /** @var Varien_Data_Form_Element_Abstract _currentElement */
64
+ $this->_currentElement = $block->getElement();
65
 
66
+ $_isElementEditor = $this->_isElementEditor();
67
+ $_isCatalogElementAllowed = $this->_isCatalogElementAllowed();
68
+ $_isEmailTemplateElementAllowed = $this->_isEmailTemplateElementAllowed();
69
 
70
  if ($_isElementEditor || $_isCatalogElementAllowed || $_isEmailTemplateElementAllowed) {
71
+ $this->_tryToGetPreviewUrl($block);
72
  $method = $isLayoutHandleAllowed ? '_integrate' : '_addMarkdownHint';
73
+ $this->$method();
74
  }
75
  }
76
  }
77
 
78
  /**
79
+ * @todo this needs to be extended for each block on which markdown can occur.
80
+ *
81
+ * @param Mage_Core_Block_Abstract $block
82
  *
83
+ * @return null
84
+ */
85
+ protected function _tryToGetPreviewUrl(Mage_Core_Block_Abstract $block)
86
+ {
87
+ if (NULL !== $this->_livePreviewUrl) {
88
+ return NULL;
89
+ }
90
+
91
+ // cms page edit
92
+ if (TRUE === $this->_isElementEditor()) {
93
+
94
+ /* @var $model Mage_Cms_Model_Page */
95
+ $model = Mage::registry('cms_page');
96
+ if (empty($model)) {
97
+ return NULL;
98
+ }
99
+ $coreUrl = Mage::getModel('core/url');
100
+
101
+ $identifier = $model->getIdentifier();
102
+ if (!empty($identifier)) {
103
+ $this->_livePreviewUrl = $coreUrl->getUrl(
104
+ $identifier, array(
105
+ '_current' => FALSE
106
+ )
107
+ );
108
+ }
109
+ }
110
+
111
+ // catalog
112
+ if (TRUE === $this->_isCatalogElementAllowed()) {
113
+ /** @var Mage_Catalog_Model_Product $product */
114
+ $product = Mage::registry('current_product');
115
+ /** @var Mage_Catalog_Model_Category $category */
116
+ $category = Mage::registry('current_category');
117
+
118
+ if ($product) {
119
+ $this->_livePreviewUrl = $product->getUrlInStore();
120
+ }
121
+ if ($category) {
122
+ $this->_livePreviewUrl = $category->getCategoryIdUrl();
123
+ }
124
+ $this->_livePreviewUrl = preg_replace('~\?___store=[^\&]+~i', '', $this->_livePreviewUrl);
125
+ }
126
+ return NULL;
127
+ }
128
+
129
+ /**
130
  * @return $this
131
  */
132
+ protected function _addMarkdownHint()
133
  {
134
+ $this->_currentElement->setData('after_element_html', '<small>' .
135
+ $this->___('Markdown feature may be available here!')
136
+ . '</small>' . $this->_currentElement->getData('after_element_html'));
 
 
 
 
 
 
 
 
 
 
 
137
  return $this;
138
  }
139
 
140
  /**
 
 
141
  * @return $this
142
  */
143
+ protected function _integrate()
144
  {
145
+ $uniqueEntityId = $this->_getUniqueEntityId($this->_currentElement);
146
+ $idPrefix = $this->_currentElement->getForm()->getHtmlIdPrefix();
147
+ $this->_currentElement->setId(str_replace($idPrefix, '', $this->_currentElement->getHtmlId()) . $uniqueEntityId);
148
 
149
  // adds to every Element the MD buttons at the bottom of the textarea
150
+ return $this
151
+ ->_getMarkdownButtons()
152
+ ->_addEpicEditorHtml()
153
+ ->_mergeAfterElementHtml();
154
  }
155
 
156
  /**
 
 
157
  * @return $this
158
  */
159
+ protected function _mergeAfterElementHtml()
160
  {
161
+ $this->_afterElementHtml[90] = $this->_currentElement->getData('after_element_html');
162
+
163
+ $this->_addMarkDownConfig();
164
+
165
+ Mage::dispatchEvent('markdown_merge_after_element_html', array(
166
+ 'instance' => $this,
167
+ ));
168
+
169
+ ksort($this->_afterElementHtml);
170
+ $this->_currentElement->setData('after_element_html', $this->_generateTabs());
171
+ $this->_afterElementHtml = array();
172
+ $this->_currentElement->addClass('initMarkdown ' . $this->_helper->getTextareaStyle());
173
+ return $this;
174
+ }
175
+
176
+ /**
177
+ * singleton to add markdown config
178
+ * @return bool
179
+ */
180
+ protected function _addMarkDownConfig()
181
+ {
182
+ if ($this->_configInserted === TRUE) {
183
+ return $this->_configInserted;
184
+ }
185
 
186
  $config = array();
187
+ $config['dt'] = $this->_helper->getDetectionTag(TRUE);
188
+ $config['fuu'] = $this->_helper->getAdminFileUploadUrl(); // file upload url
189
 
190
  /**
191
  * when rendering via marked.js include that place holder ... if rendere via PHP replace {{media url...}}
193
  */
194
  $config['phi'] = Mage::getBaseUrl('media');
195
 
196
+ if ($this->_isMarkdownExtra()) {
197
+ $config['eru'] = $this->_helper->getAdminRenderUrl(array('markdownExtra' => 1)); // extra renderer url
198
  }
199
 
200
+ $config['stores'] = $this->_helper->getStoreCodes();
201
+ $config['eeloc'] = $this->_helper->isEpicEditorLoadOnClick();
202
+ $config['hideIIB'] = $this->_helper->isHiddenInsertImageButton();
203
+ $config['mdCss'] = $this->_helper->getMarkdownStyleCss(TRUE);
204
+ $config['hlCss'] = $this->_helper->getHighLightStyleCss(TRUE);
205
+ $config['lpUrl'] = $this->_livePreviewUrl;
206
+ $config['feaBUrl'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS) . 'markdown/adminhtml/feature/'; // feature base url (raptor)
207
 
208
+ if ($this->_helper->isReMarkedEnabled() === TRUE) {
209
+ $config['rmc'] = $this->_helper->getReMarkedConfig();
210
  }
211
 
212
+ $this->_afterElementHtml[1000] = '<div id="markdownGlobalConfig" data-config=\'' .
213
+ Zend_Json_Encoder::encode($config)
214
+ . '\' style="display:none;"></div>';
215
+ $this->_configInserted = TRUE;
216
+ return $this->_configInserted;
217
+ }
218
 
219
+ /**
220
+ * @return string
221
+ */
222
+ protected function _generateTabs()
223
+ {
224
+ $block = Mage::getSingleton('core/layout')->createBlock('markdown/adminhtml_form_renderer_fieldset_element_textarea');
225
+ $block
226
+ ->setElementId($this->_currentElement->getHtmlId())
227
+ ->setAfterElementHtml(implode(' ', $this->_afterElementHtml));
228
+ return $block->toHtml();
229
  }
230
 
231
  /**
 
 
232
  * @return $this
233
  */
234
+ protected function _addEpicEditorHtml()
235
  {
236
+ if (!$this->_helper->isEpicEditorEnabled()) {
237
  return $this;
238
  }
239
 
240
+ $id = $this->_currentElement->getHtmlId();
241
 
242
+ $this->_currentElement->addClass('initEpicEditor');
243
+ $this->_afterElementHtml[100] = ' <div id="epiceditor_EE_' . $id . '"' . $this->_getEpicEditorHtmlConfig() . '></div>';
244
  return $this;
245
  }
246
 
247
  /**
 
 
248
  * @return string
249
  */
250
+ protected function _getEpicEditorHtmlConfig()
251
  {
252
+ $config = $this->_helper->getEpicEditorConfig();
253
  $dataConfig = '';
254
  if ($config) {
255
+ $dataConfig = ' data-config = \'' . $config . '\'';
256
  }
257
  return $dataConfig;
258
  }
293
  }
294
 
295
  /**
 
 
296
  * @return bool
297
  */
298
+ protected function _isEmailTemplateElementAllowed()
299
  {
300
+ $trueOne = $this->_currentElement instanceof Varien_Data_Form_Element_Textarea;
301
+ $trueTwo = stristr($this->_currentElement->getHtmlId(), 'template_text') !== FALSE;
302
  return $trueOne && $trueTwo;
303
  }
304
 
305
  /**
 
 
306
  * @return bool
307
  */
308
+ protected function _isCatalogElementAllowed()
309
  {
310
+ $isTextArea = $this->_currentElement instanceof Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg;
311
+ $isDescription = stristr($this->_currentElement->getName(), 'description') !== FALSE && stristr($this->_currentElement->getName(), 'meta') === FALSE;
312
  return $isDescription && $isTextArea;
313
  }
314
 
315
  /**
 
 
316
  * @return bool
317
  */
318
+ protected function _isElementEditor()
319
  {
320
+ return $this->_currentElement instanceof Varien_Data_Form_Element_Editor;
321
  }
322
 
323
  /**
 
 
 
 
324
  * @return bool
325
  */
326
+ protected function _isMarkdownExtra()
327
  {
328
+ $_isEmailTemplateElementAllowed = $this->_isEmailTemplateElementAllowed();
329
 
330
+ return $this->_helper->isMarkdownExtra() ||
331
+ ($this->_helper->isMarkdownExtra('email') && $_isEmailTemplateElementAllowed);
332
  }
333
 
334
  /**
335
+ * @return $this
336
  */
337
+ protected function _getMarkdownButtons()
338
  {
339
+ $htmlId = $this->_currentElement->getHtmlId();
340
 
341
+ if ($this->_helper->getDetectionTag() !== '') {
342
  $this->_afterElementHtml[200] = Mage::getSingleton('core/layout')
343
  ->createBlock('adminhtml/widget_button', '', array(
344
+ 'label' => $this->___('Markdown enable'),
345
  'type' => 'button',
346
+ 'class' => 'mdButton',
347
  'onclick' => 'toggleMarkdown(\'' . $htmlId . '\');'
348
  ))->toHtml();
349
  }
350
 
351
+ if ($this->_helper->isEpicEditorEnabled()) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
  $this->_afterElementHtml[500] = Mage::getSingleton('core/layout')
353
  ->createBlock('adminhtml/widget_button', '', array(
354
+ 'label' => $this->___('EpicEditor'),
355
+ 'class' => 'mdButton',
356
  'type' => 'button',
357
  'onclick' => 'toggleEpicEditor(this,\'' . $htmlId . '\');'
358
  ))->toHtml();
359
  }
360
 
361
+ if ($this->_helper->isReMarkedEnabled() === TRUE) {
362
  $this->_afterElementHtml[600] = Mage::getSingleton('core/layout')
363
  ->createBlock('adminhtml/widget_button', '', array(
364
+ 'label' => $this->___('Convert HTML to Markdown'),
365
+ 'class' => 'mdButton',
366
  'type' => 'button',
367
  'onclick' => 'htmlToMarkDown(this,\'' . $htmlId . '\');'
368
  ))->toHtml();
369
  }
370
  return $this;
371
  }
372
+
373
+ /**
374
+ * @param $translation
375
+ *
376
+ * @return string
377
+ */
378
+ protected function ___($translation)
379
+ {
380
+ return $this->_helper->__($translation);
381
+ }
382
  }
app/code/community/SchumacherFM/Markdown/Model/Observer/Adminhtml/EpicEditor.php CHANGED
@@ -16,7 +16,6 @@ class SchumacherFM_Markdown_Model_Observer_Adminhtml_EpicEditor
16
  protected $_epicEditorFiles = array(
17
  'js' => array(
18
  'markdown/adminhtml/epiceditor.js',
19
- 'markdown/adminhtml/highlight.pack.js',
20
  ),
21
  );
22
 
16
  protected $_epicEditorFiles = array(
17
  'js' => array(
18
  'markdown/adminhtml/epiceditor.js',
 
19
  ),
20
  );
21
 
app/code/community/SchumacherFM/Markdown/Model/Options/Styles/AbstractStyles.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category SchumacherFM_Markdown
4
+ * @package Observer
5
+ * @author Cyrill at Schumacher dot fm / @SchumacherFM
6
+ * @copyright Copyright (c)
7
+ */
8
+ abstract class SchumacherFM_Markdown_Model_Options_Styles_AbstractStyles
9
+ {
10
+ protected $_path = [];
11
+
12
+ /**
13
+ * Options getter
14
+ *
15
+ * @return array
16
+ */
17
+ public function toOptionArray()
18
+ {
19
+ $path = implode(DS, $this->_path) . DS . '*.css';
20
+ $content = glob($path);
21
+
22
+ $return = array();
23
+
24
+ foreach ($content as $css) {
25
+ $file = basename($css);
26
+ $return[] = array('value' => $file, 'label' => Mage::helper('markdown')->__($file));
27
+ }
28
+ return $return;
29
+ }
30
+
31
+ /**
32
+ * Get options in "key-value" format
33
+ *
34
+ * @return array
35
+ */
36
+ public function toArray()
37
+ {
38
+ $return = array();
39
+ $options = $this->toOptionArray();
40
+ foreach ($options as $option) {
41
+ $return[$option['value']] = $option['label'];
42
+ }
43
+ return $return;
44
+ }
45
+ }
app/code/community/SchumacherFM/Markdown/Model/Options/Styles/HighLightStyles.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category SchumacherFM_Markdown
4
+ * @package Observer
5
+ * @author Cyrill at Schumacher dot fm / @SchumacherFM
6
+ * @copyright Copyright (c)
7
+ */
8
+ class SchumacherFM_Markdown_Model_Options_Styles_HighLightStyles extends SchumacherFM_Markdown_Model_Options_Styles_AbstractStyles
9
+ {
10
+ public function __construct()
11
+ {
12
+ /** @var Mage_Core_Model_Layout $layout */
13
+ $layout = Mage::app()->getLayout();
14
+
15
+ $this->_path = array(
16
+ Mage::getBaseDir('skin'), $layout->getArea(), 'default', 'default', 'markdown', 'highlight', 'styles'
17
+ );
18
+ }
19
+ }
app/code/community/SchumacherFM/Markdown/Model/Options/Styles/MarkdownStyles.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category SchumacherFM_Markdown
4
+ * @package Observer
5
+ * @author Cyrill at Schumacher dot fm / @SchumacherFM
6
+ * @copyright Copyright (c)
7
+ */
8
+ class SchumacherFM_Markdown_Model_Options_Styles_MarkdownStyles extends SchumacherFM_Markdown_Model_Options_Styles_AbstractStyles
9
+ {
10
+ public function __construct()
11
+ {
12
+ /** @var Mage_Core_Model_Layout $layout */
13
+ $layout = Mage::app()->getLayout();
14
+
15
+ $this->_path = array(
16
+ Mage::getBaseDir('skin'), $layout->getArea(), 'default', 'default', 'markdown', 'styles'
17
+ );
18
+ }
19
+ }
app/code/community/SchumacherFM/Markdown/Model/Options/Styles/TextareaStyles.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category SchumacherFM_Markdown
4
+ * @package Observer
5
+ * @author Cyrill at Schumacher dot fm / @SchumacherFM
6
+ * @copyright Copyright (c)
7
+ */
8
+ class SchumacherFM_Markdown_Model_Options_Styles_TextareaStyles
9
+ {
10
+
11
+ /**
12
+ * Options getter
13
+ *
14
+ * @return array
15
+ */
16
+ public function toOptionArray()
17
+ {
18
+ return array(
19
+ array('value' => '', 'label' => Mage::helper('markdown')->__('Default')),
20
+ array('value' => 'lucida', 'label' => Mage::helper('markdown')->__('Lucida Sans')),
21
+ );
22
+ }
23
+
24
+ /**
25
+ * Get options in "key-value" format
26
+ *
27
+ * @return array
28
+ */
29
+ public function toArray()
30
+ {
31
+ return array(
32
+ 'lucida' => Mage::helper('markdown')->__('Lucida Sans'),
33
+ '' => Mage::helper('markdown')->__('Yes'),
34
+ );
35
+ }
36
+ }
app/code/community/SchumacherFM/Markdown/controllers/Adminhtml/MarkdownController.php CHANGED
@@ -7,15 +7,6 @@
7
  */
8
  class SchumacherFM_Markdown_Adminhtml_MarkdownController extends Mage_Adminhtml_Controller_Action
9
  {
10
-
11
- /**
12
- * @see Adminhtml/Block.php --> _addMarkdownHint()
13
- * not sure if useful
14
- */
15
- public function enableAction(){
16
-
17
- }
18
-
19
  /**
20
  * @return void
21
  */
@@ -70,6 +61,10 @@ class SchumacherFM_Markdown_Adminhtml_MarkdownController extends Mage_Adminhtml_
70
  $file = json_decode($this->getRequest()->getParam('file', '[]'), TRUE);
71
  $fileName = preg_replace('~[^\w\.]+~i', '', isset($file['name']) ? $file['name'] : '');
72
 
 
 
 
 
73
  if (empty($fileName) || empty($binaryData) || empty($file)) {
74
  $return['msg'] = 'Either fileName or binaryData or file is empty ...';
75
  return $this->_setReturn($return, TRUE);
7
  */
8
  class SchumacherFM_Markdown_Adminhtml_MarkdownController extends Mage_Adminhtml_Controller_Action
9
  {
 
 
 
 
 
 
 
 
 
10
  /**
11
  * @return void
12
  */
61
  $file = json_decode($this->getRequest()->getParam('file', '[]'), TRUE);
62
  $fileName = preg_replace('~[^\w\.]+~i', '', isset($file['name']) ? $file['name'] : '');
63
 
64
+ if (strpos(strtolower($fileName), 'clipboard') !== FALSE) {
65
+ $fileName = 'clipboard_' . date('Ymd-His') . '_' . str_replace('clipboard', '', strtolower($fileName));
66
+ }
67
+
68
  if (empty($fileName) || empty($binaryData) || empty($file)) {
69
  $return['msg'] = 'Either fileName or binaryData or file is empty ...';
70
  return $this->_setReturn($return, TRUE);
app/code/community/SchumacherFM/Markdown/etc/adminhtml.xml CHANGED
@@ -1,6 +1,5 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!--
3
- /**
4
  * @category SchumacherFM
5
  * @package SchumacherFM_Markdown
6
  * @copyright Copyright (c) http://www.schumacher.fm
@@ -9,22 +8,44 @@
9
  -->
10
  <config>
11
  <acl>
12
- <resources>
13
- <admin>
14
- <children>
15
- <system>
16
- <children>
17
- <config>
18
- <children>
19
- <markdown translate="title" module="schumacherfm_markdown">
20
- <title>Markdown [M↓]</title>
21
- </markdown>
22
- </children>
23
- </config>
24
- </children>
25
- </system>
26
- </children>
27
- </admin>
28
- </resources>
29
- </acl>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  </config>
1
+ <?xml version="1.0" encoding="UTF-8"?><!--
2
+ /**
 
3
  * @category SchumacherFM
4
  * @package SchumacherFM_Markdown
5
  * @copyright Copyright (c) http://www.schumacher.fm
8
  -->
9
  <config>
10
  <acl>
11
+ <resources>
12
+ <admin>
13
+ <children>
14
+ <system>
15
+ <children>
16
+ <config>
17
+ <children>
18
+ <markdown translate="title" module="markdown">
19
+ <title>Markdown [M↓]</title>
20
+ </markdown>
21
+ </children>
22
+ </config>
23
+ </children>
24
+ </system>
25
+
26
+ <markdown_editor translate="title" module="markdown">
27
+ <title>Markdown Editor</title>
28
+ <sort_order>700</sort_order>
29
+ <children>
30
+
31
+ <preview translate="title">
32
+ <title>Show Preview Tab</title>
33
+ <sort_order>0</sort_order>
34
+ </preview>
35
+ <livepreview translate="title">
36
+ <title>Show Live Preview Tab</title>
37
+ <sort_order>10</sort_order>
38
+ </livepreview>
39
+ <htmlpreview translate="title">
40
+ <title>Show HTML Preview Tab</title>
41
+ <sort_order>10</sort_order>
42
+ </htmlpreview>
43
+
44
+ </children>
45
+ </markdown_editor>
46
+
47
+ </children>
48
+ </admin>
49
+ </resources>
50
+ </acl>
51
  </config>
app/code/community/SchumacherFM/Markdown/etc/config.xml CHANGED
@@ -1,4 +1,12 @@
1
- <?xml version="1.0"?><!--* @category SchumacherFM_Markdown--><!--* @package etc--><!--* @author Cyrill at Schumacher dot fm / @SchumacherFM--><!--* @copyright Copyright (c)-->
 
 
 
 
 
 
 
 
2
  <config>
3
  <modules>
4
  <SchumacherFM_Markdown>
@@ -7,6 +15,15 @@
7
  </modules>
8
 
9
  <global>
 
 
 
 
 
 
 
 
 
10
  <models>
11
  <markdown>
12
  <class>SchumacherFM_Markdown_Model</class>
@@ -104,6 +121,7 @@
104
  <adminhtml_block_html_before>
105
  <observers>
106
  <markdown_adminhtml_block_html_before_textarea>
 
107
  <class>markdown/observer_adminhtml_block</class>
108
  <method>alterTextareaBlockTemplate</method>
109
  </markdown_adminhtml_block_html_before_textarea>
@@ -127,8 +145,13 @@
127
  <markdown>
128
  <markdown>
129
  <enable>1</enable>
 
130
  <cheatsheet>https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet</cheatsheet>
131
  <detection_tag>!#markdown</detection_tag>
 
 
 
 
132
  </markdown>
133
  <markdown_extra>
134
  <enable>0</enable>
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * @category SchumacherFM
5
+ * @package SchumacherFM_Markdown
6
+ * @copyright Copyright (c) http://www.schumacher.fm
7
+ * @author Cyrill at Schumacher dot fm @SchumacherFM
8
+ */
9
+ -->
10
  <config>
11
  <modules>
12
  <SchumacherFM_Markdown>
15
  </modules>
16
 
17
  <global>
18
+ <cache>
19
+ <types>
20
+ <markdown translate="label,description" module="markdown">
21
+ <label>Markdown</label>
22
+ <description>Compiled Markdown files</description>
23
+ <tags>MARKDOWN</tags>
24
+ </markdown>
25
+ </types>
26
+ </cache>
27
  <models>
28
  <markdown>
29
  <class>SchumacherFM_Markdown_Model</class>
121
  <adminhtml_block_html_before>
122
  <observers>
123
  <markdown_adminhtml_block_html_before_textarea>
124
+ <type>singleton</type>
125
  <class>markdown/observer_adminhtml_block</class>
126
  <method>alterTextareaBlockTemplate</method>
127
  </markdown_adminhtml_block_html_before_textarea>
145
  <markdown>
146
  <markdown>
147
  <enable>1</enable>
148
+ <enable_email>0</enable_email>
149
  <cheatsheet>https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet</cheatsheet>
150
  <detection_tag>!#markdown</detection_tag>
151
+ <hide_insert_image_button>1</hide_insert_image_button>
152
+ <highlight_style>github.css</highlight_style>
153
+ <preview_style>github.css</preview_style>
154
+ <cache_lifetime>86400</cache_lifetime>
155
  </markdown>
156
  <markdown_extra>
157
  <enable>0</enable>
app/code/community/SchumacherFM/Markdown/etc/system.xml CHANGED
@@ -35,6 +35,15 @@
35
  <show_in_website>1</show_in_website>
36
  <show_in_store>1</show_in_store>
37
  </enable>
 
 
 
 
 
 
 
 
 
38
  <cheatsheet translate="label">
39
  <label>Markdown Cheat Sheet URL</label>
40
  <frontend_type>text</frontend_type>
@@ -58,6 +67,56 @@
58
  Only transactional emails which have the detection tag somewhere integrated will be rendered with markdown.
59
  </comment>
60
  </detection_tag>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  <custom_layout_handles translate="label">
62
  <label>Additional Layout Handles</label>
63
  <frontend_type>textarea</frontend_type>
@@ -66,11 +125,10 @@
66
  <show_in_website>1</show_in_website>
67
  <show_in_store>1</show_in_store>
68
  <comment>Expert Mode: Load Markdown feature and EpicEditor also via these custom layout handles.
69
- A whitespace separated list. Q: Where can I find the name of a Layout Handle? A: View the class attribute
70
  on the body tag. Most handles starts with adminhtml-... Replace the - with _. Full string is required.
71
  </comment>
72
  </custom_layout_handles>
73
-
74
  </fields>
75
  </markdown>
76
 
35
  <show_in_website>1</show_in_website>
36
  <show_in_store>1</show_in_store>
37
  </enable>
38
+ <enable_email translate="label">
39
+ <label>Enable Markdown for e-mail</label>
40
+ <frontend_type>select</frontend_type>
41
+ <source_model>adminhtml/system_config_source_yesno</source_model>
42
+ <sort_order>11</sort_order>
43
+ <show_in_default>1</show_in_default>
44
+ <show_in_website>1</show_in_website>
45
+ <show_in_store>1</show_in_store>
46
+ </enable_email>
47
  <cheatsheet translate="label">
48
  <label>Markdown Cheat Sheet URL</label>
49
  <frontend_type>text</frontend_type>
67
  Only transactional emails which have the detection tag somewhere integrated will be rendered with markdown.
68
  </comment>
69
  </detection_tag>
70
+ <hide_insert_image_button translate="label">
71
+ <label>Hide Insert Image ... button</label>
72
+ <frontend_type>select</frontend_type>
73
+ <source_model>adminhtml/system_config_source_yesno</source_model>
74
+ <sort_order>40</sort_order>
75
+ <show_in_default>1</show_in_default>
76
+ <show_in_website>1</show_in_website>
77
+ <show_in_store>1</show_in_store>
78
+ </hide_insert_image_button>
79
+ <highlight_style translate="label">
80
+ <label>HTML Source Preview Style</label>
81
+ <frontend_type>select</frontend_type>
82
+ <source_model>markdown/options_styles_highLightStyles</source_model>
83
+ <sort_order>50</sort_order>
84
+ <show_in_default>1</show_in_default>
85
+ <show_in_website>1</show_in_website>
86
+ <show_in_store>1</show_in_store>
87
+ </highlight_style>
88
+
89
+ <preview_style translate="label">
90
+ <label>Markdown Preview Style</label>
91
+ <frontend_type>select</frontend_type>
92
+ <source_model>markdown/options_styles_MarkdownStyles</source_model>
93
+ <sort_order>60</sort_order>
94
+ <show_in_default>1</show_in_default>
95
+ <show_in_website>1</show_in_website>
96
+ <show_in_store>1</show_in_store>
97
+ </preview_style>
98
+
99
+ <preview_iframe_css translate="label">
100
+ <label>CSS Style for all three preview iFrames</label>
101
+ <frontend_type>text</frontend_type>
102
+ <sort_order>70</sort_order>
103
+ <show_in_default>1</show_in_default>
104
+ <show_in_website>1</show_in_website>
105
+ <show_in_store>1</show_in_store>
106
+ <comment><![CDATA[This values will be inserted into the style="" tag.]]></comment>
107
+ </preview_iframe_css>
108
+
109
+ <textarea_style translate="label">
110
+ <label>Textarea Style</label>
111
+ <frontend_type>select</frontend_type>
112
+ <source_model>markdown/options_styles_TextareaStyles</source_model>
113
+ <sort_order>60</sort_order>
114
+ <show_in_default>1</show_in_default>
115
+ <show_in_website>1</show_in_website>
116
+ <show_in_store>1</show_in_store>
117
+ <comment><![CDATA[How the textarea field in the backend should look like.]]></comment>
118
+ </textarea_style>
119
+
120
  <custom_layout_handles translate="label">
121
  <label>Additional Layout Handles</label>
122
  <frontend_type>textarea</frontend_type>
125
  <show_in_website>1</show_in_website>
126
  <show_in_store>1</show_in_store>
127
  <comment>Expert Mode: Load Markdown feature and EpicEditor also via these custom layout handles.
128
+ A whitespace separated list. Q: Where can I find the name of a Layout Handle? A: View the class attribute
129
  on the body tag. Most handles starts with adminhtml-... Replace the - with _. Full string is required.
130
  </comment>
131
  </custom_layout_handles>
 
132
  </fields>
133
  </markdown>
134
 
app/design/adminhtml/default/default/layout/markdown.xml CHANGED
@@ -3,6 +3,12 @@
3
  <!--@see SchumacherFM_Markdown_Model_Observer_Adminhtml_LayoutUpdate-->
4
  <MARKDOWN_HEADER>
5
  <reference name="head">
 
 
 
 
 
 
6
  <action method="addJs">
7
  <script>markdown/adminhtml/reMarked.js</script>
8
  </action>
3
  <!--@see SchumacherFM_Markdown_Model_Observer_Adminhtml_LayoutUpdate-->
4
  <MARKDOWN_HEADER>
5
  <reference name="head">
6
+ <action method="addJs">
7
+ <script>markdown/adminhtml/beautify-html.js</script>
8
+ </action>
9
+ <action method="addJs">
10
+ <script>markdown/adminhtml/highlight.pack.js</script>
11
+ </action>
12
  <action method="addJs">
13
  <script>markdown/adminhtml/reMarked.js</script>
14
  </action>
js/markdown/adminhtml/beautify-html.js ADDED
@@ -0,0 +1,840 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */
2
+ /*
3
+ https://github.com/einars/js-beautify/blob/master/js/lib/beautify-html.js
4
+ The MIT License (MIT)
5
+
6
+ Copyright (c) 2007-2013 Einar Lielmanis and contributors.
7
+
8
+ Permission is hereby granted, free of charge, to any person
9
+ obtaining a copy of this software and associated documentation files
10
+ (the "Software"), to deal in the Software without restriction,
11
+ including without limitation the rights to use, copy, modify, merge,
12
+ publish, distribute, sublicense, and/or sell copies of the Software,
13
+ and to permit persons to whom the Software is furnished to do so,
14
+ subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be
17
+ included in all copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
23
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
24
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
25
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+
29
+ Style HTML
30
+ ---------------
31
+
32
+ Written by Nochum Sossonko, (nsossonko@hotmail.com)
33
+
34
+ Based on code initially developed by: Einar Lielmanis, <elfz@laacz.lv>
35
+ http://jsbeautifier.org/
36
+
37
+ Usage:
38
+ style_html(html_source);
39
+
40
+ style_html(html_source, options);
41
+
42
+ The options are:
43
+ indent_inner_html (default false) — indent <head> and <body> sections,
44
+ indent_size (default 4) — indentation size,
45
+ indent_char (default space) — character to indent with,
46
+ wrap_line_length (default 250) - maximum amount of characters per line (0 = disable)
47
+ brace_style (default "collapse") - "collapse" | "expand" | "end-expand"
48
+ put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line.
49
+ unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted
50
+ indent_scripts (default normal) - "keep"|"separate"|"normal"
51
+ preserve_newlines (default true) - whether existing line breaks before elements should be preserved
52
+ Only works before elements, not inside tags or for text.
53
+ max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk
54
+ indent_handlebars (default false) - format and indent {{#foo}} and {{/foo}}
55
+
56
+ e.g.
57
+
58
+ style_html(html_source, {
59
+ 'indent_inner_html': false,
60
+ 'indent_size': 2,
61
+ 'indent_char': ' ',
62
+ 'wrap_line_length': 78,
63
+ 'brace_style': 'expand',
64
+ 'unformatted': ['a', 'sub', 'sup', 'b', 'i', 'u'],
65
+ 'preserve_newlines': true,
66
+ 'max_preserve_newlines': 5,
67
+ 'indent_handlebars': false
68
+ });
69
+ */
70
+
71
+ (function () {
72
+
73
+ function trim(s) {
74
+ return s.replace(/^\s+|\s+$/g, '');
75
+ }
76
+
77
+ function ltrim(s) {
78
+ return s.replace(/^\s+/g, '');
79
+ }
80
+
81
+ function style_html(html_source, options, js_beautify, css_beautify) {
82
+ //Wrapper function to invoke all the necessary constructors and deal with the output.
83
+
84
+ var multi_parser,
85
+ indent_inner_html,
86
+ indent_size,
87
+ indent_character,
88
+ wrap_line_length,
89
+ brace_style,
90
+ unformatted,
91
+ preserve_newlines,
92
+ max_preserve_newlines,
93
+ indent_handlebars;
94
+
95
+ options = options || {};
96
+
97
+ // backwards compatibility to 1.3.4
98
+ if ((options.wrap_line_length === undefined || parseInt(options.wrap_line_length, 10) === 0) &&
99
+ (options.max_char === undefined || parseInt(options.max_char, 10) === 0)) {
100
+ options.wrap_line_length = options.max_char;
101
+ }
102
+
103
+ indent_inner_html = options.indent_inner_html || false;
104
+ indent_size = parseInt(options.indent_size || 4, 10);
105
+ indent_character = options.indent_char || ' ';
106
+ brace_style = options.brace_style || 'collapse';
107
+ wrap_line_length = parseInt(options.wrap_line_length, 10) === 0 ? 32786 : parseInt(options.wrap_line_length || 250, 10);
108
+ unformatted = options.unformatted || ['a', 'span', 'bdo', 'em', 'strong', 'dfn', 'code', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'q', 'sub', 'sup', 'tt', 'i', 'b', 'big', 'small', 'u', 's', 'strike', 'font', 'ins', 'del', 'pre', 'address', 'dt', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
109
+ preserve_newlines = options.preserve_newlines || true;
110
+ max_preserve_newlines = preserve_newlines ? parseInt(options.max_preserve_newlines || 32786, 10) : 0;
111
+ indent_handlebars = options.indent_handlebars || false;
112
+
113
+ function Parser() {
114
+
115
+ this.pos = 0; //Parser position
116
+ this.token = '';
117
+ this.current_mode = 'CONTENT'; //reflects the current Parser mode: TAG/CONTENT
118
+ this.tags = { //An object to hold tags, their position, and their parent-tags, initiated with default values
119
+ parent: 'parent1',
120
+ parentcount: 1,
121
+ parent1: ''
122
+ };
123
+ this.tag_type = '';
124
+ this.token_text = this.last_token = this.last_text = this.token_type = '';
125
+ this.newlines = 0;
126
+ this.indent_content = indent_inner_html;
127
+
128
+ this.Utils = { //Uilities made available to the various functions
129
+ whitespace: "\n\r\t ".split(''),
130
+ single_token: 'br,input,link,meta,!doctype,basefont,base,area,hr,wbr,param,img,isindex,?xml,embed,?php,?,?='.split(','), //all the single tags for HTML
131
+ extra_liners: 'head,body,/html'.split(','), //for tags that need a line of whitespace before them
132
+ in_array: function (what, arr) {
133
+ for (var i = 0; i < arr.length; i++) {
134
+ if (what === arr[i]) {
135
+ return true;
136
+ }
137
+ }
138
+ return false;
139
+ }
140
+ };
141
+
142
+ this.traverse_whitespace = function () {
143
+ var input_char = '';
144
+
145
+ input_char = this.input.charAt(this.pos);
146
+ if (this.Utils.in_array(input_char, this.Utils.whitespace)) {
147
+ this.newlines = 0;
148
+ while (this.Utils.in_array(input_char, this.Utils.whitespace)) {
149
+ if (preserve_newlines && input_char === '\n' && this.newlines <= max_preserve_newlines) {
150
+ this.newlines += 1;
151
+ }
152
+
153
+ this.pos++;
154
+ input_char = this.input.charAt(this.pos);
155
+ }
156
+ return true;
157
+ }
158
+ return false;
159
+ };
160
+
161
+ this.get_content = function () { //function to capture regular content between tags
162
+
163
+ var input_char = '',
164
+ content = [],
165
+ space = false; //if a space is needed
166
+
167
+ while (this.input.charAt(this.pos) !== '<') {
168
+ if (this.pos >= this.input.length) {
169
+ return content.length ? content.join('') : ['', 'TK_EOF'];
170
+ }
171
+
172
+ if (this.traverse_whitespace()) {
173
+ if (content.length) {
174
+ space = true;
175
+ }
176
+ continue; //don't want to insert unnecessary space
177
+ }
178
+
179
+ if (indent_handlebars) {
180
+ // Handlebars parsing is complicated.
181
+ // {{#foo}} and {{/foo}} are formatted tags.
182
+ // {{something}} should get treated as content, except:
183
+ // {{else}} specifically behaves like {{#if}} and {{/if}}
184
+ var peek3 = this.input.substr(this.pos, 3);
185
+ if (peek3 === '{{#' || peek3 === '{{/') {
186
+ // These are tags and not content.
187
+ break;
188
+ } else if (this.input.substr(this.pos, 2) === '{{') {
189
+ if (this.get_tag(true) === '{{else}}') {
190
+ break;
191
+ }
192
+ }
193
+ }
194
+
195
+ input_char = this.input.charAt(this.pos);
196
+ this.pos++;
197
+
198
+ if (space) {
199
+ if (this.line_char_count >= this.wrap_line_length) { //insert a line when the wrap_line_length is reached
200
+ this.print_newline(false, content);
201
+ this.print_indentation(content);
202
+ } else {
203
+ this.line_char_count++;
204
+ content.push(' ');
205
+ }
206
+ space = false;
207
+ }
208
+ this.line_char_count++;
209
+ content.push(input_char); //letter at-a-time (or string) inserted to an array
210
+ }
211
+ return content.length ? content.join('') : '';
212
+ };
213
+
214
+ this.get_contents_to = function (name) { //get the full content of a script or style to pass to js_beautify
215
+ if (this.pos === this.input.length) {
216
+ return ['', 'TK_EOF'];
217
+ }
218
+ var input_char = '';
219
+ var content = '';
220
+ var reg_match = new RegExp('</' + name + '\\s*>', 'igm');
221
+ reg_match.lastIndex = this.pos;
222
+ var reg_array = reg_match.exec(this.input);
223
+ var end_script = reg_array ? reg_array.index : this.input.length; //absolute end of script
224
+ if (this.pos < end_script) { //get everything in between the script tags
225
+ content = this.input.substring(this.pos, end_script);
226
+ this.pos = end_script;
227
+ }
228
+ return content;
229
+ };
230
+
231
+ this.record_tag = function (tag) { //function to record a tag and its parent in this.tags Object
232
+ if (this.tags[tag + 'count']) { //check for the existence of this tag type
233
+ this.tags[tag + 'count']++;
234
+ this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level
235
+ } else { //otherwise initialize this tag type
236
+ this.tags[tag + 'count'] = 1;
237
+ this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level
238
+ }
239
+ this.tags[tag + this.tags[tag + 'count'] + 'parent'] = this.tags.parent; //set the parent (i.e. in the case of a div this.tags.div1parent)
240
+ this.tags.parent = tag + this.tags[tag + 'count']; //and make this the current parent (i.e. in the case of a div 'div1')
241
+ };
242
+
243
+ this.retrieve_tag = function (tag) { //function to retrieve the opening tag to the corresponding closer
244
+ if (this.tags[tag + 'count']) { //if the openener is not in the Object we ignore it
245
+ var temp_parent = this.tags.parent; //check to see if it's a closable tag.
246
+ while (temp_parent) { //till we reach '' (the initial value);
247
+ if (tag + this.tags[tag + 'count'] === temp_parent) { //if this is it use it
248
+ break;
249
+ }
250
+ temp_parent = this.tags[temp_parent + 'parent']; //otherwise keep on climbing up the DOM Tree
251
+ }
252
+ if (temp_parent) { //if we caught something
253
+ this.indent_level = this.tags[tag + this.tags[tag + 'count']]; //set the indent_level accordingly
254
+ this.tags.parent = this.tags[temp_parent + 'parent']; //and set the current parent
255
+ }
256
+ delete this.tags[tag + this.tags[tag + 'count'] + 'parent']; //delete the closed tags parent reference...
257
+ delete this.tags[tag + this.tags[tag + 'count']]; //...and the tag itself
258
+ if (this.tags[tag + 'count'] === 1) {
259
+ delete this.tags[tag + 'count'];
260
+ } else {
261
+ this.tags[tag + 'count']--;
262
+ }
263
+ }
264
+ };
265
+
266
+ this.indent_to_tag = function (tag) {
267
+ // Match the indentation level to the last use of this tag, but don't remove it.
268
+ if (!this.tags[tag + 'count']) {
269
+ return;
270
+ }
271
+ var temp_parent = this.tags.parent;
272
+ while (temp_parent) {
273
+ if (tag + this.tags[tag + 'count'] === temp_parent) {
274
+ break;
275
+ }
276
+ temp_parent = this.tags[temp_parent + 'parent'];
277
+ }
278
+ if (temp_parent) {
279
+ this.indent_level = this.tags[tag + this.tags[tag + 'count']];
280
+ }
281
+ };
282
+
283
+ this.get_tag = function (peek) { //function to get a full tag and parse its type
284
+ var input_char = '',
285
+ content = [],
286
+ comment = '',
287
+ space = false,
288
+ tag_start, tag_end,
289
+ tag_start_char,
290
+ orig_pos = this.pos,
291
+ orig_line_char_count = this.line_char_count;
292
+
293
+ peek = peek !== undefined ? peek : false;
294
+
295
+ do {
296
+ if (this.pos >= this.input.length) {
297
+ if (peek) {
298
+ this.pos = orig_pos;
299
+ this.line_char_count = orig_line_char_count;
300
+ }
301
+ return content.length ? content.join('') : ['', 'TK_EOF'];
302
+ }
303
+
304
+ input_char = this.input.charAt(this.pos);
305
+ this.pos++;
306
+
307
+ if (this.Utils.in_array(input_char, this.Utils.whitespace)) { //don't want to insert unnecessary space
308
+ space = true;
309
+ continue;
310
+ }
311
+
312
+ if (input_char === "'" || input_char === '"') {
313
+ input_char += this.get_unformatted(input_char);
314
+ space = true;
315
+
316
+ }
317
+
318
+ if (input_char === '=') { //no space before =
319
+ space = false;
320
+ }
321
+
322
+ if (content.length && content[content.length - 1] !== '=' && input_char !== '>' && space) {
323
+ //no space after = or before >
324
+ if (this.line_char_count >= this.wrap_line_length) {
325
+ this.print_newline(false, content);
326
+ this.print_indentation(content);
327
+ } else {
328
+ content.push(' ');
329
+ this.line_char_count++;
330
+ }
331
+ space = false;
332
+ }
333
+
334
+ if (indent_handlebars && tag_start_char === '<') {
335
+ // When inside an angle-bracket tag, put spaces around
336
+ // handlebars not inside of strings.
337
+ if ((input_char + this.input.charAt(this.pos)) === '{{') {
338
+ input_char += this.get_unformatted('}}');
339
+ if (content.length && content[content.length - 1] !== ' ' && content[content.length - 1] !== '<') {
340
+ input_char = ' ' + input_char;
341
+ }
342
+ space = true;
343
+ }
344
+ }
345
+
346
+ if (input_char === '<' && !tag_start_char) {
347
+ tag_start = this.pos - 1;
348
+ tag_start_char = '<';
349
+ }
350
+
351
+ if (indent_handlebars && !tag_start_char) {
352
+ if (content.length >= 2 && content[content.length - 1] === '{' && content[content.length - 2] == '{') {
353
+ if (input_char === '#' || input_char === '/') {
354
+ tag_start = this.pos - 3;
355
+ } else {
356
+ tag_start = this.pos - 2;
357
+ }
358
+ tag_start_char = '{';
359
+ }
360
+ }
361
+
362
+ this.line_char_count++;
363
+ content.push(input_char); //inserts character at-a-time (or string)
364
+
365
+ if (content[1] && content[1] === '!') { //if we're in a comment, do something special
366
+ // We treat all comments as literals, even more than preformatted tags
367
+ // we just look for the appropriate close tag
368
+ content = [this.get_comment(tag_start)];
369
+ break;
370
+ }
371
+
372
+ if (indent_handlebars && tag_start_char === '{' && content.length > 2 && content[content.length - 2] === '}' && content[content.length - 1] === '}') {
373
+ break;
374
+ }
375
+ } while (input_char !== '>');
376
+
377
+ var tag_complete = content.join('');
378
+ var tag_index;
379
+ var tag_offset;
380
+
381
+ if (tag_complete.indexOf(' ') !== -1) { //if there's whitespace, thats where the tag name ends
382
+ tag_index = tag_complete.indexOf(' ');
383
+ } else if (tag_complete[0] === '{') {
384
+ tag_index = tag_complete.indexOf('}');
385
+ } else { //otherwise go with the tag ending
386
+ tag_index = tag_complete.indexOf('>');
387
+ }
388
+ if (tag_complete[0] === '<' || !indent_handlebars) {
389
+ tag_offset = 1;
390
+ } else {
391
+ tag_offset = tag_complete[2] === '#' ? 3 : 2;
392
+ }
393
+ var tag_check = tag_complete.substring(tag_offset, tag_index).toLowerCase();
394
+ if (tag_complete.charAt(tag_complete.length - 2) === '/' ||
395
+ this.Utils.in_array(tag_check, this.Utils.single_token)) { //if this tag name is a single tag type (either in the list or has a closing /)
396
+ if (!peek) {
397
+ this.tag_type = 'SINGLE';
398
+ }
399
+ } else if (indent_handlebars && tag_complete[0] === '{' && tag_check === 'else') {
400
+ if (!peek) {
401
+ this.indent_to_tag('if');
402
+ this.tag_type = 'HANDLEBARS_ELSE';
403
+ this.indent_content = true;
404
+ this.traverse_whitespace();
405
+ }
406
+ } else if (tag_check === 'script') { //for later script handling
407
+ if (!peek) {
408
+ this.record_tag(tag_check);
409
+ this.tag_type = 'SCRIPT';
410
+ }
411
+ } else if (tag_check === 'style') { //for future style handling (for now it justs uses get_content)
412
+ if (!peek) {
413
+ this.record_tag(tag_check);
414
+ this.tag_type = 'STYLE';
415
+ }
416
+ } else if (this.is_unformatted(tag_check, unformatted)) { // do not reformat the "unformatted" tags
417
+ comment = this.get_unformatted('</' + tag_check + '>', tag_complete); //...delegate to get_unformatted function
418
+ content.push(comment);
419
+ // Preserve collapsed whitespace either before or after this tag.
420
+ if (tag_start > 0 && this.Utils.in_array(this.input.charAt(tag_start - 1), this.Utils.whitespace)) {
421
+ content.splice(0, 0, this.input.charAt(tag_start - 1));
422
+ }
423
+ tag_end = this.pos - 1;
424
+ if (this.Utils.in_array(this.input.charAt(tag_end + 1), this.Utils.whitespace)) {
425
+ content.push(this.input.charAt(tag_end + 1));
426
+ }
427
+ this.tag_type = 'SINGLE';
428
+ } else if (tag_check.charAt(0) === '!') { //peek for <! comment
429
+ // for comments content is already correct.
430
+ if (!peek) {
431
+ this.tag_type = 'SINGLE';
432
+ this.traverse_whitespace();
433
+ }
434
+ } else if (!peek) {
435
+ if (tag_check.charAt(0) === '/') { //this tag is a double tag so check for tag-ending
436
+ this.retrieve_tag(tag_check.substring(1)); //remove it and all ancestors
437
+ this.tag_type = 'END';
438
+ this.traverse_whitespace();
439
+ } else { //otherwise it's a start-tag
440
+ this.record_tag(tag_check); //push it on the tag stack
441
+ if (tag_check.toLowerCase() !== 'html') {
442
+ this.indent_content = true;
443
+ }
444
+ this.tag_type = 'START';
445
+
446
+ // Allow preserving of newlines after a start tag
447
+ this.traverse_whitespace();
448
+ }
449
+ if (this.Utils.in_array(tag_check, this.Utils.extra_liners)) { //check if this double needs an extra line
450
+ this.print_newline(false, this.output);
451
+ if (this.output.length && this.output[this.output.length - 2] !== '\n') {
452
+ this.print_newline(true, this.output);
453
+ }
454
+ }
455
+ }
456
+
457
+ if (peek) {
458
+ this.pos = orig_pos;
459
+ this.line_char_count = orig_line_char_count;
460
+ }
461
+
462
+ return content.join(''); //returns fully formatted tag
463
+ };
464
+
465
+ this.get_comment = function (start_pos) { //function to return comment content in its entirety
466
+ // this is will have very poor perf, but will work for now.
467
+ var comment = '',
468
+ delimiter = '>',
469
+ matched = false;
470
+
471
+ this.pos = start_pos;
472
+ input_char = this.input.charAt(this.pos);
473
+ this.pos++;
474
+
475
+ while (this.pos <= this.input.length) {
476
+ comment += input_char;
477
+
478
+ // only need to check for the delimiter if the last chars match
479
+ if (comment[comment.length - 1] === delimiter[delimiter.length - 1] &&
480
+ comment.indexOf(delimiter) !== -1) {
481
+ break;
482
+ }
483
+
484
+ // only need to search for custom delimiter for the first few characters
485
+ if (!matched && comment.length < 10) {
486
+ if (comment.indexOf('<![if') === 0) { //peek for <![if conditional comment
487
+ delimiter = '<![endif]>';
488
+ matched = true;
489
+ } else if (comment.indexOf('<![cdata[') === 0) { //if it's a <[cdata[ comment...
490
+ delimiter = ']]>';
491
+ matched = true;
492
+ } else if (comment.indexOf('<![') === 0) { // some other ![ comment? ...
493
+ delimiter = ']>';
494
+ matched = true;
495
+ } else if (comment.indexOf('<!--') === 0) { // <!-- comment ...
496
+ delimiter = '-->';
497
+ matched = true;
498
+ }
499
+ }
500
+
501
+ input_char = this.input.charAt(this.pos);
502
+ this.pos++;
503
+ }
504
+
505
+ return comment;
506
+ };
507
+
508
+ this.get_unformatted = function (delimiter, orig_tag) { //function to return unformatted content in its entirety
509
+
510
+ if (orig_tag && orig_tag.toLowerCase().indexOf(delimiter) !== -1) {
511
+ return '';
512
+ }
513
+ var input_char = '';
514
+ var content = '';
515
+ var min_index = 0;
516
+ var space = true;
517
+ do {
518
+
519
+ if (this.pos >= this.input.length) {
520
+ return content;
521
+ }
522
+
523
+ input_char = this.input.charAt(this.pos);
524
+ this.pos++;
525
+
526
+ if (this.Utils.in_array(input_char, this.Utils.whitespace)) {
527
+ if (!space) {
528
+ this.line_char_count--;
529
+ continue;
530
+ }
531
+ if (input_char === '\n' || input_char === '\r') {
532
+ content += '\n';
533
+ /* Don't change tab indention for unformatted blocks. If using code for html editing, this will greatly affect <pre> tags if they are specified in the 'unformatted array'
534
+ for (var i=0; i<this.indent_level; i++) {
535
+ content += this.indent_string;
536
+ }
537
+ space = false; //...and make sure other indentation is erased
538
+ */
539
+ this.line_char_count = 0;
540
+ continue;
541
+ }
542
+ }
543
+ content += input_char;
544
+ this.line_char_count++;
545
+ space = true;
546
+
547
+ if (indent_handlebars && input_char === '{' && content.length && content[content.length - 2] === '{') {
548
+ // Handlebars expressions in strings should also be unformatted.
549
+ content += this.get_unformatted('}}');
550
+ // These expressions are opaque. Ignore delimiters found in them.
551
+ min_index = content.length;
552
+ }
553
+ } while (content.toLowerCase().indexOf(delimiter, min_index) === -1);
554
+ return content;
555
+ };
556
+
557
+ this.get_token = function () { //initial handler for token-retrieval
558
+ var token;
559
+
560
+ if (this.last_token === 'TK_TAG_SCRIPT' || this.last_token === 'TK_TAG_STYLE') { //check if we need to format javascript
561
+ var type = this.last_token.substr(7);
562
+ token = this.get_contents_to(type);
563
+ if (typeof token !== 'string') {
564
+ return token;
565
+ }
566
+ return [token, 'TK_' + type];
567
+ }
568
+ if (this.current_mode === 'CONTENT') {
569
+ token = this.get_content();
570
+ if (typeof token !== 'string') {
571
+ return token;
572
+ } else {
573
+ return [token, 'TK_CONTENT'];
574
+ }
575
+ }
576
+
577
+ if (this.current_mode === 'TAG') {
578
+ token = this.get_tag();
579
+ if (typeof token !== 'string') {
580
+ return token;
581
+ } else {
582
+ var tag_name_type = 'TK_TAG_' + this.tag_type;
583
+ return [token, tag_name_type];
584
+ }
585
+ }
586
+ };
587
+
588
+ this.get_full_indent = function (level) {
589
+ level = this.indent_level + level || 0;
590
+ if (level < 1) {
591
+ return '';
592
+ }
593
+
594
+ return Array(level + 1).join(this.indent_string);
595
+ };
596
+
597
+ this.is_unformatted = function (tag_check, unformatted) {
598
+ //is this an HTML5 block-level link?
599
+ if (!this.Utils.in_array(tag_check, unformatted)) {
600
+ return false;
601
+ }
602
+
603
+ if (tag_check.toLowerCase() !== 'a' || !this.Utils.in_array('a', unformatted)) {
604
+ return true;
605
+ }
606
+
607
+ //at this point we have an tag; is its first child something we want to remain
608
+ //unformatted?
609
+ var next_tag = this.get_tag(true /* peek. */);
610
+
611
+ // test next_tag to see if it is just html tag (no external content)
612
+ var tag = (next_tag || "").match(/^\s*<\s*\/?([a-z]*)\s*[^>]*>\s*$/);
613
+
614
+ // if next_tag comes back but is not an isolated tag, then
615
+ // let's treat the 'a' tag as having content
616
+ // and respect the unformatted option
617
+ if (!tag || this.Utils.in_array(tag, unformatted)) {
618
+ return true;
619
+ } else {
620
+ return false;
621
+ }
622
+ };
623
+
624
+ this.printer = function (js_source, indent_character, indent_size, wrap_line_length, brace_style) { //handles input/output and some other printing functions
625
+
626
+ this.input = js_source || ''; //gets the input for the Parser
627
+ this.output = [];
628
+ this.indent_character = indent_character;
629
+ this.indent_string = '';
630
+ this.indent_size = indent_size;
631
+ this.brace_style = brace_style;
632
+ this.indent_level = 0;
633
+ this.wrap_line_length = wrap_line_length;
634
+ this.line_char_count = 0; //count to see if wrap_line_length was exceeded
635
+
636
+ for (var i = 0; i < this.indent_size; i++) {
637
+ this.indent_string += this.indent_character;
638
+ }
639
+
640
+ this.print_newline = function (force, arr) {
641
+ this.line_char_count = 0;
642
+ if (!arr || !arr.length) {
643
+ return;
644
+ }
645
+ if (force || (arr[arr.length - 1] !== '\n')) { //we might want the extra line
646
+ arr.push('\n');
647
+ }
648
+ };
649
+
650
+ this.print_indentation = function (arr) {
651
+ for (var i = 0; i < this.indent_level; i++) {
652
+ arr.push(this.indent_string);
653
+ this.line_char_count += this.indent_string.length;
654
+ }
655
+ };
656
+
657
+ this.print_token = function (text) {
658
+ if (text || text !== '') {
659
+ if (this.output.length && this.output[this.output.length - 1] === '\n') {
660
+ this.print_indentation(this.output);
661
+ text = ltrim(text);
662
+ }
663
+ }
664
+ this.print_token_raw(text);
665
+ };
666
+
667
+ this.print_token_raw = function (text) {
668
+ if (text && text !== '') {
669
+ if (text.length > 1 && text[text.length - 1] === '\n') {
670
+ // unformatted tags can grab newlines as their last character
671
+ this.output.push(text.slice(0, -1));
672
+ this.print_newline(false, this.output);
673
+ } else {
674
+ this.output.push(text);
675
+ }
676
+ }
677
+
678
+ for (var n = 0; n < this.newlines; n++) {
679
+ this.print_newline(n > 0, this.output);
680
+ }
681
+ this.newlines = 0;
682
+ };
683
+
684
+ this.indent = function () {
685
+ this.indent_level++;
686
+ };
687
+
688
+ this.unindent = function () {
689
+ if (this.indent_level > 0) {
690
+ this.indent_level--;
691
+ }
692
+ };
693
+ };
694
+ return this;
695
+ }
696
+
697
+ /*_____________________--------------------_____________________*/
698
+
699
+ multi_parser = new Parser(); //wrapping functions Parser
700
+ multi_parser.printer(html_source, indent_character, indent_size, wrap_line_length, brace_style); //initialize starting values
701
+
702
+ while (true) {
703
+ var t = multi_parser.get_token();
704
+ multi_parser.token_text = t[0];
705
+ multi_parser.token_type = t[1];
706
+
707
+ if (multi_parser.token_type === 'TK_EOF') {
708
+ break;
709
+ }
710
+
711
+ switch (multi_parser.token_type) {
712
+ case 'TK_TAG_START':
713
+ multi_parser.print_newline(false, multi_parser.output);
714
+ multi_parser.print_token(multi_parser.token_text);
715
+ if (multi_parser.indent_content) {
716
+ multi_parser.indent();
717
+ multi_parser.indent_content = false;
718
+ }
719
+ multi_parser.current_mode = 'CONTENT';
720
+ break;
721
+ case 'TK_TAG_STYLE':
722
+ case 'TK_TAG_SCRIPT':
723
+ multi_parser.print_newline(false, multi_parser.output);
724
+ multi_parser.print_token(multi_parser.token_text);
725
+ multi_parser.current_mode = 'CONTENT';
726
+ break;
727
+ case 'TK_TAG_END':
728
+ //Print new line only if the tag has no content and has child
729
+ if (multi_parser.last_token === 'TK_CONTENT' && multi_parser.last_text === '') {
730
+ var tag_name = multi_parser.token_text.match(/\w+/)[0];
731
+ var tag_extracted_from_last_output = null;
732
+ if (multi_parser.output.length) {
733
+ tag_extracted_from_last_output = multi_parser.output[multi_parser.output.length - 1].match(/(?:<|{{#)\s*(\w+)/);
734
+ }
735
+ if (tag_extracted_from_last_output === null ||
736
+ tag_extracted_from_last_output[1] !== tag_name) {
737
+ multi_parser.print_newline(false, multi_parser.output);
738
+ }
739
+ }
740
+ multi_parser.print_token(multi_parser.token_text);
741
+ multi_parser.current_mode = 'CONTENT';
742
+ break;
743
+ case 'TK_TAG_SINGLE':
744
+ // Don't add a newline before elements that should remain unformatted.
745
+ var tag_check = multi_parser.token_text.match(/^\s*<([a-z]+)/i);
746
+ if (!tag_check || !multi_parser.Utils.in_array(tag_check[1], unformatted)) {
747
+ multi_parser.print_newline(false, multi_parser.output);
748
+ }
749
+ multi_parser.print_token(multi_parser.token_text);
750
+ multi_parser.current_mode = 'CONTENT';
751
+ break;
752
+ case 'TK_TAG_HANDLEBARS_ELSE':
753
+ multi_parser.print_token(multi_parser.token_text);
754
+ if (multi_parser.indent_content) {
755
+ multi_parser.indent();
756
+ multi_parser.indent_content = false;
757
+ }
758
+ multi_parser.current_mode = 'CONTENT';
759
+ break;
760
+ case 'TK_CONTENT':
761
+ multi_parser.print_token(multi_parser.token_text);
762
+ multi_parser.current_mode = 'TAG';
763
+ break;
764
+ case 'TK_STYLE':
765
+ case 'TK_SCRIPT':
766
+ if (multi_parser.token_text !== '') {
767
+ multi_parser.print_newline(false, multi_parser.output);
768
+ var text = multi_parser.token_text,
769
+ _beautifier,
770
+ script_indent_level = 1;
771
+ if (multi_parser.token_type === 'TK_SCRIPT') {
772
+ _beautifier = typeof js_beautify === 'function' && js_beautify;
773
+ } else if (multi_parser.token_type === 'TK_STYLE') {
774
+ _beautifier = typeof css_beautify === 'function' && css_beautify;
775
+ }
776
+
777
+ if (options.indent_scripts === "keep") {
778
+ script_indent_level = 0;
779
+ } else if (options.indent_scripts === "separate") {
780
+ script_indent_level = -multi_parser.indent_level;
781
+ }
782
+
783
+ var indentation = multi_parser.get_full_indent(script_indent_level);
784
+ if (_beautifier) {
785
+ // call the Beautifier if avaliable
786
+ text = _beautifier(text.replace(/^\s*/, indentation), options);
787
+ } else {
788
+ // simply indent the string otherwise
789
+ var white = text.match(/^\s*/)[0];
790
+ var _level = white.match(/[^\n\r]*$/)[0].split(multi_parser.indent_string).length - 1;
791
+ var reindent = multi_parser.get_full_indent(script_indent_level - _level);
792
+ text = text.replace(/^\s*/, indentation)
793
+ .replace(/\r\n|\r|\n/g, '\n' + reindent)
794
+ .replace(/\s+$/, '');
795
+ }
796
+ if (text) {
797
+ multi_parser.print_token_raw(indentation + trim(text));
798
+ multi_parser.print_newline(false, multi_parser.output);
799
+ }
800
+ }
801
+ multi_parser.current_mode = 'TAG';
802
+ break;
803
+ }
804
+ multi_parser.last_token = multi_parser.token_type;
805
+ multi_parser.last_text = multi_parser.token_text;
806
+ }
807
+ return multi_parser.output.join('');
808
+ }
809
+
810
+ if (typeof define === "function") {
811
+ // Add support for require.js
812
+ define(["./beautify.js", "./beautify-css.js"], function (js_beautify, css_beautify) {
813
+ return {
814
+ html_beautify: function (html_source, options) {
815
+ return style_html(html_source, options, js_beautify, css_beautify);
816
+ }
817
+ };
818
+ });
819
+ } else if (typeof exports !== "undefined") {
820
+ // Add support for CommonJS. Just put this file somewhere on your require.paths
821
+ // and you will be able to `var html_beautify = require("beautify").html_beautify`.
822
+ var js_beautify = require('./beautify.js').js_beautify;
823
+ var css_beautify = require('./beautify-css.js').css_beautify;
824
+
825
+ exports.html_beautify = function (html_source, options) {
826
+ return style_html(html_source, options, js_beautify, css_beautify);
827
+ };
828
+ } else if (typeof window !== "undefined") {
829
+ // If we're running a web page and don't have either of the above, add our one global
830
+ window.html_beautify = function (html_source, options) {
831
+ return style_html(html_source, options, window.js_beautify, window.css_beautify);
832
+ };
833
+ } else if (typeof global !== "undefined") {
834
+ // If we don't even have window, try global.
835
+ global.html_beautify = function (html_source, options) {
836
+ return style_html(html_source, options, global.js_beautify, global.css_beautify);
837
+ };
838
+ }
839
+
840
+ }());
js/markdown/adminhtml/filereader.js CHANGED
@@ -1,5 +1,5 @@
1
  /*!
2
- FileReader.js - v0.9
3
  A lightweight wrapper for common FileReader usage.
4
  Copyright 2012 Brian Grinstead - MIT License.
5
  See http://github.com/bgrins/filereader.js for documentation.
@@ -10,23 +10,30 @@
10
  var FileReader = window.FileReader;
11
  var FileReaderSyncSupport = false;
12
  var workerScript = "self.addEventListener('message', function(e) { var data=e.data; try { var reader = new FileReaderSync; postMessage({ result: reader[data.readAs](data.file), extra: data.extra, file: data.file})} catch(e){ postMessage({ result:'error', extra:data.extra, file:data.file}); } }, false);";
13
- var syncDetectionScript = "self.addEventListener('message', function(e) { postMessage(!!FileReaderSync); }, false);";
14
  var fileReaderEvents = ['loadstart', 'progress', 'load', 'abort', 'error', 'loadend'];
15
-
16
  var FileReaderJS = window.FileReaderJS = {
17
  enabled: false,
18
  setupInput: setupInput,
19
  setupDrop: setupDrop,
20
  setupClipboard: setupClipboard,
21
- sync: false,
 
 
 
 
 
 
 
 
 
22
  output: [],
23
  opts: {
24
  dragClass: "drag",
25
  accept: false,
26
  readAsDefault: 'BinaryString',
27
  readAsMap: {
28
- 'image/*': 'DataURL',
29
- 'text/*': 'Text'
30
  },
31
  on: {
32
  loadstart: noop,
@@ -47,7 +54,7 @@
47
  if (typeof(jQuery) !== "undefined") {
48
  jQuery.fn.fileReaderJS = function (opts) {
49
  return this.each(function () {
50
- if ($(this).is("input")) {
51
  setupInput(this, opts);
52
  }
53
  else {
@@ -63,46 +70,26 @@
63
  };
64
  }
65
 
66
- // Not all browsers support the FileReader interface. Return with the enabled bit = false.
67
  if (!FileReader) {
68
  return;
69
  }
70
 
71
- // WorkerHelper is a little wrapper for generating web workers from strings
72
- var WorkerHelper = (function () {
73
 
 
 
74
  var URL = window.URL || window.webkitURL;
75
- var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
76
-
77
- // May need to get just the URL in case it is needed for things beyond just creating a worker.
78
- function getURL(script) {
79
- if (window.Worker && BlobBuilder && URL) {
80
- var bb = new BlobBuilder();
81
- bb.append(script);
82
- return URL.createObjectURL(bb.getBlob());
83
- }
84
-
85
- return null;
86
- }
87
-
88
- // If there is no need to revoke a URL later, or do anything fancy then just return the worker.
89
- function getWorker(script, onmessage) {
90
- var url = getURL(script);
91
- if (url) {
92
- var worker = new Worker(url);
93
- worker.onmessage = onmessage;
94
- return worker;
95
- }
96
 
 
97
  return null;
98
  }
99
 
100
- return {
101
- getURL: getURL,
102
- getWorker: getWorker
103
- };
104
-
105
- })();
106
 
107
  // setupClipboard: bind to clipboard events (intended for document.body)
108
  function setupClipboard(element, opts) {
@@ -298,12 +285,13 @@
298
  return;
299
  }
300
 
301
- var sync = FileReaderJS.sync && FileReaderSyncSupport;
302
  var syncWorker;
303
 
304
  // Only initialize the synchronous worker if the option is enabled - to prevent the overhead
305
- if (sync) {
306
- syncWorker = WorkerHelper.getWorker(workerScript, function (e) {
 
307
  var file = e.data.file;
308
  var result = e.data.result;
309
 
@@ -317,8 +305,7 @@
317
  // Call error or load event depending on success of the read from the worker.
318
  opts.on[result === "error" ? "error" : "load"]({ target: { result: result } }, file);
319
  groupFileDone();
320
-
321
- });
322
  }
323
 
324
  Array.prototype.forEach.call(files, function (file) {
@@ -339,7 +326,7 @@
339
 
340
  var readAs = getReadAsMethod(file.type, opts.readAsMap, opts.readAsDefault);
341
 
342
- if (sync && syncWorker) {
343
  syncWorker.postMessage({
344
  file: file,
345
  extra: file.extra,
@@ -362,7 +349,6 @@
362
  }
363
  };
364
  });
365
-
366
  reader[readAs](file);
367
  }
368
  });
@@ -370,11 +356,11 @@
370
 
371
  // checkFileReaderSyncSupport: Create a temporary worker and see if FileReaderSync exists
372
  function checkFileReaderSyncSupport() {
373
- var worker = WorkerHelper.getWorker(syncDetectionScript, function (e) {
374
- FileReaderSyncSupport = e.data;
375
- });
376
-
377
  if (worker) {
 
 
 
378
  worker.postMessage({});
379
  }
380
  }
1
  /*!
2
+ FileReader.js - v0.99
3
  A lightweight wrapper for common FileReader usage.
4
  Copyright 2012 Brian Grinstead - MIT License.
5
  See http://github.com/bgrins/filereader.js for documentation.
10
  var FileReader = window.FileReader;
11
  var FileReaderSyncSupport = false;
12
  var workerScript = "self.addEventListener('message', function(e) { var data=e.data; try { var reader = new FileReaderSync; postMessage({ result: reader[data.readAs](data.file), extra: data.extra, file: data.file})} catch(e){ postMessage({ result:'error', extra:data.extra, file:data.file}); } }, false);";
13
+ var syncDetectionScript = "onmessage = function(e) { postMessage(!!FileReaderSync); };";
14
  var fileReaderEvents = ['loadstart', 'progress', 'load', 'abort', 'error', 'loadend'];
15
+ var sync = false;
16
  var FileReaderJS = window.FileReaderJS = {
17
  enabled: false,
18
  setupInput: setupInput,
19
  setupDrop: setupDrop,
20
  setupClipboard: setupClipboard,
21
+ setSync: function (value) {
22
+ sync = value;
23
+
24
+ if (sync && !FileReaderSyncSupport) {
25
+ checkFileReaderSyncSupport();
26
+ }
27
+ },
28
+ getSync: function () {
29
+ return sync && FileReaderSyncSupport;
30
+ },
31
  output: [],
32
  opts: {
33
  dragClass: "drag",
34
  accept: false,
35
  readAsDefault: 'BinaryString',
36
  readAsMap: {
 
 
37
  },
38
  on: {
39
  loadstart: noop,
54
  if (typeof(jQuery) !== "undefined") {
55
  jQuery.fn.fileReaderJS = function (opts) {
56
  return this.each(function () {
57
+ if (jQuery(this).is("input")) {
58
  setupInput(this, opts);
59
  }
60
  else {
70
  };
71
  }
72
 
73
+ // Not all browsers support the FileReader interface. Return with the enabled bit = false.
74
  if (!FileReader) {
75
  return;
76
  }
77
 
 
 
78
 
79
+ // makeWorker is a little wrapper for generating web workers from strings
80
+ function makeWorker(script) {
81
  var URL = window.URL || window.webkitURL;
82
+ var Blob = window.Blob;
83
+ var Worker = window.Worker;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
+ if (!URL || !Blob || !Worker || !script) {
86
  return null;
87
  }
88
 
89
+ var blob = new Blob([script]);
90
+ var worker = new Worker(URL.createObjectURL(blob));
91
+ return worker;
92
+ }
 
 
93
 
94
  // setupClipboard: bind to clipboard events (intended for document.body)
95
  function setupClipboard(element, opts) {
285
  return;
286
  }
287
 
288
+ var supportsSync = sync && FileReaderSyncSupport;
289
  var syncWorker;
290
 
291
  // Only initialize the synchronous worker if the option is enabled - to prevent the overhead
292
+ if (supportsSync) {
293
+ syncWorker = makeWorker(workerScript);
294
+ syncWorker.onmessage = function (e) {
295
  var file = e.data.file;
296
  var result = e.data.result;
297
 
305
  // Call error or load event depending on success of the read from the worker.
306
  opts.on[result === "error" ? "error" : "load"]({ target: { result: result } }, file);
307
  groupFileDone();
308
+ };
 
309
  }
310
 
311
  Array.prototype.forEach.call(files, function (file) {
326
 
327
  var readAs = getReadAsMethod(file.type, opts.readAsMap, opts.readAsDefault);
328
 
329
+ if (syncWorker) {
330
  syncWorker.postMessage({
331
  file: file,
332
  extra: file.extra,
349
  }
350
  };
351
  });
 
352
  reader[readAs](file);
353
  }
354
  });
356
 
357
  // checkFileReaderSyncSupport: Create a temporary worker and see if FileReaderSync exists
358
  function checkFileReaderSyncSupport() {
359
+ var worker = makeWorker(syncDetectionScript);
 
 
 
360
  if (worker) {
361
+ worker.onmessage = function (e) {
362
+ FileReaderSyncSupport = e.data;
363
+ };
364
  worker.postMessage({});
365
  }
366
  }
js/markdown/adminhtml/highlight.pack.js CHANGED
@@ -1,2 +1 @@
1
- /* https://github.com/isagalaev/highlight.js */
2
- var hljs=new function(){function l(o){return o.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+q.parentNode.className).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o<p.length;o++){if(e[p[o]]||p[o]=="no-highlight"){return p[o]}}}function c(q){var o=[];(function p(r,s){for(var t=r.firstChild;t;t=t.nextSibling){if(t.nodeType==3){s+=t.nodeValue.length}else{if(t.nodeName=="BR"){s+=1}else{if(t.nodeType==1){o.push({event:"start",offset:s,node:t});s=p(t,s);o.push({event:"stop",offset:s,node:t})}}}}return s})(q,0);return o}function j(x,v,w){var p=0;var y="";var r=[];function t(){if(x.length&&v.length){if(x[0].offset!=v[0].offset){return(x[0].offset<v[0].offset)?x:v}else{return v[0].event=="start"?x:v}}else{return x.length?x:v}}function s(A){function z(B){return" "+B.nodeName+'="'+l(B.value)+'"'}return"<"+A.nodeName+Array.prototype.map.call(A.attributes,z).join("")+">"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=("</"+o.nodeName.toLowerCase()+">")}while(o!=u.node);r.splice(q,1);while(q<r.length){y+=s(r[q]);q++}}}}return y+l(w.substr(p))}function f(q){function o(s,r){return RegExp(s,"m"+(q.cI?"i":"")+(r?"g":""))}function p(y,w){if(y.compiled){return}y.compiled=true;var s=[];if(y.k){var r={};function z(A,t){t.split(" ").forEach(function(B){var C=B.split("|");r[C[0]]=[A,C[1]?Number(C[1]):1];s.push(C[0])})}y.lR=o(y.l||hljs.IR,true);if(typeof y.k=="string"){z("keyword",y.k)}else{for(var x in y.k){if(!y.k.hasOwnProperty(x)){continue}z(x,y.k[x])}}y.k=r}if(w){if(y.bWK){y.b="\\b("+s.join("|")+")\\s"}y.bR=o(y.b?y.b:"\\B|\\b");if(!y.e&&!y.eW){y.e="\\B|\\b"}if(y.e){y.eR=o(y.e)}y.tE=y.e||"";if(y.eW&&w.tE){y.tE+=(y.e?"|":"")+w.tE}}if(y.i){y.iR=o(y.i)}if(y.r===undefined){y.r=1}if(!y.c){y.c=[]}for(var v=0;v<y.c.length;v++){if(y.c[v]=="self"){y.c[v]=y}p(y.c[v],y)}if(y.starts){p(y.starts,w)}var u=[];for(var v=0;v<y.c.length;v++){u.push(y.c[v].b)}if(y.tE){u.push(y.tE)}if(y.i){u.push(y.i)}y.t=u.length?o(u.join("|"),true):{exec:function(t){return null}}}p(q)}function d(D,E){function o(r,M){for(var L=0;L<M.c.length;L++){var K=M.c[L].bR.exec(r);if(K&&K.index==0){return M.c[L]}}}function s(K,r){if(K.e&&K.eR.test(r)){return K}if(K.eW){return s(K.parent,r)}}function t(r,K){return K.i&&K.iR.test(r)}function y(L,r){var K=F.cI?r[0].toLowerCase():r[0];return L.k.hasOwnProperty(K)&&L.k[K]}function G(){var K=l(w);if(!A.k){return K}var r="";var N=0;A.lR.lastIndex=0;var L=A.lR.exec(K);while(L){r+=K.substr(N,L.index-N);var M=y(A,L);if(M){v+=M[1];r+='<span class="'+M[0]+'">'+L[0]+"</span>"}else{r+=L[0]}N=A.lR.lastIndex;L=A.lR.exec(K)}return r+K.substr(N)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return'<span class="'+r.language+'">'+r.value+"</span>"}function J(){return A.sL!==undefined?z():G()}function I(L,r){var K=L.cN?'<span class="'+L.cN+'">':"";if(L.rB){x+=K;w=""}else{if(L.eB){x+=l(r)+K;w=""}else{x+=K;w=r}}A=Object.create(L,{parent:{value:A}});B+=L.r}function C(K,r){w+=K;if(r===undefined){x+=J();return 0}var L=o(r,A);if(L){x+=J();I(L,r);return L.rB?0:r.length}var M=s(A,r);if(M){if(!(M.rE||M.eE)){w+=r}x+=J();do{if(A.cN){x+="</span>"}A=A.parent}while(A!=M.parent);if(M.eE){x+=l(r)}w="";if(M.starts){I(M.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var F=e[D];f(F);var A=F;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(E);if(!u){break}q=C(E.substr(p,u.index-p),u[0]);p=u.index+q}C(E.substr(p));return{r:B,keyword_count:v,value:x,language:D}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:l(E)}}else{throw H}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"<br>")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ />]+"},b]}]}}(hljs);hljs.LANGUAGES.markdown=function(a){return{c:[{cN:"header",b:"^#{1,3}",e:"$"},{cN:"header",b:"^.+?\\n[=-]{2,}$"},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",b:"\\*.+?\\*"},{cN:"emphasis",b:"_.+?_",r:0},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",b:"`.+?`"},{cN:"code",b:"^ ",e:"$",r:0},{cN:"horizontal_rule",b:"^-{3,}",e:"$"},{b:"\\[.+?\\]\\(.+?\\)",rB:true,c:[{cN:"link_label",b:"\\[.+\\]"},{cN:"link_url",b:"\\(",e:"\\)",eB:true,eE:true}]}]}}(hljs);
1
+ var hljs=new function(){function l(o){return o.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName.toUpperCase()=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName.toUpperCase()=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+(q.parentNode?q.parentNode.className:"")).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o<p.length;o++){if(e[p[o]]||p[o]=="no-highlight"){return p[o]}}}function c(q){var o=[];(function p(r,s){for(var t=r.firstChild;t;t=t.nextSibling){if(t.nodeType==3){s+=t.nodeValue.length}else{if(t.nodeName.toUpperCase()=="BR"){s+=1}else{if(t.nodeType==1){o.push({event:"start",offset:s,node:t});s=p(t,s);o.push({event:"stop",offset:s,node:t})}}}}return s})(q,0);return o}function j(p,r,v){var q=0;var y="";var s=[];function u(){if(!p.length||!r.length){return p.length?p:r}if(p[0].offset!=r[0].offset){return(p[0].offset<r[0].offset)?p:r}return r[0].event=="start"?p:r}function t(A){function z(B){return" "+B.nodeName+'="'+l(B.value)+'"'}y+="<"+A.nodeName.toLowerCase()+Array.prototype.map.call(A.attributes,z).join("")+">"}function x(z){y+="</"+z.nodeName.toLowerCase()+">"}function o(z){(z.event=="start"?t:x)(z.node)}while(p.length||r.length){var w=u();y+=l(v.substr(q,w[0].offset-q));q=w[0].offset;if(w==p){s.reverse().forEach(x);do{o(w.splice(0,1)[0]);w=u()}while(w==p&&w.length&&w[0].offset==q);s.reverse().forEach(t)}else{if(w[0].event=="start"){s.push(w[0].node)}else{s.pop()}o(w.splice(0,1)[0])}}return y+l(v.substr(q))}function f(r){function o(s){return(s&&s.source)||s}function p(t,s){return RegExp(o(t),"m"+(r.cI?"i":"")+(s?"g":""))}function q(z,x){if(z.compiled){return}z.compiled=true;var u=[];if(z.k){var s={};function A(B,t){if(r.cI){t=t.toLowerCase()}t.split(" ").forEach(function(C){var D=C.split("|");s[D[0]]=[B,D[1]?Number(D[1]):1];u.push(D[0])})}z.lR=p(z.l||"\\b"+hljs.IR+"\\b(?!\\.)",true);if(typeof z.k=="string"){A("keyword",z.k)}else{for(var y in z.k){if(!z.k.hasOwnProperty(y)){continue}A(y,z.k[y])}}z.k=s}if(x){if(z.bWK){z.b="\\b("+u.join("|")+")\\b(?!\\.)\\s*"}z.bR=p(z.b?z.b:"\\B|\\b");if(!z.e&&!z.eW){z.e="\\B|\\b"}if(z.e){z.eR=p(z.e)}z.tE=o(z.e)||"";if(z.eW&&x.tE){z.tE+=(z.e?"|":"")+x.tE}}if(z.i){z.iR=p(z.i)}if(z.r===undefined){z.r=1}if(!z.c){z.c=[]}for(var w=0;w<z.c.length;w++){if(z.c[w]=="self"){z.c[w]=z}q(z.c[w],z)}if(z.starts){q(z.starts,x)}var v=[];for(var w=0;w<z.c.length;w++){v.push(o(z.c[w].b))}if(z.tE){v.push(o(z.tE))}if(z.i){v.push(o(z.i))}z.t=v.length?p(v.join("|"),true):{exec:function(t){return null}}}q(r)}function d(E,G,C,M){function o(r,P){for(var O=0;O<P.c.length;O++){var N=P.c[O].bR.exec(r);if(N&&N.index==0){return P.c[O]}}}function s(N,r){if(N.e&&N.eR.test(r)){return N}if(N.eW){return s(N.parent,r)}}function t(r,N){return !C&&N.i&&N.iR.test(r)}function y(O,r){var N=H.cI?r[0].toLowerCase():r[0];return O.k.hasOwnProperty(N)&&O.k[N]}function I(){var N=l(w);if(!B.k){return N}var r="";var Q=0;B.lR.lastIndex=0;var O=B.lR.exec(N);while(O){r+=N.substr(Q,O.index-Q);var P=y(B,O);if(P){v+=P[1];r+='<span class="'+P[0]+'">'+O[0]+"</span>"}else{r+=O[0]}Q=B.lR.lastIndex;O=B.lR.exec(N)}return r+N.substr(Q)}function z(){if(B.sL&&!e[B.sL]){return l(w)}var N=B.subLanguageMode=="continuous"?B.top:undefined;var r=B.sL?d(B.sL,w,true,N):g(w);if(B.r>0){v+=r.keyword_count;A+=r.r}B.top=r.top;return'<span class="'+r.language+'">'+r.value+"</span>"}function L(){return B.sL!==undefined?z():I()}function K(O,r){var N=O.cN?'<span class="'+O.cN+'">':"";if(O.rB){x+=N;w=""}else{if(O.eB){x+=l(r)+N;w=""}else{x+=N;w=r}}B=Object.create(O,{parent:{value:B}})}function D(N,r){w+=N;if(r===undefined){x+=L();return 0}var P=o(r,B);if(P){x+=L();K(P,r);return P.rB?0:r.length}var Q=s(B,r);if(Q){var O=B;if(!(O.rE||O.eE)){w+=r}x+=L();do{if(B.cN){x+="</span>"}A+=B.r;B=B.parent}while(B!=Q.parent);if(O.eE){x+=l(r)}w="";if(Q.starts){K(Q.starts,"")}return O.rE?0:r.length}if(t(r,B)){throw new Error('Illegal lexem "'+r+'" for mode "'+(B.cN||"<unnamed>")+'"')}w+=r;return r.length||1}var H=e[E];if(!H){throw new Error('Unknown language: "'+E+'"')}f(H);var B=M||H;var x="";for(var F=B;F!=H;F=F.parent){if(F.cN){x='<span class="'+F.cN+'">'+x}}var w="";var A=0;var v=0;try{var u,q,p=0;while(true){B.t.lastIndex=p;u=B.t.exec(G);if(!u){break}q=D(G.substr(p,u.index-p),u[0]);p=u.index+q}D(G.substr(p));for(var F=B;F.parent;F=F.parent){if(F.cN){x+="</span>"}}return{r:A,keyword_count:v,value:x,language:E,top:B}}catch(J){if(J.message.indexOf("Illegal")!=-1){return{r:0,keyword_count:0,value:l(G)}}else{throw J}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s,false);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"<br>")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v,true):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElementNS("http://www.w3.org/1999/xhtml","pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml","pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.javascript=function(a){return{k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const",literal:"true false null undefined NaN Infinity"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,a.REGEXP_MODE,{b:/</,e:/>;/,sL:"xml"}],r:0},{cN:"function",bWK:true,e:/{/,k:"function",c:[{cN:"title",b:/[A-Za-z$_][0-9A-Za-z$_]*/},{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBLCLM],i:/["'\(]/}],i:/\[|%/}]}}(hljs);hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,r:0,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"</?",e:"/?>",r:0,c:[{cN:"title",b:"[^ /><]+"},b]}]}}(hljs);hljs.LANGUAGES.markdown=function(a){return{c:[{cN:"header",b:"^#{1,3}",e:"$"},{cN:"header",b:"^.+?\\n[=-]{2,}$"},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",b:"\\*.+?\\*"},{cN:"emphasis",b:"_.+?_",r:0},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",b:"`.+?`"},{cN:"code",b:"^ ",e:"$",r:0},{cN:"horizontal_rule",b:"^-{3,}",e:"$"},{b:"\\[.+?\\]\\(.+?\\)",rB:true,c:[{cN:"link_label",b:"\\[.+\\]"},{cN:"link_url",b:"\\(",e:"\\)",eB:true,eE:true}]}]}}(hljs);hljs.LANGUAGES.css=function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*";var c={cN:"function",b:b+"\\(",e:"\\)",c:["self",a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.NM]}]},{cN:"tag",b:b,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[c,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs);
 
js/markdown/adminhtml/markdown.js CHANGED
@@ -4,7 +4,8 @@
4
  * @author Cyrill at Schumacher dot fm / @SchumacherFM
5
  * @copyright Copyright (c)
6
  */
7
- /*global $,marked,varienGlobalEvents,Ajax,hljs,FileReaderJS,Event,encode_base64,reMarked*/
 
8
  ;
9
  (function () {
10
  'use strict';
@@ -15,7 +16,9 @@
15
  isViewMarkdownSourceHtml = false,
16
  _initializedFileReaderContainer = {},
17
  _textAreaCurrentCaretObject = {}, // set by the onClick event
18
- _toggleMarkdownSourceOriginalMarkdown = '';
 
 
19
 
20
  /**
21
  *
@@ -49,6 +52,12 @@
49
  mediaBaseUrl: _checkHttp(config.phi || false),
50
  extraRendererUrl: _checkHttp(config.eru || false),
51
  eeLoadOnClick: config.eeloc || false,
 
 
 
 
 
 
52
  reMarkedCfg: decodeURIComponent(config.rmc || '{}').evalJSON(true)
53
  };
54
  return true;
@@ -92,10 +101,6 @@
92
  return window.FileReader !== undefined;
93
  }
94
 
95
- function mdExternalUrl(url) {
96
- window.open(url);
97
- }
98
-
99
  /**
100
  *
101
  * @param textareaId
@@ -124,7 +129,27 @@
124
  function toggleMarkdownSource(element, textAreaId) {
125
  var _loadEpic = false,
126
  _instance,
127
- $textAreaId = $(textAreaId);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
  if (true === isViewMarkdownSourceHtml) {
130
  isViewMarkdownSourceHtml = false;
@@ -207,24 +232,26 @@
207
 
208
  /**
209
  *
210
- * @param string htmlString
211
- * @returns string
 
212
  * @private
213
  */
214
- function _highlight(htmlString) {
215
- if (true === isViewMarkdownSourceHtml) {
216
- htmlString = '<pre class="hljs">' + hljs.highlight('xml', htmlString).value + '</pre>';
217
- }
218
- return htmlString;
219
  }
220
 
221
  /**
 
222
  *
223
  * @param content string
224
  * @returns string
225
  * @private
226
  */
227
- function _parserBefore(content) {
228
  var imgUrl = '',
229
  mediaRegex = /\{\{media\s+url="([^"]+)"\s*\}\}/i,
230
  matches = null;
@@ -247,24 +274,22 @@
247
 
248
  /**
249
  *
250
- * default parsing without syntax highlightning
251
- *
252
- * @param string content
253
- * @param object $textArea
254
- * @returns string
255
  * @private
256
  */
257
- function _parserDefault(content, $textArea) {
258
- var pContent = {};
259
-
260
- if (content.length > 10 && _markDownGlobalConfig.extraRendererUrl) {
261
- pContent = _mdExtraRender(content);
262
- pContent.then(function (error, html) {
263
- $textArea.value = html;
264
- });
265
- return '<h3>Preview will be available shortly ...</h3>';
266
- }
267
- return marked(_parserBefore(content));
 
268
  }
269
 
270
  /**
@@ -277,7 +302,13 @@
277
  */
278
  function _parserEpicEditor(content, $textArea) {
279
  var currentActiveInstance = _getEpicEditorActiveInstance(),
280
- pContent = {};
 
 
 
 
 
 
281
 
282
  if (content.length > 10 && _markDownGlobalConfig.extraRendererUrl) {
283
  pContent = _mdExtraRender(content);
@@ -285,13 +316,13 @@
285
  if (currentActiveInstance && currentActiveInstance.is('loaded')) {
286
  currentActiveInstance.getElement('previewer').body.innerHTML = _highlight(html);
287
  } else {
288
- $textArea.value = html;
289
  }
290
  });
291
  return _highlight('<h3>Preview will be available shortly ...</h3>');
292
  }
293
 
294
- return _highlight(marked(_parserBefore(content)));
295
  }
296
 
297
  /**
@@ -458,7 +489,7 @@
458
  dragClass: 'fReaderDrag',
459
  accept: 'image/*',
460
  readAsMap: {
461
- 'image/*': 'BinaryString'
462
  },
463
  readAsDefault: 'BinaryString',
464
  on: {
@@ -481,7 +512,7 @@
481
  },
482
  method: 'post',
483
  parameters: {
484
- 'binaryData': encode_base64(e.target.result),
485
  'file': JSON.stringify(file)
486
  }
487
  });
@@ -499,25 +530,11 @@
499
  };
500
 
501
  FileReaderJS.setupDrop(target, opts);
 
 
502
  _initializedFileReaderContainer[target.id] = true;
503
  }
504
 
505
- /**
506
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileReader
507
- * @param _epicEditorInstance window.EpicEditor loaded
508
- * @private
509
- */
510
- function _createFileReader(event) {
511
- var target = event.target || event.srcElement;
512
-
513
- _textAreaCurrentCaretObject = target;
514
-
515
- // check if already initialized
516
- if (_initializedFileReaderContainer[target.id] === undefined) {
517
- _createFileReaderInstance(target);
518
- }
519
- }
520
-
521
  /**
522
  *
523
  * @returns {reMarked}
@@ -536,7 +553,7 @@
536
  bold_char: "*", // char used for strong
537
  emph_char: "_", // char used for em
538
  gfm_del: true, // ~~strikeout~~ for <del>strikeout</del>
539
- gfm_tbls: false, // markdown-extra tables @SchumacherFM: if true the error on line 518 in remarked.js :-(
540
  tbl_edges: false, // show side edges on tables
541
  hash_lnks: false, // anchors w/hash hrefs as links
542
  br_only: false // avoid using " " as line break indicator
@@ -545,57 +562,521 @@
545
  return new reMarked(options);
546
  }
547
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
548
  /**
549
  * renders html to markdown
550
  * @param textAreaId string
551
  */
552
  function htmlToMarkDown(element, textAreaId) {
553
- var html = $(textAreaId).value || '';
 
 
 
 
554
 
555
- var _instance = epicEditorInstances[textAreaId] || false;
556
- var _loadedEpic = _isEpicEditorEnabled() && false !== _instance && _instance.is('loaded');
557
  if (true === _loadedEpic) {
558
  toggleEpicEditor(element, textAreaId);
559
  }
560
 
561
-
562
  if (_markDownGlobalConfig.tag !== '' && html.indexOf(_markDownGlobalConfig.tag) === -1) {
563
- $(textAreaId).value = _markDownGlobalConfig.tag + '\n' + _getReMarked().render(html);
564
  }
565
- if (_markDownGlobalConfig.tag === '') {
566
- $(textAreaId).value = _getReMarked().render(html);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
567
  }
568
  }
569
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
571
  * loads the filereader, epiceditor
572
  */
573
  function _mdInitialize() {
574
  _initGlobalConfig();
 
575
  var parentElementIds = ['product_edit_form', 'edit_form', 'category-edit-container', 'email_template_edit_form'];
 
576
  if (varienGlobalEvents) {
577
  varienGlobalEvents.fireEvent('mdLoadForms', parentElementIds);
578
  }
579
 
580
  // loading multiple instances on one page
581
- // only works with event delegation due category edit page ...
582
  // fire event for customization varienGlobalEvents.attachEventHandler('showTab', function (e) {...}
583
  parentElementIds.forEach(function (elementId) {
584
  var $elementId = $(elementId);
585
  if ($elementId) {
 
 
 
586
  // some things are only possible with event delegation ...
587
  if (true === _isEpicEditorEnabled() && true === _markDownGlobalConfig.eeLoadOnClick) {
588
  $elementId.on('click', 'textarea.initEpicEditor', _createEpicEditorInstances);
589
  }
590
  if (true === _isFileReaderEnabled()) {
591
- $elementId.on('click', 'textarea.initFileReader', _createFileReader);
592
  }
593
-
594
  }
595
  });
 
 
 
 
 
 
596
  }
597
 
598
- this.mdExternalUrl = mdExternalUrl;
599
  this.toggleMarkdown = toggleMarkdown;
600
  this.toggleEpicEditor = toggleEpicEditor;
601
  this.toggleMarkdownSource = toggleMarkdownSource;
@@ -696,11 +1177,6 @@
696
  Promise: Promise,
697
  join: join,
698
  chain: chain,
699
-
700
- /* Error codes */
701
- ENOXHR: 1,
702
- ETIMEOUT: 2
703
-
704
  };
705
 
706
  if (typeof define === 'function' && define.amd) {
4
  * @author Cyrill at Schumacher dot fm / @SchumacherFM
5
  * @copyright Copyright (c)
6
  */
7
+ /*global $,$$,marked,varienGlobalEvents,Ajax,hljs,FileReaderJS,Event,encode_base64,reMarked,Effect,Element*/
8
+ /*jshint bitwise:true, curly:true, eqeqeq:true, forin:true, noarg:true, noempty:true, nonew:true, undef:true, strict:false, browser:true, prototypejs:true */
9
  ;
10
  (function () {
11
  'use strict';
16
  isViewMarkdownSourceHtml = false,
17
  _initializedFileReaderContainer = {},
18
  _textAreaCurrentCaretObject = {}, // set by the onClick event
19
+ _toggleMarkdownSourceOriginalMarkdown = '',
20
+ tempIframeJSSource = '',
21
+ iFrameScrollPositions = {};
22
 
23
  /**
24
  *
52
  mediaBaseUrl: _checkHttp(config.phi || false),
53
  extraRendererUrl: _checkHttp(config.eru || false),
54
  eeLoadOnClick: config.eeloc || false,
55
+ isHiddenInsertImageButton: config.hideIIB || true,
56
+ previewCSS: config.mdCss || false,
57
+ previewUrl: config.lpUrl || '',
58
+ stores: config.stores || [],
59
+ featureBaseUrl: config.feaBUrl || '',
60
+ highLightCSS: config.hlCss || false,
61
  reMarkedCfg: decodeURIComponent(config.rmc || '{}').evalJSON(true)
62
  };
63
  return true;
101
  return window.FileReader !== undefined;
102
  }
103
 
 
 
 
 
104
  /**
105
  *
106
  * @param textareaId
129
  function toggleMarkdownSource(element, textAreaId) {
130
  var _loadEpic = false,
131
  _instance,
132
+ $textAreaId = $(textAreaId),
133
+
134
+ /**
135
+ *
136
+ * @param content
137
+ * @param $textArea
138
+ * @returns {*}
139
+ * @private
140
+ */
141
+ _parserDefault = function (content, $textArea) {
142
+ var pContent = {}, renderedMarkDown = '';
143
+
144
+ if (content.length > 10 && _markDownGlobalConfig.extraRendererUrl) {
145
+ pContent = _mdExtraRender(content);
146
+ pContent.then(function (error, html) {
147
+ $textArea.value = html;
148
+ });
149
+ return '<h3>Preview will be available shortly ...</h3>';
150
+ }
151
+ return marked(_handleMagentoMediaUrl(content));
152
+ };
153
 
154
  if (true === isViewMarkdownSourceHtml) {
155
  isViewMarkdownSourceHtml = false;
232
 
233
  /**
234
  *
235
+ * @param htmlString
236
+ * @param options
237
+ * @returns {string}
238
  * @private
239
  */
240
+ function _highlightOpt(htmlString, options) {
241
+ options = options || {};
242
+ var _hlPre = options.hlPre || '<pre><code>',
243
+ _hlPost = options.hlPost || '</code></pre>';
244
+ return _hlPre + hljs.highlight('xml', htmlString).value + _hlPost;
245
  }
246
 
247
  /**
248
+ * handles magento special tag {{media url=""}}
249
  *
250
  * @param content string
251
  * @returns string
252
  * @private
253
  */
254
+ function _handleMagentoMediaUrl(content) {
255
  var imgUrl = '',
256
  mediaRegex = /\{\{media\s+url="([^"]+)"\s*\}\}/i,
257
  matches = null;
274
 
275
  /**
276
  *
277
+ * @param htmlString
278
+ * @returns {*}
 
 
 
279
  * @private
280
  */
281
+ function _htmlBeautify(htmlString) {
282
+ return window.html_beautify(htmlString, {
283
+ 'indent_inner_html': false,
284
+ 'indent_size': 2,
285
+ 'indent_char': ' ',
286
+ 'wrap_line_length': 78,
287
+ 'brace_style': 'expand',
288
+ 'unformatted': ['a', 'sub', 'sup', 'b', 'i', 'u'],
289
+ 'preserve_newlines': true,
290
+ 'max_preserve_newlines': 5,
291
+ 'indent_handlebars': false
292
+ });
293
  }
294
 
295
  /**
302
  */
303
  function _parserEpicEditor(content, $textArea) {
304
  var currentActiveInstance = _getEpicEditorActiveInstance(),
305
+ pContent = {},
306
+ _highlight = function (htmlString) {
307
+ if (true === isViewMarkdownSourceHtml) {
308
+ htmlString = _highlightOpt(htmlString, {'hlPre': '<pre class="hljs">'});
309
+ }
310
+ return htmlString;
311
+ };
312
 
313
  if (content.length > 10 && _markDownGlobalConfig.extraRendererUrl) {
314
  pContent = _mdExtraRender(content);
316
  if (currentActiveInstance && currentActiveInstance.is('loaded')) {
317
  currentActiveInstance.getElement('previewer').body.innerHTML = _highlight(html);
318
  } else {
319
+ $textArea.value = html; // @todo bug if epicEditor is disabled an extra enabled
320
  }
321
  });
322
  return _highlight('<h3>Preview will be available shortly ...</h3>');
323
  }
324
 
325
+ return _highlight(marked(_handleMagentoMediaUrl(content)));
326
  }
327
 
328
  /**
489
  dragClass: 'fReaderDrag',
490
  accept: 'image/*',
491
  readAsMap: {
492
+ 'image/*': 'BinaryString' // @todo refactor for using: ArrayBuffer
493
  },
494
  readAsDefault: 'BinaryString',
495
  on: {
512
  },
513
  method: 'post',
514
  parameters: {
515
+ 'binaryData': encode_base64(e.target.result), // @todo refactor use real file uploads -> ArrayBuffer
516
  'file': JSON.stringify(file)
517
  }
518
  });
530
  };
531
 
532
  FileReaderJS.setupDrop(target, opts);
533
+ FileReaderJS.setupInput($('man_chooser_' + target.id), opts);
534
+ FileReaderJS.setupClipboard(target, opts);
535
  _initializedFileReaderContainer[target.id] = true;
536
  }
537
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
538
  /**
539
  *
540
  * @returns {reMarked}
553
  bold_char: "*", // char used for strong
554
  emph_char: "_", // char used for em
555
  gfm_del: true, // ~~strikeout~~ for <del>strikeout</del>
556
+ gfm_tbls: true, // markdown-extra tables
557
  tbl_edges: false, // show side edges on tables
558
  hash_lnks: false, // anchors w/hash hrefs as links
559
  br_only: false // avoid using " " as line break indicator
562
  return new reMarked(options);
563
  }
564
 
565
+ /**
566
+ *
567
+ * @param text
568
+ * @constructor
569
+ */
570
+ function MagentoTagPreserver(text) {
571
+ this.text = text;
572
+ this.container = {};
573
+ }
574
+
575
+ MagentoTagPreserver.prototype = {
576
+ getPreserved: function () {
577
+ var
578
+ tagRegex = /(\{\{[^\}]+\}\})/, // e.g.: {{store direct_url="about-us"}}
579
+ matches = null,
580
+ key = '',
581
+ i = 0;
582
+
583
+ while (tagRegex.test(this.text)) {
584
+ matches = tagRegex.exec(this.text);
585
+ if (null !== matches && matches[1] !== undefined) {
586
+ key = Math.random() + '_' + i;
587
+ this.text = this.text.replace(matches[1], key);
588
+ this.container[key] = matches[1];
589
+ i = i + 1;
590
+ }
591
+ }
592
+
593
+ return this.text;
594
+ },
595
+ restore: function (transformedString) {
596
+ var key = '';
597
+ this.text = '';
598
+
599
+ for (key in this.container) {
600
+ if (this.container.hasOwnProperty(key)) {
601
+ transformedString = transformedString.replace(key, this.container[key]);
602
+ }
603
+ }
604
+ this.container = {};
605
+ return transformedString;
606
+ }
607
+
608
+ };
609
+
610
  /**
611
  * renders html to markdown
612
  * @param textAreaId string
613
  */
614
  function htmlToMarkDown(element, textAreaId) {
615
+ var html = '',
616
+ thePreserver = new MagentoTagPreserver($(textAreaId).value || ''),
617
+ markDownGlobalConfigTag = '',
618
+ _instance = epicEditorInstances[textAreaId] || false,
619
+ _loadedEpic = _isEpicEditorEnabled() && false !== _instance && _instance.is('loaded');
620
 
 
 
621
  if (true === _loadedEpic) {
622
  toggleEpicEditor(element, textAreaId);
623
  }
624
 
625
+ html = thePreserver.getPreserved();
626
  if (_markDownGlobalConfig.tag !== '' && html.indexOf(_markDownGlobalConfig.tag) === -1) {
627
+ markDownGlobalConfigTag = _markDownGlobalConfig.tag;
628
  }
629
+
630
+ $(textAreaId).value = thePreserver.restore(markDownGlobalConfigTag + '\n' + _getReMarked().render(html));
631
+ }
632
+
633
+ /**
634
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/FileReader
635
+ * @param _epicEditorInstance window.EpicEditor loaded
636
+ * @private
637
+ */
638
+ function _createFileReaderFactory(event) {
639
+ var target = event.target || event.srcElement;
640
+ _textAreaCurrentCaretObject = target;
641
+
642
+ // check if already initialized
643
+ if (_initializedFileReaderContainer[target.id] === undefined) {
644
+ _createFileReaderInstance(target);
645
  }
646
  }
647
 
648
+ /******************************************************************************************************
649
+ *
650
+ * @constructor
651
+ */
652
+ function TabPreviewHandler() {
653
+ this.data = {};
654
+ this._isHtmlPreview = false;
655
+ this._livePreviewSetUpDone = false;
656
+ this._reloadCounter = 0;
657
+ this.lpInputElement = new Element('input', {
658
+ 'type': 'text',
659
+ 'class': 'input-text',
660
+ 'value': ''
661
+ });
662
+ this._reloadAnswers = [
663
+ 'Cannot find a URL ...',
664
+ 'As I\'ve said before: Cannot find a URL ...',
665
+ 'Would you please stop clicking on me?',
666
+ 'Again ... you have to put in a valid URL!',
667
+ 'One more click ...'
668
+ ];
669
+ this._lockedRaptor = false;
670
+ }
671
+
672
+ /**
673
+ *
674
+ *
675
+ */
676
+ TabPreviewHandler.prototype = {
677
+ _localStorageGet: function (key) {
678
+ return window.localStorage.getItem('schumacherfm_markdown_' + this.data.textAreaId + '_' + key);
679
+ },
680
+ _localStorageSet: function (key, value) {
681
+ return window.localStorage.setItem('schumacherfm_markdown_' + this.data.textAreaId + '_' + key, value);
682
+ },
683
+ setData: function (data) {
684
+ this._isHtmlPreview = false;
685
+ this.data = data;
686
+ this._reloadCounter = 0;
687
+ return this;
688
+ },
689
+ _preview: function () {
690
+ var pContent = new promise.Promise(),
691
+ self = this,
692
+ content = $(this.data.textAreaId).value;
693
+
694
+ if (content.replace(/\s*/g, '') === '') {
695
+ self._setIframe('');
696
+ return false;
697
+ }
698
+
699
+ if (_markDownGlobalConfig.extraRendererUrl) {
700
+ pContent = _mdExtraRender(content);
701
+ pContent.then(function (error, html) {
702
+ self._setIframe(html);
703
+ });
704
+ } else {
705
+ pContent.then(function (error, markdownContent) {
706
+ markdownContent = marked(_handleMagentoMediaUrl(markdownContent));
707
+ this._setIframe(markdownContent);
708
+ }, this);
709
+ pContent.done(null, content);
710
+ }
711
+ },
712
+ _getHtmlStyleSheet: function (styleUrl) {
713
+ return '<link href="' + styleUrl + '" rel="stylesheet" type="text/css" />';
714
+ },
715
+ _getStyleSheets: function () {
716
+ return _markDownGlobalConfig.highLightCSS && this._isHtmlPreview
717
+ ? this._getHtmlStyleSheet(_markDownGlobalConfig.highLightCSS)
718
+ : this._getHtmlStyleSheet(_markDownGlobalConfig.previewCSS);
719
+ },
720
+ _setIframeSrc: function (theSrc) {
721
+ var theIframe = this.data.tabBody.select('.iframePreview')[0];
722
+ theIframe.src = theSrc;
723
+ return this;
724
+ },
725
+ _getJavaScript: function () {
726
+ var insertJS = tempIframeJSSource.replace('~~id~~', this.data.tabBody.id);
727
+ insertJS = insertJS.replace('~~scrollto~~', iFrameScrollPositions[this.data.tabBody.id] || 0);
728
+ return '<script type="text/javascript">' + insertJS + '</script>';
729
+ },
730
+ _setIframe: function (htmlString) {
731
+ if (_markDownGlobalConfig.previewCSS === false) {
732
+ alert('Markdown Preview Style Sheet not available!');
733
+ console.log(_markDownGlobalConfig);
734
+ return false;
735
+ }
736
+
737
+ var bodyStyle = 'pointer-events:none;';
738
+ if (true === this._isHtmlPreview) {
739
+ htmlString = _highlightOpt(_htmlBeautify(htmlString));
740
+ bodyStyle += 'padding:0; margin:0;';
741
+ }
742
+
743
+ // http://www.thecssninja.com/javascript/pointer-events-60fps
744
+ this._setIframeSrc('data:text/html;charset=utf-8,' +
745
+ encodeURIComponent('<html><head>' + this._getStyleSheets() +
746
+ '</head><body style="' + bodyStyle + '">' +
747
+ this._getJavaScript()
748
+ +
749
+ htmlString
750
+ + '</body></html>'));
751
+ return true;
752
+ },
753
+ preview: function () {
754
+ this._preview();
755
+ },
756
+ htmlPreview: function () {
757
+ this._isHtmlPreview = true;
758
+ this._preview();
759
+ },
760
+ _setUpLivePreview: function () {
761
+ if (true === this._livePreviewSetUpDone) {
762
+ return null;
763
+ }
764
+
765
+ var self = this,
766
+ ul = self.data.tabBody.select('.previewStores')[0],
767
+ liElement = new Element('li'),
768
+ reload = new Element('a', {'href': '#'}),
769
+ url = _markDownGlobalConfig.previewUrl + '?___store=';
770
+
771
+ if (_markDownGlobalConfig.previewUrl !== '') {
772
+ _markDownGlobalConfig.stores.forEach(function (storeCode) {
773
+ ul.insert('<li><a href="' + url + storeCode + '" target="' + self.data.textAreaId + '__livePreviewB">' + storeCode + '</a></li>');
774
+ });
775
+ }
776
+
777
+ if (true === _markDownGlobalConfig.previewUrl.empty()) {
778
+
779
+ this.lpInputElement.value = self._localStorageGet('lpUrl');
780
+ this.lpInputElement.observe('change', this._observeUserLivePreviewUrl.bind(this));
781
+ reload.update('Reload?');
782
+ reload.observe('click', self._observeUserLivePreviewUrlReload.bind(this));
783
+ liElement.update('Please enter live preview URL. (Cannot be detected automatically) ');
784
+ liElement.insert(reload);
785
+ liElement.insert(self.lpInputElement);
786
+ ul.insert(liElement);
787
+ }
788
+
789
+ this._livePreviewSetUpDone = true;
790
+ return _markDownGlobalConfig.previewUrl !== '' ? url + (_markDownGlobalConfig.stores[0] || 'default') : null;
791
+ },
792
+ _isUrl: function (url) {
793
+ return url.search(/^htt(p|ps):\/\/[a-z0-9]+/) !== -1;
794
+ },
795
+ _observeUserLivePreviewSetiFrame: function (url) {
796
+ if (true === this._isUrl(url)) {
797
+ this._setIframeSrc(url);
798
+ } else {
799
+ if (this._lockedRaptor === false) { // only load once the raptor
800
+ this.lpInputElement.value = (this._reloadAnswers[this._reloadCounter] || this._reloadAnswers[0]);
801
+ this._reloadCounter = this._reloadCounter + 1;
802
+ if (this._reloadCounter === this._reloadAnswers.length) {
803
+ this._raptorize();
804
+ this._reloadCounter = 0;
805
+ }
806
+ } else {
807
+ this.lpInputElement.value = this._reloadAnswers[0];
808
+ }
809
+ }
810
+ },
811
+ _observeUserLivePreviewUrl: function (event) {
812
+ var value = (event.srcElement || event.target).value.toLowerCase();
813
+ if (true === this._isUrl(value)) {
814
+ this._localStorageSet('lpUrl', value);
815
+ }
816
+ this._observeUserLivePreviewSetiFrame(value);
817
+ },
818
+ _observeUserLivePreviewUrlReload: function (event) {
819
+ event.preventDefault();
820
+ var value = this.lpInputElement.value.toLowerCase(),
821
+ rand = 'rand=' + Math.random(),
822
+ randPos = value.indexOf('rand=');
823
+
824
+ if (randPos !== -1) {
825
+ value = value.substr(randPos - 1, 20);
826
+ }
827
+ if (true === this._isUrl(value)) {
828
+ this._localStorageSet('lpUrl', value);
829
+ }
830
+ if (value.indexOf('?') !== -1) {
831
+ value = value + '&' + rand;
832
+ } else {
833
+ value = value + '?' + rand;
834
+ }
835
+ this._observeUserLivePreviewSetiFrame(value);
836
+ },
837
+ livePreview: function () {
838
+ var firstUrl = this._setUpLivePreview();
839
+
840
+ if (null !== firstUrl) {
841
+ this._setIframeSrc(firstUrl);
842
+ }
843
+ },
844
+ _raptorize: function (options) {
845
+ // based on http://zurb.com/playground/jquery-raptorize
846
+ //the defaults
847
+ var self = this,
848
+ myOptions = options || {}, // make sure options object is valid
849
+ enterOn = myOptions.appearOn || 'time', //time, konami-code, click, code
850
+ delayTime = myOptions.delayTime || 2000, //time before raptor attacks on timer mode
851
+
852
+ sound = false,
853
+ canPlayMp3 = false,
854
+ canPlayOgg = false,
855
+
856
+ viewport = document.viewport.getDimensions(),
857
+ type = '',
858
+ src = '',
859
+ raptorAudioMarkup = {},
860
+ html5 = {},
861
+
862
+ myAudio = document.createElement('audio');
863
+
864
+ if (myAudio.canPlayType) {
865
+ canPlayMp3 = !!myAudio.canPlayType && '' !== myAudio.canPlayType('audio/mpeg');
866
+ canPlayOgg = !!myAudio.canPlayType && '' !== myAudio.canPlayType('audio/ogg; codecs="vorbis"');
867
+ }
868
+ if (canPlayMp3) {
869
+ type = 'audio/mp3';
870
+ src = _markDownGlobalConfig.featureBaseUrl + 'rs.mp3';
871
+ sound = true;
872
+ }
873
+ if (canPlayOgg) {
874
+ type = 'audio/ogg';
875
+ src = _markDownGlobalConfig.featureBaseUrl + 'rs.ogg';
876
+ sound = true;
877
+ }
878
+
879
+ //Raptor Sound
880
+ if (sound) {
881
+ raptorAudioMarkup = new Element('audio', {id: "elRaptorShriek", "preload": "auto"});
882
+ document.body.appendChild(raptorAudioMarkup);
883
+
884
+ html5 = new Element('source');
885
+ html5.type = type;
886
+ html5.src = src;
887
+ raptorAudioMarkup.appendChild(html5);
888
+ }
889
+ //Append Raptor and Style
890
+ var raptorImageMarkup = new Element('img', {
891
+ id: 'elRaptor',
892
+ src: _markDownGlobalConfig.featureBaseUrl + 'r.png'
893
+ }),
894
+ imgSize = {
895
+ width: 400,
896
+ height: 600
897
+ },
898
+ raptorPosition = {
899
+ width: viewport.width - imgSize.width,
900
+ height: viewport.height - imgSize.height
901
+ };
902
+
903
+ raptorImageMarkup.setStyle({
904
+ 'position': 'fixed',
905
+ 'opacity': 0,
906
+ 'top': viewport.height + 'px',
907
+ 'left': raptorPosition.width + 'px',
908
+ 'zIndex': '10001',
909
+ 'display': 'none'
910
+ });
911
+ document.body.insert(raptorImageMarkup);
912
+
913
+ function go() {
914
+ self.lpInputElement.value = ''; // clear input field where the hilarious ;-) text appears
915
+ self._lockedRaptor = true;
916
+
917
+ if (sound) {
918
+ document.getElementById('elRaptorShriek').play();
919
+ }
920
+
921
+ var raptor = $('elRaptor').setStyle({
922
+ "display": "block"
923
+ }), ep1, ep2;
924
+
925
+ function removeRaptor() {
926
+ raptor.remove();
927
+ $('elRaptorShriek').remove();
928
+ }
929
+
930
+ ep1 = new Effect.Parallel([
931
+ new Effect.Opacity(raptor, { sync: true, from: 0, to: 1 }),
932
+ new Effect.Move(raptor, {
933
+ sync: true,
934
+ x: raptorPosition.width,
935
+ y: raptorPosition.height,
936
+ mode: 'absolute',
937
+ transition: Effect.Transitions.spring
938
+ })
939
+ ], {duration: 1});
940
+
941
+ ep2 = new Effect.Move(raptor, {
942
+ xsync: true,
943
+ x: -1 * imgSize.width,
944
+ y: viewport.height - 100,
945
+ mode: 'absolute',
946
+ transition: Effect.Transitions.spring,
947
+ duration: 15,
948
+ delay: 1.1
949
+ });
950
+ removeRaptor.delay(5);
951
+ }
952
+
953
+ //Determine Entrance
954
+ if (enterOn === 'time' && this._lockedRaptor === false) {
955
+ setTimeout(go, delayTime);
956
+ }
957
+
958
+ } // end func raptorize
959
+ };
960
+
961
  /**
962
+ * event on click at textarea.initMarkdown
963
+ * @param event
964
+ * @private
965
+ */
966
+ function _onClickBuildTabsFactory(event) {
967
+ var target = event.target || event.srcElement,
968
+ $mdTextArea = {},
969
+ mageButtons = [],
970
+ $parentTd = target.parentNode,
971
+ $mageButtons = $('buttons' + target.id),
972
+ iFrameJs = null,
973
+ tabPreview = new TabPreviewHandler();
974
+
975
+ if (target.readAttribute('data-tabsBuilt')) {
976
+ return;
977
+ }
978
+
979
+ if ($mageButtons) {
980
+ mageButtons = $mageButtons.select('button');
981
+ mageButtons.each(function (buttonElement) {
982
+ $(target.id + '__writeB').insert({
983
+ top: buttonElement
984
+ });
985
+ });
986
+ }
987
+
988
+ $mdTextArea = $parentTd.select('.mdTextArea')[0];
989
+ $mdTextArea.insert(target);
990
+
991
+ $parentTd.select('.mdTabContainer')[0].show();
992
+ target.writeAttribute('data-tabsBuilt', 1);
993
+
994
+ if (false === _isFileReaderEnabled()) {
995
+ $parentTd.select('.md-filereader-text')[0].remove();
996
+ }
997
+
998
+ iFrameJs = $(target.id + '__iFrameJS'); // in category edit the security of prototype strips out the script template
999
+ if (iFrameJs) { // so this is null in category edit
1000
+ tempIframeJSSource = iFrameJs.innerHTML.replace('~~origin~~', document.location.origin);
1001
+
1002
+ // window.addEventListener("message", receiveMessage, false);
1003
+ Event.observe(window, 'message', function (event) {
1004
+ var data = event.data.split('=');
1005
+ iFrameScrollPositions[data[0]] = ~~data[1]; // convert to int via ~~
1006
+ });
1007
+ }
1008
+ /**
1009
+ * creating clickable tabs
1010
+ */
1011
+ $$('.mdTabs ul li a').each(function (aElement) {
1012
+ aElement.observe('click', function (event) {
1013
+ Event.stop(event);
1014
+ var grandParentsNode = this.parentNode.parentNode,
1015
+ current = grandParentsNode.getAttribute('data-current'),
1016
+ idSplit = this.id.split('__'),
1017
+ taId = idSplit[0],
1018
+ ident = idSplit[idSplit.length - 1],
1019
+ $tabBody = document.getElementById(taId + '__' + ident + 'B');
1020
+
1021
+ // hide
1022
+ document.getElementById(taId + '__' + current).removeClassName('active'); // header
1023
+ document.getElementById(taId + '__' + current + 'B').removeClassName('active'); // page
1024
+
1025
+ // show
1026
+ this.setAttribute('class', 'active'); // header
1027
+
1028
+ $tabBody.addClassName('active'); // page
1029
+ grandParentsNode.setAttribute('data-current', ident);
1030
+
1031
+ if (typeof tabPreview[ident] === 'function') {
1032
+ tabPreview.setData({
1033
+ tabBody: $tabBody,
1034
+ textAreaId: taId
1035
+ });
1036
+ tabPreview[ident]();
1037
+ }
1038
+ });
1039
+ });
1040
+ } // end _onClickBuildTabsFactory
1041
+
1042
+ /*************************************************************************************************************
1043
  * loads the filereader, epiceditor
1044
  */
1045
  function _mdInitialize() {
1046
  _initGlobalConfig();
1047
+
1048
  var parentElementIds = ['product_edit_form', 'edit_form', 'category-edit-container', 'email_template_edit_form'];
1049
+
1050
  if (varienGlobalEvents) {
1051
  varienGlobalEvents.fireEvent('mdLoadForms', parentElementIds);
1052
  }
1053
 
1054
  // loading multiple instances on one page
1055
+ // only works with event delegation due category edit page ... and the varientabs js class ...
1056
  // fire event for customization varienGlobalEvents.attachEventHandler('showTab', function (e) {...}
1057
  parentElementIds.forEach(function (elementId) {
1058
  var $elementId = $(elementId);
1059
  if ($elementId) {
1060
+
1061
+ $elementId.on('click', 'textarea.initMarkdown', _onClickBuildTabsFactory);
1062
+
1063
  // some things are only possible with event delegation ...
1064
  if (true === _isEpicEditorEnabled() && true === _markDownGlobalConfig.eeLoadOnClick) {
1065
  $elementId.on('click', 'textarea.initEpicEditor', _createEpicEditorInstances);
1066
  }
1067
  if (true === _isFileReaderEnabled()) {
1068
+ $elementId.on('click', 'textarea.initMarkdown', _createFileReaderFactory);
1069
  }
 
1070
  }
1071
  });
1072
+
1073
+ if (_markDownGlobalConfig.isHiddenInsertImageButton === true) {
1074
+ $$('button.add-image').each(function (element) {
1075
+ element.remove();
1076
+ });
1077
+ }
1078
  }
1079
 
 
1080
  this.toggleMarkdown = toggleMarkdown;
1081
  this.toggleEpicEditor = toggleEpicEditor;
1082
  this.toggleMarkdownSource = toggleMarkdownSource;
1177
  Promise: Promise,
1178
  join: join,
1179
  chain: chain,
 
 
 
 
 
1180
  };
1181
 
1182
  if (typeof define === 'function' && define.amd) {
js/markdown/adminhtml/marked.js CHANGED
@@ -41,7 +41,7 @@ block.list = replace(block.list)
41
  block._tag = '(?!(?:'
42
  + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
43
  + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
44
- + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b';
45
 
46
  block.html = replace(block.html)
47
  ('comment', /<!--[\s\S]*?-->/)
@@ -514,6 +514,8 @@ function InlineLexer(links, options) {
514
  this.options = options || marked.defaults;
515
  this.links = links;
516
  this.rules = inline.normal;
 
 
517
 
518
  if (!this.links) {
519
  throw new
@@ -577,11 +579,7 @@ InlineLexer.prototype.output = function(src) {
577
  text = escape(cap[1]);
578
  href = text;
579
  }
580
- out += '<a href="'
581
- + href
582
- + '">'
583
- + text
584
- + '</a>';
585
  continue;
586
  }
587
 
@@ -590,11 +588,7 @@ InlineLexer.prototype.output = function(src) {
590
  src = src.substring(cap[0].length);
591
  text = escape(cap[1]);
592
  href = text;
593
- out += '<a href="'
594
- + href
595
- + '">'
596
- + text
597
- + '</a>';
598
  continue;
599
  }
600
 
@@ -635,43 +629,35 @@ InlineLexer.prototype.output = function(src) {
635
  // strong
636
  if (cap = this.rules.strong.exec(src)) {
637
  src = src.substring(cap[0].length);
638
- out += '<strong>'
639
- + this.output(cap[2] || cap[1])
640
- + '</strong>';
641
  continue;
642
  }
643
 
644
  // em
645
  if (cap = this.rules.em.exec(src)) {
646
  src = src.substring(cap[0].length);
647
- out += '<em>'
648
- + this.output(cap[2] || cap[1])
649
- + '</em>';
650
  continue;
651
  }
652
 
653
  // code
654
  if (cap = this.rules.code.exec(src)) {
655
  src = src.substring(cap[0].length);
656
- out += '<code>'
657
- + escape(cap[2], true)
658
- + '</code>';
659
  continue;
660
  }
661
 
662
  // br
663
  if (cap = this.rules.br.exec(src)) {
664
  src = src.substring(cap[0].length);
665
- out += '<br>';
666
  continue;
667
  }
668
 
669
  // del (gfm)
670
  if (cap = this.rules.del.exec(src)) {
671
  src = src.substring(cap[0].length);
672
- out += '<del>'
673
- + this.output(cap[1])
674
- + '</del>';
675
  continue;
676
  }
677
 
@@ -696,31 +682,12 @@ InlineLexer.prototype.output = function(src) {
696
  */
697
 
698
  InlineLexer.prototype.outputLink = function(cap, link) {
699
- if (cap[0].charAt(0) !== '!') {
700
- return '<a href="'
701
- + escape(link.href)
702
- + '"'
703
- + (link.title
704
- ? ' title="'
705
- + escape(link.title)
706
- + '"'
707
- : '')
708
- + '>'
709
- + this.output(cap[1])
710
- + '</a>';
711
- } else {
712
- return '<img src="'
713
- + escape(link.href)
714
- + '" alt="'
715
- + escape(cap[1])
716
- + '"'
717
- + (link.title
718
- ? ' title="'
719
- + escape(link.title)
720
- + '"'
721
- : '')
722
- + '>';
723
- }
724
  };
725
 
726
  /**
@@ -765,6 +732,149 @@ InlineLexer.prototype.mangle = function(text) {
765
  return out;
766
  };
767
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
768
  /**
769
  * Parsing & Compiling
770
  */
@@ -773,14 +883,17 @@ function Parser(options) {
773
  this.tokens = [];
774
  this.token = null;
775
  this.options = options || marked.defaults;
 
 
 
776
  }
777
 
778
  /**
779
  * Static Parse Method
780
  */
781
 
782
- Parser.parse = function(src, options) {
783
- var parser = new Parser(options);
784
  return parser.parse(src);
785
  };
786
 
@@ -789,7 +902,7 @@ Parser.parse = function(src, options) {
789
  */
790
 
791
  Parser.prototype.parse = function(src) {
792
- this.inline = new InlineLexer(src.links, this.options);
793
  this.tokens = src.reverse();
794
 
795
  var out = '';
@@ -840,83 +953,53 @@ Parser.prototype.tok = function() {
840
  return '';
841
  }
842
  case 'hr': {
843
- return '<hr>\n';
844
  }
845
  case 'heading': {
846
- return '<h'
847
- + this.token.depth
848
- + ' id="'
849
- + this.token.text.toLowerCase().replace(/[^\w]+/g, '-')
850
- + '">'
851
- + this.inline.output(this.token.text)
852
- + '</h'
853
- + this.token.depth
854
- + '>\n';
855
  }
856
  case 'code': {
857
- if (this.options.highlight) {
858
- var code = this.options.highlight(this.token.text, this.token.lang);
859
- if (code != null && code !== this.token.text) {
860
- this.token.escaped = true;
861
- this.token.text = code;
862
- }
863
- }
864
-
865
- if (!this.token.escaped) {
866
- this.token.text = escape(this.token.text, true);
867
- }
868
-
869
- return '<pre><code'
870
- + (this.token.lang
871
- ? ' class="'
872
- + this.options.langPrefix
873
- + this.token.lang
874
- + '"'
875
- : '')
876
- + '>'
877
- + this.token.text
878
- + '</code></pre>\n';
879
  }
880
  case 'table': {
881
- var body = ''
882
- , heading
883
  , i
884
  , row
885
  , cell
 
886
  , j;
887
 
888
  // header
889
- body += '<thead>\n<tr>\n';
890
  for (i = 0; i < this.token.header.length; i++) {
891
- heading = this.inline.output(this.token.header[i]);
892
- body += '<th';
893
- if (this.token.align[i]) {
894
- body += ' style="text-align:' + this.token.align[i] + '"';
895
- }
896
- body += '>' + heading + '</th>\n';
897
  }
898
- body += '</tr>\n</thead>\n';
899
 
900
- // body
901
- body += '<tbody>\n'
902
  for (i = 0; i < this.token.cells.length; i++) {
903
  row = this.token.cells[i];
904
- body += '<tr>\n';
 
905
  for (j = 0; j < row.length; j++) {
906
- cell = this.inline.output(row[j]);
907
- body += '<td';
908
- if (this.token.align[j]) {
909
- body += ' style="text-align:' + this.token.align[j] + '"';
910
- }
911
- body += '>' + cell + '</td>\n';
912
  }
913
- body += '</tr>\n';
914
- }
915
- body += '</tbody>\n';
916
 
917
- return '<table>\n'
918
- + body
919
- + '</table>\n';
920
  }
921
  case 'blockquote_start': {
922
  var body = '';
@@ -925,25 +1008,17 @@ Parser.prototype.tok = function() {
925
  body += this.tok();
926
  }
927
 
928
- return '<blockquote>\n'
929
- + body
930
- + '</blockquote>\n';
931
  }
932
  case 'list_start': {
933
- var type = this.token.ordered ? 'ol' : 'ul'
934
- , body = '';
935
 
936
  while (this.next().type !== 'list_end') {
937
  body += this.tok();
938
  }
939
 
940
- return '<'
941
- + type
942
- + '>\n'
943
- + body
944
- + '</'
945
- + type
946
- + '>\n';
947
  }
948
  case 'list_item_start': {
949
  var body = '';
@@ -954,9 +1029,7 @@ Parser.prototype.tok = function() {
954
  : this.tok();
955
  }
956
 
957
- return '<li>'
958
- + body
959
- + '</li>\n';
960
  }
961
  case 'loose_item_start': {
962
  var body = '';
@@ -965,24 +1038,19 @@ Parser.prototype.tok = function() {
965
  body += this.tok();
966
  }
967
 
968
- return '<li>'
969
- + body
970
- + '</li>\n';
971
  }
972
  case 'html': {
973
- return !this.token.pre && !this.options.pedantic
974
  ? this.inline.output(this.token.text)
975
  : this.token.text;
 
976
  }
977
  case 'paragraph': {
978
- return '<p>'
979
- + this.inline.output(this.token.text)
980
- + '</p>\n';
981
  }
982
  case 'text': {
983
- return '<p>'
984
- + this.parseText()
985
- + '</p>\n';
986
  }
987
  }
988
  };
@@ -1000,6 +1068,19 @@ function escape(html, encode) {
1000
  .replace(/'/g, '&#39;');
1001
  }
1002
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1003
  function replace(regex, opt) {
1004
  regex = regex.source;
1005
  opt = opt || '';
@@ -1032,6 +1113,7 @@ function merge(obj) {
1032
  return obj;
1033
  }
1034
 
 
1035
  /**
1036
  * Marked
1037
  */
@@ -1134,7 +1216,9 @@ marked.defaults = {
1134
  silent: false,
1135
  highlight: null,
1136
  langPrefix: 'lang-',
1137
- smartypants: false
 
 
1138
  };
1139
 
1140
  /**
@@ -1144,6 +1228,8 @@ marked.defaults = {
1144
  marked.Parser = Parser;
1145
  marked.parser = Parser.parse;
1146
 
 
 
1147
  marked.Lexer = Lexer;
1148
  marked.lexer = Lexer.lex;
1149
 
41
  block._tag = '(?!(?:'
42
  + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
43
  + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
44
+ + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b';
45
 
46
  block.html = replace(block.html)
47
  ('comment', /<!--[\s\S]*?-->/)
514
  this.options = options || marked.defaults;
515
  this.links = links;
516
  this.rules = inline.normal;
517
+ this.renderer = this.options.renderer || new Renderer;
518
+ this.renderer.options = this.options;
519
 
520
  if (!this.links) {
521
  throw new
579
  text = escape(cap[1]);
580
  href = text;
581
  }
582
+ out += this.renderer.link(href, null, text);
 
 
 
 
583
  continue;
584
  }
585
 
588
  src = src.substring(cap[0].length);
589
  text = escape(cap[1]);
590
  href = text;
591
+ out += this.renderer.link(href, null, text);
 
 
 
 
592
  continue;
593
  }
594
 
629
  // strong
630
  if (cap = this.rules.strong.exec(src)) {
631
  src = src.substring(cap[0].length);
632
+ out += this.renderer.strong(this.output(cap[2] || cap[1]));
 
 
633
  continue;
634
  }
635
 
636
  // em
637
  if (cap = this.rules.em.exec(src)) {
638
  src = src.substring(cap[0].length);
639
+ out += this.renderer.em(this.output(cap[2] || cap[1]));
 
 
640
  continue;
641
  }
642
 
643
  // code
644
  if (cap = this.rules.code.exec(src)) {
645
  src = src.substring(cap[0].length);
646
+ out += this.renderer.codespan(escape(cap[2], true));
 
 
647
  continue;
648
  }
649
 
650
  // br
651
  if (cap = this.rules.br.exec(src)) {
652
  src = src.substring(cap[0].length);
653
+ out += this.renderer.br();
654
  continue;
655
  }
656
 
657
  // del (gfm)
658
  if (cap = this.rules.del.exec(src)) {
659
  src = src.substring(cap[0].length);
660
+ out += this.renderer.del(this.output(cap[1]));
 
 
661
  continue;
662
  }
663
 
682
  */
683
 
684
  InlineLexer.prototype.outputLink = function(cap, link) {
685
+ var href = escape(link.href)
686
+ , title = link.title ? escape(link.title) : null;
687
+
688
+ return cap[0].charAt(0) !== '!'
689
+ ? this.renderer.link(href, title, this.output(cap[1]))
690
+ : this.renderer.image(href, title, escape(cap[1]));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
691
  };
692
 
693
  /**
732
  return out;
733
  };
734
 
735
+ /**
736
+ * Renderer
737
+ */
738
+
739
+ function Renderer(options) {
740
+ this.options = options || {};
741
+ }
742
+
743
+ Renderer.prototype.code = function(code, lang, escaped) {
744
+ if (this.options.highlight) {
745
+ var out = this.options.highlight(code, lang);
746
+ if (out != null && out !== code) {
747
+ escaped = true;
748
+ code = out;
749
+ }
750
+ }
751
+
752
+ if (!lang) {
753
+ return '<pre><code>'
754
+ + (escaped ? code : escape(code, true))
755
+ + '\n</code></pre>';
756
+ }
757
+
758
+ return '<pre><code class="'
759
+ + this.options.langPrefix
760
+ + escape(lang, true)
761
+ + '">'
762
+ + (escaped ? code : escape(code, true))
763
+ + '\n</code></pre>\n';
764
+ };
765
+
766
+ Renderer.prototype.blockquote = function(quote) {
767
+ return '<blockquote>\n' + quote + '</blockquote>\n';
768
+ };
769
+
770
+ Renderer.prototype.html = function(html) {
771
+ return html;
772
+ };
773
+
774
+ Renderer.prototype.heading = function(text, level, raw) {
775
+ return '<h'
776
+ + level
777
+ + ' id="'
778
+ + this.options.headerPrefix
779
+ + raw.toLowerCase().replace(/[^\w]+/g, '-')
780
+ + '">'
781
+ + text
782
+ + '</h'
783
+ + level
784
+ + '>\n';
785
+ };
786
+
787
+ Renderer.prototype.hr = function() {
788
+ return '<hr>\n';
789
+ };
790
+
791
+ Renderer.prototype.list = function(body, ordered) {
792
+ var type = ordered ? 'ol' : 'ul';
793
+ return '<' + type + '>\n' + body + '</' + type + '>\n';
794
+ };
795
+
796
+ Renderer.prototype.listitem = function(text) {
797
+ return '<li>' + text + '</li>\n';
798
+ };
799
+
800
+ Renderer.prototype.paragraph = function(text) {
801
+ return '<p>' + text + '</p>\n';
802
+ };
803
+
804
+ Renderer.prototype.table = function(header, body) {
805
+ return '<table>\n'
806
+ + '<thead>\n'
807
+ + header
808
+ + '</thead>\n'
809
+ + '<tbody>\n'
810
+ + body
811
+ + '</tbody>\n'
812
+ + '</table>\n';
813
+ };
814
+
815
+ Renderer.prototype.tablerow = function(content) {
816
+ return '<tr>\n' + content + '</tr>\n';
817
+ };
818
+
819
+ Renderer.prototype.tablecell = function(content, flags) {
820
+ var type = flags.header ? 'th' : 'td';
821
+ var tag = flags.align
822
+ ? '<' + type + ' style="text-align:' + flags.align + '">'
823
+ : '<' + type + '>';
824
+ return tag + content + '</' + type + '>\n';
825
+ };
826
+
827
+ // span level renderer
828
+ Renderer.prototype.strong = function(text) {
829
+ return '<strong>' + text + '</strong>';
830
+ };
831
+
832
+ Renderer.prototype.em = function(text) {
833
+ return '<em>' + text + '</em>';
834
+ };
835
+
836
+ Renderer.prototype.codespan = function(text) {
837
+ return '<code>' + text + '</code>';
838
+ };
839
+
840
+ Renderer.prototype.br = function() {
841
+ return '<br>';
842
+ };
843
+
844
+ Renderer.prototype.del = function(text) {
845
+ return '<del>' + text + '</del>';
846
+ };
847
+
848
+ Renderer.prototype.link = function(href, title, text) {
849
+ if (this.options.sanitize) {
850
+ try {
851
+ var prot = decodeURIComponent(unescape(href))
852
+ .replace(/[^\w:]/g, '')
853
+ .toLowerCase();
854
+ } catch (e) {
855
+ return '';
856
+ }
857
+ if (prot.indexOf('javascript:') === 0) {
858
+ return '';
859
+ }
860
+ }
861
+ var out = '<a href="' + href + '"';
862
+ if (title) {
863
+ out += ' title="' + title + '"';
864
+ }
865
+ out += '>' + text + '</a>';
866
+ return out;
867
+ };
868
+
869
+ Renderer.prototype.image = function(href, title, text) {
870
+ var out = '<img src="' + href + '" alt="' + text + '"';
871
+ if (title) {
872
+ out += ' title="' + title + '"';
873
+ }
874
+ out += '>';
875
+ return out;
876
+ };
877
+
878
  /**
879
  * Parsing & Compiling
880
  */
883
  this.tokens = [];
884
  this.token = null;
885
  this.options = options || marked.defaults;
886
+ this.options.renderer = this.options.renderer || new Renderer;
887
+ this.renderer = this.options.renderer;
888
+ this.renderer.options = this.options;
889
  }
890
 
891
  /**
892
  * Static Parse Method
893
  */
894
 
895
+ Parser.parse = function(src, options, renderer) {
896
+ var parser = new Parser(options, renderer);
897
  return parser.parse(src);
898
  };
899
 
902
  */
903
 
904
  Parser.prototype.parse = function(src) {
905
+ this.inline = new InlineLexer(src.links, this.options, this.renderer);
906
  this.tokens = src.reverse();
907
 
908
  var out = '';
953
  return '';
954
  }
955
  case 'hr': {
956
+ return this.renderer.hr();
957
  }
958
  case 'heading': {
959
+ return this.renderer.heading(
960
+ this.inline.output(this.token.text),
961
+ this.token.depth,
962
+ this.token.text);
 
 
 
 
 
963
  }
964
  case 'code': {
965
+ return this.renderer.code(this.token.text,
966
+ this.token.lang,
967
+ this.token.escaped);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
968
  }
969
  case 'table': {
970
+ var header = ''
971
+ , body = ''
972
  , i
973
  , row
974
  , cell
975
+ , flags
976
  , j;
977
 
978
  // header
979
+ cell = '';
980
  for (i = 0; i < this.token.header.length; i++) {
981
+ flags = { header: true, align: this.token.align[i] };
982
+ cell += this.renderer.tablecell(
983
+ this.inline.output(this.token.header[i]),
984
+ { header: true, align: this.token.align[i] }
985
+ );
 
986
  }
987
+ header += this.renderer.tablerow(cell);
988
 
 
 
989
  for (i = 0; i < this.token.cells.length; i++) {
990
  row = this.token.cells[i];
991
+
992
+ cell = '';
993
  for (j = 0; j < row.length; j++) {
994
+ cell += this.renderer.tablecell(
995
+ this.inline.output(row[j]),
996
+ { header: false, align: this.token.align[j] }
997
+ );
 
 
998
  }
 
 
 
999
 
1000
+ body += this.renderer.tablerow(cell);
1001
+ }
1002
+ return this.renderer.table(header, body);
1003
  }
1004
  case 'blockquote_start': {
1005
  var body = '';
1008
  body += this.tok();
1009
  }
1010
 
1011
+ return this.renderer.blockquote(body);
 
 
1012
  }
1013
  case 'list_start': {
1014
+ var body = ''
1015
+ , ordered = this.token.ordered;
1016
 
1017
  while (this.next().type !== 'list_end') {
1018
  body += this.tok();
1019
  }
1020
 
1021
+ return this.renderer.list(body, ordered);
 
 
 
 
 
 
1022
  }
1023
  case 'list_item_start': {
1024
  var body = '';
1029
  : this.tok();
1030
  }
1031
 
1032
+ return this.renderer.listitem(body);
 
 
1033
  }
1034
  case 'loose_item_start': {
1035
  var body = '';
1038
  body += this.tok();
1039
  }
1040
 
1041
+ return this.renderer.listitem(body);
 
 
1042
  }
1043
  case 'html': {
1044
+ var html = !this.token.pre && !this.options.pedantic
1045
  ? this.inline.output(this.token.text)
1046
  : this.token.text;
1047
+ return this.renderer.html(html);
1048
  }
1049
  case 'paragraph': {
1050
+ return this.renderer.paragraph(this.inline.output(this.token.text));
 
 
1051
  }
1052
  case 'text': {
1053
+ return this.renderer.paragraph(this.parseText());
 
 
1054
  }
1055
  }
1056
  };
1068
  .replace(/'/g, '&#39;');
1069
  }
1070
 
1071
+ function unescape(html) {
1072
+ return html.replace(/&([#\w]+);/g, function(_, n) {
1073
+ n = n.toLowerCase();
1074
+ if (n === 'colon') return ':';
1075
+ if (n.charAt(0) === '#') {
1076
+ return n.charAt(1) === 'x'
1077
+ ? String.fromCharCode(parseInt(n.substring(2), 16))
1078
+ : String.fromCharCode(+n.substring(1));
1079
+ }
1080
+ return '';
1081
+ });
1082
+ }
1083
+
1084
  function replace(regex, opt) {
1085
  regex = regex.source;
1086
  opt = opt || '';
1113
  return obj;
1114
  }
1115
 
1116
+
1117
  /**
1118
  * Marked
1119
  */
1216
  silent: false,
1217
  highlight: null,
1218
  langPrefix: 'lang-',
1219
+ smartypants: false,
1220
+ headerPrefix: '',
1221
+ renderer: new Renderer
1222
  };
1223
 
1224
  /**
1228
  marked.Parser = Parser;
1229
  marked.parser = Parser.parse;
1230
 
1231
+ marked.Renderer = Renderer;
1232
+
1233
  marked.Lexer = Lexer;
1234
  marked.lexer = Lexer.lex;
1235
 
js/markdown/adminhtml/reMarked.js CHANGED
@@ -2,7 +2,7 @@
2
  * Copyright (c) 2013, Leon Sorokin
3
  * All rights reserved. (MIT Licensed)
4
  *
5
- * reMarked.js - DOM > markdown
6
  */
7
 
8
  reMarked = function(opts) {
@@ -13,9 +13,9 @@ reMarked = function(opts) {
13
  // link_near: // cite links immediately after blocks
14
  h1_setext: true, // underline h1 headers
15
  h2_setext: true, // underline h2 headers
16
- h_atx_suf: false, // header suffix (###)
17
  // h_compact: true, // compact headers (except h1)
18
- gfm_code: false, // render code blocks as via ``` delims
19
  li_bullet: "*-+"[0], // list item bullet style
20
  // list_indnt: // indent top-level lists
21
  hr_char: "-_*"[0], // hr style
@@ -27,6 +27,7 @@ reMarked = function(opts) {
27
  tbl_edges: false, // show side edges on tables
28
  hash_lnks: false, // anchors w/hash hrefs as links
29
  br_only: false, // avoid using " " as line break indicator
 
30
  // comp_style: false, // use getComputedStyle instead of hardcoded tag list to discern block/inline
31
  unsup_tags: { // handling of unsupported tags, defined in terms of desired output style. if not listed, output = outerHTML
32
  // no output
@@ -41,12 +42,10 @@ reMarked = function(opts) {
41
  block1c: "dt dd caption legend figcaption output",
42
  // eg: "\n\n<tag>some content</tag>"
43
  block2c: "canvas audio video iframe",
44
- /* // direct remap of unsuported tags
45
- convert: {
46
- i: "em",
47
- b: "strong"
48
- }
49
- */
50
  }
51
  };
52
 
@@ -94,8 +93,8 @@ reMarked = function(opts) {
94
 
95
  var buf = "<" + tag;
96
 
97
- for (var attr, i=0, attrs=e.attributes, l=attrs.length; i<l; i++) {
98
- attr = attrs.item(i);
99
  buf += " " + attr.nodeName + '="' + attr.nodeValue + '"';
100
  }
101
 
@@ -159,14 +158,14 @@ reMarked = function(opts) {
159
  re += "\n\n";
160
  var maxlen = 0;
161
  // get longest link href with title, TODO: use getAttribute?
162
- for (var y in links) {
163
  if (!links[y].e.title) continue;
164
  var len = links[y].e.href.length;
165
  if (len && len > maxlen)
166
  maxlen = len;
167
  }
168
 
169
- for (var k in links) {
170
  var title = links[k].e.title ? rep(" ", (maxlen + 2) - links[k].e.href.length) + '"' + links[k].e.title + '"' : "";
171
  re += " [" + (+k+1) + "]: " + (nodeName(links[k].e) == "a" ? links[k].e.href : links[k].e.src) + title + "\n";
172
  }
@@ -199,12 +198,44 @@ reMarked = function(opts) {
199
  // inline elems allowing adjacent whitespace text nodes to be rendered
200
  var inlRe = cfg.unsup_tags.inline, n, name;
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  for (i in this.e.childNodes) {
203
  if (!/\d+/.test(i)) continue;
204
 
205
  n = this.e.childNodes[i];
206
  name = nodeName(n);
207
 
 
 
 
 
208
  // ignored tags
209
  if (cfg.unsup_tags.ignore.test(name))
210
  continue;
@@ -264,11 +295,9 @@ reMarked = function(opts) {
264
  rendK: function()
265
  {
266
  var n, buf = "";
267
- for (var i in this.c) {
268
  n = this.c[i];
269
-
270
- // @SchumacherFM: added typeof n.rend
271
- buf += (n.bef || "") +( typeof n.rend === 'function' ? n.rend() : '' ) + (n.aft || "");
272
  }
273
  return buf.replace(/^\n+|\n+$/, "");
274
  }
@@ -311,7 +340,7 @@ reMarked = function(opts) {
311
  if (this.p instanceof lib.li) {
312
  var repl = null, spcs = kids.match(/^[\t ]+/gm);
313
  if (!spcs) return kids;
314
- for (var i in spcs) {
315
  if (repl === null || spcs[i][0].length < repl.length)
316
  repl = spcs[i][0];
317
  }
@@ -512,9 +541,9 @@ reMarked = function(opts) {
512
  },
513
  rend: function() {
514
  // run prep on all cells to get max col widths
515
- for (var tsec in this.c)
516
- for (var row in this.c[tsec].c)
517
- for (var cell in this.c[tsec].c[row].c)
518
  this.c[tsec].c[row].c[cell].prep();
519
 
520
  return this.supr();
@@ -524,7 +553,7 @@ reMarked = function(opts) {
524
  lib.thead = cfg.gfm_tbls ? lib.cblk.extend({
525
  wrap: ["\n", function(kids) {
526
  var buf = "";
527
- for (var i in this.p.cols) {
528
  var col = this.p.cols[i],
529
  al = col.a[0] == "c" ? ":" : " ",
530
  ar = col.a[0] == "r" || col.a[0] == "c" ? ":" : " ";
@@ -582,7 +611,7 @@ reMarked = function(opts) {
582
  col.w = Math.max(col.w || 0, this.guts.length);
583
  if (this.e.align)
584
  col.a = this.e.align;
585
- }
586
  }) : lib.ctblk.extend();
587
 
588
  lib.td = lib.th.extend();
2
  * Copyright (c) 2013, Leon Sorokin
3
  * All rights reserved. (MIT Licensed)
4
  *
5
+ * reMarked.js - HTML > markdown
6
  */
7
 
8
  reMarked = function(opts) {
13
  // link_near: // cite links immediately after blocks
14
  h1_setext: true, // underline h1 headers
15
  h2_setext: true, // underline h2 headers
16
+ h_atx_suf: false, // header suffixes (###)
17
  // h_compact: true, // compact headers (except h1)
18
+ gfm_code: false, // gfm code blocks (```)
19
  li_bullet: "*-+"[0], // list item bullet style
20
  // list_indnt: // indent top-level lists
21
  hr_char: "-_*"[0], // hr style
27
  tbl_edges: false, // show side edges on tables
28
  hash_lnks: false, // anchors w/hash hrefs as links
29
  br_only: false, // avoid using " " as line break indicator
30
+ col_pre: "col ", // column prefix to use when creating missing headers for tables
31
  // comp_style: false, // use getComputedStyle instead of hardcoded tag list to discern block/inline
32
  unsup_tags: { // handling of unsupported tags, defined in terms of desired output style. if not listed, output = outerHTML
33
  // no output
42
  block1c: "dt dd caption legend figcaption output",
43
  // eg: "\n\n<tag>some content</tag>"
44
  block2c: "canvas audio video iframe",
45
+ },
46
+ tag_remap: { // remap of variants or deprecated tags to internal classes
47
+ "i": "em",
48
+ "b": "strong"
 
 
49
  }
50
  };
51
 
93
 
94
  var buf = "<" + tag;
95
 
96
+ for (var attr, i = 0; i < e.attributes.length; i++) {
97
+ attr = e.attributes.item(i);
98
  buf += " " + attr.nodeName + '="' + attr.nodeValue + '"';
99
  }
100
 
158
  re += "\n\n";
159
  var maxlen = 0;
160
  // get longest link href with title, TODO: use getAttribute?
161
+ for (var y = 0; y < links.length; y++) {
162
  if (!links[y].e.title) continue;
163
  var len = links[y].e.href.length;
164
  if (len && len > maxlen)
165
  maxlen = len;
166
  }
167
 
168
+ for (var k = 0; k < links.length; k++) {
169
  var title = links[k].e.title ? rep(" ", (maxlen + 2) - links[k].e.href.length) + '"' + links[k].e.title + '"' : "";
170
  re += " [" + (+k+1) + "]: " + (nodeName(links[k].e) == "a" ? links[k].e.href : links[k].e.src) + title + "\n";
171
  }
198
  // inline elems allowing adjacent whitespace text nodes to be rendered
199
  var inlRe = cfg.unsup_tags.inline, n, name;
200
 
201
+ // if no thead exists, detect header rows or make fake cols
202
+ if (nodeName(this.e) == "table") {
203
+ if (this.e.hasChildNodes() && !this.e.tHead) {
204
+ var thead = document.createElement("thead");
205
+
206
+ var tbody0 = this.e.tBodies[0],
207
+ row0 = tbody0.rows[0],
208
+ cell0 = row0.cells[0];
209
+
210
+ if (nodeName(cell0) == "th")
211
+ thead.appendChild(row0);
212
+ else {
213
+ var hcell,
214
+ i = 0,
215
+ len = row0.cells.length,
216
+ hrow = thead.insertRow();
217
+
218
+ while (i++ < len) {
219
+ hcell = document.createElement("th");
220
+ hcell.textContent = cfg.col_pre + i;
221
+ hrow.appendChild(hcell);
222
+ }
223
+ }
224
+
225
+ this.e.insertBefore(thead, tbody0);
226
+ }
227
+ }
228
+
229
  for (i in this.e.childNodes) {
230
  if (!/\d+/.test(i)) continue;
231
 
232
  n = this.e.childNodes[i];
233
  name = nodeName(n);
234
 
235
+ // remap of variants
236
+ if (name in cfg.tag_remap)
237
+ name = cfg.tag_remap[name];
238
+
239
  // ignored tags
240
  if (cfg.unsup_tags.ignore.test(name))
241
  continue;
295
  rendK: function()
296
  {
297
  var n, buf = "";
298
+ for (var i = 0; i < this.c.length; i++) {
299
  n = this.c[i];
300
+ buf += (n.bef || "") + n.rend() + (n.aft || "");
 
 
301
  }
302
  return buf.replace(/^\n+|\n+$/, "");
303
  }
340
  if (this.p instanceof lib.li) {
341
  var repl = null, spcs = kids.match(/^[\t ]+/gm);
342
  if (!spcs) return kids;
343
+ for (var i = 0; i < spcs.length; i++) {
344
  if (repl === null || spcs[i][0].length < repl.length)
345
  repl = spcs[i][0];
346
  }
541
  },
542
  rend: function() {
543
  // run prep on all cells to get max col widths
544
+ for (var tsec = 0; tsec < this.c.length; tsec++)
545
+ for (var row = 0; row < this.c[tsec].c.length; row++)
546
+ for (var cell = 0; cell < this.c[tsec].c[row].c.length; cell++)
547
  this.c[tsec].c[row].c[cell].prep();
548
 
549
  return this.supr();
553
  lib.thead = cfg.gfm_tbls ? lib.cblk.extend({
554
  wrap: ["\n", function(kids) {
555
  var buf = "";
556
+ for (var i = 0; i < this.p.cols.length; i++) {
557
  var col = this.p.cols[i],
558
  al = col.a[0] == "c" ? ":" : " ",
559
  ar = col.a[0] == "r" || col.a[0] == "c" ? ":" : " ";
611
  col.w = Math.max(col.w || 0, this.guts.length);
612
  if (this.e.align)
613
  col.a = this.e.align;
614
+ },
615
  }) : lib.ctblk.extend();
616
 
617
  lib.td = lib.th.extend();
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>markdown</name>
4
- <version>2.0.0</version>
5
  <stability>stable</stability>
6
  <license uri="https://github.com/SchumacherFM/Magento-Markdown">BSD-3-Clause</license>
7
  <channel>community</channel>
@@ -23,11 +23,27 @@ format, then convert it to structurally valid XHTML (or HTML).&#xD;
23
  For further information please see the github repository: https://github.com/SchumacherFM/Magento-Markdown</description>
24
  <notes>https://github.com/SchumacherFM/Magento-Markdown&#xD;
25
  &#xD;
26
- Tons of new features! See the github pages for the version history.</notes>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  <authors><author><name>Cyrill Schumacher</name><user>cyrills</user><email>cyrill@schumacher.fm</email></author></authors>
28
- <date>2013-10-13</date>
29
- <time>07:21:10</time>
30
- <contents><target name="magecommunity"><dir name="SchumacherFM"><dir name="Markdown"><dir><dir name="Helper"><file name="Data.php" hash="56a3abd176deb0f2318bd4c6be98f950"/></dir><dir name="Model"><dir name="Editor"><file name="Observer.php" hash="0683e4ed2e97c9efbabea6aad92c1f44"/></dir><dir name="Markdown"><file name="Abstract.php" hash="237784e5f749406fca86e88172cab2ea"/><file name="Interface.php" hash="05df0ecf7a7c6bc09481f213cdc98255"/><file name="Observer.php" hash="2d8d754cf465bb3a85cd826a11074d0a"/><file name="Render.php" hash="df0addc5cfbd8d805c0b8a1661bbd496"/></dir><dir name="Michelf"><dir name="Markdown"><file name="Extra.php" hash="aaee7a66298007f8c003ba96d53deab9"/><file name="TmpImpl.php" hash="5ec68c28519d8ecb4a43324f5f197a80"/></dir><file name="Markdown.php" hash="76219ba32f37cad14755c8613b390c83"/></dir><dir name="Observer"><dir name="Adminhtml"><file name="Block.php" hash="efe852cb712631d2bdeb56ed4be02a48"/><file name="EpicEditor.php" hash="ac01b829d5ad29c2c5412ace1448b194"/><file name="LayoutUpdate.php" hash="a01b599ebed057f9a99266cb91441a99"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="MarkdownController.php" hash="d8180e18071016883615d8f727a3300e"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="27c358363c32632f51affbecae3a24a0"/><file name="config.xml" hash="5e48b57a0fd5cf6b1665c4696ccadf22"/><file name="system.xml" hash="d31cf185d664c7f3424214ebc5239aaf"/></dir><dir name="sql"><dir name="markdown_setup"><file name="install-1.0.0.php" hash="0fe5a9650dd224f691caf585a34c52e6"/></dir></dir></dir><file name=".DS_Store" hash="29236c1e2932a8a54035bfbe9e734f49"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="markdown.xml" hash="5f073545b849100ed7c1f1ba1685fb4b"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="SchumacherFM_Markdown.xml" hash="db8742448ef30a5af1bd60865f429c26"/></dir></target><target name="magelocale"><dir><dir name="de_DE"><file name="SchumacherFM_Markdown.csv" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir><dir name="en_US"><file name="SchumacherFM_Markdown.csv" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir></target><target name="mage"><dir name="js"><dir name="markdown"><dir><dir name="adminhtml"><file name="epiceditor.js" hash="5c29b9d4d25d897ba63e9109ba6e3564"/><file name="filereader.js" hash="3ed749a9b0843d0911b41f8be26364fa"/><dir name="highlight"><dir name="styles"><file name="xcode.css" hash="d99d394b8a22d59c8546f84b683dc648"/></dir></dir><file name="highlight.pack.js" hash="b60b28a732e22d75e690bc32d8606354"/><file name="markdown.js" hash="ac58ac234a377e3b3a4e2cab828268d7"/><file name="marked.js" hash="8af08dcb5d207265f604dce4c250e6ec"/><file name="reMarked.js" hash="9adbec6c65fb488a754103e63b94ad58"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="markdown"><file name="mdm.css" hash="19b49b67b9b52b25f5f7d2106cc73892"/></dir><dir name="epiceditor"><dir><dir name="highlight"><dir name="styles"><file name="default.css" hash="05519f4875102535137ef0141f26864b"/><file name="github.css" hash="ca6ea80f87a205fdf919439bad4c27db"/><file name="googlecode.css" hash="a4c13deaf6eeb2858cf7b0b300992cab"/></dir></dir><dir name="themes"><dir name="base"><file name="epiceditor.css" hash="72d9ff0a1296bf28b815d696129bb086"/></dir><dir name="editor"><file name="epic-dark.css" hash="872c9540cedbf5cdf69ca2b0accb3cef"/><file name="epic-light.css" hash="68d9441f297c73180dd83545ee70117a"/></dir><dir name="preview"><file name="bartik.css" hash="a8a3efffd02c3acf6e3dc62ee5e92936"/><file name="github.css" hash="6085b7303f9a3c3cc3d2d8039487bf5d"/><file name="githubNxcode.css" hash="c5639fe4cd88f0416c15892f2f9b90b2"/><file name="preview-dark.css" hash="660b85886b844d592e2c722937b438e1"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
31
  <compatible/>
32
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
33
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>markdown</name>
4
+ <version>2.1.0</version>
5
  <stability>stable</stability>
6
  <license uri="https://github.com/SchumacherFM/Magento-Markdown">BSD-3-Clause</license>
7
  <channel>community</channel>
23
  For further information please see the github repository: https://github.com/SchumacherFM/Magento-Markdown</description>
24
  <notes>https://github.com/SchumacherFM/Magento-Markdown&#xD;
25
  &#xD;
26
+ Tons of new features! See the github pages for the version history.&#xD;
27
+ &#xD;
28
+ - Enable/Disable markdown rendering in email template. (by Paul Hachmang)&#xD;
29
+ - Update marked.js&#xD;
30
+ - Bug fix: HTML Preview code markup&#xD;
31
+ - Bug fix: HTML preview button should be removed&#xD;
32
+ - Bug fix: When there is no content, the Preview and Live Preview tabs show incorrect request&#xD;
33
+ - Feature: Feedback and ideas after being used in the wild.&#xD;
34
+ - Feature: Settings to enable/disable Preview, Live Preview and - - HTML Preview tabs (See Permissions -&gt; Roles)&#xD;
35
+ - Merged Pull Request More native-like styling&#xD;
36
+ - Add new option for styling of the backend textarea field&#xD;
37
+ - Major changes in the backend Github Issue #18&#xD;
38
+ - Renaming of buttons&#xD;
39
+ - EpicEditor disabled by default&#xD;
40
+ - Better style for the textarea field with outer glow&#xD;
41
+ - Besides image Drag'n'Drop added file upload and copy and paste for images&#xD;
42
+ - Enhanced preview mode</notes>
43
  <authors><author><name>Cyrill Schumacher</name><user>cyrills</user><email>cyrill@schumacher.fm</email></author></authors>
44
+ <date>2014-01-20</date>
45
+ <time>10:15:16</time>
46
+ <contents><target name="magecommunity"><dir name="SchumacherFM"><dir name="Markdown"><dir><dir name="Block"><dir name="Adminhtml"><dir name="Form"><dir name="Renderer"><dir name="Fieldset"><dir name="Element"><file name="Textarea.php" hash="c79e09389749905c52ca2374fcf1d213"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="503c6a4a6853ddd2eace0fce09e27599"/></dir><dir name="Model"><dir name="Editor"><file name="Observer.php" hash="0683e4ed2e97c9efbabea6aad92c1f44"/></dir><dir name="Markdown"><file name="Abstract.php" hash="da5de08b7bf3361b345ad1f84ab728d3"/><file name="Interface.php" hash="05df0ecf7a7c6bc09481f213cdc98255"/><file name="Observer.php" hash="0bb81d4be39ec4184f76585672c34f60"/><file name="Render.php" hash="df0addc5cfbd8d805c0b8a1661bbd496"/></dir><dir name="Michelf"><dir name="Markdown"><file name="Extra.php" hash="aaee7a66298007f8c003ba96d53deab9"/><file name="TmpImpl.php" hash="5ec68c28519d8ecb4a43324f5f197a80"/></dir><file name="Markdown.php" hash="76219ba32f37cad14755c8613b390c83"/></dir><dir name="Observer"><dir name="Adminhtml"><file name="Block.php" hash="a48a2b1e784f889666cad03fbd5f5d09"/><file name="EpicEditor.php" hash="f67f8e07be8bb8a403411432eb142ad7"/><file name="LayoutUpdate.php" hash="a01b599ebed057f9a99266cb91441a99"/></dir></dir><dir name="Options"><dir name="Styles"><file name="AbstractStyles.php" hash="225140811534132c8d39878e6fe3f4b1"/><file name="HighLightStyles.php" hash="62c9e1fb6e9a979957683d83047a5253"/><file name="MarkdownStyles.php" hash="ee0d8d1385c5bac1b3f0c23f9b11eeef"/><file name="TextareaStyles.php" hash="dab854923f1782b0fe2be2fc4e5fe6e9"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="MarkdownController.php" hash="e4a2c270b391a9ea62674862ccbbe43f"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="26a4e5e7c1ce03bdf2157b53cecc647a"/><file name="config.xml" hash="6c563b8c393eb5d7ed349af0fd4c36a1"/><file name="system.xml" hash="8700e0eeba776a24a6b174936c5c5f05"/></dir><dir name="sql"><dir name="markdown_setup"><file name="install-1.0.0.php" hash="0fe5a9650dd224f691caf585a34c52e6"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="markdown.xml" hash="a57113191d75eb358a377c5f3308cb8f"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="SchumacherFM_Markdown.xml" hash="db8742448ef30a5af1bd60865f429c26"/></dir></target><target name="magelocale"><dir><dir name="de_DE"><file name="SchumacherFM_Markdown.csv" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir><dir name="en_US"><file name="SchumacherFM_Markdown.csv" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir></target><target name="mage"><dir name="js"><dir name="markdown"><dir><dir name="adminhtml"><file name="beautify-html.js" hash="5890ac48ec4f2155535e9efb8cbd87b8"/><file name="epiceditor.js" hash="5c29b9d4d25d897ba63e9109ba6e3564"/><file name="filereader.js" hash="52655dadec0f8660c761c61c6af93192"/><file name="highlight.pack.js" hash="8bb5ed52b512c8e76fcd929e388dda9e"/><file name="markdown.js" hash="5fa9439fa6cdaa2a71972488c73d843a"/><file name="marked.js" hash="418a990721a4fee11a87224c360385b9"/><file name="reMarked.js" hash="1b30fdb506ab82fb9ea30c1f28415603"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="markdown"><dir><dir name="highlight"><dir name="styles"><file name="arta.css" hash="beb43641c62b1e3445356a5325e8f347"/><file name="ascetic.css" hash="bb82a488454ab59ce09f87e37697eab6"/><file name="brown_paper.css" hash="20a30e6e72a0b0c8acb58a0b15523a18"/><file name="dark.css" hash="e67d201e74c39d665da5664d34f1db6b"/><file name="default.css" hash="1f0e251735747f01ff67f19bb5bb7827"/><file name="docco.css" hash="2017983407b0a64300761bebb17b136d"/><file name="far.css" hash="122a2f779ce770e21ed2ce622c7faadc"/><file name="foundation.css" hash="4a2e6ec32a44043f27ae50412dc297a2"/><file name="github.css" hash="a80e55756ce38aab87f54799ca6d23fc"/><file name="googlecode.css" hash="a692819d8384a019dd6b85d45099e39f"/><file name="idea.css" hash="cad5036ff7da4f7009278b0ddc18dc05"/><file name="ir_black.css" hash="52c475b3950fec315bff3a1e7c80762b"/><file name="magula.css" hash="5423c79d91364aec7879eaf9c5117a4c"/><file name="mono-blue.css" hash="3b1df3173738c43737f195d20efe782d"/><file name="monokai.css" hash="d072e03d256f572a13f0658502dc0539"/><file name="monokai_sublime.css" hash="513121ca0ea4439dd8da671d258f7f6d"/><file name="obsidian.css" hash="880d6adf366e109c81a485ff095e30b1"/><file name="pojoaque.css" hash="c384dc304230dced8bd94e5e7afd5d78"/><file name="railscasts.css" hash="d88f7026d20d32c84bb1aa527f77852f"/><file name="rainbow.css" hash="d394d934b0bb7908db78f0e08f268ade"/><file name="school_book.css" hash="c716a7d7609f08b4c07a5cbee107a10b"/><file name="solarized_dark.css" hash="845eb33f2a4001645b340642c8cd386f"/><file name="solarized_light.css" hash="bb3f05eb8a3a3d4b6b2cfeb89352dadf"/><file name="sunburst.css" hash="0f85672ebff47a8b9201accf75da86d5"/><file name="tomorrow-night-blue.css" hash="bd717c6881d1fc4eabcd3591482761ae"/><file name="tomorrow-night-bright.css" hash="f4c2a42e479b65f616edcc39ea6f8f6e"/><file name="tomorrow-night-eighties.css" hash="d95cf4207791e84a97ffae83638f1e45"/><file name="tomorrow-night.css" hash="4067182039737bed4dfed1be396cdb68"/><file name="tomorrow.css" hash="bd04363ff97befcf2b0587f6fa4e3498"/><file name="vs.css" hash="54d3a346139a9f45bc0459ec4d1f571c"/><file name="xcode.css" hash="d93e64c1764043da5f372684c60fb2eb"/><file name="zenburn.css" hash="1603fc204a60dcb428f2c535fb6299ad"/></dir></dir><dir name="styles"><file name="github.css" hash="5641b80d5428d7e9294cb558038a00c9"/><file name="jasonm23-dark.css" hash="e5de83b1b46f743d43d0f9c85a5adbe3"/><file name="jasonm23-foghorn.css" hash="beda4802db758a6fbbf7ff8bdae4d784"/><file name="jasonm23-markdown.css" hash="e1c8a2ccd835d3d5a324ca37b3ea0bc6"/><file name="jasonm23-swiss.css" hash="80a7984e5f9421acf06dd4417f13945e"/><file name="kevinburke.css" hash="5270f06fbb5038563f58594d992b64aa"/><file name="markedapp-byword.css" hash="7bd9de1e004ef39d6cf3290848615227"/><file name="thomasf-solarizedcssdark.css" hash="e84d2edb9d84b3ce179bba087bf15418"/><file name="thomasf-solarizedcsslight.css" hash="19833766330728741c7a8047445a23ff"/></dir></dir><file name="mdm.css" hash="cf5084a6c25bb4eb11962a29eacf209b"/></dir><dir name="epiceditor"><dir><dir name="themes"><dir name="base"><file name="epiceditor.css" hash="72d9ff0a1296bf28b815d696129bb086"/></dir><dir name="editor"><file name="epic-dark.css" hash="872c9540cedbf5cdf69ca2b0accb3cef"/><file name="epic-light.css" hash="68d9441f297c73180dd83545ee70117a"/></dir><dir name="preview"><file name="bartik.css" hash="a8a3efffd02c3acf6e3dc62ee5e92936"/><file name="github.css" hash="6085b7303f9a3c3cc3d2d8039487bf5d"/><file name="githubNxcode.css" hash="c5639fe4cd88f0416c15892f2f9b90b2"/><file name="preview-dark.css" hash="660b85886b844d592e2c722937b438e1"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
47
  <compatible/>
48
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
49
  </package>
skin/adminhtml/default/default/markdown/highlight/styles/arta.css ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Date: 17.V.2011
3
+ Author: pumbur <pumbur@pumbur.net>
4
+ */
5
+
6
+ pre code
7
+ {
8
+ display: block; padding: 0.5em;
9
+ background: #222;
10
+ }
11
+
12
+ pre .profile .header *,
13
+ pre .ini .title,
14
+ pre .nginx .title
15
+ {
16
+ color: #fff;
17
+ }
18
+
19
+ pre .comment,
20
+ pre .javadoc,
21
+ pre .preprocessor,
22
+ pre .preprocessor .title,
23
+ pre .pragma,
24
+ pre .shebang,
25
+ pre .profile .summary,
26
+ pre .diff,
27
+ pre .pi,
28
+ pre .doctype,
29
+ pre .tag,
30
+ pre .template_comment,
31
+ pre .css .rules,
32
+ pre .tex .special
33
+ {
34
+ color: #444;
35
+ }
36
+
37
+ pre .string,
38
+ pre .symbol,
39
+ pre .diff .change,
40
+ pre .regexp,
41
+ pre .xml .attribute,
42
+ pre .smalltalk .char,
43
+ pre .xml .value,
44
+ pre .ini .value,
45
+ pre .clojure .attribute,
46
+ pre .coffeescript .attribute
47
+ {
48
+ color: #ffcc33;
49
+ }
50
+
51
+ pre .number,
52
+ pre .addition
53
+ {
54
+ color: #00cc66;
55
+ }
56
+
57
+ pre .built_in,
58
+ pre .literal,
59
+ pre .vhdl .typename,
60
+ pre .go .constant,
61
+ pre .go .typename,
62
+ pre .ini .keyword,
63
+ pre .lua .title,
64
+ pre .perl .variable,
65
+ pre .php .variable,
66
+ pre .mel .variable,
67
+ pre .django .variable,
68
+ pre .css .funtion,
69
+ pre .smalltalk .method,
70
+ pre .hexcolor,
71
+ pre .important,
72
+ pre .flow,
73
+ pre .inheritance,
74
+ pre .parser3 .variable
75
+ {
76
+ color: #32AAEE;
77
+ }
78
+
79
+ pre .keyword,
80
+ pre .tag .title,
81
+ pre .css .tag,
82
+ pre .css .class,
83
+ pre .css .id,
84
+ pre .css .pseudo,
85
+ pre .css .attr_selector,
86
+ pre .lisp .title,
87
+ pre .clojure .built_in,
88
+ pre .winutils,
89
+ pre .tex .command,
90
+ pre .request,
91
+ pre .status
92
+ {
93
+ color: #6644aa;
94
+ }
95
+
96
+ pre .title,
97
+ pre .ruby .constant,
98
+ pre .vala .constant,
99
+ pre .parent,
100
+ pre .deletion,
101
+ pre .template_tag,
102
+ pre .css .keyword,
103
+ pre .objectivec .class .id,
104
+ pre .smalltalk .class,
105
+ pre .lisp .keyword,
106
+ pre .apache .tag,
107
+ pre .nginx .variable,
108
+ pre .envvar,
109
+ pre .bash .variable,
110
+ pre .go .built_in,
111
+ pre .vbscript .built_in,
112
+ pre .lua .built_in,
113
+ pre .rsl .built_in,
114
+ pre .tail,
115
+ pre .avrasm .label,
116
+ pre .tex .formula,
117
+ pre .tex .formula *
118
+ {
119
+ color: #bb1166;
120
+ }
121
+
122
+ pre .yardoctag,
123
+ pre .phpdoc,
124
+ pre .profile .header,
125
+ pre .ini .title,
126
+ pre .apache .tag,
127
+ pre .parser3 .title
128
+ {
129
+ font-weight: bold;
130
+ }
131
+
132
+ pre .coffeescript .javascript,
133
+ pre .javascript .xml,
134
+ pre .tex .formula,
135
+ pre .xml .javascript,
136
+ pre .xml .vbscript,
137
+ pre .xml .css,
138
+ pre .xml .cdata
139
+ {
140
+ opacity: 0.6;
141
+ }
142
+
143
+ pre code,
144
+ pre .javascript,
145
+ pre .css,
146
+ pre .xml,
147
+ pre .subst,
148
+ pre .diff .chunk,
149
+ pre .css .value,
150
+ pre .css .attribute,
151
+ pre .lisp .string,
152
+ pre .lisp .number,
153
+ pre .tail .params,
154
+ pre .container,
155
+ pre .haskell *,
156
+ pre .erlang *,
157
+ pre .erlang_repl *
158
+ {
159
+ color: #aaa;
160
+ }
skin/adminhtml/default/default/markdown/highlight/styles/ascetic.css ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ background: white; color: black;
10
+ }
11
+
12
+ pre .string,
13
+ pre .tag .value,
14
+ pre .filter .argument,
15
+ pre .addition,
16
+ pre .change,
17
+ pre .apache .tag,
18
+ pre .apache .cbracket,
19
+ pre .nginx .built_in,
20
+ pre .tex .formula {
21
+ color: #888;
22
+ }
23
+
24
+ pre .comment,
25
+ pre .template_comment,
26
+ pre .shebang,
27
+ pre .doctype,
28
+ pre .pi,
29
+ pre .javadoc,
30
+ pre .deletion,
31
+ pre .apache .sqbracket {
32
+ color: #CCC;
33
+ }
34
+
35
+ pre .keyword,
36
+ pre .tag .title,
37
+ pre .ini .title,
38
+ pre .lisp .title,
39
+ pre .clojure .title,
40
+ pre .http .title,
41
+ pre .nginx .title,
42
+ pre .css .tag,
43
+ pre .winutils,
44
+ pre .flow,
45
+ pre .apache .tag,
46
+ pre .tex .command,
47
+ pre .request,
48
+ pre .status {
49
+ font-weight: bold;
50
+ }
skin/adminhtml/default/default/markdown/highlight/styles/brown_paper.css ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Brown Paper style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ background:#b7a68e url(./brown_papersq.png);
10
+ }
11
+
12
+ pre .keyword,
13
+ pre .literal,
14
+ pre .change,
15
+ pre .winutils,
16
+ pre .flow,
17
+ pre .lisp .title,
18
+ pre .clojure .built_in,
19
+ pre .nginx .title,
20
+ pre .tex .special,
21
+ pre .request,
22
+ pre .status {
23
+ color:#005599;
24
+ font-weight:bold;
25
+ }
26
+
27
+ pre code,
28
+ pre .subst,
29
+ pre .tag .keyword {
30
+ color: #363C69;
31
+ }
32
+
33
+ pre .string,
34
+ pre .title,
35
+ pre .haskell .type,
36
+ pre .tag .value,
37
+ pre .css .rules .value,
38
+ pre .preprocessor,
39
+ pre .pragma,
40
+ pre .ruby .symbol,
41
+ pre .ruby .symbol .string,
42
+ pre .ruby .class .parent,
43
+ pre .built_in,
44
+ pre .sql .aggregate,
45
+ pre .django .template_tag,
46
+ pre .django .variable,
47
+ pre .smalltalk .class,
48
+ pre .javadoc,
49
+ pre .ruby .string,
50
+ pre .django .filter .argument,
51
+ pre .smalltalk .localvars,
52
+ pre .smalltalk .array,
53
+ pre .attr_selector,
54
+ pre .pseudo,
55
+ pre .addition,
56
+ pre .stream,
57
+ pre .envvar,
58
+ pre .apache .tag,
59
+ pre .apache .cbracket,
60
+ pre .tex .number {
61
+ color: #2C009F;
62
+ }
63
+
64
+ pre .comment,
65
+ pre .java .annotation,
66
+ pre .python .decorator,
67
+ pre .template_comment,
68
+ pre .pi,
69
+ pre .doctype,
70
+ pre .deletion,
71
+ pre .shebang,
72
+ pre .apache .sqbracket,
73
+ pre .nginx .built_in,
74
+ pre .tex .formula {
75
+ color: #802022;
76
+ }
77
+
78
+ pre .keyword,
79
+ pre .literal,
80
+ pre .css .id,
81
+ pre .phpdoc,
82
+ pre .title,
83
+ pre .haskell .type,
84
+ pre .vbscript .built_in,
85
+ pre .sql .aggregate,
86
+ pre .rsl .built_in,
87
+ pre .smalltalk .class,
88
+ pre .diff .header,
89
+ pre .chunk,
90
+ pre .winutils,
91
+ pre .bash .variable,
92
+ pre .apache .tag,
93
+ pre .tex .command {
94
+ font-weight: bold;
95
+ }
96
+
97
+ pre .coffeescript .javascript,
98
+ pre .javascript .xml,
99
+ pre .tex .formula,
100
+ pre .xml .javascript,
101
+ pre .xml .vbscript,
102
+ pre .xml .css,
103
+ pre .xml .cdata {
104
+ opacity: 0.8;
105
+ }
skin/adminhtml/default/default/markdown/highlight/styles/dark.css ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Dark style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ background: #444;
10
+ }
11
+
12
+ pre .keyword,
13
+ pre .literal,
14
+ pre .change,
15
+ pre .winutils,
16
+ pre .flow,
17
+ pre .lisp .title,
18
+ pre .clojure .built_in,
19
+ pre .nginx .title,
20
+ pre .tex .special {
21
+ color: white;
22
+ }
23
+
24
+ pre code,
25
+ pre .subst {
26
+ color: #DDD;
27
+ }
28
+
29
+ pre .string,
30
+ pre .title,
31
+ pre .haskell .type,
32
+ pre .ini .title,
33
+ pre .tag .value,
34
+ pre .css .rules .value,
35
+ pre .preprocessor,
36
+ pre .pragma,
37
+ pre .ruby .symbol,
38
+ pre .ruby .symbol .string,
39
+ pre .ruby .class .parent,
40
+ pre .built_in,
41
+ pre .sql .aggregate,
42
+ pre .django .template_tag,
43
+ pre .django .variable,
44
+ pre .smalltalk .class,
45
+ pre .javadoc,
46
+ pre .ruby .string,
47
+ pre .django .filter .argument,
48
+ pre .smalltalk .localvars,
49
+ pre .smalltalk .array,
50
+ pre .attr_selector,
51
+ pre .pseudo,
52
+ pre .addition,
53
+ pre .stream,
54
+ pre .envvar,
55
+ pre .apache .tag,
56
+ pre .apache .cbracket,
57
+ pre .tex .command,
58
+ pre .prompt,
59
+ pre .coffeescript .attribute {
60
+ color: #D88;
61
+ }
62
+
63
+ pre .comment,
64
+ pre .java .annotation,
65
+ pre .python .decorator,
66
+ pre .template_comment,
67
+ pre .pi,
68
+ pre .doctype,
69
+ pre .deletion,
70
+ pre .shebang,
71
+ pre .apache .sqbracket,
72
+ pre .tex .formula {
73
+ color: #777;
74
+ }
75
+
76
+ pre .keyword,
77
+ pre .literal,
78
+ pre .title,
79
+ pre .css .id,
80
+ pre .phpdoc,
81
+ pre .haskell .type,
82
+ pre .vbscript .built_in,
83
+ pre .sql .aggregate,
84
+ pre .rsl .built_in,
85
+ pre .smalltalk .class,
86
+ pre .diff .header,
87
+ pre .chunk,
88
+ pre .winutils,
89
+ pre .bash .variable,
90
+ pre .apache .tag,
91
+ pre .tex .special,
92
+ pre .request,
93
+ pre .status {
94
+ font-weight: bold;
95
+ }
96
+
97
+ pre .coffeescript .javascript,
98
+ pre .javascript .xml,
99
+ pre .tex .formula,
100
+ pre .xml .javascript,
101
+ pre .xml .vbscript,
102
+ pre .xml .css,
103
+ pre .xml .cdata {
104
+ opacity: 0.5;
105
+ }
skin/adminhtml/default/default/{epiceditor → markdown}/highlight/styles/default.css RENAMED
@@ -26,6 +26,8 @@ pre .tag .value,
26
  pre .rules .value,
27
  pre .rules .value .number,
28
  pre .preprocessor,
 
 
29
  pre .ruby .symbol,
30
  pre .ruby .symbol .string,
31
  pre .aggregate,
@@ -41,15 +43,19 @@ pre .apache .cbracket,
41
  pre .tex .command,
42
  pre .tex .special,
43
  pre .erlang_repl .function_or_atom,
44
- pre .markdown .header {
 
 
45
  color: #800;
46
  }
47
 
 
48
  pre .comment,
49
  pre .annotation,
50
  pre .template_comment,
51
  pre .diff .header,
52
  pre .chunk,
 
53
  pre .markdown .blockquote {
54
  color: #888;
55
  }
@@ -58,11 +64,16 @@ pre .number,
58
  pre .date,
59
  pre .regexp,
60
  pre .literal,
 
61
  pre .smalltalk .symbol,
62
  pre .smalltalk .char,
63
  pre .go .constant,
64
  pre .change,
 
 
 
65
  pre .markdown .bullet,
 
66
  pre .markdown .link_url {
67
  color: #080;
68
  }
@@ -78,6 +89,7 @@ pre .attr_selector,
78
  pre .important,
79
  pre .pseudo,
80
  pre .pi,
 
81
  pre .doctype,
82
  pre .deletion,
83
  pre .envvar,
@@ -87,16 +99,19 @@ pre .nginx .built_in,
87
  pre .tex .formula,
88
  pre .erlang_repl .reserved,
89
  pre .prompt,
 
90
  pre .markdown .link_label,
91
  pre .vhdl .attribute,
92
  pre .clojure .attribute,
93
- pre .coffeescript .property {
 
 
 
94
  color: #88F
95
  }
96
 
97
  pre .keyword,
98
  pre .id,
99
- pre .phpdoc,
100
  pre .title,
101
  pre .built_in,
102
  pre .aggregate,
@@ -110,12 +125,14 @@ pre .bash .variable,
110
  pre .apache .tag,
111
  pre .go .typename,
112
  pre .tex .command,
 
113
  pre .markdown .strong,
114
  pre .request,
115
  pre .status {
116
  font-weight: bold;
117
  }
118
 
 
119
  pre .markdown .emphasis {
120
  font-style: italic;
121
  }
@@ -126,6 +143,7 @@ pre .nginx .built_in {
126
 
127
  pre .coffeescript .javascript,
128
  pre .javascript .xml,
 
129
  pre .tex .formula,
130
  pre .xml .javascript,
131
  pre .xml .vbscript,
26
  pre .rules .value,
27
  pre .rules .value .number,
28
  pre .preprocessor,
29
+ pre .pragma,
30
+ pre .haml .symbol,
31
  pre .ruby .symbol,
32
  pre .ruby .symbol .string,
33
  pre .aggregate,
43
  pre .tex .command,
44
  pre .tex .special,
45
  pre .erlang_repl .function_or_atom,
46
+ pre .asciidoc .header,
47
+ pre .markdown .header,
48
+ pre .coffeescript .attribute {
49
  color: #800;
50
  }
51
 
52
+ pre .smartquote,
53
  pre .comment,
54
  pre .annotation,
55
  pre .template_comment,
56
  pre .diff .header,
57
  pre .chunk,
58
+ pre .asciidoc .blockquote,
59
  pre .markdown .blockquote {
60
  color: #888;
61
  }
64
  pre .date,
65
  pre .regexp,
66
  pre .literal,
67
+ pre .hexcolor,
68
  pre .smalltalk .symbol,
69
  pre .smalltalk .char,
70
  pre .go .constant,
71
  pre .change,
72
+ pre .lasso .variable,
73
+ pre .makefile .variable,
74
+ pre .asciidoc .bullet,
75
  pre .markdown .bullet,
76
+ pre .asciidoc .link_url,
77
  pre .markdown .link_url {
78
  color: #080;
79
  }
89
  pre .important,
90
  pre .pseudo,
91
  pre .pi,
92
+ pre .haml .bullet,
93
  pre .doctype,
94
  pre .deletion,
95
  pre .envvar,
99
  pre .tex .formula,
100
  pre .erlang_repl .reserved,
101
  pre .prompt,
102
+ pre .asciidoc .link_label,
103
  pre .markdown .link_label,
104
  pre .vhdl .attribute,
105
  pre .clojure .attribute,
106
+ pre .asciidoc .attribute,
107
+ pre .lasso .attribute,
108
+ pre .coffeescript .property,
109
+ pre .makefile .phony {
110
  color: #88F
111
  }
112
 
113
  pre .keyword,
114
  pre .id,
 
115
  pre .title,
116
  pre .built_in,
117
  pre .aggregate,
125
  pre .apache .tag,
126
  pre .go .typename,
127
  pre .tex .command,
128
+ pre .asciidoc .strong,
129
  pre .markdown .strong,
130
  pre .request,
131
  pre .status {
132
  font-weight: bold;
133
  }
134
 
135
+ pre .asciidoc .emphasis,
136
  pre .markdown .emphasis {
137
  font-style: italic;
138
  }
143
 
144
  pre .coffeescript .javascript,
145
  pre .javascript .xml,
146
+ pre .lasso .markup,
147
  pre .tex .formula,
148
  pre .xml .javascript,
149
  pre .xml .vbscript,
skin/adminhtml/default/default/markdown/highlight/styles/docco.css ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
3
+ */
4
+
5
+ pre code {
6
+ display: block; padding: 0.5em;
7
+ color: #000;
8
+ background: #f8f8ff
9
+ }
10
+
11
+ pre .comment,
12
+ pre .template_comment,
13
+ pre .diff .header,
14
+ pre .javadoc {
15
+ color: #408080;
16
+ font-style: italic
17
+ }
18
+
19
+ pre .keyword,
20
+ pre .assignment,
21
+ pre .literal,
22
+ pre .css .rule .keyword,
23
+ pre .winutils,
24
+ pre .javascript .title,
25
+ pre .lisp .title,
26
+ pre .subst {
27
+ color: #954121;
28
+ }
29
+
30
+ pre .number,
31
+ pre .hexcolor {
32
+ color: #40a070
33
+ }
34
+
35
+ pre .string,
36
+ pre .tag .value,
37
+ pre .phpdoc,
38
+ pre .tex .formula {
39
+ color: #219161;
40
+ }
41
+
42
+ pre .title,
43
+ pre .id {
44
+ color: #19469D;
45
+ }
46
+ pre .params {
47
+ color: #00F;
48
+ }
49
+
50
+ pre .javascript .title,
51
+ pre .lisp .title,
52
+ pre .subst {
53
+ font-weight: normal
54
+ }
55
+
56
+ pre .class .title,
57
+ pre .haskell .label,
58
+ pre .tex .command {
59
+ color: #458;
60
+ font-weight: bold
61
+ }
62
+
63
+ pre .tag,
64
+ pre .tag .title,
65
+ pre .rules .property,
66
+ pre .django .tag .keyword {
67
+ color: #000080;
68
+ font-weight: normal
69
+ }
70
+
71
+ pre .attribute,
72
+ pre .variable,
73
+ pre .instancevar,
74
+ pre .lisp .body {
75
+ color: #008080
76
+ }
77
+
78
+ pre .regexp {
79
+ color: #B68
80
+ }
81
+
82
+ pre .class {
83
+ color: #458;
84
+ font-weight: bold
85
+ }
86
+
87
+ pre .symbol,
88
+ pre .ruby .symbol .string,
89
+ pre .ruby .symbol .keyword,
90
+ pre .ruby .symbol .keymethods,
91
+ pre .lisp .keyword,
92
+ pre .tex .special,
93
+ pre .input_number {
94
+ color: #990073
95
+ }
96
+
97
+ pre .builtin,
98
+ pre .constructor,
99
+ pre .built_in,
100
+ pre .lisp .title {
101
+ color: #0086b3
102
+ }
103
+
104
+ pre .preprocessor,
105
+ pre .pragma,
106
+ pre .pi,
107
+ pre .doctype,
108
+ pre .shebang,
109
+ pre .cdata {
110
+ color: #999;
111
+ font-weight: bold
112
+ }
113
+
114
+ pre .deletion {
115
+ background: #fdd
116
+ }
117
+
118
+ pre .addition {
119
+ background: #dfd
120
+ }
121
+
122
+ pre .diff .change {
123
+ background: #0086b3
124
+ }
125
+
126
+ pre .chunk {
127
+ color: #aaa
128
+ }
129
+
130
+ pre .tex .formula {
131
+ opacity: 0.5;
132
+ }
skin/adminhtml/default/default/markdown/highlight/styles/far.css ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ FAR Style (c) MajestiC <majestic2k@gmail.com>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ background: #000080;
10
+ }
11
+
12
+ pre code,
13
+ pre .subst {
14
+ color: #0FF;
15
+ }
16
+
17
+ pre .string,
18
+ pre .ruby .string,
19
+ pre .haskell .type,
20
+ pre .tag .value,
21
+ pre .css .rules .value,
22
+ pre .css .rules .value .number,
23
+ pre .preprocessor,
24
+ pre .pragma,
25
+ pre .ruby .symbol,
26
+ pre .ruby .symbol .string,
27
+ pre .built_in,
28
+ pre .sql .aggregate,
29
+ pre .django .template_tag,
30
+ pre .django .variable,
31
+ pre .smalltalk .class,
32
+ pre .addition,
33
+ pre .apache .tag,
34
+ pre .apache .cbracket,
35
+ pre .tex .command,
36
+ pre .clojure .title,
37
+ pre .coffeescript .attribute {
38
+ color: #FF0;
39
+ }
40
+
41
+ pre .keyword,
42
+ pre .css .id,
43
+ pre .title,
44
+ pre .haskell .type,
45
+ pre .vbscript .built_in,
46
+ pre .sql .aggregate,
47
+ pre .rsl .built_in,
48
+ pre .smalltalk .class,
49
+ pre .xml .tag .title,
50
+ pre .winutils,
51
+ pre .flow,
52
+ pre .change,
53
+ pre .envvar,
54
+ pre .bash .variable,
55
+ pre .tex .special,
56
+ pre .clojure .built_in {
57
+ color: #FFF;
58
+ }
59
+
60
+ pre .comment,
61
+ pre .phpdoc,
62
+ pre .javadoc,
63
+ pre .java .annotation,
64
+ pre .template_comment,
65
+ pre .deletion,
66
+ pre .apache .sqbracket,
67
+ pre .tex .formula {
68
+ color: #888;
69
+ }
70
+
71
+ pre .number,
72
+ pre .date,
73
+ pre .regexp,
74
+ pre .literal,
75
+ pre .smalltalk .symbol,
76
+ pre .smalltalk .char,
77
+ pre .clojure .attribute {
78
+ color: #0F0;
79
+ }
80
+
81
+ pre .python .decorator,
82
+ pre .django .filter .argument,
83
+ pre .smalltalk .localvars,
84
+ pre .smalltalk .array,
85
+ pre .attr_selector,
86
+ pre .pseudo,
87
+ pre .xml .pi,
88
+ pre .diff .header,
89
+ pre .chunk,
90
+ pre .shebang,
91
+ pre .nginx .built_in,
92
+ pre .prompt {
93
+ color: #008080;
94
+ }
95
+
96
+ pre .keyword,
97
+ pre .css .id,
98
+ pre .title,
99
+ pre .haskell .type,
100
+ pre .vbscript .built_in,
101
+ pre .sql .aggregate,
102
+ pre .rsl .built_in,
103
+ pre .smalltalk .class,
104
+ pre .winutils,
105
+ pre .flow,
106
+ pre .apache .tag,
107
+ pre .nginx .built_in,
108
+ pre .tex .command,
109
+ pre .tex .special,
110
+ pre .request,
111
+ pre .status {
112
+ font-weight: bold;
113
+ }
skin/adminhtml/default/default/markdown/highlight/styles/foundation.css ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Description: Foundation 4 docs style for highlight.js
3
+ Author: Dan Allen <dan.j.allen@gmail.com>
4
+ Website: http://foundation.zurb.com/docs/
5
+ Version: 1.0
6
+ Date: 2013-04-02
7
+ */
8
+
9
+ pre code {
10
+ display: block; padding: 0.5em;
11
+ background: #eee;
12
+ }
13
+
14
+ pre .header,
15
+ pre .decorator,
16
+ pre .annotation {
17
+ color: #000077;
18
+ }
19
+
20
+ pre .horizontal_rule,
21
+ pre .link_url,
22
+ pre .emphasis,
23
+ pre .attribute {
24
+ color: #070;
25
+ }
26
+
27
+ pre .emphasis {
28
+ font-style: italic;
29
+ }
30
+
31
+ pre .link_label,
32
+ pre .strong,
33
+ pre .value,
34
+ pre .string,
35
+ pre .scss .value .string {
36
+ color: #d14;
37
+ }
38
+
39
+ pre .strong {
40
+ font-weight: bold;
41
+ }
42
+
43
+ pre .blockquote,
44
+ pre .comment {
45
+ color: #998;
46
+ font-style: italic;
47
+ }
48
+
49
+ pre .asciidoc .title,
50
+ pre .function .title {
51
+ color: #900;
52
+ }
53
+
54
+ pre .class {
55
+ color: #458;
56
+ }
57
+
58
+ pre .id,
59
+ pre .pseudo,
60
+ pre .constant,
61
+ pre .hexcolor {
62
+ color: teal;
63
+ }
64
+
65
+ pre .variable {
66
+ color: #336699;
67
+ }
68
+
69
+ pre .bullet,
70
+ pre .javadoc {
71
+ color: #997700;
72
+ }
73
+
74
+ pre .pi,
75
+ pre .doctype {
76
+ color: #3344bb;
77
+ }
78
+
79
+ pre .code,
80
+ pre .number {
81
+ color: #099;
82
+ }
83
+
84
+ pre .important {
85
+ color: #f00;
86
+ }
87
+
88
+ pre .smartquote,
89
+ pre .label {
90
+ color: #970;
91
+ }
92
+
93
+ pre .preprocessor,
94
+ pre .pragma {
95
+ color: #579;
96
+ }
97
+
98
+ pre .reserved,
99
+ pre .keyword,
100
+ pre .scss .value {
101
+ color: #000;
102
+ }
103
+
104
+ pre .regexp {
105
+ background-color: #fff0ff;
106
+ color: #880088;
107
+ }
108
+
109
+ pre .symbol {
110
+ color: #990073;
111
+ }
112
+
113
+ pre .symbol .string {
114
+ color: #a60;
115
+ }
116
+
117
+ pre .tag {
118
+ color: #007700;
119
+ }
120
+
121
+ pre .at_rule,
122
+ pre .at_rule .keyword {
123
+ color: #088;
124
+ }
125
+
126
+ pre .at_rule .preprocessor {
127
+ color: #808;
128
+ }
129
+
130
+ pre .scss .tag,
131
+ pre .scss .attribute {
132
+ color: #339;
133
+ }
skin/adminhtml/default/default/{epiceditor → markdown}/highlight/styles/github.css RENAMED
@@ -44,7 +44,9 @@ pre .tex .formula {
44
  }
45
 
46
  pre .title,
47
- pre .id {
 
 
48
  color: #900;
49
  font-weight: bold
50
  }
@@ -102,6 +104,7 @@ pre .clojure .built_in {
102
  }
103
 
104
  pre .preprocessor,
 
105
  pre .pi,
106
  pre .doctype,
107
  pre .shebang,
44
  }
45
 
46
  pre .title,
47
+ pre .id,
48
+ pre .coffeescript .params,
49
+ pre .scss .preprocessor {
50
  color: #900;
51
  font-weight: bold
52
  }
104
  }
105
 
106
  pre .preprocessor,
107
+ pre .pragma,
108
  pre .pi,
109
  pre .doctype,
110
  pre .shebang,
skin/adminhtml/default/default/{epiceditor → markdown}/highlight/styles/googlecode.css RENAMED
@@ -43,7 +43,8 @@ pre .filter .argument,
43
  pre .attr_selector,
44
  pre .apache .cbracket,
45
  pre .date,
46
- pre .regexp {
 
47
  color: #080;
48
  }
49
 
@@ -112,7 +113,8 @@ pre .nginx .built_in {
112
  }
113
 
114
  pre .preprocessor,
115
- pre .preprocessor * {
 
116
  color: #444;
117
  }
118
 
43
  pre .attr_selector,
44
  pre .apache .cbracket,
45
  pre .date,
46
+ pre .regexp,
47
+ pre .coffeescript .attribute {
48
  color: #080;
49
  }
50
 
113
  }
114
 
115
  pre .preprocessor,
116
+ pre .preprocessor *,
117
+ pre .pragma {
118
  color: #444;
119
  }
120
 
skin/adminhtml/default/default/markdown/highlight/styles/idea.css ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Intellij Idea-like styling (c) Vasily Polovnyov <vast@whiteants.net>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ color: #000;
10
+ background: #fff;
11
+ }
12
+
13
+ pre .subst,
14
+ pre .title {
15
+ font-weight: normal;
16
+ color: #000;
17
+ }
18
+
19
+ pre .comment,
20
+ pre .template_comment,
21
+ pre .javadoc,
22
+ pre .diff .header {
23
+ color: #808080;
24
+ font-style: italic;
25
+ }
26
+
27
+ pre .annotation,
28
+ pre .decorator,
29
+ pre .preprocessor,
30
+ pre .pragma,
31
+ pre .doctype,
32
+ pre .pi,
33
+ pre .chunk,
34
+ pre .shebang,
35
+ pre .apache .cbracket,
36
+ pre .prompt,
37
+ pre .http .title {
38
+ color: #808000;
39
+ }
40
+
41
+ pre .tag,
42
+ pre .pi {
43
+ background: #efefef;
44
+ }
45
+
46
+ pre .tag .title,
47
+ pre .id,
48
+ pre .attr_selector,
49
+ pre .pseudo,
50
+ pre .literal,
51
+ pre .keyword,
52
+ pre .hexcolor,
53
+ pre .css .function,
54
+ pre .ini .title,
55
+ pre .css .class,
56
+ pre .list .title,
57
+ pre .clojure .title,
58
+ pre .nginx .title,
59
+ pre .tex .command,
60
+ pre .request,
61
+ pre .status {
62
+ font-weight: bold;
63
+ color: #000080;
64
+ }
65
+
66
+ pre .attribute,
67
+ pre .rules .keyword,
68
+ pre .number,
69
+ pre .date,
70
+ pre .regexp,
71
+ pre .tex .special {
72
+ font-weight: bold;
73
+ color: #0000ff;
74
+ }
75
+
76
+ pre .number,
77
+ pre .regexp {
78
+ font-weight: normal;
79
+ }
80
+
81
+ pre .string,
82
+ pre .value,
83
+ pre .filter .argument,
84
+ pre .css .function .params,
85
+ pre .apache .tag {
86
+ color: #008000;
87
+ font-weight: bold;
88
+ }
89
+
90
+ pre .symbol,
91
+ pre .ruby .symbol .string,
92
+ pre .char,
93
+ pre .tex .formula {
94
+ color: #000;
95
+ background: #d0eded;
96
+ font-style: italic;
97
+ }
98
+
99
+ pre .phpdoc,
100
+ pre .yardoctag,
101
+ pre .javadoctag {
102
+ text-decoration: underline;
103
+ }
104
+
105
+ pre .variable,
106
+ pre .envvar,
107
+ pre .apache .sqbracket,
108
+ pre .nginx .built_in {
109
+ color: #660e7a;
110
+ }
111
+
112
+ pre .addition {
113
+ background: #baeeba;
114
+ }
115
+
116
+ pre .deletion {
117
+ background: #ffc8bd;
118
+ }
119
+
120
+ pre .diff .change {
121
+ background: #bccff9;
122
+ }
skin/adminhtml/default/default/markdown/highlight/styles/ir_black.css ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ IR_Black style (c) Vasily Mikhailitchenko <vaskas@programica.ru>
3
+ */
4
+
5
+ pre code {
6
+ display: block; padding: 0.5em;
7
+ background: #000; color: #f8f8f8;
8
+ }
9
+
10
+ pre .shebang,
11
+ pre .comment,
12
+ pre .template_comment,
13
+ pre .javadoc {
14
+ color: #7c7c7c;
15
+ }
16
+
17
+ pre .keyword,
18
+ pre .tag,
19
+ pre .tex .command,
20
+ pre .request,
21
+ pre .status,
22
+ pre .clojure .attribute {
23
+ color: #96CBFE;
24
+ }
25
+
26
+ pre .sub .keyword,
27
+ pre .method,
28
+ pre .list .title,
29
+ pre .nginx .title {
30
+ color: #FFFFB6;
31
+ }
32
+
33
+ pre .string,
34
+ pre .tag .value,
35
+ pre .cdata,
36
+ pre .filter .argument,
37
+ pre .attr_selector,
38
+ pre .apache .cbracket,
39
+ pre .date,
40
+ pre .coffeescript .attribute {
41
+ color: #A8FF60;
42
+ }
43
+
44
+ pre .subst {
45
+ color: #DAEFA3;
46
+ }
47
+
48
+ pre .regexp {
49
+ color: #E9C062;
50
+ }
51
+
52
+ pre .title,
53
+ pre .sub .identifier,
54
+ pre .pi,
55
+ pre .decorator,
56
+ pre .tex .special,
57
+ pre .haskell .type,
58
+ pre .constant,
59
+ pre .smalltalk .class,
60
+ pre .javadoctag,
61
+ pre .yardoctag,
62
+ pre .phpdoc,
63
+ pre .nginx .built_in {
64
+ color: #FFFFB6;
65
+ }
66
+
67
+ pre .symbol,
68
+ pre .ruby .symbol .string,
69
+ pre .number,
70
+ pre .variable,
71
+ pre .vbscript,
72
+ pre .literal {
73
+ color: #C6C5FE;
74
+ }
75
+
76
+ pre .css .tag {
77
+ color: #96CBFE;
78
+ }
79
+
80
+ pre .css .rules .property,
81
+ pre .css .id {
82
+ color: #FFFFB6;
83
+ }
84
+
85
+ pre .css .class {
86
+ color: #FFF;
87
+ }
88
+
89
+ pre .hexcolor {
90
+ color: #C6C5FE;
91
+ }
92
+
93
+ pre .number {
94
+ color:#FF73FD;
95
+ }
96
+
97
+ pre .coffeescript .javascript,
98
+ pre .javascript .xml,
99
+ pre .tex .formula,
100
+ pre .xml .javascript,
101
+ pre .xml .vbscript,
102
+ pre .xml .css,
103
+ pre .xml .cdata {
104
+ opacity: 0.7;
105
+ }
skin/adminhtml/default/default/markdown/highlight/styles/magula.css ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Description: Magula style for highligh.js
3
+ Author: Ruslan Keba <rukeba@gmail.com>
4
+ Website: http://rukeba.com/
5
+ Version: 1.0
6
+ Date: 2009-01-03
7
+ Music: Aphex Twin / Xtal
8
+ */
9
+
10
+ pre code {
11
+ display: block; padding: 0.5em;
12
+ background-color: #f4f4f4;
13
+ }
14
+
15
+ pre code,
16
+ pre .subst,
17
+ pre .lisp .title,
18
+ pre .clojure .built_in {
19
+ color: black;
20
+ }
21
+
22
+ pre .string,
23
+ pre .title,
24
+ pre .parent,
25
+ pre .tag .value,
26
+ pre .rules .value,
27
+ pre .rules .value .number,
28
+ pre .preprocessor,
29
+ pre .pragma,
30
+ pre .ruby .symbol,
31
+ pre .ruby .symbol .string,
32
+ pre .aggregate,
33
+ pre .template_tag,
34
+ pre .django .variable,
35
+ pre .smalltalk .class,
36
+ pre .addition,
37
+ pre .flow,
38
+ pre .stream,
39
+ pre .bash .variable,
40
+ pre .apache .cbracket,
41
+ pre .coffeescript .attribute {
42
+ color: #050;
43
+ }
44
+
45
+ pre .comment,
46
+ pre .annotation,
47
+ pre .template_comment,
48
+ pre .diff .header,
49
+ pre .chunk {
50
+ color: #777;
51
+ }
52
+
53
+ pre .number,
54
+ pre .date,
55
+ pre .regexp,
56
+ pre .literal,
57
+ pre .smalltalk .symbol,
58
+ pre .smalltalk .char,
59
+ pre .change,
60
+ pre .tex .special {
61
+ color: #800;
62
+ }
63
+
64
+ pre .label,
65
+ pre .javadoc,
66
+ pre .ruby .string,
67
+ pre .decorator,
68
+ pre .filter .argument,
69
+ pre .localvars,
70
+ pre .array,
71
+ pre .attr_selector,
72
+ pre .pseudo,
73
+ pre .pi,
74
+ pre .doctype,
75
+ pre .deletion,
76
+ pre .envvar,
77
+ pre .shebang,
78
+ pre .apache .sqbracket,
79
+ pre .nginx .built_in,
80
+ pre .tex .formula,
81
+ pre .prompt,
82
+ pre .clojure .attribute {
83
+ color: #00e;
84
+ }
85
+
86
+ pre .keyword,
87
+ pre .id,
88
+ pre .phpdoc,
89
+ pre .title,
90
+ pre .built_in,
91
+ pre .aggregate,
92
+ pre .smalltalk .class,
93
+ pre .winutils,
94
+ pre .bash .variable,
95
+ pre .apache .tag,
96
+ pre .xml .tag,
97
+ pre .tex .command,
98
+ pre .request,
99
+ pre .status {
100
+ font-weight: bold;
101
+ color: navy;
102
+ }
103
+
104
+ pre .nginx .built_in {
105
+ font-weight: normal;
106
+ }
107
+
108
+ pre .coffeescript .javascript,
109
+ pre .javascript .xml,
110
+ pre .tex .formula,
111
+ pre .xml .javascript,
112
+ pre .xml .vbscript,
113
+ pre .xml .css,
114
+ pre .xml .cdata {
115
+ opacity: 0.5;
116
+ }
117
+
118
+ /* --- */
119
+ pre .apache .tag {
120
+ font-weight: bold;
121
+ color: blue;
122
+ }
123
+
skin/adminhtml/default/default/markdown/highlight/styles/mono-blue.css ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Five-color theme from a single blue hue.
3
+ */
4
+ pre code {
5
+ display: block; padding: 0.5em;
6
+ background: #EAEEF3; color: #00193A;
7
+ }
8
+
9
+ pre .keyword,
10
+ pre .title,
11
+ pre .important,
12
+ pre .request,
13
+ pre .header,
14
+ pre .javadoctag {
15
+ font-weight: bold;
16
+ }
17
+
18
+ pre .comment,
19
+ pre .chunk,
20
+ pre .template_comment {
21
+ color: #738191;
22
+ }
23
+
24
+ pre .string,
25
+ pre .title,
26
+ pre .parent,
27
+ pre .built_in,
28
+ pre .literal,
29
+ pre .filename,
30
+ pre .value,
31
+ pre .addition,
32
+ pre .tag,
33
+ pre .argument,
34
+ pre .link_label,
35
+ pre .blockquote,
36
+ pre .header {
37
+ color: #0048AB;
38
+ }
39
+
40
+ pre .decorator,
41
+ pre .prompt,
42
+ pre .yardoctag,
43
+ pre .subst,
44
+ pre .symbol,
45
+ pre .doctype,
46
+ pre .regexp,
47
+ pre .preprocessor,
48
+ pre .pragma,
49
+ pre .pi,
50
+ pre .attribute,
51
+ pre .attr_selector,
52
+ pre .javadoc,
53
+ pre .xmlDocTag,
54
+ pre .deletion,
55
+ pre .shebang,
56
+ pre .string .variable,
57
+ pre .link_url,
58
+ pre .bullet,
59
+ pre .sqbracket,
60
+ pre .phony {
61
+ color: #4C81C9;
62
+ }
skin/adminhtml/default/default/markdown/highlight/styles/monokai.css ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Monokai style - ported by Luigi Maselli - http://grigio.org
3
+ */
4
+
5
+ pre code {
6
+ display: block; padding: 0.5em;
7
+ background: #272822;
8
+ }
9
+
10
+ pre .tag,
11
+ pre .tag .title,
12
+ pre .keyword,
13
+ pre .literal,
14
+ pre .strong,
15
+ pre .change,
16
+ pre .winutils,
17
+ pre .flow,
18
+ pre .lisp .title,
19
+ pre .clojure .built_in,
20
+ pre .nginx .title,
21
+ pre .tex .special {
22
+ color: #F92672;
23
+ }
24
+
25
+ pre code {
26
+ color: #DDD;
27
+ }
28
+
29
+ pre code .constant,
30
+ pre .asciidoc .code {
31
+ color: #66D9EF;
32
+ }
33
+
34
+ pre .code,
35
+ pre .class .title,
36
+ pre .header {
37
+ color: white;
38
+ }
39
+
40
+ pre .link_label,
41
+ pre .attribute,
42
+ pre .symbol,
43
+ pre .symbol .string,
44
+ pre .value,
45
+ pre .regexp {
46
+ color: #BF79DB;
47
+ }
48
+
49
+ pre .link_url,
50
+ pre .tag .value,
51
+ pre .string,
52
+ pre .bullet,
53
+ pre .subst,
54
+ pre .title,
55
+ pre .emphasis,
56
+ pre .haskell .type,
57
+ pre .preprocessor,
58
+ pre .pragma,
59
+ pre .ruby .class .parent,
60
+ pre .built_in,
61
+ pre .sql .aggregate,
62
+ pre .django .template_tag,
63
+ pre .django .variable,
64
+ pre .smalltalk .class,
65
+ pre .javadoc,
66
+ pre .django .filter .argument,
67
+ pre .smalltalk .localvars,
68
+ pre .smalltalk .array,
69
+ pre .attr_selector,
70
+ pre .pseudo,
71
+ pre .addition,
72
+ pre .stream,
73
+ pre .envvar,
74
+ pre .apache .tag,
75
+ pre .apache .cbracket,
76
+ pre .tex .command,
77
+ pre .prompt {
78
+ color: #A6E22E;
79
+ }
80
+
81
+ pre .comment,
82
+ pre .java .annotation,
83
+ pre .smartquote,
84
+ pre .blockquote,
85
+ pre .horizontal_rule,
86
+ pre .python .decorator,
87
+ pre .template_comment,
88
+ pre .pi,
89
+ pre .doctype,
90
+ pre .deletion,
91
+ pre .shebang,
92
+ pre .apache .sqbracket,
93
+ pre .tex .formula {
94
+ color: #75715E;
95
+ }
96
+
97
+ pre .keyword,
98
+ pre .literal,
99
+ pre .css .id,
100
+ pre .phpdoc,
101
+ pre .title,
102
+ pre .header,
103
+ pre .haskell .type,
104
+ pre .vbscript .built_in,
105
+ pre .sql .aggregate,
106
+ pre .rsl .built_in,
107
+ pre .smalltalk .class,
108
+ pre .diff .header,
109
+ pre .chunk,
110
+ pre .winutils,
111
+ pre .bash .variable,
112
+ pre .apache .tag,
113
+ pre .tex .special,
114
+ pre .request,
115
+ pre .status {
116
+ font-weight: bold;
117
+ }
118
+
119
+ pre .coffeescript .javascript,
120
+ pre .javascript .xml,
121
+ pre .tex .formula,
122
+ pre .xml .javascript,
123
+ pre .xml .vbscript,
124
+ pre .xml .css,
125
+ pre .xml .cdata {
126
+ opacity: 0.5;
127
+ }
skin/adminhtml/default/default/markdown/highlight/styles/monokai_sublime.css ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block;
9
+ padding: 0.5em;
10
+ background: #23241f;
11
+ }
12
+ pre .tag,
13
+ pre code {
14
+ color: #f8f8f2;
15
+ }
16
+ pre .keyword,
17
+ pre .function,
18
+ pre .literal,
19
+ pre .change,
20
+ pre .winutils,
21
+ pre .flow,
22
+ pre .lisp .title,
23
+ pre .clojure .built_in,
24
+ pre .nginx .title,
25
+ pre .tex .special {
26
+ color: #66d9ef;
27
+ }
28
+ pre .variable,
29
+ pre .params {
30
+ color: #fd9720;
31
+ }
32
+ pre .constant {
33
+ color: #66d9ef;
34
+ }
35
+ pre .title,
36
+ pre .class .title,
37
+ pre .css .class {
38
+ color: #a6e22e;
39
+ }
40
+ pre .attribute,
41
+ pre .symbol,
42
+ pre .symbol .string,
43
+ pre .tag .title,
44
+ pre .value,
45
+ pre .css .tag {
46
+ color: #f92672;
47
+ }
48
+ pre .number,
49
+ pre .preprocessor,
50
+ pre .pragma,
51
+ pre .regexp {
52
+ color: #ae81ff;
53
+ }
54
+ pre .tag .value,
55
+ pre .string,
56
+ pre .css .id,
57
+ pre .subst,
58
+ pre .haskell .type,
59
+ pre .ruby .class .parent,
60
+ pre .built_in,
61
+ pre .sql .aggregate,
62
+ pre .django .template_tag,
63
+ pre .django .variable,
64
+ pre .smalltalk .class,
65
+ pre .django .filter .argument,
66
+ pre .smalltalk .localvars,
67
+ pre .smalltalk .array,
68
+ pre .attr_selector,
69
+ pre .pseudo,
70
+ pre .addition,
71
+ pre .stream,
72
+ pre .envvar,
73
+ pre .apache .tag,
74
+ pre .apache .cbracket,
75
+ pre .tex .command,
76
+ pre .prompt {
77
+ color: #e6db74;
78
+ }
79
+ pre .comment,
80
+ pre .javadoc,
81
+ pre .java .annotation,
82
+ pre .python .decorator,
83
+ pre .template_comment,
84
+ pre .pi,
85
+ pre .doctype,
86
+ pre .deletion,
87
+ pre .shebang,
88
+ pre .apache .sqbracket,
89
+ pre .tex .formula {
90
+ color: #75715e;
91
+ }
92
+ pre .coffeescript .javascript,
93
+ pre .javascript .xml,
94
+ pre .tex .formula {
95
+ opacity: 0.5;
96
+ }
97
+ pre .xml .javascript,
98
+ pre .xml .vbscript,
99
+ pre .xml .css,
100
+ pre .xml .cdata {
101
+ opacity: 0.5;
102
+ }
skin/adminhtml/default/default/markdown/highlight/styles/obsidian.css ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Obsidian style
3
+ * ported by Alexander Marenin (http://github.com/ioncreature)
4
+ */
5
+
6
+ pre code {
7
+ display: block; padding: 0.5em;
8
+ background: #282B2E;
9
+ }
10
+
11
+ pre .keyword,
12
+ pre .literal,
13
+ pre .change,
14
+ pre .winutils,
15
+ pre .flow,
16
+ pre .lisp .title,
17
+ pre .clojure .built_in,
18
+ pre .nginx .title,
19
+ pre .css .id,
20
+ pre .tex .special {
21
+ color: #93C763;
22
+ }
23
+
24
+ pre .number {
25
+ color: #FFCD22;
26
+ }
27
+
28
+ pre code {
29
+ color: #E0E2E4;
30
+ }
31
+
32
+ pre .css .tag,
33
+ pre .css .pseudo {
34
+ color: #D0D2B5;
35
+ }
36
+
37
+ pre .attribute,
38
+ pre code .constant {
39
+ color: #668BB0;
40
+ }
41
+
42
+ pre .xml .attribute {
43
+ color: #B3B689;
44
+ }
45
+
46
+ pre .xml .tag .value {
47
+ color: #E8E2B7;
48
+ }
49
+
50
+ pre .code,
51
+ pre .class .title,
52
+ pre .header {
53
+ color: white;
54
+ }
55
+
56
+ pre .class,
57
+ pre .hexcolor {
58
+ color: #93C763;
59
+ }
60
+
61
+ pre .regexp {
62
+ color: #D39745;
63
+ }
64
+
65
+ pre .at_rule,
66
+ pre .at_rule .keyword {
67
+ color: #A082BD;
68
+ }
69
+
70
+ pre .doctype {
71
+ color: #557182;
72
+ }
73
+
74
+ pre .link_url,
75
+ pre .tag,
76
+ pre .tag .title,
77
+ pre .bullet,
78
+ pre .subst,
79
+ pre .emphasis,
80
+ pre .haskell .type,
81
+ pre .preprocessor,
82
+ pre .pragma,
83
+ pre .ruby .class .parent,
84
+ pre .built_in,
85
+ pre .sql .aggregate,
86
+ pre .django .template_tag,
87
+ pre .django .variable,
88
+ pre .smalltalk .class,
89
+ pre .javadoc,
90
+ pre .django .filter .argument,
91
+ pre .smalltalk .localvars,
92
+ pre .smalltalk .array,
93
+ pre .attr_selector,
94
+ pre .pseudo,
95
+ pre .addition,
96
+ pre .stream,
97
+ pre .envvar,
98
+ pre .apache .tag,
99
+ pre .apache .cbracket,
100
+ pre .tex .command,
101
+ pre .prompt {
102
+ color: #8CBBAD;
103
+ }
104
+
105
+ pre .string {
106
+ color: #EC7600;
107
+ }
108
+
109
+ pre .comment,
110
+ pre .java .annotation,
111
+ pre .blockquote,
112
+ pre .horizontal_rule,
113
+ pre .python .decorator,
114
+ pre .template_comment,
115
+ pre .pi,
116
+ pre .deletion,
117
+ pre .shebang,
118
+ pre .apache .sqbracket,
119
+ pre .tex .formula {
120
+ color: #818E96;
121
+ }
122
+
123
+ pre .keyword,
124
+ pre .literal,
125
+ pre .css .id,
126
+ pre .phpdoc,
127
+ pre .title,
128
+ pre .header,
129
+ pre .haskell .type,
130
+ pre .vbscript .built_in,
131
+ pre .sql .aggregate,
132
+ pre .rsl .built_in,
133
+ pre .smalltalk .class,
134
+ pre .diff .header,
135
+ pre .chunk,
136
+ pre .winutils,
137
+ pre .bash .variable,
138
+ pre .apache .tag,
139
+ pre .tex .special,
140
+ pre .request,
141
+ pre .at_rule .keyword,
142
+ pre .status {
143
+ font-weight: bold;
144
+ }
145
+
146
+ pre .coffeescript .javascript,
147
+ pre .javascript .xml,
148
+ pre .tex .formula,
149
+ pre .xml .javascript,
150
+ pre .xml .vbscript,
151
+ pre .xml .css,
152
+ pre .xml .cdata {
153
+ opacity: 0.5;
154
+ }
skin/adminhtml/default/default/markdown/highlight/styles/pojoaque.css ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Pojoaque Style by Jason Tate
4
+ http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html
5
+ Based on Solarized Style from http://ethanschoonover.com/solarized
6
+
7
+ */
8
+
9
+ pre code {
10
+ display: block; padding: 0.5em;
11
+ color: #DCCF8F;
12
+ background: url(./pojoaque.jpg) repeat scroll left top #181914;
13
+ }
14
+
15
+ pre .comment,
16
+ pre .template_comment,
17
+ pre .diff .header,
18
+ pre .doctype,
19
+ pre .lisp .string,
20
+ pre .javadoc {
21
+ color: #586e75;
22
+ font-style: italic;
23
+ }
24
+
25
+ pre .keyword,
26
+ pre .css .rule .keyword,
27
+ pre .winutils,
28
+ pre .javascript .title,
29
+ pre .method,
30
+ pre .addition,
31
+ pre .css .tag,
32
+ pre .clojure .title,
33
+ pre .nginx .title {
34
+ color: #B64926;
35
+ }
36
+
37
+ pre .number,
38
+ pre .command,
39
+ pre .string,
40
+ pre .tag .value,
41
+ pre .phpdoc,
42
+ pre .tex .formula,
43
+ pre .regexp,
44
+ pre .hexcolor {
45
+ color: #468966;
46
+ }
47
+
48
+ pre .title,
49
+ pre .localvars,
50
+ pre .function .title,
51
+ pre .chunk,
52
+ pre .decorator,
53
+ pre .built_in,
54
+ pre .lisp .title,
55
+ pre .clojure .built_in,
56
+ pre .identifier,
57
+ pre .id {
58
+ color: #FFB03B;
59
+ }
60
+
61
+ pre .attribute,
62
+ pre .variable,
63
+ pre .lisp .body,
64
+ pre .smalltalk .number,
65
+ pre .constant,
66
+ pre .class .title,
67
+ pre .parent,
68
+ pre .haskell .type {
69
+ color: #b58900;
70
+ }
71
+
72
+ pre .css .attribute {
73
+ color: #b89859;
74
+ }
75
+
76
+ pre .css .number,pre .css .hexcolor{
77
+ color: #DCCF8F;
78
+ }
79
+
80
+ pre .css .class {
81
+ color: #d3a60c;
82
+ }
83
+
84
+ pre .preprocessor,
85
+ pre .pragma,
86
+ pre .pi,
87
+ pre .shebang,
88
+ pre .symbol,
89
+ pre .symbol .string,
90
+ pre .diff .change,
91
+ pre .special,
92
+ pre .attr_selector,
93
+ pre .important,
94
+ pre .subst,
95
+ pre .cdata {
96
+ color: #cb4b16;
97
+ }
98
+
99
+ pre .deletion {
100
+ color: #dc322f;
101
+ }
102
+
103
+ pre .tex .formula {
104
+ background: #073642;
105
+ }
skin/adminhtml/default/default/markdown/highlight/styles/railscasts.css ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Railscasts-like style (c) Visoft, Inc. (Damien White)
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block;
9
+ padding: 0.5em;
10
+ background: #232323;
11
+ color: #E6E1DC;
12
+ }
13
+
14
+ pre .comment,
15
+ pre .template_comment,
16
+ pre .javadoc,
17
+ pre .shebang {
18
+ color: #BC9458;
19
+ font-style: italic;
20
+ }
21
+
22
+ pre .keyword,
23
+ pre .ruby .function .keyword,
24
+ pre .request,
25
+ pre .status,
26
+ pre .nginx .title,
27
+ pre .method,
28
+ pre .list .title {
29
+ color: #C26230;
30
+ }
31
+
32
+ pre .string,
33
+ pre .number,
34
+ pre .regexp,
35
+ pre .tag .value,
36
+ pre .cdata,
37
+ pre .filter .argument,
38
+ pre .attr_selector,
39
+ pre .apache .cbracket,
40
+ pre .date,
41
+ pre .tex .command,
42
+ pre .markdown .link_label {
43
+ color: #A5C261;
44
+ }
45
+
46
+ pre .subst {
47
+ color: #519F50;
48
+ }
49
+
50
+ pre .tag,
51
+ pre .tag .keyword,
52
+ pre .tag .title,
53
+ pre .doctype,
54
+ pre .sub .identifier,
55
+ pre .pi,
56
+ pre .input_number {
57
+ color: #E8BF6A;
58
+ }
59
+
60
+ pre .identifier {
61
+ color: #D0D0FF;
62
+ }
63
+
64
+ pre .class .title,
65
+ pre .haskell .type,
66
+ pre .smalltalk .class,
67
+ pre .javadoctag,
68
+ pre .yardoctag,
69
+ pre .phpdoc {
70
+ text-decoration: none;
71
+ }
72
+
73
+ pre .constant {
74
+ color: #DA4939;
75
+ }
76
+
77
+
78
+ pre .symbol,
79
+ pre .built_in,
80
+ pre .ruby .symbol .string,
81
+ pre .ruby .symbol .identifier,
82
+ pre .markdown .link_url,
83
+ pre .attribute {
84
+ color: #6D9CBE;
85
+ }
86
+
87
+ pre .markdown .link_url {
88
+ text-decoration: underline;
89
+ }
90
+
91
+
92
+
93
+ pre .params,
94
+ pre .variable,
95
+ pre .clojure .attribute {
96
+ color: #D0D0FF;
97
+ }
98
+
99
+ pre .css .tag,
100
+ pre .rules .property,
101
+ pre .pseudo,
102
+ pre .tex .special {
103
+ color: #CDA869;
104
+ }
105
+
106
+ pre .css .class {
107
+ color: #9B703F;
108
+ }
109
+
110
+ pre .rules .keyword {
111
+ color: #C5AF75;
112
+ }
113
+
114
+ pre .rules .value {
115
+ color: #CF6A4C;
116
+ }
117
+
118
+ pre .css .id {
119
+ color: #8B98AB;
120
+ }
121
+
122
+ pre .annotation,
123
+ pre .apache .sqbracket,
124
+ pre .nginx .built_in {
125
+ color: #9B859D;
126
+ }
127
+
128
+ pre .preprocessor,
129
+ pre .preprocessor *
130
+ pre .pragma {
131
+ color: #8996A8 !important;
132
+ }
133
+
134
+ pre .hexcolor,
135
+ pre .css .value .number {
136
+ color: #A5C261;
137
+ }
138
+
139
+ pre .title,
140
+ pre .decorator,
141
+ pre .css .function {
142
+ color: #FFC66D;
143
+ }
144
+
145
+ pre .diff .header,
146
+ pre .chunk {
147
+ background-color: #2F33AB;
148
+ color: #E6E1DC;
149
+ display: inline-block;
150
+ width: 100%;
151
+ }
152
+
153
+ pre .diff .change {
154
+ background-color: #4A410D;
155
+ color: #F8F8F8;
156
+ display: inline-block;
157
+ width: 100%;
158
+ }
159
+
160
+ pre .addition {
161
+ background-color: #144212;
162
+ color: #E6E1DC;
163
+ display: inline-block;
164
+ width: 100%;
165
+ }
166
+
167
+ pre .deletion {
168
+ background-color: #600;
169
+ color: #E6E1DC;
170
+ display: inline-block;
171
+ width: 100%;
172
+ }
173
+
174
+ pre .coffeescript .javascript,
175
+ pre .javascript .xml,
176
+ pre .tex .formula,
177
+ pre .xml .javascript,
178
+ pre .xml .vbscript,
179
+ pre .xml .css,
180
+ pre .xml .cdata {
181
+ opacity: 0.7;
182
+ }
skin/adminhtml/default/default/markdown/highlight/styles/rainbow.css ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Style with support for rainbow parens
4
+
5
+ */
6
+
7
+ pre ::-moz-selection{ background: #FF5E99; color:#fff; text-shadow: none; }
8
+ pre ::selection { background:#FF5E99; color:#fff; text-shadow: none; }
9
+
10
+ pre code {
11
+ display: block; padding: 0.5em;
12
+ background: #474949; color: #D1D9E1;
13
+ }
14
+
15
+
16
+ pre .body,
17
+ pre .collection {
18
+ color: #D1D9E1;
19
+ }
20
+
21
+ pre .comment,
22
+ pre .template_comment,
23
+ pre .diff .header,
24
+ pre .doctype,
25
+ pre .lisp .string,
26
+ pre .javadoc {
27
+ color: #969896;
28
+ font-style: italic;
29
+ }
30
+
31
+ pre .keyword,
32
+ pre .clojure .attribute,
33
+ pre .winutils,
34
+ pre .javascript .title,
35
+ pre .addition,
36
+ pre .css .tag {
37
+ color: #cc99cc;
38
+ }
39
+
40
+ pre .number { color: #f99157; }
41
+
42
+ pre .command,
43
+ pre .string,
44
+ pre .tag .value,
45
+ pre .phpdoc,
46
+ pre .tex .formula,
47
+ pre .regexp,
48
+ pre .hexcolor {
49
+ color: #8abeb7;
50
+ }
51
+
52
+ pre .title,
53
+ pre .localvars,
54
+ pre .function .title,
55
+ pre .chunk,
56
+ pre .decorator,
57
+ pre .built_in,
58
+ pre .lisp .title,
59
+ pre .identifier
60
+ {
61
+ color: #b5bd68;
62
+ }
63
+
64
+ pre .class .keyword
65
+ {
66
+ color: #f2777a;
67
+ }
68
+
69
+ pre .variable,
70
+ pre .lisp .body,
71
+ pre .smalltalk .number,
72
+ pre .constant,
73
+ pre .class .title,
74
+ pre .parent,
75
+ pre .haskell .label,
76
+ pre .id,
77
+ pre .lisp .title,
78
+ pre .clojure .title .built_in {
79
+ color: #ffcc66;
80
+ }
81
+
82
+ pre .tag .title,
83
+ pre .rules .property,
84
+ pre .django .tag .keyword,
85
+ pre .clojure .title .built_in {
86
+ font-weight: bold;
87
+ }
88
+
89
+ pre .attribute,
90
+ pre .clojure .title {
91
+ color: #81a2be;
92
+ }
93
+
94
+ pre .preprocessor,
95
+ pre .pragma,
96
+ pre .pi,
97
+ pre .shebang,
98
+ pre .symbol,
99
+ pre .symbol .string,
100
+ pre .diff .change,
101
+ pre .special,
102
+ pre .attr_selector,
103
+ pre .important,
104
+ pre .subst,
105
+ pre .cdata {
106
+ color: #f99157;
107
+ }
108
+
109
+ pre .deletion {
110
+ color: #dc322f;
111
+ }
112
+
113
+ pre .tex .formula {
114
+ background: #eee8d5;
115
+ }
skin/adminhtml/default/default/markdown/highlight/styles/school_book.css ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ School Book style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 15px 0.5em 0.5em 30px;
9
+ font-size: 11px !important;
10
+ line-height:16px !important;
11
+ }
12
+
13
+ pre{
14
+ background:#f6f6ae url(./school_book.png);
15
+ border-top: solid 2px #d2e8b9;
16
+ border-bottom: solid 1px #d2e8b9;
17
+ }
18
+
19
+ pre .keyword,
20
+ pre .literal,
21
+ pre .change,
22
+ pre .winutils,
23
+ pre .flow,
24
+ pre .lisp .title,
25
+ pre .clojure .built_in,
26
+ pre .nginx .title,
27
+ pre .tex .special {
28
+ color:#005599;
29
+ font-weight:bold;
30
+ }
31
+
32
+ pre code,
33
+ pre .subst,
34
+ pre .tag .keyword {
35
+ color: #3E5915;
36
+ }
37
+
38
+ pre .string,
39
+ pre .title,
40
+ pre .haskell .type,
41
+ pre .tag .value,
42
+ pre .css .rules .value,
43
+ pre .preprocessor,
44
+ pre .pragma,
45
+ pre .ruby .symbol,
46
+ pre .ruby .symbol .string,
47
+ pre .ruby .class .parent,
48
+ pre .built_in,
49
+ pre .sql .aggregate,
50
+ pre .django .template_tag,
51
+ pre .django .variable,
52
+ pre .smalltalk .class,
53
+ pre .javadoc,
54
+ pre .ruby .string,
55
+ pre .django .filter .argument,
56
+ pre .smalltalk .localvars,
57
+ pre .smalltalk .array,
58
+ pre .attr_selector,
59
+ pre .pseudo,
60
+ pre .addition,
61
+ pre .stream,
62
+ pre .envvar,
63
+ pre .apache .tag,
64
+ pre .apache .cbracket,
65
+ pre .nginx .built_in,
66
+ pre .tex .command,
67
+ pre .coffeescript .attribute {
68
+ color: #2C009F;
69
+ }
70
+
71
+ pre .comment,
72
+ pre .java .annotation,
73
+ pre .python .decorator,
74
+ pre .template_comment,
75
+ pre .pi,
76
+ pre .doctype,
77
+ pre .deletion,
78
+ pre .shebang,
79
+ pre .apache .sqbracket {
80
+ color: #E60415;
81
+ }
82
+
83
+ pre .keyword,
84
+ pre .literal,
85
+ pre .css .id,
86
+ pre .phpdoc,
87
+ pre .title,
88
+ pre .haskell .type,
89
+ pre .vbscript .built_in,
90
+ pre .sql .aggregate,
91
+ pre .rsl .built_in,
92
+ pre .smalltalk .class,
93
+ pre .xml .tag .title,
94
+ pre .diff .header,
95
+ pre .chunk,
96
+ pre .winutils,
97
+ pre .bash .variable,
98
+ pre .apache .tag,
99
+ pre .tex .command,
100
+ pre .request,
101
+ pre .status {
102
+ font-weight: bold;
103
+ }
104
+
105
+ pre .coffeescript .javascript,
106
+ pre .javascript .xml,
107
+ pre .tex .formula,
108
+ pre .xml .javascript,
109
+ pre .xml .vbscript,
110
+ pre .xml .css,
111
+ pre .xml .cdata {
112
+ opacity: 0.5;
113
+ }
skin/adminhtml/default/default/markdown/highlight/styles/solarized_dark.css ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ background: #002b36; color: #839496;
10
+ }
11
+
12
+ pre .comment,
13
+ pre .template_comment,
14
+ pre .diff .header,
15
+ pre .doctype,
16
+ pre .pi,
17
+ pre .lisp .string,
18
+ pre .javadoc {
19
+ color: #586e75;
20
+ font-style: italic;
21
+ }
22
+
23
+ pre .keyword,
24
+ pre .winutils,
25
+ pre .method,
26
+ pre .addition,
27
+ pre .css .tag,
28
+ pre .request,
29
+ pre .status,
30
+ pre .nginx .title {
31
+ color: #859900;
32
+ }
33
+
34
+ pre .number,
35
+ pre .command,
36
+ pre .string,
37
+ pre .tag .value,
38
+ pre .rules .value,
39
+ pre .phpdoc,
40
+ pre .tex .formula,
41
+ pre .regexp,
42
+ pre .hexcolor {
43
+ color: #2aa198;
44
+ }
45
+
46
+ pre .title,
47
+ pre .localvars,
48
+ pre .chunk,
49
+ pre .decorator,
50
+ pre .built_in,
51
+ pre .identifier,
52
+ pre .vhdl .literal,
53
+ pre .id,
54
+ pre .css .function {
55
+ color: #268bd2;
56
+ }
57
+
58
+ pre .attribute,
59
+ pre .variable,
60
+ pre .lisp .body,
61
+ pre .smalltalk .number,
62
+ pre .constant,
63
+ pre .class .title,
64
+ pre .parent,
65
+ pre .haskell .type {
66
+ color: #b58900;
67
+ }
68
+
69
+ pre .preprocessor,
70
+ pre .preprocessor .keyword,
71
+ pre .pragma,
72
+ pre .shebang,
73
+ pre .symbol,
74
+ pre .symbol .string,
75
+ pre .diff .change,
76
+ pre .special,
77
+ pre .attr_selector,
78
+ pre .important,
79
+ pre .subst,
80
+ pre .cdata,
81
+ pre .clojure .title,
82
+ pre .css .pseudo {
83
+ color: #cb4b16;
84
+ }
85
+
86
+ pre .deletion {
87
+ color: #dc322f;
88
+ }
89
+
90
+ pre .tex .formula {
91
+ background: #073642;
92
+ }
skin/adminhtml/default/default/markdown/highlight/styles/solarized_light.css ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ background: #fdf6e3; color: #657b83;
10
+ }
11
+
12
+ pre .comment,
13
+ pre .template_comment,
14
+ pre .diff .header,
15
+ pre .doctype,
16
+ pre .pi,
17
+ pre .lisp .string,
18
+ pre .javadoc {
19
+ color: #93a1a1;
20
+ font-style: italic;
21
+ }
22
+
23
+ pre .keyword,
24
+ pre .winutils,
25
+ pre .method,
26
+ pre .addition,
27
+ pre .css .tag,
28
+ pre .request,
29
+ pre .status,
30
+ pre .nginx .title {
31
+ color: #859900;
32
+ }
33
+
34
+ pre .number,
35
+ pre .command,
36
+ pre .string,
37
+ pre .tag .value,
38
+ pre .rules .value,
39
+ pre .phpdoc,
40
+ pre .tex .formula,
41
+ pre .regexp,
42
+ pre .hexcolor {
43
+ color: #2aa198;
44
+ }
45
+
46
+ pre .title,
47
+ pre .localvars,
48
+ pre .chunk,
49
+ pre .decorator,
50
+ pre .built_in,
51
+ pre .identifier,
52
+ pre .vhdl .literal,
53
+ pre .id,
54
+ pre .css .function {
55
+ color: #268bd2;
56
+ }
57
+
58
+ pre .attribute,
59
+ pre .variable,
60
+ pre .lisp .body,
61
+ pre .smalltalk .number,
62
+ pre .constant,
63
+ pre .class .title,
64
+ pre .parent,
65
+ pre .haskell .type {
66
+ color: #b58900;
67
+ }
68
+
69
+ pre .preprocessor,
70
+ pre .preprocessor .keyword,
71
+ pre .pragma,
72
+ pre .shebang,
73
+ pre .symbol,
74
+ pre .symbol .string,
75
+ pre .diff .change,
76
+ pre .special,
77
+ pre .attr_selector,
78
+ pre .important,
79
+ pre .subst,
80
+ pre .cdata,
81
+ pre .clojure .title,
82
+ pre .css .pseudo {
83
+ color: #cb4b16;
84
+ }
85
+
86
+ pre .deletion {
87
+ color: #dc322f;
88
+ }
89
+
90
+ pre .tex .formula {
91
+ background: #eee8d5;
92
+ }
skin/adminhtml/default/default/markdown/highlight/styles/sunburst.css ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Sunburst-like style (c) Vasily Polovnyov <vast@whiteants.net>
4
+
5
+ */
6
+
7
+ pre code {
8
+ display: block; padding: 0.5em;
9
+ background: #000; color: #f8f8f8;
10
+ }
11
+
12
+ pre .comment,
13
+ pre .template_comment,
14
+ pre .javadoc {
15
+ color: #aeaeae;
16
+ font-style: italic;
17
+ }
18
+
19
+ pre .keyword,
20
+ pre .ruby .function .keyword,
21
+ pre .request,
22
+ pre .status,
23
+ pre .nginx .title {
24
+ color: #E28964;
25
+ }
26
+
27
+ pre .function .keyword,
28
+ pre .sub .keyword,
29
+ pre .method,
30
+ pre .list .title {
31
+ color: #99CF50;
32
+ }
33
+
34
+ pre .string,
35
+ pre .tag .value,
36
+ pre .cdata,
37
+ pre .filter .argument,
38
+ pre .attr_selector,
39
+ pre .apache .cbracket,
40
+ pre .date,
41
+ pre .tex .command,
42
+ pre .coffeescript .attribute {
43
+ color: #65B042;
44
+ }
45
+
46
+ pre .subst {
47
+ color: #DAEFA3;
48
+ }
49
+
50
+ pre .regexp {
51
+ color: #E9C062;
52
+ }
53
+
54
+ pre .title,
55
+ pre .sub .identifier,
56
+ pre .pi,
57
+ pre .tag,
58
+ pre .tag .keyword,
59
+ pre .decorator,
60
+ pre .shebang,
61
+ pre .prompt {
62
+ color: #89BDFF;
63
+ }
64
+
65
+ pre .class .title,
66
+ pre .haskell .type,
67
+ pre .smalltalk .class,
68
+ pre .javadoctag,
69
+ pre .yardoctag,
70
+ pre .phpdoc {
71
+ text-decoration: underline;
72
+ }
73
+
74
+ pre .symbol,
75
+ pre .ruby .symbol .string,
76
+ pre .number {
77
+ color: #3387CC;
78
+ }
79
+
80
+ pre .params,
81
+ pre .variable,
82
+ pre .clojure .attribute {
83
+ color: #3E87E3;
84
+ }
85
+
86
+ pre .css .tag,
87
+ pre .rules .property,
88
+ pre .pseudo,
89
+ pre .tex .special {
90
+ color: #CDA869;
91
+ }
92
+
93
+ pre .css .class {
94
+ color: #9B703F;
95
+ }
96
+
97
+ pre .rules .keyword {
98
+ color: #C5AF75;
99
+ }
100
+
101
+ pre .rules .value {
102
+ color: #CF6A4C;
103
+ }
104
+
105
+ pre .css .id {
106
+ color: #8B98AB;
107
+ }
108
+
109
+ pre .annotation,
110
+ pre .apache .sqbracket,
111
+ pre .nginx .built_in {
112
+ color: #9B859D;
113
+ }
114
+
115
+ pre .preprocessor,
116
+ pre .pragma {
117
+ color: #8996A8;
118
+ }
119
+
120
+ pre .hexcolor,
121
+ pre .css .value .number {
122
+ color: #DD7B3B;
123
+ }
124
+
125
+ pre .css .function {
126
+ color: #DAD085;
127
+ }
128
+
129
+ pre .diff .header,
130
+ pre .chunk,
131
+ pre .tex .formula {
132
+ background-color: #0E2231;
133
+ color: #F8F8F8;
134
+ font-style: italic;
135
+ }
136
+
137
+ pre .diff .change {
138
+ background-color: #4A410D;
139
+ color: #F8F8F8;
140
+ }
141
+
142
+ pre .addition {
143
+ background-color: #253B22;
144
+ color: #F8F8F8;
145
+ }
146
+
147
+ pre .deletion {
148
+ background-color: #420E09;
149
+ color: #F8F8F8;
150
+ }
151
+
152
+ pre .coffeescript .javascript,
153
+ pre .javascript .xml,
154
+ pre .tex .formula,
155
+ pre .xml .javascript,
156
+ pre .xml .vbscript,
157
+ pre .xml .css,
158
+ pre .xml .cdata {
159
+ opacity: 0.5;
160
+ }
skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night-blue.css ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Tomorrow Night Blue Theme */
2
+ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
3
+ /* Original theme - https://github.com/chriskempson/tomorrow-theme */
4
+ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
5
+ .tomorrow-comment, pre .comment, pre .title {
6
+ color: #7285b7;
7
+ }
8
+
9
+ .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo {
10
+ color: #ff9da4;
11
+ }
12
+
13
+ .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant {
14
+ color: #ffc58f;
15
+ }
16
+
17
+ .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute {
18
+ color: #ffeead;
19
+ }
20
+
21
+ .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata {
22
+ color: #d1f1a9;
23
+ }
24
+
25
+ .tomorrow-aqua, pre .css .hexcolor {
26
+ color: #99ffff;
27
+ }
28
+
29
+ .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title {
30
+ color: #bbdaff;
31
+ }
32
+
33
+ .tomorrow-purple, pre .keyword, pre .javascript .function {
34
+ color: #ebbbff;
35
+ }
36
+
37
+ pre code {
38
+ display: block;
39
+ background: #002451;
40
+ color: white;
41
+ padding: 0.5em;
42
+ }
43
+
44
+ pre .coffeescript .javascript,
45
+ pre .javascript .xml,
46
+ pre .tex .formula,
47
+ pre .xml .javascript,
48
+ pre .xml .vbscript,
49
+ pre .xml .css,
50
+ pre .xml .cdata {
51
+ opacity: 0.5;
52
+ }
skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night-bright.css ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Tomorrow Night Bright Theme */
2
+ /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3
+ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
4
+ .tomorrow-comment, pre .comment, pre .title {
5
+ color: #969896;
6
+ }
7
+
8
+ .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo {
9
+ color: #d54e53;
10
+ }
11
+
12
+ .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant {
13
+ color: #e78c45;
14
+ }
15
+
16
+ .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute {
17
+ color: #e7c547;
18
+ }
19
+
20
+ .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata {
21
+ color: #b9ca4a;
22
+ }
23
+
24
+ .tomorrow-aqua, pre .css .hexcolor {
25
+ color: #70c0b1;
26
+ }
27
+
28
+ .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title {
29
+ color: #7aa6da;
30
+ }
31
+
32
+ .tomorrow-purple, pre .keyword, pre .javascript .function {
33
+ color: #c397d8;
34
+ }
35
+
36
+ pre code {
37
+ display: block;
38
+ background: black;
39
+ color: #eaeaea;
40
+ padding: 0.5em;
41
+ }
42
+
43
+ pre .coffeescript .javascript,
44
+ pre .javascript .xml,
45
+ pre .tex .formula,
46
+ pre .xml .javascript,
47
+ pre .xml .vbscript,
48
+ pre .xml .css,
49
+ pre .xml .cdata {
50
+ opacity: 0.5;
51
+ }
skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night-eighties.css ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Tomorrow Night Eighties Theme */
2
+ /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3
+ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
4
+ .tomorrow-comment, pre .comment, pre .title {
5
+ color: #999999;
6
+ }
7
+
8
+ .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo {
9
+ color: #f2777a;
10
+ }
11
+
12
+ .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant {
13
+ color: #f99157;
14
+ }
15
+
16
+ .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute {
17
+ color: #ffcc66;
18
+ }
19
+
20
+ .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata {
21
+ color: #99cc99;
22
+ }
23
+
24
+ .tomorrow-aqua, pre .css .hexcolor {
25
+ color: #66cccc;
26
+ }
27
+
28
+ .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title {
29
+ color: #6699cc;
30
+ }
31
+
32
+ .tomorrow-purple, pre .keyword, pre .javascript .function {
33
+ color: #cc99cc;
34
+ }
35
+
36
+ pre code {
37
+ display: block;
38
+ background: #2d2d2d;
39
+ color: #cccccc;
40
+ padding: 0.5em;
41
+ }
42
+
43
+ pre .coffeescript .javascript,
44
+ pre .javascript .xml,
45
+ pre .tex .formula,
46
+ pre .xml .javascript,
47
+ pre .xml .vbscript,
48
+ pre .xml .css,
49
+ pre .xml .cdata {
50
+ opacity: 0.5;
51
+ }
skin/adminhtml/default/default/markdown/highlight/styles/tomorrow-night.css ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Tomorrow Night Theme */
2
+ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
3
+ /* Original theme - https://github.com/chriskempson/tomorrow-theme */
4
+ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
5
+ .tomorrow-comment, pre .comment, pre .title {
6
+ color: #969896;
7
+ }
8
+
9
+ .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo {
10
+ color: #cc6666;
11
+ }
12
+
13
+ .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant {
14
+ color: #de935f;
15
+ }
16
+
17
+ .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute {
18
+ color: #f0c674;
19
+ }
20
+
21
+ .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata {
22
+ color: #b5bd68;
23
+ }
24
+
25
+ .tomorrow-aqua, pre .css .hexcolor {
26
+ color: #8abeb7;
27
+ }
28
+
29
+ .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title {
30
+ color: #81a2be;
31
+ }
32
+
33
+ .tomorrow-purple, pre .keyword, pre .javascript .function {
34
+ color: #b294bb;
35
+ }
36
+
37
+ pre code {
38
+ display: block;
39
+ background: #1d1f21;
40
+ color: #c5c8c6;
41
+ padding: 0.5em;
42
+ }
43
+
44
+ pre .coffeescript .javascript,
45
+ pre .javascript .xml,
46
+ pre .tex .formula,
47
+ pre .xml .javascript,
48
+ pre .xml .vbscript,
49
+ pre .xml .css,
50
+ pre .xml .cdata {
51
+ opacity: 0.5;
52
+ }
skin/adminhtml/default/default/markdown/highlight/styles/tomorrow.css ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
2
+ .tomorrow-comment, pre .comment, pre .title {
3
+ color: #8e908c;
4
+ }
5
+
6
+ .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo {
7
+ color: #c82829;
8
+ }
9
+
10
+ .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant {
11
+ color: #f5871f;
12
+ }
13
+
14
+ .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute {
15
+ color: #eab700;
16
+ }
17
+
18
+ .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata {
19
+ color: #718c00;
20
+ }
21
+
22
+ .tomorrow-aqua, pre .css .hexcolor {
23
+ color: #3e999f;
24
+ }
25
+
26
+ .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title {
27
+ color: #4271ae;
28
+ }
29
+
30
+ .tomorrow-purple, pre .keyword, pre .javascript .function {
31
+ color: #8959a8;
32
+ }
33
+
34
+ pre code {
35
+ display: block;
36
+ background: white;
37
+ color: #4d4d4c;
38
+ padding: 0.5em;
39
+ }
40
+
41
+ pre .coffeescript .javascript,
42
+ pre .javascript .xml,
43
+ pre .tex .formula,
44
+ pre .xml .javascript,
45
+ pre .xml .vbscript,
46
+ pre .xml .css,
47
+ pre .xml .cdata {
48
+ opacity: 0.5;
49
+ }
skin/adminhtml/default/default/markdown/highlight/styles/vs.css ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Visual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name>
4
+
5
+ */
6
+ pre code {
7
+ display: block; padding: 0.5em;
8
+ background: white; color: black;
9
+ }
10
+
11
+ pre .comment,
12
+ pre .annotation,
13
+ pre .template_comment,
14
+ pre .diff .header,
15
+ pre .chunk,
16
+ pre .apache .cbracket {
17
+ color: rgb(0, 128, 0);
18
+ }
19
+
20
+ pre .keyword,
21
+ pre .id,
22
+ pre .built_in,
23
+ pre .smalltalk .class,
24
+ pre .winutils,
25
+ pre .bash .variable,
26
+ pre .tex .command,
27
+ pre .request,
28
+ pre .status,
29
+ pre .nginx .title,
30
+ pre .xml .tag,
31
+ pre .xml .tag .value {
32
+ color: rgb(0, 0, 255);
33
+ }
34
+
35
+ pre .string,
36
+ pre .title,
37
+ pre .parent,
38
+ pre .tag .value,
39
+ pre .rules .value,
40
+ pre .rules .value .number,
41
+ pre .ruby .symbol,
42
+ pre .ruby .symbol .string,
43
+ pre .aggregate,
44
+ pre .template_tag,
45
+ pre .django .variable,
46
+ pre .addition,
47
+ pre .flow,
48
+ pre .stream,
49
+ pre .apache .tag,
50
+ pre .date,
51
+ pre .tex .formula,
52
+ pre .coffeescript .attribute {
53
+ color: rgb(163, 21, 21);
54
+ }
55
+
56
+ pre .ruby .string,
57
+ pre .decorator,
58
+ pre .filter .argument,
59
+ pre .localvars,
60
+ pre .array,
61
+ pre .attr_selector,
62
+ pre .pseudo,
63
+ pre .pi,
64
+ pre .doctype,
65
+ pre .deletion,
66
+ pre .envvar,
67
+ pre .shebang,
68
+ pre .preprocessor,
69
+ pre .pragma,
70
+ pre .userType,
71
+ pre .apache .sqbracket,
72
+ pre .nginx .built_in,
73
+ pre .tex .special,
74
+ pre .prompt {
75
+ color: rgb(43, 145, 175);
76
+ }
77
+
78
+ pre .phpdoc,
79
+ pre .javadoc,
80
+ pre .xmlDocTag {
81
+ color: rgb(128, 128, 128);
82
+ }
83
+
84
+ pre .vhdl .typename { font-weight: bold; }
85
+ pre .vhdl .string { color: #666666; }
86
+ pre .vhdl .literal { color: rgb(163, 21, 21); }
87
+ pre .vhdl .attribute { color: #00B0E8; }
88
+
89
+ pre .xml .attribute { color: rgb(255, 0, 0); }
{js/markdown/adminhtml → skin/adminhtml/default/default/markdown}/highlight/styles/xcode.css RENAMED
@@ -67,7 +67,9 @@ pre .symbol .string,
67
  pre .number,
68
  pre .css .function,
69
  pre .clojure .title,
70
- pre .clojure .built_in {
 
 
71
  color: rgb(28,0,207);
72
  }
73
 
@@ -118,7 +120,8 @@ pre .nginx .built_in {
118
  }
119
 
120
  pre .preprocessor,
121
- pre .preprocessor * {
 
122
  color: rgb(100,56,32);
123
  }
124
 
67
  pre .number,
68
  pre .css .function,
69
  pre .clojure .title,
70
+ pre .clojure .built_in,
71
+ pre .function .title,
72
+ pre .coffeescript .attribute {
73
  color: rgb(28,0,207);
74
  }
75
 
120
  }
121
 
122
  pre .preprocessor,
123
+ pre .preprocessor *,
124
+ pre .pragma {
125
  color: rgb(100,56,32);
126
  }
127
 
skin/adminhtml/default/default/markdown/highlight/styles/zenburn.css ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ Zenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>
4
+ based on dark.css by Ivan Sagalaev
5
+
6
+ */
7
+
8
+ pre code {
9
+ display: block; padding: 0.5em;
10
+ background: #3F3F3F;
11
+ color: #DCDCDC;
12
+ }
13
+
14
+ pre .keyword,
15
+ pre .tag,
16
+ pre .css .class,
17
+ pre .css .id,
18
+ pre .lisp .title,
19
+ pre .nginx .title,
20
+ pre .request,
21
+ pre .status,
22
+ pre .clojure .attribute {
23
+ color: #E3CEAB;
24
+ }
25
+
26
+ pre .django .template_tag,
27
+ pre .django .variable,
28
+ pre .django .filter .argument {
29
+ color: #DCDCDC;
30
+ }
31
+
32
+ pre .number,
33
+ pre .date {
34
+ color: #8CD0D3;
35
+ }
36
+
37
+ pre .dos .envvar,
38
+ pre .dos .stream,
39
+ pre .variable,
40
+ pre .apache .sqbracket {
41
+ color: #EFDCBC;
42
+ }
43
+
44
+ pre .dos .flow,
45
+ pre .diff .change,
46
+ pre .python .exception,
47
+ pre .python .built_in,
48
+ pre .literal,
49
+ pre .tex .special {
50
+ color: #EFEFAF;
51
+ }
52
+
53
+ pre .diff .chunk,
54
+ pre .subst {
55
+ color: #8F8F8F;
56
+ }
57
+
58
+ pre .dos .keyword,
59
+ pre .python .decorator,
60
+ pre .title,
61
+ pre .haskell .type,
62
+ pre .diff .header,
63
+ pre .ruby .class .parent,
64
+ pre .apache .tag,
65
+ pre .nginx .built_in,
66
+ pre .tex .command,
67
+ pre .prompt {
68
+ color: #efef8f;
69
+ }
70
+
71
+ pre .dos .winutils,
72
+ pre .ruby .symbol,
73
+ pre .ruby .symbol .string,
74
+ pre .ruby .string {
75
+ color: #DCA3A3;
76
+ }
77
+
78
+ pre .diff .deletion,
79
+ pre .string,
80
+ pre .tag .value,
81
+ pre .preprocessor,
82
+ pre .pragma,
83
+ pre .built_in,
84
+ pre .sql .aggregate,
85
+ pre .javadoc,
86
+ pre .smalltalk .class,
87
+ pre .smalltalk .localvars,
88
+ pre .smalltalk .array,
89
+ pre .css .rules .value,
90
+ pre .attr_selector,
91
+ pre .pseudo,
92
+ pre .apache .cbracket,
93
+ pre .tex .formula,
94
+ pre .coffeescript .attribute {
95
+ color: #CC9393;
96
+ }
97
+
98
+ pre .shebang,
99
+ pre .diff .addition,
100
+ pre .comment,
101
+ pre .java .annotation,
102
+ pre .template_comment,
103
+ pre .pi,
104
+ pre .doctype {
105
+ color: #7F9F7F;
106
+ }
107
+
108
+ pre .coffeescript .javascript,
109
+ pre .javascript .xml,
110
+ pre .tex .formula,
111
+ pre .xml .javascript,
112
+ pre .xml .vbscript,
113
+ pre .xml .css,
114
+ pre .xml .cdata {
115
+ opacity: 0.5;
116
+ }
117
+
skin/adminhtml/default/default/markdown/mdm.css CHANGED
@@ -1,6 +1,134 @@
1
  /**
2
  Magento Markdown Module CSS
3
  */
4
- .fReaderDrag {
5
- border : 5px solid darkseagreen;
6
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /**
2
  Magento Markdown Module CSS
3
  */
4
+ textarea.initMarkdown {
5
+ resize : vertical;
6
+ padding : 5px;
7
+ display : block;
8
+ }
9
+
10
+ textarea.initMarkdown:focus {
11
+ border-color : #51a7e8;
12
+ box-shadow : inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(81, 167, 232, 0.5);
13
+ }
14
+
15
+ textarea.initMarkdown.fReaderDrag {
16
+ box-shadow : #c9ff00 0 0 3px;
17
+ }
18
+
19
+ /*<second design of the textarea>*/
20
+ textarea.initMarkdown.lucida {
21
+ color : #666;
22
+ font-size : 14px;
23
+ border-radius : 8px;
24
+ -moz-border-radius : 8px;
25
+ -webkit-border-radius : 8px;
26
+ margin : 5px 0px 10px 0px;
27
+ padding : 10px;
28
+ border : #999 1px solid;
29
+ font-family : "Lucida Sans Unicode", "Lucida Grande", sans-serif;
30
+ transition : all 0.25s ease-in-out;
31
+ -moz-transition : all 0.25s ease-in-out;
32
+ -webkit-transition : all 0.25s ease-in-out;
33
+ box-shadow : 0 0 5px rgba(81, 203, 238, 0);
34
+ -moz-box-shadow : 0 0 5px rgba(81, 203, 238, 0);
35
+ -webkit-box-shadow : 0 0 5px rgba(81, 203, 238, 0);
36
+ resize : vertical;
37
+ display : block;
38
+ }
39
+
40
+ textarea.initMarkdown.lucida:focus {
41
+ color : #000;
42
+ outline : none;
43
+ border : #35a5e5 1px solid;
44
+ font-family : "Lucida Sans Unicode", "Lucida Grande", sans-serif;
45
+ box-shadow : 0 0 5px rgba(81, 203, 238, 1);
46
+ -moz-box-shadow : 0 0 5px rgba(81, 203, 238, 1);
47
+ -webkit-box-shadow : 0 0 5px rgba(81, 203, 238, 1);
48
+ }
49
+
50
+ textarea.initMarkdown.lucida.fReaderDrag {
51
+ color : #000;
52
+ outline : none;
53
+ border : #228b22 1px solid;
54
+ font-family : "Lucida Sans Unicode", "Lucida Grande", sans-serif;
55
+ box-shadow : 0 0 5px rgb(34, 139, 34) !important;
56
+ -moz-box-shadow : 0 0 5px rgb(34, 139, 34) !important;
57
+ -webkit-box-shadow : 0 0 5px rgb(34, 139, 34) !important;
58
+ }
59
+ /*</second design of the textarea>*/
60
+
61
+ .md-manual-file-chooser {
62
+ position : absolute;
63
+ width : 154px;
64
+ margin-left : -70px;
65
+ opacity : 0.0001;
66
+ cursor : pointer;
67
+ }
68
+
69
+ .mdTabContainer {
70
+ }
71
+
72
+ .mdTabContainer .tabs-horiz {
73
+ margin-bottom : 10px;
74
+ }
75
+
76
+ .mdTabContainer .tabs-horiz li {
77
+ margin : 0 4px;
78
+ }
79
+
80
+ .mdTabContainer .mdTextArea {
81
+ margin-top : 10px;
82
+ margin-bottom : 5px;
83
+ }
84
+
85
+ .md-filereader-text {
86
+ margin-top : 2px;
87
+ width : inherit !important;
88
+ }
89
+
90
+ .mdTabscontent {
91
+ }
92
+
93
+ .mdTabpage {
94
+ display : none;
95
+ }
96
+
97
+ .mdTabpage.active {
98
+ display : block;
99
+ }
100
+
101
+ .mdTabpage button {
102
+ margin-right : 5px;
103
+ }
104
+
105
+ .mdTabs > ul > li.active {
106
+ background : white; /* old browsers */
107
+ cursor : pointer;
108
+ color : #333;
109
+ font-weight : bold;
110
+ border-bottom-color : rgb(250, 250, 250);
111
+ }
112
+
113
+ .mdTabpage .iframePreview {
114
+ background-color : white;
115
+ width : 100%;
116
+ height : 40em;
117
+ border : 1px solid #ddd;
118
+ }
119
+
120
+ .mdTabpage .previewStores li {
121
+ display : inline;
122
+ padding-right : 1em;
123
+ }
124
+
125
+ .mdParserInfo {
126
+ float : right;
127
+ margin-top : 1px;
128
+ font-size : 11px;
129
+ margin-right : 6px;
130
+ }
131
+
132
+ .md-parser-info a {
133
+ cursor : help;
134
+ }
skin/adminhtml/default/default/markdown/styles/github.css ADDED
@@ -0,0 +1,389 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*https://gist.github.com/tuzz/3331384*/
2
+ body {
3
+ font-family : Helvetica, arial, sans-serif;
4
+ font-size : 14px;
5
+ line-height : 1.6;
6
+ padding-top : 10px;
7
+ padding-bottom : 10px;
8
+ background-color : white;
9
+ padding : 30px;
10
+ color : #333;
11
+ }
12
+
13
+ body > *:first-child {
14
+ margin-top : 0 !important;
15
+ }
16
+
17
+ body > *:last-child {
18
+ margin-bottom : 0 !important;
19
+ }
20
+
21
+ a {
22
+ color : #4183C4;
23
+ text-decoration : none;
24
+ }
25
+
26
+ a.absent {
27
+ color : #cc0000;
28
+ }
29
+
30
+ a.anchor {
31
+ display : block;
32
+ padding-left : 30px;
33
+ margin-left : -30px;
34
+ cursor : pointer;
35
+ position : absolute;
36
+ top : 0;
37
+ left : 0;
38
+ bottom : 0;
39
+ }
40
+
41
+ h1, h2, h3, h4, h5, h6 {
42
+ margin : 20px 0 10px;
43
+ padding : 0;
44
+ font-weight : bold;
45
+ -webkit-font-smoothing : antialiased;
46
+ cursor : text;
47
+ position : relative;
48
+ }
49
+
50
+ h2:first-child, h1:first-child, h1:first-child + h2, h3:first-child, h4:first-child, h5:first-child, h6:first-child {
51
+ margin-top : 0;
52
+ padding-top : 0;
53
+ }
54
+
55
+ h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
56
+ text-decoration : none;
57
+ }
58
+
59
+ h1 tt, h1 code {
60
+ font-size : inherit;
61
+ }
62
+
63
+ h2 tt, h2 code {
64
+ font-size : inherit;
65
+ }
66
+
67
+ h3 tt, h3 code {
68
+ font-size : inherit;
69
+ }
70
+
71
+ h4 tt, h4 code {
72
+ font-size : inherit;
73
+ }
74
+
75
+ h5 tt, h5 code {
76
+ font-size : inherit;
77
+ }
78
+
79
+ h6 tt, h6 code {
80
+ font-size : inherit;
81
+ }
82
+
83
+ h1 {
84
+ font-size : 28px;
85
+ color : black;
86
+ }
87
+
88
+ h2 {
89
+ font-size : 24px;
90
+ border-bottom : 1px solid #cccccc;
91
+ color : black;
92
+ }
93
+
94
+ h3 {
95
+ font-size : 18px;
96
+ }
97
+
98
+ h4 {
99
+ font-size : 16px;
100
+ }
101
+
102
+ h5 {
103
+ font-size : 14px;
104
+ }
105
+
106
+ h6 {
107
+ color : #777777;
108
+ font-size : 14px;
109
+ }
110
+
111
+ p, blockquote, ul, ol, dl, li, table, pre {
112
+ margin : 15px 0;
113
+ }
114
+
115
+ hr {
116
+ /*background : transparent url("http://tinyurl.com/bq5kskr") repeat-x 0 0;*/
117
+ border : 0 none;
118
+ color : #cccccc;
119
+ height : 4px;
120
+ padding : 0;
121
+ }
122
+
123
+ body > h2:first-child {
124
+ margin-top : 0;
125
+ padding-top : 0;
126
+ }
127
+
128
+ body > h1:first-child {
129
+ margin-top : 0;
130
+ padding-top : 0;
131
+ }
132
+
133
+ body > h1:first-child + h2 {
134
+ margin-top : 0;
135
+ padding-top : 0;
136
+ }
137
+
138
+ body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
139
+ margin-top : 0;
140
+ padding-top : 0;
141
+ }
142
+
143
+ a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
144
+ margin-top : 0;
145
+ padding-top : 0;
146
+ }
147
+
148
+ h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
149
+ margin-top : 0;
150
+ }
151
+
152
+ li p.first {
153
+ display : inline-block;
154
+ }
155
+
156
+ ul, ol {
157
+ padding-left : 30px;
158
+ }
159
+
160
+ ul :first-child, ol :first-child {
161
+ margin-top : 0;
162
+ }
163
+
164
+ ul :last-child, ol :last-child {
165
+ margin-bottom : 0;
166
+ }
167
+
168
+ dl {
169
+ padding : 0;
170
+ }
171
+
172
+ dl dt {
173
+ font-size : 14px;
174
+ font-weight : bold;
175
+ font-style : italic;
176
+ padding : 0;
177
+ margin : 15px 0 5px;
178
+ }
179
+
180
+ dl dt:first-child {
181
+ padding : 0;
182
+ }
183
+
184
+ dl dt > :first-child {
185
+ margin-top : 0;
186
+ }
187
+
188
+ dl dt > :last-child {
189
+ margin-bottom : 0;
190
+ }
191
+
192
+ dl dd {
193
+ margin : 0 0 15px;
194
+ padding : 0 15px;
195
+ }
196
+
197
+ dl dd > :first-child {
198
+ margin-top : 0;
199
+ }
200
+
201
+ dl dd > :last-child {
202
+ margin-bottom : 0;
203
+ }
204
+
205
+ blockquote {
206
+ border-left : 4px solid #dddddd;
207
+ padding : 0 15px;
208
+ color : #777777;
209
+ }
210
+
211
+ blockquote > :first-child {
212
+ margin-top : 0;
213
+ }
214
+
215
+ blockquote > :last-child {
216
+ margin-bottom : 0;
217
+ }
218
+
219
+ table {
220
+ padding : 0;
221
+ }
222
+
223
+ table tr {
224
+ border-top : 1px solid #cccccc;
225
+ background-color : white;
226
+ margin : 0;
227
+ padding : 0;
228
+ }
229
+
230
+ table tr:nth-child(2n) {
231
+ background-color : #f8f8f8;
232
+ }
233
+
234
+ table tr th {
235
+ font-weight : bold;
236
+ border : 1px solid #cccccc;
237
+ text-align : left;
238
+ margin : 0;
239
+ padding : 6px 13px;
240
+ }
241
+
242
+ table tr td {
243
+ border : 1px solid #cccccc;
244
+ text-align : left;
245
+ margin : 0;
246
+ padding : 6px 13px;
247
+ }
248
+
249
+ table tr th :first-child, table tr td :first-child {
250
+ margin-top : 0;
251
+ }
252
+
253
+ table tr th :last-child, table tr td :last-child {
254
+ margin-bottom : 0;
255
+ }
256
+
257
+ img {
258
+ max-width : 100%;
259
+ }
260
+
261
+ span.frame {
262
+ display : block;
263
+ overflow : hidden;
264
+ }
265
+
266
+ span.frame > span {
267
+ border : 1px solid #dddddd;
268
+ display : block;
269
+ float : left;
270
+ overflow : hidden;
271
+ margin : 13px 0 0;
272
+ padding : 7px;
273
+ width : auto;
274
+ }
275
+
276
+ span.frame span img {
277
+ display : block;
278
+ float : left;
279
+ }
280
+
281
+ span.frame span span {
282
+ clear : both;
283
+ color : #333333;
284
+ display : block;
285
+ padding : 5px 0 0;
286
+ }
287
+
288
+ span.align-center {
289
+ display : block;
290
+ overflow : hidden;
291
+ clear : both;
292
+ }
293
+
294
+ span.align-center > span {
295
+ display : block;
296
+ overflow : hidden;
297
+ margin : 13px auto 0;
298
+ text-align : center;
299
+ }
300
+
301
+ span.align-center span img {
302
+ margin : 0 auto;
303
+ text-align : center;
304
+ }
305
+
306
+ span.align-right {
307
+ display : block;
308
+ overflow : hidden;
309
+ clear : both;
310
+ }
311
+
312
+ span.align-right > span {
313
+ display : block;
314
+ overflow : hidden;
315
+ margin : 13px 0 0;
316
+ text-align : right;
317
+ }
318
+
319
+ span.align-right span img {
320
+ margin : 0;
321
+ text-align : right;
322
+ }
323
+
324
+ span.float-left {
325
+ display : block;
326
+ margin-right : 13px;
327
+ overflow : hidden;
328
+ float : left;
329
+ }
330
+
331
+ span.float-left span {
332
+ margin : 13px 0 0;
333
+ }
334
+
335
+ span.float-right {
336
+ display : block;
337
+ margin-left : 13px;
338
+ overflow : hidden;
339
+ float : right;
340
+ }
341
+
342
+ span.float-right > span {
343
+ display : block;
344
+ overflow : hidden;
345
+ margin : 13px auto 0;
346
+ text-align : right;
347
+ }
348
+
349
+ code, tt {
350
+ margin : 0 2px;
351
+ padding : 0 5px;
352
+ white-space : nowrap;
353
+ border : 1px solid #eaeaea;
354
+ background-color : #f8f8f8;
355
+ border-radius : 3px;
356
+ }
357
+
358
+ pre code {
359
+ margin : 0;
360
+ padding : 0;
361
+ white-space : pre;
362
+ border : none;
363
+ background : transparent;
364
+ }
365
+
366
+ .highlight pre {
367
+ background-color : #f8f8f8;
368
+ border : 1px solid #cccccc;
369
+ font-size : 13px;
370
+ line-height : 19px;
371
+ overflow : auto;
372
+ padding : 6px 10px;
373
+ border-radius : 3px;
374
+ }
375
+
376
+ pre {
377
+ background-color : #f8f8f8;
378
+ border : 1px solid #cccccc;
379
+ font-size : 13px;
380
+ line-height : 19px;
381
+ overflow : auto;
382
+ padding : 6px 10px;
383
+ border-radius : 3px;
384
+ }
385
+
386
+ pre code, pre tt {
387
+ background-color : transparent;
388
+ border : none;
389
+ }
skin/adminhtml/default/default/markdown/styles/jasonm23-dark.css ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body{
2
+ background: #000;
3
+ font-family: Georgia, Palatino, serif;
4
+ color: #EEE;
5
+ line-height: 1;
6
+ padding: 30px;
7
+ margin:auto;
8
+ max-width:42em;
9
+ }
10
+ h1, h2, h3, h4 {
11
+ font-weight: 400;
12
+ }
13
+ h1, h2, h3, h4, h5, p {
14
+ margin-bottom: 24px;
15
+ padding: 0;
16
+ }
17
+ h1 {
18
+ font-size: 48px;
19
+ }
20
+ h2 {
21
+ font-size: 36px;
22
+ margin: 24px 0 6px;
23
+ }
24
+ h3 {
25
+ font-size: 24px;
26
+ }
27
+ h4 {
28
+ font-size: 21px;
29
+ }
30
+ h5 {
31
+ font-size: 18px;
32
+ }
33
+ a {
34
+ color: #61BFC1;
35
+ margin: 0;
36
+ padding: 0;
37
+ text-decoration: none;
38
+ vertical-align: baseline;
39
+ }
40
+ a:hover {
41
+ text-decoration: underline;
42
+ }
43
+ a:visited {
44
+ color: #466B6C;
45
+ }
46
+ ul, ol {
47
+ padding: 0;
48
+ margin: 0;
49
+ }
50
+ li {
51
+ line-height: 24px;
52
+ }
53
+ li ul, li ul {
54
+ margin-left: 24px;
55
+ }
56
+ p, ul, ol {
57
+ font-size: 16px;
58
+ line-height: 24px;
59
+ max-width: 540px;
60
+ }
61
+ pre {
62
+ padding: 0px 24px;
63
+ max-width: 800px;
64
+ white-space: pre-wrap;
65
+ }
66
+ code {
67
+ font-family: Consolas, Monaco, Andale Mono, monospace;
68
+ line-height: 1.5;
69
+ font-size: 13px;
70
+ }
71
+ aside {
72
+ display: block;
73
+ float: right;
74
+ width: 390px;
75
+ }
76
+ blockquote {
77
+ border-left:.5em solid #eee;
78
+ padding: 0 2em;
79
+ margin-left:0;
80
+ max-width: 476px;
81
+ }
82
+ blockquote cite {
83
+ font-size:14px;
84
+ line-height:20px;
85
+ color:#bfbfbf;
86
+ }
87
+ blockquote cite:before {
88
+ content: '\2014 \00A0';
89
+ }
90
+
91
+ blockquote p {
92
+ color: #666;
93
+ max-width: 460px;
94
+ }
95
+ hr {
96
+ width: 540px;
97
+ text-align: left;
98
+ margin: 0 auto 0 0;
99
+ color: #999;
100
+ }
101
+
102
+ /* Code below this line is copyright Twitter Inc. */
103
+
104
+ button,
105
+ input,
106
+ select,
107
+ textarea {
108
+ font-size: 100%;
109
+ margin: 0;
110
+ vertical-align: baseline;
111
+ *vertical-align: middle;
112
+ }
113
+ button, input {
114
+ line-height: normal;
115
+ *overflow: visible;
116
+ }
117
+ button::-moz-focus-inner, input::-moz-focus-inner {
118
+ border: 0;
119
+ padding: 0;
120
+ }
121
+ button,
122
+ input[type="button"],
123
+ input[type="reset"],
124
+ input[type="submit"] {
125
+ cursor: pointer;
126
+ -webkit-appearance: button;
127
+ }
128
+ input[type=checkbox], input[type=radio] {
129
+ cursor: pointer;
130
+ }
131
+ /* override default chrome & firefox settings */
132
+ input:not([type="image"]), textarea {
133
+ -webkit-box-sizing: content-box;
134
+ -moz-box-sizing: content-box;
135
+ box-sizing: content-box;
136
+ }
137
+
138
+ input[type="search"] {
139
+ -webkit-appearance: textfield;
140
+ -webkit-box-sizing: content-box;
141
+ -moz-box-sizing: content-box;
142
+ box-sizing: content-box;
143
+ }
144
+ input[type="search"]::-webkit-search-decoration {
145
+ -webkit-appearance: none;
146
+ }
147
+ label,
148
+ input,
149
+ select,
150
+ textarea {
151
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
152
+ font-size: 13px;
153
+ font-weight: normal;
154
+ line-height: normal;
155
+ margin-bottom: 18px;
156
+ }
157
+ input[type=checkbox], input[type=radio] {
158
+ cursor: pointer;
159
+ margin-bottom: 0;
160
+ }
161
+ input[type=text],
162
+ input[type=password],
163
+ textarea,
164
+ select {
165
+ display: inline-block;
166
+ width: 210px;
167
+ padding: 4px;
168
+ font-size: 13px;
169
+ font-weight: normal;
170
+ line-height: 18px;
171
+ height: 18px;
172
+ color: #808080;
173
+ border: 1px solid #ccc;
174
+ -webkit-border-radius: 3px;
175
+ -moz-border-radius: 3px;
176
+ border-radius: 3px;
177
+ }
178
+ select, input[type=file] {
179
+ height: 27px;
180
+ line-height: 27px;
181
+ }
182
+ textarea {
183
+ height: auto;
184
+ }
185
+
186
+ /* grey out placeholders */
187
+ :-moz-placeholder {
188
+ color: #bfbfbf;
189
+ }
190
+ ::-webkit-input-placeholder {
191
+ color: #bfbfbf;
192
+ }
193
+
194
+ input[type=text],
195
+ input[type=password],
196
+ select,
197
+ textarea {
198
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
199
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
200
+ transition: border linear 0.2s, box-shadow linear 0.2s;
201
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
202
+ -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
203
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
204
+ }
205
+ input[type=text]:focus, input[type=password]:focus, textarea:focus {
206
+ outline: none;
207
+ border-color: rgba(82, 168, 236, 0.8);
208
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
209
+ -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
210
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
211
+ }
212
+
213
+ /* buttons */
214
+ button {
215
+ display: inline-block;
216
+ padding: 4px 14px;
217
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
218
+ font-size: 13px;
219
+ line-height: 18px;
220
+ -webkit-border-radius: 4px;
221
+ -moz-border-radius: 4px;
222
+ border-radius: 4px;
223
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
224
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
225
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
226
+ background-color: #0064cd;
227
+ background-repeat: repeat-x;
228
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
229
+ background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
230
+ background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
231
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
232
+ background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
233
+ background-image: -o-linear-gradient(top, #049cdb, #0064cd);
234
+ background-image: linear-gradient(top, #049cdb, #0064cd);
235
+ color: #fff;
236
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
237
+ border: 1px solid #004b9a;
238
+ border-bottom-color: #003f81;
239
+ -webkit-transition: 0.1s linear all;
240
+ -moz-transition: 0.1s linear all;
241
+ transition: 0.1s linear all;
242
+ border-color: #0064cd #0064cd #003f81;
243
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
244
+ }
245
+ button:hover {
246
+ color: #fff;
247
+ background-position: 0 -15px;
248
+ text-decoration: none;
249
+ }
250
+ button:active {
251
+ -webkit-box-shadow: inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
252
+ -moz-box-shadow: inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
253
+ box-shadow: inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
254
+ }
255
+ button::-moz-focus-inner {
256
+ padding: 0;
257
+ border: 0;
258
+ }
skin/adminhtml/default/default/markdown/styles/jasonm23-foghorn.css ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url(//fonts.googleapis.com/css?family=Vollkorn:400,400italic,700,700italic&subset=latin);
2
+
3
+ html, body {
4
+ padding:1em;
5
+ margin:auto;
6
+ max-width:42em;
7
+ background:#fefefe;
8
+ }
9
+ body {
10
+ font: 1.3em "Vollkorn", Palatino, Times;
11
+ color: #333;
12
+ line-height: 1.4;
13
+ text-align: justify;
14
+ }
15
+ header, nav, article, footer {
16
+ width: 700px;
17
+ margin:0 auto;
18
+ }
19
+ article {
20
+ margin-top: 4em;
21
+ margin-bottom: 4em;
22
+ min-height: 400px;
23
+ }
24
+ footer {
25
+ margin-bottom:50px;
26
+ }
27
+ video {
28
+ margin: 2em 0;
29
+ border:1px solid #ddd;
30
+ }
31
+
32
+ nav {
33
+ font-size: .9em;
34
+ font-style: italic;
35
+ border-bottom: 1px solid #ddd;
36
+ padding: 1em 0;
37
+ }
38
+ nav p {
39
+ margin: 0;
40
+ }
41
+
42
+ /* Typography
43
+ -------------------------------------------------------- */
44
+
45
+ h1 {
46
+ margin-top: 0;
47
+ font-weight: normal;
48
+ }
49
+ h2 {
50
+ font-weight: normal;
51
+ }
52
+ h3 {
53
+ font-weight: normal;
54
+ font-style: italic;
55
+ margin-top:3em;
56
+ }
57
+ p {
58
+ margin-top:0;
59
+ -webkit-hypens:auto;
60
+ -moz-hypens:auto;
61
+ hyphens:auto;
62
+ }
63
+ ul {
64
+ list-style: square;
65
+ padding-left:1.2em;
66
+ }
67
+ ol {
68
+ padding-left:1.2em;
69
+ }
70
+ blockquote {
71
+ margin-left: 1em;
72
+ padding-left: 1em;
73
+ border-left: 1px solid #ddd;
74
+ }
75
+ code {
76
+ font-family: "Consolas", "Menlo", "Monaco", monospace, serif;
77
+ font-size: .9em;
78
+ background: white;
79
+ }
80
+ a {
81
+ color: #2484c1;
82
+ text-decoration: none;
83
+ }
84
+ a:hover {
85
+ text-decoration: underline;
86
+ }
87
+ a img {
88
+ border:none;
89
+ }
90
+ h1 a, h1 a:hover {
91
+ color: #333;
92
+ text-decoration: none;
93
+ }
94
+ hr {
95
+ color : #ddd;
96
+ height : 1px;
97
+ margin: 2em 0;
98
+ border-top : solid 1px #ddd;
99
+ border-bottom : none;
100
+ border-left: 0;
101
+ border-right: 0;
102
+ }
103
+ p#heart{
104
+ font-size: 2em;
105
+ line-height: 1;
106
+ text-align: center;
107
+ color: #ccc;
108
+ }
109
+ .red {
110
+ color:#B50000;
111
+ }
112
+
113
+ /* Home Page
114
+ --------------------------- */
115
+
116
+ body#index li {
117
+ margin-bottom: 1em;
118
+ }
119
+
120
+
121
+ /* iPad
122
+ -------------------------------------------------------- */
123
+ @media only screen and (max-device-width: 1024px) {
124
+ body {
125
+ font-size: 120%;
126
+ line-height: 1.4;
127
+ }
128
+ } /* @iPad */
129
+
130
+ /* iPhone
131
+ -------------------------------------------------------- */
132
+ @media only screen and (max-device-width: 480px) {
133
+ body {
134
+ text-align: left;
135
+ }
136
+ article, footer {
137
+ width: auto;
138
+ }
139
+ article {
140
+ padding: 0 10px;
141
+ }
142
+ } /* @iPhone */
skin/adminhtml/default/default/markdown/styles/jasonm23-markdown.css ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
2
+
3
+ body{
4
+ color:#444;
5
+ font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif;
6
+ font-size:12px;
7
+ line-height:1.5em;
8
+ padding:1em;
9
+ margin:auto;
10
+ max-width:42em;
11
+ background:#fefefe;
12
+ }
13
+
14
+ a{ color: #0645ad; text-decoration:none;}
15
+ a:visited{ color: #0b0080; }
16
+ a:hover{ color: #06e; }
17
+ a:active{ color:#faa700; }
18
+ a:focus{ outline: thin dotted; }
19
+ a:hover, a:active{ outline: 0; }
20
+
21
+ ::-moz-selection{background:rgba(255,255,0,0.3);color:#000}
22
+ ::selection{background:rgba(255,255,0,0.3);color:#000}
23
+
24
+ a::-moz-selection{background:rgba(255,255,0,0.3);color:#0645ad}
25
+ a::selection{background:rgba(255,255,0,0.3);color:#0645ad}
26
+
27
+ p{
28
+ margin:1em 0;
29
+ }
30
+
31
+ img{
32
+ max-width:100%;
33
+ }
34
+
35
+ h1,h2,h3,h4,h5,h6{
36
+ font-weight:normal;
37
+ color:#111;
38
+ line-height:1em;
39
+ }
40
+ h4,h5,h6{ font-weight: bold; }
41
+ h1{ font-size:2.5em; }
42
+ h2{ font-size:2em; }
43
+ h3{ font-size:1.5em; }
44
+ h4{ font-size:1.2em; }
45
+ h5{ font-size:1em; }
46
+ h6{ font-size:0.9em; }
47
+
48
+ blockquote{
49
+ color:#666666;
50
+ margin:0;
51
+ padding-left: 3em;
52
+ border-left: 0.5em #EEE solid;
53
+ }
54
+ hr { display: block; height: 2px; border: 0; border-top: 1px solid #aaa;border-bottom: 1px solid #eee; margin: 1em 0; padding: 0; }
55
+ pre, code, kbd, samp { color: #000; font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 0.98em; }
56
+ pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
57
+
58
+ b, strong { font-weight: bold; }
59
+
60
+ dfn { font-style: italic; }
61
+
62
+ ins { background: #ff9; color: #000; text-decoration: none; }
63
+
64
+ mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
65
+
66
+ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
67
+ sup { top: -0.5em; }
68
+ sub { bottom: -0.25em; }
69
+
70
+ ul, ol { margin: 1em 0; padding: 0 0 0 2em; }
71
+ li p:last-child { margin:0 }
72
+ dd { margin: 0 0 0 2em; }
73
+
74
+ img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
75
+
76
+ table { border-collapse: collapse; border-spacing: 0; }
77
+ td { vertical-align: top; }
78
+
79
+ @media only screen and (min-width: 480px) {
80
+ body{font-size:14px;}
81
+ }
82
+
83
+ @media only screen and (min-width: 768px) {
84
+ body{font-size:16px;}
85
+ }
86
+
87
+ @media print {
88
+ * { background: transparent !important; color: black !important; filter:none !important; -ms-filter: none !important; }
89
+ body{font-size:12pt; max-width:100%;}
90
+ a, a:visited { text-decoration: underline; }
91
+ hr { height: 1px; border:0; border-bottom:1px solid black; }
92
+ a[href]:after { content: " (" attr(href) ")"; }
93
+ abbr[title]:after { content: " (" attr(title) ")"; }
94
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
95
+ pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; }
96
+ tr, img { page-break-inside: avoid; }
97
+ img { max-width: 100% !important; }
98
+ @page :left { margin: 15mm 20mm 15mm 10mm; }
99
+ @page :right { margin: 15mm 10mm 15mm 20mm; }
100
+ p, h2, h3 { orphans: 3; widows: 3; }
101
+ h2, h3 { page-break-after: avoid; }
102
+ }
skin/adminhtml/default/default/markdown/styles/jasonm23-swiss.css ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "utf-8";
2
+
3
+ /**
4
+ * markdown.css
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify it under
7
+ * the terms of the GNU Lesser General Public License as published by the Free
8
+ * Software Foundation, either version 3 of the License, or (at your option) any
9
+ * later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
+ * details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public License
17
+ * along with this program. If not, see http://gnu.org/licenses/lgpl.txt.
18
+ *
19
+ * @project Weblog and Open Source Projects of Florian Wolters
20
+ * @version GIT: $Id$
21
+ * @package xhtml-css
22
+ * @author Florian Wolters <florian.wolters.85@googlemail.com>
23
+ * @copyright 2012 Florian Wolters
24
+ * @cssdoc version 1.0-pre
25
+ * @license http://gnu.org/licenses/lgpl.txt GNU Lesser General Public License
26
+ * @link http://github.com/FlorianWolters/jekyll-bootstrap-theme
27
+ * @media all
28
+ * @valid true
29
+ */
30
+
31
+ body {
32
+ font-family: Helvetica, Arial, Freesans, clean, sans-serif;
33
+ padding:1em;
34
+ margin:auto;
35
+ max-width:42em;
36
+ background:#fefefe;
37
+ }
38
+
39
+ h1, h2, h3, h4, h5, h6 {
40
+ font-weight: bold;
41
+ }
42
+
43
+ h1 {
44
+ color: #000000;
45
+ font-size: 28px;
46
+ }
47
+
48
+ h2 {
49
+ border-bottom: 1px solid #CCCCCC;
50
+ color: #000000;
51
+ font-size: 24px;
52
+ }
53
+
54
+ h3 {
55
+ font-size: 18px;
56
+ }
57
+
58
+ h4 {
59
+ font-size: 16px;
60
+ }
61
+
62
+ h5 {
63
+ font-size: 14px;
64
+ }
65
+
66
+ h6 {
67
+ color: #777777;
68
+ background-color: inherit;
69
+ font-size: 14px;
70
+ }
71
+
72
+ hr {
73
+ height: 0.2em;
74
+ border: 0;
75
+ color: #CCCCCC;
76
+ background-color: #CCCCCC;
77
+ }
78
+
79
+ p, blockquote, ul, ol, dl, li, table, pre {
80
+ margin: 15px 0;
81
+ }
82
+
83
+ code, pre {
84
+ border-radius: 3px;
85
+ background-color: #F8F8F8;
86
+ color: inherit;
87
+ }
88
+
89
+ code {
90
+ border: 1px solid #EAEAEA;
91
+ margin: 0 2px;
92
+ padding: 0 5px;
93
+ }
94
+
95
+ pre {
96
+ border: 1px solid #CCCCCC;
97
+ line-height: 1.25em;
98
+ overflow: auto;
99
+ padding: 6px 10px;
100
+ }
101
+
102
+ pre > code {
103
+ border: 0;
104
+ margin: 0;
105
+ padding: 0;
106
+ }
107
+
108
+ a, a:visited {
109
+ color: #4183C4;
110
+ background-color: inherit;
111
+ text-decoration: none;
112
+ }
skin/adminhtml/default/default/markdown/styles/kevinburke.css ADDED
@@ -0,0 +1,298 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*http://kevinburke.bitbucket.org/markdowncss/*/
2
+ body {
3
+ margin : 0 auto;
4
+ font-family : Georgia, Palatino, serif;
5
+ color : #444444;
6
+ line-height : 1;
7
+ max-width : 960px;
8
+ padding : 30px;
9
+ }
10
+
11
+ h1, h2, h3, h4 {
12
+ color : #111111;
13
+ font-weight : 400;
14
+ }
15
+
16
+ h1, h2, h3, h4, h5, p {
17
+ margin-bottom : 24px;
18
+ padding : 0;
19
+ }
20
+
21
+ h1 {
22
+ font-size : 48px;
23
+ }
24
+
25
+ h2 {
26
+ font-size : 36px;
27
+ /* The bottom margin is small. It's designed to be used with gray meta text
28
+ * below a post title. */
29
+ margin : 24px 0 6px;
30
+ }
31
+
32
+ h3 {
33
+ font-size : 24px;
34
+ }
35
+
36
+ h4 {
37
+ font-size : 21px;
38
+ }
39
+
40
+ h5 {
41
+ font-size : 18px;
42
+ }
43
+
44
+ a {
45
+ color : #0099ff;
46
+ margin : 0;
47
+ padding : 0;
48
+ vertical-align : baseline;
49
+ }
50
+
51
+ a:hover {
52
+ text-decoration : none;
53
+ color : #ff6600;
54
+ }
55
+
56
+ a:visited {
57
+ color : purple;
58
+ }
59
+
60
+ ul, ol {
61
+ padding : 0;
62
+ margin : 0;
63
+ }
64
+
65
+ li {
66
+ line-height : 24px;
67
+ }
68
+
69
+ li ul, li ul {
70
+ margin-left : 24px;
71
+ }
72
+
73
+ p, ul, ol {
74
+ font-size : 16px;
75
+ line-height : 24px;
76
+ max-width : 540px;
77
+ }
78
+
79
+ pre {
80
+ padding : 0px 24px;
81
+ max-width : 800px;
82
+ white-space : pre-wrap;
83
+ }
84
+
85
+ code {
86
+ font-family : Consolas, Monaco, Andale Mono, monospace;
87
+ line-height : 1.5;
88
+ font-size : 13px;
89
+ }
90
+
91
+ aside {
92
+ display : block;
93
+ float : right;
94
+ width : 390px;
95
+ }
96
+
97
+ blockquote {
98
+ border-left : .5em solid #eee;
99
+ padding : 0 2em;
100
+ margin-left : 0;
101
+ max-width : 476px;
102
+ }
103
+
104
+ blockquote cite {
105
+ font-size : 14px;
106
+ line-height : 20px;
107
+ color : #bfbfbf;
108
+ }
109
+
110
+ blockquote cite:before {
111
+ content : '\2014 \00A0';
112
+ }
113
+
114
+ blockquote p {
115
+ color : #666;
116
+ max-width : 460px;
117
+ }
118
+
119
+ hr {
120
+ width : 540px;
121
+ text-align : left;
122
+ margin : 0 auto 0 0;
123
+ color : #999;
124
+ }
125
+
126
+ /* Code below this line is copyright Twitter Inc. */
127
+
128
+ button,
129
+ input,
130
+ select,
131
+ textarea {
132
+ font-size : 100%;
133
+ margin : 0;
134
+ vertical-align : baseline;
135
+ *vertical-align : middle;
136
+ }
137
+
138
+ button, input {
139
+ line-height : normal;
140
+ *overflow : visible;
141
+ }
142
+
143
+ button::-moz-focus-inner, input::-moz-focus-inner {
144
+ border : 0;
145
+ padding : 0;
146
+ }
147
+
148
+ button,
149
+ input[type="button"],
150
+ input[type="reset"],
151
+ input[type="submit"] {
152
+ cursor : pointer;
153
+ -webkit-appearance : button;
154
+ }
155
+
156
+ input[type=checkbox], input[type=radio] {
157
+ cursor : pointer;
158
+ }
159
+
160
+ /* override default chrome & firefox settings */
161
+ input:not([type="image"]), textarea {
162
+ -webkit-box-sizing : content-box;
163
+ -moz-box-sizing : content-box;
164
+ box-sizing : content-box;
165
+ }
166
+
167
+ input[type="search"] {
168
+ -webkit-appearance : textfield;
169
+ -webkit-box-sizing : content-box;
170
+ -moz-box-sizing : content-box;
171
+ box-sizing : content-box;
172
+ }
173
+
174
+ input[type="search"]::-webkit-search-decoration {
175
+ -webkit-appearance : none;
176
+ }
177
+
178
+ label,
179
+ input,
180
+ select,
181
+ textarea {
182
+ font-family : "Helvetica Neue", Helvetica, Arial, sans-serif;
183
+ font-size : 13px;
184
+ font-weight : normal;
185
+ line-height : normal;
186
+ margin-bottom : 18px;
187
+ }
188
+
189
+ input[type=checkbox], input[type=radio] {
190
+ cursor : pointer;
191
+ margin-bottom : 0;
192
+ }
193
+
194
+ input[type=text],
195
+ input[type=password],
196
+ textarea,
197
+ select {
198
+ display : inline-block;
199
+ width : 210px;
200
+ padding : 4px;
201
+ font-size : 13px;
202
+ font-weight : normal;
203
+ line-height : 18px;
204
+ height : 18px;
205
+ color : #808080;
206
+ border : 1px solid #ccc;
207
+ -webkit-border-radius : 3px;
208
+ -moz-border-radius : 3px;
209
+ border-radius : 3px;
210
+ }
211
+
212
+ select, input[type=file] {
213
+ height : 27px;
214
+ line-height : 27px;
215
+ }
216
+
217
+ textarea {
218
+ height : auto;
219
+ }
220
+
221
+ /* grey out placeholders */
222
+ :-moz-placeholder {
223
+ color : #bfbfbf;
224
+ }
225
+
226
+ ::-webkit-input-placeholder {
227
+ color : #bfbfbf;
228
+ }
229
+
230
+ input[type=text],
231
+ input[type=password],
232
+ select,
233
+ textarea {
234
+ -webkit-transition : border linear 0.2s, box-shadow linear 0.2s;
235
+ -moz-transition : border linear 0.2s, box-shadow linear 0.2s;
236
+ transition : border linear 0.2s, box-shadow linear 0.2s;
237
+ -webkit-box-shadow : inset 0 1px 3px rgba(0, 0, 0, 0.1);
238
+ -moz-box-shadow : inset 0 1px 3px rgba(0, 0, 0, 0.1);
239
+ box-shadow : inset 0 1px 3px rgba(0, 0, 0, 0.1);
240
+ }
241
+
242
+ input[type=text]:focus, input[type=password]:focus, textarea:focus {
243
+ outline : none;
244
+ border-color : rgba(82, 168, 236, 0.8);
245
+ -webkit-box-shadow : inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
246
+ -moz-box-shadow : inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
247
+ box-shadow : inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
248
+ }
249
+
250
+ /* buttons */
251
+ button {
252
+ display : inline-block;
253
+ padding : 4px 14px;
254
+ font-family : "Helvetica Neue", Helvetica, Arial, sans-serif;
255
+ font-size : 13px;
256
+ line-height : 18px;
257
+ -webkit-border-radius : 4px;
258
+ -moz-border-radius : 4px;
259
+ border-radius : 4px;
260
+ -webkit-box-shadow : inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
261
+ -moz-box-shadow : inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
262
+ box-shadow : inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
263
+ background-color : #0064cd;
264
+ background-repeat : repeat-x;
265
+ background-image : -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
266
+ background-image : -moz-linear-gradient(top, #049cdb, #0064cd);
267
+ background-image : -ms-linear-gradient(top, #049cdb, #0064cd);
268
+ background-image : -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
269
+ background-image : -webkit-linear-gradient(top, #049cdb, #0064cd);
270
+ background-image : -o-linear-gradient(top, #049cdb, #0064cd);
271
+ background-image : linear-gradient(top, #049cdb, #0064cd);
272
+ color : #fff;
273
+ text-shadow : 0 -1px 0 rgba(0, 0, 0, 0.25);
274
+ border : 1px solid #004b9a;
275
+ border-bottom-color : #003f81;
276
+ -webkit-transition : 0.1s linear all;
277
+ -moz-transition : 0.1s linear all;
278
+ transition : 0.1s linear all;
279
+ border-color : #0064cd #0064cd #003f81;
280
+ border-color : rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
281
+ }
282
+
283
+ button:hover {
284
+ color : #fff;
285
+ background-position : 0 -15px;
286
+ text-decoration : none;
287
+ }
288
+
289
+ button:active {
290
+ -webkit-box-shadow : inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
291
+ -moz-box-shadow : inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
292
+ box-shadow : inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
293
+ }
294
+
295
+ button::-moz-focus-inner {
296
+ padding : 0;
297
+ border : 0;
298
+ }
skin/adminhtml/default/default/markdown/styles/markedapp-byword.css ADDED
@@ -0,0 +1,314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This document has been created with Marked.app <http://markedapp.com>.
3
+ * Copyright 2011 Brett Terpstra
4
+ * ---------------------------------------------------------------------------
5
+ * Please leave this notice in place, along with any additional credits below.
6
+ *
7
+ * Byword.css theme is based on Byword.app <http://bywordapp.com>
8
+ * Authors: @brunodecarvalho, @jpedroso, @rcabaco
9
+ * Copyright 2011 Metaclassy, Lda. <http://metaclassy.com>
10
+ */
11
+
12
+ html {
13
+ font-size: 62.5%; /* base font-size: 10px */
14
+ }
15
+
16
+ body {
17
+ background-color: #f2f2f2;
18
+ color: #3c3c3c;
19
+
20
+ /* Change font size below */
21
+ font-size: 1.7em;
22
+ line-height: 1.4em;
23
+
24
+ /* Change font below */
25
+
26
+ /* Sans-serif fonts */
27
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
28
+ -webkit-font-smoothing: antialiased;
29
+
30
+ /* Serif fonts */
31
+ /*
32
+ font-family: "Cochin", "Baskerville", "Georgia", serif;
33
+ -webkit-font-smoothing: subpixel-antialiased;
34
+ */
35
+
36
+ /* Monospaced fonts */
37
+ /*
38
+ font-family: "Courier New", Menlo, Monaco, mono;
39
+ -webkit-font-smoothing: antialiased;
40
+ */
41
+
42
+ margin: auto;
43
+ max-width: 42em;
44
+ }
45
+ a {
46
+ color: #308bd8;
47
+ text-decoration:none;
48
+ }
49
+ a:hover {
50
+ text-decoration: underline;
51
+ }
52
+ /* headings */
53
+ h1, h2 {
54
+ line-height:1.2em;
55
+ margin-top:32px;
56
+ margin-bottom:12px;
57
+ }
58
+ h1:first-child {
59
+ margin-top:0;
60
+ }
61
+ h3, h4, h5, h6 {
62
+ margin-top:12px;
63
+ margin-bottom:0;
64
+ }
65
+ h5, h6 {
66
+ font-size:0.9em;
67
+ line-height:1.0em;
68
+ }
69
+ /* end of headings */
70
+ p {
71
+ margin:0 0 24px 0;
72
+ }
73
+ p:last-child {
74
+ margin:0;
75
+ }
76
+ #wrapper hr {
77
+ width: 100%;
78
+ margin: 3em auto;
79
+ border: 0;
80
+ color: #eee;
81
+ background-color: #ccc;
82
+ height: 1px;
83
+ -webkit-box-shadow:0px 1px 0px rgba(255, 255, 255, 0.75);
84
+ }
85
+ /* lists */
86
+ ol {
87
+ list-style: outside decimal;
88
+ }
89
+ ul {
90
+ list-style: outside disc;
91
+ }
92
+ ol, ul {
93
+ padding-left:0;
94
+ margin-bottom:24px;
95
+ }
96
+ ol li {
97
+ margin-left:28px;
98
+ }
99
+ ul li {
100
+ margin-bottom:8px;
101
+ margin-left:16px;
102
+ }
103
+ ol:last-child, ul:last-child {
104
+ margin:0;
105
+ }
106
+ li > ol, li > ul {
107
+ padding-left:12px;
108
+ }
109
+ dl {
110
+ margin-bottom:24px;
111
+ }
112
+ dl dt {
113
+ font-weight:bold;
114
+ margin-bottom:8px;
115
+ }
116
+ dl dd {
117
+ margin-left:0;
118
+ margin-bottom:12px;
119
+ }
120
+ dl dd:last-child, dl:last-child {
121
+ margin-bottom:0;
122
+ }
123
+ /* end of lists */
124
+ pre {
125
+ white-space: pre-wrap;
126
+ width: 96%;
127
+ margin-bottom: 24px;
128
+ overflow: hidden;
129
+ padding: 3px 10px;
130
+ -webkit-border-radius: 3px;
131
+ background-color: #eee;
132
+ border: 1px solid #ddd;
133
+ }
134
+ code {
135
+ white-space: nowrap;
136
+ font-size: 1.1em;
137
+ padding: 2px;
138
+ -webkit-border-radius: 3px;
139
+ background-color: #eee;
140
+ border: 1px solid #ddd;
141
+ }
142
+ pre code {
143
+ white-space: pre-wrap;
144
+ border: none;
145
+ padding: 0;
146
+ background-color: transparent;
147
+ -webkit-border-radius: 0;
148
+ }
149
+ blockquote {
150
+ margin-left: 0;
151
+ margin-right: 0;
152
+ width: 96%;
153
+ padding: 0 10px;
154
+ border-left: 3px solid #ddd;
155
+ color: #777;
156
+ }
157
+ table {
158
+ margin-left: auto;
159
+ margin-right: auto;
160
+ margin-bottom: 24px;
161
+ border-bottom: 1px solid #ddd;
162
+ border-right: 1px solid #ddd;
163
+ border-spacing: 0;
164
+ }
165
+ table th {
166
+ padding: 3px 10px;
167
+ background-color: #eee;
168
+ border-top: 1px solid #ddd;
169
+ border-left: 1px solid #ddd;
170
+ }
171
+ table tr {
172
+ }
173
+ table td {
174
+ padding: 3px 10px;
175
+ border-top: 1px solid #ddd;
176
+ border-left: 1px solid #ddd;
177
+ }
178
+ caption {
179
+ font-size: 1.2em;
180
+ font-weight: bold;
181
+ margin-bottom: 5px;
182
+ }
183
+ figure {
184
+ display: block;
185
+ text-align: center;
186
+ }
187
+ #wrapper img {
188
+ border: none;
189
+ display: block;
190
+ margin: 1em auto;
191
+ max-width: 100%;
192
+ }
193
+ figcaption {
194
+ font-size: 0.8em;
195
+ font-style: italic;
196
+ }
197
+ mark {
198
+ background: #fefec0;
199
+ padding:1px 3px;
200
+ }
201
+
202
+
203
+ /* classes */
204
+
205
+ .markdowncitation {
206
+ }
207
+ .footnote {
208
+ font-size: 0.8em;
209
+ vertical-align: super;
210
+ }
211
+ .footnotes ol {
212
+ font-weight: bold;
213
+ }
214
+ .footnotes ol li p {
215
+ font-weight: normal;
216
+ }
217
+
218
+ /* custom formatting classes */
219
+
220
+ .shadow {
221
+ -webkit-box-shadow: 0 2px 4px #999;
222
+ }
223
+
224
+ .source {
225
+ text-align: center;
226
+ font-size: 0.8em;
227
+ color: #777;
228
+ margin: -40px;
229
+ }
230
+
231
+ @media screen {
232
+ .inverted, .inverted #wrapper {
233
+ background-color: #1a1a1a !important;
234
+ color: #bebebe !important;
235
+
236
+ /* SANS-SERIF */
237
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;
238
+ -webkit-font-smoothing: antialiased !important;
239
+
240
+ /* SERIF */
241
+ /*
242
+ font-family: "Cochin", "Baskerville", "Georgia", serif !important;
243
+ -webkit-font-smoothing: subpixel-antialiased !important;
244
+ */
245
+ /* MONO */
246
+ /*
247
+ font-family: "Courier", mono !important;
248
+ -webkit-font-smoothing: antialiased !important;
249
+ */
250
+ }
251
+ .inverted a {
252
+ color: #308bd8 !important;
253
+ }
254
+ .inverted hr {
255
+ color: #666 !important;
256
+ border: 0;
257
+ background-color: #666 !important;
258
+ -webkit-box-shadow: none !important;
259
+ }
260
+ .inverted pre {
261
+ background-color: #222 !important;
262
+ border-color: #3c3c3c !important;
263
+ }
264
+ .inverted code {
265
+ background-color: #222 !important;
266
+ border-color: #3c3c3c !important;
267
+ }
268
+ .inverted blockquote {
269
+ border-color: #333 !important;
270
+ color: #999 !important;
271
+ }
272
+ .inverted table {
273
+ border-color: #3c3c3c !important;
274
+ }
275
+ .inverted table th {
276
+ background-color: #222 !important;
277
+ border-color: #3c3c3c !important;
278
+ }
279
+ .inverted table td {
280
+ border-color: #3c3c3c !important;
281
+ }
282
+ .inverted mark {
283
+ background: #bc990b !important;
284
+ color:#000 !important;
285
+ }
286
+ .inverted .shadow { -webkit-box-shadow: 0 2px 4px #000 !important; }
287
+ #wrapper {
288
+ background: transparent;
289
+ margin: 40px;
290
+ }
291
+ }
292
+
293
+ /* Printing support */
294
+ @media print {
295
+ body {
296
+ overflow: auto;
297
+ }
298
+ img, pre, blockquote, table, figure {
299
+ page-break-inside: avoid;
300
+ }
301
+ pre, code {
302
+ border: none !important;
303
+ }
304
+ #wrapper {
305
+ background: #fff;
306
+ position: relative;
307
+ text-indent: 0px;
308
+ padding: 10px;
309
+ font-size:85%;
310
+ }
311
+ .footnotes {
312
+ page-break-before: always;
313
+ }
314
+ }
skin/adminhtml/default/default/markdown/styles/thomasf-solarizedcssdark.css ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ article,
2
+ aside,
3
+ details,
4
+ figcaption,
5
+ figure,
6
+ footer,
7
+ header,
8
+ hgroup,
9
+ nav,
10
+ section,
11
+ summary {
12
+ display: block;
13
+ }
14
+ audio,
15
+ canvas,
16
+ video {
17
+ display: inline-block;
18
+ }
19
+ audio:not([controls]) {
20
+ display: none;
21
+ height: 0;
22
+ }
23
+ [hidden] {
24
+ display: none;
25
+ }
26
+ html {
27
+ font-family: sans-serif;
28
+ -webkit-text-size-adjust: 100%;
29
+ -ms-text-size-adjust: 100%;
30
+ }
31
+ body {
32
+ margin: 0;
33
+ }
34
+ a:focus {
35
+ outline: thin dotted;
36
+ }
37
+ a:active,
38
+ a:hover {
39
+ outline: 0;
40
+ }
41
+ h1 {
42
+ font-size: 2em;
43
+ }
44
+ abbr[title] {
45
+ border-bottom: 1px dotted;
46
+ }
47
+ b,
48
+ strong {
49
+ font-weight: bold;
50
+ }
51
+ dfn {
52
+ font-style: italic;
53
+ }
54
+ mark {
55
+ background: #ff0;
56
+ color: #000;
57
+ }
58
+ code,
59
+ kbd,
60
+ pre,
61
+ samp {
62
+ font-family: monospace, serif;
63
+ font-size: 1em;
64
+ }
65
+ pre {
66
+ white-space: pre-wrap;
67
+ word-wrap: break-word;
68
+ }
69
+ q {
70
+ quotes: "\201C" "\201D" "\2018" "\2019";
71
+ }
72
+ small {
73
+ font-size: 80%;
74
+ }
75
+ sub,
76
+ sup {
77
+ font-size: 75%;
78
+ line-height: 0;
79
+ position: relative;
80
+ vertical-align: baseline;
81
+ }
82
+ sup {
83
+ top: -0.5em;
84
+ }
85
+ sub {
86
+ bottom: -0.25em;
87
+ }
88
+ img {
89
+ border: 0;
90
+ }
91
+ svg:not(:root) {
92
+ overflow: hidden;
93
+ }
94
+ figure {
95
+ margin: 0;
96
+ }
97
+ fieldset {
98
+ border: 1px solid #c0c0c0;
99
+ margin: 0 2px;
100
+ padding: 0.35em 0.625em 0.75em;
101
+ }
102
+ legend {
103
+ border: 0;
104
+ padding: 0;
105
+ }
106
+ button,
107
+ input,
108
+ select,
109
+ textarea {
110
+ font-family: inherit;
111
+ font-size: 100%;
112
+ margin: 0;
113
+ }
114
+ button,
115
+ input {
116
+ line-height: normal;
117
+ }
118
+ button,
119
+ html input[type="button"],
120
+ input[type="reset"],
121
+ input[type="submit"] {
122
+ -webkit-appearance: button;
123
+ cursor: pointer;
124
+ }
125
+ button[disabled],
126
+ input[disabled] {
127
+ cursor: default;
128
+ }
129
+ input[type="checkbox"],
130
+ input[type="radio"] {
131
+ box-sizing: border-box;
132
+ padding: 0;
133
+ }
134
+ input[type="search"] {
135
+ -webkit-appearance: textfield;
136
+ -moz-box-sizing: content-box;
137
+ -webkit-box-sizing: content-box;
138
+ box-sizing: content-box;
139
+ }
140
+ input[type="search"]::-webkit-search-cancel-button,
141
+ input[type="search"]::-webkit-search-decoration {
142
+ -webkit-appearance: none;
143
+ }
144
+ button::-moz-focus-inner,
145
+ input::-moz-focus-inner {
146
+ border: 0;
147
+ padding: 0;
148
+ }
149
+ textarea {
150
+ overflow: auto;
151
+ vertical-align: top;
152
+ }
153
+ table {
154
+ border-collapse: collapse;
155
+ border-spacing: 0;
156
+ }
157
+ @import url(//fonts.googleapis.com/css?family=Inconsolata);
158
+ @import url(//fonts.googleapis.com/css?family=PT+Sans);
159
+ @import url(//fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700);
160
+ html {
161
+ font-family: 'PT Sans', sans-serif;
162
+ }
163
+ pre,
164
+ code {
165
+ font-family: 'Inconsolata', sans-serif;
166
+ }
167
+ h1,
168
+ h2,
169
+ h3,
170
+ h4,
171
+ h5,
172
+ h6 {
173
+ font-family: 'PT Sans Narrow', sans-serif;
174
+ font-weight: 700;
175
+ }
176
+ html {
177
+ background-color: #002b36;
178
+ color: #839496;
179
+ margin: 1em;
180
+ }
181
+ code {
182
+ background-color: #073642;
183
+ padding: 2px;
184
+ }
185
+ a {
186
+ color: #b58900;
187
+ }
188
+ a:visited {
189
+ color: #cb4b16;
190
+ }
191
+ a:hover {
192
+ color: #cb4b16;
193
+ }
194
+ h1 {
195
+ color: #d33682;
196
+ }
197
+ h2,
198
+ h3,
199
+ h4,
200
+ h5,
201
+ h6 {
202
+ color: #859900;
203
+ }
204
+ pre {
205
+ background-color: #002b36;
206
+ color: #839496;
207
+ border: 1pt solid #586e75;
208
+ padding: 1em;
209
+ box-shadow: 5pt 5pt 8pt #073642;
210
+ }
211
+ pre code {
212
+ background-color: #002b36;
213
+ }
214
+ h1 {
215
+ font-size: 2.8em;
216
+ }
217
+ h2 {
218
+ font-size: 2.4em;
219
+ }
220
+ h3 {
221
+ font-size: 1.8em;
222
+ }
223
+ h4 {
224
+ font-size: 1.4em;
225
+ }
226
+ h5 {
227
+ font-size: 1.3em;
228
+ }
229
+ h6 {
230
+ font-size: 1.15em;
231
+ }
232
+ .tag {
233
+ background-color: #073642;
234
+ color: #d33682;
235
+ padding: 0 0.2em;
236
+ }
237
+ .todo,
238
+ .next,
239
+ .done {
240
+ color: #002b36;
241
+ background-color: #dc322f;
242
+ padding: 0 0.2em;
243
+ }
244
+ .tag {
245
+ -webkit-border-radius: 0.35em;
246
+ -moz-border-radius: 0.35em;
247
+ border-radius: 0.35em;
248
+ }
249
+ .TODO {
250
+ -webkit-border-radius: 0.2em;
251
+ -moz-border-radius: 0.2em;
252
+ border-radius: 0.2em;
253
+ background-color: #2aa198;
254
+ }
255
+ .NEXT {
256
+ -webkit-border-radius: 0.2em;
257
+ -moz-border-radius: 0.2em;
258
+ border-radius: 0.2em;
259
+ background-color: #268bd2;
260
+ }
261
+ .ACTIVE {
262
+ -webkit-border-radius: 0.2em;
263
+ -moz-border-radius: 0.2em;
264
+ border-radius: 0.2em;
265
+ background-color: #268bd2;
266
+ }
267
+ .DONE {
268
+ -webkit-border-radius: 0.2em;
269
+ -moz-border-radius: 0.2em;
270
+ border-radius: 0.2em;
271
+ background-color: #859900;
272
+ }
273
+ .WAITING {
274
+ -webkit-border-radius: 0.2em;
275
+ -moz-border-radius: 0.2em;
276
+ border-radius: 0.2em;
277
+ foreground-color: #cb4b16;
278
+ }
279
+ .HOLD {
280
+ -webkit-border-radius: 0.2em;
281
+ -moz-border-radius: 0.2em;
282
+ border-radius: 0.2em;
283
+ foreground-color: #d33682;
284
+ }
285
+ .NOTE {
286
+ -webkit-border-radius: 0.2em;
287
+ -moz-border-radius: 0.2em;
288
+ border-radius: 0.2em;
289
+ foreground-color: #d33682;
290
+ }
291
+ .CANCELLED {
292
+ -webkit-border-radius: 0.2em;
293
+ -moz-border-radius: 0.2em;
294
+ border-radius: 0.2em;
295
+ foreground-color: #859900;
296
+ }
skin/adminhtml/default/default/markdown/styles/thomasf-solarizedcsslight.css ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ article,
2
+ aside,
3
+ details,
4
+ figcaption,
5
+ figure,
6
+ footer,
7
+ header,
8
+ hgroup,
9
+ nav,
10
+ section,
11
+ summary {
12
+ display: block;
13
+ }
14
+ audio,
15
+ canvas,
16
+ video {
17
+ display: inline-block;
18
+ }
19
+ audio:not([controls]) {
20
+ display: none;
21
+ height: 0;
22
+ }
23
+ [hidden] {
24
+ display: none;
25
+ }
26
+ html {
27
+ font-family: sans-serif;
28
+ -webkit-text-size-adjust: 100%;
29
+ -ms-text-size-adjust: 100%;
30
+ }
31
+ body {
32
+ margin: 0;
33
+ }
34
+ a:focus {
35
+ outline: thin dotted;
36
+ }
37
+ a:active,
38
+ a:hover {
39
+ outline: 0;
40
+ }
41
+ h1 {
42
+ font-size: 2em;
43
+ }
44
+ abbr[title] {
45
+ border-bottom: 1px dotted;
46
+ }
47
+ b,
48
+ strong {
49
+ font-weight: bold;
50
+ }
51
+ dfn {
52
+ font-style: italic;
53
+ }
54
+ mark {
55
+ background: #ff0;
56
+ color: #000;
57
+ }
58
+ code,
59
+ kbd,
60
+ pre,
61
+ samp {
62
+ font-family: monospace, serif;
63
+ font-size: 1em;
64
+ }
65
+ pre {
66
+ white-space: pre-wrap;
67
+ word-wrap: break-word;
68
+ }
69
+ q {
70
+ quotes: "\201C" "\201D" "\2018" "\2019";
71
+ }
72
+ small {
73
+ font-size: 80%;
74
+ }
75
+ sub,
76
+ sup {
77
+ font-size: 75%;
78
+ line-height: 0;
79
+ position: relative;
80
+ vertical-align: baseline;
81
+ }
82
+ sup {
83
+ top: -0.5em;
84
+ }
85
+ sub {
86
+ bottom: -0.25em;
87
+ }
88
+ img {
89
+ border: 0;
90
+ }
91
+ svg:not(:root) {
92
+ overflow: hidden;
93
+ }
94
+ figure {
95
+ margin: 0;
96
+ }
97
+ fieldset {
98
+ border: 1px solid #c0c0c0;
99
+ margin: 0 2px;
100
+ padding: 0.35em 0.625em 0.75em;
101
+ }
102
+ legend {
103
+ border: 0;
104
+ padding: 0;
105
+ }
106
+ button,
107
+ input,
108
+ select,
109
+ textarea {
110
+ font-family: inherit;
111
+ font-size: 100%;
112
+ margin: 0;
113
+ }
114
+ button,
115
+ input {
116
+ line-height: normal;
117
+ }
118
+ button,
119
+ html input[type="button"],
120
+ input[type="reset"],
121
+ input[type="submit"] {
122
+ -webkit-appearance: button;
123
+ cursor: pointer;
124
+ }
125
+ button[disabled],
126
+ input[disabled] {
127
+ cursor: default;
128
+ }
129
+ input[type="checkbox"],
130
+ input[type="radio"] {
131
+ box-sizing: border-box;
132
+ padding: 0;
133
+ }
134
+ input[type="search"] {
135
+ -webkit-appearance: textfield;
136
+ -moz-box-sizing: content-box;
137
+ -webkit-box-sizing: content-box;
138
+ box-sizing: content-box;
139
+ }
140
+ input[type="search"]::-webkit-search-cancel-button,
141
+ input[type="search"]::-webkit-search-decoration {
142
+ -webkit-appearance: none;
143
+ }
144
+ button::-moz-focus-inner,
145
+ input::-moz-focus-inner {
146
+ border: 0;
147
+ padding: 0;
148
+ }
149
+ textarea {
150
+ overflow: auto;
151
+ vertical-align: top;
152
+ }
153
+ table {
154
+ border-collapse: collapse;
155
+ border-spacing: 0;
156
+ }
157
+ @import url(//fonts.googleapis.com/css?family=Inconsolata);
158
+ @import url(//fonts.googleapis.com/css?family=PT+Sans);
159
+ @import url(//fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700);
160
+ html {
161
+ font-family: 'PT Sans', sans-serif;
162
+ }
163
+ pre,
164
+ code {
165
+ font-family: 'Inconsolata', sans-serif;
166
+ }
167
+ h1,
168
+ h2,
169
+ h3,
170
+ h4,
171
+ h5,
172
+ h6 {
173
+ font-family: 'PT Sans Narrow', sans-serif;
174
+ font-weight: 700;
175
+ }
176
+ html {
177
+ background-color: #fdf6e3;
178
+ color: #657b83;
179
+ margin: 1em;
180
+ }
181
+ code {
182
+ background-color: #eee8d5;
183
+ padding: 2px;
184
+ }
185
+ a {
186
+ color: #b58900;
187
+ }
188
+ a:visited {
189
+ color: #cb4b16;
190
+ }
191
+ a:hover {
192
+ color: #cb4b16;
193
+ }
194
+ h1 {
195
+ color: #d33682;
196
+ }
197
+ h2,
198
+ h3,
199
+ h4,
200
+ h5,
201
+ h6 {
202
+ color: #859900;
203
+ }
204
+ pre {
205
+ background-color: #fdf6e3;
206
+ color: #657b83;
207
+ border: 1pt solid #93a1a1;
208
+ padding: 1em;
209
+ box-shadow: 5pt 5pt 8pt #eee8d5;
210
+ }
211
+ pre code {
212
+ background-color: #fdf6e3;
213
+ }
214
+ h1 {
215
+ font-size: 2.8em;
216
+ }
217
+ h2 {
218
+ font-size: 2.4em;
219
+ }
220
+ h3 {
221
+ font-size: 1.8em;
222
+ }
223
+ h4 {
224
+ font-size: 1.4em;
225
+ }
226
+ h5 {
227
+ font-size: 1.3em;
228
+ }
229
+ h6 {
230
+ font-size: 1.15em;
231
+ }
232
+ .tag {
233
+ background-color: #eee8d5;
234
+ color: #d33682;
235
+ padding: 0 0.2em;
236
+ }
237
+ .todo,
238
+ .next,
239
+ .done {
240
+ color: #fdf6e3;
241
+ background-color: #dc322f;
242
+ padding: 0 0.2em;
243
+ }
244
+ .tag {
245
+ -webkit-border-radius: 0.35em;
246
+ -moz-border-radius: 0.35em;
247
+ border-radius: 0.35em;
248
+ }
249
+ .TODO {
250
+ -webkit-border-radius: 0.2em;
251
+ -moz-border-radius: 0.2em;
252
+ border-radius: 0.2em;
253
+ background-color: #2aa198;
254
+ }
255
+ .NEXT {
256
+ -webkit-border-radius: 0.2em;
257
+ -moz-border-radius: 0.2em;
258
+ border-radius: 0.2em;
259
+ background-color: #268bd2;
260
+ }
261
+ .ACTIVE {
262
+ -webkit-border-radius: 0.2em;
263
+ -moz-border-radius: 0.2em;
264
+ border-radius: 0.2em;
265
+ background-color: #268bd2;
266
+ }
267
+ .DONE {
268
+ -webkit-border-radius: 0.2em;
269
+ -moz-border-radius: 0.2em;
270
+ border-radius: 0.2em;
271
+ background-color: #859900;
272
+ }
273
+ .WAITING {
274
+ -webkit-border-radius: 0.2em;
275
+ -moz-border-radius: 0.2em;
276
+ border-radius: 0.2em;
277
+ foreground-color: #cb4b16;
278
+ }
279
+ .HOLD {
280
+ -webkit-border-radius: 0.2em;
281
+ -moz-border-radius: 0.2em;
282
+ border-radius: 0.2em;
283
+ foreground-color: #d33682;
284
+ }
285
+ .NOTE {
286
+ -webkit-border-radius: 0.2em;
287
+ -moz-border-radius: 0.2em;
288
+ border-radius: 0.2em;
289
+ foreground-color: #d33682;
290
+ }
291
+ .CANCELLED {
292
+ -webkit-border-radius: 0.2em;
293
+ -moz-border-radius: 0.2em;
294
+ border-radius: 0.2em;
295
+ foreground-color: #859900;
296
+ }