From 979ebebe1b2d4dcbb388db1ff3211f403163db29 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 3 Dec 2018 10:39:55 +0100 Subject: [PATCH] Version 1.2.8 Image Management --- cache/lastCache.txt | 2 +- .../{00-Welcome => 01-Welcome}/00-Setup.md | 0 .../01-Write-Content.md} | 0 .../02-Get-Help.md} | 0 content/{00-Welcome => 01-Welcome}/index.md | 0 content/index.md | 3 +- media/original/5bf950ebf2abc-original.png | Bin 0 -> 1272 bytes readme.md | 13 +- system/Controllers/ContentApiController.php | 58 +- .../Controllers/ContentBackendController.php | 17 +- system/Controllers/SettingsController.php | 8 +- system/Extensions/ParsedownExtension.php | 4 +- system/Models/ProcessImage.php | 325 +++++++++++ system/Routes/Api.php | 5 +- system/Settings.php | 18 +- system/author/auth/login.twig | 7 +- system/author/css/fontello/LICENSE.txt | 9 + system/author/css/fontello/config.json | 58 +- .../css/fontello/css/fontello-codes.css | 16 +- .../css/fontello/css/fontello-embedded.css | 28 +- .../css/fontello/css/fontello-ie7-codes.css | 16 +- .../author/css/fontello/css/fontello-ie7.css | 16 +- system/author/css/fontello/css/fontello.css | 30 +- system/author/css/fontello/demo.html | 32 +- system/author/css/fontello/font/fontello.eot | Bin 8592 -> 8088 bytes system/author/css/fontello/font/fontello.svg | 18 +- system/author/css/fontello/font/fontello.ttf | Bin 8424 -> 7920 bytes system/author/css/fontello/font/fontello.woff | Bin 5168 -> 4908 bytes .../author/css/fontello/font/fontello.woff2 | Bin 4352 -> 4072 bytes system/author/css/style.css | 146 +++-- system/author/editor/editor-blox.twig | 9 +- system/author/js/author.js | 15 + system/author/js/vue-blox.js | 529 ++++++++++++------ system/author/layouts/layout.twig | 2 + system/author/layouts/layoutAuth.twig | 2 + system/author/layouts/layoutBlank.twig | 2 + system/author/layouts/layoutBlox.twig | 2 + system/author/layouts/layoutEditor.twig | 2 + themes/typemill/partials/layout.twig | 2 + themes/typemill/partials/layoutCover.twig | 2 + themes/typemill/typemill.yaml | 5 +- 41 files changed, 1060 insertions(+), 341 deletions(-) rename content/{00-Welcome => 01-Welcome}/00-Setup.md (100%) rename content/{00-Welcome/02-Write-Content.md => 01-Welcome/01-Write-Content.md} (100%) rename content/{00-Welcome/03-Get-Help.md => 01-Welcome/02-Get-Help.md} (100%) rename content/{00-Welcome => 01-Welcome}/index.md (100%) create mode 100644 media/original/5bf950ebf2abc-original.png create mode 100644 system/Models/ProcessImage.php diff --git a/cache/lastCache.txt b/cache/lastCache.txt index d705a7f..b0d9d57 100644 --- a/cache/lastCache.txt +++ b/cache/lastCache.txt @@ -1 +1 @@ -1541856493 \ No newline at end of file +1543829895 \ No newline at end of file diff --git a/content/00-Welcome/00-Setup.md b/content/01-Welcome/00-Setup.md similarity index 100% rename from content/00-Welcome/00-Setup.md rename to content/01-Welcome/00-Setup.md diff --git a/content/00-Welcome/02-Write-Content.md b/content/01-Welcome/01-Write-Content.md similarity index 100% rename from content/00-Welcome/02-Write-Content.md rename to content/01-Welcome/01-Write-Content.md diff --git a/content/00-Welcome/03-Get-Help.md b/content/01-Welcome/02-Get-Help.md similarity index 100% rename from content/00-Welcome/03-Get-Help.md rename to content/01-Welcome/02-Get-Help.md diff --git a/content/00-Welcome/index.md b/content/01-Welcome/index.md similarity index 100% rename from content/00-Welcome/index.md rename to content/01-Welcome/index.md diff --git a/content/index.md b/content/index.md index 9a40933..072647b 100644 --- a/content/index.md +++ b/content/index.md @@ -2,4 +2,5 @@ **MODERN WEB PUBLISHING FOR WRITERS** -*Typemill is a user-friendly and lightweight open source CMS for publishing text-works like prosa, lyrics, manuals, documentations, studies and more. Just download and start.* \ No newline at end of file +*Typemill is a user-friendly and lightweight open source CMS for publishing text-works like prosa, lyrics, manuals, documentations, studies and more. Just download and start.* + diff --git a/media/original/5bf950ebf2abc-original.png b/media/original/5bf950ebf2abc-original.png new file mode 100644 index 0000000000000000000000000000000000000000..31e1d083532dc32b0b086844ec8c944b4d076f77 GIT binary patch literal 1272 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00d}BL_t(|UhUjVs8v-Q$MKVurDkdgB4JS@ zdnhO&MTrw3d=La72$ANXB5M$2MH7jzX%j)HK|zQ}BS{cNs(~0m4{~Bf+Jg*HD^p1= zHNU?@C)Qo}zt4WHeeN3kfAAT&-Dh3hKknIkul?vnxfL(tQ=G=XF1aiC4Ikrq+=Owt z29M%bScACk{D9>clSgn4)(2eo&f;P8a|?cfwW1rHA2AKRm;PH2x`dx`*d_N3jzRm9 zc)P!d-oapjsEpS!6Q1jdxaNGZZF$?4?s6|h=(KbGX zaNFxQX3PTl5}wiIB;xHqZh;pvx_BX(#S6(SUPxx~LNZIzLRR6`3Us`kB2%H+QR`=f zo%@$anFXM&Or2UDGn65)n9!J%kc+3lFKpT4B#AR zgwbtC-@#hHDleo39YGDwG>R8eLgyMUM9b>>0F&W`3`w0rbUow!U|Ai9 zpz{+YMIoBXf1|_>SYyZDh4uN+6DZ1r6{5_*=dji(q8rKX!yqXNxgEN(+4^j1N1>lr zlnE_Fxf@lVLAii62$Sk7Yd(&{`g|%H{~ip>gcqW$hK`u5bq92AqS@Z~vnlr>y72Wo ztTEcsxEjAKSrnqF_1B=g?5*`hQz$xnkCS?*uAO)42bDD5xF@0tl0_kkHug?fQzd$S zVz3jBle!T7+tx#0kJeaqoyS^KO*VxndPd@FgzIVs_+Atxbs>s=V_(5Pu*R!OQ$HI~ z^#8SzRUwLwpay61I(gKEsbT4&5aoL4qM1%Wtuf2!>vuEi-dU4fA&Q>gA(_Q2B%W^e*E5YKx^`l|o=LAP4Hs&jW)?i%MiZEN`DM86 zRZxElIb5igwm~zQ{+p6M+NQc!YZt=pE+3(P9XS3Am7-g9^eD4SPd7uv+gzSO|A|=L zVP~!2Mn{kG{eRU|5A?_1XKr-#kn19h$ujs0l}Ar6Q&params = $request->getParams(); $this->uri = $request->getUri(); + $errors = false; # set structure if(!$this->setStructure($draft = true)){ return $response->withJson(array('data' => false, 'errors' => $this->errors), 404); } @@ -792,6 +794,25 @@ class ContentApiController extends ContentController # check if id exists if(!isset($this->content[$this->params['block_id']])){ return $response->withJson(array('data' => false, 'errors' => 'The ID of the content-block is wrong.'), 404); } + # check if block is image + $contentBlock = $this->content[$this->params['block_id']]; + $contentBlockStart = substr($contentBlock, 0, 2); + if($contentBlockStart == '[!' OR $contentBlockStart == '![') + { + # extract image path + preg_match("/\((.*?)\)/",$contentBlock,$matches); + if(isset($matches[1])) + { + $imageBaseName = explode('-', $matches[1]); + $imageBaseName = str_replace('media/live/', '', $imageBaseName[0]); + $processImage = new ProcessImage(); + if(!$processImage->deleteImage($imageBaseName)) + { + $errors = 'Could not delete some of the images, please check manually'; + } + } + } + # delete the block unset($this->content[$this->params['block_id']]); $this->content = array_values($this->content); @@ -821,6 +842,41 @@ class ContentApiController extends ContentController return $response->withJson(['errors' => ['message' => 'Could not write to file. Please check if the file is writable']], 404); } - return $response->withJson(array('markdown' => $pageMarkdown, 'errors' => false)); + return $response->withJson(array('markdown' => $pageMarkdown, 'errors' => $errors)); + } + + public function createImage(Request $request, Response $response, $args) + { + /* get params from call */ + $this->params = $request->getParams(); + $this->uri = $request->getUri(); + + $imageProcessor = new ProcessImage(); + + if($imageProcessor->createImage($this->params['image'], $this->settings['images'], $name = false)) + { + return $response->withJson(array('errors' => false)); + } + + return $response->withJson(array('errors' => 'could not store image to temporary folder')); + } + + public function publishImage(Request $request, Response $response, $args) + { + $params = $request->getParsedBody(); + + $imageProcessor = new ProcessImage(); + + $imageUrl = $imageProcessor->publishImage($this->settings['images'], $name = false); + if($imageUrl) + { + $params['markdown'] = str_replace('imgplchldr', $imageUrl, $params['markdown']); + + $request = $request->withParsedBody($params); + + return $this->updateBlock($request, $response, $args); + } + + return $response->withJson(array('errors' => 'could not store image to temporary folder')); } } \ No newline at end of file diff --git a/system/Controllers/ContentBackendController.php b/system/Controllers/ContentBackendController.php index 9133368..55d713f 100644 --- a/system/Controllers/ContentBackendController.php +++ b/system/Controllers/ContentBackendController.php @@ -23,7 +23,7 @@ class ContentBackendController extends ContentController # get params from call $this->uri = $request->getUri(); $this->params = isset($args['params']) ? ['url' => $this->uri->getBasePath() . '/' . $args['params']] : ['url' => $this->uri->getBasePath()]; - + # set structure if(!$this->setStructure($draft = true)){ return $this->renderIntern404($response, array( 'navigation' => true, 'content' => $this->errors )); } @@ -71,7 +71,7 @@ class ContentBackendController extends ContentController $content = trim($contentParts[1]); } } - + return $this->render($response, 'editor/editor-raw.twig', array('navigation' => $this->structure, 'title' => $title, 'content' => $content, 'item' => $this->item, 'settings' => $this->settings )); } @@ -85,6 +85,7 @@ class ContentBackendController extends ContentController public function showBlox(Request $request, Response $response, $args) { + # get params from call $this->uri = $request->getUri(); $this->params = isset($args['params']) ? ['url' => $this->uri->getBasePath() . '/' . $args['params']] : ['url' => $this->uri->getBasePath()]; @@ -100,7 +101,7 @@ class ContentBackendController extends ContentController # set the status for published and drafted $this->setPublishStatus(); - + # set path $this->setItemPath($this->item->fileType); @@ -133,12 +134,16 @@ class ContentBackendController extends ContentController $contentArray = $parsedown->text($block); /* parse markdown-content-array to content-string */ - $content[$key] = $parsedown->markup($contentArray); + $content[$key] = $parsedown->markup($contentArray); } # extract title and delete from content array, array will start at 1 after that. - $title = $content[0]; - unset($content[0]); + $title = '# add title'; + if(isset($content[0])) + { + $title = $content[0]; + unset($content[0]); + } return $this->render($response, 'editor/editor-blox.twig', array('navigation' => $this->structure, 'title' => $title, 'content' => $content, 'item' => $this->item, 'settings' => $this->settings )); } diff --git a/system/Controllers/SettingsController.php b/system/Controllers/SettingsController.php index 652e15c..891168d 100644 --- a/system/Controllers/SettingsController.php +++ b/system/Controllers/SettingsController.php @@ -95,7 +95,7 @@ class SettingsController extends Controller /* store them as default theme data with author, year, default settings and field-definitions */ $themedata[$themeName] = $themeSettings; } - + if(isset($themeSettings['forms']['fields'])) { $fields = $this->getFields($userSettings, 'themes', $themeName, $themeSettings); @@ -271,6 +271,12 @@ class SettingsController extends Controller $themeName = isset($params['theme']) ? $params['theme'] : false; $userInput = isset($params[$themeName]) ? $params[$themeName] : false; $validate = new Validation(); + $themeSettings = \Typemill\Settings::getObjectSettings('themes', $themeName); + + if(isset($themeSettings['settings']['images'])) + { + $userSettings = ['images' => $themeSettings['settings']['images']]; + } /* set theme name and delete theme settings from user settings for the case, that the new theme has no settings */ $userSettings['theme'] = $themeName; diff --git a/system/Extensions/ParsedownExtension.php b/system/Extensions/ParsedownExtension.php index a6be97d..cb0d652 100644 --- a/system/Extensions/ParsedownExtension.php +++ b/system/Extensions/ParsedownExtension.php @@ -333,12 +333,12 @@ class ParsedownExtension extends \ParsedownExtra } $block = trim($block, "\n"); - + $cleanBlocks[] = $block; } return $cleanBlocks; } - + public function arrayBlocksToMarkdown(array $arrayBlocks) { $markdown = ''; diff --git a/system/Models/ProcessImage.php b/system/Models/ProcessImage.php new file mode 100644 index 0000000..5b25018 --- /dev/null +++ b/system/Models/ProcessImage.php @@ -0,0 +1,325 @@ +clearTempFolder(); + + # decode the image from base64-string + $imageDecoded = $this->decodeImage($image); + $imageData = $imageDecoded["image"]; + $imageType = $imageDecoded["type"]; + + # transform image-stream into image + $image = imagecreatefromstring($imageData); + + # get the size of the original image + $imageSize = $this->getImageSize($image); + + # check the desired sizes and calculate the height, if not set + $desiredSizes = $this->setHeight($imageSize, $desiredSizes); + + # resize the images + $resizedImages = $this->imageResize($image, $imageSize, $desiredSizes, $imageType); + + $basePath = getcwd() . DIRECTORY_SEPARATOR . 'media'; + $tmpFolder = $basePath . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR; + + $this->saveOriginal($tmpFolder, $imageData, 'original', $imageType); + + if($imageType == "gif" && $this->detectAnimatedGif($imageData)) + { + $this->saveOriginal($tmpFolder, $imageData, 'live', $imageType); + + return true; + } + + # temporary store resized images + foreach($resizedImages as $key => $resizedImage) + { + $this->saveImage($tmpFolder, $resizedImage, $key, $imageType); + } + + return true; + } + + public function detectAnimatedGif($image_file_contents) + { + $is_animated = preg_match('#(\x00\x21\xF9\x04.{4}\x00\x2C.*){2,}#s', $image_file_contents); + if ($is_animated == 1) + { + return true; + } + return false; + } + + public function publishImage(array $desiredSizes) + { + /* get images from tmp folder */ + $basePath = getcwd() . DIRECTORY_SEPARATOR . 'media'; + $tmpFolder = $basePath . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR; + $originalFolder = $basePath . DIRECTORY_SEPARATOR . 'original' . DIRECTORY_SEPARATOR; + $liveFolder = $basePath . DIRECTORY_SEPARATOR . 'live' . DIRECTORY_SEPARATOR; + + $name = uniqid(); + + $files = scandir($tmpFolder); + $success = true; + + foreach($files as $file) + { + if (!in_array($file, array(".",".."))) + { + $tmpfilename = explode(".", $file); + + if($tmpfilename[0] == 'original') + { + $success = rename($tmpFolder . $file, $originalFolder . $name . '-' . $file); + } + else + { + $success = rename($tmpFolder . $file, $liveFolder . $name . '-' . $file); + } + } + } + + if($success) + { + return 'media/live/' . $name . '-live.' . $tmpfilename[1]; + } + + return false; + } + + public function decodeImage(string $image) + { + $imageParts = explode(";base64,", $image); + $imageType = explode("/", $imageParts[0]); + $imageData = base64_decode($imageParts[1]); + + if ($imageData !== false) + { + return array("image" => $imageData, "type" => $imageType[1]); + } + + return false; + } + + public function getImageSize($image) + { + $width = imagesx($image); + $height = imagesy($image); + return array('width' => $width, 'height' => $height); + } + + public function setHeight(array $imageSize, array $desiredSizes) + { + foreach($desiredSizes as $key => $desiredSize) + { + if($desiredSize['width'] > $imageSize['width']) + { + $desiredSizes[$key] = $imageSize; + continue; + } + + if(!isset($desiredSize['height'])) + { + $resizeFactor = $imageSize['width'] / $desiredSize['width']; + $desiredSizes[$key]['height'] = round( ($imageSize['height'] / $resizeFactor), 0); + } + } + return $desiredSizes; + } + + public function imageResize($imageData, array $imageSize, array $desiredSizes, $imageType) + { + $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) + { + $desired_aspect_ratio = $desiredSize['width'] / $desiredSize['height']; + + if ( $source_aspect_ratio > $desired_aspect_ratio ) + { + # when source image is wider + $temp_height = $desiredSize['height']; + $temp_width = ( int ) ($desiredSize['height'] * $source_aspect_ratio); + $temp_width = round($temp_width, 0); + } + else + { + # when source image is similar or taller + $temp_width = $desiredSize['width']; + $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") + { + 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") + { + imagealphablending($temp_gdim, false); + imagesavealpha($temp_gdim,true); + $transparent = imagecolorallocatealpha($temp_gdim, 255, 255, 255, 127); + imagefilledrectangle($temp_gdim, 0, 0, $temp_width, $temp_height, $transparent); + } + + imagecopyresampled( + $temp_gdim, + $imageData, + 0, 0, + 0, 0, + $temp_width, $temp_height, + $imageSize['width'], $imageSize['height'] + ); + + # 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); + imagefill($desired_gdim, 0, 0, $transparent_index); + imagecolortransparent($desired_gdim, $transparent_index); + imagetruecolortopalette($desired_gdim, true, 256); + } + if ($transparent_index >= 0 && $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); + } + + imagecopy( + $desired_gdim, + $temp_gdim, + 0, 0, + $x0, $y0, + $desiredSize['width'], $desiredSize['height'] + ); + $copiedImages[$key] = $desired_gdim; + } + return $copiedImages; + } + + public function saveOriginal($folder, $image, $name, $type) + { + if(!file_exists($folder)) + { + mkdir($folder, 0774, true); + } + + $path = $folder . $name . '.' . $type; + + file_put_contents($path, $image); + } + + public function saveImage($folder, $image, $name, $type) + { + if(!file_exists($folder)) + { + mkdir($folder, 0774, true); + } + + if($type == "png") + { + $result = imagepng( $image, $folder . '/' . $name . '.png' ); + } + elseif($type == "gif") + { + $result = imagegif( $image, $folder . '/' . $name . '.gif' ); + } + else + { + $result = imagejpeg( $image, $folder . '/' . $name . '.jpeg' ); + $type = 'jpeg'; + } + + imagedestroy($image); + + if($result) + { + return $name . '.' . $type; + } + + return false; + } + + public function clearTempFolder() + { + $folder = getcwd() . DIRECTORY_SEPARATOR . 'media' . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR; + $files = scandir($folder); + $result = true; + + foreach($files as $file) + { + if (!in_array($file, array(".",".."))) + { + $filelink = $folder . $file; + if(!unlink($filelink)) + { + $success = false; + } + } + } + + return $result; + } + + public function deleteImage($name) + { + $baseFolder = getcwd() . DIRECTORY_SEPARATOR . 'media' . DIRECTORY_SEPARATOR; + $original = $baseFolder . 'original' . DIRECTORY_SEPARATOR . $name . '*'; + $live = $baseFolder . 'live' . DIRECTORY_SEPARATOR . $name . '*'; + $success = true; + + foreach(glob($original) as $image) + { + if(!unlink($image)) + { + $success = false; + } + } + + foreach(glob($live) as $image) + { + if(!unlink($image)) + { + $success = false; + } + } + + return $success; + } +} + +?> \ No newline at end of file diff --git a/system/Routes/Api.php b/system/Routes/Api.php index 55d4d27..7833085 100644 --- a/system/Routes/Api.php +++ b/system/Routes/Api.php @@ -18,4 +18,7 @@ $app->post('/api/v1/basefolder', ContentApiController::class . ':createBaseFolde $app->put('/api/v1/block', ContentApiController::class . ':updateBlock')->setName('api.block.update')->add(new RestrictApiAccess($container['router'])); $app->delete('/api/v1/block', ContentApiController::class . ':deleteBlock')->setName('api.block.delete')->add(new RestrictApiAccess($container['router'])); -$app->put('/api/v1/moveblock', ContentApiController::class . ':moveBlock')->setName('api.block.move')->add(new RestrictApiAccess($container['router'])); \ No newline at end of file +$app->put('/api/v1/moveblock', ContentApiController::class . ':moveBlock')->setName('api.block.move')->add(new RestrictApiAccess($container['router'])); + +$app->post('/api/v1/image', ContentApiController::class . ':createImage')->setName('api.image.create')->add(new RestrictApiAccess($container['router'])); +$app->put('/api/v1/image', ContentApiController::class . ':publishImage')->setName('api.image.publish')->add(new RestrictApiAccess($container['router'])); \ No newline at end of file diff --git a/system/Settings.php b/system/Settings.php index ca52329..a21867f 100644 --- a/system/Settings.php +++ b/system/Settings.php @@ -11,12 +11,13 @@ class Settings if($userSettings) { - $settings = array_merge($settings, $userSettings); - $settings['setup'] = false; + $imgSettings = $settings['images']; + $settings = array_merge($settings, $userSettings); + $settings['setup'] = false; } - - $settings['themePath'] = $settings['rootPath'] . $settings['themeFolder'] . DIRECTORY_SEPARATOR . $settings['theme']; - + $settings['images'] = isset($userSettings['images']) ? array_merge($imgSettings, $userSettings['images']) : $imgSettings; + $settings['themePath'] = $settings['rootPath'] . $settings['themeFolder'] . DIRECTORY_SEPARATOR . $settings['theme']; + return array('settings' => $settings); } @@ -44,9 +45,10 @@ class Settings 'contentFolder' => 'content', 'cache' => true, 'cachePath' => $rootPath . 'cache', - 'version' => '1.2.7', + 'version' => '1.2.8', 'setup' => true, - 'welcome' => true + 'welcome' => true, + 'images' => ['live' => ['width' => 720], 'mlibrary' => ['width' => 50, 'height' => 50]], ]; } @@ -87,7 +89,7 @@ class Settings $yaml = new Models\WriteYaml(); $settings = array_merge($userSettings, $settings); - + /* write settings to yaml */ $yaml->updateYaml('settings', 'settings.yaml', $settings); } diff --git a/system/author/auth/login.twig b/system/author/auth/login.twig index 7e9febc..0bb6d57 100644 --- a/system/author/auth/login.twig +++ b/system/author/auth/login.twig @@ -33,9 +33,10 @@ {% endif %} - - + - + {% endblock %} \ No newline at end of file diff --git a/system/author/css/fontello/LICENSE.txt b/system/author/css/fontello/LICENSE.txt index 8fa3da3..5897837 100644 --- a/system/author/css/fontello/LICENSE.txt +++ b/system/author/css/fontello/LICENSE.txt @@ -1,6 +1,15 @@ Font license info +## Entypo + + Copyright (C) 2012 by Daniel Bruce + + Author: Daniel Bruce + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://www.entypo.com + + ## Font Awesome Copyright (C) 2016 by Dave Gandy diff --git a/system/author/css/fontello/config.json b/system/author/css/fontello/config.json index 5e3d48e..0e0c091 100644 --- a/system/author/css/fontello/config.json +++ b/system/author/css/fontello/config.json @@ -6,46 +6,46 @@ "units_per_em": 1000, "ascent": 850, "glyphs": [ + { + "uid": "c709da589c923ba3c2ad48d9fc563e93", + "css": "cancel", + "code": 59392, + "src": "entypo" + }, + { + "uid": "381da2c2f7fd51f8de877c044d7f439d", + "css": "picture", + "code": 59393, + "src": "fontawesome" + }, { "uid": "f9cbf7508cd04145ade2800169959eef", "css": "font", - "code": 59392, + "code": 59394, "src": "fontawesome" }, { "uid": "e99461abfef3923546da8d745372c995", "css": "cog", - "code": 59393, - "src": "fontawesome" - }, - { - "uid": "381da2c2f7fd51f8de877c044d7f439d", - "css": "picture", - "code": 59394, + "code": 59395, "src": "fontawesome" }, { "uid": "8b9e6a8dd8f67f7c003ed8e7e5ee0857", "css": "off", - "code": 59395, + "code": 59396, "src": "fontawesome" }, { "uid": "d7271d490b71df4311e32cdacae8b331", "css": "home", - "code": 59396, + "code": 59397, "src": "fontawesome" }, { "uid": "44e04715aecbca7f266a17d5a7863c68", "css": "plus", - "code": 59397, - "src": "fontawesome" - }, - { - "uid": "e15f0d620a7897e2035c18c80142f6d9", - "css": "link-ext", - "code": 61582, + "code": 59398, "src": "fontawesome" }, { @@ -54,6 +54,12 @@ "code": 61618, "src": "fontawesome" }, + { + "uid": "e15f0d620a7897e2035c18c80142f6d9", + "css": "link-ext", + "code": 61582, + "src": "fontawesome" + }, { "uid": "5408be43f7c42bccee419c6be53fdef5", "css": "doc-text", @@ -65,24 +71,6 @@ "css": "folder-empty", "code": 61716, "src": "fontawesome" - }, - { - "uid": "d3b3f17bc3eb7cd809a07bbd4d178bee", - "css": "resize-vertical", - "code": 59398, - "src": "fontawesome" - }, - { - "uid": "6605ee6441bf499ffa3c63d3c7409471", - "css": "move", - "code": 61511, - "src": "fontawesome" - }, - { - "uid": "5211af474d3a9848f67f945e2ccaf143", - "css": "cancel", - "code": 59399, - "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 6b45ebd..2225ca3 100644 --- a/system/author/css/fontello/css/fontello-codes.css +++ b/system/author/css/fontello/css/fontello-codes.css @@ -1,13 +1,11 @@ -.icon-font:before { content: '\e800'; } /* '' */ -.icon-cog:before { content: '\e801'; } /* '' */ -.icon-picture:before { content: '\e802'; } /* '' */ -.icon-off:before { content: '\e803'; } /* '' */ -.icon-home:before { content: '\e804'; } /* '' */ -.icon-plus:before { content: '\e805'; } /* '' */ -.icon-resize-vertical:before { content: '\e806'; } /* '' */ -.icon-cancel:before { content: '\e807'; } /* '' */ -.icon-move:before { content: '\f047'; } /* '' */ +.icon-cancel:before { content: '\e800'; } /* '' */ +.icon-picture: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-link-ext:before { content: '\f08e'; } /* '' */ .icon-resize-full-alt:before { content: '\f0b2'; } /* '' */ .icon-doc-text:before { content: '\f0f6'; } /* '' */ diff --git a/system/author/css/fontello/css/fontello-embedded.css b/system/author/css/fontello/css/fontello-embedded.css index 91b0921..026db0b 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?83994349'); - src: url('../font/fontello.eot?83994349#iefix') format('embedded-opentype'), - url('../font/fontello.svg?83994349#fontello') format('svg'); + src: url('../font/fontello.eot?72138273'); + src: url('../font/fontello.eot?72138273#iefix') format('embedded-opentype'), + url('../font/fontello.svg?72138273#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,AAEAAAAPAIAAAwBwR1NVQiCLJXoAAAD8AAAAVE9TLzI+IFIQAAABUAAAAFZjbWFwpeqAggAAAagAAAJAY3Z0IAbV/wQAABTQAAAAIGZwZ22KkZBZAAAU8AAAC3BnYXNwAAAAEAAAFMgAAAAIZ2x5ZomlrLgAAAPoAAAMkGhlYWQTV5cTAAAQeAAAADZoaGVhB4EDpwAAELAAAAAkaG10eC/6//wAABDUAAAAOGxvY2EY7BWSAAARDAAAAB5tYXhwASkMCwAAESwAAAAgbmFtZcydHiAAABFMAAACzXBvc3RsUs1jAAAUHAAAAKtwcmVw5UErvAAAIGAAAACGAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAEDbQGQAAUAAAJ6ArwAAACMAnoCvAAAAeAAMQECAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAQOgA8RQDUv9qAFoDUgCWAAAAAQAAAAAAAAAAAAUAAAADAAAALAAAAAQAAAGUAAEAAAAAAI4AAwABAAAALAADAAoAAAGUAAQAYgAAAA4ACAACAAboB/BH8I7wsvD28RT//wAA6ADwR/CO8LLw9vEU//8AAAAAAAAAAAAAAAAAAQAOABwAHAAcABwAHAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0AAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAKwAAAAAAAAADQAA6AAAAOgAAAAAAQAA6AEAAOgBAAAAAgAA6AIAAOgCAAAAAwAA6AMAAOgDAAAABAAA6AQAAOgEAAAABQAA6AUAAOgFAAAABgAA6AYAAOgGAAAABwAA6AcAAOgHAAAACAAA8EcAAPBHAAAACQAA8I4AAPCOAAAACgAA8LIAAPCyAAAACwAA8PYAAPD2AAAADAAA8RQAAPEUAAAADQACAAD/sQOhAwsABwBQALNACT42IQkEBQMBR0uwClBYQCoAAQABbwAFAwIDBQJtAAIEAwIEawcGAgQEbgAAAwMAUgAAAANWAAMAA0obS7ALUFhAKgABAAFvAAUDAgMFAm0EAQIGAwIGawcBBgZuAAADAwBSAAAAA1YAAwADShtAKgABAAFvAAUDAgMFAm0AAgQDAgRrBwYCBARuAAADAwBSAAAAA1YAAwADSllZQBMICAhQCFBMS0pJOzoqIxtRCAUWKwEHFxYzMjcmATc+BDcbATMXEx4BFx4BFxYXHgEXFhUUBhciJgciBiM0PwI2PwE2PwE2JzQmLwIOARcUHgEfARY3FhUUByImIyIGJwYBlV9MOh8LFTD+NQENJBwcFgaEnEgGchNSFgkwEAsIC0wJBAIBI44kKpwVAkkHBgMRBAIFAwIiFxj7DjoBECALIBUCAQEhgiAFFAItAhr7AQEBjf4GLAQGBgoYEAFYAZQM/vQryjQTeiEaBgkQAxYKAwoCCgEIGBMQAQEBBwICBgQECVo2OAEgmg4MEgoCBQMBCxUFCwwGAQgAAgAA/7EDWgMLAAgAagBFQEJlWUxBBAAEOwoCAQA0KBsQBAMBA0cABQQFbwYBBAAEbwAAAQBvAAEDAW8AAwIDbwACAmZcW1NRSUgrKiIgExIHBRYrATQmIg4BFjI2JRUUBg8BBgcWFxYUBw4BJyIvAQYHBgcGKwEiJjUnJicHBiInJicmNDc+ATcmLwEuASc1NDY/ATY3JicmNDc+ATMyHwE2NzY3NjsBMhYfARYXNzYyFxYXFhQHDgEHFh8BHgECO1J4UgJWdFYBHAgHaAoLEygGBQ9QDQcHTRkaCQcEEHwIDBAbF08GEAZGFgQFCCgKDwhmBwgBCgVoCA4XJQYFD1ANBwhNGBoJCAMRfAcMAQ8cF08FDwdIFAQECSgKDwhmBwoBXjtUVHZUVHh8BwwBEB4VGzIGDgYVUAEFPA0ITBwQCgdnCQw8BQZAHgUOBgwyDxwbDwEMB3wHDAEQGRogLQcMBxRQBTwNCEwcEAoHZwkLOwUFQxwFDgYMMg8cGhABDAAAAAT///+xBC8DCwAIAA8AHwAvAFVAUh0UAgEDDwEAAQ4NDAkEAgAcFQIEAgRHAAIABAACBG0ABgcBAwEGA2AAAQAAAgEAYAAEBQUEVAAEBAVYAAUEBUwREC4rJiMZFxAfER8TExIIBRcrARQOASY0Nh4BARUhNTcXASUhIgYHERQWNyEyNicRNCYXERQGByEiJjcRNDY3ITIWAWU+Wj4+Wj4CPPzusloBHQEe/IMHCgEMBgN9BwwBClE0JfyDJDYBNCUDfSU0AhEtPgJCVkIEOv76+muzWQEdoQoI/VoHDAEKCAKmCAoS/VolNAE2JAKmJTQBNgAC//3/sQNZA1IAKAA0ACJAHwACAwEDAgFtAAEAAAEAXAADAwwDSTMyLSwaGRQEBRUrARQOAiIuAjc0Njc2FhcWBgcOARUUHgIyPgI3NCYnLgE+ARceAQERFAYiJjcRNDYyFgNZRHKgrKJuSgNaURg8EBIIGDY8LkxqdGhQKgE8NhcKJDwXUVr+myo6LAEqPCgBXleedEREdJ5XZrI+EggYFzwRKXhDOmpMLi5MajpEdioSOjAIEj20AUj+mh0qKh0BZh0qKgAAAAIAAP/5A5ICxQAQADEALkArLiYlGBUPDg0IAQMMAQABAkcEAQMBA28AAQABbwIBAABmKigjIiERFAUFFysBERQGByM1IxUjIiYnEQkBFjcHBgcjIicJAQYmLwEmNjcBNjIfATU0NjsBMhYdARcWFAMSFg7Wj9YPFAEBQQFBAXwiBQcCBwX+fv5+Bw0FIwQCBQGREjATiAoIawgKegYBKP71DxQB1tYWDgEPAQj++AEkKQUBAwFC/r4EAgUpBg4FAU4PD3FsCAoKCONmBBAAAAABAAD/+QMSAwsAIwApQCYABAMEbwABAAFwBQEDAAADVAUBAwMAWAIBAAMATCMzJSMzIwYFGisBFRQGJyMVFAYHIyImNzUjIiYnNTQ2NzM1NDY7ATIWFxUzMhYDEiAW6CAWaxYgAegXHgEgFugeF2sXHgHoFx4Bt2sWIAHpFh4BIBXpHhdrFx4B6BYgIBboIAABAAD/agGKA1IAIAAoQCUEAQAFAQUAAW0DAQECBQECawAFBQxIAAICDQJJFSElFSETBgUaKwEUBicjETMyHgEPAQYiLwEmNDY7AREjIiY2PwE2Mh8BFgGJFg5HRw8UAgyPCh4KjwoUD0hIDhYCCY8LHAuPCwKfDhYB/cQUHgqPCwuPCh4UAjwUHguOCwuOCwABAAD/7wLUAoYAJAAeQBsiGRAHBAACAUcDAQIAAm8BAQAAZhQcFBQEBRgrJRQPAQYiLwEHBiIvASY0PwEnJjQ/ATYyHwE3NjIfARYUDwEXFgLUD0wQLBCkpBAsEEwQEKSkEBBMECwQpKQQLBBMDw+kpA9wFhBMDw+lpQ8PTBAsEKSkECwQTBAQpKQQEEwPLg+kpA8AAQAA/2oD6ANSAEQAUEBNCwEJCgcKCQdtDQEHCAoHCGsGAQABAgEAAm0EAQIDAQIDawwBCAUBAQAIAV4ACgoMSAADAw0DSUFAPTw7OTQzLiwTFxMRJRUhExQOBR0rARQPAQYiJj0BIxUzMhYUDwEGIi8BJjQ2OwE1IxUUBiIvASY0PwE2MhYdATM1IyImND8BNjIfARYUBisBFTM1NDYyHwEWA+gLjgseFNdIDhYLjwoeCo8LFg5I1xQeCo8LC48KHhTXSA4WC48LHAuPCxYOSNcUHguOCwFeDguPCxYOSNcUHgqPCwuPCh4U10gOFguPCxwLjwsWDkjXFB4LjgsLjgseFNdIDhYLjwoAAAIAAP/5A+gDUgAnAD8AREBBKAEBBhEBAgE3LgIEAiEBBQQERwAEAgUCBAVtAAUDAgUDawABAAIEAQJgAAMAAAMAXAAGBgwGSTobJTU2JTMHBRsrARUUBiMhIiY1ETQ2NyEyFh0BFAYjISIGBxEUFhchMjY9ATQ2OwEyFhMRFA4BLwEBBiIvASY0NwEnJjQ2MyEyFgMSXkP+MENeXkMBiQcKCgf+dyU0ATYkAdAlNAoIJAgK1hYcC2L+lAUQBEAGBgFsYgsWDgEdDxQBTLJDXl5DAdBCXgEKCCQICjQl/jAlNAE2JLIICgoB2v7jDxQCDGL+lAYGQAUOBgFsYgscFhYAAAAAAQAA/7EDWgMLAEUAMkAvPjUzIgQCAzQhIBsSERACAQkAAgJHBAEDAgNvBQECAAJvAQEAAGYmOjcbOjkGBRorAQcXNzYWHQEUBisBIicmPwEnBxcWBwYrASImJzU0Nh8BNycHBiMiJyY9ATQ2OwEyFxYPARc3JyY3NjsBMhYHFRQHBiMiJwLMxsZQESwUEPoXCQoRUcbGUBEJChf6DxQBLBFQxsZQCw4HBxYWDvoXCgkRUMbGUREKCRf6DxYBFgcHDgsCJMbGUBITGPoOFhcVEVHGxlERFRcWDvoYExJQxsZQCwMJGPoOFhcVEVHGxlERFRcWDvoYCQMLAAAABgAA/2oDWQNSABMAGgAjADMAQwBTAHJAbxQBAgQsJAIHBkA4AggJUEgCCgsERwACAAMGAgNgAAYABwkGB2ANAQkACAsJCGAOAQsACgULCmAABAQBWAABAQxIDAEFBQBYAAAADQBJREQ0NBsbRFNEUkxKNEM0Qjw6MC4oJhsjGyMTJhQ1Ng8FGSsBHgEVERQGByEiJicRNDY3ITIWFwcVMyYvASYTESMiJic1IRETNDYzITIWHQEUBiMhIiY1BTIWHQEUBiMhIiY9ATQ2MwUyFh0BFAYjISImPQE0NjMDMxAWHhf9EhceASAWAfQWNg9K0gUHrwbG6BceAf5TjwoIAYkICgoI/ncICgGbCAoKCP53CAoKCAGJCAoKCP53CAoKCAJ+EDQY/X4XHgEgFgN8Fx4BFhAm0hEGrwf8sAI8IBXp/KYB4wcKCgckCAoKCFkKCCQICgoIJAgKjwoIJAgKCggkCAoAAAAAAgAA//kDoQMLABcALAAsQCkABAABBQQBYAAFAAACBQBgAAIDAwJUAAICA1gAAwIDTCM1NTU1MwYFGislETQmByEiJic1NCYHIyIGFREUFjMhMjYTERQGIyEiJjURNDY7ATIWHQEhMhYDWR4X/ncXHgEeF7MWICAWAqcWIEdKM/1ZM0pKM7MzSgF3M0p2AYkWIAEgFiQWIAEeF/3oFiAgAZ/+dzNKSjMCGDNKSjMSSgABAAAAAQAAdwpdxl8PPPUACwPoAAAAANgGKbkAAAAA2AYpuf/9/2oELwNSAAAACAACAAAAAAAAAAEAAANS/2oAAAQv//3//wQvAAEAAAAAAAAAAAAAAAAAAAAOA+gAAAOgAAADWQAABC///wNZ//0DoAAAAxEAAAGsAAADEQAAA+gAAAPoAAADWQAAA1kAAAOgAAAAAAAAANQBlgIQAnQC3AMkA2wDtgQ8BL4FPAXwBkgAAAABAAAADgBrAAYAAAAAAAIAHgAuAHMAAACDC3AAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE4IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA4ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8ABGZvbnQDY29nB3BpY3R1cmUDb2ZmBGhvbWUEcGx1cw9yZXNpemUtdmVydGljYWwGY2FuY2VsBG1vdmUIbGluay1leHQPcmVzaXplLWZ1bGwtYWx0CGRvYy10ZXh0DGZvbGRlci1lbXB0eQAAAAABAAH//wAPAAAAAAAAAAAAAAAAAAAAAAAYABgAGAAYA1L/agNS/2qwACwgsABVWEVZICBLuAAOUUuwBlNaWLA0G7AoWWBmIIpVWLACJWG5CAAIAGNjI2IbISGwAFmwAEMjRLIAAQBDYEItsAEssCBgZi2wAiwgZCCwwFCwBCZasigBCkNFY0VSW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCxAQpDRWNFYWSwKFBYIbEBCkNFY0UgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7ABK1lZI7AAUFhlWVktsAMsIEUgsAQlYWQgsAVDUFiwBSNCsAYjQhshIVmwAWAtsAQsIyEjISBksQViQiCwBiNCsQEKQ0VjsQEKQ7ABYEVjsAMqISCwBkMgiiCKsAErsTAFJbAEJlFYYFAbYVJZWCNZISCwQFNYsAErGyGwQFkjsABQWGVZLbAFLLAHQyuyAAIAQ2BCLbAGLLAHI0IjILAAI0JhsAJiZrABY7ABYLAFKi2wBywgIEUgsAtDY7gEAGIgsABQWLBAYFlmsAFjYESwAWAtsAgssgcLAENFQiohsgABAENgQi2wCSywAEMjRLIAAQBDYEItsAosICBFILABKyOwAEOwBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAssICBFILABKyOwAEOwBCVgIEWKI2EgZLAkUFiwABuwQFkjsABQWGVZsAMlI2FERLABYC2wDCwgsAAjQrILCgNFWCEbIyFZKiEtsA0ssQICRbBkYUQtsA4ssAFgICCwDENKsABQWCCwDCNCWbANQ0qwAFJYILANI0JZLbAPLCCwEGJmsAFjILgEAGOKI2GwDkNgIIpgILAOI0IjLbAQLEtUWLEEZERZJLANZSN4LbARLEtRWEtTWLEEZERZGyFZJLATZSN4LbASLLEAD0NVWLEPD0OwAWFCsA8rWbAAQ7ACJUKxDAIlQrENAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAOKiEjsAFhIIojYbAOKiEbsQEAQ2CwAiVCsAIlYbAOKiFZsAxDR7ANQ0dgsAJiILAAUFiwQGBZZrABYyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsQAAEyNEsAFDsAA+sgEBAUNgQi2wEywAsQACRVRYsA8jQiBFsAsjQrAKI7ABYEIgYLABYbUQEAEADgBCQopgsRIGK7ByKxsiWS2wFCyxABMrLbAVLLEBEystsBYssQITKy2wFyyxAxMrLbAYLLEEEystsBkssQUTKy2wGiyxBhMrLbAbLLEHEystsBwssQgTKy2wHSyxCRMrLbAeLACwDSuxAAJFVFiwDyNCIEWwCyNCsAojsAFgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAfLLEAHistsCAssQEeKy2wISyxAh4rLbAiLLEDHistsCMssQQeKy2wJCyxBR4rLbAlLLEGHistsCYssQceKy2wJyyxCB4rLbAoLLEJHistsCksIDywAWAtsCosIGCwEGAgQyOwAWBDsAIlYbABYLApKiEtsCsssCorsCoqLbAsLCAgRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOCMgilVYIEcgILALQ2O4BABiILAAUFiwQGBZZrABY2AjYTgbIVktsC0sALEAAkVUWLABFrAsKrABFTAbIlktsC4sALANK7EAAkVUWLABFrAsKrABFTAbIlktsC8sIDWwAWAtsDAsALABRWO4BABiILAAUFiwQGBZZrABY7ABK7ALQ2O4BABiILAAUFiwQGBZZrABY7ABK7AAFrQAAAAAAEQ+IzixLwEVKi2wMSwgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhOC2wMiwuFzwtsDMsIDwgRyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsABDYbABQ2M4LbA0LLECABYlIC4gR7AAI0KwAiVJiopHI0cjYSBYYhshWbABI0KyMwEBFRQqLbA1LLAAFrAEJbAEJUcjRyNhsAlDK2WKLiMgIDyKOC2wNiywABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyCwCEMgiiNHI0cjYSNGYLAEQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwAmIgsABQWLBAYFlmsAFjYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsAJiILAAUFiwQGBZZrABY2AjILABKyOwBENgsAErsAUlYbAFJbACYiCwAFBYsEBgWWawAWOwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbA3LLAAFiAgILAFJiAuRyNHI2EjPDgtsDgssAAWILAII0IgICBGI0ewASsjYTgtsDkssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbkIAAgAY2MjIFhiGyFZY7gEAGIgsABQWLBAYFlmsAFjYCMuIyAgPIo4IyFZLbA6LLAAFiCwCEMgLkcjRyNhIGCwIGBmsAJiILAAUFiwQGBZZrABYyMgIDyKOC2wOywjIC5GsAIlRlJYIDxZLrErARQrLbA8LCMgLkawAiVGUFggPFkusSsBFCstsD0sIyAuRrACJUZSWCA8WSMgLkawAiVGUFggPFkusSsBFCstsD4ssDUrIyAuRrACJUZSWCA8WS6xKwEUKy2wPyywNiuKICA8sAQjQoo4IyAuRrACJUZSWCA8WS6xKwEUK7AEQy6wKystsEAssAAWsAQlsAQmIC5HI0cjYbAJQysjIDwgLiM4sSsBFCstsEEssQgEJUKwABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyBHsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhsAIlRmE4IyA8IzgbISAgRiNHsAErI2E4IVmxKwEUKy2wQiywNSsusSsBFCstsEMssDYrISMgIDywBCNCIzixKwEUK7AEQy6wKystsEQssAAVIEewACNCsgABARUUEy6wMSotsEUssAAVIEewACNCsgABARUUEy6wMSotsEYssQABFBOwMiotsEcssDQqLbBILLAAFkUjIC4gRoojYTixKwEUKy2wSSywCCNCsEgrLbBKLLIAAEErLbBLLLIAAUErLbBMLLIBAEErLbBNLLIBAUErLbBOLLIAAEIrLbBPLLIAAUIrLbBQLLIBAEIrLbBRLLIBAUIrLbBSLLIAAD4rLbBTLLIAAT4rLbBULLIBAD4rLbBVLLIBAT4rLbBWLLIAAEArLbBXLLIAAUArLbBYLLIBAEArLbBZLLIBAUArLbBaLLIAAEMrLbBbLLIAAUMrLbBcLLIBAEMrLbBdLLIBAUMrLbBeLLIAAD8rLbBfLLIAAT8rLbBgLLIBAD8rLbBhLLIBAT8rLbBiLLA3Ky6xKwEUKy2wYyywNyuwOystsGQssDcrsDwrLbBlLLAAFrA3K7A9Ky2wZiywOCsusSsBFCstsGcssDgrsDsrLbBoLLA4K7A8Ky2waSywOCuwPSstsGossDkrLrErARQrLbBrLLA5K7A7Ky2wbCywOSuwPCstsG0ssDkrsD0rLbBuLLA6Ky6xKwEUKy2wbyywOiuwOystsHAssDorsDwrLbBxLLA6K7A9Ky2wciyzCQQCA0VYIRsjIVlCK7AIZbADJFB4sAEVMC0AS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAVCsgABACqxAAVCswoCAQgqsQAFQrMOAAEIKrEABkK6AsAAAQAJKrEAB0K6AEAAAQAJKrEDAESxJAGIUViwQIhYsQNkRLEmAYhRWLoIgAABBECIY1RYsQMARFlZWVmzDAIBDCq4Af+FsASNsQIARAAA') format('truetype'); + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,AAEAAAAPAIAAAwBwR1NVQiCLJXoAAAD8AAAAVE9TLzI+IFIRAAABUAAAAFZjbWFwrOvnogAAAagAAAIcY3Z0IAbV/wQAABLYAAAAIGZwZ22KkZBZAAAS+AAAC3BnYXNwAAAAEAAAEtAAAAAIZ2x5Znm45vsAAAPEAAAK4GhlYWQTmGYhAAAOpAAAADZoaGVhB4EDpQAADtwAAAAkaG10eCkr//wAAA8AAAAAMGxvY2ERug8kAAAPMAAAABptYXhwAScMCwAAD0wAAAAgbmFtZcydHiAAAA9sAAACzXBvc3RlmG54AAASPAAAAJJwcmVw5UErvAAAHmgAAACGAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAEDbgGQAAUAAAJ6ArwAAACMAnoCvAAAAeAAMQECAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAQOgA8RQDUv9qAFoDUgCWAAAAAQAAAAAAAAAAAAUAAAADAAAALAAAAAQAAAGIAAEAAAAAAIIAAwABAAAALAADAAoAAAGIAAQAVgAAAAwACAACAAToBvCO8LLw9vEU//8AAOgA8I7wsvD28RT//wAAAAAAAAAAAAAAAQAMABgAGAAYABgAAAABAAIAAwAEAAUABgAHAAgACQAKAAsAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAJQAAAAAAAAACwAA6AAAAOgAAAAAAQAA6AEAAOgBAAAAAgAA6AIAAOgCAAAAAwAA6AMAAOgDAAAABAAA6AQAAOgEAAAABQAA6AUAAOgFAAAABgAA6AYAAOgGAAAABwAA8I4AAPCOAAAACAAA8LIAAPCyAAAACQAA8PYAAPD2AAAACgAA8RQAAPEUAAAACwABAAAAAAHWAmIAHQAeQBsdFg4GBAACAUcDAQIAAm8BAQAAZhQaFBMEBRgrJRYUBiIvAQcGIicmND8BJyY0NzYyHwE3NjIWFA8BAcQSJDIShIQSMhIQEIqKEBASMhKEhBIyJBKKwhIyIhCYmBAQEjISnJ4SMhIQEJiYECIyEp4AAAT///+xBC8DCwAIAA8AHwAvAFVAUh0UAgEDDwEAAQ4NDAkEAgAcFQIEAgRHAAIABAACBG0ABgcBAwEGA2AAAQAAAgEAYAAEBQUEVAAEBAVYAAUEBUwREC4rJiMZFxAfER8TExIIBRcrARQOASY0Nh4BARUhNTcXASUhIgYHERQWNyEyNicRNCYXERQGByEiJjcRNDY3ITIWAWU+Wj4+Wj4CPPzusloBHQEe/IMHCgEMBgN9BwwBClE0JfyDJDYBNCUDfSU0AhEtPgJCVkIEOv76+muzWQEdoQoI/VoHDAEKCAKmCAoS/VolNAE2JAKmJTQBNgACAAD/sQOhAwsABwBQALNACT42IQkEBQMBR0uwClBYQCoAAQABbwAFAwIDBQJtAAIEAwIEawcGAgQEbgAAAwMAUgAAAANWAAMAA0obS7ALUFhAKgABAAFvAAUDAgMFAm0EAQIGAwIGawcBBgZuAAADAwBSAAAAA1YAAwADShtAKgABAAFvAAUDAgMFAm0AAgQDAgRrBwYCBARuAAADAwBSAAAAA1YAAwADSllZQBMICAhQCFBMS0pJOzoqIxtRCAUWKwEHFxYzMjcmATc+BDcbATMXEx4BFx4BFxYXHgEXFhUUBhciJgciBiM0PwI2PwE2PwE2JzQmLwIOARcUHgEfARY3FhUUByImIyIGJwYBlV9MOh8LFTD+NQENJBwcFgaEnEgGchNSFgkwEAsIC0wJBAIBI44kKpwVAkkHBgMRBAIFAwIiFxj7DjoBECALIBUCAQEhgiAFFAItAhr7AQEBjf4GLAQGBgoYEAFYAZQM/vQryjQTeiEaBgkQAxYKAwoCCgEIGBMQAQEBBwICBgQECVo2OAEgmg4MEgoCBQMBCxUFCwwGAQgAAgAA/7EDWgMLAAgAagBFQEJlWUxBBAAEOwoCAQA0KBsQBAMBA0cABQQFbwYBBAAEbwAAAQBvAAEDAW8AAwIDbwACAmZcW1NRSUgrKiIgExIHBRYrATQmIg4BFjI2JRUUBg8BBgcWFxYUBw4BJyIvAQYHBgcGKwEiJjUnJicHBiInJicmNDc+ATcmLwEuASc1NDY/ATY3JicmNDc+ATMyHwE2NzY3NjsBMhYfARYXNzYyFxYXFhQHDgEHFh8BHgECO1J4UgJWdFYBHAgHaAoLEygGBQ9QDQcHTRkaCQcEEHwIDBAbF08GEAZGFgQFCCgKDwhmBwgBCgVoCA4XJQYFD1ANBwhNGBoJCAMRfAcMAQ8cF08FDwdIFAQECSgKDwhmBwoBXjtUVHZUVHh8BwwBEB4VGzIGDgYVUAEFPA0ITBwQCgdnCQw8BQZAHgUOBgwyDxwbDwEMB3wHDAEQGRogLQcMBxRQBTwNCEwcEAoHZwkLOwUFQxwFDgYMMg8cGhABDAAAAAL//f+xA1kDUgAoADQAIkAfAAIDAQMCAW0AAQAAAQBcAAMDDANJMzItLBoZFAQFFSsBFA4CIi4CNzQ2NzYWFxYGBw4BFRQeAjI+Ajc0JicuAT4BFx4BAREUBiImNxE0NjIWA1lEcqCsom5KA1pRGDwQEggYNjwuTGp0aFAqATw2FwokPBdRWv6bKjosASo8KAFeV550RER0nldmsj4SCBgXPBEpeEM6akwuLkxqOkR2KhI6MAgSPbQBSP6aHSoqHQFmHSoqAAAAAgAA//kDkgLFABAAMQAuQCsuJiUYFQ8ODQgBAwwBAAECRwQBAwEDbwABAAFvAgEAAGYqKCMiIREUBQUXKwERFAYHIzUjFSMiJicRCQEWNwcGByMiJwkBBiYvASY2NwE2Mh8BNTQ2OwEyFh0BFxYUAxIWDtaP1g8UAQFBAUEBfCIFBwIHBf5+/n4HDQUjBAIFAZESMBOICghrCAp6BgEo/vUPFAHW1hYOAQ8BCP74ASQpBQEDAUL+vgQCBSkGDgUBTg8PcWwICgoI42YEEAAAAAEAAP/5AxIDCwAjAClAJgAEAwRvAAEAAXAFAQMAAANUBQEDAwBYAgEAAwBMIzMlIzMjBgUaKwEVFAYnIxUUBgcjIiY3NSMiJic1NDY3MzU0NjsBMhYXFTMyFgMSIBboIBZrFiAB6BceASAW6B4XaxceAegXHgG3axYgAekWHgEgFekeF2sXHgHoFiAgFuggAAIAAP/5A+gDUgAnAD8AREBBKAEBBhEBAgE3LgIEAiEBBQQERwAEAgUCBAVtAAUDAgUDawABAAIEAQJgAAMAAAMAXAAGBgwGSTobJTU2JTMHBRsrARUUBiMhIiY1ETQ2NyEyFh0BFAYjISIGBxEUFhchMjY9ATQ2OwEyFhMRFA4BLwEBBiIvASY0NwEnJjQ2MyEyFgMSXkP+MENeXkMBiQcKCgf+dyU0ATYkAdAlNAoIJAgK1hYcC2L+lAUQBEAGBgFsYgsWDgEdDxQBTLJDXl5DAdBCXgEKCCQICjQl/jAlNAE2JLIICgoB2v7jDxQCDGL+lAYGQAUOBgFsYgscFhYAAAAAAQAA/7EDWgMLAEUAMkAvPjUzIgQCAzQhIBsSERACAQkAAgJHBAEDAgNvBQECAAJvAQEAAGYmOjcbOjkGBRorAQcXNzYWHQEUBisBIicmPwEnBxcWBwYrASImJzU0Nh8BNycHBiMiJyY9ATQ2OwEyFxYPARc3JyY3NjsBMhYHFRQHBiMiJwLMxsZQESwUEPoXCQoRUcbGUBEJChf6DxQBLBFQxsZQCw4HBxYWDvoXCgkRUMbGUREKCRf6DxYBFgcHDgsCJMbGUBITGPoOFhcVEVHGxlERFRcWDvoYExJQxsZQCwMJGPoOFhcVEVHGxlERFRcWDvoYCQMLAAAABgAA/2oDWQNSABMAGgAjADMAQwBTAHJAbxQBAgQsJAIHBkA4AggJUEgCCgsERwACAAMGAgNgAAYABwkGB2ANAQkACAsJCGAOAQsACgULCmAABAQBWAABAQxIDAEFBQBYAAAADQBJREQ0NBsbRFNEUkxKNEM0Qjw6MC4oJhsjGyMTJhQ1Ng8FGSsBHgEVERQGByEiJicRNDY3ITIWFwcVMyYvASYTESMiJic1IRETNDYzITIWHQEUBiMhIiY1BTIWHQEUBiMhIiY9ATQ2MwUyFh0BFAYjISImPQE0NjMDMxAWHhf9EhceASAWAfQWNg9K0gUHrwbG6BceAf5TjwoIAYkICgoI/ncICgGbCAoKCP53CAoKCAGJCAoKCP53CAoKCAJ+EDQY/X4XHgEgFgN8Fx4BFhAm0hEGrwf8sAI8IBXp/KYB4wcKCgckCAoKCFkKCCQICgoIJAgKjwoIJAgKCggkCAoAAAAAAgAA//kDoQMLABcALAAsQCkABAABBQQBYAAFAAACBQBgAAIDAwJUAAICA1gAAwIDTCM1NTU1MwYFGislETQmByEiJic1NCYHIyIGFREUFjMhMjYTERQGIyEiJjURNDY7ATIWHQEhMhYDWR4X/ncXHgEeF7MWICAWAqcWIEdKM/1ZM0pKM7MzSgF3M0p2AYkWIAEgFiQWIAEeF/3oFiAgAZ/+dzNKSjMCGDNKSjMSSgABAAAAAQAAsdpZEV8PPPUACwPoAAAAANgmkUAAAAAA2CaRQP/9/2oELwNSAAAACAACAAAAAAAAAAEAAANS/2oAAAQv//3//wQvAAEAAAAAAAAAAAAAAAAAAAAMA+gAAAHWAAAEL///A6AAAANZAAADWf/9A6AAAAMRAAAD6AAAA1kAAANZAAADoAAAAAAAAABAALoBjgJQArQDHANkA+YEZAUYBXAAAAABAAAADABrAAYAAAAAAAIAHgAuAHMAAACDC3AAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE4IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA4ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQAGY2FuY2VsB3BpY3R1cmUEZm9udANjb2cDb2ZmBGhvbWUEcGx1cwhsaW5rLWV4dA9yZXNpemUtZnVsbC1hbHQIZG9jLXRleHQMZm9sZGVyLWVtcHR5AAAAAAABAAH//wAPAAAAAAAAAAAAAAAAAAAAAAAYABgAGAAYA1L/agNS/2qwACwgsABVWEVZICBLuAAOUUuwBlNaWLA0G7AoWWBmIIpVWLACJWG5CAAIAGNjI2IbISGwAFmwAEMjRLIAAQBDYEItsAEssCBgZi2wAiwgZCCwwFCwBCZasigBCkNFY0VSW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCxAQpDRWNFYWSwKFBYIbEBCkNFY0UgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7ABK1lZI7AAUFhlWVktsAMsIEUgsAQlYWQgsAVDUFiwBSNCsAYjQhshIVmwAWAtsAQsIyEjISBksQViQiCwBiNCsQEKQ0VjsQEKQ7ABYEVjsAMqISCwBkMgiiCKsAErsTAFJbAEJlFYYFAbYVJZWCNZISCwQFNYsAErGyGwQFkjsABQWGVZLbAFLLAHQyuyAAIAQ2BCLbAGLLAHI0IjILAAI0JhsAJiZrABY7ABYLAFKi2wBywgIEUgsAtDY7gEAGIgsABQWLBAYFlmsAFjYESwAWAtsAgssgcLAENFQiohsgABAENgQi2wCSywAEMjRLIAAQBDYEItsAosICBFILABKyOwAEOwBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAssICBFILABKyOwAEOwBCVgIEWKI2EgZLAkUFiwABuwQFkjsABQWGVZsAMlI2FERLABYC2wDCwgsAAjQrILCgNFWCEbIyFZKiEtsA0ssQICRbBkYUQtsA4ssAFgICCwDENKsABQWCCwDCNCWbANQ0qwAFJYILANI0JZLbAPLCCwEGJmsAFjILgEAGOKI2GwDkNgIIpgILAOI0IjLbAQLEtUWLEEZERZJLANZSN4LbARLEtRWEtTWLEEZERZGyFZJLATZSN4LbASLLEAD0NVWLEPD0OwAWFCsA8rWbAAQ7ACJUKxDAIlQrENAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAOKiEjsAFhIIojYbAOKiEbsQEAQ2CwAiVCsAIlYbAOKiFZsAxDR7ANQ0dgsAJiILAAUFiwQGBZZrABYyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsQAAEyNEsAFDsAA+sgEBAUNgQi2wEywAsQACRVRYsA8jQiBFsAsjQrAKI7ABYEIgYLABYbUQEAEADgBCQopgsRIGK7ByKxsiWS2wFCyxABMrLbAVLLEBEystsBYssQITKy2wFyyxAxMrLbAYLLEEEystsBkssQUTKy2wGiyxBhMrLbAbLLEHEystsBwssQgTKy2wHSyxCRMrLbAeLACwDSuxAAJFVFiwDyNCIEWwCyNCsAojsAFgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAfLLEAHistsCAssQEeKy2wISyxAh4rLbAiLLEDHistsCMssQQeKy2wJCyxBR4rLbAlLLEGHistsCYssQceKy2wJyyxCB4rLbAoLLEJHistsCksIDywAWAtsCosIGCwEGAgQyOwAWBDsAIlYbABYLApKiEtsCsssCorsCoqLbAsLCAgRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOCMgilVYIEcgILALQ2O4BABiILAAUFiwQGBZZrABY2AjYTgbIVktsC0sALEAAkVUWLABFrAsKrABFTAbIlktsC4sALANK7EAAkVUWLABFrAsKrABFTAbIlktsC8sIDWwAWAtsDAsALABRWO4BABiILAAUFiwQGBZZrABY7ABK7ALQ2O4BABiILAAUFiwQGBZZrABY7ABK7AAFrQAAAAAAEQ+IzixLwEVKi2wMSwgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhOC2wMiwuFzwtsDMsIDwgRyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsABDYbABQ2M4LbA0LLECABYlIC4gR7AAI0KwAiVJiopHI0cjYSBYYhshWbABI0KyMwEBFRQqLbA1LLAAFrAEJbAEJUcjRyNhsAlDK2WKLiMgIDyKOC2wNiywABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyCwCEMgiiNHI0cjYSNGYLAEQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwAmIgsABQWLBAYFlmsAFjYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsAJiILAAUFiwQGBZZrABY2AjILABKyOwBENgsAErsAUlYbAFJbACYiCwAFBYsEBgWWawAWOwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbA3LLAAFiAgILAFJiAuRyNHI2EjPDgtsDgssAAWILAII0IgICBGI0ewASsjYTgtsDkssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbkIAAgAY2MjIFhiGyFZY7gEAGIgsABQWLBAYFlmsAFjYCMuIyAgPIo4IyFZLbA6LLAAFiCwCEMgLkcjRyNhIGCwIGBmsAJiILAAUFiwQGBZZrABYyMgIDyKOC2wOywjIC5GsAIlRlJYIDxZLrErARQrLbA8LCMgLkawAiVGUFggPFkusSsBFCstsD0sIyAuRrACJUZSWCA8WSMgLkawAiVGUFggPFkusSsBFCstsD4ssDUrIyAuRrACJUZSWCA8WS6xKwEUKy2wPyywNiuKICA8sAQjQoo4IyAuRrACJUZSWCA8WS6xKwEUK7AEQy6wKystsEAssAAWsAQlsAQmIC5HI0cjYbAJQysjIDwgLiM4sSsBFCstsEEssQgEJUKwABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyBHsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhsAIlRmE4IyA8IzgbISAgRiNHsAErI2E4IVmxKwEUKy2wQiywNSsusSsBFCstsEMssDYrISMgIDywBCNCIzixKwEUK7AEQy6wKystsEQssAAVIEewACNCsgABARUUEy6wMSotsEUssAAVIEewACNCsgABARUUEy6wMSotsEYssQABFBOwMiotsEcssDQqLbBILLAAFkUjIC4gRoojYTixKwEUKy2wSSywCCNCsEgrLbBKLLIAAEErLbBLLLIAAUErLbBMLLIBAEErLbBNLLIBAUErLbBOLLIAAEIrLbBPLLIAAUIrLbBQLLIBAEIrLbBRLLIBAUIrLbBSLLIAAD4rLbBTLLIAAT4rLbBULLIBAD4rLbBVLLIBAT4rLbBWLLIAAEArLbBXLLIAAUArLbBYLLIBAEArLbBZLLIBAUArLbBaLLIAAEMrLbBbLLIAAUMrLbBcLLIBAEMrLbBdLLIBAUMrLbBeLLIAAD8rLbBfLLIAAT8rLbBgLLIBAD8rLbBhLLIBAT8rLbBiLLA3Ky6xKwEUKy2wYyywNyuwOystsGQssDcrsDwrLbBlLLAAFrA3K7A9Ky2wZiywOCsusSsBFCstsGcssDgrsDsrLbBoLLA4K7A8Ky2waSywOCuwPSstsGossDkrLrErARQrLbBrLLA5K7A7Ky2wbCywOSuwPCstsG0ssDkrsD0rLbBuLLA6Ky6xKwEUKy2wbyywOiuwOystsHAssDorsDwrLbBxLLA6K7A9Ky2wciyzCQQCA0VYIRsjIVlCK7AIZbADJFB4sAEVMC0AS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAVCsgABACqxAAVCswoCAQgqsQAFQrMOAAEIKrEABkK6AsAAAQAJKrEAB0K6AEAAAQAJKrEDAESxJAGIUViwQIhYsQNkRLEmAYhRWLoIgAABBECIY1RYsQMARFlZWVmzDAIBDCq4Af+FsASNsQIARAAA') 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?83994349#fontello') format('svg'); + src: url('../font/fontello.svg?72138273#fontello') format('svg'); } } */ @@ -52,15 +52,13 @@ /* Uncomment for 3D effect */ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } -.icon-font:before { content: '\e800'; } /* '' */ -.icon-cog:before { content: '\e801'; } /* '' */ -.icon-picture:before { content: '\e802'; } /* '' */ -.icon-off:before { content: '\e803'; } /* '' */ -.icon-home:before { content: '\e804'; } /* '' */ -.icon-plus:before { content: '\e805'; } /* '' */ -.icon-resize-vertical:before { content: '\e806'; } /* '' */ -.icon-cancel:before { content: '\e807'; } /* '' */ -.icon-move:before { content: '\f047'; } /* '' */ +.icon-cancel:before { content: '\e800'; } /* '' */ +.icon-picture: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-link-ext:before { content: '\f08e'; } /* '' */ .icon-resize-full-alt:before { content: '\f0b2'; } /* '' */ .icon-doc-text:before { content: '\f0f6'; } /* '' */ diff --git a/system/author/css/fontello/css/fontello-ie7-codes.css b/system/author/css/fontello/css/fontello-ie7-codes.css index c2643ba..10f7454 100644 --- a/system/author/css/fontello/css/fontello-ie7-codes.css +++ b/system/author/css/fontello/css/fontello-ie7-codes.css @@ -1,13 +1,11 @@ -.icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-picture { *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-resize-vertical { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-picture { *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-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-resize-full-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-doc-text { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } diff --git a/system/author/css/fontello/css/fontello-ie7.css b/system/author/css/fontello/css/fontello-ie7.css index dacfc8c..aba1d79 100644 --- a/system/author/css/fontello/css/fontello-ie7.css +++ b/system/author/css/fontello/css/fontello-ie7.css @@ -10,15 +10,13 @@ /* font-size: 120%; */ } -.icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-picture { *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-resize-vertical { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-picture { *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-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-resize-full-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-doc-text { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } diff --git a/system/author/css/fontello/css/fontello.css b/system/author/css/fontello/css/fontello.css index 83f4c63..c10c103 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?89525311'); - src: url('../font/fontello.eot?89525311#iefix') format('embedded-opentype'), - url('../font/fontello.woff2?89525311') format('woff2'), - url('../font/fontello.woff?89525311') format('woff'), - url('../font/fontello.ttf?89525311') format('truetype'), - url('../font/fontello.svg?89525311#fontello') format('svg'); + src: url('../font/fontello.eot?52515879'); + src: url('../font/fontello.eot?52515879#iefix') format('embedded-opentype'), + url('../font/fontello.woff2?52515879') format('woff2'), + url('../font/fontello.woff?52515879') format('woff'), + url('../font/fontello.ttf?52515879') format('truetype'), + url('../font/fontello.svg?52515879#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?89525311#fontello') format('svg'); + src: url('../font/fontello.svg?52515879#fontello') format('svg'); } } */ @@ -55,15 +55,13 @@ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } -.icon-font:before { content: '\e800'; } /* '' */ -.icon-cog:before { content: '\e801'; } /* '' */ -.icon-picture:before { content: '\e802'; } /* '' */ -.icon-off:before { content: '\e803'; } /* '' */ -.icon-home:before { content: '\e804'; } /* '' */ -.icon-plus:before { content: '\e805'; } /* '' */ -.icon-resize-vertical:before { content: '\e806'; } /* '' */ -.icon-cancel:before { content: '\e807'; } /* '' */ -.icon-move:before { content: '\f047'; } /* '' */ +.icon-cancel:before { content: '\e800'; } /* '' */ +.icon-picture: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-link-ext:before { content: '\f08e'; } /* '' */ .icon-resize-full-alt:before { content: '\f0b2'; } /* '' */ .icon-doc-text:before { content: '\f0f6'; } /* '' */ diff --git a/system/author/css/fontello/demo.html b/system/author/css/fontello/demo.html index d45d652..4750e9a 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?63828600'); - src: url('./font/fontello.eot?63828600#iefix') format('embedded-opentype'), - url('./font/fontello.woff?63828600') format('woff'), - url('./font/fontello.ttf?63828600') format('truetype'), - url('./font/fontello.svg?63828600#fontello') format('svg'); + src: url('./font/fontello.eot?74591350'); + src: url('./font/fontello.eot?74591350#iefix') format('embedded-opentype'), + url('./font/fontello.woff?74591350') format('woff'), + url('./font/fontello.ttf?74591350') format('truetype'), + url('./font/fontello.svg?74591350#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -298,24 +298,20 @@ body {
-
icon-font0xe800
-
icon-cog0xe801
-
icon-picture0xe802
-
icon-off0xe803
+
icon-cancel0xe800
+
icon-picture0xe801
+
icon-font0xe802
+
icon-cog0xe803
-
icon-home0xe804
-
icon-plus0xe805
-
icon-resize-vertical0xe806
-
icon-cancel0xe807
-
-
-
icon-move0xf047
+
icon-off0xe804
+
icon-home0xe805
+
icon-plus0xe806
icon-link-ext0xf08e
+
+
icon-resize-full-alt0xf0b2
icon-doc-text0xf0f6
-
-
icon-folder-empty0xf114
diff --git a/system/author/css/fontello/font/fontello.eot b/system/author/css/fontello/font/fontello.eot index d90072bcbe74b6bde55e4e4e9843fa30e7d2da27..aa233f6fd07274e3f623e680b744b2c464aa4319 100644 GIT binary patch delta 783 zcmYk4K}Zx~6vyA2@7vj3cWigZRm61NmQ9Pzlr8ikxlz!igAgo8hnU8h-C%cT&^7cV zg$LO{T*t#6N+b$8bkXe))+sy|bV)=ybjgGuRwxTnrZ=+|&G5eWe*gD0DAOkPN&({Q#Id4M(B3|Z#)$LO;5*ZpENRu^ zG&L|x`6Y8gGe2KWz6OZqtW~^;Me7i=v-5zI1-K8)jn0v8qD#&LhYaZw_&@-@C)OA0 z>-B^Eh;0Mx!T;o*cNV1G?Z>Y}0@dQ+0TH}Z#ZPsqTNMB8r@;Cq9Ql`zm4Nk~WoGLO z^b^SF2-MdbMu(w(&@iXH{Yb;8pxZuf3AdpOqUn=eZ6`zy0$yV%fM6h{^+-pgg?rkQ zr`sZ8ydS+{ytn7#2+}e%nCeDa+9E;3O*xU0=g!Z`DLE7>mqQ^6=7=eRzy)Dcc)>c^INRmpo_3EjW6l?lYCGWo zOG_vqLyjI4(ThIxV-p5Y!e$UvrKoCouX#r;O-*QAH;N^u8d+xOI?ovejhp$YN$XPU Kg__wKll}lfY_a43 delta 1290 zcmah}O>7%g5T1E&f9zd**Ou4Y0?s9|N#rWxbh^ zzV8bF#&^VLs!q+my1lhP*ac9XT6xW(c#QBj)RWy=chkM;-n(P;`=k>58~Zha3(}g@-(M<4>p4{uK?0eo zg{i&@5r`5cb$(`lc3h_F-b?^Df)Wtz^!WVqJ()HlqeZk`V6+_E&A_}y-J5|?NpSB4 zM#bTd5g0_fKZ!?q=Xc?5R|}7^7LD7#fLHlh$iS1u5dlF&5zyv{OhmQ}q8KRwV^MZG zIWUqONJ!%2<7h}@L-FiX8g-NgCvh~FKY{U~!O{E-=BEy$iC0W*c2+l7q^+ctwqod| zl4i1STTQ8Lm3^q0`0#6kn3k$ihQSI(THRFX=c(TRgYB`mU>MTHCk7vj$pSE(<;Z|F zkm#zBG7LdHI6h(o+si=@GdMPy3mQ1?cR}<4lkMqqv5DBu4qfJAo+r1D^_IS~qdR77 zPSGV+2*dH!G zWgf!pG^zY(NYjwUF`1pt`NQ%ash2ixlg^%`N?SFx(rr)UK;nS#^$!S2$8%YY?#KTp z{FV3%%(OW>6?DzRX|DliLbkyl+ zbMk(Umq$6iQNI7#!*^MXHQA4RnAiDdLP7XSEQqdDB9_hoXx;m|$`>?}ouhyvN+@Fp z!>FK&5sadSItbOqN|RR_HQ8CJG%v1Nyiu(Riw)ZnochHzebri9dd)hzZml+#D&@LV WDX&zlx?nfft - + - + - + - + - + - + - - - - - + diff --git a/system/author/css/fontello/font/fontello.ttf b/system/author/css/fontello/font/fontello.ttf index 279697f96e63477bd4d28e8cb86fe1db19688a89..05f86ef864fb7679769cb97e4ba11e74a418a850 100644 GIT binary patch delta 757 zcmYk4PiWI{6vy8$zclIAux4o}W$sU{byccvMAC<;6jOe`_deh6uP^TxUTeZV zzkF=58-Pp!Ku$AN`{}nY50Re$FumHXN|Jl;u>jHz`bopio3)kYY2*Wdh@Dr^>?OEOaJdu3~ z&|g?NxJF9ORgzy^0)i&M9iTyW3S%eUaS2$+p)Noe7+_nRTX#3y{XN<909x=r1^@Rq zf~OOQKc5(^#X<-;;IT>v*2QKC_wPI=&Sl1RrWigd1nTOc7jY(OZqcm+z6hl-#*OyE zGT`pFm*41~++J8ZxCq&1Za^ROk00racX2E*VvQ$O=pHa4Fy{i+=DDICdi)lum=YUmHFW7Ac)}I!-j|>o}0Uh;)5jTJNcd8 z`ObIF@4GkdOnY`GRSyH;830%;+68Ctmv`SM{3QU(6*p^1>Bo)$V0=$}vgDNQOP6=f z5q1Gor(D=@C>|z!hkT%1dAoFR@7hfO-UbNnEL(*)qh~*fQpy(bnPm#d@9{4Pe@%F3 z*{*F({IS^ilLGq`I8mt<3;n;wJ_3jY2`B8rmV-xvD&cX$$+d!QeRnmHBs@GS6p_R>CY zB7ke%6(H2i@x_L zj*d+E4IJ-wL3E$V_VxMjczAc0mie&f$sJ(5uJ7*Zjv1cU^}Rj)znS_mFQMDidEO?K zUVt;XmsRXhWTi*8LnsFnIj|}rAft=51!UAHUkzeFq+SEK1d2ieavtKRXLB>zlh043 zkBvwBq7hF_qppdENKS8#kr_U|AB zSl%Y}62?8!*^^XhsHT>`=V|Oq>=Rx6eS*?)DXr0c{D0y|v09d$m16C}y2Y!dlCWI0 sEy1Z=*wELljg@z-qnp-xZKYVKNX5ch(W(e`b<=8I?M=6S=sg_#3#X$3NdN!< diff --git a/system/author/css/fontello/font/fontello.woff b/system/author/css/fontello/font/fontello.woff index a614e39bead61e899f4b4e5ecd408f7a38e674e0..f86be2b6a7c81cafce9c08bd6b3c581f8a62cb86 100644 GIT binary patch delta 2768 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 SYCld$!b@1#+x@`+Jmi1mJJy^4 delta 3018 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 ai1GHK%Q0YM`n%r=DbAig#M+pnx5NgtTBTS3 literal 4352 zcmV+b5&!OYPew8T0RR9101*HH4*&oF03hf901&AF0RR9100000000000000000000 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 u-+Al4ORHN5U;D8?;56Nn_osf3>NPlZ6Jp-V=Hl -
{{ title }}
+
{{ title }}
{% for id, block in content %} -
{{block}}
+
{{block}}
{% endfor %} -
+
- + +
diff --git a/system/author/js/author.js b/system/author/js/author.js index 3e30ed9..308b0ed 100644 --- a/system/author/js/author.js +++ b/system/author/js/author.js @@ -107,6 +107,21 @@ toggleElement.classList.toggle(myclass); } + if (window.Element && !Element.prototype.closest) { + Element.prototype.closest = + function(s) { + var matches = (this.document || this.ownerDocument).querySelectorAll(s), + i, + el = this; + do { + i = matches.length; + while (--i >= 0 && matches.item(i) !== el) {}; + } while ((i < 0) && (el = el.parentElement)); + return el; + }; + } + + /********************************** ** START VERSION CHECK ** **********************************/ diff --git a/system/author/js/vue-blox.js b/system/author/js/vue-blox.js index 3623b7a..2bee293 100644 --- a/system/author/js/vue-blox.js +++ b/system/author/js/vue-blox.js @@ -1,5 +1,8 @@ +const eventBus = new Vue(); + const contentComponent = Vue.component('content-block', { props: ['body'], + template: '
', data: function () { return { preview: 'visible', @@ -9,156 +12,168 @@ const contentComponent = Vue.component('content-block', { disabled: false, } }, + mounted: function() + { + eventBus.$on('closeComponents', this.closeComponents); + }, methods: { - getData: function() + switchToEditMode: function() { + eventBus.$emit('closeComponents'); self = this; - - if(self.$root.$data.freeze == false && self.$root.$data.blockType != '') - { - self.$root.$data.freeze = true; - this.preview = 'hidden'; - this.edit = true; - this.compmarkdown = self.$root.$data.blockMarkdown; - this.componentType = self.$root.$data.blockType; - self.$root.sortable.option("disabled",true); - } - /* - window.addEventListener('click', function(e) - { - if (!e.target.closest('.editactive')) - { - console.info('not found'); - publishController.errors.message = false; - - this.preview = 'visible'; - this.edit = false; - this.compmarkdown = ''; - self.componentType = false; - self.$root.$data.freeze = false; - self.$root.sortable.option("disabled",false); - } - }); - */ + self.$root.$data.freeze = true; /* freeze the data */ + self.$root.sortable.option("disabled",true); /* disable sorting */ + this.preview = 'hidden'; /* hide the html-preview */ + this.edit = true; /* show the edit-mode */ + this.compmarkdown = self.$root.$data.blockMarkdown; /* get markdown data */ + this.componentType = self.$root.$data.blockType; /* get block-type of element */ }, - cancelBlock: function() + closeComponents: function() { - publishController.errors.message = false; - this.preview = 'visible'; this.edit = false; this.componentType = false; - self = this; - self.$root.$data.freeze = false; - self.$root.sortable.option("disabled",false); }, - submitBlock: function(e){ + switchToPreviewMode: function() + { + self = this; + self.$root.$data.freeze = false; /* activate the data again */ + self.$root.sortable.option("disabled",false); /* activate sorting again */ + this.preview = 'visible'; /* show the html-preview */ + this.edit = false; /* hide the edit mode */ + this.compmarkdown = ''; /* clear markdown content */ + this.componentType = false; /* delete the component type */ + self.$root.$data.blockType = false; + self.$root.$data.blockMarkdown = false; + self.$root.$data.file = false; + publishController.errors.message = false; /* delete all error messages */ + }, + freezePage: function() + { + this.disabled = 'disabled'; + publishController.errors.message = false; + publishController.publishDisabled = true; + var self = this; + self.$root.$data.freeze = true; + }, + activatePage: function() + { + this.disabled = false; + publishController.publishDisabled = false; + }, + getData: function() + { + self = this; + if(self.$root.$data.blockType != '') + { + this.switchToEditMode(); + } + + /* + if(self.$root.$data.freeze == false && self.$root.$data.blockType != '') + { + this.switchToEditMode(); + } + */ + }, + submitBlock: function(){ var emptyline = /^\s*$(?:\r\n?|\n)/gm; if(this.compmarkdown.search(emptyline) > -1) { var checkempty = this.compmarkdown.replace(/(\r\n|\n|\r|\s)/gm,""); if(checkempty == '') { - publishController.errors.message = false; - - this.preview = 'visible'; - this.edit = false; - this.componentType = false; - self = this; - self.$root.$data.freeze = false; - self.$root.sortable.option("disabled",false); + this.switchToPreviewMode(); } else { - self.$root.sortable.option("disabled",false); this.saveBlock(); } } - }, + }, saveBlock: function() - { - publishController.errors.message = false; - this.disabled = 'disabled'; - - var self = this; - - self.$root.$data.freeze = true; - - var url = self.$root.$data.root + '/api/v1/block'; - - var params = { - 'url': document.getElementById("path").value, - 'markdown': this.compmarkdown, - 'block_id': self.$root.$data.blockId, - 'csrf_name': document.getElementById("csrf_name").value, - 'csrf_value': document.getElementById("csrf_value").value, - }; - - var method = 'PUT'; - - sendJson(function(response, httpStatus) + { + if(this.compmarkdown == undefined || this.compmarkdown.replace(/(\r\n|\n|\r|\s)/gm,"") == '') { - if(httpStatus == 400) + this.switchToPreviewMode(); + } + else + { + this.freezePage(); + + var self = this; + + if(this.componentType == 'image-component' && self.$root.$data.file) { - self.disabled = false; - publishController.publishDisabled = false; + var url = self.$root.$data.root + '/api/v1/image'; + var method = 'PUT'; } - if(response) + else { - self.disabled = false; - publishController.publishDisabled = false; - - var result = JSON.parse(response); - - if(result.errors) + var url = self.$root.$data.root + '/api/v1/block'; + var method = 'PUT'; + } + + var params = { + 'url': document.getElementById("path").value, + 'markdown': this.compmarkdown, + 'block_id': self.$root.$data.blockId, + 'csrf_name': document.getElementById("csrf_name").value, + 'csrf_value': document.getElementById("csrf_value").value, + }; + + sendJson(function(response, httpStatus) + { + if(httpStatus == 400) { - console.info(result.errors); - publishController.errors.message = result.errors.markdown[0]; - return false; + self.activatePage(); } - else + if(response) { - self.preview = 'visible'; - self.edit = false; - self.componentType = false; - self.$root.$data.freeze = false; + self.activatePage(); - if(self.$root.$data.blockId == 99999) + var result = JSON.parse(response); + + if(result.errors) { - self.$root.$data.markdown.push(result.markdown); - self.$root.$data.newBlocks.push(result); - - self.$root.$data.blockMarkdown = ''; - self.$root.$data.blockType = 'textarea-markdown'; - self.getData(); + publishController.errors.message = result.errors.markdown[0]; } else { - var htmlid = "blox-" + self.$root.$data.blockId; - var html = document.getElementById(htmlid); - html.innerHTML = result.content; + self.switchToPreviewMode(); - self.$root.$data.markdown[self.$root.$data.blockId] = result.markdown; - - self.$root.$data.blockMarkdown = ''; - self.$root.$data.blockType = ''; + if(self.$root.$data.blockId == 99999) + { + self.$root.$data.markdown.push(result.markdown); + self.$root.$data.newBlocks.push(result); + + self.$root.$data.blockMarkdown = ''; + self.$root.$data.blockType = 'markdown-component'; + self.getData(); + } + else + { + var htmlid = "blox-" + self.$root.$data.blockId; + var html = document.getElementById(htmlid); + html.innerHTML = result.content; + + self.$root.$data.markdown[self.$root.$data.blockId] = result.markdown; + self.$root.$data.blockMarkdown = ''; + self.$root.$data.blockType = ''; + } } - - publishController.publishResult = ""; } - } - }, method, url, params); + }, method, url, params); + } }, deleteBlock: function(event) { - var bloxeditor = event.target.parentElement.parentElement; - console.info(bloxeditor); + this.freezePage(); + + var bloxeditor = event.target.closest('.blox-editor'); + var bloxid = bloxeditor.getElementsByClassName('blox')[0].dataset.id; - bloxeditor.id = "delete-"+bloxid; - - this.disabled = 'disabled'; - - publishController.errors.message = false; + bloxeditor.firstChild.id = "delete-"+bloxid; var self = this; @@ -177,24 +192,21 @@ const contentComponent = Vue.component('content-block', { { if(httpStatus == 400) { - self.disabled = false; + self.activatePage(); } if(response) { - self.disabled = false; + self.activatePage(); var result = JSON.parse(response); if(result.errors) { publishController.errors.message = result.errors; - publishController.publishDisabled = false; - return false; } else - { - self.edit = false; - self.componentType = false; + { + self.switchToPreviewMode(); var deleteblock = document.getElementById("delete-"+bloxid); deleteblock.parentElement.remove(deleteblock); @@ -206,46 +218,22 @@ const contentComponent = Vue.component('content-block', { blox[i].dataset.id = i; } - self.$root.$data.freeze = false; - self.$root.$data.markdown = result.markdown; + self.$root.$data.markdown = result.markdown; self.$root.$data.blockMarkdown = ''; self.$root.$data.blockType = ''; - - publishController.publishDisabled = false; - publishController.publishResult = ""; } } }, method, url, params); }, }, - /* - mounted: function() { - var self = this; - - self.sortable = new Sortable(sortblox, { - animation: 150, - onEnd: function (evt) { - var params = { - 'url': document.getElementById("path").value, - 'old_index': evt.oldIndex, - 'new_index': evt.newIndex, - 'csrf_name': document.getElementById("csrf_name").value, - 'csrf_value': document.getElementById("csrf_value").value, - }; - self.moveBlock(params); - }, - }); - }, - */ - template: '
', }) -const textareaComponent = Vue.component('textarea-markdown', { +const markdownComponent = Vue.component('markdown-component', { props: ['compmarkdown', 'disabled'], template: '
', mounted: function(){ - autosize(document.querySelector('textarea')); this.$refs.markdown.focus(); + autosize(document.querySelectorAll('textarea')); }, methods: { updatemarkdown: function(event) @@ -255,12 +243,12 @@ const textareaComponent = Vue.component('textarea-markdown', { }, }) -const textComponent = Vue.component('text-markdown', { +const titleComponent = Vue.component('title-component', { props: ['compmarkdown', 'disabled'], template: '
', mounted: function(){ - autosize(document.querySelector('textarea')); this.$refs.markdown.focus(); + autosize(document.querySelectorAll('textarea')); }, methods: { updatemarkdown: function(event) @@ -270,11 +258,212 @@ const textComponent = Vue.component('text-markdown', { }, }) -const imageComponent = Vue.component('input-image', { - template: '
Image component
', +const imageComponent = Vue.component('image-component', { + props: ['compmarkdown', 'disabled'], + template: '

drag a picture or click to select

', + data: function(){ + return { + maxsize: 5, // megabyte + imgpreview: false, + load: false, + imgmeta: false, + imgalt: '', + imgtitle: '', + imgcaption: '', + imglink: '', + imgfile: 'imgplchldr', + } + }, + mounted: function(){ + // autosize(document.querySelector('textarea')); + this.$refs.markdown.focus(); + + if(this.compmarkdown) + { + this.imgmeta = true; + + var imgmarkdown = this.compmarkdown; + + var imgcaption = imgmarkdown.match(/\*.*?\*/); + if(imgcaption){ + this.imgcaption = imgcaption[0].slice(1,-1); + imgmarkdown = imgmarkdown.replace(this.imgcaption,''); + imgmarkdown = imgmarkdown.replace(/\r?\n|\r/g,''); + } + + if(this.compmarkdown[0] == '[') + { + var imglink = this.compmarkdown.match(/\(.*?\)/g); + if(imglink[1]) + { + this.imglink = imglink[1].slice(1,-1); + imgmarkdown = imgmarkdown.replace(imglink[1],''); + imgmarkdown = imgmarkdown.slice(1, -1); + } + } + + var imgtitle = imgmarkdown.match(/\".*?\"/); + if(imgtitle) + { + this.imgtitle = imgtitle[0].slice(1,-1); + imgmarkdown = imgmarkdown.replace(imgtitle[0], ''); + } + + var imgalt = imgmarkdown.match(/\[.*?\]/); + if(imgalt) + { + this.imgalt = imgalt[0].slice(1,-1); + } + var imgpreview = imgmarkdown.match(/\(.*?\)/); + if(imgpreview) + { + this.imgpreview = imgpreview[0].slice(1,-1); + this.imgfile = this.imgpreview; + } + } + }, + methods: { + updatemarkdown: function(event) + { + this.$emit('updatedMarkdown', event.target.value); + }, + createmarkdown: function() + { + errors = false; + + if(this.imgalt.length < 101) + { + imgmarkdown = '![' + this.imgalt + ']'; + } + else + { + errors = 'Maximum size of image alt-text is 100 characters'; + imgmarkdown = '![]'; + } + + if(this.imgtitle != '') + { + if(this.imgtitle.length < 101) + { + imgmarkdown = imgmarkdown + '(' + this.imgfile + ' "' + this.imgtitle + '")'; + } + else + { + errors = 'Maximum size of image title is 100 characters'; + } + } + else + { + imgmarkdown = imgmarkdown + '(' + this.imgfile + ')'; + } + + if(this.imglink != '') + { + if(this.imglink.length < 101) + { + imgmarkdown = '[' + imgmarkdown + '](' + this.imglink + ')'; + } + else + { + errors = 'Maximum size of image link is 100 characters'; + } + } + + if(this.imgcaption != '') + { + if(this.imgcaption.length < 140) + { + imgmarkdown = imgmarkdown + '\n*' + this.imgcaption + '*'; + } + else + { + errors = 'Maximum size of image caption is 140 characters'; + } + } + + if(errors) + { + this.$parent.freezePage(); + publishController.errors.message = errors; + } + else + { + publishController.errors.message = false; + this.$parent.activatePage(); + this.$emit('updatedMarkdown', imgmarkdown); + } + }, + onFileChange: function( e ) + { + if(e.target.files.length > 0) + { + let imageFile = e.target.files[0]; + let size = imageFile.size / 1024 / 1024; + + if (!imageFile.type.match('image.*')) + { + publishController.errors.message = "Only images are allowed."; + } + else if (size > this.maxsize) + { + publishController.errors.message = "The maximal size of images is " + this.maxsize + " MB"; + } + else + { + self = this; + this.$parent.freezePage(); + this.$root.$data.file = true; + this.load = true; + + let reader = new FileReader(); + reader.readAsDataURL(imageFile); + reader.onload = function(e) { + self.imgpreview = e.target.result; + self.$emit('updatedMarkdown', '![](imgplchldr)'); + + /* load image to server */ + var url = self.$root.$data.root + '/api/v1/image'; + + var params = { + 'url': document.getElementById("path").value, + 'image': e.target.result, + 'csrf_name': document.getElementById("csrf_name").value, + 'csrf_value': document.getElementById("csrf_value").value, + }; + + var method = 'POST'; + + sendJson(function(response, httpStatus) + { + if(httpStatus == 400) + { + self.$parent.activatePage(); + } + if(response) + { + self.$parent.activatePage(); + self.load = false; + + var result = JSON.parse(response); + + if(result.errors) + { + publishController.errors.message = result.errors; + } + else + { + self.imgmeta = true; + } + } + }, method, url, params); + } + } + } + } + } }) -const tableComponent = Vue.component('input-table', { +const tableComponent = Vue.component('table', { template: '
table component
', }) @@ -283,10 +472,9 @@ let editor = new Vue({ el: '#blox', components: { 'content-component': contentComponent, - 'textarea-component': textareaComponent, - 'text-component': textComponent, - 'image-component': imageComponent, - 'table-component': tableComponent, + 'markdown-component': markdownComponent, + 'title-component': titleComponent, + 'image-component': imageComponent, }, data: { root: document.getElementById("main").dataset.url, @@ -294,6 +482,7 @@ let editor = new Vue({ blockId: false, blockType: false, blockMarkdown: '', + file: false, freeze: false, newBlocks: [], draftDisabled: true, @@ -346,14 +535,43 @@ let editor = new Vue({ }; self.moveBlock(params); }, - }); + }); }, methods: { setData: function(event, blocktype, body) { this.blockId = event.currentTarget.dataset.id; - this.blockType = blocktype; + /* this.blockType = blocktype; */ this.blockMarkdown = this.markdown[this.blockId]; + if(blocktype) + { + this.blockType = blocktype; + } + else if(this.blockId == 0) + { + this.blockType = "title-component" + } + else + { + this.blockType = this.determineBlockType(this.blockMarkdown); + } + }, + determineBlockType: function(block) + { + var firstChar = block[0]; + var secondChar = block[1]; + var thirdChar = block[2]; + + switch(firstChar){ + case "!": + if(secondChar == "[") { return "image-component" } + break; + case "[": + if(secondChar == "!" && thirdChar == "[") { return "image-component" } else { return "markdown-component" } + break; + default: + return 'markdown-component'; + } }, moveBlock: function(params) { @@ -362,7 +580,7 @@ let editor = new Vue({ var url = this.root + '/api/v1/moveblock'; var self = this; - + var method = 'PUT'; sendJson(function(response, httpStatus) @@ -379,7 +597,6 @@ let editor = new Vue({ { publishController.errors.message = result.errors; publishController.publishDisabled = false; - return false; } else { diff --git a/system/author/layouts/layout.twig b/system/author/layouts/layout.twig index 540a1bd..449c6a8 100644 --- a/system/author/layouts/layout.twig +++ b/system/author/layouts/layout.twig @@ -6,6 +6,8 @@ + + diff --git a/system/author/layouts/layoutAuth.twig b/system/author/layouts/layoutAuth.twig index 9caa921..27c5295 100644 --- a/system/author/layouts/layoutAuth.twig +++ b/system/author/layouts/layoutAuth.twig @@ -7,6 +7,8 @@ + + diff --git a/system/author/layouts/layoutBlank.twig b/system/author/layouts/layoutBlank.twig index cb4ad52..f0050a7 100644 --- a/system/author/layouts/layoutBlank.twig +++ b/system/author/layouts/layoutBlank.twig @@ -7,6 +7,8 @@ + + diff --git a/system/author/layouts/layoutBlox.twig b/system/author/layouts/layoutBlox.twig index 31e250d..19a5814 100644 --- a/system/author/layouts/layoutBlox.twig +++ b/system/author/layouts/layoutBlox.twig @@ -7,6 +7,8 @@ + + diff --git a/system/author/layouts/layoutEditor.twig b/system/author/layouts/layoutEditor.twig index 07141b7..e767b51 100644 --- a/system/author/layouts/layoutEditor.twig +++ b/system/author/layouts/layoutEditor.twig @@ -7,6 +7,8 @@ + + diff --git a/themes/typemill/partials/layout.twig b/themes/typemill/partials/layout.twig index e7ab893..d2192be 100644 --- a/themes/typemill/partials/layout.twig +++ b/themes/typemill/partials/layout.twig @@ -5,6 +5,8 @@ {% block title %}{% endblock %} + + diff --git a/themes/typemill/partials/layoutCover.twig b/themes/typemill/partials/layoutCover.twig index 1660840..96d0b34 100644 --- a/themes/typemill/partials/layoutCover.twig +++ b/themes/typemill/partials/layoutCover.twig @@ -5,6 +5,8 @@ {% block title %}{% endblock %} + + diff --git a/themes/typemill/typemill.yaml b/themes/typemill/typemill.yaml index 06ffb99..8721474 100644 --- a/themes/typemill/typemill.yaml +++ b/themes/typemill/typemill.yaml @@ -1,5 +1,5 @@ name: Typemill Theme -version: 1.1.0 +version: 1.1.1 description: The standard theme for Typemill. Responsive, minimal and without any dependencies. It uses the system fonts Calibri and Helvetica. No JavaScript is used. author: Sebastian Schürmanns homepage: https://typemill.net @@ -12,6 +12,9 @@ settings: modifiedText: 'Last updated' modifiedFormat: 'd.m.Y' authorIntro: 'Author' + images: + live: + width: 820 forms: fields: