From 6e605fb8a5853025ad1c92711844e24a42316ef5 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 25 Jan 2019 18:15:47 +0100 Subject: [PATCH] Version 1.2.10: Formatting Options for Visual Editor --- cache/lastCache.txt | 2 +- ...1-Write-Content.md => 02-Write-Content.md} | 0 .../{02-Get-Help.md => 03-Get-Help.md} | 0 content/00-Welcome/04-markdown-test.md | 290 ++++++++++++++++ media/markdown.png | Bin 0 -> 1073 bytes media/readme.txt | 1 - system/Controllers/FormController.php | 31 +- system/Controllers/SettingsController.php | 98 +++++- system/Extensions/ParsedownExtension.php | 207 +++++++++++- system/Models/Field.php | 4 +- system/Models/Fields.php | 33 +- system/Models/ProcessImage.php | 45 +-- system/Models/Validation.php | 14 +- system/Plugin.php | 17 +- system/author/css/fontello/LICENSE.txt | 9 + system/author/css/fontello/config.json | 108 +++++- .../css/fontello/css/fontello-codes.css | 33 +- .../css/fontello/css/fontello-embedded.css | 45 ++- .../css/fontello/css/fontello-ie7-codes.css | 33 +- .../author/css/fontello/css/fontello-ie7.css | 33 +- system/author/css/fontello/css/fontello.css | 47 ++- system/author/css/fontello/demo.html | 47 ++- system/author/css/fontello/font/fontello.eot | Bin 9188 -> 14640 bytes system/author/css/fontello/font/fontello.svg | 44 ++- system/author/css/fontello/font/fontello.ttf | Bin 9020 -> 14472 bytes system/author/css/fontello/font/fontello.woff | Bin 5504 -> 8808 bytes .../author/css/fontello/font/fontello.woff2 | Bin 4648 -> 7580 bytes system/author/css/style.css | 85 ++++- system/author/editor/editor-blox.twig | 11 +- system/author/editor/publish-controller.twig | 7 +- system/author/js/vue-blox.js | 313 +++++++++++++++--- system/author/js/vue-publishcontroller.js | 18 +- system/author/partials/fields.twig | 4 +- system/author/partials/form.twig | 11 +- themes/typemill/css/style.css | 10 +- themes/typemill/index.twig | 2 +- themes/typemill/partials/navigation.twig | 4 +- themes/typemill/partials/navigationCover.twig | 4 +- themes/typemill/typemill.yaml | 2 +- 39 files changed, 1357 insertions(+), 255 deletions(-) rename content/00-Welcome/{01-Write-Content.md => 02-Write-Content.md} (100%) rename content/00-Welcome/{02-Get-Help.md => 03-Get-Help.md} (100%) create mode 100644 content/00-Welcome/04-markdown-test.md create mode 100644 media/markdown.png delete mode 100644 media/readme.txt diff --git a/cache/lastCache.txt b/cache/lastCache.txt index dd5a19d..1185c30 100644 --- a/cache/lastCache.txt +++ b/cache/lastCache.txt @@ -1 +1 @@ -1546551286 \ No newline at end of file +1548436334 \ No newline at end of file diff --git a/content/00-Welcome/01-Write-Content.md b/content/00-Welcome/02-Write-Content.md similarity index 100% rename from content/00-Welcome/01-Write-Content.md rename to content/00-Welcome/02-Write-Content.md diff --git a/content/00-Welcome/02-Get-Help.md b/content/00-Welcome/03-Get-Help.md similarity index 100% rename from content/00-Welcome/02-Get-Help.md rename to content/00-Welcome/03-Get-Help.md diff --git a/content/00-Welcome/04-markdown-test.md b/content/00-Welcome/04-markdown-test.md new file mode 100644 index 0000000..3174e5f --- /dev/null +++ b/content/00-Welcome/04-markdown-test.md @@ -0,0 +1,290 @@ +# Markdown Reference and Test Page + +Markdown is a simple and universal syntax for text formatting. More and more writers switch to markdown, because they can format their text during the writing process without using any format-buttons. Once they are familiar with the markdown syntax, they can write formatted text much easier and faster than with any standard HTML-editor. + +Developers love markdown, because it is much cleaner and saver than HTML. And they can easily convert markdown to a lot of other document formats like HTML and others. + +If you develop a theme for TYPEMILL, please take care that all elements on this page are designed properly. + +##Table of Contents + +To create a table of contents, simply write `[TOC]` in a separate line. It will be replaced with a table of contents like this automatically. + +[TOC] + +## Headlines + +``` +Headlines are simply done with hash chars like this: +# First Level Headline +## Second Level Headline +### Third Level Headline +#### Fourth Level Headline +##### Fifth Level Headline +###### Sixth Level Headline +``` + +### Third Level Headline {.myclass} + +A third headline is more decent and lower prioritized than a second level headline. + +#### Fourth Level Headline + +A fourth level headline is more decent and lower prioritized than a third level headline. + +##### Fifth Level Headline + +A fifth level headline is more decent and lower prioritized than a fourth level headline. + +##### Sixth Level Headline + +A sixth level headline is more decent and lower prioritized than a fifths level headline. + +##Paragraph + +```` +A paragraph is a simple text-block separated with a new line above and below. +```` + +A paragraph is a simple text-block separated with a new line above and below. + +## Soft Linebreak + +```` +For a soft linebreak (eg. for dialoges in literature), add two spaces at the end of a line and use a simple return. +She said: "Hello" +He said: "again" +```` + +For a soft linebreak (eg. for dialoges in literature), add two spaces at the end of a line and use a simple return. + +She said: "Hello" +He said: "again" + +##Emphasis + +```` +For italic text use one *asterix* or one _underscore_. +For bold text use two **asterix** or two __underscores__. +```` + +For italic text use one *asterix* or one _underscore_. + +For bold text use two **asterix** or two __underscores__. + +##Lists + +```` +For an unordered list use a dash +- like +- this +Or use one asterix +* like +* this +For an ordered list use whatever number you want and add a dot: +1. like +1. this +```` + +For an unordered list use a dash + +- like +- this + +Or use one asterix + +* like +* this + +For an ordered list use whatever number you want and add a dot: + +1. like +2. this + +## Horizontal Rule + +``` +Easily created for example with three dashes like this: +--- +``` + +Easily created for example with three dashes like this: + +--- + +##Links + +```` +This is an ordinary [Link](http://typemill.net). +Links can also be [relative](/info). +You can also add a [title](http://typemill.net "typemill"). +You can even add [ids or classes](http://typemill.net){#myid .myclass}. +Or you can use a shortcut like http://typemill.net. +```` + +This is an ordinary [Link](http://typemill.net). + +Links can also be [relative](/info). + +You can also add a [title](http://typemill.net "typemill"). + +You can even add [ids or classes](http://typemill.net){#myid .myclass}. + +Or you can use a shortcut like http://typemill.net. + +##Images + +```` +The same rules as with links, but with a ! +![alt-text](media/markdown.png) +![alt-text](media/markdown.png "my title") +![alt-text](media/markdown.png "my title"){#myid .myclass width=100px} +```` + +The same rules as with links, but with a ! + +![alt-text](media/markdown.png){.imgClass} + +![alt-text](media/markdown.png "my title"){.imgClass} + +![alt-text](media/markdown.png "my title"){#myid .myclass width=100px} + +## Linked Images + +```` +You can link an image with a nested syntax like this: +[![alt-text](media/markdown.png)](https://typemill.net) +```` + +You can link an image with a nested syntax like this: + +[![alt-text](media/markdown.png){.imgClass}](https://typemill.net) + +## Image Position + +```` +You can controll the image position with the classes .left, .right and .middle like this: +![alt-text](media/markdown.png){.left} +![alt-text](media/markdown.png){.right} +![alt-text](media/markdown.png){.middle} +```` + +![image float left](media/markdown.png){.left} + +The first image should float on the left side of this paragraph. This might not work with all themes. If you are a theme developer, please ensure that you support the image classes "left", "right" and "middle". + +![image float right](media/markdown.png){.right} + +The second image should float on the right side of this paragraph. This might not work with all themes. If you are a theme developer, please ensure that you support the image classes "left", "right" and "middle". + +![image middle](media/markdown.png){.middle} + +The thirds image should be placed above this paragraph and centered to the middle of the content area. This might not work with all themes. If you are a theme developer, please ensure that you support the image classes "left", "right" and "middle". + +## Blockquote + +``` +There are always some women and men with wise words +> But I usually don't read them, to be honest. +``` + +There always some women and men with wise words + +> But I usually don't read them, to be honest. + +##Footnotes + +```` +You can write footnotes[^1] with markdown. +Scroll down to the end of the page[^2] and look for the footnotes. +Add the footnote text at the bottom of the page like this: +[^1]: Thank you for scrolling. +[^2]: This is the end of the page. +```` + +You can write footnotes[^1] with markdown. + +Scroll down to the end of the page[^2] and look for the footnotes. + +## Abbreviations + +```` +*[HTML]: Hyper Text Markup Language +*[W3C]: World Wide Web Consortium +```` + +You won't see the abbreviation directly, but if you write HTML or W3C somewhere, then you can see the tooltip with the explanation. + +*[HTML]: Hyper Text Markup Language + +*[W3C]: World Wide Web Consortium + +## Definition List + +```` +Apple +: Pomaceous fruit of plants of the genus Malus in the family Rosaceae. +Orange +: The fruit of an evergreen tree of the genus Citrus. +```` + +Apple +: Pomaceous fruit of plants of the genus Malus in +the family Rosaceae. + +Orange +: The fruit of an evergreen tree of the genus Citrus. + +## Tables + +```` +|name |usage | +|-----------|-----------| +| My Name | For Me | +| Your Name | For You | +```` + +| Name | Usage | +| --------- | ------- | +| My Name | For Me | +| Your Name | For You | + +## Code + +```` +Let us create some `` like this +```` + +Let us create some `` and now let us check, if a codeblock works: + +```` +Use four apostroph like this: +\`​``` + +\```` +```` + +## Math + +Please activate the math-plugin to use mathematical expressions with LaTeX syntax. You can choose between MathJax or the newer KaTeX library. MathJax is included from a CDN, KaTeX is included in the plugin. So if you don't want to fetch code from a CDN, use KaTeX instead. The markdown syntax in TYPEMILL is the same for both libraries. + +```` +Use inline LaTeX ``x = \int_{0^1}^1(-b \pm \sqrt{b^2-4ac})/(2a)`` with two backtipps like this. +```` + +Use inline LaTeX ``x = \int_{0^1}^1(-b \pm \sqrt{b^2-4ac})/(2a)`` like this. + +```` +Or specify latex sytnax for a code-block like this: +​````latex +x = \int_{0^1}^1(-b \pm \sqrt{b^2-4ac})/(2a) +​```` +```` + +​````latex +x = \int_{0^1}^1(-b \pm \sqrt{b^2-4ac})/(2a) +​```` + diff --git a/media/markdown.png b/media/markdown.png new file mode 100644 index 0000000000000000000000000000000000000000..9470f0878f45a9a2cff72ff6fcbfd550daac338f GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0vp^7l62dgBeKrei7dYq`CrpLR^9LAOXTm9Qr_~=#~We z1v9Yyd~!_M(vP`aV%n=e&u8XrO#7C6X^sIu&jEYRlioIG4zDN;YvGZ1xiA})M+sipGn)>Uzi2f0< zawwCo6Iht@KcDlaZhVK)8&i({E)z$|DM(0V1CP=1WgNGz$TXKfi%1FB+1GIOw2{K< zEe~UNCs`@1p7tQ}Wr~-A^nuNdnTHg>lot1CyA3PIru9OTBQX$!t1ftLm<(NsJ4xeXssydZNK; z-x*E$1uTbduuC~}v-nFqOVp1#&b9t?qQKz?d`=Q8EVW)qn%V>HzT?QjoM@{3Y^Lr< zkQ|Sb2FF$}LI0&~{y^7+3mkHc@VWQhN34S(NkYbvgMHz}>g$)Y6_`2_3)mE8S|09R zps3UU^39(Ghd#bj;5#APRwVmS;n?rL3C9@|-|#tEbbRFFFY^(2_D-RtS>pYNgySrR zJUmVo8aDTM%2GhyZfQRB_-w*)W{_~AK-D~uj>m>}3`u)z5BBjNYL_d2!M{z6 zL$-dyR)?PL);Ee2j@_2cu@!jymT#LJ$9|tX2dA+b-s9P3)&VqTtK*9u&1<=n_DJTW z3Ou%r1_pVB@r_Fg$7UZ4V*{!xllmWGA>$rB}@w|>6NxNG+0+CLx_l+`Z(`1%xw{maT4ewZCqz9($evVZC;Q_hz$DF^?SO@Dvz u{g1@k-QQ9Trt4aK*d^zBrvLiaKb#L%vFaWBxB4$A<9oXLxvXgetHeader('HTTP_REFERER'); - + # simple bot check with honeypot if(isset($params[$pluginName]['personal-mail'])) { @@ -31,6 +31,35 @@ class FormController extends Controller unset($params[$pluginName]['personal-mail']); } + #recaptcha check + if(isset($params['g-recaptcha-response'])) + { + $recaptchaApi = 'https://www.google.com/recaptcha/api/siteverify'; + $settings = $this->c->get('settings'); + $secret = isset($settings['plugins'][$pluginName]['recaptcha_secretkey']) ? $settings['plugins'][$pluginName]['recaptcha_secretkey'] : false; + $recaptchaRequest = ['secret' => $secret, 'response' => $params['g-recaptcha-response']]; + + # use key 'http' even if you send the request to https://... + $options = array( + 'http' => array( + 'header' => "Content-type: application/x-www-form-urlencoded\r\n", + 'method' => 'POST', + 'content' => http_build_query($recaptchaRequest), + 'timeout' => 5 + ) + ); + + $context = stream_context_create($options); + $result = file_get_contents($recaptchaApi, false, $context); + $result = json_decode($result); + + if ($result === FALSE || $result->success === FALSE) + { + $this->c->flash->addMessage('publicform', 'bot'); + return $response->withRedirect($referer[0]); + } + } + if(isset($params[$pluginName])) { # validate the user-input diff --git a/system/Controllers/SettingsController.php b/system/Controllers/SettingsController.php index bf3ae27..63594a9 100644 --- a/system/Controllers/SettingsController.php +++ b/system/Controllers/SettingsController.php @@ -30,6 +30,17 @@ class SettingsController extends Controller { if($request->isPost()) { + $referer = $request->getHeader('HTTP_REFERER'); + $uri = $request->getUri(); + $base_url = $uri->getBaseUrl(); + + # security, users should not be able to fake post with settings from other typemill pages. + if(!isset($referer[0]) OR $referer[0] !== $base_url . '/tm/settings' ) + { + $this->c->flash->addMessage('error', 'illegal referer'); + return $response->withRedirect($this->c->router->pathFor('settings.show')); + } + $settings = \Typemill\Settings::getUserSettings(); $params = $request->getParams(); $newSettings = isset($params['settings']) ? $params['settings'] : false; @@ -47,16 +58,16 @@ class SettingsController extends Controller 'editor' => $newSettings['editor'], ); - $copyright = $this->getCopyright(); + $copyright = $this->getCopyright(); $validate->settings($newSettings, $copyright, 'settings'); } else { $this->c->flash->addMessage('error', 'Wrong Input'); - return $response->withRedirect($this->c->router->pathFor('settings.show')); + return $response->withRedirect($this->c->router->pathFor('settings.show')); } - + if(isset($_SESSION['errors'])) { $this->c->flash->addMessage('error', 'Please correct the errors'); @@ -133,7 +144,7 @@ class SettingsController extends Controller /* iterate through the plugins in the stored user settings */ foreach($userSettings['plugins'] as $pluginName => $pluginUserSettings) - { + { /* add plugin to plugin Data, if active, set it first */ /* if plugin is active, list it first */ if($userSettings['plugins'][$pluginName]['active'] == true) @@ -170,11 +181,19 @@ class SettingsController extends Controller /* if the plugin defines forms and fields, so that the user can edit the plugin settings in the frontend */ if(isset($pluginOriginalSettings['forms']['fields'])) { + # if the plugin defines frontend fields + if(isset($pluginOriginalSettings['public'])) + { + $pluginOriginalSettings['forms']['fields']['recaptcha'] = ['type' => 'checkbox', 'label' => 'Google Recaptcha', 'checkboxlabel' => 'Activate Recaptcha' ]; + $pluginOriginalSettings['forms']['fields']['recaptcha_webkey'] = ['type' => 'text', 'label' => 'Recaptcha Website Key', 'help' => 'Add the recaptcha website key here. You can get the key from the recaptcha website.', 'description' => 'The website key is mandatory if you activate the recaptcha field']; + $pluginOriginalSettings['forms']['fields']['recaptcha_secretkey'] = ['type' => 'text', 'label' => 'Recaptcha Secret Key', 'help' => 'Add the recaptcha secret key here. You can get the key from the recaptcha website.', 'description' => 'The secret key is mandatory if you activate the recaptcha field']; + } + /* get all the fields and prefill them with the dafault-data, the user-data or old input data */ $fields = $fieldsModel->getFields($userSettings, 'plugins', $pluginName, $pluginOriginalSettings); /* overwrite original plugin form definitions with enhanced form objects */ - $plugins[$pluginName]['forms']['fields'] = $fields; + $plugins[$pluginName]['forms']['fields'] = $fields; } } @@ -192,7 +211,18 @@ class SettingsController extends Controller public function saveThemes($request, $response, $args) { if($request->isPost()) - { + { + $referer = $request->getHeader('HTTP_REFERER'); + $uri = $request->getUri(); + $base_url = $uri->getBaseUrl(); + + # security, users should not be able to fake post with settings from other typemill pages. + if(!isset($referer[0]) OR $referer[0] !== $base_url . '/tm/themes' ) + { + $this->c->flash->addMessage('error', 'illegal referer'); + return $response->withRedirect($this->c->router->pathFor('themes.show')); + } + $userSettings = \Typemill\Settings::getUserSettings(); $params = $request->getParams(); $themeName = isset($params['theme']) ? $params['theme'] : false; @@ -231,11 +261,22 @@ class SettingsController extends Controller return $response->withRedirect($this->c->router->pathFor('themes.show')); } } - + public function savePlugins($request, $response, $args) { if($request->isPost()) { + $referer = $request->getHeader('HTTP_REFERER'); + $uri = $request->getUri(); + $base_url = $uri->getBaseUrl(); + + # security, users should not be able to fake post with settings from other typemill pages. + if(!isset($referer[0]) OR $referer[0] !== $base_url . '/tm/plugins' ) + { + $this->c->flash->addMessage('error', 'illegal referer'); + return $response->withRedirect($this->c->router->pathFor('plugins.show')); + } + $userSettings = \Typemill\Settings::getUserSettings(); $pluginSettings = array(); $userInput = $request->getParams(); @@ -307,6 +348,14 @@ class SettingsController extends Controller $originalFields[$fieldName] = $fieldValue; } } + + # if the plugin defines frontend fields + if(isset($originalSettings['public'])) + { + $originalFields['recaptcha'] = ['type' => 'checkbox', 'label' => 'Google Recaptcha', 'checkboxlabel' => 'Activate Recaptcha' ]; + $originalFields['recaptcha_webkey'] = ['type' => 'text', 'label' => 'Recaptcha Website Key', 'help' => 'Add the recaptcha website key here. You can get the key from the recaptcha website.', 'description' => 'The website key is mandatory if you activate the recaptcha field']; + $originalFields['recaptcha_secretkey'] = ['type' => 'text', 'label' => 'Recaptcha Secret Key', 'help' => 'Add the recaptcha secret key here. You can get the key from the recaptcha website.', 'description' => 'The secret key is mandatory if you activate the recaptcha field']; + } /* take the user input data and iterate over all fields and values */ foreach($userInput as $fieldName => $fieldValue) @@ -386,6 +435,17 @@ class SettingsController extends Controller { if($request->isPost()) { + $referer = $request->getHeader('HTTP_REFERER'); + $uri = $request->getUri(); + $base_url = $uri->getBaseUrl(); + + # security, users should not be able to fake post with settings from other typemill pages. + if(!isset($referer[0]) OR $referer[0] !== $base_url . '/tm/user/new' ) + { + $this->c->flash->addMessage('error', 'illegal referer'); + return $response->withRedirect($this->c->router->pathFor('user.new')); + } + $params = $request->getParams(); $user = new User(); $userroles = $user->getUserroles(); @@ -409,7 +469,18 @@ class SettingsController extends Controller public function updateUser($request, $response, $args) { if($request->isPost()) - { + { + $referer = $request->getHeader('HTTP_REFERER'); + $uri = $request->getUri(); + $base_url = $uri->getBaseUrl(); + + # security, users should not be able to fake post with settings from other typemill pages. + if(!isset($referer[0]) OR strpos($referer[0], $base_url . '/tm/user/') === false ) + { + $this->c->flash->addMessage('error', 'illegal referer'); + return $response->withRedirect($this->c->router->pathFor('user.list')); + } + $params = $request->getParams(); $user = new User(); $userroles = $user->getUserroles(); @@ -456,6 +527,17 @@ class SettingsController extends Controller { if($request->isPost()) { + $referer = $request->getHeader('HTTP_REFERER'); + $uri = $request->getUri(); + $base_url = $uri->getBaseUrl(); + + # security, users should not be able to fake post with settings from other typemill pages. + if(!isset($referer[0]) OR strpos($referer[0], $base_url . '/tm/user/') === false ) + { + $this->c->flash->addMessage('error', 'illegal referer'); + return $response->withRedirect($this->c->router->pathFor('user.list')); + } + $params = $request->getParams(); $validate = new Validation(); $user = new User(); diff --git a/system/Extensions/ParsedownExtension.php b/system/Extensions/ParsedownExtension.php index 85ce938..23c80ad 100644 --- a/system/Extensions/ParsedownExtension.php +++ b/system/Extensions/ParsedownExtension.php @@ -18,15 +18,19 @@ class ParsedownExtension extends \ParsedownExtra array_unshift($this->BlockTypes['['], 'TableOfContents'); } - function text($text) + public function text($text) { $Elements = $this->textElements($text); return $Elements; } - function markup($Elements, $relurl) - { + public function markup($Elements, $relurl) + { + + # make relurl available for other functions + $this->relurl = $relurl; + # convert to markup $markup = $this->elements($Elements); @@ -39,7 +43,7 @@ class ParsedownExtension extends \ParsedownExtra # create table of contents if(isset($this->DefinitionData['TableOfContents'])) { - $TOC = $this->buildTOC($this->headlines, $relurl); + $TOC = $this->buildTOC($this->headlines); $markup = preg_replace('%(]*>\[TOC\]

)%i', $TOC, $markup); } @@ -105,10 +109,10 @@ class ParsedownExtension extends \ParsedownExtra return $Block; } } - + # build the markup for table of contents - protected function buildTOC($headlines, $relurl) + protected function buildTOC($headlines) { $markup = '
    '; @@ -123,7 +127,7 @@ class ParsedownExtension extends \ParsedownExtra $markup .= '
      '; } - $markup .= '
    • ' . $headline['text'] . ''; + $markup .= '
    • ' . $headline['text'] . ''; if($thisLevel == $nextLevel) { @@ -143,6 +147,139 @@ class ParsedownExtension extends \ParsedownExtra return $markup; } + + # + # Footnote Marker + + protected function inlineFootnoteMarker($Excerpt) + { + if (preg_match('/^\[\^(.+?)\]/', $Excerpt['text'], $matches)) + { + $name = $matches[1]; + + if ( ! isset($this->DefinitionData['Footnote'][$name])) + { + return; + } + + $this->DefinitionData['Footnote'][$name]['count'] ++; + + if ( ! isset($this->DefinitionData['Footnote'][$name]['number'])) + { + $this->DefinitionData['Footnote'][$name]['number'] = ++ $this->footnoteCount; # » & + } + + $Element = array( + 'name' => 'sup', + 'attributes' => array('id' => 'fnref'.$this->DefinitionData['Footnote'][$name]['count'].':'.$name), + 'element' => array( + 'name' => 'a', + 'attributes' => array('href' => $this->relurl . '#fn:' . $name, 'class' => 'footnote-ref'), + 'text' => $this->DefinitionData['Footnote'][$name]['number'], + ), + ); + + return array( + 'extent' => strlen($matches[0]), + 'element' => $Element, + ); + } + } + + public $footnoteCount = 0; + + protected function buildFootnoteElement() + { + $Element = array( + 'name' => 'div', + 'attributes' => array('class' => 'footnotes'), + 'elements' => array( + array('name' => 'hr'), + array( + 'name' => 'ol', + 'elements' => array(), + ), + ), + ); + + uasort($this->DefinitionData['Footnote'], 'self::sortFootnotes'); + + foreach ($this->DefinitionData['Footnote'] as $definitionId => $DefinitionData) + { + if ( ! isset($DefinitionData['number'])) + { + continue; + } + + $text = $DefinitionData['text']; + + $textElements = parent::textElements($text); + + $numbers = range(1, $DefinitionData['count']); + + $backLinkElements = array(); + + foreach ($numbers as $number) + { + $backLinkElements[] = array('text' => ' '); + $backLinkElements[] = array( + 'name' => 'a', + 'attributes' => array( + 'href' => $this->relurl . "#fnref$number:$definitionId", + 'rev' => 'footnote', + 'class' => 'footnote-backref', + ), + 'rawHtml' => '↩', + 'allowRawHtmlInSafeMode' => true, + 'autobreak' => false, + ); + } + + unset($backLinkElements[0]); + + $n = count($textElements) -1; + + if ($textElements[$n]['name'] === 'p') + { + $backLinkElements = array_merge( + array( + array( + 'rawHtml' => ' ', + 'allowRawHtmlInSafeMode' => true, + ), + ), + $backLinkElements + ); + + unset($textElements[$n]['name']); + + $textElements[$n] = array( + 'name' => 'p', + 'elements' => array_merge( + array($textElements[$n]), + $backLinkElements + ), + ); + } + else + { + $textElements[] = array( + 'name' => 'p', + 'elements' => $backLinkElements + ); + } + + $Element['elements'][1]['elements'] []= array( + 'name' => 'li', + 'attributes' => array('id' => 'fn:'.$definitionId), + 'elements' => array_merge( + $textElements + ), + ); + } + + return $Element; + } # math support. Check https://github.com/aidantwoods/parsedown/blob/mathjaxlatex/ParsedownExtensionMathJaxLaTeX.php @@ -265,7 +402,61 @@ class ParsedownExtension extends \ParsedownExtra $Block['element']['text'] = "\$\$\n" . $text . "\n\$\$"; return $Block; } - + + # advanced attribute data, check parsedown extra plugin: https://github.com/tovic/parsedown-extra-plugin + protected function parseAttributeData($text) { + // Allow compact attributes ... + $text = str_replace(array('#', '.'), array(' #', ' .'), $text); + if (strpos($text, '="') !== false || strpos($text, '=\'') !== false) { + $text = preg_replace_callback('#([-\w]+=)(["\'])([^\n]*?)\2#', function($m) { + $s = str_replace(array( + ' #', + ' .', + ' ' + ), array( + '#', + '.', + "\x1A" + ), $m[3]); + return $m[1] . $m[2] . $s . $m[2]; + }, $text); + } + $attrs = array(); + foreach (explode(' ', $text) as $v) { + if (!$v) continue; + // `{#foo}` + if ($v[0] === '#' && isset($v[1])) { + $attrs['id'] = substr($v, 1); + // `{.foo}` + } else if ($v[0] === '.' && isset($v[1])) { + $attrs['class'][] = substr($v, 1); + // ~ + } else if (strpos($v, '=') !== false) { + $vv = explode('=', $v, 2); + // `{foo=}` + if ($vv[1] === "") { + $attrs[$vv[0]] = ""; + // `{foo="bar baz"}` + // `{foo='bar baz'}` + } else if ($vv[1][0] === '"' && substr($vv[1], -1) === '"' || $vv[1][0] === "'" && substr($vv[1], -1) === "'") { + $attrs[$vv[0]] = str_replace("\x1A", ' ', substr(substr($vv[1], 1), 0, -1)); + // `{foo=bar}` + } else { + $attrs[$vv[0]] = $vv[1]; + } + // `{foo}` + } else { + $attrs[$v] = $v; + } + } + if (isset($attrs['class'])) { + $attrs['class'] = implode(' ', $attrs['class']); + } + return $attrs; + } + + protected $regexAttribute = '(?:[#.][-\w:\\\]+[ ]*|[-\w:\\\]+(?:=(?:["\'][^\n]*?["\']|[^\s]+)?)?[ ]*)'; + # turn markdown into an array of markdown blocks for typemill edit mode function markdownToArrayBlocks($markdown) { diff --git a/system/Models/Field.php b/system/Models/Field.php index 2ddf11a..b4ddb89 100644 --- a/system/Models/Field.php +++ b/system/Models/Field.php @@ -262,7 +262,7 @@ class Field } - private function setHelpers($fieldConfigs) + public function setHelpers($fieldConfigs) { foreach($fieldConfigs as $key => $config) { @@ -277,7 +277,7 @@ class Field { if(isset($this->$helperName)) { - return $this->helperName; + return $this->$helperName; } return false; } diff --git a/system/Models/Fields.php b/system/Models/Fields.php index b3ad4d5..d5bf8c9 100644 --- a/system/Models/Fields.php +++ b/system/Models/Fields.php @@ -31,6 +31,20 @@ class Fields } else { + # For label, helptext and description you can use the value of another field. This is useful e.g. to localize the label of public forms via plugin settings. + if(isset($fieldConfigurations['label']) && isset($userSettings[$objectType][$objectName][$fieldConfigurations['label']])) + { + $fieldConfigurations['label'] = $userSettings[$objectType][$objectName][$fieldConfigurations['label']]; + } + if(isset($fieldConfigurations['help']) && isset($userSettings[$objectType][$objectName][$fieldConfigurations['help']])) + { + $fieldConfigurations['help'] = $userSettings[$objectType][$objectName][$fieldConfigurations['help']]; + } + if(isset($fieldConfigurations['description']) && isset($userSettings[$objectType][$objectName][$fieldConfigurations['description']])) + { + $fieldConfigurations['description'] = $userSettings[$objectType][$objectName][$fieldConfigurations['description']]; + } + # for each field generate a new field object with the field name and the field configurations $field = new Field($fieldName, $fieldConfigurations); @@ -64,23 +78,22 @@ class Fields } } elseif($field->getType() == "checkbox") - { + { # checkboxes need a special treatment, because field does not exist in settings if unchecked by user - if(!isset($userSettings[$objectType][$objectName][$fieldName])) + if(isset($userSettings[$objectType][$objectName][$fieldName])) { - $field->unsetAttribute('checked'); + $field->setAttribute('checked', 'true'); + } + else + { + $field->unsetAttribute('chhecked'); } } else - { + { $field->setAttributeValue('value', $userValue); } - - if(isset($fieldConfigurations['label']) && isset($userSettings[$objectType][$objectName][$fieldConfigurations['label']])) - { - $field->setLabel($userSettings[$objectType][$objectName][$fieldConfigurations['label']]); - } - + # add the field to the field-List $fields[] = $field; diff --git a/system/Models/ProcessImage.php b/system/Models/ProcessImage.php index 48a6018..27901f7 100644 --- a/system/Models/ProcessImage.php +++ b/system/Models/ProcessImage.php @@ -145,14 +145,6 @@ class ProcessImage { $copiedImages = array(); $source_aspect_ratio = $imageSize['width'] / $imageSize['height']; - - #check transparency - $transparent_index = false; - - if ($imageType = ("png" || "gif")) - { - $transparent_index = imagecolortransparent($imageData); - } foreach($desiredSizes as $key => $desiredSize) { @@ -172,25 +164,27 @@ class ProcessImage $temp_height = ( int ) ($desiredSize['width'] / $source_aspect_ratio); $temp_height = round($temp_height, 0); } - + # Create a temporary GD image with desired size $temp_gdim = imagecreatetruecolor( $temp_width, $temp_height ); - if ($transparent_index >= 0 && $imageType == "gif") - { + if ($imageType == "gif") + { + $transparent_index = imagecolortransparent($imageData); imagepalettecopy($imageData, $temp_gdim); imagefill($temp_gdim, 0, 0, $transparent_index); imagecolortransparent($temp_gdim, $transparent_index); imagetruecolortopalette($temp_gdim, true, 256); } - elseif($transparent_index >= 0 && $imageType == "png") + elseif($imageType == "png") { imagealphablending($temp_gdim, false); - imagesavealpha($temp_gdim,true); + imagesavealpha($temp_gdim, true); $transparent = imagecolorallocatealpha($temp_gdim, 255, 255, 255, 127); imagefilledrectangle($temp_gdim, 0, 0, $temp_width, $temp_height, $transparent); } + # resize image imagecopyresampled( $temp_gdim, $imageData, @@ -200,36 +194,42 @@ class ProcessImage $imageSize['width'], $imageSize['height'] ); + $copiedImages[$key] = $temp_gdim; + + /* + # Copy cropped region from temporary image into the desired GD image $x0 = ( $temp_width - $desiredSize['width'] ) / 2; $y0 = ( $temp_height - $desiredSize['height'] ) / 2; $desired_gdim = imagecreatetruecolor( $desiredSize['width'], $desiredSize['height'] ); - if ($transparent_index >= 0 && $imageType == "gif") - { - # GIF - imagepalettecopy($imageData, $desired_gdim); + if ($imageType == "gif") + { + imagepalettecopy($temp_gdim, $desired_gdim); imagefill($desired_gdim, 0, 0, $transparent_index); imagecolortransparent($desired_gdim, $transparent_index); imagetruecolortopalette($desired_gdim, true, 256); } - if ($transparent_index >= 0 && $imageType == "png") - { + elseif($imageType == "png") + { imagealphablending($desired_gdim, false); imagesavealpha($desired_gdim,true); $transparent = imagecolorallocatealpha($desired_gdim, 255, 255, 255, 127); - imagefilledrectangle($desired_gdim, 0, 0, $desiredSize['width'], $desiredSize['height'], $transparent); + imagefilledrectangle($desired_gdim, 0, 0, $desired_size['with'], $desired_size['height'], $transparent); } - - imagecopy( + + imagecopyresampled( $desired_gdim, $temp_gdim, 0, 0, + 0, 0, $x0, $y0, $desiredSize['width'], $desiredSize['height'] ); $copiedImages[$key] = $desired_gdim; + + */ } return $copiedImages; } @@ -332,4 +332,5 @@ class ProcessImage } } + ?> \ No newline at end of file diff --git a/system/Models/Validation.php b/system/Models/Validation.php index 316db14..70d7aaa 100644 --- a/system/Models/Validation.php +++ b/system/Models/Validation.php @@ -76,13 +76,13 @@ class Validation Validator::addRule('markdownSecure', function($field, $value, array $params, array $fields) { - /* strip out code blocks and blockquotes */ - $value = preg_replace('/[````][\s\S]+?[````]/', '', $value); - $value = preg_replace('/[```][\s\S]+?[```]/', '', $value); - $value = preg_replace('/[``][\s\S]+?[``]/', '', $value); - $value = preg_replace('/`[\s\S]+?`/', '', $value); - $value = preg_replace('/>[\s\S]+?[\n\r]/', '', $value); - + /* strip out code blocks and blockquotes */ + $value = preg_replace('/`{4,}[\s\S]+?`{4,}/', '', $value); + $value = preg_replace('/`{3,}[\s\S]+?`{3,}/', '', $value); + $value = preg_replace('/`{2,}[\s\S]+?`{2,}/', '', $value); + $value = preg_replace('/`{1,}[\s\S]+?`{1,}/', '', $value); + $value = preg_replace('/>[\s\S]+?[\n\r]/', '', $value); + if ( $value == strip_tags($value) ) { return true; diff --git a/system/Plugin.php b/system/Plugin.php index 6c1c4ed..7230035 100644 --- a/system/Plugin.php +++ b/system/Plugin.php @@ -101,6 +101,7 @@ abstract class Plugin implements EventSubscriberInterface protected function getFormData($pluginName) { $flash = $this->container->flash->getMessages(); + if(isset($flash['formdata'])) { $yaml = new Models\WriteYaml(); @@ -112,6 +113,10 @@ abstract class Plugin implements EventSubscriberInterface return $formdata[$pluginName]; } } + elseif(isset($flash['publicform']) && $flash['publicform'][0] == 'bot') + { + return 'bot'; + } return false; } @@ -122,19 +127,13 @@ abstract class Plugin implements EventSubscriberInterface $pluginDefinitions = \Typemill\Settings::getObjectSettings('plugins', $pluginName); $settings = $this->getSettings(); $buttonlabel = isset($settings['plugins'][$pluginName]['button_label']) ? $settings['plugins'][$pluginName]['button_label'] : false; + $recaptcha = isset($settings['plugins'][$pluginName]['recaptcha']) ? $settings['plugins'][$pluginName]['recaptcha_webkey'] : false; if(isset($pluginDefinitions['public']['fields'])) { # add simple honeypot spam protection $pluginDefinitions['public']['fields']['personal-mail'] = ['type' => 'text', 'class' => 'personal-mail']; - - /* - # add spam protection questions - $spamanswers = ['Albert', 'kalt', 'Gelb']; - shuffle($spamanswers); - $pluginDefinitions['public']['fields']['spamquestion'] = ['type' => 'checkboxlist', 'label' => 'Der Vorname von Einstein lautet', 'required' => true, 'options' => $spamanswers]; - */ - + # get all the fields and prefill them with the dafault-data, the user-data or old input data $fields = $fieldsModel->getFields($settings, 'plugins', $pluginName, $pluginDefinitions, 'public'); @@ -142,7 +141,7 @@ abstract class Plugin implements EventSubscriberInterface $twig = $this->getTwig(); # render each field and add it to the form - $form = $twig->fetch('/partials/form.twig', ['fields' => $fields, 'itemName' => $pluginName, 'object' => 'plugins', 'buttonlabel' => $buttonlabel]); + $form = $twig->fetch('/partials/form.twig', ['fields' => $fields, 'itemName' => $pluginName, 'object' => 'plugins', 'recaptcha_webkey' => $recaptcha, 'buttonlabel' => $buttonlabel]); } return $form; diff --git a/system/author/css/fontello/LICENSE.txt b/system/author/css/fontello/LICENSE.txt index 61ddfd4..c78c853 100644 --- a/system/author/css/fontello/LICENSE.txt +++ b/system/author/css/fontello/LICENSE.txt @@ -19,3 +19,12 @@ Font license info Homepage: http://www.entypo.com +## MFG Labs + + Copyright (C) 2012 by Daniel Bruce + + Author: MFG Labs + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://www.mfglabs.com/ + + diff --git a/system/author/css/fontello/config.json b/system/author/css/fontello/config.json index a70d464..016e03d 100644 --- a/system/author/css/fontello/config.json +++ b/system/author/css/fontello/config.json @@ -7,51 +7,57 @@ "ascent": 850, "glyphs": [ { - "uid": "0f99ab40ab0b4d64a74f2d0deeb03e42", - "css": "videocam", - "code": 59392, + "uid": "47a1f80457068fbeab69fdb83d7d0817", + "css": "youtube-play", + "code": 61802, "src": "fontawesome" }, { "uid": "381da2c2f7fd51f8de877c044d7f439d", "css": "picture", - "code": 59393, + "code": 59392, "src": "fontawesome" }, { "uid": "c709da589c923ba3c2ad48d9fc563e93", "css": "cancel", - "code": 59394, + "code": 59393, "src": "entypo" }, { "uid": "f9cbf7508cd04145ade2800169959eef", "css": "font", - "code": 59395, + "code": 59394, "src": "fontawesome" }, { "uid": "e99461abfef3923546da8d745372c995", "css": "cog", - "code": 59396, + "code": 59395, "src": "fontawesome" }, { "uid": "8b9e6a8dd8f67f7c003ed8e7e5ee0857", "css": "off", - "code": 59397, + "code": 59396, "src": "fontawesome" }, { "uid": "d7271d490b71df4311e32cdacae8b331", "css": "home", - "code": 59398, + "code": 59397, "src": "fontawesome" }, { "uid": "44e04715aecbca7f266a17d5a7863c68", "css": "plus", - "code": 59399, + "code": 59398, + "src": "fontawesome" + }, + { + "uid": "6605ee6441bf499ffa3c63d3c7409471", + "css": "move", + "code": 61511, "src": "fontawesome" }, { @@ -67,9 +73,9 @@ "src": "fontawesome" }, { - "uid": "6605ee6441bf499ffa3c63d3c7409471", - "css": "move", - "code": 61511, + "uid": "872d9516df93eb6b776cc4d94bd97dac", + "css": "video", + "code": 59399, "src": "fontawesome" }, { @@ -85,10 +91,82 @@ "src": "fontawesome" }, { - "uid": "872d9516df93eb6b776cc4d94bd97dac", - "css": "video", + "uid": "7034e4d22866af82bef811f52fb1ba46", + "css": "code", + "code": 61729, + "src": "fontawesome" + }, + { + "uid": "8fb55fd696d9a0f58f3b27c1d8633750", + "css": "table", + "code": 61646, + "src": "fontawesome" + }, + { + "uid": "ab95e1351ebaec5850101097cbf7097f", + "css": "quote-left", + "code": 61709, + "src": "fontawesome" + }, + { + "uid": "a2a74f5e7b7d9ba054897d8c795a326a", + "css": "list-bullet", + "code": 61642, + "src": "fontawesome" + }, + { + "uid": "f6766a8b042c2453a4e153af03294383", + "css": "list-numbered", + "code": 61643, + "src": "fontawesome" + }, + { + "uid": "0c708edd8fae2376b3370aa56d40cf9e", + "css": "header", + "code": 61916, + "src": "fontawesome" + }, + { + "uid": "4e88371fb8857dacc1f66afe6314e426", + "css": "superscript", + "code": 61739, + "src": "fontawesome" + }, + { + "uid": "d4a4a38a40b728f46dad1de4ac950231", + "css": "underline", + "code": 61645, + "src": "fontawesome" + }, + { + "uid": "61c242c9e2134d5864d7fdd57b3c9289", + "css": "strike", + "code": 61644, + "src": "fontawesome" + }, + { + "uid": "02cca871bb69da75e8ee286b7055832c", + "css": "bold", "code": 59400, "src": "fontawesome" + }, + { + "uid": "a8cb1c217f02b073db3670c061cc54d2", + "css": "italic", + "code": 59401, + "src": "fontawesome" + }, + { + "uid": "c5fd68d8253e605e7a78a0c75255b692", + "css": "math", + "code": 61466, + "src": "mfglabs" + }, + { + "uid": "c5845105a87df2ee1999826d90622f6a", + "css": "paragraph", + "code": 61917, + "src": "fontawesome" } ] } \ No newline at end of file diff --git a/system/author/css/fontello/css/fontello-codes.css b/system/author/css/fontello/css/fontello-codes.css index 8d7a602..dc9633a 100644 --- a/system/author/css/fontello/css/fontello-codes.css +++ b/system/author/css/fontello/css/fontello-codes.css @@ -1,15 +1,28 @@ -.icon-videocam:before { content: '\e800'; } /* '' */ -.icon-picture:before { content: '\e801'; } /* '' */ -.icon-cancel:before { content: '\e802'; } /* '' */ -.icon-font:before { content: '\e803'; } /* '' */ -.icon-cog:before { content: '\e804'; } /* '' */ -.icon-off:before { content: '\e805'; } /* '' */ -.icon-home:before { content: '\e806'; } /* '' */ -.icon-plus:before { content: '\e807'; } /* '' */ -.icon-video:before { content: '\e808'; } /* '' */ +.icon-picture:before { content: '\e800'; } /* '' */ +.icon-cancel:before { content: '\e801'; } /* '' */ +.icon-font:before { content: '\e802'; } /* '' */ +.icon-cog:before { content: '\e803'; } /* '' */ +.icon-off:before { content: '\e804'; } /* '' */ +.icon-home:before { content: '\e805'; } /* '' */ +.icon-plus:before { content: '\e806'; } /* '' */ +.icon-video:before { content: '\e807'; } /* '' */ +.icon-bold:before { content: '\e808'; } /* '' */ +.icon-italic:before { content: '\e809'; } /* '' */ +.icon-math:before { content: '\f01a'; } /* '' */ .icon-move:before { content: '\f047'; } /* '' */ .icon-link-ext:before { content: '\f08e'; } /* '' */ .icon-resize-full-alt:before { content: '\f0b2'; } /* '' */ +.icon-list-bullet:before { content: '\f0ca'; } /* '' */ +.icon-list-numbered:before { content: '\f0cb'; } /* '' */ +.icon-strike:before { content: '\f0cc'; } /* '' */ +.icon-underline:before { content: '\f0cd'; } /* '' */ +.icon-table:before { content: '\f0ce'; } /* '' */ .icon-doc-text:before { content: '\f0f6'; } /* '' */ -.icon-folder-empty:before { content: '\f114'; } /* '' */ \ No newline at end of file +.icon-quote-left:before { content: '\f10d'; } /* '' */ +.icon-folder-empty:before { content: '\f114'; } /* '' */ +.icon-code:before { content: '\f121'; } /* '' */ +.icon-superscript:before { content: '\f12b'; } /* '' */ +.icon-youtube-play:before { content: '\f16a'; } /* '' */ +.icon-header:before { content: '\f1dc'; } /* '' */ +.icon-paragraph:before { content: '\f1dd'; } /* '' */ \ No newline at end of file diff --git a/system/author/css/fontello/css/fontello-embedded.css b/system/author/css/fontello/css/fontello-embedded.css index b3d5784..5890c94 100644 --- a/system/author/css/fontello/css/fontello-embedded.css +++ b/system/author/css/fontello/css/fontello-embedded.css @@ -1,15 +1,15 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?46219802'); - src: url('../font/fontello.eot?46219802#iefix') format('embedded-opentype'), - url('../font/fontello.svg?46219802#fontello') format('svg'); + src: url('../font/fontello.eot?5732208'); + src: url('../font/fontello.eot?5732208#iefix') format('embedded-opentype'), + url('../font/fontello.svg?5732208#fontello') format('svg'); font-weight: normal; font-style: normal; } @font-face { font-family: 'fontello'; - src: url('data:application/octet-stream;base64,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') format('woff'), - url('data:application/octet-stream;base64,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RlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=') format('truetype'); + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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') format('truetype'); } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ @@ -17,7 +17,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?46219802#fontello') format('svg'); + src: url('../font/fontello.svg?5732208#fontello') format('svg'); } } */ @@ -52,17 +52,30 @@ /* Uncomment for 3D effect */ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } -.icon-videocam:before { content: '\e800'; } /* '' */ -.icon-picture:before { content: '\e801'; } /* '' */ -.icon-cancel:before { content: '\e802'; } /* '' */ -.icon-font:before { content: '\e803'; } /* '' */ -.icon-cog:before { content: '\e804'; } /* '' */ -.icon-off:before { content: '\e805'; } /* '' */ -.icon-home:before { content: '\e806'; } /* '' */ -.icon-plus:before { content: '\e807'; } /* '' */ -.icon-video:before { content: '\e808'; } /* '' */ +.icon-picture:before { content: '\e800'; } /* '' */ +.icon-cancel:before { content: '\e801'; } /* '' */ +.icon-font:before { content: '\e802'; } /* '' */ +.icon-cog:before { content: '\e803'; } /* '' */ +.icon-off:before { content: '\e804'; } /* '' */ +.icon-home:before { content: '\e805'; } /* '' */ +.icon-plus:before { content: '\e806'; } /* '' */ +.icon-video:before { content: '\e807'; } /* '' */ +.icon-bold:before { content: '\e808'; } /* '' */ +.icon-italic:before { content: '\e809'; } /* '' */ +.icon-math:before { content: '\f01a'; } /* '' */ .icon-move:before { content: '\f047'; } /* '' */ .icon-link-ext:before { content: '\f08e'; } /* '' */ .icon-resize-full-alt:before { content: '\f0b2'; } /* '' */ +.icon-list-bullet:before { content: '\f0ca'; } /* '' */ +.icon-list-numbered:before { content: '\f0cb'; } /* '' */ +.icon-strike:before { content: '\f0cc'; } /* '' */ +.icon-underline:before { content: '\f0cd'; } /* '' */ +.icon-table:before { content: '\f0ce'; } /* '' */ .icon-doc-text:before { content: '\f0f6'; } /* '' */ -.icon-folder-empty:before { content: '\f114'; } /* '' */ \ No newline at end of file +.icon-quote-left:before { content: '\f10d'; } /* '' */ +.icon-folder-empty:before { content: '\f114'; } /* '' */ +.icon-code:before { content: '\f121'; } /* '' */ +.icon-superscript:before { content: '\f12b'; } /* '' */ +.icon-youtube-play:before { content: '\f16a'; } /* '' */ +.icon-header:before { content: '\f1dc'; } /* '' */ +.icon-paragraph:before { content: '\f1dd'; } /* '' */ \ No newline at end of file diff --git a/system/author/css/fontello/css/fontello-ie7-codes.css b/system/author/css/fontello/css/fontello-ie7-codes.css index 2df2fc6..b674429 100644 --- a/system/author/css/fontello/css/fontello-ie7-codes.css +++ b/system/author/css/fontello/css/fontello-ie7-codes.css @@ -1,15 +1,28 @@ -.icon-videocam { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-video { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-video { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-math { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-resize-full-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-list-bullet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-list-numbered { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-strike { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-table { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-doc-text { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-folder-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file +.icon-quote-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-folder-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-superscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-youtube-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-header { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-paragraph { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/system/author/css/fontello/css/fontello-ie7.css b/system/author/css/fontello/css/fontello-ie7.css index 31a5a32..824a3c7 100644 --- a/system/author/css/fontello/css/fontello-ie7.css +++ b/system/author/css/fontello/css/fontello-ie7.css @@ -10,17 +10,30 @@ /* font-size: 120%; */ } -.icon-videocam { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-video { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-video { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-math { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-resize-full-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-list-bullet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-list-numbered { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-strike { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-table { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-doc-text { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-folder-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file +.icon-quote-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-folder-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-superscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-youtube-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-header { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-paragraph { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/system/author/css/fontello/css/fontello.css b/system/author/css/fontello/css/fontello.css index a9f012c..5312f79 100644 --- a/system/author/css/fontello/css/fontello.css +++ b/system/author/css/fontello/css/fontello.css @@ -1,11 +1,11 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?80940798'); - src: url('../font/fontello.eot?80940798#iefix') format('embedded-opentype'), - url('../font/fontello.woff2?80940798') format('woff2'), - url('../font/fontello.woff?80940798') format('woff'), - url('../font/fontello.ttf?80940798') format('truetype'), - url('../font/fontello.svg?80940798#fontello') format('svg'); + src: url('../font/fontello.eot?8966449'); + src: url('../font/fontello.eot?8966449#iefix') format('embedded-opentype'), + url('../font/fontello.woff2?8966449') format('woff2'), + url('../font/fontello.woff?8966449') format('woff'), + url('../font/fontello.ttf?8966449') format('truetype'), + url('../font/fontello.svg?8966449#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -15,7 +15,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?80940798#fontello') format('svg'); + src: url('../font/fontello.svg?8966449#fontello') format('svg'); } } */ @@ -55,17 +55,30 @@ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } -.icon-videocam:before { content: '\e800'; } /* '' */ -.icon-picture:before { content: '\e801'; } /* '' */ -.icon-cancel:before { content: '\e802'; } /* '' */ -.icon-font:before { content: '\e803'; } /* '' */ -.icon-cog:before { content: '\e804'; } /* '' */ -.icon-off:before { content: '\e805'; } /* '' */ -.icon-home:before { content: '\e806'; } /* '' */ -.icon-plus:before { content: '\e807'; } /* '' */ -.icon-video:before { content: '\e808'; } /* '' */ +.icon-picture:before { content: '\e800'; } /* '' */ +.icon-cancel:before { content: '\e801'; } /* '' */ +.icon-font:before { content: '\e802'; } /* '' */ +.icon-cog:before { content: '\e803'; } /* '' */ +.icon-off:before { content: '\e804'; } /* '' */ +.icon-home:before { content: '\e805'; } /* '' */ +.icon-plus:before { content: '\e806'; } /* '' */ +.icon-video:before { content: '\e807'; } /* '' */ +.icon-bold:before { content: '\e808'; } /* '' */ +.icon-italic:before { content: '\e809'; } /* '' */ +.icon-math:before { content: '\f01a'; } /* '' */ .icon-move:before { content: '\f047'; } /* '' */ .icon-link-ext:before { content: '\f08e'; } /* '' */ .icon-resize-full-alt:before { content: '\f0b2'; } /* '' */ +.icon-list-bullet:before { content: '\f0ca'; } /* '' */ +.icon-list-numbered:before { content: '\f0cb'; } /* '' */ +.icon-strike:before { content: '\f0cc'; } /* '' */ +.icon-underline:before { content: '\f0cd'; } /* '' */ +.icon-table:before { content: '\f0ce'; } /* '' */ .icon-doc-text:before { content: '\f0f6'; } /* '' */ -.icon-folder-empty:before { content: '\f114'; } /* '' */ \ No newline at end of file +.icon-quote-left:before { content: '\f10d'; } /* '' */ +.icon-folder-empty:before { content: '\f114'; } /* '' */ +.icon-code:before { content: '\f121'; } /* '' */ +.icon-superscript:before { content: '\f12b'; } /* '' */ +.icon-youtube-play:before { content: '\f16a'; } /* '' */ +.icon-header:before { content: '\f1dc'; } /* '' */ +.icon-paragraph:before { content: '\f1dd'; } /* '' */ \ No newline at end of file diff --git a/system/author/css/fontello/demo.html b/system/author/css/fontello/demo.html index 1cd55b6..0381c18 100644 --- a/system/author/css/fontello/demo.html +++ b/system/author/css/fontello/demo.html @@ -229,11 +229,11 @@ body { } @font-face { font-family: 'fontello'; - src: url('./font/fontello.eot?44201991'); - src: url('./font/fontello.eot?44201991#iefix') format('embedded-opentype'), - url('./font/fontello.woff?44201991') format('woff'), - url('./font/fontello.ttf?44201991') format('truetype'), - url('./font/fontello.svg?44201991#fontello') format('svg'); + src: url('./font/fontello.eot?53292437'); + src: url('./font/fontello.eot?53292437#iefix') format('embedded-opentype'), + url('./font/fontello.woff?53292437') format('woff'), + url('./font/fontello.ttf?53292437') format('truetype'), + url('./font/fontello.svg?53292437#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -298,26 +298,45 @@ body {
      -
      icon-videocam0xe800
      -
      icon-picture0xe801
      -
      icon-cancel0xe802
      -
      icon-font0xe803
      +
      icon-picture0xe800
      +
      icon-cancel0xe801
      +
      icon-font0xe802
      +
      icon-cog0xe803
      -
      icon-cog0xe804
      -
      icon-off0xe805
      -
      icon-home0xe806
      -
      icon-plus0xe807
      +
      icon-off0xe804
      +
      icon-home0xe805
      +
      icon-plus0xe806
      +
      icon-video0xe807
      -
      icon-video0xe808
      +
      icon-bold0xe808
      +
      icon-italic0xe809
      +
      icon-math0xf01a
      icon-move0xf047
      +
      +
      icon-link-ext0xf08e
      icon-resize-full-alt0xf0b2
      +
      icon-list-bullet0xf0ca
      +
      icon-list-numbered0xf0cb
      +
      icon-strike0xf0cc
      +
      icon-underline0xf0cd
      +
      icon-table0xf0ce
      icon-doc-text0xf0f6
      +
      +
      +
      icon-quote-left0xf10d
      icon-folder-empty0xf114
      +
      icon-code0xf121
      +
      icon-superscript0xf12b
      +
      +
      +
      icon-youtube-play0xf16a
      +
      icon-header0xf1dc
      +
      icon-paragraph0xf1dd
      diff --git a/system/author/css/fontello/font/fontello.eot b/system/author/css/fontello/font/fontello.eot index 4576ecb2695c20fefc14f7ddd7d636540237adfb..5518c5975acea8c6dcb3d25e4a15effd633ef919 100644 GIT binary patch delta 6302 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 - + - + - + - + - + - + - + - + - + + + + + @@ -30,9 +34,31 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/system/author/css/fontello/font/fontello.ttf b/system/author/css/fontello/font/fontello.ttf index aa0fe841b5c928af74432df9252539f840aa2374..0e0ce44529deff0a0101f4827b2582ad1ae7f4d9 100644 GIT binary patch delta 6277 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 D1lz^+ diff --git a/system/author/css/fontello/font/fontello.woff b/system/author/css/fontello/font/fontello.woff index cd05de368017b7e01047b73cc4934ffa12aa2066..07ac4a1a93b1604af6dbe41115573eb84f3d0964 100644 GIT binary patch delta 6782 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 JkiN|m`ab}wQCk22 diff --git a/system/author/css/fontello/font/fontello.woff2 b/system/author/css/fontello/font/fontello.woff2 index 2a48cc9c39b5f07a066923745beee45a91005d5a..2573d9248b71d00642acbcc3d759ece68613f82c 100644 GIT binary patch literal 7580 zcmV;N9b@8mPew8T0RR9103DnF4*&oF062&M03AgD0RR9100000000000000000000 z0000SR0dW6hCB!$36^jX2nxhdxv~keh}cSWr7LDNz6LUw^UAoAl`}>}=7;4fVddJwo)Z|k z^IflrM9$?^(KBcrzL1QxKI3O138_3gO=pDE1UxBKD5(iG;l-!F-Iw*(45n+A;Tl)Y?^rc1Dtr?_0Wkjy z2NFL1->fwY$eH9JTVuL&LRGzEsL)nY<`hUt%kw~c26`at$Ow{Ad+iX|QJblq{5~g;h^kH-xGY-IkfbR~3L{Q{=Ad~{qjiMW*G$vgot<_U(_0V`iqR;N|ynglaJlx|fXlNj=-BMPlp68n|fIKYU2JkBR z_W4)rq5uM;@KtkWY3vfBTmF5m+1qtE<8yewIRl{qDx|xIljkj}_&Z_qaU+Ewq4Cuh zYa?VLA-#M#NzAPN^)`k`?)g{OwIQ6T|0Guj`L#IVGsRPFtohVhR{vcdH4QBtJp&^X zGmM}ZPLLw88U-XJXzSTH`IB#OQlCi@5RxiFGDS$P2q_dHr6QzKgw%?VMiJ7gc0oGT zNl35Sj0~!+$f){HWK#VXGOPX@Sycantg8P-Hq~#DT@4sH)R=;tYPcgmHT;oFjXLC3 z<0|r~aqYZ$A$@(b0%O%Dl)6B-z^OP)($jxPoqUS@e~JuT*^%Wll~WPX_P=Y5P)%*( zya#nKVuKC@b7&wa=4TB8&BXT!w0-J!vSiQSn8)sh@K zZ`$H8YI z#h>k&RbrkBf<c03S$Fy6w61ji(y6aDyUFy32k1*i=m z!O@QG_Uk(!kA(^udlyMd(2!69fxtW{!{T>lwFnmYg%a1?V8q?q?s{q{pd!EB(1J<= ztyEwQRj`(7SVs-4rxrF)4>nQ9_UWt{^rP>UWW{HepVlJZ-}Blem)F_edsL?Oe>-F7ruTw_s6zd``Ub~VHb3$ z@en;QqQ6HCyV1LR*sw<|14%u#dH_{ghgJ2I4?1GD{J6Y4wyx4DPTX==kA!YdJJ?^? zY8V7)MXNK|(fHh+mtK($%l^<5dvogPm(UU%u2S1sktv8vkyZw&O@}qYMmctz8 zjo!pZIQ43&&9>iK4^Q>#G>%9P%)kAkV9*VQkAb~jiVqek=U4VuJ<#k?O6!P{iI`Ee~zi`B3M58lD`sgf(?KlJ|zs!*<6@M$;{s zne9-5{5*xb(is^mkMC6QhduXSH7z62V9G)(5FO?YNfMTr1Zzx^8!|p%ZTqfUragN-~A;~%U#hh38htGaaDEBv|USvnE-;fVZv8@BXB=P znE_lE;J=2|*oT4OlK?ab!Fwh`D3Bcp3!yd$44$JTeiD5zlWFEA{fj#j*|skFisWK_ zqz^u8AMN~%?8>y8luPQ-2j6E||Ltkk5$A|^Z8-8o_wwvt#a5)rjSrFG2TomH$gFay zNf$S4yozYI2)(YFKZxDjoZ2mJJrZ$aX_Ft8{k~fncPNQ`;BQ}7eO~ZPAK`=UTGu;+ z)qq_#HQHCNx7pme*qOa0xv!W^E;=T0ihyfJ+6QHfJ_ame175RlcPi}t_xpv|;l--c zS7iopA}x{?y8B~cWgI6eT?)7+ZXwfr&TvwQsic0TH_m8;WC;CQzpEv+!=Yf&DOSq) zVMw8fSWwQlo_>ier&u{&eIU(8c;iL})xIEl)J%p9C;B)kW<6up@wi24YXu?=+Gn!O z-v=+p;G{s6R?ign?be^i&JFn{ujt^1<);K7AOc9XXy?l1CU{a4B+wP}3!o=&-y%phT;6v$5w> zKeWAsAu*80g6Q1`0Efmvp5qzjBLqUk&@$Em9-|&-MI&mEM3Wk;AAPUjnY_7#VhrZ0xDNI;$Xp#hmMugnLQ9 zrw8TJ4>Yl=L-ArR%8x`0%H0$MF>tF#<^oiLV%woZZ6<0&4nAGJgw+-B;r;swhHX;J zR6D`?e0PYyu__Uuho1fetBWbPw zD};iUzJww~<0P|}!Q)l5^bimwfTsnO#R@p%D_#b!1`pGMMwu#OU~I6?>;QLc^iHIe zyG^tQMym^s3vh}0;g{VD(LMBxnkyol&Ig5X@y-lPzlV`40l$uryg9W~q^%j9*q~0l z_*}Rfi@BL~omIBCr)zy-%NFT^vBS;n;4vB_E$kLLK>~~(do3N*lCCHvKT^&Nu6d0w zd+j`}>BC{j7DkctkTJ_MjtrB)Wg}Uzy!KLn{9H&8Cqxq$K^)L|lf0~PaK!Qf2FUeR zf*u+|vFq5iL))M@*eeG$dA~eztmEjnAKt&ek->23(j~#Q$3qV}##B3fer9)Me@TGE zEo>)5SF|P%#>lt*57%l3X&COz{c0h!L3tZvQB+s8OdX_ON-JX|OH9<;EUPEeN<-8m ziOc)U9#zfq0^usKX}L}og@We7kcN9JwY(@Zm8cY}BH$HSAr;^mJX*0R;Qcs{8m!6g zWz6S&rmC6_FMJO8<~-0eO9w>gAlQvI!*$x%t#6@7gG-B5wVhXq1zszlMaSp%Yh1v% zq+xw@G90oN}Mln{Aa-90<2aZaqlFnPzacQ~x z7pfPgwWjrs^i&UUPW@4mEEg7kOalg`4snY9KR--=!jFvRmCVaqyDWK{(ZMhK4|1-e z{rT?ZU1{iC+@2w%c@EeG`>h4J0;goOlyGA!IeJfLJNJUB){lTK!U8+K_^|nP0%p%; z*}KniaAV=vZzGXKnryPI-=5Y?kxeh9Yik$SSz3dx-{xne5dH0}tnb0fbWQ&%D9sRy zbwQ&bTD{AVsmZ}8eQZ$(qVF_rc+^palyoOyCXk}7@25orX+p4_^EnTa}hl=yG>y3>YwR<;fXEdg)r{`7|93rBP$KLTe z>+?0O+Q`7#w6xm5rkcR4G~Ze~ou;{<%o2O7jEE{2sZ6RCTOvmtr|77552d@014^De ze}0Jxp*W1jfg%d{Gl8y@4kpZrFY2lILFa>ub%Pm_;GjkI(;*9F&~@BuuOhJ^rTZ}h zZ<4tGfHy&`Rm=zX`PbM6{;7QbKF`Jn+F05c_C4p9jNsz}NwkeZT;SHt+T$m&M-sS` zgsR6ANhn#QA~#6D_rZlFS>=5w9yv%F`YM*>E1jAZ^*=GBjGsLrMsHgF?nqROs>k!^ zf2TUIR2H~nnjM)W1Kff^&7nzB5lPigvG>9M%Vd)e6$LvB8A z@->cyTs3_~g;$UkCT)oKhoNhP=vNVIremN4b_w{*oRa~Eg_dxOG*e`RLn91v zDQuSv!1#Ob6j<->DoybgbJm}V{fBaHoB>ST^)7f*;5*GhDJ)~m*34vOWNsW8)!cnq zdu(=JAK^X)`Hg#M$dbT#nM9Mi8XHJ%Co9W2JS8Ae7%f1uwTc1G)B)VyZf+66|B7v7 zWAP4XI^gxm!Y@iEfD2pS=d)EFpW-I4VQ3zf%jkChP~o|KcpViqp5LZ@qR?vfZK5A7){GZ^$3KAD41t9A;8MHE7HUqM}PhNRmg$No(i&z+mm9d>%d)9;FRrgS3>2_OwLJjgaw+gQ)y( z7hP6tTRkRz&OsUUH{z4$%in9Ns^#V(QM`TVnVdpU>tP>Mmg740I$al+8mIJ4Nonzz zwi=C^YrcbvW4`=%SYw1Ho?39|x2ga=%W0oAx3kU-GoQ*&Etq*+uiz38Z5}f8L4OfisG& zoQVj0FiB~$NSr<8U<9;)@J87q4zEvVhn&p}a7F(H1-Lqp(78p2r5RUu3>;8RijfLg z8IfY>qc6pvLRMCt*7cW&q|p*NDSIj-nRuPlaZlxVhg#J$Nebrjua!RK+gM%v3F0-6 zdX^$TeLAjc|NdOZ3L@%0-^P5f?+f!y&;ptKrlSC@$(Pn1L+7>Fd^Bdm-iY&o69MM~ zCLB%k{n|d#6Q$r}1b^N{!7|a}mVlea=K9+-#m#^8>M+S`s;Do&|JM*6olXl&9iVy#i;`w+ zu3nX1ye7Tpw-7F!slSlXv!qyGz1+BMV@IPDQP|5atx&Hz(>iaDVmh#rs%u=FFaL+(iS*NVrj^+ahDo~vWOvoFTflrd1j$Vi~Nc>ibX=Ta8`Viv$3Qg zCwCWI!r&p7*2raKxh50%sSI6+l(8JGnf@zIjgg@XCj}J@1*o8@u>$AHs0;wU^=NY z+S9ASQ>y>~{y{DRw?Fi@{6y_gr~aXi&mYyT@=aQzCbuhx)K63hD8KkWKAPQBfK+LM zsbs>}f{iUui!MW;A-VzUQPHXx1cZp8jnP$TZE7&uRI-`rC^4}_E!?7%PF0R80_U3W24r9Y%LBOFMYJ7qrs!znB|_3Q$!; zrBD+>q0+I(8fP+QeaW}H8Hw*+e6qBtjec;yD4FSpB6Jxoxso`)#l?C08EWI}IGYrc zvLebzoTds0D#W2DWT6HW3gyD&{?F{#x?%0g<>vl{^Lrk>|DKiQrAu>XPghS&4-T#q z{y5f7q&Jm(>dp=*>Le*Cg59*x7Hc{*lxP)0KnP>NT2ukpnnw#;DV0WF{`JJM(PKLX z+fFWK8pSgK*jp+o1u3s1$Dklk{%l-UK!8<{r~yRfz~E~BE73OhWGN%%Xcx0UiTzEh zv^Kxe-l26uPCO%|A9#W9HInpP;JIZ>P>ARfs&C?Qg3gd|oI?;KCZJSOO%6pz4j=a` zHyu++vE?1gD$}kbeg|o@6z=PVTH0uI5v9e5HVqghkjo(Ta9jme`y8xI*vW$%?0REe z)@;Cp6i3%ir$i03wH3h#(ubr2$SF)w9b((Ttvc-e+|0t!!-v8k9O#D5-;jses4_wX zHVo$A!79(j@ZrRFvF(7R7&LafCj$+m=j^x4iSg*z{*9$v3d$%cjp&mZcBbHzDx@D+ zkyN2cOQ!nixyyZBVUR0}M44loDk{{L6hqK2Utq8%50#8huO?<{(Oe6ITs9vpLaR{e zMMy{`izuX$g(@!tQ+Xy`Dme!SFXy}%Ib{7@cCg!9LrA6@8RT?vH^OuAa)b&?da4SZfvnfX6e*ucEr){MGOWEP8m?f2Zhe05>| z#CaKc?(FQznLDN@M}~_>ieXR3t`e9;)M)Adqm;H&tAv(?sSr@hFQjGz1|E#pfal=3 zWeAiO75gM$h#1aVSA}!72J37klL0tgJzj~9?pdM*TJ)1hfHYFuLeo-uJLu2UqIClZ z8fFR8+XFS0<|OcS`2ab#VftXeoW2ZJF;}mfeoVdaUEush1i=anXsT9(o(dK86>gGq z;J6!|N_VH)qmiSOjF5jhN)aqY^*_|B8jvHfeeXg3+D zdRE~a&m~NudxcS+rF}f!5YmhP;_@E z^lY?WoIf)mL8w`j5c`6`!t<>cC+Wk5zKc@~5tuNDp*3qD6B7v=W=;*+JQupNO zY-MU-BxE@1;C$Lolu?EzY`v+PbtSJJAW+D%Mp;QJ3w`=pv zxt!Tp^1jfZ(TrgLF^C~bNfjch1|_P}F=%Wz(=Nfa7ekO`#cT5+1_$~*Nv=8X6z=}O z5B5>}+v!yMdYsYXba{GpqnjV?OEICtFtLaLz7G7@P+Kae)f_@N3EhRHCj!VUDF{yE z5Q3=on3&=iLRlf@gs*;%fx~XbYx>pu)@_#&7%?vp$L|RAetbT zJhit0;xs9(UL8=@tf9~mqRNii_rzFjVpvct)90wA#Kh0I<^ zAO61!)hz({(~6h=Nml$X6Y6xIng!q>0JpHw#h8QABk(_heUq+@>XzCQEucQw(7Kjs z4ANPd)vg=@`IK`jcj{W7QSre%OOwB^W=e32=_tQ6cD~a_tRn0!=*3aov;TQ~<8Thn z;m?N%gXSPfI1DBQ9*!gx97c&&DoKM7)ue^Pg=BydF0VX99&bZ|+6QnAA5)S`Tr@(}i`t0f%!w8zVfroH6uHrJT z;9eB510&dpB6g!6yKn$ST!biQ84KvxVFmNJUYN&y+4dDt+=K22MJ!#!3LzGw;`&kO z#ezTWh9qWr;WF;ympPBSTlydEI*rB6+gGLgUc@f+qJIHWwpSLi=Y@_-hh4Y__ba}e z>Dpd8K>O|kx~w9`?XDtj$l}^VEKqju1rhgp?;!fR!JS%8knE2DujfVz6*UblJv#af z7&5^mQ%p0%EOX4Wz!tW04cBrV*K-3mauYnD;#Bs}k4Sy>j;a=#msN9VNwW}AqZGDb zAEahV+U*DWWEV8&A~l5}9lx=lXR+BC&h$5~(o^JA_5d&x0x@9%|l4x5yr1BW;ly z>4QPmd+DqY!1UMg^Y?2v$=B^3&cjhisTUj)$=E%;I(bmpWKj%w`cD)Y6Qbc_OnDq{Ws literal 4648 zcmV+@64&i_Pew8T0RR9101_ww4*&oF03$pA01?mt0RR9100000000000000000000 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 diff --git a/system/author/css/style.css b/system/author/css/style.css index e09161d..23c2e5a 100644 --- a/system/author/css/style.css +++ b/system/author/css/style.css @@ -412,7 +412,7 @@ footer{ ** MODAL ** *************/ -.modalWindow{ +.modal, .modalWindow{ position:fixed; display: block; z-index: 9999; @@ -427,6 +427,12 @@ footer{ background: #FFF; background: rgba(255,255,255,0.9); } +.modal{ + display: none; +} +.modal.show{ + display: block; +} .modalInner{ position: relative; max-width: 350px; @@ -1303,7 +1309,7 @@ label .help, .label .help{ } .editor button.button--secondary, .editor a.button--secondary{ display: inline-block; - min-width: 40px; + min-width: auto; max-width: 40px; background: #fff; border: 1px solid #eee; @@ -1381,7 +1387,6 @@ label .help, .label .help{ } .blox-editor button.edit{ background: #fff; -// background: #f9f8f6; color: #444; border: 1px solid #bbb; } @@ -1391,7 +1396,6 @@ label .help, .label .help{ border: 1px solid #cc4146; } .blox-editor button.cancel{ -// background: #f9f8f6; background: #fff; color: #444; border: 1px solid #bbb; @@ -1407,9 +1411,25 @@ label .help, .label .help{ font-size: 16px; padding-left: 20px; padding-right: 20px; - box-sizing: border-blox; + box-sizing: border-box; min-height: 40px; } +/* +.blox-editor textarea.mdcontent, .blox-editor input.mdcontent, .blox-editor .video.dropbox, .blox-editor .dropbox p{ + border-left: 40px solid rgba(255,255,255,0.5); +} +*/ +.blox-editor input.mdcontent{ + font-size: 1.4em; + font-weight: 700; +} +.blox-editor .contenttype { + position: absolute; + top: 16px; + left: -25px; + color: #e0474c; +} + .blox-editor .sideaction{ position: absolute; right: -22px; @@ -1479,7 +1499,7 @@ label .help, .label .help{ margin-right: 20px; } .format-bar .blox-editor{ - display: inline; +/* display: inline; */ } button.format-item{ margin-right: 2px; @@ -1602,21 +1622,23 @@ button.format-item:hover{ margin-left: 50px; } .dropbox{ - min-height: 50px; - position: relative; +// position: relative; + min-height: 70px; background: #f9f8f6; - padding: 20px; + padding: 0px; box-sizing: border-box; margin-bottom: 10px; + box-shadow: 0 0 2px #000; } .dropbox p{ - cursor: pointer; - border: 2px dashed grey; - line-height: 50px; + position: relative; + cursor: pointer; + line-height: 70px; width: 100%; text-align: center; box-sizing:border-box; padding: 0; + margin: 0; } .dropbox input, .dropbox select{ background-color: #fff; @@ -1624,6 +1646,10 @@ button.format-item:hover{ margin: 2px 0; display: inline-block; } +.video input{ + width: 75%; + margin: 15px 0; +} .dropbox select{ background-image: linear-gradient(45deg, transparent 50%, #444 50%), linear-gradient(135deg, #444 50%, transparent 50%), linear-gradient(to right, #fff, #fff); } @@ -1631,15 +1657,22 @@ button.format-item:hover{ width: 20%; display: inline-block; } -.dropbox .imgmeta{ - margin-top: 20px; +.video label{ + text-align: right; + padding-right: 10px; + box-sizing: border-box; } -.input-file{ +.dropbox .imgmeta{ + padding: 30px; + box-sizing: border-box; +} +.dropbox .input-file{ opacity: 0; width: 100%; - height: 50px; + height: 70px; position: absolute; cursor: pointer; + z-index: 1; } .blox img, img.uploadPreview{ display: block; @@ -1764,11 +1797,20 @@ footer a:focus, footer a:hover, footer a:active{ margin: auto; text-align: center; } + .blox-editor .loadoverlay{ + display: block; + position: absolute; + z-index: 999; + left: 0px; + right: 0px; + top: 0px; + bottom: 0px; + background: rgba(255,255,255,0.4); + } /* load design editor button */ .editor button.load:after, .blox-editor .load:after, .editor button.success:after, - .editor button.fail:after - { + .editor button.fail:after{ position: absolute; right: 8px; top: 6px; @@ -1783,6 +1825,13 @@ footer a:focus, footer a:hover, footer a:active{ background: #ccc; animation: spin 2s linear infinite; } + .blox-editor .loadoverlay .load:after{ + position: absolute; + left: 50%; + top: 50%; + margin-top: -10px; + margin-left: -10px; + } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } diff --git a/system/author/editor/editor-blox.twig b/system/author/editor/editor-blox.twig index 7159244..e1f6559 100644 --- a/system/author/editor/editor-blox.twig +++ b/system/author/editor/editor-blox.twig @@ -27,9 +27,16 @@
      - + + + + - + + + +
      diff --git a/system/author/editor/publish-controller.twig b/system/author/editor/publish-controller.twig index ef95e64..bf7017f 100644 --- a/system/author/editor/publish-controller.twig +++ b/system/author/editor/publish-controller.twig @@ -6,9 +6,10 @@
      - raw mode - visual mode - + raw moderaw + visual modevisual + +
      diff --git a/system/author/js/vue-blox.js b/system/author/js/vue-blox.js index b181aeb..579eeba 100644 --- a/system/author/js/vue-blox.js +++ b/system/author/js/vue-blox.js @@ -1,8 +1,27 @@ const eventBus = new Vue(); const contentComponent = Vue.component('content-block', { - props: ['body'], - template: '
      ', + props: ['body', 'load'], + template: '
      ' + + '
      ' + + '
      ' + + '
      ' + + '' + + '' + + '' + + '
      ' + + '' + + '' + + '
      ' + + '
      ' + + '
      ' + + '
      ' + + '
      ' + + '' + + '
      ' + + '
      ' + + '
      ' + + '
      ', data: function () { return { preview: 'visible', @@ -10,6 +29,7 @@ const contentComponent = Vue.component('content-block', { compmarkdown: '', componentType: '', disabled: false, + load: false } }, mounted: function() @@ -22,7 +42,7 @@ const contentComponent = Vue.component('content-block', { this.compmarkdown = $event; this.$nextTick(function () { this.$refs.preview.style.minHeight = this.$refs.component.offsetHeight + 'px'; - }); + }); }, switchToEditMode: function() { @@ -77,6 +97,7 @@ const contentComponent = Vue.component('content-block', { freezePage: function() { this.disabled = 'disabled'; + this.load = true; publishController.errors.message = false; publishController.publishDisabled = true; var self = this; @@ -85,6 +106,7 @@ const contentComponent = Vue.component('content-block', { activatePage: function() { this.disabled = false; + this.load = false; publishController.publishDisabled = false; }, getData: function() @@ -97,7 +119,36 @@ const contentComponent = Vue.component('content-block', { }, submitBlock: function(){ var emptyline = /^\s*$(?:\r\n?|\n)/gm; - if(this.compmarkdown.search(emptyline) > -1) + if(this.componentType == "code-component"){ } + else if(this.componentType == "ulist-component" || this.componentType == "olist-component") + { + var listend = (this.componentType == "ulist-component") ? '* \n' : '1. \n'; + var liststyle = (this.componentType == "ulist-component") ? '* ' : '1. '; + + if(this.compmarkdown.endsWith(listend)) + { + this.compmarkdown = this.compmarkdown.replace(listend, ''); + this.saveBlock(); + } + else + { + var mdtextarea = document.getElementsByTagName('textarea'); + var start = mdtextarea[0].selectionStart; + var end = mdtextarea[0].selectionEnd; + + this.compmarkdown = this.compmarkdown.substr(0, end) + liststyle + this.compmarkdown.substr(end); + + mdtextarea[0].focus(); + if(mdtextarea[0].setSelectionRange) + { + setTimeout(function(){ + var spacer = (this.componentType == "ulist-component") ? 2 : 3; + mdtextarea[0].setSelectionRange(end+spacer, end+spacer); + }, 1); + } + } + } + else if(this.compmarkdown.search(emptyline) > -1) { var checkempty = this.compmarkdown.replace(/(\r\n|\n|\r|\s)/gm,""); if(checkempty == '') @@ -111,7 +162,7 @@ const contentComponent = Vue.component('content-block', { } }, saveBlock: function() - { + { if(this.compmarkdown == undefined || this.compmarkdown.replace(/(\r\n|\n|\r|\s)/gm,"") == '') { this.switchToPreviewMode(); @@ -119,7 +170,7 @@ const contentComponent = Vue.component('content-block', { else { this.freezePage(); - + var self = this; if(this.componentType == 'image-component' && self.$root.$data.file) @@ -138,9 +189,10 @@ const contentComponent = Vue.component('content-block', { var method = 'PUT'; } + var compmarkdown = this.compmarkdown.split('\n\n').join('\n'); var params = { 'url': document.getElementById("path").value, - 'markdown': this.compmarkdown, + 'markdown': compmarkdown, 'block_id': self.$root.$data.blockId, 'csrf_name': document.getElementById("csrf_name").value, 'csrf_value': document.getElementById("csrf_value").value, @@ -151,13 +203,14 @@ const contentComponent = Vue.component('content-block', { if(httpStatus == 400) { self.activatePage(); + publishController.errors.message = "Sorry, something went wrong. Maybe you are logged out? Please login and try again."; } if(response) { self.activatePage(); var result = JSON.parse(response); - + if(result.errors) { publishController.errors.message = result.errors.markdown[0]; @@ -174,6 +227,7 @@ const contentComponent = Vue.component('content-block', { self.$root.$data.blockMarkdown = ''; self.$root.$data.blockType = 'markdown-component'; self.getData(); + document.querySelectorAll('textarea')[0].style.height = "70px"; } else { @@ -252,21 +306,6 @@ const contentComponent = Vue.component('content-block', { }, }) -const markdownComponent = Vue.component('markdown-component', { - props: ['compmarkdown', 'disabled'], - template: '
      ', - mounted: function(){ - this.$refs.markdown.focus(); - autosize(document.querySelectorAll('textarea')); - }, - methods: { - updatemarkdown: function(event) - { - this.$emit('updatedMarkdown', event.target.value); - }, - }, -}) - const titleComponent = Vue.component('title-component', { props: ['compmarkdown', 'disabled'], template: '
      ', @@ -282,12 +321,195 @@ const titleComponent = Vue.component('title-component', { }, }) +const markdownComponent = Vue.component('markdown-component', { + props: ['compmarkdown', 'disabled'], + template: '
      ' + + '
      ' + + '' + + '
      ', + mounted: function(){ + this.$refs.markdown.focus(); + autosize(document.querySelectorAll('textarea')); + }, + methods: { + updatemarkdown: function(event) + { + this.$emit('updatedMarkdown', event.target.value); + }, + }, +}) + +const codeComponent = Vue.component('code-component', { + props: ['compmarkdown', 'disabled'], + template: '
      ' + + '' + + '
      ' + + '' + + '
      ', + data: function(){ + return { + codeblock: '' + } + }, + mounted: function(){ + this.$refs.markdown.focus(); + if(this.compmarkdown) + { + var codeblock = this.compmarkdown.replace("````\n", ""); + codeblock = codeblock.replace("```\n", ""); + codeblock = codeblock.replace("\n````", ""); + codeblock = codeblock.replace("\n```", ""); + codeblock = codeblock.replace("\n\n", "\n"); + this.codeblock = codeblock; + } + this.$nextTick(function () { + autosize(document.querySelectorAll('textarea')); + }); + }, + methods: { + createmarkdown: function(event) + { + this.codeblock = event.target.value; + var codeblock = '````\n' + event.target.value + '\n````'; + this.updatemarkdown(codeblock); + }, + updatemarkdown: function(codeblock) + { + this.$emit('updatedMarkdown', codeblock); + }, + }, +}) + +const quoteComponent = Vue.component('quote-component', { + props: ['compmarkdown', 'disabled'], + template: '
      ' + + '' + + '
      ' + + '' + + '
      ', + data: function(){ + return { + quote: '' + } + }, + mounted: function(){ + this.$refs.markdown.focus(); + if(this.compmarkdown) + { + var quote = this.compmarkdown.replace("> ", ""); + quote = this.compmarkdown.replace(">", ""); + this.quote = quote; + } + this.$nextTick(function () { + autosize(document.querySelectorAll('textarea')); + }); + }, + methods: { + createmarkdown: function(event) + { + this.quote = event.target.value; + var quote = '> ' + event.target.value; + this.updatemarkdown(quote); + }, + updatemarkdown: function(quote) + { + this.$emit('updatedMarkdown', quote); + }, + }, +}) + +const ulistComponent = Vue.component('ulist-component', { + props: ['compmarkdown', 'disabled'], + template: '
      ' + + '
      ' + + '' + + '
      ', + mounted: function(){ + this.$refs.markdown.focus(); + if(!this.compmarkdown) + { + this.compmarkdown = '* '; + } + this.$nextTick(function () { + autosize(document.querySelectorAll('textarea')); + }); + }, + methods: { + updatemarkdown: function(event) + { + this.$emit('updatedMarkdown', event.target.value); + }, + }, +}) + +const olistComponent = Vue.component('olist-component', { + props: ['compmarkdown', 'disabled'], + template: '
      ' + + '
      ' + + '' + + '
      ', + mounted: function(){ + this.$refs.markdown.focus(); + if(!this.compmarkdown) + { + this.compmarkdown = '1. '; + } + this.$nextTick(function () { + autosize(document.querySelectorAll('textarea')); + }); + }, + methods: { + updatemarkdown: function(event) + { + this.$emit('updatedMarkdown', event.target.value); + }, + }, +}) + +const headlineComponent = Vue.component('headline-component', { + props: ['compmarkdown', 'disabled'], + template: '
      ' + + '
      ' + + '' + + '
      ', + mounted: function(){ + this.$refs.markdown.focus(); + if(!this.compmarkdown) + { + this.compmarkdown = '## '; + } + }, + methods: { + updatemarkdown: function(event) + { + this.$emit('updatedMarkdown', event.target.value); + }, + }, +}) + + +const videoComponent = Vue.component('video-component', { + props: ['compmarkdown', 'disabled', 'load'], + template: '
      ' + + '
      ' + + '' + + '
      ' + + '
      ', + methods: { + updatemarkdown: function(event) + { + this.$emit('updatedMarkdown', event.target.value); + }, + }, +}) + const imageComponent = Vue.component('image-component', { props: ['compmarkdown', 'disabled'], template: '
      ' + '' + ' ' + '

      drag a picture or click to select

      ' + + '
      ' + '' + '
      ' + '
      ' + @@ -316,7 +538,7 @@ const imageComponent = Vue.component('image-component', { mounted: function(){ this.$refs.markdown.focus(); - + if(this.compmarkdown) { this.imgmeta = true; @@ -557,24 +779,6 @@ const imageComponent = Vue.component('image-component', { } }) -const videoComponent = Vue.component('video-component', { - props: ['compmarkdown', 'disabled', 'load'], - template: '
      ' + - '' + - '
      ' + - '
      ', - methods: { - updatemarkdown: function(event) - { - this.$emit('updatedMarkdown', event.target.value); - }, - }, -}) - -const tableComponent = Vue.component('table', { - template: '
      table component
      ', -}) - let editor = new Vue({ delimiters: ['${', '}'], el: '#blox', @@ -582,7 +786,12 @@ let editor = new Vue({ 'content-component': contentComponent, 'markdown-component': markdownComponent, 'title-component': titleComponent, - 'image-component': imageComponent, + 'headline-component': headlineComponent, + 'image-component': imageComponent, + 'code-component': codeComponent, + 'quote-component': quoteComponent, + 'ulist-component': ulistComponent, + 'olist-component': olistComponent, }, data: { root: document.getElementById("main").dataset.url, @@ -666,18 +875,34 @@ let editor = new Vue({ }, determineBlockType: function(block) { + if(block.match(/^\d+\./)){ return "olist-component" } + var firstChar = block[0]; var secondChar = block[1]; var thirdChar = block[2]; switch(firstChar){ + case ">": + return "quote-component"; + break; + case "#": + return "headline-component"; + break; case "!": if(secondChar == "[") { return "image-component" } break; case "[": if(secondChar == "!" && thirdChar == "[") { return "image-component" } else { return "markdown-component" } break; - default: + case "`": + if(secondChar == "`" && thirdChar == "`") { return "code-component" } else { return "markdown-component" } + break; + case "*": + if(secondChar == " "){ return "ulist-component" } else { return "markdown-component" } + break; + case Number.isInteger(firstChar): + if(secondChar == "." ){ return "olist-component" } else { return "markdown-component" } + default: return 'markdown-component'; } }, diff --git a/system/author/js/vue-publishcontroller.js b/system/author/js/vue-publishcontroller.js index afe0153..c9609c0 100644 --- a/system/author/js/vue-publishcontroller.js +++ b/system/author/js/vue-publishcontroller.js @@ -60,10 +60,13 @@ let publishController = new Vue({ { self.publishDisabled = false; self.publishResult = "fail"; - + self.errors.message = result.errors.content[0]; + + /* if(result.errors.title){ self.errors.title = result.errors.title[0] }; if(result.errors.content){ self.errors.content = result.errors.content[0] }; if(result.errors.message){ self.errors.message = result.errors.message }; + */ } else { @@ -91,17 +94,26 @@ let publishController = new Vue({ sendJson(function(response, httpStatus) { + if(httpStatus == 400) + { + self.publishDisabled = false; + self.publishResult = "fail"; + self.errors.message = "You are probably logged out. Please backup your changes, login and then try again." + } if(response) - { + { var result = JSON.parse(response); if(result.errors) { self.draftDisabled = false; self.draftResult = 'fail'; + self.errors.message = result.errors.content[0]; + /* if(result.errors.title){ self.errors.title = result.errors.title[0] }; - if(result.errors.content){ self.errors.content = result.errors.content[0] }; + if(result.errors.content){ self.errors.message = result.errors.content[0] }; if(result.errors.message){ self.errors.message = result.errors.message }; + */ } else { diff --git a/system/author/partials/fields.twig b/system/author/partials/fields.twig index 75c39c5..dcf3e88 100644 --- a/system/author/partials/fields.twig +++ b/system/author/partials/fields.twig @@ -14,9 +14,7 @@ {{ markdown(field.getContent()) }} {% elseif field.type == 'checkbox' %} - - {{ field.getAttributes }} - +