From 581881d0cae139bb634288590ae949270c39d715 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Tue, 29 Nov 2016 00:24:15 +0530 Subject: [PATCH 01/83] Merging gitignore. --- config/app.php | 4 ++-- config/database.php | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/app.php b/config/app.php index 786f005ac..d94196cc1 100644 --- a/config/app.php +++ b/config/app.php @@ -3,7 +3,7 @@ return [ - 'env' => env('APP_ENV', 'production'), + 'env' => env('APP_ENV', 'development'), 'editor' => env('APP_EDITOR', 'html'), @@ -18,7 +18,7 @@ return [ | */ - 'debug' => env('APP_DEBUG', false), + 'debug' => env('APP_DEBUG', true), /* |-------------------------------------------------------------------------- diff --git a/config/database.php b/config/database.php index 832852dc2..cfeeaa75a 100644 --- a/config/database.php +++ b/config/database.php @@ -71,9 +71,9 @@ return [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), - 'password' => env('DB_PASSWORD', ''), + 'database' => env('DB_DATABASE', 'bookstack'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', 'Change123'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', From 397db0442853bcca281687fd2f97614e925d0dfd Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Fri, 13 Jan 2017 21:45:48 +0530 Subject: [PATCH 02/83] Added comments controller, model, repo, and the database schema. Modified existing Page model to associate with comments. --- .gitignore | 4 +- app/Comment.php | 35 +++++++++++++++++ app/Http/Controllers/CommentController.php | 33 ++++++++++++++++ app/Page.php | 9 +++++ app/Repos/CommentRepo.php | 17 +++++++++ ...017_01_01_130541_create_comments_table.php | 38 +++++++++++++++++++ resources/views/home.blade.php | 2 +- routes/web.php | 7 ++++ 8 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 app/Comment.php create mode 100644 app/Http/Controllers/CommentController.php create mode 100644 app/Repos/CommentRepo.php create mode 100644 database/migrations/2017_01_01_130541_create_comments_table.php diff --git a/.gitignore b/.gitignore index 83b754c04..0a6215ba9 100644 --- a/.gitignore +++ b/.gitignore @@ -8,9 +8,11 @@ Homestead.yaml /public/css /public/js /public/bower +/public/build/ /storage/images _ide_helper.php /storage/debugbar .phpstorm.meta.php yarn.lock -/bin \ No newline at end of file +/bin +nbproject \ No newline at end of file diff --git a/app/Comment.php b/app/Comment.php new file mode 100644 index 000000000..9ef892bdc --- /dev/null +++ b/app/Comment.php @@ -0,0 +1,35 @@ +<?php + +namespace BookStack; + +class Comment extends Ownable +{ + protected $fillable = ['text', 'html']; + + /** + * Get the entity that this comment belongs to + * @return \Illuminate\Database\Eloquent\Relations\MorphTo + */ + public function entity() + { + return $this->morphTo('entity'); + } + + /** + * Get the page that this comment is in. + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function page() + { + return $this->belongsTo(Page::class); + } + + /** + * Get the owner of this comment. + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function user() + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php new file mode 100644 index 000000000..de97169a8 --- /dev/null +++ b/app/Http/Controllers/CommentController.php @@ -0,0 +1,33 @@ +<?php + +namespace BookStack\Http\Controllers; + +use Illuminate\Http\Request; + +use BookStack\Http\Requests; + +class CommentController extends Controller +{ + + public function add(Request $request, $pageId) { + // $this->checkOwnablePermission('page-view', $page); + } + + public function update(Request $request, $id) { + // Check whether its an admin or the comment owner. + // $this->checkOwnablePermission('page-view', $page); + } + + public function destroy($id) { + // Check whether its an admin or the comment owner. + // $this->checkOwnablePermission('page-view', $page); + } + + public function getLastXComments($pageId) { + // $this->checkOwnablePermission('page-view', $page); + } + + public function getChildComments($pageId, $id) { + // $this->checkOwnablePermission('page-view', $page); + } +} diff --git a/app/Page.php b/app/Page.php index b24e7778a..83ef6f350 100644 --- a/app/Page.php +++ b/app/Page.php @@ -39,6 +39,15 @@ class Page extends Entity { return $this->belongsTo(Chapter::class); } + + /** + * Get the comments in the page. + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function comment() + { + return $this->hasMany(Comment::class); + } /** * Check if this page has a chapter. diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php new file mode 100644 index 000000000..e8db3f83e --- /dev/null +++ b/app/Repos/CommentRepo.php @@ -0,0 +1,17 @@ +<?php namespace BookStack\Repos; + +use BookStack\Comment; +use BookStack\Entity; + +/** + * Class TagRepo + * @package BookStack\Repos + */ +class CommentRepo { + /** + * + * @var Comment $comment + */ + protected $comment; + +} \ No newline at end of file diff --git a/database/migrations/2017_01_01_130541_create_comments_table.php b/database/migrations/2017_01_01_130541_create_comments_table.php new file mode 100644 index 000000000..3565192a4 --- /dev/null +++ b/database/migrations/2017_01_01_130541_create_comments_table.php @@ -0,0 +1,38 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateCommentsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('comments', function (Blueprint $table) { + $table->increments('id')->unsigned(); + $table->integer('page_id')->unsigned(); + $table->longText('text')->nullable(); + $table->longText('html')->nullable(); + $table->integer('parent_id')->unsigned()->nullable(); + $table->integer('created_by')->unsigned(); + $table->integer('updated_by')->unsigned()->nullable(); + $table->index(['page_id', 'parent_id']); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('comments'); + } +} diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 0d97a6a4b..6f4009f72 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -51,7 +51,7 @@ @include('partials/entity-list', [ 'entities' => $recentlyUpdatedPages, 'style' => 'compact', - 'emptyText' => trans('entites.no_pages_recently_updated') + 'emptyText' => trans('entities.no_pages_recently_updated') ]) </div> </div> diff --git a/routes/web.php b/routes/web.php index 076ffb94f..42b88f3d6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -113,6 +113,13 @@ Route::group(['middleware' => 'auth'], function () { Route::get('/ajax/search/entities', 'SearchController@searchEntitiesAjax'); + // Comments + Route::post('/ajax/page/{pageId}/comment/', 'CommentController@add'); + Route::put('/ajax/page/comment/{id}', 'CommentController@update'); + Route::delete('/ajax/comment/{id}', 'CommentController@destroy'); + Route::get('/ajax/page/{pageId}/comment/', 'CommentController@getLastXComments'); + Route::get('/ajax/page/{pageId}/comment/{id}/sub-comments', 'CommentController@getChildComments'); + // Links Route::get('/link/{id}', 'PageController@redirectFromLink'); From 148350009c89eadbc1b14ff5630e06da26f71b2c Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sun, 29 Jan 2017 14:25:20 +0530 Subject: [PATCH 03/83] #47 Adds comment permission to each role. --- app/Services/PermissionService.php | 2 +- ...017_01_01_130541_create_comments_table.php | 29 +++++++++++++++++++ resources/lang/en/entities.php | 6 ++++ resources/views/settings/roles/form.blade.php | 13 +++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/app/Services/PermissionService.php b/app/Services/PermissionService.php index 72a810b6b..ab0c5867c 100644 --- a/app/Services/PermissionService.php +++ b/app/Services/PermissionService.php @@ -406,7 +406,7 @@ class PermissionService $action = end($explodedPermission); $this->currentAction = $action; - $nonJointPermissions = ['restrictions', 'image', 'attachment']; + $nonJointPermissions = ['restrictions', 'image', 'attachment', 'comment']; // Handle non entity specific jointPermissions if (in_array($explodedPermission[0], $nonJointPermissions)) { diff --git a/database/migrations/2017_01_01_130541_create_comments_table.php b/database/migrations/2017_01_01_130541_create_comments_table.php index 3565192a4..8aa99eea4 100644 --- a/database/migrations/2017_01_01_130541_create_comments_table.php +++ b/database/migrations/2017_01_01_130541_create_comments_table.php @@ -13,6 +13,9 @@ class CreateCommentsTable extends Migration */ public function up() { + if (Schema::hasTable('comments')) { + return; + } Schema::create('comments', function (Blueprint $table) { $table->increments('id')->unsigned(); $table->integer('page_id')->unsigned(); @@ -23,6 +26,25 @@ class CreateCommentsTable extends Migration $table->integer('updated_by')->unsigned()->nullable(); $table->index(['page_id', 'parent_id']); $table->timestamps(); + + // Get roles with permissions we need to change + $adminRoleId = DB::table('roles')->where('system_name', '=', 'admin')->first()->id; + + // Create & attach new entity permissions + $ops = ['Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; + $entity = 'Comment'; + foreach ($ops as $op) { + $permissionId = DB::table('role_permissions')->insertGetId([ + 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), + 'display_name' => $op . ' ' . $entity . 's', + 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() + ]); + DB::table('permission_role')->insert([ + 'role_id' => $adminRoleId, + 'permission_id' => $permissionId + ]); + } }); } @@ -34,5 +56,12 @@ class CreateCommentsTable extends Migration public function down() { Schema::dropIfExists('comments'); + // Create & attach new entity permissions + $ops = ['Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; + $entity = 'Comment'; + foreach ($ops as $op) { + $permName = strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)); + DB::table('role_permissions')->where('name', '=', $permName)->delete(); + } } } diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 109b6ee2a..80bb96669 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -223,4 +223,10 @@ return [ 'profile_not_created_pages' => ':userName has not created any pages', 'profile_not_created_chapters' => ':userName has not created any chapters', 'profile_not_created_books' => ':userName has not created any books', + + /** + * Comments + */ + 'comment' => 'Comment', + 'comments' => 'Comments' ]; \ No newline at end of file diff --git a/resources/views/settings/roles/form.blade.php b/resources/views/settings/roles/form.blade.php index 71b8f551f..02ef525ea 100644 --- a/resources/views/settings/roles/form.blade.php +++ b/resources/views/settings/roles/form.blade.php @@ -117,6 +117,19 @@ <label>@include('settings/roles/checkbox', ['permission' => 'attachment-delete-all']) {{ trans('settings.role_all') }}</label> </td> </tr> + <tr> + <td>{{ trans('entities.comments') }}</td> + <td>@include('settings/roles/checkbox', ['permission' => 'comment-create-all'])</td> + <td style="line-height:1.2;"><small class="faded">{{ trans('settings.role_controlled_by_asset') }}</small></td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> </table> </div> </div> From d447355a61a0b55a9c04e244be1ab3c815e89374 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Wed, 19 Apr 2017 01:24:33 +0530 Subject: [PATCH 04/83] Adding the view templates and styles. --- resources/assets/sass/_comments.scss | 60 ++++++++++++++++++++ resources/assets/sass/_simplemde.scss | 7 +++ resources/views/comments/add.blade.php | 19 +++++++ resources/views/comments/list-item.blade.php | 19 +++++++ resources/views/pages/comments.blade.php | 8 +++ 5 files changed, 113 insertions(+) create mode 100644 resources/assets/sass/_comments.scss create mode 100644 resources/assets/sass/_simplemde.scss create mode 100644 resources/views/comments/add.blade.php create mode 100644 resources/views/comments/list-item.blade.php create mode 100644 resources/views/pages/comments.blade.php diff --git a/resources/assets/sass/_comments.scss b/resources/assets/sass/_comments.scss new file mode 100644 index 000000000..785f9948d --- /dev/null +++ b/resources/assets/sass/_comments.scss @@ -0,0 +1,60 @@ +.comments-list { + .comment-box { + border-bottom: 1px solid $comment-border; + } + + .comment-box:last-child { + border-bottom: none; + } +} +.page-comment { + .comment-container { + margin-left: 42px; + } + + .comment-actions { + font-size: 0.8em; + padding-bottom: 4px; + ul { + padding-left: 0px; + margin-bottom: 5px; + } + li { + float: left; + list-style-type: none; + } + + li:after { + content: '•'; + color: #707070; + padding: 0 5px; + font-size: 1em; + } + + li:last-child:after { + content: none; + } + } + + .comment-header { + font-size: 1.25em; + margin-top: 0.6em; + } + + .comment-body { + + } + + .user-image { + float: left; + margin-right: 10px; + width: 32px; + img { + width: 100%; + } + } +} + +.comment-editor { + margin-top: 2em; +} diff --git a/resources/assets/sass/_simplemde.scss b/resources/assets/sass/_simplemde.scss new file mode 100644 index 000000000..41d944ee3 --- /dev/null +++ b/resources/assets/sass/_simplemde.scss @@ -0,0 +1,7 @@ +/** + * simplemde v1.11.2 + * Copyright Next Step Webs, Inc. + * @link https://github.com/NextStepWebs/simplemde-markdown-editor + * @license MIT + */ +.CodeMirror{color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px; border: none; box-shadow: none;}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected,.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror{height:auto;min-height:300px;border:1px solid #ddd;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px;font:inherit;z-index:1}.CodeMirror-scroll{min-height:300px}.CodeMirror-fullscreen{background:#fff;position:fixed!important;top:50px;left:0;right:0;bottom:0;height:auto;z-index:9}.CodeMirror-sided{width:50%!important}.editor-toolbar{position:relative;opacity:.6;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;padding:0 10px;border-top:1px solid #bbb;border-left:1px solid #bbb;border-right:1px solid #bbb;border-top-left-radius:4px;border-top-right-radius:4px}.editor-toolbar:after,.editor-toolbar:before{display:block;content:' ';height:1px}.editor-toolbar:before{margin-bottom:8px}.editor-toolbar:after{margin-top:8px}.editor-toolbar:hover,.editor-wrapper input.title:focus,.editor-wrapper input.title:hover{opacity:.8}.editor-toolbar.fullscreen{width:100%;height:50px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-top:10px;padding-bottom:10px;box-sizing:border-box;background:#fff;border:0;position:fixed;top:0;left:0;opacity:1;z-index:9}.editor-toolbar.fullscreen::before{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,1)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);position:fixed;top:0;left:0;margin:0;padding:0}.editor-toolbar.fullscreen::after{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(100%,rgba(255,255,255,1)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);position:fixed;top:0;right:0;margin:0;padding:0}.editor-toolbar a{display:inline-block;text-align:center;text-decoration:none!important;color:#2c3e50!important;width:30px;height:30px;margin:0;border:1px solid transparent;border-radius:3px;cursor:pointer}.editor-toolbar a.active,.editor-toolbar a:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar a:before{line-height:30px}.editor-toolbar i.separator{display:inline-block;width:0;border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;text-indent:-10px;margin:0 6px}.editor-toolbar a.fa-header-x:after{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:65%;vertical-align:text-bottom;position:relative;top:2px}.editor-toolbar a.fa-header-1:after{content:"1"}.editor-toolbar a.fa-header-2:after{content:"2"}.editor-toolbar a.fa-header-3:after{content:"3"}.editor-toolbar a.fa-header-bigger:after{content:"▲"}.editor-toolbar a.fa-header-smaller:after{content:"▼"}.editor-toolbar.disabled-for-preview a:not(.no-disable){pointer-events:none;background:#fff;border-color:transparent;text-shadow:inherit}@media only screen and (max-width:700px){.editor-toolbar a.no-mobile{display:none}}.editor-statusbar{padding:8px 10px;font-size:12px;color:#959694;text-align:right}.editor-statusbar span{display:inline-block;min-width:4em;margin-left:1em}.editor-preview,.editor-preview-side{padding:10px;background:#fafafa;overflow:auto;display:none;box-sizing:border-box}.editor-statusbar .lines:before{content:'lines: '}.editor-statusbar .words:before{content:'words: '}.editor-statusbar .characters:before{content:'characters: '}.editor-preview{position:absolute;width:100%;height:100%;top:0;left:0;z-index:7}.editor-preview-side{position:fixed;bottom:0;width:50%;top:50px;right:0;z-index:9;border:1px solid #ddd}.editor-preview-active,.editor-preview-active-side{display:block}.editor-preview-side>p,.editor-preview>p{margin-top:0}.editor-preview pre,.editor-preview-side pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th,.editor-preview-side table td,.editor-preview-side table th{border:1px solid #ddd;padding:5px}.CodeMirror .CodeMirror-code .cm-tag{color:#63a35c}.CodeMirror .CodeMirror-code .cm-attribute{color:#795da3}.CodeMirror .CodeMirror-code .cm-string{color:#183691}.CodeMirror .CodeMirror-selected{background:#d9d9d9}.CodeMirror .CodeMirror-code .cm-header-1{font-size:200%;line-height:200%}.CodeMirror .CodeMirror-code .cm-header-2{font-size:160%;line-height:160%}.CodeMirror .CodeMirror-code .cm-header-3{font-size:125%;line-height:125%}.CodeMirror .CodeMirror-code .cm-header-4{font-size:110%;line-height:110%}.CodeMirror .CodeMirror-code .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.CodeMirror .CodeMirror-code .cm-link{color:#7f8c8d}.CodeMirror .CodeMirror-code .cm-url{color:#aab2b3}.CodeMirror .CodeMirror-code .cm-strikethrough{text-decoration:line-through}.CodeMirror .CodeMirror-placeholder{opacity:.5}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)} \ No newline at end of file diff --git a/resources/views/comments/add.blade.php b/resources/views/comments/add.blade.php new file mode 100644 index 000000000..f7d9c41fc --- /dev/null +++ b/resources/views/comments/add.blade.php @@ -0,0 +1,19 @@ +@section('head') + <script src="{{ baseUrl("/libs/simplemde/simplemde.min.js") }}"></script> +@stop + +<div class="comment-editor" ng-controller="CommentAddController as vm"> +<form novalidate> + <div simple-markdown-input smd-model="comment.newComment" smd-get-content="getCommentHTML" smd-clear="clearInput"> + <textarea name="markdown" rows="3" + @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || + old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> + </div> + <input type="hidden" ng-model="pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> + <button type="submit" class="button pos" ng-click="vm.saveComment()">Save</button> +</form> +</div> + +@if($errors->has('markdown')) + <div class="text-neg text-small">{{ $errors->first('markdown') }}</div> +@endif \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php new file mode 100644 index 000000000..1a72d7e84 --- /dev/null +++ b/resources/views/comments/list-item.blade.php @@ -0,0 +1,19 @@ +<div class='page-comment'> + <div class="user-image"> + <img ng-src="@{{defaultAvatar}}" alt="user avatar"> + </div> + <div class="comment-container"> + <div class="comment-header"> + @{{ ::comment.created_by_name }} + </div> + <div ng-bind-html="comment.html" class="comment-body"> + + </div> + <div class="comment-actions"> + <ul> + <li><a href="#">Reply</a></li> + <li><a href="#">@{{::comment.created_at}}</a></li> + </ul> + </div> + </div> +</div> \ No newline at end of file diff --git a/resources/views/pages/comments.blade.php b/resources/views/pages/comments.blade.php new file mode 100644 index 000000000..ea9dd57d6 --- /dev/null +++ b/resources/views/pages/comments.blade.php @@ -0,0 +1,8 @@ +<div ng-controller="CommentListController as vm" ng-init="pageId = <?= $page->id ?>" class="comments-list" ng-cloak> +<h3>@{{vm.totalCommentsStr}}</h3> +<hr> + <div class="comment-box" ng-repeat="comment in vm.comments track by comment.id"> + @include('comments/list-item') + </div> +</div> +@include('comments/add', ['pageId' => $pageId]) From c3ea0d333e869975e49bf6da4165c9e0f6b0d2fa Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Thu, 27 Apr 2017 02:35:29 +0530 Subject: [PATCH 05/83] #47 - Adds functionality to display child comments. Also has some code towards the reply functionality. --- app/Comment.php | 11 +++-- app/Http/Controllers/CommentController.php | 6 ++- app/Repos/CommentRepo.php | 17 ++++--- gulpfile.js | 2 + resources/assets/js/controllers.js | 18 +++++-- resources/assets/js/directives.js | 47 +++++++++++++++++++ resources/views/comments/add.blade.php | 6 +-- .../views/comments/comment-reply.blade.php | 10 ++++ resources/views/comments/comments.blade.php | 19 ++++++++ resources/views/comments/list-item.blade.php | 15 ++++-- resources/views/pages/comments.blade.php | 8 ---- resources/views/pages/show.blade.php | 2 +- 12 files changed, 127 insertions(+), 34 deletions(-) create mode 100644 resources/views/comments/comment-reply.blade.php create mode 100644 resources/views/comments/comments.blade.php delete mode 100644 resources/views/pages/comments.blade.php diff --git a/app/Comment.php b/app/Comment.php index 4a9c48c74..74fcc3fdc 100644 --- a/app/Comment.php +++ b/app/Comment.php @@ -34,8 +34,8 @@ class Comment extends Ownable return $this->belongsTo(User::class); } - public function getParentCommentsByPage($pageId, $pageNum = 0, $limit = 0) { - $data = ['pageId' => $pageId]; + public function getCommentsByPage($pageId, $commentId, $pageNum = 0, $limit = 0) { + $query = static::newQuery(); $query->join('users AS u', 'comments.created_by', '=', 'u.id'); $query->leftJoin('users AS u1', 'comments.updated_by', '=', 'u1.id'); @@ -44,7 +44,12 @@ class Comment extends Ownable . 'u.name AS created_by_name, u1.name AS updated_by_name, ' . '(SELECT count(c.id) FROM bookstack.comments c WHERE c.parent_id = comments.id AND page_id = ?) AS cnt_sub_comments, i.url AS avatar ', [$pageId]); - $query->whereRaw('page_id = ? AND parent_id IS NULL', [$pageId]); + + if (empty($commentId)) { + $query->whereRaw('page_id = ? AND parent_id IS NULL', [$pageId]); + } else { + $query->whereRaw('page_id = ? AND parent_id = ?', [$pageId, $commentId]); + } $query->orderBy('created_at'); return $query; } diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index 3df441766..b8cf77621 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -85,7 +85,11 @@ class CommentController extends Controller $this->checkOwnablePermission('page-view', $page); $comments = $this->commentRepo->getCommentsForPage($pageId, $commentId); - + if (empty($commentId)) { + // requesting for parent level comments, send the total count as well. + $totalComments = $this->commentRepo->getCommentCount($pageId); + return response()->json(array('success' => true, 'comments'=> $comments, 'total' => $totalComments)); + } return response()->json(array('success' => true, 'comments'=> $comments)); } } diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index c2a19ec0b..ba34617ed 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -38,14 +38,13 @@ class CommentRepo { return $comment; } - public function getCommentsForPage($pageId, $commentId, $count = 20) { - if (empty($commentId)) { - // requesting parent comments - $query = $this->comment->getParentCommentsByPage($pageId); - return $query->paginate($count); - } else { - // requesting the child comments. - return Comment::whereRaw("page_id = $pageId AND parent_id = $commentId")->get(); - } + public function getCommentsForPage($pageId, $commentId, $count = 20) { + // requesting parent comments + $query = $this->comment->getCommentsByPage($pageId, $commentId); + return $query->paginate($count); + } + + public function getCommentCount($pageId) { + return $this->comment->where('page_id', '=', $pageId)->count(); } } \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index b72bb366d..580db00cc 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,3 +1,5 @@ +'use strict'; + const argv = require('yargs').argv; const gulp = require('gulp'), plumber = require('gulp-plumber'); diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 65dc50e99..d92c5538b 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -731,14 +731,14 @@ module.exports = function (ngApp, events) { } $timeout(function() { - console.log($scope.pageId); $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { if (!resp.data || resp.data.success !== true) { // TODO : Handle error return; - } + } vm.comments = resp.data.comments.data; - vm.totalComments = resp.data.comments.total; + vm.totalComments = resp.data.total; + // TODO : Fetch message from translate. if (vm.totalComments === 0) { vm.totalCommentsStr = 'No comments found.'; } else if (vm.totalComments === 1) { @@ -749,6 +749,18 @@ module.exports = function (ngApp, events) { }, checkError('app')); }); + vm.loadSubComments = function(event, comment) { + event.preventDefault(); + $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/${comment.id}/sub-comments`)).then(resp => { + console.log(resp); + if (!resp.data || resp.data.success !== true) { + return; + } + comment.is_loaded = true; + comment.comments = resp.data.comments.data; + }, checkError('app')); + }; + function checkError(errorGroupName) { $scope.errors[errorGroupName] = {}; return function(response) { diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index f30a09778..d119d2e92 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -865,5 +865,52 @@ module.exports = function (ngApp, events) { } } }]); + + ngApp.directive('commentReply', ['$timeout', function ($timeout) { + return { + restrict: 'E', + templateUrl: 'comment-reply.html', + scope: { + + }, + link: function (scope, element, attr) { + + } + } + + }]); + ngApp.directive('commentReplyLink', ['$document', '$compile', function ($document, $compile) { + return { + link: function (scope, element, attr) { + element.on('$destroy', function () { + element.off('click'); + scope.$destroy(); + }); + + element.on('click', function () { + var $container = element.parents('.comment-box').first(); + if (!$container.length) { + console.error('commentReplyLink directive should be placed inside a container with class comment-box!'); + return; + } + if (attr.noCommentReplyDupe) { + removeDupe(); + } + var compiledHTML = $compile('<comment-reply></comment-reply>')(scope); + $container.append(compiledHTML); + }); + } + }; + + + function removeDupe() { + let $existingElement = $document.find('comment-reply'); + if (!$existingElement.length) { + return; + } + + $existingElement.remove(); + } + }]); }; diff --git a/resources/views/comments/add.blade.php b/resources/views/comments/add.blade.php index f7d9c41fc..c221cdbd4 100644 --- a/resources/views/comments/add.blade.php +++ b/resources/views/comments/add.blade.php @@ -1,8 +1,4 @@ -@section('head') - <script src="{{ baseUrl("/libs/simplemde/simplemde.min.js") }}"></script> -@stop - -<div class="comment-editor" ng-controller="CommentAddController as vm"> +<div class="comment-editor" ng-controller="CommentAddController as vm" ng-cloak> <form novalidate> <div simple-markdown-input smd-model="comment.newComment" smd-get-content="getCommentHTML" smd-clear="clearInput"> <textarea name="markdown" rows="3" diff --git a/resources/views/comments/comment-reply.blade.php b/resources/views/comments/comment-reply.blade.php new file mode 100644 index 000000000..d5ceb55c6 --- /dev/null +++ b/resources/views/comments/comment-reply.blade.php @@ -0,0 +1,10 @@ +<!-- TODO :: needs to be merged with add.blade.php --> +<form novalidate> + <div simple-markdown-input smd-model="comment.newComment" smd-get-content="getCommentHTML" smd-clear="clearInput"> + <textarea name="markdown" rows="3" + @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || + old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> + </div> + <input type="hidden" ng-model="pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> + <button type="submit" class="button pos" ng-click="vm.saveComment()">Save</button> +</form> \ No newline at end of file diff --git a/resources/views/comments/comments.blade.php b/resources/views/comments/comments.blade.php new file mode 100644 index 000000000..107052e87 --- /dev/null +++ b/resources/views/comments/comments.blade.php @@ -0,0 +1,19 @@ +@section('head') + <script src="{{ baseUrl("/libs/simplemde/simplemde.min.js") }}"></script> +@stop +<script type="text/ng-template" id="comment-list-item.html"> + @include('comments/list-item') +</script> +<script type="text/ng-template" id="comment-reply.html"> + @include('comments/comment-reply') +</script> +<div ng-controller="CommentListController as vm" ng-init="pageId = <?= $page->id ?>" class="comments-list" ng-cloak> +<h3>@{{vm.totalCommentsStr}}</h3> +<hr> + <div class="comment-box" ng-repeat="comment in vm.comments track by comment.id"> + <div ng-include src="'comment-list-item.html'"> + + </div> + </div> +</div> +@include('comments/add', ['pageId' => $pageId]) \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 1a72d7e84..aecc0c26b 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -1,19 +1,26 @@ <div class='page-comment'> <div class="user-image"> - <img ng-src="@{{defaultAvatar}}" alt="user avatar"> + <img ng-src="@{{::defaultAvatar}}" alt="user avatar"> </div> <div class="comment-container"> <div class="comment-header"> @{{ ::comment.created_by_name }} </div> - <div ng-bind-html="comment.html" class="comment-body"> + <div ng-bind-html="::comment.html" class="comment-body"> </div> <div class="comment-actions"> <ul> - <li><a href="#">Reply</a></li> + <li><a href="#" comment-reply-link no-comment-reply-dupe="true">Reply</a></li> <li><a href="#">@{{::comment.created_at}}</a></li> </ul> </div> - </div> + <a href="#" ng-click="vm.loadSubComments($event, comment, $index)" class="load-more-comments" ng-if="comment.cnt_sub_comments > 0 && !comment.is_loaded"> + Load @{{::comment.cnt_sub_comments}} more comment(s) + </a> + <div class="comment-box" ng-repeat="comment in comments = comment.comments track by comment.id"> + <div ng-include src="'comment-list-item.html'"> + </div> + </div> + </div> </div> \ No newline at end of file diff --git a/resources/views/pages/comments.blade.php b/resources/views/pages/comments.blade.php deleted file mode 100644 index ea9dd57d6..000000000 --- a/resources/views/pages/comments.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -<div ng-controller="CommentListController as vm" ng-init="pageId = <?= $page->id ?>" class="comments-list" ng-cloak> -<h3>@{{vm.totalCommentsStr}}</h3> -<hr> - <div class="comment-box" ng-repeat="comment in vm.comments track by comment.id"> - @include('comments/list-item') - </div> -</div> -@include('comments/add', ['pageId' => $pageId]) diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 244a47c02..db1d1e5cd 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -113,7 +113,7 @@ <div class="container"> <div class="row"> <div class="col-md-9"> - @include('pages/comments', ['pageId' => $page->id]) + @include('comments/comments', ['pageId' => $page->id]) </div> </div> </div> From 8b827532183eec08a9c96dfbdc2af71895df0b44 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Wed, 3 May 2017 02:42:04 +0530 Subject: [PATCH 06/83] #47 - Gets rid of simplemde --- app/Http/Controllers/CommentController.php | 2 +- public/libs/simplemde/simplemde.min.js | 15 ------- resources/assets/js/controllers.js | 7 +-- resources/assets/js/directives.js | 47 --------------------- resources/assets/sass/_comments.scss | 7 +++ resources/assets/sass/_simplemde.scss | 7 --- resources/assets/sass/styles.scss | 1 - resources/lang/en/entities.php | 3 +- resources/views/comments/add.blade.php | 12 +++--- resources/views/comments/comments.blade.php | 3 -- 10 files changed, 19 insertions(+), 85 deletions(-) delete mode 100644 public/libs/simplemde/simplemde.min.js delete mode 100644 resources/assets/sass/_simplemde.scss diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index b8cf77621..8e7b1512a 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -17,7 +17,7 @@ class CommentController extends Controller parent::__construct(); } - public function save(Request $request, $pageId, $commentId) + public function save(Request $request, $pageId, $commentId = null) { $this->validate($request, [ 'text' => 'required|string', diff --git a/public/libs/simplemde/simplemde.min.js b/public/libs/simplemde/simplemde.min.js deleted file mode 100644 index 50c624f20..000000000 --- a/public/libs/simplemde/simplemde.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * simplemde v1.11.2 - * Copyright Next Step Webs, Inc. - * @link https://github.com/NextStepWebs/simplemde-markdown-editor - * @license MIT - */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.SimpleMDE=e()}}(function(){var e;return function t(e,n,r){function i(a,l){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!l&&s)return s(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[a]={exports:{}};e[a][0].call(u.exports,function(t){var n=e[a][1][t];return i(n?n:t)},u,u.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(e,t,n){"use strict";function r(){for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=e.length;n>t;++t)s[t]=e[t],c[e.charCodeAt(t)]=t;c["-".charCodeAt(0)]=62,c["_".charCodeAt(0)]=63}function i(e){var t,n,r,i,o,a,l=e.length;if(l%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[l-2]?2:"="===e[l-1]?1:0,a=new u(3*l/4-o),r=o>0?l-4:l;var s=0;for(t=0,n=0;r>t;t+=4,n+=3)i=c[e.charCodeAt(t)]<<18|c[e.charCodeAt(t+1)]<<12|c[e.charCodeAt(t+2)]<<6|c[e.charCodeAt(t+3)],a[s++]=i>>16&255,a[s++]=i>>8&255,a[s++]=255&i;return 2===o?(i=c[e.charCodeAt(t)]<<2|c[e.charCodeAt(t+1)]>>4,a[s++]=255&i):1===o&&(i=c[e.charCodeAt(t)]<<10|c[e.charCodeAt(t+1)]<<4|c[e.charCodeAt(t+2)]>>2,a[s++]=i>>8&255,a[s++]=255&i),a}function o(e){return s[e>>18&63]+s[e>>12&63]+s[e>>6&63]+s[63&e]}function a(e,t,n){for(var r,i=[],a=t;n>a;a+=3)r=(e[a]<<16)+(e[a+1]<<8)+e[a+2],i.push(o(r));return i.join("")}function l(e){for(var t,n=e.length,r=n%3,i="",o=[],l=16383,c=0,u=n-r;u>c;c+=l)o.push(a(e,c,c+l>u?u:c+l));return 1===r?(t=e[n-1],i+=s[t>>2],i+=s[t<<4&63],i+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],i+=s[t>>10],i+=s[t>>4&63],i+=s[t<<2&63],i+="="),o.push(i),o.join("")}n.toByteArray=i,n.fromByteArray=l;var s=[],c=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array;r()},{}],2:[function(e,t,n){},{}],3:[function(e,t,n){(function(t){"use strict";function r(){try{var e=new Uint8Array(1);return e.foo=function(){return 42},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}function i(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(i()<t)throw new RangeError("Invalid typed array length");return a.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t),e.__proto__=a.prototype):(null===e&&(e=new a(t)),e.length=t),e}function a(e,t,n){if(!(a.TYPED_ARRAY_SUPPORT||this instanceof a))return new a(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return u(this,e)}return l(this,e,t,n)}function l(e,t,n,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?d(e,t,n,r):"string"==typeof t?f(e,t,n):p(e,t)}function s(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number')}function c(e,t,n,r){return s(t),0>=t?o(e,t):void 0!==n?"string"==typeof r?o(e,t).fill(n,r):o(e,t).fill(n):o(e,t)}function u(e,t){if(s(t),e=o(e,0>t?0:0|m(t)),!a.TYPED_ARRAY_SUPPORT)for(var n=0;t>n;n++)e[n]=0;return e}function f(e,t,n){if("string"==typeof n&&""!==n||(n="utf8"),!a.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|v(t,n);return e=o(e,r),e.write(t,n),e}function h(e,t){var n=0|m(t.length);e=o(e,n);for(var r=0;n>r;r+=1)e[r]=255&t[r];return e}function d(e,t,n,r){if(t.byteLength,0>n||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");return t=void 0===r?new Uint8Array(t,n):new Uint8Array(t,n,r),a.TYPED_ARRAY_SUPPORT?(e=t,e.__proto__=a.prototype):e=h(e,t),e}function p(e,t){if(a.isBuffer(t)){var n=0|m(t.length);return e=o(e,n),0===e.length?e:(t.copy(e,0,0,n),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||K(t.length)?o(e,0):h(e,t);if("Buffer"===t.type&&J(t.data))return h(e,t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function m(e){if(e>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function g(e){return+e!=e&&(e=0),a.alloc(+e)}function v(e,t){if(a.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"binary":case"raw":case"raws":return n;case"utf8":case"utf-8":case void 0:return q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return $(e).length;default:if(r)return q(e).length;t=(""+t).toLowerCase(),r=!0}}function y(e,t,n){var r=!1;if((void 0===t||0>t)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),0>=n)return"";if(n>>>=0,t>>>=0,t>=n)return"";for(e||(e="utf8");;)switch(e){case"hex":return I(this,t,n);case"utf8":case"utf-8":return N(this,t,n);case"ascii":return E(this,t,n);case"binary":return O(this,t,n);case"base64":return M(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function x(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function b(e,t,n,r){function i(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}var o=1,a=e.length,l=t.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,a/=2,l/=2,n/=2}for(var s=-1,c=0;a>n+c;c++)if(i(e,n+c)===i(t,-1===s?0:c-s)){if(-1===s&&(s=c),c-s+1===l)return(n+s)*o}else-1!==s&&(c-=c-s),s=-1;return-1}function w(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number(r),r>i&&(r=i)):r=i;var o=t.length;if(o%2!==0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;r>a;a++){var l=parseInt(t.substr(2*a,2),16);if(isNaN(l))return a;e[n+a]=l}return a}function k(e,t,n,r){return V(q(t,e.length-n),e,n,r)}function S(e,t,n,r){return V(G(t),e,n,r)}function C(e,t,n,r){return S(e,t,n,r)}function L(e,t,n,r){return V($(t),e,n,r)}function T(e,t,n,r){return V(Y(t,e.length-n),e,n,r)}function M(e,t,n){return 0===t&&n===e.length?X.fromByteArray(e):X.fromByteArray(e.slice(t,n))}function N(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;n>i;){var o=e[i],a=null,l=o>239?4:o>223?3:o>191?2:1;if(n>=i+l){var s,c,u,f;switch(l){case 1:128>o&&(a=o);break;case 2:s=e[i+1],128===(192&s)&&(f=(31&o)<<6|63&s,f>127&&(a=f));break;case 3:s=e[i+1],c=e[i+2],128===(192&s)&&128===(192&c)&&(f=(15&o)<<12|(63&s)<<6|63&c,f>2047&&(55296>f||f>57343)&&(a=f));break;case 4:s=e[i+1],c=e[i+2],u=e[i+3],128===(192&s)&&128===(192&c)&&128===(192&u)&&(f=(15&o)<<18|(63&s)<<12|(63&c)<<6|63&u,f>65535&&1114112>f&&(a=f))}}null===a?(a=65533,l=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),i+=l}return A(r)}function A(e){var t=e.length;if(Q>=t)return String.fromCharCode.apply(String,e);for(var n="",r=0;t>r;)n+=String.fromCharCode.apply(String,e.slice(r,r+=Q));return n}function E(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;n>i;i++)r+=String.fromCharCode(127&e[i]);return r}function O(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;n>i;i++)r+=String.fromCharCode(e[i]);return r}function I(e,t,n){var r=e.length;(!t||0>t)&&(t=0),(!n||0>n||n>r)&&(n=r);for(var i="",o=t;n>o;o++)i+=U(e[o]);return i}function P(e,t,n){for(var r=e.slice(t,n),i="",o=0;o<r.length;o+=2)i+=String.fromCharCode(r[o]+256*r[o+1]);return i}function R(e,t,n){if(e%1!==0||0>e)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function D(e,t,n,r,i,o){if(!a.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||o>t)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function H(e,t,n,r){0>t&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);o>i;i++)e[n+i]=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function W(e,t,n,r){0>t&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);o>i;i++)e[n+i]=t>>>8*(r?i:3-i)&255}function B(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(0>n)throw new RangeError("Index out of range")}function _(e,t,n,r,i){return i||B(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(e,t,n,r,23,4),n+4}function F(e,t,n,r,i){return i||B(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(e,t,n,r,52,8),n+8}function z(e){if(e=j(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function j(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function U(e){return 16>e?"0"+e.toString(16):e.toString(16)}function q(e,t){t=t||1/0;for(var n,r=e.length,i=null,o=[],a=0;r>a;a++){if(n=e.charCodeAt(a),n>55295&&57344>n){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(56320>n){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,128>n){if((t-=1)<0)break;o.push(n)}else if(2048>n){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(65536>n){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(1114112>n))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function G(e){for(var t=[],n=0;n<e.length;n++)t.push(255&e.charCodeAt(n));return t}function Y(e,t){for(var n,r,i,o=[],a=0;a<e.length&&!((t-=2)<0);a++)n=e.charCodeAt(a),r=n>>8,i=n%256,o.push(i),o.push(r);return o}function $(e){return X.toByteArray(z(e))}function V(e,t,n,r){for(var i=0;r>i&&!(i+n>=t.length||i>=e.length);i++)t[i+n]=e[i];return i}function K(e){return e!==e}var X=e("base64-js"),Z=e("ieee754"),J=e("isarray");n.Buffer=a,n.SlowBuffer=g,n.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:r(),n.kMaxLength=i(),a.poolSize=8192,a._augment=function(e){return e.__proto__=a.prototype,e},a.from=function(e,t,n){return l(null,e,t,n)},a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0})),a.alloc=function(e,t,n){return c(null,e,t,n)},a.allocUnsafe=function(e){return u(null,e)},a.allocUnsafeSlow=function(e){return u(null,e)},a.isBuffer=function(e){return!(null==e||!e._isBuffer)},a.compare=function(e,t){if(!a.isBuffer(e)||!a.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,i=0,o=Math.min(n,r);o>i;++i)if(e[i]!==t[i]){n=e[i],r=t[i];break}return r>n?-1:n>r?1:0},a.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},a.concat=function(e,t){if(!J(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return a.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;n++)t+=e[n].length;var r=a.allocUnsafe(t),i=0;for(n=0;n<e.length;n++){var o=e[n];if(!a.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(r,i),i+=o.length}return r},a.byteLength=v,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;e>t;t+=2)x(this,t,t+1);return this},a.prototype.swap32=function(){var e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;e>t;t+=4)x(this,t,t+3),x(this,t+1,t+2);return this},a.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?N(this,0,e):y.apply(this,arguments)},a.prototype.equals=function(e){if(!a.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:0===a.compare(this,e)},a.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),"<Buffer "+e+">"},a.prototype.compare=function(e,t,n,r,i){if(!a.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),0>t||n>e.length||0>r||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,i>>>=0,this===e)return 0;for(var o=i-r,l=n-t,s=Math.min(o,l),c=this.slice(r,i),u=e.slice(t,n),f=0;s>f;++f)if(c[f]!==u[f]){o=c[f],l=u[f];break}return l>o?-1:o>l?1:0},a.prototype.indexOf=function(e,t,n){if("string"==typeof t?(n=t,t=0):t>2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:b(this,e,t,n);if("number"==typeof e)return a.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):b(this,[e],t,n);throw new TypeError("val must be string, number or Buffer")},a.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},a.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t=0|t,isFinite(n)?(n=0|n,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(0>n||0>t)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return k(this,e,t,n);case"ascii":return S(this,e,t,n);case"binary":return C(this,e,t,n);case"base64":return L(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;a.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,0>e?(e+=n,0>e&&(e=0)):e>n&&(e=n),0>t?(t+=n,0>t&&(t=0)):t>n&&(t=n),e>t&&(t=e);var r;if(a.TYPED_ARRAY_SUPPORT)r=this.subarray(e,t),r.__proto__=a.prototype;else{var i=t-e;r=new a(i,void 0);for(var o=0;i>o;o++)r[o]=this[o+e]}return r},a.prototype.readUIntLE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=this[e],i=1,o=0;++o<t&&(i*=256);)r+=this[e+o]*i;return r},a.prototype.readUIntBE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},a.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},a.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},a.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},a.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},a.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},a.prototype.readIntLE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=this[e],i=1,o=0;++o<t&&(i*=256);)r+=this[e+o]*i;return i*=128,r>=i&&(r-=Math.pow(2,8*t)),r},a.prototype.readIntBE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},a.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},a.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},a.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},a.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),Z.read(this,e,!0,23,4)},a.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),Z.read(this,e,!1,23,4)},a.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),Z.read(this,e,!0,52,8)},a.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),Z.read(this,e,!1,52,8)},a.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t=0|t,n=0|n,!r){var i=Math.pow(2,8*n)-1;D(this,e,t,n,i,0)}var o=1,a=0;for(this[t]=255&e;++a<n&&(o*=256);)this[t+a]=e/o&255;return t+n},a.prototype.writeUIntBE=function(e,t,n,r){if(e=+e,t=0|t,n=0|n,!r){var i=Math.pow(2,8*n)-1;D(this,e,t,n,i,0)}var o=n-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+n},a.prototype.writeUInt8=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,1,255,0),a.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},a.prototype.writeUInt16LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):H(this,e,t,!0),t+2},a.prototype.writeUInt16BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):H(this,e,t,!1),t+2},a.prototype.writeUInt32LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):W(this,e,t,!0),t+4},a.prototype.writeUInt32BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):W(this,e,t,!1),t+4},a.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t=0|t,!r){var i=Math.pow(2,8*n-1);D(this,e,t,n,i-1,-i)}var o=0,a=1,l=0;for(this[t]=255&e;++o<n&&(a*=256);)0>e&&0===l&&0!==this[t+o-1]&&(l=1),this[t+o]=(e/a>>0)-l&255;return t+n},a.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t=0|t,!r){var i=Math.pow(2,8*n-1);D(this,e,t,n,i-1,-i)}var o=n-1,a=1,l=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)0>e&&0===l&&0!==this[t+o+1]&&(l=1),this[t+o]=(e/a>>0)-l&255;return t+n},a.prototype.writeInt8=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,1,127,-128),a.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},a.prototype.writeInt16LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):H(this,e,t,!0),t+2},a.prototype.writeInt16BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):H(this,e,t,!1),t+2},a.prototype.writeInt32LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):W(this,e,t,!0),t+4},a.prototype.writeInt32BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):W(this,e,t,!1),t+4},a.prototype.writeFloatLE=function(e,t,n){return _(this,e,t,!0,n)},a.prototype.writeFloatBE=function(e,t,n){return _(this,e,t,!1,n)},a.prototype.writeDoubleLE=function(e,t,n){return F(this,e,t,!0,n)},a.prototype.writeDoubleBE=function(e,t,n){return F(this,e,t,!1,n)},a.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&n>r&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>n||n>=this.length)throw new RangeError("sourceStart out of bounds");if(0>r)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var i,o=r-n;if(this===e&&t>n&&r>t)for(i=o-1;i>=0;i--)e[i+t]=this[i+n];else if(1e3>o||!a.TYPED_ARRAY_SUPPORT)for(i=0;o>i;i++)e[i+t]=this[i+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+o),t);return o},a.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===e.length){var i=e.charCodeAt(0);256>i&&(e=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!a.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof e&&(e=255&e);if(0>t||this.length<t||this.length<n)throw new RangeError("Out of range index");if(t>=n)return this;t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var o;if("number"==typeof e)for(o=t;n>o;o++)this[o]=e;else{var l=a.isBuffer(e)?e:q(new a(e,r).toString()),s=l.length;for(o=0;n-t>o;o++)this[o+t]=l[o%s]}return this};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":1,ieee754:15,isarray:16}],4:[function(e,t,n){"use strict";function r(e){return e=e||{},"function"!=typeof e.codeMirrorInstance||"function"!=typeof e.codeMirrorInstance.defineMode?void console.log("CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`"):(String.prototype.includes||(String.prototype.includes=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),void e.codeMirrorInstance.defineMode("spell-checker",function(t){if(!r.aff_loading){r.aff_loading=!0;var n=new XMLHttpRequest;n.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff",!0),n.onload=function(){4===n.readyState&&200===n.status&&(r.aff_data=n.responseText,r.num_loaded++,2==r.num_loaded&&(r.typo=new i("en_US",r.aff_data,r.dic_data,{platform:"any"})))},n.send(null)}if(!r.dic_loading){r.dic_loading=!0;var o=new XMLHttpRequest;o.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic",!0),o.onload=function(){4===o.readyState&&200===o.status&&(r.dic_data=o.responseText,r.num_loaded++,2==r.num_loaded&&(r.typo=new i("en_US",r.aff_data,r.dic_data,{platform:"any"})))},o.send(null)}var a='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~ ',l={token:function(e){var t=e.peek(),n="";if(a.includes(t))return e.next(),null;for(;null!=(t=e.peek())&&!a.includes(t);)n+=t,e.next();return r.typo&&!r.typo.check(n)?"spell-error":null}},s=e.codeMirrorInstance.getMode(t,t.backdrop||"text/plain");return e.codeMirrorInstance.overlayMode(s,l,!0)}))}var i=e("typo-js");r.num_loaded=0,r.aff_loading=!1,r.dic_loading=!1,r.aff_data="",r.dic_data="",r.typo,t.exports=r},{"typo-js":18}],5:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";function t(e){var t=e.getWrapperElement();e.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:t.style.width,height:t.style.height},t.style.width="",t.style.height="auto",t.className+=" CodeMirror-fullscreen",document.documentElement.style.overflow="hidden",e.refresh()}function n(e){var t=e.getWrapperElement();t.className=t.className.replace(/\s*CodeMirror-fullscreen\b/,""),document.documentElement.style.overflow="";var n=e.state.fullScreenRestore;t.style.width=n.width,t.style.height=n.height,window.scrollTo(n.scrollLeft,n.scrollTop),e.refresh()}e.defineOption("fullScreen",!1,function(r,i,o){o==e.Init&&(o=!1),!o!=!i&&(i?t(r):n(r))})})},{"../../lib/codemirror":10}],6:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){function t(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function n(e){t(e);var n=e.state.placeholder=document.createElement("pre");n.style.cssText="height: 0; overflow: visible",n.className="CodeMirror-placeholder";var r=e.getOption("placeholder");"string"==typeof r&&(r=document.createTextNode(r)),n.appendChild(r),e.display.lineSpace.insertBefore(n,e.display.lineSpace.firstChild)}function r(e){o(e)&&n(e)}function i(e){var r=e.getWrapperElement(),i=o(e);r.className=r.className.replace(" CodeMirror-empty","")+(i?" CodeMirror-empty":""),i?n(e):t(e)}function o(e){return 1===e.lineCount()&&""===e.getLine(0)}e.defineOption("placeholder","",function(n,o,a){var l=a&&a!=e.Init;if(o&&!l)n.on("blur",r),n.on("change",i),n.on("swapDoc",i),i(n);else if(!o&&l){n.off("blur",r),n.off("change",i),n.off("swapDoc",i),t(n);var s=n.getWrapperElement();s.className=s.className.replace(" CodeMirror-empty","")}o&&!n.hasFocus()&&r(n)})})},{"../../lib/codemirror":10}],7:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";var t=/^(\s*)(>[> ]*|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-]|(\d+)[.)])(\s*)$/,r=/[*+-]\s/;e.commands.newlineAndIndentContinueMarkdownList=function(i){if(i.getOption("disableInput"))return e.Pass;for(var o=i.listSelections(),a=[],l=0;l<o.length;l++){var s=o[l].head,c=i.getStateAfter(s.line),u=c.list!==!1,f=0!==c.quote,h=i.getLine(s.line),d=t.exec(h);if(!o[l].empty()||!u&&!f||!d)return void i.execCommand("newlineAndIndent");if(n.test(h))i.replaceRange("",{line:s.line,ch:0},{line:s.line,ch:s.ch+1}),a[l]="\n";else{var p=d[1],m=d[5],g=r.test(d[2])||d[2].indexOf(">")>=0?d[2]:parseInt(d[3],10)+1+d[4];a[l]="\n"+p+g+m}}i.replaceSelections(a)}})},{"../../lib/codemirror":10}],8:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";e.overlayMode=function(t,n,r){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(r){return{base:e.copyState(t,r.base),overlay:e.copyState(n,r.overlay),basePos:r.basePos,baseCur:null,overlayPos:r.overlayPos,overlayCur:null}},token:function(e,i){return(e!=i.streamSeen||Math.min(i.basePos,i.overlayPos)<e.start)&&(i.streamSeen=e,i.basePos=i.overlayPos=e.start),e.start==i.basePos&&(i.baseCur=t.token(e,i.base),i.basePos=e.pos),e.start==i.overlayPos&&(e.pos=e.start,i.overlayCur=n.token(e,i.overlay),i.overlayPos=e.pos),e.pos=Math.min(i.basePos,i.overlayPos),null==i.overlayCur?i.baseCur:null!=i.baseCur&&i.overlay.combineTokens||r&&null==i.overlay.combineTokens?i.baseCur+" "+i.overlayCur:i.overlayCur},indent:t.indent&&function(e,n){return t.indent(e.base,n)},electricChars:t.electricChars,innerMode:function(e){return{state:e.base,mode:t}},blankLine:function(e){t.blankLine&&t.blankLine(e.base),n.blankLine&&n.blankLine(e.overlay)}}}})},{"../../lib/codemirror":10}],9:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";function t(e){e.operation(function(){a(e)})}function n(e){e.state.markedSelection.length&&e.operation(function(){i(e)})}function r(e,t,n,r){if(0!=c(t,n))for(var i=e.state.markedSelection,o=e.state.markedSelectionStyle,a=t.line;;){var u=a==t.line?t:s(a,0),f=a+l,h=f>=n.line,d=h?n:s(f,0),p=e.markText(u,d,{className:o});if(null==r?i.push(p):i.splice(r++,0,p),h)break;a=f}}function i(e){for(var t=e.state.markedSelection,n=0;n<t.length;++n)t[n].clear();t.length=0}function o(e){i(e);for(var t=e.listSelections(),n=0;n<t.length;n++)r(e,t[n].from(),t[n].to())}function a(e){if(!e.somethingSelected())return i(e);if(e.listSelections().length>1)return o(e);var t=e.getCursor("start"),n=e.getCursor("end"),a=e.state.markedSelection;if(!a.length)return r(e,t,n);var s=a[0].find(),u=a[a.length-1].find();if(!s||!u||n.line-t.line<l||c(t,u.to)>=0||c(n,s.from)<=0)return o(e);for(;c(t,s.from)>0;)a.shift().clear(),s=a[0].find();for(c(t,s.from)<0&&(s.to.line-t.line<l?(a.shift().clear(),r(e,t,s.to,0)):r(e,t,s.from,0));c(n,u.to)<0;)a.pop().clear(),u=a[a.length-1].find();c(n,u.to)>0&&(n.line-u.from.line<l?(a.pop().clear(),r(e,u.from,n)):r(e,u.to,n))}e.defineOption("styleSelectedText",!1,function(r,a,l){var s=l&&l!=e.Init;a&&!s?(r.state.markedSelection=[],r.state.markedSelectionStyle="string"==typeof a?a:"CodeMirror-selectedtext",o(r),r.on("cursorActivity",t),r.on("change",n)):!a&&s&&(r.off("cursorActivity",t),r.off("change",n),i(r),r.state.markedSelection=r.state.markedSelectionStyle=null)});var l=8,s=e.Pos,c=e.cmpPos})},{"../../lib/codemirror":10}],10:[function(t,n,r){!function(t){if("object"==typeof r&&"object"==typeof n)n.exports=t();else{if("function"==typeof e&&e.amd)return e([],t);(this||window).CodeMirror=t()}}(function(){"use strict";function e(n,r){if(!(this instanceof e))return new e(n,r);this.options=r=r?Wi(r):{},Wi(ea,r,!1),d(r);var i=r.value;"string"==typeof i&&(i=new Ca(i,r.mode,null,r.lineSeparator)),this.doc=i;var o=new e.inputStyles[r.inputStyle](this),a=this.display=new t(n,i,o);a.wrapper.CodeMirror=this,c(this),l(this),r.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),r.autofocus&&!Ao&&a.input.focus(),v(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Ei,keySeq:null,specialChars:null};var s=this;xo&&11>bo&&setTimeout(function(){s.display.input.reset(!0)},20),jt(this),Ki(),bt(this),this.curOp.forceUpdate=!0,Xr(this,i),r.autofocus&&!Ao||s.hasFocus()?setTimeout(Bi(vn,this),20):yn(this);for(var u in ta)ta.hasOwnProperty(u)&&ta[u](this,r[u],na);k(this),r.finishInit&&r.finishInit(this);for(var f=0;f<aa.length;++f)aa[f](this);kt(this),wo&&r.lineWrapping&&"optimizelegibility"==getComputedStyle(a.lineDiv).textRendering&&(a.lineDiv.style.textRendering="auto")}function t(e,t,n){var r=this;this.input=n,r.scrollbarFiller=ji("div",null,"CodeMirror-scrollbar-filler"),r.scrollbarFiller.setAttribute("cm-not-content","true"),r.gutterFiller=ji("div",null,"CodeMirror-gutter-filler"),r.gutterFiller.setAttribute("cm-not-content","true"),r.lineDiv=ji("div",null,"CodeMirror-code"),r.selectionDiv=ji("div",null,null,"position: relative; z-index: 1"),r.cursorDiv=ji("div",null,"CodeMirror-cursors"),r.measure=ji("div",null,"CodeMirror-measure"),r.lineMeasure=ji("div",null,"CodeMirror-measure"),r.lineSpace=ji("div",[r.measure,r.lineMeasure,r.selectionDiv,r.cursorDiv,r.lineDiv],null,"position: relative; outline: none"),r.mover=ji("div",[ji("div",[r.lineSpace],"CodeMirror-lines")],null,"position: relative"),r.sizer=ji("div",[r.mover],"CodeMirror-sizer"),r.sizerWidth=null,r.heightForcer=ji("div",null,null,"position: absolute; height: "+Da+"px; width: 1px;"),r.gutters=ji("div",null,"CodeMirror-gutters"),r.lineGutter=null,r.scroller=ji("div",[r.sizer,r.heightForcer,r.gutters],"CodeMirror-scroll"),r.scroller.setAttribute("tabIndex","-1"),r.wrapper=ji("div",[r.scrollbarFiller,r.gutterFiller,r.scroller],"CodeMirror"),xo&&8>bo&&(r.gutters.style.zIndex=-1,r.scroller.style.paddingRight=0),wo||go&&Ao||(r.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(r.wrapper):e(r.wrapper)),r.viewFrom=r.viewTo=t.first,r.reportedViewFrom=r.reportedViewTo=t.first,r.view=[],r.renderedView=null,r.externalMeasured=null,r.viewOffset=0,r.lastWrapHeight=r.lastWrapWidth=0,r.updateLineNumbers=null,r.nativeBarWidth=r.barHeight=r.barWidth=0,r.scrollbarsClipped=!1,r.lineNumWidth=r.lineNumInnerWidth=r.lineNumChars=null,r.alignWidgets=!1,r.cachedCharWidth=r.cachedTextHeight=r.cachedPaddingH=null, -r.maxLine=null,r.maxLineLength=0,r.maxLineChanged=!1,r.wheelDX=r.wheelDY=r.wheelStartX=r.wheelStartY=null,r.shift=!1,r.selForContextMenu=null,r.activeTouch=null,n.init(r)}function n(t){t.doc.mode=e.getMode(t.options,t.doc.modeOption),r(t)}function r(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.frontier=e.doc.first,_e(e,100),e.state.modeGen++,e.curOp&&Dt(e)}function i(e){e.options.lineWrapping?(Ja(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(Za(e.display.wrapper,"CodeMirror-wrap"),h(e)),a(e),Dt(e),lt(e),setTimeout(function(){y(e)},100)}function o(e){var t=yt(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/xt(e.display)-3);return function(i){if(kr(e.doc,i))return 0;var o=0;if(i.widgets)for(var a=0;a<i.widgets.length;a++)i.widgets[a].height&&(o+=i.widgets[a].height);return n?o+(Math.ceil(i.text.length/r)||1)*t:o+t}}function a(e){var t=e.doc,n=o(e);t.iter(function(e){var t=n(e);t!=e.height&&ei(e,t)})}function l(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),lt(e)}function s(e){c(e),Dt(e),setTimeout(function(){w(e)},20)}function c(e){var t=e.display.gutters,n=e.options.gutters;Ui(t);for(var r=0;r<n.length;++r){var i=n[r],o=t.appendChild(ji("div",null,"CodeMirror-gutter "+i));"CodeMirror-linenumbers"==i&&(e.display.lineGutter=o,o.style.width=(e.display.lineNumWidth||1)+"px")}t.style.display=r?"":"none",u(e)}function u(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function f(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=mr(r);){var i=t.find(0,!0);r=i.from.line,n+=i.from.ch-i.to.ch}for(r=e;t=gr(r);){var i=t.find(0,!0);n-=r.text.length-i.from.ch,r=i.to.line,n+=r.text.length-i.to.ch}return n}function h(e){var t=e.display,n=e.doc;t.maxLine=Zr(n,n.first),t.maxLineLength=f(t.maxLine),t.maxLineChanged=!0,n.iter(function(e){var n=f(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}function d(e){var t=Pi(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function p(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+qe(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Ye(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function m(e,t,n){this.cm=n;var r=this.vert=ji("div",[ji("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=ji("div",[ji("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(r),e(i),Ea(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),Ea(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,xo&&8>bo&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function g(){}function v(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&Za(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new e.scrollbarModel[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),Ea(e,"mousedown",function(){t.state.focused&&setTimeout(function(){t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?on(t,e):rn(t,e)},t),t.display.scrollbars.addClass&&Ja(t.display.wrapper,t.display.scrollbars.addClass)}function y(e,t){t||(t=p(e));var n=e.display.barWidth,r=e.display.barHeight;x(e,t);for(var i=0;4>i&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&O(e),x(e,p(e)),n=e.display.barWidth,r=e.display.barHeight}function x(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}function b(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-Ue(e));var i=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,o=ni(t,r),a=ni(t,i);if(n&&n.ensure){var l=n.ensure.from.line,s=n.ensure.to.line;o>l?(o=l,a=ni(t,ri(Zr(t,l))+e.wrapper.clientHeight)):Math.min(s,t.lastLine())>=a&&(o=ni(t,ri(Zr(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function w(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=C(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",a=0;a<n.length;a++)if(!n[a].hidden){e.options.fixedGutter&&n[a].gutter&&(n[a].gutter.style.left=o);var l=n[a].alignable;if(l)for(var s=0;s<l.length;s++)l[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+"px")}}function k(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=S(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var i=r.measure.appendChild(ji("div",[ji("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=i.firstChild.offsetWidth,a=i.offsetWidth-o;return r.lineGutter.style.width="",r.lineNumInnerWidth=Math.max(o,r.lineGutter.offsetWidth-a)+1,r.lineNumWidth=r.lineNumInnerWidth+a,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+"px",u(e),!0}return!1}function S(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function C(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function L(e,t,n){var r=e.display;this.viewport=t,this.visible=b(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=$e(e),this.force=n,this.dims=P(e),this.events=[]}function T(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Ye(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Ye(e)+"px",t.scrollbarsClipped=!0)}function M(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return Wt(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==zt(e))return!1;k(e)&&(Wt(e),t.dims=P(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(r.first,n.viewFrom)),n.viewTo>a&&n.viewTo-a<20&&(a=Math.min(i,n.viewTo)),Wo&&(o=br(e.doc,o),a=wr(e.doc,a));var l=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;Ft(e,o,a),n.viewOffset=ri(Zr(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var s=zt(e);if(!l&&0==s&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=Gi();return s>4&&(n.lineDiv.style.display="none"),R(e,n.updateLineNumbers,t.dims),s>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,c&&Gi()!=c&&c.offsetHeight&&c.focus(),Ui(n.cursorDiv),Ui(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,l&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,_e(e,400)),n.updateLineNumbers=null,!0}function N(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t.oldDisplayWidth!=$e(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+qe(e.display)-Ve(e),n.top)}),t.visible=b(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&M(e,t);r=!1){O(e);var i=p(e);Re(e),y(e,i),E(e,i)}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function A(e,t){var n=new L(e,t);if(M(e,n)){O(e),N(e,n);var r=p(e);Re(e),y(e,r),E(e,r),n.finish()}}function E(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Ye(e)+"px"}function O(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i,o=t.view[r];if(!o.hidden){if(xo&&8>bo){var a=o.node.offsetTop+o.node.offsetHeight;i=a-n,n=a}else{var l=o.node.getBoundingClientRect();i=l.bottom-l.top}var s=o.line.height-i;if(2>i&&(i=yt(t)),(s>.001||-.001>s)&&(ei(o.line,i),I(o.line),o.rest))for(var c=0;c<o.rest.length;c++)I(o.rest[c])}}}function I(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t)e.widgets[t].height=e.widgets[t].node.parentNode.offsetHeight}function P(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)n[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+i,r[e.options.gutters[a]]=o.clientWidth;return{fixedPos:C(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function R(e,t,n){function r(t){var n=t.nextSibling;return wo&&Eo&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var i=e.display,o=e.options.lineNumbers,a=i.lineDiv,l=a.firstChild,s=i.view,c=i.viewFrom,u=0;u<s.length;u++){var f=s[u];if(f.hidden);else if(f.node&&f.node.parentNode==a){for(;l!=f.node;)l=r(l);var h=o&&null!=t&&c>=t&&f.lineNumber;f.changes&&(Pi(f.changes,"gutter")>-1&&(h=!1),D(e,f,c,n)),h&&(Ui(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(S(e.options,c)))),l=f.node.nextSibling}else{var d=U(e,f,c,n);a.insertBefore(d,l)}c+=f.size}for(;l;)l=r(l)}function D(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?_(e,t):"gutter"==o?z(e,t,n,r):"class"==o?F(t):"widget"==o&&j(e,t,r)}t.changes=null}function H(e){return e.node==e.text&&(e.node=ji("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),xo&&8>bo&&(e.node.style.zIndex=2)),e.node}function W(e){var t=e.bgClass?e.bgClass+" "+(e.line.bgClass||""):e.line.bgClass;if(t&&(t+=" CodeMirror-linebackground"),e.background)t?e.background.className=t:(e.background.parentNode.removeChild(e.background),e.background=null);else if(t){var n=H(e);e.background=n.insertBefore(ji("div",null,t),n.firstChild)}}function B(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):Br(e,t)}function _(e,t){var n=t.text.className,r=B(e,t);t.text==t.node&&(t.node=r.pre),t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,F(t)):n&&(t.text.className=n)}function F(e){W(e),e.line.wrapClass?H(e).className=e.line.wrapClass:e.node!=e.text&&(e.node.className="");var t=e.textClass?e.textClass+" "+(e.line.textClass||""):e.line.textClass;e.text.className=t||""}function z(e,t,n,r){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=H(t);t.gutterBackground=ji("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px; width: "+r.gutterTotalWidth+"px"),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var i=H(t),a=t.gutter=ji("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px");if(e.display.input.setUneditable(a),i.insertBefore(a,t.text),t.line.gutterClass&&(a.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=a.appendChild(ji("div",S(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+r.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var l=0;l<e.options.gutters.length;++l){var s=e.options.gutters[l],c=o.hasOwnProperty(s)&&o[s];c&&a.appendChild(ji("div",[c],"CodeMirror-gutter-elt","left: "+r.gutterLeft[s]+"px; width: "+r.gutterWidth[s]+"px"))}}}function j(e,t,n){t.alignable&&(t.alignable=null);for(var r,i=t.node.firstChild;i;i=r){var r=i.nextSibling;"CodeMirror-linewidget"==i.className&&t.node.removeChild(i)}q(e,t,n)}function U(e,t,n,r){var i=B(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),F(t),z(e,t,n,r),q(e,t,r),t.node}function q(e,t,n){if(G(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)G(e,t.rest[r],t,n,!1)}function G(e,t,n,r,i){if(t.widgets)for(var o=H(n),a=0,l=t.widgets;a<l.length;++a){var s=l[a],c=ji("div",[s.node],"CodeMirror-linewidget");s.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),Y(s,c,n,r),e.display.input.setUneditable(c),i&&s.above?o.insertBefore(c,n.gutter||n.text):o.appendChild(c),Ci(s,"redraw")}}function Y(e,t,n,r){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var i=r.wrapperWidth;t.style.left=r.fixedPos+"px",e.coverGutter||(i-=r.gutterTotalWidth,t.style.paddingLeft=r.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-r.gutterTotalWidth+"px"))}function $(e){return Bo(e.line,e.ch)}function V(e,t){return _o(e,t)<0?t:e}function K(e,t){return _o(e,t)<0?e:t}function X(e){e.state.focused||(e.display.input.focus(),vn(e))}function Z(e,t,n,r,i){var o=e.doc;e.display.shift=!1,r||(r=o.sel);var a=e.state.pasteIncoming||"paste"==i,l=o.splitLines(t),s=null;if(a&&r.ranges.length>1)if(Fo&&Fo.text.join("\n")==t){if(r.ranges.length%Fo.text.length==0){s=[];for(var c=0;c<Fo.text.length;c++)s.push(o.splitLines(Fo.text[c]))}}else l.length==r.ranges.length&&(s=Ri(l,function(e){return[e]}));for(var c=r.ranges.length-1;c>=0;c--){var u=r.ranges[c],f=u.from(),h=u.to();u.empty()&&(n&&n>0?f=Bo(f.line,f.ch-n):e.state.overwrite&&!a?h=Bo(h.line,Math.min(Zr(o,h.line).text.length,h.ch+Ii(l).length)):Fo&&Fo.lineWise&&Fo.text.join("\n")==t&&(f=h=Bo(f.line,0)));var d=e.curOp.updateInput,p={from:f,to:h,text:s?s[c%s.length]:l,origin:i||(a?"paste":e.state.cutIncoming?"cut":"+input")};Tn(e.doc,p),Ci(e,"inputRead",e,p)}t&&!a&&Q(e,t),Bn(e),e.curOp.updateInput=d,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function J(e,t){var n=e.clipboardData&&e.clipboardData.getData("text/plain");return n?(e.preventDefault(),t.isReadOnly()||t.options.disableInput||At(t,function(){Z(t,n,0,null,"paste")}),!0):void 0}function Q(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var l=0;l<o.electricChars.length;l++)if(t.indexOf(o.electricChars.charAt(l))>-1){a=Fn(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Zr(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Fn(e,i.head.line,"smart"));a&&Ci(e,"electricInput",e,i.head.line)}}}function ee(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,o={anchor:Bo(i,0),head:Bo(i+1,0)};n.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:n}}function te(e){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck","false")}function ne(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new Ei,this.inaccurateSelection=!1,this.hasSelection=!1,this.composing=null}function re(){var e=ji("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none"),t=ji("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return wo?e.style.width="1000px":e.setAttribute("wrap","off"),No&&(e.style.border="1px solid black"),te(e),t}function ie(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Ei,this.gracePeriod=!1}function oe(e,t){var n=Qe(e,t.line);if(!n||n.hidden)return null;var r=Zr(e.doc,t.line),i=Xe(n,r,t.line),o=ii(r),a="left";if(o){var l=co(o,t.ch);a=l%2?"right":"left"}var s=nt(i.map,t.ch,a);return s.offset="right"==s.collapse?s.end:s.start,s}function ae(e,t){return t&&(e.bad=!0),e}function le(e,t,n){var r;if(t==e.display.lineDiv){if(r=e.display.lineDiv.childNodes[n],!r)return ae(e.clipPos(Bo(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==r)return se(o,t,n)}}function se(e,t,n){function r(t,n,r){for(var i=-1;i<(u?u.length:0);i++)for(var o=0>i?c.map:u[i],a=0;a<o.length;a+=3){var l=o[a+2];if(l==t||l==n){var s=ti(0>i?e.line:e.rest[i]),f=o[a]+r;return(0>r||l!=t)&&(f=o[a+(r?1:0)]),Bo(s,f)}}}var i=e.text.firstChild,o=!1;if(!t||!Va(i,t))return ae(Bo(ti(e.line),0),!0);if(t==i&&(o=!0,t=i.childNodes[n],n=0,!t)){var a=e.rest?Ii(e.rest):e.line;return ae(Bo(ti(a),a.text.length),o)}var l=3==t.nodeType?t:null,s=t;for(l||1!=t.childNodes.length||3!=t.firstChild.nodeType||(l=t.firstChild,n&&(n=l.nodeValue.length));s.parentNode!=i;)s=s.parentNode;var c=e.measure,u=c.maps,f=r(l,s,n);if(f)return ae(f,o);for(var h=s.nextSibling,d=l?l.nodeValue.length-n:0;h;h=h.nextSibling){if(f=r(h,h.firstChild,0))return ae(Bo(f.line,f.ch-d),o);d+=h.textContent.length}for(var p=s.previousSibling,d=n;p;p=p.previousSibling){if(f=r(p,p.firstChild,-1))return ae(Bo(f.line,f.ch+d),o);d+=h.textContent.length}}function ce(e,t,n,r,i){function o(e){return function(t){return t.id==e}}function a(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(null!=n)return""==n&&(n=t.textContent.replace(/\u200b/g,"")),void(l+=n);var u,f=t.getAttribute("cm-marker");if(f){var h=e.findMarks(Bo(r,0),Bo(i+1,0),o(+f));return void(h.length&&(u=h[0].find())&&(l+=Jr(e.doc,u.from,u.to).join(c)))}if("false"==t.getAttribute("contenteditable"))return;for(var d=0;d<t.childNodes.length;d++)a(t.childNodes[d]);/^(pre|div|p)$/i.test(t.nodeName)&&(s=!0)}else if(3==t.nodeType){var p=t.nodeValue;if(!p)return;s&&(l+=c,s=!1),l+=p}}for(var l="",s=!1,c=e.doc.lineSeparator();a(t),t!=n;)t=t.nextSibling;return l}function ue(e,t){this.ranges=e,this.primIndex=t}function fe(e,t){this.anchor=e,this.head=t}function he(e,t){var n=e[t];e.sort(function(e,t){return _o(e.from(),t.from())}),t=Pi(e,n);for(var r=1;r<e.length;r++){var i=e[r],o=e[r-1];if(_o(o.to(),i.from())>=0){var a=K(o.from(),i.from()),l=V(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;t>=r&&--t,e.splice(--r,2,new fe(s?l:a,s?a:l))}}return new ue(e,t)}function de(e,t){return new ue([new fe(e,t||e)],0)}function pe(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function me(e,t){if(t.line<e.first)return Bo(e.first,0);var n=e.first+e.size-1;return t.line>n?Bo(n,Zr(e,n).text.length):ge(t,Zr(e,t.line).text.length)}function ge(e,t){var n=e.ch;return null==n||n>t?Bo(e.line,t):0>n?Bo(e.line,0):e}function ve(e,t){return t>=e.first&&t<e.first+e.size}function ye(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=me(e,t[r]);return n}function xe(e,t,n,r){if(e.cm&&e.cm.display.shift||e.extend){var i=t.anchor;if(r){var o=_o(n,i)<0;o!=_o(r,i)<0?(i=n,n=r):o!=_o(n,r)<0&&(n=r)}return new fe(i,n)}return new fe(r||n,n)}function be(e,t,n,r){Te(e,new ue([xe(e,e.sel.primary(),t,n)],0),r)}function we(e,t,n){for(var r=[],i=0;i<e.sel.ranges.length;i++)r[i]=xe(e,e.sel.ranges[i],t[i],null);var o=he(r,e.sel.primIndex);Te(e,o,n)}function ke(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,Te(e,he(i,e.sel.primIndex),r)}function Se(e,t,n,r){Te(e,de(t,n),r)}function Ce(e,t,n){var r={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new fe(me(e,t[n].anchor),me(e,t[n].head))},origin:n&&n.origin};return Pa(e,"beforeSelectionChange",e,r),e.cm&&Pa(e.cm,"beforeSelectionChange",e.cm,r),r.ranges!=t.ranges?he(r.ranges,r.ranges.length-1):t}function Le(e,t,n){var r=e.history.done,i=Ii(r);i&&i.ranges?(r[r.length-1]=t,Me(e,t,n)):Te(e,t,n)}function Te(e,t,n){Me(e,t,n),fi(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Me(e,t,n){(Ni(e,"beforeSelectionChange")||e.cm&&Ni(e.cm,"beforeSelectionChange"))&&(t=Ce(e,t,n));var r=n&&n.bias||(_o(t.primary().head,e.sel.primary().head)<0?-1:1);Ne(e,Ee(e,t,r,!0)),n&&n.scroll===!1||!e.cm||Bn(e.cm)}function Ne(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,Mi(e.cm)),Ci(e,"cursorActivity",e))}function Ae(e){Ne(e,Ee(e,e.sel,null,!1),Wa)}function Ee(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var a=t.ranges[o],l=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=Ie(e,a.anchor,l&&l.anchor,n,r),c=Ie(e,a.head,l&&l.head,n,r);(i||s!=a.anchor||c!=a.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new fe(s,c))}return i?he(i,t.primIndex):t}function Oe(e,t,n,r,i){var o=Zr(e,t.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var l=o.markedSpans[a],s=l.marker;if((null==l.from||(s.inclusiveLeft?l.from<=t.ch:l.from<t.ch))&&(null==l.to||(s.inclusiveRight?l.to>=t.ch:l.to>t.ch))){if(i&&(Pa(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(n){var c,u=s.find(0>r?1:-1);if((0>r?s.inclusiveRight:s.inclusiveLeft)&&(u=Pe(e,u,-r,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=_o(u,n))&&(0>r?0>c:c>0))return Oe(e,u,t,r,i)}var f=s.find(0>r?-1:1);return(0>r?s.inclusiveLeft:s.inclusiveRight)&&(f=Pe(e,f,r,f.line==t.line?o:null)),f?Oe(e,f,t,r,i):null}}return t}function Ie(e,t,n,r,i){var o=r||1,a=Oe(e,t,n,o,i)||!i&&Oe(e,t,n,o,!0)||Oe(e,t,n,-o,i)||!i&&Oe(e,t,n,-o,!0);return a?a:(e.cantEdit=!0,Bo(e.first,0))}function Pe(e,t,n,r){return 0>n&&0==t.ch?t.line>e.first?me(e,Bo(t.line-1)):null:n>0&&t.ch==(r||Zr(e,t.line)).text.length?t.line<e.first+e.size-1?Bo(t.line+1,0):null:new Bo(t.line,t.ch+n)}function Re(e){e.display.input.showSelection(e.display.input.prepareSelection())}function De(e,t){for(var n=e.doc,r={},i=r.cursors=document.createDocumentFragment(),o=r.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(t!==!1||a!=n.sel.primIndex){var l=n.sel.ranges[a];if(!(l.from().line>=e.display.viewTo||l.to().line<e.display.viewFrom)){var s=l.empty();(s||e.options.showCursorWhenSelecting)&&He(e,l.head,i),s||We(e,l,o)}}return r}function He(e,t,n){var r=dt(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),i=n.appendChild(ji("div"," ","CodeMirror-cursor"));if(i.style.left=r.left+"px",i.style.top=r.top+"px",i.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+"px",r.other){var o=n.appendChild(ji("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=r.other.left+"px",o.style.top=r.other.top+"px",o.style.height=.85*(r.other.bottom-r.other.top)+"px"}}function We(e,t,n){function r(e,t,n,r){0>t&&(t=0),t=Math.round(t),r=Math.round(r),l.appendChild(ji("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px; top: "+t+"px; width: "+(null==n?u-e:n)+"px; height: "+(r-t)+"px"))}function i(t,n,i){function o(n,r){return ht(e,Bo(t,n),"div",f,r)}var l,s,f=Zr(a,t),h=f.text.length;return eo(ii(f),n||0,null==i?h:i,function(e,t,a){var f,d,p,m=o(e,"left");if(e==t)f=m,d=p=m.left;else{if(f=o(t-1,"right"),"rtl"==a){var g=m;m=f,f=g}d=m.left,p=f.right}null==n&&0==e&&(d=c),f.top-m.top>3&&(r(d,m.top,null,m.bottom),d=c,m.bottom<f.top&&r(d,m.bottom,null,f.top)),null==i&&t==h&&(p=u),(!l||m.top<l.top||m.top==l.top&&m.left<l.left)&&(l=m),(!s||f.bottom>s.bottom||f.bottom==s.bottom&&f.right>s.right)&&(s=f),c+1>d&&(d=c),r(d,f.top,p-d,f.bottom)}),{start:l,end:s}}var o=e.display,a=e.doc,l=document.createDocumentFragment(),s=Ge(e.display),c=s.left,u=Math.max(o.sizerWidth,$e(e)-o.sizer.offsetLeft)-s.right,f=t.from(),h=t.to();if(f.line==h.line)i(f.line,f.ch,h.ch);else{var d=Zr(a,f.line),p=Zr(a,h.line),m=yr(d)==yr(p),g=i(f.line,f.ch,m?d.text.length+1:null).end,v=i(h.line,m?0:null,h.ch).start;m&&(g.top<v.top-2?(r(g.right,g.top,null,g.bottom),r(c,v.top,v.left,v.bottom)):r(g.right,g.top,v.left-g.right,g.bottom)),g.bottom<v.top&&r(c,g.bottom,null,v.top)}n.appendChild(l)}function Be(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function _e(e,t){e.doc.mode.startState&&e.doc.frontier<e.display.viewTo&&e.state.highlight.set(t,Bi(Fe,e))}function Fe(e){var t=e.doc;if(t.frontier<t.first&&(t.frontier=t.first),!(t.frontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,r=sa(t.mode,je(e,t.frontier)),i=[];t.iter(t.frontier,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(t.frontier>=e.display.viewFrom){var a=o.styles,l=o.text.length>e.options.maxHighlightLength,s=Rr(e,o,l?sa(t.mode,r):r,!0);o.styles=s.styles;var c=o.styleClasses,u=s.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var f=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!f&&h<a.length;++h)f=a[h]!=o.styles[h];f&&i.push(t.frontier),o.stateAfter=l?r:sa(t.mode,r)}else o.text.length<=e.options.maxHighlightLength&&Hr(e,o.text,r),o.stateAfter=t.frontier%5==0?sa(t.mode,r):null;return++t.frontier,+new Date>n?(_e(e,e.options.workDelay),!0):void 0}),i.length&&At(e,function(){for(var t=0;t<i.length;t++)Ht(e,i[t],"text")})}}function ze(e,t,n){for(var r,i,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;l>a;--l){if(l<=o.first)return o.first;var s=Zr(o,l-1);if(s.stateAfter&&(!n||l<=o.frontier))return l;var c=Fa(s.text,null,e.options.tabSize);(null==i||r>c)&&(i=l-1,r=c)}return i}function je(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return!0;var o=ze(e,t,n),a=o>r.first&&Zr(r,o-1).stateAfter;return a=a?sa(r.mode,a):ca(r.mode),r.iter(o,t,function(n){Hr(e,n.text,a);var l=o==t-1||o%5==0||o>=i.viewFrom&&o<i.viewTo;n.stateAfter=l?sa(r.mode,a):null,++o}),n&&(r.frontier=o),a}function Ue(e){return e.lineSpace.offsetTop}function qe(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Ge(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=qi(e.measure,ji("pre","x")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,r={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(r.left)||isNaN(r.right)||(e.cachedPaddingH=r),r}function Ye(e){return Da-e.display.nativeBarWidth}function $e(e){return e.display.scroller.clientWidth-Ye(e)-e.display.barWidth}function Ve(e){return e.display.scroller.clientHeight-Ye(e)-e.display.barHeight}function Ke(e,t,n){var r=e.options.lineWrapping,i=r&&$e(e);if(!t.measure.heights||r&&t.measure.width!=i){var o=t.measure.heights=[];if(r){t.measure.width=i;for(var a=t.text.firstChild.getClientRects(),l=0;l<a.length-1;l++){var s=a[l],c=a[l+1];Math.abs(s.bottom-c.bottom)>2&&o.push((s.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function Xe(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var r=0;r<e.rest.length;r++)if(ti(e.rest[r])>n)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}function Ze(e,t){t=yr(t);var n=ti(t),r=e.display.externalMeasured=new Pt(e.doc,t,n);r.lineN=n;var i=r.built=Br(e,r);return r.text=i.pre,qi(e.display.lineMeasure,i.pre),r}function Je(e,t,n,r){return tt(e,et(e,t),n,r)}function Qe(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Bt(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function et(e,t){var n=ti(t),r=Qe(e,n);r&&!r.text?r=null:r&&r.changes&&(D(e,r,n,P(e)),e.curOp.forceUpdate=!0),r||(r=Ze(e,t));var i=Xe(r,t,n);return{line:t,view:r,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function tt(e,t,n,r,i){t.before&&(n=-1);var o,a=n+(r||"");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Ke(e,t.view,t.rect),t.hasHeights=!0),o=rt(e,t,n,r),o.bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}function nt(e,t,n){for(var r,i,o,a,l=0;l<e.length;l+=3){var s=e[l],c=e[l+1];if(s>t?(i=0,o=1,a="left"):c>t?(i=t-s,o=i+1):(l==e.length-3||t==c&&e[l+3]>t)&&(o=c-s,i=o-1,t>=c&&(a="right")),null!=i){if(r=e[l+2],s==c&&n==(r.insertLeft?"left":"right")&&(a=n),"left"==n&&0==i)for(;l&&e[l-2]==e[l-3]&&e[l-1].insertLeft;)r=e[(l-=3)+2],a="left";if("right"==n&&i==c-s)for(;l<e.length-3&&e[l+3]==e[l+4]&&!e[l+5].insertLeft;)r=e[(l+=3)+2],a="right";break}}return{node:r,start:i,end:o,collapse:a,coverStart:s,coverEnd:c}}function rt(e,t,n,r){var i,o=nt(t.map,n,r),a=o.node,l=o.start,s=o.end,c=o.collapse;if(3==a.nodeType){for(var u=0;4>u;u++){for(;l&&zi(t.line.text.charAt(o.coverStart+l));)--l;for(;o.coverStart+s<o.coverEnd&&zi(t.line.text.charAt(o.coverStart+s));)++s;if(xo&&9>bo&&0==l&&s==o.coverEnd-o.coverStart)i=a.parentNode.getBoundingClientRect();else if(xo&&e.options.lineWrapping){var f=qa(a,l,s).getClientRects();i=f.length?f["right"==r?f.length-1:0]:qo}else i=qa(a,l,s).getBoundingClientRect()||qo;if(i.left||i.right||0==l)break;s=l,l-=1,c="right"}xo&&11>bo&&(i=it(e.display.measure,i))}else{l>0&&(c=r="right");var f;i=e.options.lineWrapping&&(f=a.getClientRects()).length>1?f["right"==r?f.length-1:0]:a.getBoundingClientRect()}if(xo&&9>bo&&!l&&(!i||!i.left&&!i.right)){var h=a.parentNode.getClientRects()[0];i=h?{left:h.left,right:h.left+xt(e.display),top:h.top,bottom:h.bottom}:qo}for(var d=i.top-t.rect.top,p=i.bottom-t.rect.top,m=(d+p)/2,g=t.view.measure.heights,u=0;u<g.length-1&&!(m<g[u]);u++);var v=u?g[u-1]:0,y=g[u],x={left:("right"==c?i.right:i.left)-t.rect.left,right:("left"==c?i.left:i.right)-t.rect.left,top:v,bottom:y};return i.left||i.right||(x.bogus=!0),e.options.singleCursorHeightPerLine||(x.rtop=d,x.rbottom=p),x}function it(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!Qi(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}function ot(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function at(e){e.display.externalMeasure=null,Ui(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)ot(e.display.view[t])}function lt(e){at(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function st(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function ct(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function ut(e,t,n,r){if(t.widgets)for(var i=0;i<t.widgets.length;++i)if(t.widgets[i].above){var o=Lr(t.widgets[i]);n.top+=o,n.bottom+=o}if("line"==r)return n;r||(r="local");var a=ri(t);if("local"==r?a+=Ue(e.display):a-=e.display.viewOffset,"page"==r||"window"==r){var l=e.display.lineSpace.getBoundingClientRect();a+=l.top+("window"==r?0:ct());var s=l.left+("window"==r?0:st());n.left+=s,n.right+=s}return n.top+=a,n.bottom+=a,n}function ft(e,t,n){if("div"==n)return t;var r=t.left,i=t.top;if("page"==n)r-=st(), -i-=ct();else if("local"==n||!n){var o=e.display.sizer.getBoundingClientRect();r+=o.left,i+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:r-a.left,top:i-a.top}}function ht(e,t,n,r,i){return r||(r=Zr(e.doc,t.line)),ut(e,r,Je(e,r,t.ch,i),n)}function dt(e,t,n,r,i,o){function a(t,a){var l=tt(e,i,t,a?"right":"left",o);return a?l.left=l.right:l.right=l.left,ut(e,r,l,n)}function l(e,t){var n=s[t],r=n.level%2;return e==to(n)&&t&&n.level<s[t-1].level?(n=s[--t],e=no(n)-(n.level%2?0:1),r=!0):e==no(n)&&t<s.length-1&&n.level<s[t+1].level&&(n=s[++t],e=to(n)-n.level%2,r=!1),r&&e==n.to&&e>n.from?a(e-1):a(e,r)}r=r||Zr(e.doc,t.line),i||(i=et(e,r));var s=ii(r),c=t.ch;if(!s)return a(c);var u=co(s,c),f=l(c,u);return null!=al&&(f.other=l(c,al)),f}function pt(e,t){var n=0,t=me(e.doc,t);e.options.lineWrapping||(n=xt(e.display)*t.ch);var r=Zr(e.doc,t.line),i=ri(r)+Ue(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function mt(e,t,n,r){var i=Bo(e,t);return i.xRel=r,n&&(i.outside=!0),i}function gt(e,t,n){var r=e.doc;if(n+=e.display.viewOffset,0>n)return mt(r.first,0,!0,-1);var i=ni(r,n),o=r.first+r.size-1;if(i>o)return mt(r.first+r.size-1,Zr(r,o).text.length,!0,1);0>t&&(t=0);for(var a=Zr(r,i);;){var l=vt(e,a,i,t,n),s=gr(a),c=s&&s.find(0,!0);if(!s||!(l.ch>c.from.ch||l.ch==c.from.ch&&l.xRel>0))return l;i=ti(a=c.to.line)}}function vt(e,t,n,r,i){function o(r){var i=dt(e,Bo(n,r),"line",t,c);return l=!0,a>i.bottom?i.left-s:a<i.top?i.left+s:(l=!1,i.left)}var a=i-ri(t),l=!1,s=2*e.display.wrapper.clientWidth,c=et(e,t),u=ii(t),f=t.text.length,h=ro(t),d=io(t),p=o(h),m=l,g=o(d),v=l;if(r>g)return mt(n,d,v,1);for(;;){if(u?d==h||d==fo(t,h,1):1>=d-h){for(var y=p>r||g-r>=r-p?h:d,x=r-(y==h?p:g);zi(t.text.charAt(y));)++y;var b=mt(n,y,y==h?m:v,-1>x?-1:x>1?1:0);return b}var w=Math.ceil(f/2),k=h+w;if(u){k=h;for(var S=0;w>S;++S)k=fo(t,k,1)}var C=o(k);C>r?(d=k,g=C,(v=l)&&(g+=1e3),f=w):(h=k,p=C,m=l,f-=w)}}function yt(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==zo){zo=ji("pre");for(var t=0;49>t;++t)zo.appendChild(document.createTextNode("x")),zo.appendChild(ji("br"));zo.appendChild(document.createTextNode("x"))}qi(e.measure,zo);var n=zo.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),Ui(e.measure),n||1}function xt(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=ji("span","xxxxxxxxxx"),n=ji("pre",[t]);qi(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function bt(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Yo},Go?Go.ops.push(e.curOp):e.curOp.ownsGroup=Go={ops:[e.curOp],delayedCallbacks:[]}}function wt(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var i=e.ops[r];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(n<t.length)}function kt(e){var t=e.curOp,n=t.ownsGroup;if(n)try{wt(n)}finally{Go=null;for(var r=0;r<n.ops.length;r++)n.ops[r].cm.curOp=null;St(n)}}function St(e){for(var t=e.ops,n=0;n<t.length;n++)Ct(t[n]);for(var n=0;n<t.length;n++)Lt(t[n]);for(var n=0;n<t.length;n++)Tt(t[n]);for(var n=0;n<t.length;n++)Mt(t[n]);for(var n=0;n<t.length;n++)Nt(t[n])}function Ct(e){var t=e.cm,n=t.display;T(t),e.updateMaxLine&&h(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new L(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Lt(e){e.updatedDisplay=e.mustUpdate&&M(e.cm,e.update)}function Tt(e){var t=e.cm,n=t.display;e.updatedDisplay&&O(t),e.barMeasure=p(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Je(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Ye(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-$e(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection(e.focus))}function Mt(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&on(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==Gi()&&(!document.hasFocus||document.hasFocus());e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&y(t,e.barMeasure),e.updatedDisplay&&E(t,e.barMeasure),e.selectionChanged&&Be(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&X(e.cm)}function Nt(e){var t=e.cm,n=t.display,r=t.doc;if(e.updatedDisplay&&N(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null==e.scrollTop||n.scroller.scrollTop==e.scrollTop&&!e.forceScroll||(r.scrollTop=Math.max(0,Math.min(n.scroller.scrollHeight-n.scroller.clientHeight,e.scrollTop)),n.scrollbars.setScrollTop(r.scrollTop),n.scroller.scrollTop=r.scrollTop),null==e.scrollLeft||n.scroller.scrollLeft==e.scrollLeft&&!e.forceScroll||(r.scrollLeft=Math.max(0,Math.min(n.scroller.scrollWidth-n.scroller.clientWidth,e.scrollLeft)),n.scrollbars.setScrollLeft(r.scrollLeft),n.scroller.scrollLeft=r.scrollLeft,w(t)),e.scrollToPos){var i=Rn(t,me(r,e.scrollToPos.from),me(r,e.scrollToPos.to),e.scrollToPos.margin);e.scrollToPos.isCursor&&t.state.focused&&Pn(t,i)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(o)for(var l=0;l<o.length;++l)o[l].lines.length||Pa(o[l],"hide");if(a)for(var l=0;l<a.length;++l)a[l].lines.length&&Pa(a[l],"unhide");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&Pa(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function At(e,t){if(e.curOp)return t();bt(e);try{return t()}finally{kt(e)}}function Et(e,t){return function(){if(e.curOp)return t.apply(e,arguments);bt(e);try{return t.apply(e,arguments)}finally{kt(e)}}}function Ot(e){return function(){if(this.curOp)return e.apply(this,arguments);bt(this);try{return e.apply(this,arguments)}finally{kt(this)}}}function It(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);bt(t);try{return e.apply(this,arguments)}finally{kt(t)}}}function Pt(e,t,n){this.line=t,this.rest=xr(t),this.size=this.rest?ti(Ii(this.rest))-n+1:1,this.node=this.text=null,this.hidden=kr(e,t)}function Rt(e,t,n){for(var r,i=[],o=t;n>o;o=r){var a=new Pt(e.doc,Zr(e.doc,o),o);r=o+a.size,i.push(a)}return i}function Dt(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var i=e.display;if(r&&n<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Wo&&br(e.doc,t)<i.viewTo&&Wt(e);else if(n<=i.viewFrom)Wo&&wr(e.doc,n+r)>i.viewFrom?Wt(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)Wt(e);else if(t<=i.viewFrom){var o=_t(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):Wt(e)}else if(n>=i.viewTo){var o=_t(e,t,t,-1);o?(i.view=i.view.slice(0,o.index),i.viewTo=o.lineN):Wt(e)}else{var a=_t(e,t,t,-1),l=_t(e,n,n+r,1);a&&l?(i.view=i.view.slice(0,a.index).concat(Rt(e,a.lineN,l.lineN)).concat(i.view.slice(l.index)),i.viewTo+=r):Wt(e)}var s=i.externalMeasured;s&&(n<s.lineN?s.lineN+=r:t<s.lineN+s.size&&(i.externalMeasured=null))}function Ht(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var o=r.view[Bt(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==Pi(a,n)&&a.push(n)}}}function Wt(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Bt(e,t){if(t>=e.display.viewTo)return null;if(t-=e.display.viewFrom,0>t)return null;for(var n=e.display.view,r=0;r<n.length;r++)if(t-=n[r].size,0>t)return r}function _t(e,t,n,r){var i,o=Bt(e,t),a=e.display.view;if(!Wo||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var l=0,s=e.display.viewFrom;o>l;l++)s+=a[l].size;if(s!=t){if(r>0){if(o==a.length-1)return null;i=s+a[o].size-t,o++}else i=s-t;t+=i,n+=i}for(;br(e.doc,n)!=n;){if(o==(0>r?0:a.length-1))return null;n+=r*a[o-(0>r?1:0)].size,o+=r}return{index:o,lineN:n}}function Ft(e,t,n){var r=e.display,i=r.view;0==i.length||t>=r.viewTo||n<=r.viewFrom?(r.view=Rt(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=Rt(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(Bt(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(Rt(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,Bt(e,n)))),r.viewTo=n}function zt(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function jt(e){function t(){i.activeTouch&&(o=setTimeout(function(){i.activeTouch=null},1e3),a=i.activeTouch,a.end=+new Date)}function n(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function r(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}var i=e.display;Ea(i.scroller,"mousedown",Et(e,$t)),xo&&11>bo?Ea(i.scroller,"dblclick",Et(e,function(t){if(!Ti(e,t)){var n=Yt(e,t);if(n&&!Jt(e,t)&&!Gt(e.display,t)){Ma(t);var r=e.findWordAt(n);be(e.doc,r.anchor,r.head)}}})):Ea(i.scroller,"dblclick",function(t){Ti(e,t)||Ma(t)}),Do||Ea(i.scroller,"contextmenu",function(t){xn(e,t)});var o,a={end:0};Ea(i.scroller,"touchstart",function(t){if(!Ti(e,t)&&!n(t)){clearTimeout(o);var r=+new Date;i.activeTouch={start:r,moved:!1,prev:r-a.end<=300?a:null},1==t.touches.length&&(i.activeTouch.left=t.touches[0].pageX,i.activeTouch.top=t.touches[0].pageY)}}),Ea(i.scroller,"touchmove",function(){i.activeTouch&&(i.activeTouch.moved=!0)}),Ea(i.scroller,"touchend",function(n){var o=i.activeTouch;if(o&&!Gt(i,n)&&null!=o.left&&!o.moved&&new Date-o.start<300){var a,l=e.coordsChar(i.activeTouch,"page");a=!o.prev||r(o,o.prev)?new fe(l,l):!o.prev.prev||r(o,o.prev.prev)?e.findWordAt(l):new fe(Bo(l.line,0),me(e.doc,Bo(l.line+1,0))),e.setSelection(a.anchor,a.head),e.focus(),Ma(n)}t()}),Ea(i.scroller,"touchcancel",t),Ea(i.scroller,"scroll",function(){i.scroller.clientHeight&&(rn(e,i.scroller.scrollTop),on(e,i.scroller.scrollLeft,!0),Pa(e,"scroll",e))}),Ea(i.scroller,"mousewheel",function(t){an(e,t)}),Ea(i.scroller,"DOMMouseScroll",function(t){an(e,t)}),Ea(i.wrapper,"scroll",function(){i.wrapper.scrollTop=i.wrapper.scrollLeft=0}),i.dragFunctions={enter:function(t){Ti(e,t)||Aa(t)},over:function(t){Ti(e,t)||(tn(e,t),Aa(t))},start:function(t){en(e,t)},drop:Et(e,Qt),leave:function(t){Ti(e,t)||nn(e)}};var l=i.input.getField();Ea(l,"keyup",function(t){pn.call(e,t)}),Ea(l,"keydown",Et(e,hn)),Ea(l,"keypress",Et(e,mn)),Ea(l,"focus",Bi(vn,e)),Ea(l,"blur",Bi(yn,e))}function Ut(t,n,r){var i=r&&r!=e.Init;if(!n!=!i){var o=t.display.dragFunctions,a=n?Ea:Ia;a(t.display.scroller,"dragstart",o.start),a(t.display.scroller,"dragenter",o.enter),a(t.display.scroller,"dragover",o.over),a(t.display.scroller,"dragleave",o.leave),a(t.display.scroller,"drop",o.drop)}}function qt(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function Gt(e,t){for(var n=wi(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return!0}function Yt(e,t,n,r){var i=e.display;if(!n&&"true"==wi(t).getAttribute("cm-not-content"))return null;var o,a,l=i.lineSpace.getBoundingClientRect();try{o=t.clientX-l.left,a=t.clientY-l.top}catch(t){return null}var s,c=gt(e,o,a);if(r&&1==c.xRel&&(s=Zr(e.doc,c.line).text).length==c.ch){var u=Fa(s,s.length,e.options.tabSize)-s.length;c=Bo(c.line,Math.max(0,Math.round((o-Ge(e.display).left)/xt(e.display))-u))}return c}function $t(e){var t=this,n=t.display;if(!(Ti(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.shift=e.shiftKey,Gt(n,e))return void(wo||(n.scroller.draggable=!1,setTimeout(function(){n.scroller.draggable=!0},100)));if(!Jt(t,e)){var r=Yt(t,e);switch(window.focus(),ki(e)){case 1:t.state.selectingText?t.state.selectingText(e):r?Vt(t,e,r):wi(e)==n.scroller&&Ma(e);break;case 2:wo&&(t.state.lastMiddleDown=+new Date),r&&be(t.doc,r),setTimeout(function(){n.input.focus()},20),Ma(e);break;case 3:Do?xn(t,e):gn(t)}}}}function Vt(e,t,n){xo?setTimeout(Bi(X,e),0):e.curOp.focus=Gi();var r,i=+new Date;Uo&&Uo.time>i-400&&0==_o(Uo.pos,n)?r="triple":jo&&jo.time>i-400&&0==_o(jo.pos,n)?(r="double",Uo={time:i,pos:n}):(r="single",jo={time:i,pos:n});var o,a=e.doc.sel,l=Eo?t.metaKey:t.ctrlKey;e.options.dragDrop&&el&&!e.isReadOnly()&&"single"==r&&(o=a.contains(n))>-1&&(_o((o=a.ranges[o]).from(),n)<0||n.xRel>0)&&(_o(o.to(),n)>0||n.xRel<0)?Kt(e,t,n,l):Xt(e,t,n,r,l)}function Kt(e,t,n,r){var i=e.display,o=+new Date,a=Et(e,function(l){wo&&(i.scroller.draggable=!1),e.state.draggingText=!1,Ia(document,"mouseup",a),Ia(i.scroller,"drop",a),Math.abs(t.clientX-l.clientX)+Math.abs(t.clientY-l.clientY)<10&&(Ma(l),!r&&+new Date-200<o&&be(e.doc,n),wo||xo&&9==bo?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())});wo&&(i.scroller.draggable=!0),e.state.draggingText=a,i.scroller.dragDrop&&i.scroller.dragDrop(),Ea(document,"mouseup",a),Ea(i.scroller,"drop",a)}function Xt(e,t,n,r,i){function o(t){if(0!=_o(g,t))if(g=t,"rect"==r){for(var i=[],o=e.options.tabSize,a=Fa(Zr(c,n.line).text,n.ch,o),l=Fa(Zr(c,t.line).text,t.ch,o),s=Math.min(a,l),d=Math.max(a,l),p=Math.min(n.line,t.line),m=Math.min(e.lastLine(),Math.max(n.line,t.line));m>=p;p++){var v=Zr(c,p).text,y=za(v,s,o);s==d?i.push(new fe(Bo(p,y),Bo(p,y))):v.length>y&&i.push(new fe(Bo(p,y),Bo(p,za(v,d,o))))}i.length||i.push(new fe(n,n)),Te(c,he(h.ranges.slice(0,f).concat(i),f),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var x=u,b=x.anchor,w=t;if("single"!=r){if("double"==r)var k=e.findWordAt(t);else var k=new fe(Bo(t.line,0),me(c,Bo(t.line+1,0)));_o(k.anchor,b)>0?(w=k.head,b=K(x.from(),k.anchor)):(w=k.anchor,b=V(x.to(),k.head))}var i=h.ranges.slice(0);i[f]=new fe(me(c,b),w),Te(c,he(i,f),Ba)}}function a(t){var n=++y,i=Yt(e,t,!0,"rect"==r);if(i)if(0!=_o(i,g)){e.curOp.focus=Gi(),o(i);var l=b(s,c);(i.line>=l.to||i.line<l.from)&&setTimeout(Et(e,function(){y==n&&a(t)}),150)}else{var u=t.clientY<v.top?-20:t.clientY>v.bottom?20:0;u&&setTimeout(Et(e,function(){y==n&&(s.scroller.scrollTop+=u,a(t))}),50)}}function l(t){e.state.selectingText=!1,y=1/0,Ma(t),s.input.focus(),Ia(document,"mousemove",x),Ia(document,"mouseup",w),c.history.lastSelOrigin=null}var s=e.display,c=e.doc;Ma(t);var u,f,h=c.sel,d=h.ranges;if(i&&!t.shiftKey?(f=c.sel.contains(n),u=f>-1?d[f]:new fe(n,n)):(u=c.sel.primary(),f=c.sel.primIndex),Oo?t.shiftKey&&t.metaKey:t.altKey)r="rect",i||(u=new fe(n,n)),n=Yt(e,t,!0,!0),f=-1;else if("double"==r){var p=e.findWordAt(n);u=e.display.shift||c.extend?xe(c,u,p.anchor,p.head):p}else if("triple"==r){var m=new fe(Bo(n.line,0),me(c,Bo(n.line+1,0)));u=e.display.shift||c.extend?xe(c,u,m.anchor,m.head):m}else u=xe(c,u,n);i?-1==f?(f=d.length,Te(c,he(d.concat([u]),f),{scroll:!1,origin:"*mouse"})):d.length>1&&d[f].empty()&&"single"==r&&!t.shiftKey?(Te(c,he(d.slice(0,f).concat(d.slice(f+1)),0),{scroll:!1,origin:"*mouse"}),h=c.sel):ke(c,f,u,Ba):(f=0,Te(c,new ue([u],0),Ba),h=c.sel);var g=n,v=s.wrapper.getBoundingClientRect(),y=0,x=Et(e,function(e){ki(e)?a(e):l(e)}),w=Et(e,l);e.state.selectingText=w,Ea(document,"mousemove",x),Ea(document,"mouseup",w)}function Zt(e,t,n,r){try{var i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&Ma(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!Ni(e,n))return bi(t);o-=l.top-a.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var c=a.gutters.childNodes[s];if(c&&c.getBoundingClientRect().right>=i){var u=ni(e.doc,o),f=e.options.gutters[s];return Pa(e,n,e,u,f,t),bi(t)}}}function Jt(e,t){return Zt(e,t,"gutterClick",!0)}function Qt(e){var t=this;if(nn(t),!Ti(t,e)&&!Gt(t.display,e)){Ma(e),xo&&($o=+new Date);var n=Yt(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var i=r.length,o=Array(i),a=0,l=function(e,r){if(!t.options.allowDropFileTypes||-1!=Pi(t.options.allowDropFileTypes,e.type)){var l=new FileReader;l.onload=Et(t,function(){var e=l.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[r]=e,++a==i){n=me(t.doc,n);var s={from:n,to:n,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Tn(t.doc,s),Le(t.doc,de(n,Qo(s)))}}),l.readAsText(e)}},s=0;i>s;++s)l(r[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout(function(){t.display.input.focus()},20);try{var o=e.dataTransfer.getData("Text");if(o){if(t.state.draggingText&&!(Eo?e.altKey:e.ctrlKey))var c=t.listSelections();if(Me(t.doc,de(n,n)),c)for(var s=0;s<c.length;++s)In(t.doc,"",c[s].anchor,c[s].head,"drag");t.replaceSelection(o,"around","paste"),t.display.input.focus()}}catch(e){}}}}function en(e,t){if(xo&&(!e.state.draggingText||+new Date-$o<100))return void Aa(t);if(!Ti(e,t)&&!Gt(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Lo)){var n=ji("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Co&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),Co&&n.parentNode.removeChild(n)}}function tn(e,t){var n=Yt(e,t);if(n){var r=document.createDocumentFragment();He(e,n,r),e.display.dragCursor||(e.display.dragCursor=ji("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),qi(e.display.dragCursor,r)}}function nn(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function rn(e,t){Math.abs(e.doc.scrollTop-t)<2||(e.doc.scrollTop=t,go||A(e,{top:t}),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t),e.display.scrollbars.setScrollTop(t),go&&A(e),_e(e,100))}function on(e,t,n){(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)||(t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),e.doc.scrollLeft=t,w(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function an(e,t){var n=Xo(t),r=n.x,i=n.y,o=e.display,a=o.scroller,l=a.scrollWidth>a.clientWidth,s=a.scrollHeight>a.clientHeight;if(r&&l||i&&s){if(i&&Eo&&wo)e:for(var c=t.target,u=o.view;c!=a;c=c.parentNode)for(var f=0;f<u.length;f++)if(u[f].node==c){e.display.currentWheelTarget=c;break e}if(r&&!go&&!Co&&null!=Ko)return i&&s&&rn(e,Math.max(0,Math.min(a.scrollTop+i*Ko,a.scrollHeight-a.clientHeight))),on(e,Math.max(0,Math.min(a.scrollLeft+r*Ko,a.scrollWidth-a.clientWidth))),(!i||i&&s)&&Ma(t),void(o.wheelStartX=null);if(i&&null!=Ko){var h=i*Ko,d=e.doc.scrollTop,p=d+o.wrapper.clientHeight;0>h?d=Math.max(0,d+h-50):p=Math.min(e.doc.height,p+h+50),A(e,{top:d,bottom:p})}20>Vo&&(null==o.wheelStartX?(o.wheelStartX=a.scrollLeft,o.wheelStartY=a.scrollTop,o.wheelDX=r,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=a.scrollLeft-o.wheelStartX,t=a.scrollTop-o.wheelStartY,n=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,n&&(Ko=(Ko*Vo+n)/(Vo+1),++Vo)}},200)):(o.wheelDX+=r,o.wheelDY+=i))}}function ln(e,t,n){if("string"==typeof t&&(t=ua[t],!t))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=Ha}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}function sn(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=ha(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&ha(t,e.options.extraKeys,n,e)||ha(t,e.options.keyMap,n,e)}function cn(e,t,n,r){var i=e.state.keySeq;if(i){if(da(t))return"handled";Zo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),t=i+" "+t}var o=sn(e,t,r);return"multi"==o&&(e.state.keySeq=t),"handled"==o&&Ci(e,"keyHandled",e,t,n),"handled"!=o&&"multi"!=o||(Ma(n),Be(e)),i&&!o&&/\'$/.test(t)?(Ma(n),!0):!!o}function un(e,t){var n=pa(t,!0);return n?t.shiftKey&&!e.state.keySeq?cn(e,"Shift-"+n,t,function(t){return ln(e,t,!0)})||cn(e,n,t,function(t){return("string"==typeof t?/^go[A-Z]/.test(t):t.motion)?ln(e,t):void 0}):cn(e,n,t,function(t){return ln(e,t)}):!1}function fn(e,t,n){return cn(e,"'"+n+"'",t,function(t){return ln(e,t,!0)})}function hn(e){var t=this;if(t.curOp.focus=Gi(),!Ti(t,e)){xo&&11>bo&&27==e.keyCode&&(e.returnValue=!1);var n=e.keyCode;t.display.shift=16==n||e.shiftKey;var r=un(t,e);Co&&(Jo=r?n:null,!r&&88==n&&!rl&&(Eo?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=n||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||dn(t)}}function dn(e){function t(e){18!=e.keyCode&&e.altKey||(Za(n,"CodeMirror-crosshair"),Ia(document,"keyup",t),Ia(document,"mouseover",t))}var n=e.display.lineDiv;Ja(n,"CodeMirror-crosshair"),Ea(document,"keyup",t),Ea(document,"mouseover",t)}function pn(e){16==e.keyCode&&(this.doc.sel.shift=!1),Ti(this,e)}function mn(e){var t=this;if(!(Gt(t.display,e)||Ti(t,e)||e.ctrlKey&&!e.altKey||Eo&&e.metaKey)){var n=e.keyCode,r=e.charCode;if(Co&&n==Jo)return Jo=null,void Ma(e);if(!Co||e.which&&!(e.which<10)||!un(t,e)){var i=String.fromCharCode(null==r?n:r);fn(t,e,i)||t.display.input.onKeyPress(e)}}}function gn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,yn(e))},100)}function vn(e){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(Pa(e,"focus",e),e.state.focused=!0,Ja(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),wo&&setTimeout(function(){e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),Be(e))}function yn(e){e.state.delayingBlurEvent||(e.state.focused&&(Pa(e,"blur",e),e.state.focused=!1,Za(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function xn(e,t){Gt(e.display,t)||bn(e,t)||Ti(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function bn(e,t){return Ni(e,"gutterContextMenu")?Zt(e,t,"gutterContextMenu",!1):!1}function wn(e,t){if(_o(e,t.from)<0)return e;if(_o(e,t.to)<=0)return Qo(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Qo(t).ch-t.to.ch),Bo(n,r)}function kn(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new fe(wn(i.anchor,t),wn(i.head,t)))}return he(n,e.sel.primIndex)}function Sn(e,t,n){return e.line==t.line?Bo(n.line,e.ch-t.ch+n.ch):Bo(n.line+(e.line-t.line),e.ch)}function Cn(e,t,n){for(var r=[],i=Bo(e.first,0),o=i,a=0;a<t.length;a++){var l=t[a],s=Sn(l.from,i,o),c=Sn(Qo(l),i,o);if(i=l.to,o=c,"around"==n){var u=e.sel.ranges[a],f=_o(u.head,u.anchor)<0;r[a]=new fe(f?c:s,f?s:c)}else r[a]=new fe(s,s)}return new ue(r,e.sel.primIndex)}function Ln(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){this.canceled=!0}};return n&&(r.update=function(t,n,r,i){t&&(this.from=me(e,t)),n&&(this.to=me(e,n)),r&&(this.text=r),void 0!==i&&(this.origin=i)}),Pa(e,"beforeChange",e,r),e.cm&&Pa(e.cm,"beforeChange",e.cm,r),r.canceled?null:{from:r.from,to:r.to,text:r.text,origin:r.origin}}function Tn(e,t,n){if(e.cm){if(!e.cm.curOp)return Et(e.cm,Tn)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Ni(e,"beforeChange")||e.cm&&Ni(e.cm,"beforeChange"))||(t=Ln(e,t,!0))){var r=Ho&&!n&&sr(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)Mn(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text});else Mn(e,t)}}function Mn(e,t){if(1!=t.text.length||""!=t.text[0]||0!=_o(t.from,t.to)){var n=kn(e,t);ci(e,t,n,e.cm?e.cm.curOp.id:NaN),En(e,t,n,or(e,t));var r=[];Kr(e,function(e,n){n||-1!=Pi(r,e.history)||(xi(e.history,t),r.push(e.history)),En(e,t,null,or(e,t))})}}function Nn(e,t,n){if(!e.cm||!e.cm.state.suppressEdits){for(var r,i=e.history,o=e.sel,a="undo"==t?i.done:i.undone,l="undo"==t?i.undone:i.done,s=0;s<a.length&&(r=a[s],n?!r.ranges||r.equals(e.sel):r.ranges);s++);if(s!=a.length){for(i.lastOrigin=i.lastSelOrigin=null;r=a.pop(),r.ranges;){if(hi(r,l),n&&!r.equals(e.sel))return void Te(e,r,{clearRedo:!1});o=r}var c=[];hi(o,l),l.push({changes:c,generation:i.generation}),i.generation=r.generation||++i.maxGeneration;for(var u=Ni(e,"beforeChange")||e.cm&&Ni(e.cm,"beforeChange"),s=r.changes.length-1;s>=0;--s){var f=r.changes[s];if(f.origin=t,u&&!Ln(e,f,!1))return void(a.length=0);c.push(ai(e,f));var h=s?kn(e,f):Ii(a);En(e,f,h,lr(e,f)),!s&&e.cm&&e.cm.scrollIntoView({from:f.from,to:Qo(f)});var d=[];Kr(e,function(e,t){t||-1!=Pi(d,e.history)||(xi(e.history,f),d.push(e.history)),En(e,f,null,lr(e,f))})}}}}function An(e,t){if(0!=t&&(e.first+=t,e.sel=new ue(Ri(e.sel.ranges,function(e){return new fe(Bo(e.anchor.line+t,e.anchor.ch),Bo(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Dt(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)Ht(e.cm,r,"gutter")}}function En(e,t,n,r){if(e.cm&&!e.cm.curOp)return Et(e.cm,En)(e,t,n,r);if(t.to.line<e.first)return void An(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);An(e,i),t={from:Bo(e.first,0),to:Bo(t.to.line+i,t.to.ch),text:[Ii(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:Bo(o,Zr(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Jr(e,t.from,t.to),n||(n=kn(e,t)),e.cm?On(e.cm,t,r):Yr(e,t,r),Me(e,n,Wa)}}function On(e,t,n){var r=e.doc,i=e.display,a=t.from,l=t.to,s=!1,c=a.line;e.options.lineWrapping||(c=ti(yr(Zr(r,a.line))),r.iter(c,l.line+1,function(e){return e==i.maxLine?(s=!0,!0):void 0})),r.sel.contains(t.from,t.to)>-1&&Mi(e),Yr(r,t,n,o(e)),e.options.lineWrapping||(r.iter(c,a.line+t.text.length,function(e){var t=f(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),r.frontier=Math.min(r.frontier,a.line),_e(e,400);var u=t.text.length-(l.line-a.line)-1;t.full?Dt(e):a.line!=l.line||1!=t.text.length||Gr(e.doc,t)?Dt(e,a.line,l.line+1,u):Ht(e,a.line,"text");var h=Ni(e,"changes"),d=Ni(e,"change");if(d||h){var p={from:a,to:l,text:t.text,removed:t.removed,origin:t.origin};d&&Ci(e,"change",e,p),h&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(p)}e.display.selForContextMenu=null}function In(e,t,n,r,i){if(r||(r=n),_o(r,n)<0){var o=r;r=n,n=o}"string"==typeof t&&(t=e.splitLines(t)),Tn(e,{from:n,to:r,text:t,origin:i})}function Pn(e,t){if(!Ti(e,"scrollCursorIntoView")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null;if(t.top+r.top<0?i=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!Mo){var o=ji("div","",null,"position: absolute; top: "+(t.top-n.viewOffset-Ue(e.display))+"px; height: "+(t.bottom-t.top+Ye(e)+n.barHeight)+"px; left: "+t.left+"px; width: 2px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}function Rn(e,t,n,r){null==r&&(r=0);for(var i=0;5>i;i++){var o=!1,a=dt(e,t),l=n&&n!=t?dt(e,n):a,s=Hn(e,Math.min(a.left,l.left),Math.min(a.top,l.top)-r,Math.max(a.left,l.left),Math.max(a.bottom,l.bottom)+r),c=e.doc.scrollTop,u=e.doc.scrollLeft;if(null!=s.scrollTop&&(rn(e,s.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(o=!0)),null!=s.scrollLeft&&(on(e,s.scrollLeft),Math.abs(e.doc.scrollLeft-u)>1&&(o=!0)),!o)break}return a}function Dn(e,t,n,r,i){var o=Hn(e,t,n,r,i);null!=o.scrollTop&&rn(e,o.scrollTop),null!=o.scrollLeft&&on(e,o.scrollLeft)}function Hn(e,t,n,r,i){var o=e.display,a=yt(e.display);0>n&&(n=0);var l=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:o.scroller.scrollTop,s=Ve(e),c={};i-n>s&&(i=n+s);var u=e.doc.height+qe(o),f=a>n,h=i>u-a;if(l>n)c.scrollTop=f?0:n;else if(i>l+s){var d=Math.min(n,(h?u:i)-s);d!=l&&(c.scrollTop=d)}var p=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:o.scroller.scrollLeft,m=$e(e)-(e.options.fixedGutter?o.gutters.offsetWidth:0),g=r-t>m;return g&&(r=t+m),10>t?c.scrollLeft=0:p>t?c.scrollLeft=Math.max(0,t-(g?0:10)):r>m+p-3&&(c.scrollLeft=r+(g?0:10)-m),c}function Wn(e,t,n){null==t&&null==n||_n(e),null!=t&&(e.curOp.scrollLeft=(null==e.curOp.scrollLeft?e.doc.scrollLeft:e.curOp.scrollLeft)+t),null!=n&&(e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+n)}function Bn(e){_n(e);var t=e.getCursor(),n=t,r=t;e.options.lineWrapping||(n=t.ch?Bo(t.line,t.ch-1):t,r=Bo(t.line,t.ch+1)),e.curOp.scrollToPos={from:n,to:r,margin:e.options.cursorScrollMargin,isCursor:!0}}function _n(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=pt(e,t.from),r=pt(e,t.to),i=Hn(e,Math.min(n.left,r.left),Math.min(n.top,r.top)-t.margin,Math.max(n.right,r.right),Math.max(n.bottom,r.bottom)+t.margin);e.scrollTo(i.scrollLeft,i.scrollTop)}}function Fn(e,t,n,r){var i,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?i=je(e,t):n="prev");var a=e.options.tabSize,l=Zr(o,t),s=Fa(l.text,null,a);l.stateAfter&&(l.stateAfter=null);var c,u=l.text.match(/^\s*/)[0];if(r||/\S/.test(l.text)){if("smart"==n&&(c=o.mode.indent(i,l.text.slice(u.length),l.text),c==Ha||c>150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?Fa(Zr(o,t-1).text,null,a):0:"add"==n?c=s+e.options.indentUnit:"subtract"==n?c=s-e.options.indentUnit:"number"==typeof n&&(c=s+n),c=Math.max(0,c);var f="",h=0;if(e.options.indentWithTabs)for(var d=Math.floor(c/a);d;--d)h+=a,f+=" ";if(c>h&&(f+=Oi(c-h)),f!=u)return In(o,f,Bo(t,0),Bo(t,u.length),"+input"),l.stateAfter=null,!0;for(var d=0;d<o.sel.ranges.length;d++){var p=o.sel.ranges[d];if(p.head.line==t&&p.head.ch<u.length){var h=Bo(t,u.length);ke(o,d,new fe(h,h));break}}}function zn(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=Zr(e,pe(e,t)):i=ti(t),null==i?null:(r(o,i)&&e.cm&&Ht(e.cm,i,n),o)}function jn(e,t){for(var n=e.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=t(n[i]);r.length&&_o(o.from,Ii(r).to)<=0;){var a=r.pop();if(_o(a.from,o.from)<0){o.from=a.from;break}}r.push(o)}At(e,function(){for(var t=r.length-1;t>=0;t--)In(e.doc,"",r[t].from,r[t].to,"+delete");Bn(e)})}function Un(e,t,n,r,i){function o(){var t=l+n;return t<e.first||t>=e.first+e.size?!1:(l=t,u=Zr(e,t))}function a(e){var t=(i?fo:ho)(u,s,n,!0);if(null==t){if(e||!o())return!1;s=i?(0>n?io:ro)(u):0>n?u.text.length:0}else s=t;return!0}var l=t.line,s=t.ch,c=n,u=Zr(e,l);if("char"==r)a();else if("column"==r)a(!0);else if("word"==r||"group"==r)for(var f=null,h="group"==r,d=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(0>n)||a(!p);p=!1){var m=u.text.charAt(s)||"\n",g=_i(m,d)?"w":h&&"\n"==m?"n":!h||/\s/.test(m)?null:"p";if(!h||p||g||(g="s"),f&&f!=g){0>n&&(n=1,a());break}if(g&&(f=g),n>0&&!a(!p))break}var v=Ie(e,Bo(l,s),t,c,!0);return _o(t,v)||(v.hitSide=!0),v}function qn(e,t,n,r){var i,o=e.doc,a=t.left;if("page"==r){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);i=t.top+n*(l-(0>n?1.5:.5)*yt(e.display))}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;;){var s=gt(e,a,i);if(!s.outside)break;if(0>n?0>=i:i>=o.height){s.hitSide=!0;break}i+=5*n}return s}function Gn(t,n,r,i){e.defaults[t]=n,r&&(ta[t]=i?function(e,t,n){n!=na&&r(e,t,n)}:r)}function Yn(e){for(var t,n,r,i,o=e.split(/-(?!$)/),e=o[o.length-1],a=0;a<o.length-1;a++){var l=o[a];if(/^(cmd|meta|m)$/i.test(l))i=!0;else if(/^a(lt)?$/i.test(l))t=!0;else if(/^(c|ctrl|control)$/i.test(l))n=!0;else{ -if(!/^s(hift)$/i.test(l))throw new Error("Unrecognized modifier name: "+l);r=!0}}return t&&(e="Alt-"+e),n&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),r&&(e="Shift-"+e),e}function $n(e){return"string"==typeof e?fa[e]:e}function Vn(e,t,n,r,i){if(r&&r.shared)return Kn(e,t,n,r,i);if(e.cm&&!e.cm.curOp)return Et(e.cm,Vn)(e,t,n,r,i);var o=new va(e,i),a=_o(t,n);if(r&&Wi(r,o,!1),a>0||0==a&&o.clearWhenEmpty!==!1)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=ji("span",[o.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(vr(e,t.line,t,n,o)||t.line!=n.line&&vr(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Wo=!0}o.addToHistory&&ci(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var l,s=t.line,c=e.cm;if(e.iter(s,n.line+1,function(e){c&&o.collapsed&&!c.options.lineWrapping&&yr(e)==c.display.maxLine&&(l=!0),o.collapsed&&s!=t.line&&ei(e,0),nr(e,new Qn(o,s==t.line?t.ch:null,s==n.line?n.ch:null)),++s}),o.collapsed&&e.iter(t.line,n.line+1,function(t){kr(e,t)&&ei(t,0)}),o.clearOnEnter&&Ea(o,"beforeCursorEnter",function(){o.clear()}),o.readOnly&&(Ho=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++ga,o.atomic=!0),c){if(l&&(c.curOp.updateMaxLine=!0),o.collapsed)Dt(c,t.line,n.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var u=t.line;u<=n.line;u++)Ht(c,u,"text");o.atomic&&Ae(c.doc),Ci(c,"markerAdded",c,o)}return o}function Kn(e,t,n,r,i){r=Wi(r),r.shared=!1;var o=[Vn(e,t,n,r,i)],a=o[0],l=r.widgetNode;return Kr(e,function(e){l&&(r.widgetNode=l.cloneNode(!0)),o.push(Vn(e,me(e,t),me(e,n),r,i));for(var s=0;s<e.linked.length;++s)if(e.linked[s].isParent)return;a=Ii(o)}),new ya(o,a)}function Xn(e){return e.findMarks(Bo(e.first,0),e.clipPos(Bo(e.lastLine())),function(e){return e.parent})}function Zn(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.find(),o=e.clipPos(i.from),a=e.clipPos(i.to);if(_o(o,a)){var l=Vn(e,o,a,r.primary,r.primary.type);r.markers.push(l),l.parent=r}}}function Jn(e){for(var t=0;t<e.length;t++){var n=e[t],r=[n.primary.doc];Kr(n.primary.doc,function(e){r.push(e)});for(var i=0;i<n.markers.length;i++){var o=n.markers[i];-1==Pi(r,o.doc)&&(o.parent=null,n.markers.splice(i--,1))}}}function Qn(e,t,n){this.marker=e,this.from=t,this.to=n}function er(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function tr(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(e[r]);return n}function nr(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function rr(e,t,n){if(e)for(var r,i=0;i<e.length;++i){var o=e[i],a=o.marker,l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);if(l||o.from==t&&"bookmark"==a.type&&(!n||!o.marker.insertLeft)){var s=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);(r||(r=[])).push(new Qn(a,o.from,s?null:o.to))}}return r}function ir(e,t,n){if(e)for(var r,i=0;i<e.length;++i){var o=e[i],a=o.marker,l=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);if(l||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var s=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);(r||(r=[])).push(new Qn(a,s?null:o.from-t,null==o.to?null:o.to-t))}}return r}function or(e,t){if(t.full)return null;var n=ve(e,t.from.line)&&Zr(e,t.from.line).markedSpans,r=ve(e,t.to.line)&&Zr(e,t.to.line).markedSpans;if(!n&&!r)return null;var i=t.from.ch,o=t.to.ch,a=0==_o(t.from,t.to),l=rr(n,i,a),s=ir(r,o,a),c=1==t.text.length,u=Ii(t.text).length+(c?i:0);if(l)for(var f=0;f<l.length;++f){var h=l[f];if(null==h.to){var d=er(s,h.marker);d?c&&(h.to=null==d.to?null:d.to+u):h.to=i}}if(s)for(var f=0;f<s.length;++f){var h=s[f];if(null!=h.to&&(h.to+=u),null==h.from){var d=er(l,h.marker);d||(h.from=u,c&&(l||(l=[])).push(h))}else h.from+=u,c&&(l||(l=[])).push(h)}l&&(l=ar(l)),s&&s!=l&&(s=ar(s));var p=[l];if(!c){var m,g=t.text.length-2;if(g>0&&l)for(var f=0;f<l.length;++f)null==l[f].to&&(m||(m=[])).push(new Qn(l[f].marker,null,null));for(var f=0;g>f;++f)p.push(m);p.push(s)}return p}function ar(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&n.marker.clearWhenEmpty!==!1&&e.splice(t--,1)}return e.length?e:null}function lr(e,t){var n=mi(e,t),r=or(e,t);if(!n)return r;if(!r)return n;for(var i=0;i<n.length;++i){var o=n[i],a=r[i];if(o&&a)e:for(var l=0;l<a.length;++l){for(var s=a[l],c=0;c<o.length;++c)if(o[c].marker==s.marker)continue e;o.push(s)}else a&&(n[i]=a)}return n}function sr(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=Pi(r,n)||(r||(r=[])).push(n)}}),!r)return null;for(var i=[{from:t,to:n}],o=0;o<r.length;++o)for(var a=r[o],l=a.find(0),s=0;s<i.length;++s){var c=i[s];if(!(_o(c.to,l.from)<0||_o(c.from,l.to)>0)){var u=[s,1],f=_o(c.from,l.from),h=_o(c.to,l.to);(0>f||!a.inclusiveLeft&&!f)&&u.push({from:c.from,to:l.from}),(h>0||!a.inclusiveRight&&!h)&&u.push({from:l.to,to:c.to}),i.splice.apply(i,u),s+=u.length-1}}return i}function cr(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function ur(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function fr(e){return e.inclusiveLeft?-1:0}function hr(e){return e.inclusiveRight?1:0}function dr(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),i=t.find(),o=_o(r.from,i.from)||fr(e)-fr(t);if(o)return-o;var a=_o(r.to,i.to)||hr(e)-hr(t);return a?a:t.id-e.id}function pr(e,t){var n,r=Wo&&e.markedSpans;if(r)for(var i,o=0;o<r.length;++o)i=r[o],i.marker.collapsed&&null==(t?i.from:i.to)&&(!n||dr(n,i.marker)<0)&&(n=i.marker);return n}function mr(e){return pr(e,!0)}function gr(e){return pr(e,!1)}function vr(e,t,n,r,i){var o=Zr(e,t),a=Wo&&o.markedSpans;if(a)for(var l=0;l<a.length;++l){var s=a[l];if(s.marker.collapsed){var c=s.marker.find(0),u=_o(c.from,n)||fr(s.marker)-fr(i),f=_o(c.to,r)||hr(s.marker)-hr(i);if(!(u>=0&&0>=f||0>=u&&f>=0)&&(0>=u&&(s.marker.inclusiveRight&&i.inclusiveLeft?_o(c.to,n)>=0:_o(c.to,n)>0)||u>=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?_o(c.from,r)<=0:_o(c.from,r)<0)))return!0}}}function yr(e){for(var t;t=mr(e);)e=t.find(-1,!0).line;return e}function xr(e){for(var t,n;t=gr(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function br(e,t){var n=Zr(e,t),r=yr(n);return n==r?t:ti(r)}function wr(e,t){if(t>e.lastLine())return t;var n,r=Zr(e,t);if(!kr(e,r))return t;for(;n=gr(r);)r=n.find(1,!0).line;return ti(r)+1}function kr(e,t){var n=Wo&&t.markedSpans;if(n)for(var r,i=0;i<n.length;++i)if(r=n[i],r.marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&Sr(e,t,r))return!0}}function Sr(e,t,n){if(null==n.to){var r=n.marker.find(1,!0);return Sr(e,r.line,er(r.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var i,o=0;o<t.markedSpans.length;++o)if(i=t.markedSpans[o],i.marker.collapsed&&!i.marker.widgetNode&&i.from==n.to&&(null==i.to||i.to!=n.from)&&(i.marker.inclusiveLeft||n.marker.inclusiveRight)&&Sr(e,t,i))return!0}function Cr(e,t,n){ri(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Wn(e,null,n)}function Lr(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!Va(document.body,e.node)){var n="position: relative;";e.coverGutter&&(n+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(n+="width: "+t.display.wrapper.clientWidth+"px;"),qi(t.display.measure,ji("div",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function Tr(e,t,n,r){var i=new xa(e,n,r),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),zn(e,t,"widget",function(t){var n=t.widgets||(t.widgets=[]);if(null==i.insertAt?n.push(i):n.splice(Math.min(n.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!kr(e,t)){var r=ri(t)<e.scrollTop;ei(t,t.height+Lr(i)),r&&Wn(o,null,i.height),o.curOp.forceUpdate=!0}return!0}),i}function Mr(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),cr(e),ur(e,n);var i=r?r(e):1;i!=e.height&&ei(e,i)}function Nr(e){e.parent=null,cr(e)}function Ar(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?"bgClass":"textClass";null==t[r]?t[r]=n[2]:new RegExp("(?:^|s)"+n[2]+"(?:$|s)").test(t[r])||(t[r]+=" "+n[2])}return e}function Er(t,n){if(t.blankLine)return t.blankLine(n);if(t.innerMode){var r=e.innerMode(t,n);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Or(t,n,r,i){for(var o=0;10>o;o++){i&&(i[0]=e.innerMode(t,r).mode);var a=t.token(n,r);if(n.pos>n.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}function Ir(e,t,n,r){function i(e){return{start:f.start,end:f.pos,string:f.current(),type:o||null,state:e?sa(a.mode,u):u}}var o,a=e.doc,l=a.mode;t=me(a,t);var s,c=Zr(a,t.line),u=je(e,t.line,n),f=new ma(c.text,e.options.tabSize);for(r&&(s=[]);(r||f.pos<t.ch)&&!f.eol();)f.start=f.pos,o=Or(l,f,u),r&&s.push(i(!0));return r?s:i()}function Pr(e,t,n,r,i,o,a){var l=n.flattenSpans;null==l&&(l=e.options.flattenSpans);var s,c=0,u=null,f=new ma(t,e.options.tabSize),h=e.options.addModeClass&&[null];for(""==t&&Ar(Er(n,r),o);!f.eol();){if(f.pos>e.options.maxHighlightLength?(l=!1,a&&Hr(e,t,r,f.pos),f.pos=t.length,s=null):s=Ar(Or(n,f,r,h),o),h){var d=h[0].name;d&&(s="m-"+(s?d+" "+s:d))}if(!l||u!=s){for(;c<f.start;)c=Math.min(f.start,c+5e4),i(c,u);u=s}f.start=f.pos}for(;c<f.pos;){var p=Math.min(f.pos,c+5e4);i(p,u),c=p}}function Rr(e,t,n,r){var i=[e.state.modeGen],o={};Pr(e,t.text,e.doc.mode,n,function(e,t){i.push(e,t)},o,r);for(var a=0;a<e.state.overlays.length;++a){var l=e.state.overlays[a],s=1,c=0;Pr(e,t.text,l.mode,!0,function(e,t){for(var n=s;e>c;){var r=i[s];r>e&&i.splice(s,1,e,i[s+1],r),s+=2,c=Math.min(e,r)}if(t)if(l.opaque)i.splice(n,s-n,e,"cm-overlay "+t),s=n+2;else for(;s>n;n+=2){var o=i[n+1];i[n+1]=(o?o+" ":"")+"cm-overlay "+t}},o)}return{styles:i,classes:o.bgClass||o.textClass?o:null}}function Dr(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=je(e,ti(t)),i=Rr(e,t,t.text.length>e.options.maxHighlightLength?sa(e.doc.mode,r):r);t.stateAfter=r,t.styles=i.styles,i.classes?t.styleClasses=i.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.frontier&&e.doc.frontier++}return t.styles}function Hr(e,t,n,r){var i=e.doc.mode,o=new ma(t,e.options.tabSize);for(o.start=o.pos=r||0,""==t&&Er(i,n);!o.eol();)Or(i,o,n),o.start=o.pos}function Wr(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?ka:wa;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function Br(e,t){var n=ji("span",null,null,wo?"padding-right: .1px":null),r={pre:ji("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,splitSpaces:(xo||wo)&&e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o,a=i?t.rest[i-1]:t.line;r.pos=0,r.addToken=Fr,Ji(e.display.measure)&&(o=ii(a))&&(r.addToken=jr(r.addToken,o)),r.map=[];var l=t!=e.display.externalMeasured&&ti(a);qr(a,r,Dr(e,a,l)),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=$i(a.styleClasses.bgClass,r.bgClass||"")),a.styleClasses.textClass&&(r.textClass=$i(a.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Zi(e.display.measure))),0==i?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(wo){var s=r.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return Pa(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=$i(r.pre.className,r.textClass||"")),r}function _r(e){var t=ji("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Fr(e,t,n,r,i,o,a){if(t){var l=e.splitSpaces?t.replace(/ {3,}/g,zr):t,s=e.cm.state.specialChars,c=!1;if(s.test(t))for(var u=document.createDocumentFragment(),f=0;;){s.lastIndex=f;var h=s.exec(t),d=h?h.index-f:t.length-f;if(d){var p=document.createTextNode(l.slice(f,f+d));xo&&9>bo?u.appendChild(ji("span",[p])):u.appendChild(p),e.map.push(e.pos,e.pos+d,p),e.col+=d,e.pos+=d}if(!h)break;if(f+=d+1," "==h[0]){var m=e.cm.options.tabSize,g=m-e.col%m,p=u.appendChild(ji("span",Oi(g),"cm-tab"));p.setAttribute("role","presentation"),p.setAttribute("cm-text"," "),e.col+=g}else if("\r"==h[0]||"\n"==h[0]){var p=u.appendChild(ji("span","\r"==h[0]?"␍":"","cm-invalidchar"));p.setAttribute("cm-text",h[0]),e.col+=1}else{var p=e.cm.options.specialCharPlaceholder(h[0]);p.setAttribute("cm-text",h[0]),xo&&9>bo?u.appendChild(ji("span",[p])):u.appendChild(p),e.col+=1}e.map.push(e.pos,e.pos+1,p),e.pos++}else{e.col+=t.length;var u=document.createTextNode(l);e.map.push(e.pos,e.pos+t.length,u),xo&&9>bo&&(c=!0),e.pos+=t.length}if(n||r||i||c||a){var v=n||"";r&&(v+=r),i&&(v+=i);var y=ji("span",[u],v,a);return o&&(y.title=o),e.content.appendChild(y)}e.content.appendChild(u)}}function zr(e){for(var t=" ",n=0;n<e.length-2;++n)t+=n%2?" ":" ";return t+=" "}function jr(e,t){return function(n,r,i,o,a,l,s){i=i?i+" cm-force-border":"cm-force-border";for(var c=n.pos,u=c+r.length;;){for(var f=0;f<t.length;f++){var h=t[f];if(h.to>c&&h.from<=c)break}if(h.to>=u)return e(n,r,i,o,a,l,s);e(n,r.slice(0,h.to-c),i,o,null,l,s),o=null,r=r.slice(h.to-c),c=h.to}}}function Ur(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t}function qr(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var a,l,s,c,u,f,h,d=i.length,p=0,m=1,g="",v=0;;){if(v==p){s=c=u=f=l="",h=null,v=1/0;for(var y,x=[],b=0;b<r.length;++b){var w=r[b],k=w.marker;"bookmark"==k.type&&w.from==p&&k.widgetNode?x.push(k):w.from<=p&&(null==w.to||w.to>p||k.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&v>w.to&&(v=w.to,c=""),k.className&&(s+=" "+k.className),k.css&&(l=(l?l+";":"")+k.css),k.startStyle&&w.from==p&&(u+=" "+k.startStyle),k.endStyle&&w.to==v&&(y||(y=[])).push(k.endStyle,w.to),k.title&&!f&&(f=k.title),k.collapsed&&(!h||dr(h.marker,k)<0)&&(h=w)):w.from>p&&v>w.from&&(v=w.from)}if(y)for(var b=0;b<y.length;b+=2)y[b+1]==v&&(c+=" "+y[b]);if(!h||h.from==p)for(var b=0;b<x.length;++b)Ur(t,0,x[b]);if(h&&(h.from||0)==p){if(Ur(t,(null==h.to?d+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=d)break;for(var S=Math.min(d,v);;){if(g){var C=p+g.length;if(!h){var L=C>S?g.slice(0,S-p):g;t.addToken(t,L,a?a+s:s,u,p+L.length==v?c:"",f,l)}if(C>=S){g=g.slice(S-p),p=S;break}p=C,u=""}g=i.slice(o,o=n[m++]),a=Wr(n[m++],t.cm.options)}}else for(var m=1;m<n.length;m+=2)t.addToken(t,i.slice(o,o=n[m]),Wr(n[m+1],t.cm.options))}function Gr(e,t){return 0==t.from.ch&&0==t.to.ch&&""==Ii(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Yr(e,t,n,r){function i(e){return n?n[e]:null}function o(e,n,i){Mr(e,n,i,r),Ci(e,"change",e,t)}function a(e,t){for(var n=e,o=[];t>n;++n)o.push(new ba(c[n],i(n),r));return o}var l=t.from,s=t.to,c=t.text,u=Zr(e,l.line),f=Zr(e,s.line),h=Ii(c),d=i(c.length-1),p=s.line-l.line;if(t.full)e.insert(0,a(0,c.length)),e.remove(c.length,e.size-c.length);else if(Gr(e,t)){var m=a(0,c.length-1);o(f,f.text,d),p&&e.remove(l.line,p),m.length&&e.insert(l.line,m)}else if(u==f)if(1==c.length)o(u,u.text.slice(0,l.ch)+h+u.text.slice(s.ch),d);else{var m=a(1,c.length-1);m.push(new ba(h+u.text.slice(s.ch),d,r)),o(u,u.text.slice(0,l.ch)+c[0],i(0)),e.insert(l.line+1,m)}else if(1==c.length)o(u,u.text.slice(0,l.ch)+c[0]+f.text.slice(s.ch),i(0)),e.remove(l.line+1,p);else{o(u,u.text.slice(0,l.ch)+c[0],i(0)),o(f,h+f.text.slice(s.ch),d);var m=a(1,c.length-1);p>1&&e.remove(l.line+1,p-1),e.insert(l.line+1,m)}Ci(e,"change",e,t)}function $r(e){this.lines=e,this.parent=null;for(var t=0,n=0;t<e.length;++t)e[t].parent=this,n+=e[t].height;this.height=n}function Vr(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}function Kr(e,t,n){function r(e,i,o){if(e.linked)for(var a=0;a<e.linked.length;++a){var l=e.linked[a];if(l.doc!=i){var s=o&&l.sharedHist;n&&!s||(t(l.doc,s),r(l.doc,e,s))}}}r(e,null,!0)}function Xr(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,a(e),n(e),e.options.lineWrapping||h(e),e.options.mode=t.modeOption,Dt(e)}function Zr(e,t){if(t-=e.first,0>t||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(o>t){n=i;break}t-=o}return n.lines[t]}function Jr(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){var o=e.text;i==n.line&&(o=o.slice(0,n.ch)),i==t.line&&(o=o.slice(t.ch)),r.push(o),++i}),r}function Qr(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function ei(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function ti(e){if(null==e.parent)return null;for(var t=e.parent,n=Pi(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function ni(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(o>t){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var r=0;r<e.lines.length;++r){var a=e.lines[r],l=a.height;if(l>t)break;t-=l}return n+r}function ri(e){e=yr(e);for(var t=0,n=e.parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;n=o,o=n.parent)for(var r=0;r<o.children.length;++r){var a=o.children[r];if(a==n)break;t+=a.height}return t}function ii(e){var t=e.order;return null==t&&(t=e.order=ll(e.text)),t}function oi(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function ai(e,t){var n={from:$(t.from),to:Qo(t),text:Jr(e,t.from,t.to)};return di(e,n,t.from.line,t.to.line+1),Kr(e,function(e){di(e,n,t.from.line,t.to.line+1)},!0),n}function li(e){for(;e.length;){var t=Ii(e);if(!t.ranges)break;e.pop()}}function si(e,t){return t?(li(e.done),Ii(e.done)):e.done.length&&!Ii(e.done).ranges?Ii(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Ii(e.done)):void 0}function ci(e,t,n,r){var i=e.history;i.undone.length=0;var o,a=+new Date;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>a-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=si(i,i.lastOp==r))){var l=Ii(o.changes);0==_o(t.from,t.to)&&0==_o(t.from,l.to)?l.to=Qo(t):o.changes.push(ai(e,t))}else{var s=Ii(i.done);for(s&&s.ranges||hi(e.sel,i.done),o={changes:[ai(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,l||Pa(e,"historyAdded")}function ui(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function fi(e,t,n,r){var i=e.history,o=r&&r.origin;n==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||ui(e,o,Ii(i.done),t))?i.done[i.done.length-1]=t:hi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=n,r&&r.clearRedo!==!1&&li(i.undone)}function hi(e,t){var n=Ii(t);n&&n.ranges&&n.equals(e)||t.push(e)}function di(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=n.markedSpans),++o})}function pi(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function mi(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=0,i=[];r<t.text.length;++r)i.push(pi(n[r]));return i}function gi(e,t,n){for(var r=0,i=[];r<e.length;++r){var o=e[r];if(o.ranges)i.push(n?ue.prototype.deepCopy.call(o):o);else{var a=o.changes,l=[];i.push({changes:l});for(var s=0;s<a.length;++s){var c,u=a[s];if(l.push({from:u.from,to:u.to,text:u.text}),t)for(var f in u)(c=f.match(/^spans_(\d+)$/))&&Pi(t,Number(c[1]))>-1&&(Ii(l)[f]=u[f],delete u[f])}}}return i}function vi(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function yi(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],a=!0;if(o.ranges){o.copied||(o=e[i]=o.deepCopy(),o.copied=!0);for(var l=0;l<o.ranges.length;l++)vi(o.ranges[l].anchor,t,n,r),vi(o.ranges[l].head,t,n,r)}else{for(var l=0;l<o.changes.length;++l){var s=o.changes[l];if(n<s.from.line)s.from=Bo(s.from.line+r,s.from.ch),s.to=Bo(s.to.line+r,s.to.ch);else if(t<=s.to.line){a=!1;break}}a||(e.splice(0,i+1),i=0)}}}function xi(e,t){var n=t.from.line,r=t.to.line,i=t.text.length-(r-n)-1;yi(e.done,n,r,i),yi(e.undone,n,r,i)}function bi(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function wi(e){return e.target||e.srcElement}function ki(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Eo&&e.ctrlKey&&1==t&&(t=3),t}function Si(e,t,n){var r=e._handlers&&e._handlers[t];return n?r&&r.length>0?r.slice():Oa:r||Oa}function Ci(e,t){function n(e){return function(){e.apply(null,o)}}var r=Si(e,t,!1);if(r.length){var i,o=Array.prototype.slice.call(arguments,2);Go?i=Go.delayedCallbacks:Ra?i=Ra:(i=Ra=[],setTimeout(Li,0));for(var a=0;a<r.length;++a)i.push(n(r[a]))}}function Li(){var e=Ra;Ra=null;for(var t=0;t<e.length;++t)e[t]()}function Ti(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),Pa(e,n||t.type,e,t),bi(t)||t.codemirrorIgnore}function Mi(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==Pi(n,t[r])&&n.push(t[r])}function Ni(e,t){return Si(e,t).length>0}function Ai(e){e.prototype.on=function(e,t){Ea(this,e,t)},e.prototype.off=function(e,t){Ia(this,e,t)}}function Ei(){this.id=null}function Oi(e){for(;ja.length<=e;)ja.push(Ii(ja)+" ");return ja[e]}function Ii(e){return e[e.length-1]}function Pi(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}function Ri(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function Di(){}function Hi(e,t){var n;return Object.create?n=Object.create(e):(Di.prototype=e,n=new Di),t&&Wi(t,n),n}function Wi(e,t,n){t||(t={});for(var r in e)!e.hasOwnProperty(r)||n===!1&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function Bi(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function _i(e,t){return t?t.source.indexOf("\\w")>-1&&Ya(e)?!0:t.test(e):Ya(e)}function Fi(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function zi(e){return e.charCodeAt(0)>=768&&$a.test(e)}function ji(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function Ui(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function qi(e,t){return Ui(e).appendChild(t)}function Gi(){for(var e=document.activeElement;e&&e.root&&e.root.activeElement;)e=e.root.activeElement;return e}function Yi(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function $i(e,t){for(var n=e.split(" "),r=0;r<n.length;r++)n[r]&&!Yi(n[r]).test(t)&&(t+=" "+n[r]);return t}function Vi(e){if(document.body.getElementsByClassName)for(var t=document.body.getElementsByClassName("CodeMirror"),n=0;n<t.length;n++){var r=t[n].CodeMirror;r&&e(r)}}function Ki(){Qa||(Xi(),Qa=!0)}function Xi(){var e;Ea(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,Vi(qt)},100))}),Ea(window,"blur",function(){Vi(yn)})}function Zi(e){if(null==Ka){var t=ji("span","");qi(e,ji("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Ka=t.offsetWidth<=1&&t.offsetHeight>2&&!(xo&&8>bo))}var n=Ka?ji("span",""):ji("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Ji(e){if(null!=Xa)return Xa;var t=qi(e,document.createTextNode("AخA")),n=qa(t,0,1).getBoundingClientRect();if(!n||n.left==n.right)return!1;var r=qa(t,1,2).getBoundingClientRect();return Xa=r.right-n.right<3}function Qi(e){if(null!=il)return il;var t=qi(e,ji("span","x")),n=t.getBoundingClientRect(),r=qa(t,0,1).getBoundingClientRect();return il=Math.abs(n.left-r.left)>1}function eo(e,t,n,r){if(!e)return r(t,n,"ltr");for(var i=!1,o=0;o<e.length;++o){var a=e[o];(a.from<n&&a.to>t||t==n&&a.to==t)&&(r(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr"),i=!0)}i||r(t,n,"ltr")}function to(e){return e.level%2?e.to:e.from}function no(e){return e.level%2?e.from:e.to}function ro(e){var t=ii(e);return t?to(t[0]):0}function io(e){var t=ii(e);return t?no(Ii(t)):e.text.length}function oo(e,t){var n=Zr(e.doc,t),r=yr(n);r!=n&&(t=ti(r));var i=ii(r),o=i?i[0].level%2?io(r):ro(r):0;return Bo(t,o)}function ao(e,t){for(var n,r=Zr(e.doc,t);n=gr(r);)r=n.find(1,!0).line,t=null;var i=ii(r),o=i?i[0].level%2?ro(r):io(r):r.text.length;return Bo(null==t?ti(r):t,o)}function lo(e,t){var n=oo(e,t.line),r=Zr(e.doc,n.line),i=ii(r);if(!i||0==i[0].level){var o=Math.max(0,r.text.search(/\S/)),a=t.line==n.line&&t.ch<=o&&t.ch;return Bo(n.line,a?0:o)}return n}function so(e,t,n){var r=e[0].level;return t==r?!0:n==r?!1:n>t}function co(e,t){al=null;for(var n,r=0;r<e.length;++r){var i=e[r];if(i.from<t&&i.to>t)return r;if(i.from==t||i.to==t){if(null!=n)return so(e,i.level,e[n].level)?(i.from!=i.to&&(al=n),r):(i.from!=i.to&&(al=r),n);n=r}}return n}function uo(e,t,n,r){if(!r)return t+n;do t+=n;while(t>0&&zi(e.text.charAt(t)));return t}function fo(e,t,n,r){var i=ii(e);if(!i)return ho(e,t,n,r);for(var o=co(i,t),a=i[o],l=uo(e,t,a.level%2?-n:n,r);;){if(l>a.from&&l<a.to)return l;if(l==a.from||l==a.to)return co(i,l)==o?l:(a=i[o+=n],n>0==a.level%2?a.to:a.from);if(a=i[o+=n],!a)return null;l=n>0==a.level%2?uo(e,a.to,-1,r):uo(e,a.from,1,r)}}function ho(e,t,n,r){var i=t+n;if(r)for(;i>0&&zi(e.text.charAt(i));)i+=n;return 0>i||i>e.text.length?null:i}var po=navigator.userAgent,mo=navigator.platform,go=/gecko\/\d/i.test(po),vo=/MSIE \d/.test(po),yo=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(po),xo=vo||yo,bo=xo&&(vo?document.documentMode||6:yo[1]),wo=/WebKit\//.test(po),ko=wo&&/Qt\/\d+\.\d+/.test(po),So=/Chrome\//.test(po),Co=/Opera\//.test(po),Lo=/Apple Computer/.test(navigator.vendor),To=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(po),Mo=/PhantomJS/.test(po),No=/AppleWebKit/.test(po)&&/Mobile\/\w+/.test(po),Ao=No||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(po),Eo=No||/Mac/.test(mo),Oo=/\bCrOS\b/.test(po),Io=/win/i.test(mo),Po=Co&&po.match(/Version\/(\d*\.\d*)/);Po&&(Po=Number(Po[1])),Po&&Po>=15&&(Co=!1,wo=!0);var Ro=Eo&&(ko||Co&&(null==Po||12.11>Po)),Do=go||xo&&bo>=9,Ho=!1,Wo=!1;m.prototype=Wi({update:function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=e.scrollWidth-e.clientWidth+o+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},setScrollLeft:function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz)},setScrollTop:function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert)},zeroWidthHack:function(){var e=Eo&&!To?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new Ei,this.disableVert=new Ei},enableZeroWidthBar:function(e,t){function n(){var r=e.getBoundingClientRect(),i=document.elementFromPoint(r.left+1,r.bottom-1);i!=e?e.style.pointerEvents="none":t.set(1e3,n)}e.style.pointerEvents="auto",t.set(1e3,n)},clear:function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)}},m.prototype),g.prototype=Wi({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},g.prototype),e.scrollbarModel={"native":m,"null":g},L.prototype.signal=function(e,t){Ni(e,t)&&this.events.push(arguments)},L.prototype.finish=function(){for(var e=0;e<this.events.length;e++)Pa.apply(null,this.events[e])};var Bo=e.Pos=function(e,t){return this instanceof Bo?(this.line=e,void(this.ch=t)):new Bo(e,t)},_o=e.cmpPos=function(e,t){return e.line-t.line||e.ch-t.ch},Fo=null;ne.prototype=Wi({init:function(e){function t(e){if(!Ti(r,e)){if(r.somethingSelected())Fo={lineWise:!1,text:r.getSelections()},n.inaccurateSelection&&(n.prevInput="",n.inaccurateSelection=!1,o.value=Fo.text.join("\n"),Ua(o));else{if(!r.options.lineWiseCopyCut)return;var t=ee(r);Fo={lineWise:!0,text:t.text},"cut"==e.type?r.setSelections(t.ranges,null,Wa):(n.prevInput="",o.value=t.text.join("\n"),Ua(o))}"cut"==e.type&&(r.state.cutIncoming=!0)}}var n=this,r=this.cm,i=this.wrapper=re(),o=this.textarea=i.firstChild;e.wrapper.insertBefore(i,e.wrapper.firstChild),No&&(o.style.width="0px"),Ea(o,"input",function(){xo&&bo>=9&&n.hasSelection&&(n.hasSelection=null),n.poll()}),Ea(o,"paste",function(e){Ti(r,e)||J(e,r)||(r.state.pasteIncoming=!0,n.fastPoll())}),Ea(o,"cut",t),Ea(o,"copy",t),Ea(e.scroller,"paste",function(t){Gt(e,t)||Ti(r,t)||(r.state.pasteIncoming=!0,n.focus())}),Ea(e.lineSpace,"selectstart",function(t){Gt(e,t)||Ma(t)}),Ea(o,"compositionstart",function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}}),Ea(o,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},prepareSelection:function(){var e=this.cm,t=e.display,n=e.doc,r=De(e);if(e.options.moveInputWithCursor){var i=dt(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return r},showSelection:function(e){var t=this.cm,n=t.display;qi(n.cursorDiv,e.cursors),qi(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},reset:function(e){if(!this.contextMenuPending){var t,n,r=this.cm,i=r.doc;if(r.somethingSelected()){this.prevInput="";var o=i.sel.primary();t=rl&&(o.to().line-o.from().line>100||(n=r.getSelection()).length>1e3);var a=t?"-":n||r.getSelection();this.textarea.value=a,r.state.focused&&Ua(this.textarea),xo&&bo>=9&&(this.hasSelection=a)}else e||(this.prevInput=this.textarea.value="",xo&&bo>=9&&(this.hasSelection=null));this.inaccurateSelection=t}},getField:function(){return this.textarea},supportsTouch:function(){return!1},focus:function(){if("nocursor"!=this.cm.options.readOnly&&(!Ao||Gi()!=this.textarea))try{this.textarea.focus()}catch(e){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0; -},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var e=this;e.pollingFast||e.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},fastPoll:function(){function e(){var r=n.poll();r||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))}var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,e)},poll:function(){var e=this.cm,t=this.textarea,n=this.prevInput;if(this.contextMenuPending||!e.state.focused||nl(t)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=t.value;if(r==n&&!e.somethingSelected())return!1;if(xo&&bo>=9&&this.hasSelection===r||Eo&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var i=r.charCodeAt(0);if(8203!=i||n||(n=""),8666==i)return this.reset(),this.cm.execCommand("undo")}for(var o=0,a=Math.min(n.length,r.length);a>o&&n.charCodeAt(o)==r.charCodeAt(o);)++o;var l=this;return At(e,function(){Z(e,r.slice(o),n.length-o,null,l.composing?"*compose":null),r.length>1e3||r.indexOf("\n")>-1?t.value=l.prevInput="":l.prevInput=r,l.composing&&(l.composing.range.clear(),l.composing.range=e.markText(l.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){xo&&bo>=9&&(this.hasSelection=null),this.fastPoll()},onContextMenu:function(e){function t(){if(null!=a.selectionStart){var e=i.somethingSelected(),t=""+(e?a.value:"");a.value="⇚",a.value=t,r.prevInput=e?"":"",a.selectionStart=1,a.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function n(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=f,a.style.cssText=u,xo&&9>bo&&o.scrollbars.setScrollTop(o.scroller.scrollTop=s),null!=a.selectionStart){(!xo||xo&&9>bo)&&t();var e=0,n=function(){o.selForContextMenu==i.doc.sel&&0==a.selectionStart&&a.selectionEnd>0&&""==r.prevInput?Et(i,ua.selectAll)(i):e++<10?o.detectingSelectAll=setTimeout(n,500):o.input.reset()};o.detectingSelectAll=setTimeout(n,200)}}var r=this,i=r.cm,o=i.display,a=r.textarea,l=Yt(i,e),s=o.scroller.scrollTop;if(l&&!Co){var c=i.options.resetSelectionOnContextMenu;c&&-1==i.doc.sel.contains(l)&&Et(i,Te)(i.doc,de(l),Wa);var u=a.style.cssText,f=r.wrapper.style.cssText;r.wrapper.style.cssText="position: absolute";var h=r.wrapper.getBoundingClientRect();if(a.style.cssText="position: absolute; width: 30px; height: 30px; top: "+(e.clientY-h.top-5)+"px; left: "+(e.clientX-h.left-5)+"px; z-index: 1000; background: "+(xo?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",wo)var d=window.scrollY;if(o.input.focus(),wo&&window.scrollTo(null,d),o.input.reset(),i.somethingSelected()||(a.value=r.prevInput=" "),r.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),xo&&bo>=9&&t(),Do){Aa(e);var p=function(){Ia(window,"mouseup",p),setTimeout(n,20)};Ea(window,"mouseup",p)}else setTimeout(n,50)}},readOnlyChanged:function(e){e||this.reset()},setUneditable:Di,needsContentAttribute:!1},ne.prototype),ie.prototype=Wi({init:function(e){function t(e){if(!Ti(r,e)){if(r.somethingSelected())Fo={lineWise:!1,text:r.getSelections()},"cut"==e.type&&r.replaceSelection("",null,"cut");else{if(!r.options.lineWiseCopyCut)return;var t=ee(r);Fo={lineWise:!0,text:t.text},"cut"==e.type&&r.operation(function(){r.setSelections(t.ranges,0,Wa),r.replaceSelection("",null,"cut")})}if(e.clipboardData&&!No)e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/plain",Fo.text.join("\n"));else{var n=re(),i=n.firstChild;r.display.lineSpace.insertBefore(n,r.display.lineSpace.firstChild),i.value=Fo.text.join("\n");var o=document.activeElement;Ua(i),setTimeout(function(){r.display.lineSpace.removeChild(n),o.focus()},50)}}}var n=this,r=n.cm,i=n.div=e.lineDiv;te(i),Ea(i,"paste",function(e){Ti(r,e)||J(e,r)}),Ea(i,"compositionstart",function(e){var t=e.data;if(n.composing={sel:r.doc.sel,data:t,startData:t},t){var i=r.doc.sel.primary(),o=r.getLine(i.head.line),a=o.indexOf(t,Math.max(0,i.head.ch-t.length));a>-1&&a<=i.head.ch&&(n.composing.sel=de(Bo(i.head.line,a),Bo(i.head.line,a+t.length)))}}),Ea(i,"compositionupdate",function(e){n.composing.data=e.data}),Ea(i,"compositionend",function(e){var t=n.composing;t&&(e.data==t.startData||/\u200b/.test(e.data)||(t.data=e.data),setTimeout(function(){t.handled||n.applyComposition(t),n.composing==t&&(n.composing=null)},50))}),Ea(i,"touchstart",function(){n.forceCompositionEnd()}),Ea(i,"input",function(){n.composing||!r.isReadOnly()&&n.pollContent()||At(n.cm,function(){Dt(r)})}),Ea(i,"copy",t),Ea(i,"cut",t)},prepareSelection:function(){var e=De(this.cm,!1);return e.focus=this.cm.state.focused,e},showSelection:function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},showPrimarySelection:function(){var e=window.getSelection(),t=this.cm.doc.sel.primary(),n=le(this.cm,e.anchorNode,e.anchorOffset),r=le(this.cm,e.focusNode,e.focusOffset);if(!n||n.bad||!r||r.bad||0!=_o(K(n,r),t.from())||0!=_o(V(n,r),t.to())){var i=oe(this.cm,t.from()),o=oe(this.cm,t.to());if(i||o){var a=this.cm.display.view,l=e.rangeCount&&e.getRangeAt(0);if(i){if(!o){var s=a[a.length-1].measure,c=s.maps?s.maps[s.maps.length-1]:s.map;o={node:c[c.length-1],offset:c[c.length-2]-c[c.length-3]}}}else i={node:a[0].measure.map[2],offset:0};try{var u=qa(i.node,i.offset,o.offset,o.node)}catch(f){}u&&(!go&&this.cm.state.focused?(e.collapse(i.node,i.offset),u.collapsed||e.addRange(u)):(e.removeAllRanges(),e.addRange(u)),l&&null==e.anchorNode?e.addRange(l):go&&this.startGracePeriod()),this.rememberSelection()}}},startGracePeriod:function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){e.cm.curOp.selectionChanged=!0})},20)},showMultipleSelections:function(e){qi(this.cm.display.cursorDiv,e.cursors),qi(this.cm.display.selectionDiv,e.selection)},rememberSelection:function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},selectionInEditor:function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return Va(this.div,t)},focus:function(){"nocursor"!=this.cm.options.readOnly&&this.div.focus()},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return!0},receivedFocus:function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():At(this.cm,function(){t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},selectionChanged:function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;this.rememberSelection();var n=le(t,e.anchorNode,e.anchorOffset),r=le(t,e.focusNode,e.focusOffset);n&&r&&At(t,function(){Te(t.doc,de(n,r),Wa),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})}},pollContent:function(){var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),i=n.to();if(r.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o;if(r.line==t.viewFrom||0==(o=Bt(e,r.line)))var a=ti(t.view[0].line),l=t.view[0].node;else var a=ti(t.view[o].line),l=t.view[o-1].node.nextSibling;var s=Bt(e,i.line);if(s==t.view.length-1)var c=t.viewTo-1,u=t.lineDiv.lastChild;else var c=ti(t.view[s+1].line)-1,u=t.view[s+1].node.previousSibling;for(var f=e.doc.splitLines(ce(e,l,u,a,c)),h=Jr(e.doc,Bo(a,0),Bo(c,Zr(e.doc,c).text.length));f.length>1&&h.length>1;)if(Ii(f)==Ii(h))f.pop(),h.pop(),c--;else{if(f[0]!=h[0])break;f.shift(),h.shift(),a++}for(var d=0,p=0,m=f[0],g=h[0],v=Math.min(m.length,g.length);v>d&&m.charCodeAt(d)==g.charCodeAt(d);)++d;for(var y=Ii(f),x=Ii(h),b=Math.min(y.length-(1==f.length?d:0),x.length-(1==h.length?d:0));b>p&&y.charCodeAt(y.length-p-1)==x.charCodeAt(x.length-p-1);)++p;f[f.length-1]=y.slice(0,y.length-p),f[0]=f[0].slice(d);var w=Bo(a,d),k=Bo(c,h.length?Ii(h).length-p:0);return f.length>1||f[0]||_o(w,k)?(In(e.doc,f,w,k,"+input"),!0):void 0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&!this.composing.handled&&(this.applyComposition(this.composing),this.composing.handled=!0,this.div.blur(),this.div.focus())},applyComposition:function(e){this.cm.isReadOnly()?Et(this.cm,Dt)(this.cm):e.data&&e.data!=e.startData&&Et(this.cm,Z)(this.cm,e.data,0,e.sel)},setUneditable:function(e){e.contentEditable="false"},onKeyPress:function(e){e.preventDefault(),this.cm.isReadOnly()||Et(this.cm,Z)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0)},readOnlyChanged:function(e){this.div.contentEditable=String("nocursor"!=e)},onContextMenu:Di,resetPosition:Di,needsContentAttribute:!0},ie.prototype),e.inputStyles={textarea:ne,contenteditable:ie},ue.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(0!=_o(n.anchor,r.anchor)||0!=_o(n.head,r.head))return!1}return!0},deepCopy:function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new fe($(this.ranges[t].anchor),$(this.ranges[t].head));return new ue(e,this.primIndex)},somethingSelected:function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},contains:function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(_o(t,r.from())>=0&&_o(e,r.to())<=0)return n}return-1}},fe.prototype={from:function(){return K(this.anchor,this.head)},to:function(){return V(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var zo,jo,Uo,qo={left:0,right:0,top:0,bottom:0},Go=null,Yo=0,$o=0,Vo=0,Ko=null;xo?Ko=-.53:go?Ko=15:So?Ko=-.7:Lo&&(Ko=-1/3);var Xo=function(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}};e.wheelEventPixels=function(e){var t=Xo(e);return t.x*=Ko,t.y*=Ko,t};var Zo=new Ei,Jo=null,Qo=e.changeEnd=function(e){return e.text?Bo(e.from.line+e.text.length-1,Ii(e.text).length+(1==e.text.length?e.from.ch:0)):e.to};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var n=this.options,r=n[e];n[e]==t&&"mode"!=e||(n[e]=t,ta.hasOwnProperty(e)&&Et(this,ta[e])(this,t,r))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"]($n(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:Ot(function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error("Overlays may not be stateful.");this.state.overlays.push({mode:r,modeSpec:t,opaque:n&&n.opaque}),this.state.modeGen++,Dt(this)}),removeOverlay:Ot(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||"string"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void Dt(this)}}),indentLine:Ot(function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),ve(this.doc,e)&&Fn(this,e,t,n)}),indentSelection:Ot(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(Fn(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Bn(this));else{var o=i.from(),a=i.to(),l=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;n>s;++s)Fn(this,s,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&c[r].from().ch>0&&ke(this.doc,r,new fe(o,c[r].to()),Wa)}}}),getTokenAt:function(e,t){return Ir(this,e,t)},getLineTokens:function(e,t){return Ir(this,Bo(e),t,!0)},getTokenTypeAt:function(e){e=me(this.doc,e);var t,n=Dr(this,Zr(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=r+i>>1;if((a?n[2*a-1]:0)>=o)i=a;else{if(!(n[2*a+1]<o)){t=n[2*a+2];break}r=a+1}}var l=t?t.indexOf("cm-overlay "):-1;return 0>l?t:0==l?null:t.slice(0,l-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!la.hasOwnProperty(t))return n;var r=la[t],i=this.getModeAt(e);if("string"==typeof i[t])r[i[t]]&&n.push(r[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var a=r[i[t][o]];a&&n.push(a)}else i.helperType&&r[i.helperType]?n.push(r[i.helperType]):r[i.name]&&n.push(r[i.name]);for(var o=0;o<r._global.length;o++){var l=r._global[o];l.pred(i,this)&&-1==Pi(n,l.val)&&n.push(l.val)}return n},getStateAfter:function(e,t){var n=this.doc;return e=pe(n,null==e?n.first+n.size-1:e),je(this,e+1,t)},cursorCoords:function(e,t){var n,r=this.doc.sel.primary();return n=null==e?r.head:"object"==typeof e?me(this.doc,e):e?r.from():r.to(),dt(this,n,t||"page")},charCoords:function(e,t){return ht(this,me(this.doc,e),t||"page")},coordsChar:function(e,t){return e=ft(this,e,t||"page"),gt(this,e.left,e.top)},lineAtHeight:function(e,t){return e=ft(this,{top:e,left:0},t||"page").top,ni(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t){var n,r=!1;if("number"==typeof e){var i=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>i&&(e=i,r=!0),n=Zr(this.doc,e)}else n=e;return ut(this,n,{top:0,left:0},t||"page").top+(r?this.doc.height-ri(n):0)},defaultTextHeight:function(){return yt(this.display)},defaultCharWidth:function(){return xt(this.display)},setGutterMarker:Ot(function(e,t,n){return zn(this.doc,e,"gutter",function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&Fi(r)&&(e.gutterMarkers=null),!0})}),clearGutter:Ot(function(e){var t=this,n=t.doc,r=n.first;n.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&(n.gutterMarkers[e]=null,Ht(t,r,"gutter"),Fi(n.gutterMarkers)&&(n.gutterMarkers=null)),++r})}),lineInfo:function(e){if("number"==typeof e){if(!ve(this.doc,e))return null;var t=e;if(e=Zr(this.doc,e),!e)return null}else{var t=ti(e);if(null==t)return null}return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o=this.display;e=dt(this,me(this.doc,e));var a=e.bottom,l=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==r)a=e.top;else if("above"==r||"near"==r){var s=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>s)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=s&&(a=e.bottom),l+t.offsetWidth>c&&(l=c-t.offsetWidth)}t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(l=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?l=0:"middle"==i&&(l=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=l+"px"),n&&Dn(this,l,a,l+t.offsetWidth,a+t.offsetHeight)},triggerOnKeyDown:Ot(hn),triggerOnKeyPress:Ot(mn),triggerOnKeyUp:pn,execCommand:function(e){return ua.hasOwnProperty(e)?ua[e].call(null,this):void 0},triggerElectric:Ot(function(e){Q(this,e)}),findPosH:function(e,t,n,r){var i=1;0>t&&(i=-1,t=-t);for(var o=0,a=me(this.doc,e);t>o&&(a=Un(this.doc,a,i,n,r),!a.hitSide);++o);return a},moveH:Ot(function(e,t){var n=this;n.extendSelectionsBy(function(r){return n.display.shift||n.doc.extend||r.empty()?Un(n.doc,r.head,e,t,n.options.rtlMoveVisually):0>e?r.from():r.to()},_a)}),deleteH:Ot(function(e,t){var n=this.doc.sel,r=this.doc;n.somethingSelected()?r.replaceSelection("",null,"+delete"):jn(this,function(n){var i=Un(r,n.head,e,t,!1);return 0>e?{from:i,to:n.head}:{from:n.head,to:i}})}),findPosV:function(e,t,n,r){var i=1,o=r;0>t&&(i=-1,t=-t);for(var a=0,l=me(this.doc,e);t>a;++a){var s=dt(this,l,"div");if(null==o?o=s.left:s.left=o,l=qn(this,s,i,n),l.hitSide)break}return l},moveV:Ot(function(e,t){var n=this,r=this.doc,i=[],o=!n.display.shift&&!r.extend&&r.sel.somethingSelected();if(r.extendSelectionsBy(function(a){if(o)return 0>e?a.from():a.to();var l=dt(n,a.head,"div");null!=a.goalColumn&&(l.left=a.goalColumn),i.push(l.left);var s=qn(n,l,e,t);return"page"==t&&a==r.sel.primary()&&Wn(n,null,ht(n,s,"div").top-l.top),s},_a),i.length)for(var a=0;a<r.sel.ranges.length;a++)r.sel.ranges[a].goalColumn=i[a]}),findWordAt:function(e){var t=this.doc,n=Zr(t,e.line).text,r=e.ch,i=e.ch;if(n){var o=this.getHelper(e,"wordChars");(e.xRel<0||i==n.length)&&r?--r:++i;for(var a=n.charAt(r),l=_i(a,o)?function(e){return _i(e,o)}:/\s/.test(a)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!_i(e)};r>0&&l(n.charAt(r-1));)--r;for(;i<n.length&&l(n.charAt(i));)++i}return new fe(Bo(e.line,r),Bo(e.line,i))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?Ja(this.display.cursorDiv,"CodeMirror-overwrite"):Za(this.display.cursorDiv,"CodeMirror-overwrite"),Pa(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==Gi()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Ot(function(e,t){null==e&&null==t||_n(this),null!=e&&(this.curOp.scrollLeft=e),null!=t&&(this.curOp.scrollTop=t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Ye(this)-this.display.barHeight,width:e.scrollWidth-Ye(this)-this.display.barWidth,clientHeight:Ve(this),clientWidth:$e(this)}},scrollIntoView:Ot(function(e,t){if(null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:Bo(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line)_n(this),this.curOp.scrollToPos=e;else{var n=Hn(this,Math.min(e.from.left,e.to.left),Math.min(e.from.top,e.to.top)-e.margin,Math.max(e.from.right,e.to.right),Math.max(e.from.bottom,e.to.bottom)+e.margin);this.scrollTo(n.scrollLeft,n.scrollTop)}}),setSize:Ot(function(e,t){function n(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e}var r=this;null!=e&&(r.display.wrapper.style.width=n(e)),null!=t&&(r.display.wrapper.style.height=n(t)),r.options.lineWrapping&&at(this);var i=r.display.viewFrom;r.doc.iter(i,r.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Ht(r,i,"widget");break}++i}),r.curOp.forceUpdate=!0,Pa(r,"refresh",this)}),operation:function(e){return At(this,e)},refresh:Ot(function(){var e=this.display.cachedTextHeight;Dt(this),this.curOp.forceUpdate=!0,lt(this),this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop),u(this),(null==e||Math.abs(e-yt(this.display))>.5)&&a(this),Pa(this,"refresh",this)}),swapDoc:Ot(function(e){var t=this.doc;return t.cm=null,Xr(this,e),lt(this),this.display.input.reset(),this.scrollTo(e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Ci(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ai(e);var ea=e.defaults={},ta=e.optionHandlers={},na=e.Init={toString:function(){return"CodeMirror.Init"}};Gn("value","",function(e,t){e.setValue(t)},!0),Gn("mode",null,function(e,t){e.doc.modeOption=t,n(e)},!0),Gn("indentUnit",2,n,!0),Gn("indentWithTabs",!1),Gn("smartIndent",!0),Gn("tabSize",4,function(e){r(e),lt(e),Dt(e)},!0),Gn("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,n.push(Bo(r,o))}r++});for(var i=n.length-1;i>=0;i--)In(e.doc,t,n[i],Bo(n[i].line,n[i].ch+t.length))}}),Gn("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,n,r){t.state.specialChars=new RegExp(n.source+(n.test(" ")?"":"| "),"g"),r!=e.Init&&t.refresh()}),Gn("specialCharPlaceholder",_r,function(e){e.refresh()},!0),Gn("electricChars",!0),Gn("inputStyle",Ao?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),Gn("rtlMoveVisually",!Io),Gn("wholeLineUpdateBefore",!0),Gn("theme","default",function(e){l(e),s(e)},!0),Gn("keyMap","default",function(t,n,r){var i=$n(n),o=r!=e.Init&&$n(r);o&&o.detach&&o.detach(t,i),i.attach&&i.attach(t,o||null)}),Gn("extraKeys",null),Gn("lineWrapping",!1,i,!0),Gn("gutters",[],function(e){d(e.options),s(e)},!0),Gn("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?C(e.display)+"px":"0",e.refresh()},!0),Gn("coverGutterNextToScrollbar",!1,function(e){y(e)},!0),Gn("scrollbarStyle","native",function(e){v(e),y(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),Gn("lineNumbers",!1,function(e){d(e.options),s(e)},!0),Gn("firstLineNumber",1,s,!0),Gn("lineNumberFormatter",function(e){return e},s,!0),Gn("showCursorWhenSelecting",!1,Re,!0),Gn("resetSelectionOnContextMenu",!0),Gn("lineWiseCopyCut",!0),Gn("readOnly",!1,function(e,t){"nocursor"==t?(yn(e),e.display.input.blur(),e.display.disabled=!0):e.display.disabled=!1,e.display.input.readOnlyChanged(t)}),Gn("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),Gn("dragDrop",!0,Ut),Gn("allowDropFileTypes",null),Gn("cursorBlinkRate",530),Gn("cursorScrollMargin",0),Gn("cursorHeight",1,Re,!0),Gn("singleCursorHeightPerLine",!0,Re,!0),Gn("workTime",100),Gn("workDelay",100),Gn("flattenSpans",!0,r,!0),Gn("addModeClass",!1,r,!0),Gn("pollInterval",100),Gn("undoDepth",200,function(e,t){e.doc.history.undoDepth=t}),Gn("historyEventDelay",1250),Gn("viewportMargin",10,function(e){e.refresh()},!0),Gn("maxHighlightLength",1e4,r,!0),Gn("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),Gn("tabindex",null,function(e,t){e.display.input.getField().tabIndex=t||""}),Gn("autofocus",null);var ra=e.modes={},ia=e.mimeModes={};e.defineMode=function(t,n){e.defaults.mode||"null"==t||(e.defaults.mode=t),arguments.length>2&&(n.dependencies=Array.prototype.slice.call(arguments,2)),ra[t]=n},e.defineMIME=function(e,t){ia[e]=t},e.resolveMode=function(t){if("string"==typeof t&&ia.hasOwnProperty(t))t=ia[t];else if(t&&"string"==typeof t.name&&ia.hasOwnProperty(t.name)){var n=ia[t.name];"string"==typeof n&&(n={name:n}),t=Hi(n,t),t.name=n.name}else if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return e.resolveMode("application/xml");return"string"==typeof t?{name:t}:t||{name:"null"}},e.getMode=function(t,n){var n=e.resolveMode(n),r=ra[n.name];if(!r)return e.getMode(t,"text/plain");var i=r(t,n);if(oa.hasOwnProperty(n.name)){var o=oa[n.name];for(var a in o)o.hasOwnProperty(a)&&(i.hasOwnProperty(a)&&(i["_"+a]=i[a]),i[a]=o[a])}if(i.name=n.name,n.helperType&&(i.helperType=n.helperType),n.modeProps)for(var a in n.modeProps)i[a]=n.modeProps[a];return i},e.defineMode("null",function(){return{token:function(e){e.skipToEnd()}}}),e.defineMIME("text/plain","null");var oa=e.modeExtensions={};e.extendMode=function(e,t){var n=oa.hasOwnProperty(e)?oa[e]:oa[e]={};Wi(t,n)},e.defineExtension=function(t,n){e.prototype[t]=n},e.defineDocExtension=function(e,t){Ca.prototype[e]=t},e.defineOption=Gn;var aa=[];e.defineInitHook=function(e){aa.push(e)};var la=e.helpers={};e.registerHelper=function(t,n,r){la.hasOwnProperty(t)||(la[t]=e[t]={_global:[]}),la[t][n]=r},e.registerGlobalHelper=function(t,n,r,i){e.registerHelper(t,n,i),la[t]._global.push({pred:r,val:i})};var sa=e.copyState=function(e,t){if(t===!0)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n},ca=e.startState=function(e,t,n){return e.startState?e.startState(t,n):!0};e.innerMode=function(e,t){for(;e.innerMode;){var n=e.innerMode(t);if(!n||n.mode==e)break;t=n.state,e=n.mode}return n||{mode:e,state:t}};var ua=e.commands={selectAll:function(e){e.setSelection(Bo(e.firstLine(),0),Bo(e.lastLine()),Wa)},singleSelection:function(e){e.setSelection(e.getCursor("anchor"),e.getCursor("head"),Wa)},killLine:function(e){jn(e,function(t){if(t.empty()){var n=Zr(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:Bo(t.head.line+1,0)}:{from:t.head,to:Bo(t.head.line,n)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){jn(e,function(t){return{from:Bo(t.from().line,0),to:me(e.doc,Bo(t.to().line+1,0))}})},delLineLeft:function(e){jn(e,function(e){return{from:Bo(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){jn(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return{from:r,to:t.from()}})},delWrappedLineRight:function(e){jn(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div");return{from:t.from(),to:r}})},undo:function(e){e.undo()},redo:function(e){e.redo()},undoSelection:function(e){e.undoSelection()},redoSelection:function(e){e.redoSelection()},goDocStart:function(e){e.extendSelection(Bo(e.firstLine(),0))},goDocEnd:function(e){e.extendSelection(Bo(e.lastLine()))},goLineStart:function(e){e.extendSelectionsBy(function(t){return oo(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){e.extendSelectionsBy(function(t){return lo(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){e.extendSelectionsBy(function(t){return ao(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div")},_a)},goLineLeft:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:n},"div")},_a)},goLineLeftSmart:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return r.ch<e.getLine(r.line).search(/\S/)?lo(e,t.head):r},_a)},goLineUp:function(e){e.moveV(-1,"line")},goLineDown:function(e){e.moveV(1,"line")},goPageUp:function(e){e.moveV(-1,"page")},goPageDown:function(e){e.moveV(1,"page")},goCharLeft:function(e){e.moveH(-1,"char")},goCharRight:function(e){e.moveH(1,"char")},goColumnLeft:function(e){e.moveH(-1,"column")},goColumnRight:function(e){e.moveH(1,"column")},goWordLeft:function(e){e.moveH(-1,"word")},goGroupRight:function(e){e.moveH(1,"group")},goGroupLeft:function(e){e.moveH(-1,"group")},goWordRight:function(e){e.moveH(1,"word")},delCharBefore:function(e){e.deleteH(-1,"char")},delCharAfter:function(e){e.deleteH(1,"char")},delWordBefore:function(e){e.deleteH(-1,"word")},delWordAfter:function(e){e.deleteH(1,"word")},delGroupBefore:function(e){e.deleteH(-1,"group")},delGroupAfter:function(e){e.deleteH(1,"group")},indentAuto:function(e){e.indentSelection("smart")},indentMore:function(e){e.indentSelection("add")},indentLess:function(e){e.indentSelection("subtract")},insertTab:function(e){e.replaceSelection(" ")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),a=Fa(e.getLine(o.line),o.ch,r);t.push(Oi(r-a%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){At(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++){var i=t[r].head,o=Zr(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new Bo(i.line,i.ch-1)),i.ch>0)i=new Bo(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),Bo(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var a=Zr(e.doc,i.line-1).text;a&&e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),Bo(i.line-1,a.length-1),Bo(i.line,1),"+transpose")}n.push(new fe(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){At(e,function(){for(var t=e.listSelections().length,n=0;t>n;n++){var r=e.listSelections()[n];e.replaceRange(e.doc.lineSeparator(),r.anchor,r.head,"+input"),e.indentLine(r.from().line+1,null,!0)}Bn(e)})},openLine:function(e){e.replaceSelection("\n","start")},toggleOverwrite:function(e){e.toggleOverwrite()}},fa=e.keyMap={};fa.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},fa.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},fa.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},fa.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},fa["default"]=Eo?fa.macDefault:fa.pcDefault,e.normalizeKeyMap=function(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==r){delete e[n];continue}for(var i=Ri(n.split(" "),Yn),o=0;o<i.length;o++){var a,l;o==i.length-1?(l=i.join(" "),a=r):(l=i.slice(0,o+1).join(" "),a="...");var s=t[l];if(s){if(s!=a)throw new Error("Inconsistent bindings for "+l)}else t[l]=a}delete e[n]}for(var c in t)e[c]=t[c];return e};var ha=e.lookupKey=function(e,t,n,r){t=$n(t);var i=t.call?t.call(e,r):t[e];if(i===!1)return"nothing";if("..."===i)return"multi";if(null!=i&&n(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return ha(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var a=ha(e,t.fallthrough[o],n,r); -if(a)return a}}},da=e.isModifierKey=function(e){var t="string"==typeof e?e:ol[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t},pa=e.keyName=function(e,t){if(Co&&34==e.keyCode&&e["char"])return!1;var n=ol[e.keyCode],r=n;return null==r||e.altGraphKey?!1:(e.altKey&&"Alt"!=n&&(r="Alt-"+r),(Ro?e.metaKey:e.ctrlKey)&&"Ctrl"!=n&&(r="Ctrl-"+r),(Ro?e.ctrlKey:e.metaKey)&&"Cmd"!=n&&(r="Cmd-"+r),!t&&e.shiftKey&&"Shift"!=n&&(r="Shift-"+r),r)};e.fromTextArea=function(t,n){function r(){t.value=c.getValue()}if(n=n?Wi(n):{},n.value=t.value,!n.tabindex&&t.tabIndex&&(n.tabindex=t.tabIndex),!n.placeholder&&t.placeholder&&(n.placeholder=t.placeholder),null==n.autofocus){var i=Gi();n.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}if(t.form&&(Ea(t.form,"submit",r),!n.leaveSubmitMethodAlone)){var o=t.form,a=o.submit;try{var l=o.submit=function(){r(),o.submit=a,o.submit(),o.submit=l}}catch(s){}}n.finishInit=function(e){e.save=r,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,r(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(Ia(t.form,"submit",r),"function"==typeof t.form.submit&&(t.form.submit=a))}},t.style.display="none";var c=e(function(e){t.parentNode.insertBefore(e,t.nextSibling)},n);return c};var ma=e.StringStream=function(e,t){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};ma.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(e){var t=this.string.charAt(this.pos);if("string"==typeof e)var n=t==e;else var n=t&&(e.test?e.test(t):e(t));return n?(++this.pos,t):void 0},eatWhile:function(e){for(var t=this.pos;this.eat(e););return this.pos>t},eatSpace:function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);return t>-1?(this.pos=t,!0):void 0},backUp:function(e){this.pos-=e},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Fa(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?Fa(this.string,this.lineStart,this.tabSize):0)},indentation:function(){return Fa(this.string,null,this.tabSize)-(this.lineStart?Fa(this.string,this.lineStart,this.tabSize):0)},match:function(e,t,n){if("string"!=typeof e){var r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&t!==!1&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e},o=this.string.substr(this.pos,e.length);return i(o)==i(e)?(t!==!1&&(this.pos+=e.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}};var ga=0,va=e.TextMarker=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++ga};Ai(va),va.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&bt(e),Ni(this,"clear")){var n=this.find();n&&Ci(this,"clear",n.from,n.to)}for(var r=null,i=null,o=0;o<this.lines.length;++o){var a=this.lines[o],l=er(a.markedSpans,this);e&&!this.collapsed?Ht(e,ti(a),"text"):e&&(null!=l.to&&(i=ti(a)),null!=l.from&&(r=ti(a))),a.markedSpans=tr(a.markedSpans,l),null==l.from&&this.collapsed&&!kr(this.doc,a)&&e&&ei(a,yt(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var o=0;o<this.lines.length;++o){var s=yr(this.lines[o]),c=f(s);c>e.display.maxLineLength&&(e.display.maxLine=s,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&Dt(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Ae(e.doc)),e&&Ci(e,"markerCleared",e,this),t&&kt(e),this.parent&&this.parent.clear()}},va.prototype.find=function(e,t){null==e&&"bookmark"==this.type&&(e=1);for(var n,r,i=0;i<this.lines.length;++i){var o=this.lines[i],a=er(o.markedSpans,this);if(null!=a.from&&(n=Bo(t?o:ti(o),a.from),-1==e))return n;if(null!=a.to&&(r=Bo(t?o:ti(o),a.to),1==e))return r}return n&&{from:n,to:r}},va.prototype.changed=function(){var e=this.find(-1,!0),t=this,n=this.doc.cm;e&&n&&At(n,function(){var r=e.line,i=ti(e.line),o=Qe(n,i);if(o&&(ot(o),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!kr(t.doc,r)&&null!=t.height){var a=t.height;t.height=null;var l=Lr(t)-a;l&&ei(r,r.height+l)}})},va.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=Pi(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},va.prototype.detachLine=function(e){if(this.lines.splice(Pi(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}};var ga=0,ya=e.SharedTextMarker=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};Ai(ya),ya.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Ci(this,"clear")}},ya.prototype.find=function(e,t){return this.primary.find(e,t)};var xa=e.LineWidget=function(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t};Ai(xa),xa.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=ti(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=Lr(this);ei(n,Math.max(0,n.height-o)),e&&At(e,function(){Cr(e,n,-o),Ht(e,r,"widget")})}},xa.prototype.changed=function(){var e=this.height,t=this.doc.cm,n=this.line;this.height=null;var r=Lr(this)-e;r&&(ei(n,n.height+r),t&&At(t,function(){t.curOp.forceUpdate=!0,Cr(t,n,r)}))};var ba=e.Line=function(e,t,n){this.text=e,ur(this,t),this.height=n?n(this):1};Ai(ba),ba.prototype.lineNo=function(){return ti(this)};var wa={},ka={};$r.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,r=e+t;r>n;++n){var i=this.lines[n];this.height-=i.height,Nr(i),Ci(i,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;r>e;++e)if(n(this.lines[e]))return!0}},Vr.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var r=this.children[n],i=r.chunkSize();if(i>e){var o=Math.min(t,i-e),a=r.height;if(r.removeInner(e,o),this.height-=a-r.height,i==o&&(this.children.splice(n--,1),r.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof $r))){var l=[];this.collapse(l),this.children=[new $r(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(o>=e){if(i.insertInner(e,t,n),i.lines&&i.lines.length>50){for(var a=i.lines.length%25+25,l=a;l<i.lines.length;){var s=new $r(i.lines.slice(l,l+=25));i.height-=s.height,this.children.splice(++r,0,s),s.parent=this}i.lines=i.lines.slice(0,a),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new Vr(t);if(e.parent){e.size-=n.size,e.height-=n.height;var r=Pi(e.parent.children,e);e.parent.children.splice(r+1,0,n)}else{var i=new Vr(e.children);i.parent=e,e.children=[i,n],e=i}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(o>e){var a=Math.min(t,o-e);if(i.iterN(e,a,n))return!0;if(0==(t-=a))break;e=0}else e-=o}}};var Sa=0,Ca=e.Doc=function(e,t,n,r){if(!(this instanceof Ca))return new Ca(e,t,n,r);null==n&&(n=0),Vr.call(this,[new $r([new ba("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=n;var i=Bo(n,0);this.sel=de(i),this.history=new oi(null),this.id=++Sa,this.modeOption=t,this.lineSep=r,this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Yr(this,{from:i,to:i,text:e}),Te(this,de(i),Wa)};Ca.prototype=Hi(Vr.prototype,{constructor:Ca,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=Qr(this,this.first,this.first+this.size);return e===!1?t:t.join(e||this.lineSeparator())},setValue:It(function(e){var t=Bo(this.first,0),n=this.first+this.size-1;Tn(this,{from:t,to:Bo(n,Zr(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),Te(this,de(t))}),replaceRange:function(e,t,n,r){t=me(this,t),n=n?me(this,n):t,In(this,e,t,n,r)},getRange:function(e,t,n){var r=Jr(this,me(this,e),me(this,t));return n===!1?r:r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){return ve(this,e)?Zr(this,e):void 0},getLineNumber:function(e){return ti(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=Zr(this,e)),yr(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return me(this,e)},getCursor:function(e){var t,n=this.sel.primary();return t=null==e||"head"==e?n.head:"anchor"==e?n.anchor:"end"==e||"to"==e||e===!1?n.to():n.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:It(function(e,t,n){Se(this,me(this,"number"==typeof e?Bo(e,t||0):e),null,n)}),setSelection:It(function(e,t,n){Se(this,me(this,e),me(this,t||e),n)}),extendSelection:It(function(e,t,n){be(this,me(this,e),t&&me(this,t),n)}),extendSelections:It(function(e,t){we(this,ye(this,e),t)}),extendSelectionsBy:It(function(e,t){var n=Ri(this.sel.ranges,e);we(this,ye(this,n),t)}),setSelections:It(function(e,t,n){if(e.length){for(var r=0,i=[];r<e.length;r++)i[r]=new fe(me(this,e[r].anchor),me(this,e[r].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Te(this,he(i,t),n)}}),addSelection:It(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new fe(me(this,e),me(this,t||e))),Te(this,he(r,r.length-1),n)}),getSelection:function(e){for(var t,n=this.sel.ranges,r=0;r<n.length;r++){var i=Jr(this,n[r].from(),n[r].to());t=t?t.concat(i):i}return e===!1?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=Jr(this,n[r].from(),n[r].to());e!==!1&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||"+input")},replaceSelections:It(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var a=i.ranges[o];r[o]={from:a.from(),to:a.to(),text:this.splitLines(e[o]),origin:n}}for(var l=t&&"end"!=t&&Cn(this,r,t),o=r.length-1;o>=0;o--)Tn(this,r[o]);l?Le(this,l):this.cm&&Bn(this.cm)}),undo:It(function(){Nn(this,"undo")}),redo:It(function(){Nn(this,"redo")}),undoSelection:It(function(){Nn(this,"undo",!0)}),redoSelection:It(function(){Nn(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var r=0;r<e.undone.length;r++)e.undone[r].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){this.history=new oi(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:gi(this.history.done),undone:gi(this.history.undone)}},setHistory:function(e){var t=this.history=new oi(this.history.maxGeneration);t.done=gi(e.done.slice(0),null,!0),t.undone=gi(e.undone.slice(0),null,!0)},addLineClass:It(function(e,t,n){return zn(this,e,"gutter"==t?"gutter":"class",function(e){var r="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass";if(e[r]){if(Yi(n).test(e[r]))return!1;e[r]+=" "+n}else e[r]=n;return!0})}),removeLineClass:It(function(e,t,n){return zn(this,e,"gutter"==t?"gutter":"class",function(e){var r="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass",i=e[r];if(!i)return!1;if(null==n)e[r]=null;else{var o=i.match(Yi(n));if(!o)return!1;var a=o.index+o[0].length;e[r]=i.slice(0,o.index)+(o.index&&a!=i.length?" ":"")+i.slice(a)||null}return!0})}),addLineWidget:It(function(e,t,n){return Tr(this,e,t,n)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return Vn(this,me(this,e),me(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=me(this,e),Vn(this,e,e,n,"bookmark")},findMarksAt:function(e){e=me(this,e);var t=[],n=Zr(this,e.line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=me(this,e),t=me(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var a=o.markedSpans;if(a)for(var l=0;l<a.length;l++){var s=a[l];null!=s.to&&i==e.line&&e.ch>=s.to||null==s.from&&i!=e.line||null!=s.from&&i==t.line&&s.from>=t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;r<n.length;++r)null!=n[r].from&&e.push(n[r].marker)}),e},posFromIndex:function(e){var t,n=this.first,r=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+r;return o>e?(t=e,!0):(e-=o,void++n)}),me(this,Bo(n,t))},indexFromPos:function(e){e=me(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+n}),t},copy:function(e){var t=new Ca(Qr(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new Ca(Qr(this,t,n),e.mode||this.modeOption,t,this.lineSep);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],Zn(r,Xn(this)),r},unlinkDoc:function(t){if(t instanceof e&&(t=t.doc),this.linked)for(var n=0;n<this.linked.length;++n){var r=this.linked[n];if(r.doc==t){this.linked.splice(n,1),t.unlinkDoc(this),Jn(Xn(this));break}}if(t.history==this.history){var i=[t.id];Kr(t,function(e){i.push(e.id)},!0),t.history=new oi(null),t.history.done=gi(this.history.done,i),t.history.undone=gi(this.history.undone,i)}},iterLinkedDocs:function(e){Kr(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):tl(e)},lineSeparator:function(){return this.lineSep||"\n"}}),Ca.prototype.eachLine=Ca.prototype.iter;var La="iter insert remove copy getEditor constructor".split(" ");for(var Ta in Ca.prototype)Ca.prototype.hasOwnProperty(Ta)&&Pi(La,Ta)<0&&(e.prototype[Ta]=function(e){return function(){return e.apply(this.doc,arguments)}}(Ca.prototype[Ta]));Ai(Ca);var Ma=e.e_preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},Na=e.e_stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},Aa=e.e_stop=function(e){Ma(e),Na(e)},Ea=e.on=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent("on"+t,n);else{var r=e._handlers||(e._handlers={}),i=r[t]||(r[t]=[]);i.push(n)}},Oa=[],Ia=e.off=function(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent("on"+t,n);else for(var r=Si(e,t,!1),i=0;i<r.length;++i)if(r[i]==n){r.splice(i,1);break}},Pa=e.signal=function(e,t){var n=Si(e,t,!0);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)},Ra=null,Da=30,Ha=e.Pass={toString:function(){return"CodeMirror.Pass"}},Wa={scroll:!1},Ba={origin:"*mouse"},_a={origin:"+move"};Ei.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var Fa=e.countColumn=function(e,t,n,r,i){null==t&&(t=e.search(/[^\s\u00a0]/),-1==t&&(t=e.length));for(var o=r||0,a=i||0;;){var l=e.indexOf(" ",o);if(0>l||l>=t)return a+(t-o);a+=l-o,a+=n-a%n,o=l+1}},za=e.findColumn=function(e,t,n){for(var r=0,i=0;;){var o=e.indexOf(" ",r);-1==o&&(o=e.length);var a=o-r;if(o==e.length||i+a>=t)return r+Math.min(a,t-i);if(i+=o-r,i+=n-i%n,r=o+1,i>=t)return r}},ja=[""],Ua=function(e){e.select()};No?Ua=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:xo&&(Ua=function(e){try{e.select()}catch(t){}});var qa,Ga=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Ya=e.isWordChar=function(e){return/\w/.test(e)||e>""&&(e.toUpperCase()!=e.toLowerCase()||Ga.test(e))},$a=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;qa=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(i){return r}return r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",t),r};var Va=e.contains=function(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do if(11==t.nodeType&&(t=t.host),t==e)return!0;while(t=t.parentNode)};xo&&11>bo&&(Gi=function(){try{return document.activeElement}catch(e){return document.body}});var Ka,Xa,Za=e.rmClass=function(e,t){var n=e.className,r=Yi(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}},Ja=e.addClass=function(e,t){var n=e.className;Yi(t).test(n)||(e.className+=(n?" ":"")+t)},Qa=!1,el=function(){if(xo&&9>bo)return!1;var e=ji("div");return"draggable"in e||"dragDrop"in e}(),tl=e.splitLines=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;r>=t;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},nl=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(t){return!1}}:function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return t&&t.parentElement()==e?0!=t.compareEndPoints("StartToEnd",t):!1},rl=function(){var e=ji("div");return"oncopy"in e?!0:(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),il=null,ol=e.keyNames={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};!function(){for(var e=0;10>e;e++)ol[e+48]=ol[e+96]=String(e);for(var e=65;90>=e;e++)ol[e]=String.fromCharCode(e);for(var e=1;12>=e;e++)ol[e+111]=ol[e+63235]="F"+e}();var al,ll=function(){function e(e){return 247>=e?n.charAt(e):e>=1424&&1524>=e?"R":e>=1536&&1773>=e?r.charAt(e-1536):e>=1774&&2220>=e?"r":e>=8192&&8203>=e?"w":8204==e?"b":"L"}function t(e,t,n){this.level=e,this.from=t,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",r="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,a=/[LRr]/,l=/[Lb1n]/,s=/[1n]/,c="L";return function(n){if(!i.test(n))return!1;for(var r,u=n.length,f=[],h=0;u>h;++h)f.push(r=e(n.charCodeAt(h)));for(var h=0,d=c;u>h;++h){var r=f[h];"m"==r?f[h]=d:d=r}for(var h=0,p=c;u>h;++h){var r=f[h];"1"==r&&"r"==p?f[h]="n":a.test(r)&&(p=r,"r"==r&&(f[h]="R"))}for(var h=1,d=f[0];u-1>h;++h){var r=f[h];"+"==r&&"1"==d&&"1"==f[h+1]?f[h]="1":","!=r||d!=f[h+1]||"1"!=d&&"n"!=d||(f[h]=d),d=r}for(var h=0;u>h;++h){var r=f[h];if(","==r)f[h]="N";else if("%"==r){for(var m=h+1;u>m&&"%"==f[m];++m);for(var g=h&&"!"==f[h-1]||u>m&&"1"==f[m]?"1":"N",v=h;m>v;++v)f[v]=g;h=m-1}}for(var h=0,p=c;u>h;++h){var r=f[h];"L"==p&&"1"==r?f[h]="L":a.test(r)&&(p=r)}for(var h=0;u>h;++h)if(o.test(f[h])){for(var m=h+1;u>m&&o.test(f[m]);++m);for(var y="L"==(h?f[h-1]:c),x="L"==(u>m?f[m]:c),g=y||x?"L":"R",v=h;m>v;++v)f[v]=g;h=m-1}for(var b,w=[],h=0;u>h;)if(l.test(f[h])){var k=h;for(++h;u>h&&l.test(f[h]);++h);w.push(new t(0,k,h))}else{var S=h,C=w.length;for(++h;u>h&&"L"!=f[h];++h);for(var v=S;h>v;)if(s.test(f[v])){v>S&&w.splice(C,0,new t(1,S,v));var L=v;for(++v;h>v&&s.test(f[v]);++v);w.splice(C,0,new t(2,L,v)),S=v}else++v;h>S&&w.splice(C,0,new t(1,S,h))}return 1==w[0].level&&(b=n.match(/^\s+/))&&(w[0].from=b[0].length,w.unshift(new t(0,0,b[0].length))),1==Ii(w).level&&(b=n.match(/\s+$/))&&(Ii(w).to-=b[0].length,w.push(new t(0,u-b[0].length,u))),2==w[0].level&&w.unshift(new t(1,w[0].to,w[0].to)),w[0].level!=Ii(w).level&&w.push(new t(w[0].level,u,u)),w}}();return e.version="5.15.2",e})},{}],11:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror"),t("../markdown/markdown"),t("../../addon/mode/overlay")):"function"==typeof e&&e.amd?e(["../../lib/codemirror","../markdown/markdown","../../addon/mode/overlay"],i):i(CodeMirror)}(function(e){"use strict";var t=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",function(n,r){function i(e){return e.code=!1,null}var o=0,a={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var i=e.pos;e.eatWhile("`");var a=1+e.pos-i;return n.code?a===o&&(n.code=!1):(o=a,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,r.gitHubSpice!==!1)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:i},l={underscoresBreakWords:!1,taskLists:!0,fencedCodeBlocks:"```",strikethrough:!0};for(var s in r)l[s]=r[s];return l.name="markdown",e.overlayMode(e.getMode(n,l),a)},"markdown"),e.defineMIME("text/x-gfm","gfm")})},{"../../addon/mode/overlay":8,"../../lib/codemirror":10,"../markdown/markdown":12}],12:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror"),t("../xml/xml"),t("../meta")):"function"==typeof e&&e.amd?e(["../../lib/codemirror","../xml/xml","../meta"],i):i(CodeMirror)}(function(e){"use strict";e.defineMode("markdown",function(t,n){function r(n){if(e.findModeByName){var r=e.findModeByName(n);r&&(n=r.mime||r.mimes[0])}var i=e.getMode(t,n);return"null"==i.name?null:i}function i(e,t,n){return t.f=t.inline=n,n(e,t)}function o(e,t,n){return t.f=t.block=n,n(e,t)}function a(e){return!e||!/\S/.test(e.string)}function l(e){return e.linkTitle=!1,e.em=!1,e.strong=!1,e.strikethrough=!1,e.quote=0,e.indentedCode=!1,k&&e.f==c&&(e.f=p,e.block=s),e.trailingSpace=0,e.trailingSpaceNewLine=!1,e.prevLine=e.thisLine,e.thisLine=null,null}function s(t,o){var l=t.sol(),s=o.list!==!1,c=o.indentedCode;o.indentedCode=!1,s&&(o.indentationDiff>=0?(o.indentationDiff<4&&(o.indentation-=o.indentationDiff),o.list=null):o.indentation>0?o.list=null:o.list=!1);var f=null;if(o.indentationDiff>=4)return t.skipToEnd(),c||a(o.prevLine)?(o.indentation-=4,o.indentedCode=!0,S.code):null;if(t.eatSpace())return null;if((f=t.match(A))&&f[1].length<=6)return o.header=f[1].length,n.highlightFormatting&&(o.formatting="header"),o.f=o.inline,h(o);if(!(a(o.prevLine)||o.quote||s||c)&&(f=t.match(E)))return o.header="="==f[0].charAt(0)?1:2,n.highlightFormatting&&(o.formatting="header"),o.f=o.inline,h(o);if(t.eat(">"))return o.quote=l?1:o.quote+1,n.highlightFormatting&&(o.formatting="quote"),t.eatSpace(),h(o);if("["===t.peek())return i(t,o,y);if(t.match(L,!0))return o.hr=!0,S.hr;if((a(o.prevLine)||s)&&(t.match(T,!1)||t.match(M,!1))){var d=null;for(t.match(T,!0)?d="ul":(t.match(M,!0),d="ol"),o.indentation=t.column()+t.current().length,o.list=!0;o.listStack&&t.column()<o.listStack[o.listStack.length-1];)o.listStack.pop();return o.listStack.push(o.indentation),n.taskLists&&t.match(N,!1)&&(o.taskList=!0),o.f=o.inline,n.highlightFormatting&&(o.formatting=["list","list-"+d]),h(o)}return n.fencedCodeBlocks&&(f=t.match(I,!0))?(o.fencedChars=f[1],o.localMode=r(f[2]),o.localMode&&(o.localState=e.startState(o.localMode)),o.f=o.block=u,n.highlightFormatting&&(o.formatting="code-block"),o.code=-1,h(o)):i(t,o,o.inline)}function c(t,n){var r=w.token(t,n.htmlState);if(!k){var i=e.innerMode(w,n.htmlState);("xml"==i.mode.name&&null===i.state.tagStart&&!i.state.context&&i.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=p,n.block=s,n.htmlState=null)}return r}function u(e,t){return t.fencedChars&&e.match(t.fencedChars,!1)?(t.localMode=t.localState=null,t.f=t.block=f,null):t.localMode?t.localMode.token(e,t.localState):(e.skipToEnd(),S.code)}function f(e,t){e.match(t.fencedChars),t.block=s,t.f=p,t.fencedChars=null,n.highlightFormatting&&(t.formatting="code-block"),t.code=1;var r=h(t);return t.code=0,r}function h(e){var t=[];if(e.formatting){t.push(S.formatting),"string"==typeof e.formatting&&(e.formatting=[e.formatting]);for(var r=0;r<e.formatting.length;r++)t.push(S.formatting+"-"+e.formatting[r]),"header"===e.formatting[r]&&t.push(S.formatting+"-"+e.formatting[r]+"-"+e.header),"quote"===e.formatting[r]&&(!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(S.formatting+"-"+e.formatting[r]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(S.linkHref,"url"):(e.strong&&t.push(S.strong),e.em&&t.push(S.em),e.strikethrough&&t.push(S.strikethrough),e.linkText&&t.push(S.linkText),e.code&&t.push(S.code)),e.header&&t.push(S.header,S.header+"-"+e.header),e.quote&&(t.push(S.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(S.quote+"-"+e.quote):t.push(S.quote+"-"+n.maxBlockquoteDepth)),e.list!==!1){var i=(e.listStack.length-1)%3;i?1===i?t.push(S.list2):t.push(S.list3):t.push(S.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function d(e,t){return e.match(O,!0)?h(t):void 0}function p(t,r){var i=r.text(t,r);if("undefined"!=typeof i)return i;if(r.list)return r.list=null,h(r);if(r.taskList){var a="x"!==t.match(N,!0)[1];return a?r.taskOpen=!0:r.taskClosed=!0,n.highlightFormatting&&(r.formatting="task"),r.taskList=!1,h(r)}if(r.taskOpen=!1,r.taskClosed=!1,r.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(r.formatting="header"), -h(r);var l=t.sol(),s=t.next();if(r.linkTitle){r.linkTitle=!1;var u=s;"("===s&&(u=")"),u=(u+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var f="^\\s*(?:[^"+u+"\\\\]+|\\\\\\\\|\\\\.)"+u;if(t.match(new RegExp(f),!0))return S.linkHref}if("`"===s){var d=r.formatting;n.highlightFormatting&&(r.formatting="code"),t.eatWhile("`");var p=t.current().length;if(0==r.code)return r.code=p,h(r);if(p==r.code){var v=h(r);return r.code=0,v}return r.formatting=d,h(r)}if(r.code)return h(r);if("\\"===s&&(t.next(),n.highlightFormatting)){var y=h(r),x=S.formatting+"-escape";return y?y+" "+x:x}if("!"===s&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return t.match(/\[[^\]]*\]/),r.inline=r.f=g,S.image;if("["===s&&t.match(/[^\]]*\](\(.*\)| ?\[.*?\])/,!1))return r.linkText=!0,n.highlightFormatting&&(r.formatting="link"),h(r);if("]"===s&&r.linkText&&t.match(/\(.*?\)| ?\[.*?\]/,!1)){n.highlightFormatting&&(r.formatting="link");var y=h(r);return r.linkText=!1,r.inline=r.f=g,y}if("<"===s&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){r.f=r.inline=m,n.highlightFormatting&&(r.formatting="link");var y=h(r);return y?y+=" ":y="",y+S.linkInline}if("<"===s&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){r.f=r.inline=m,n.highlightFormatting&&(r.formatting="link");var y=h(r);return y?y+=" ":y="",y+S.linkEmail}if("<"===s&&t.match(/^(!--|\w)/,!1)){var b=t.string.indexOf(">",t.pos);if(-1!=b){var k=t.string.substring(t.start,b);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(k)&&(r.md_inside=!0)}return t.backUp(1),r.htmlState=e.startState(w),o(t,r,c)}if("<"===s&&t.match(/^\/\w*?>/))return r.md_inside=!1,"tag";var C=!1;if(!n.underscoresBreakWords&&"_"===s&&"_"!==t.peek()&&t.match(/(\w)/,!1)){var L=t.pos-2;if(L>=0){var T=t.string.charAt(L);"_"!==T&&T.match(/(\w)/,!1)&&(C=!0)}}if("*"===s||"_"===s&&!C)if(l&&" "===t.peek());else{if(r.strong===s&&t.eat(s)){n.highlightFormatting&&(r.formatting="strong");var v=h(r);return r.strong=!1,v}if(!r.strong&&t.eat(s))return r.strong=s,n.highlightFormatting&&(r.formatting="strong"),h(r);if(r.em===s){n.highlightFormatting&&(r.formatting="em");var v=h(r);return r.em=!1,v}if(!r.em)return r.em=s,n.highlightFormatting&&(r.formatting="em"),h(r)}else if(" "===s&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return h(r);t.backUp(1)}if(n.strikethrough)if("~"===s&&t.eatWhile(s)){if(r.strikethrough){n.highlightFormatting&&(r.formatting="strikethrough");var v=h(r);return r.strikethrough=!1,v}if(t.match(/^[^\s]/,!1))return r.strikethrough=!0,n.highlightFormatting&&(r.formatting="strikethrough"),h(r)}else if(" "===s&&t.match(/^~~/,!0)){if(" "===t.peek())return h(r);t.backUp(2)}return" "===s&&(t.match(/ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),h(r)}function m(e,t){var r=e.next();if(">"===r){t.f=t.inline=p,n.highlightFormatting&&(t.formatting="link");var i=h(t);return i?i+=" ":i="",i+S.linkInline}return e.match(/^[^>]+/,!0),S.linkInline}function g(e,t){if(e.eatSpace())return null;var r=e.next();return"("===r||"["===r?(t.f=t.inline=v("("===r?")":"]",0),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,h(t)):"error"}function v(e){return function(t,r){var i=t.next();if(i===e){r.f=r.inline=p,n.highlightFormatting&&(r.formatting="link-string");var o=h(r);return r.linkHref=!1,o}return t.match(P[e]),r.linkHref=!0,h(r)}}function y(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=x,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,h(t)):i(e,t,p)}function x(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=b,n.highlightFormatting&&(t.formatting="link");var r=h(t);return t.linkText=!1,r}return e.match(/^([^\]\\]|\\.)+/,!0),S.linkText}function b(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=p,S.linkHref+" url")}var w=e.getMode(t,"text/html"),k="null"==w.name;void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.underscoresBreakWords&&(n.underscoresBreakWords=!0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var S={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"tag",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough"};for(var C in S)S.hasOwnProperty(C)&&n.tokenTypeOverrides[C]&&(S[C]=n.tokenTypeOverrides[C]);var L=/^([*\-_])(?:\s*\1){2,}\s*$/,T=/^[*\-+]\s+/,M=/^[0-9]+([.)])\s+/,N=/^\[(x| )\](?=\s)/,A=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,E=/^ *(?:\={1,}|-{1,})\s*$/,O=/^[^#!\[\]*_\\<>` "'(~]+/,I=new RegExp("^("+(n.fencedCodeBlocks===!0?"~~~+|```+":n.fencedCodeBlocks)+")[ \\t]*([\\w+#-]*)"),P={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\\]]|\\.)*\])*?(?=\])/},R={startState:function(){return{f:s,prevLine:null,thisLine:null,block:s,htmlState:null,indentation:0,inline:p,text:d,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,fencedChars:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(w,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkTitle:t.linkTitle,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,header:t.header,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedChars:t.fencedChars}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine){var n=t.header||t.hr;if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0)||n){if(l(t),!n)return null;t.prevLine=null}t.prevLine=t.thisLine,t.thisLine=e,t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.f=t.block;var r=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentationDiff=Math.min(r-t.indentation,4),t.indentation=t.indentation+t.indentationDiff,r>0)return null}return t.f(e,t)},innerMode:function(e){return e.block==c?{state:e.htmlState,mode:w}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:R}},blankLine:l,getType:h,fold:"markdown"};return R},"xml"),e.defineMIME("text/x-markdown","markdown")})},{"../../lib/codemirror":10,"../meta":13,"../xml/xml":14}],13:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../lib/codemirror")):"function"==typeof e&&e.amd?e(["../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["pgp"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists.txt$/},{name:"CoffeeScript",mime:"text/x-coffeescript",mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history).md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"]},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Jade",mime:"text/x-jade",mode:"jade",ext:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"null",mode:"jinja2"},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mime:"text/n-triples",mode:"ntriples",ext:["nt"]},{name:"Objective C",mime:"text/x-objectivec",mode:"clike",ext:["m","mm"],alias:["objective-c","objc"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mime:"application/x-httpd-php",mode:"php",ext:["php","php3","php4","php5","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mime:"text/x-sh",mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki ",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mime:"text/x-yaml",mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]}];for(var t=0;t<e.modeInfo.length;t++){var n=e.modeInfo[t];n.mimes&&(n.mime=n.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.mime==t)return r;if(r.mimes)for(var i=0;i<r.mimes.length;i++)if(r.mimes[i]==t)return r}},e.findModeByExtension=function(t){for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.ext)for(var i=0;i<r.ext.length;i++)if(r.ext[i]==t)return r}},e.findModeByFileName=function(t){for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.file&&r.file.test(t))return r}var i=t.lastIndexOf("."),o=i>-1&&t.substring(i+1,t.length);return o?e.findModeByExtension(o):void 0},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.name.toLowerCase()==t)return r;if(r.alias)for(var i=0;i<r.alias.length;i++)if(r.alias[i].toLowerCase()==t)return r}}})},{"../lib/codemirror":10}],14:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};e.defineMode("xml",function(r,i){function o(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();if("<"==r)return e.eat("!")?e.eat("[")?e.match("CDATA[")?n(s("atom","]]>")):null:e.match("--")?n(s("comment","-->")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(c(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=s("meta","?>"),"meta"):(T=e.eat("/")?"closeTag":"openTag",t.tokenize=a,"tag bracket");if("&"==r){var i;return i=e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"),i?"atom":"error"}return e.eatWhile(/[^&<]/),null}function a(e,t){var n=e.next();if(">"==n||"/"==n&&e.eat(">"))return t.tokenize=o,T=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return T="equals",null;if("<"==n){t.tokenize=o,t.state=d,t.tagName=t.tagStart=null;var r=t.tokenize(e,t);return r?r+" tag error":"tag error"}return/[\'\"]/.test(n)?(t.tokenize=l(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function l(e){var t=function(t,n){for(;!t.eol();)if(t.next()==e){n.tokenize=a;break}return"string"};return t.isInAttribute=!0,t}function s(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=o;break}n.next()}return e}}function c(e){return function(t,n){for(var r;null!=(r=t.next());){if("<"==r)return n.tokenize=c(e+1),n.tokenize(t,n);if(">"==r){if(1==e){n.tokenize=o;break}return n.tokenize=c(e-1),n.tokenize(t,n)}}return"meta"}}function u(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(S.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function f(e){e.context&&(e.context=e.context.prev)}function h(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!S.contextGrabbers.hasOwnProperty(n)||!S.contextGrabbers[n].hasOwnProperty(t))return;f(e)}}function d(e,t,n){return"openTag"==e?(n.tagStart=t.column(),p):"closeTag"==e?m:d}function p(e,t,n){return"word"==e?(n.tagName=t.current(),M="tag",y):(M="error",p)}function m(e,t,n){if("word"==e){var r=t.current();return n.context&&n.context.tagName!=r&&S.implicitlyClosed.hasOwnProperty(n.context.tagName)&&f(n),n.context&&n.context.tagName==r||S.matchClosing===!1?(M="tag",g):(M="tag error",v)}return M="error",v}function g(e,t,n){return"endTag"!=e?(M="error",g):(f(n),d)}function v(e,t,n){return M="error",g(e,t,n)}function y(e,t,n){if("word"==e)return M="attribute",x;if("endTag"==e||"selfcloseTag"==e){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||S.autoSelfClosers.hasOwnProperty(r)?h(n,r):(h(n,r),n.context=new u(n,r,i==n.indented)),d}return M="error",y}function x(e,t,n){return"equals"==e?b:(S.allowMissing||(M="error"),y(e,t,n))}function b(e,t,n){return"string"==e?w:"word"==e&&S.allowUnquoted?(M="string",y):(M="error",y(e,t,n))}function w(e,t,n){return"string"==e?w:y(e,t,n)}var k=r.indentUnit,S={},C=i.htmlMode?t:n;for(var L in C)S[L]=C[L];for(var L in i)S[L]=i[L];var T,M;return o.isInText=!0,{startState:function(e){var t={tokenize:o,state:d,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;T=null;var n=t.tokenize(e,t);return(n||T)&&"comment"!=n&&(M=null,t.state=t.state(T||n,e,t),M&&(n="error"==M?n+" error":M)),n},indent:function(t,n,r){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+k;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=a&&t.tokenize!=o)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return S.multilineTagIndentPastTag!==!1?t.tagStart+t.tagName.length+2:t.tagStart+k*(S.multilineTagIndentFactor||1);if(S.alignCDATA&&/<!\[CDATA\[/.test(n))return 0;var l=n&&/^<(\/)?([\w_:\.-]*)/.exec(n);if(l&&l[1])for(;i;){if(i.tagName==l[2]){i=i.prev;break}if(!S.implicitlyClosed.hasOwnProperty(i.tagName))break;i=i.prev}else if(l)for(;i;){var s=S.contextGrabbers[i.tagName];if(!s||!s.hasOwnProperty(l[2]))break;i=i.prev}for(;i&&i.prev&&!i.startOfLine;)i=i.prev;return i?i.indent+k:t.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:S.htmlMode?"html":"xml",helperType:S.htmlMode?"html":"xml",skipAttribute:function(e){e.state==b&&(e.state=y)}}}),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})})},{"../../lib/codemirror":10}],15:[function(e,t,n){n.read=function(e,t,n,r,i){var o,a,l=8*i-r-1,s=(1<<l)-1,c=s>>1,u=-7,f=n?i-1:0,h=n?-1:1,d=e[t+f];for(f+=h,o=d&(1<<-u)-1,d>>=-u,u+=l;u>0;o=256*o+e[t+f],f+=h,u-=8);for(a=o&(1<<-u)-1,o>>=-u,u+=r;u>0;a=256*a+e[t+f],f+=h,u-=8);if(0===o)o=1-c;else{if(o===s)return a?NaN:(d?-1:1)*(1/0);a+=Math.pow(2,r),o-=c}return(d?-1:1)*a*Math.pow(2,o-r)},n.write=function(e,t,n,r,i,o){var a,l,s,c=8*o-i-1,u=(1<<c)-1,f=u>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,m=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(l=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-a))<1&&(a--,s*=2),t+=a+f>=1?h/s:h*Math.pow(2,1-f),t*s>=2&&(a++,s/=2),a+f>=u?(l=0,a=u):a+f>=1?(l=(t*s-1)*Math.pow(2,i),a+=f):(l=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[n+d]=255&l,d+=p,l/=256,i-=8);for(a=a<<i|l,c+=i;c>0;e[n+d]=255&a,d+=p,a/=256,c-=8);e[n+d-p]|=128*m}},{}],16:[function(e,t,n){var r={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},{}],17:[function(t,n,r){(function(t){(function(){function t(e){this.tokens=[],this.tokens.links={},this.options=e||h.defaults,this.rules=d.normal,this.options.gfm&&(this.options.tables?this.rules=d.tables:this.rules=d.gfm)}function i(e,t){if(this.options=t||h.defaults,this.links=e,this.rules=p.normal,this.renderer=this.options.renderer||new o,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=p.breaks:this.rules=p.gfm:this.options.pedantic&&(this.rules=p.pedantic)}function o(e){this.options=e||{}}function a(e){this.tokens=[],this.token=null,this.options=e||h.defaults,this.options.renderer=this.options.renderer||new o,this.renderer=this.options.renderer,this.renderer.options=this.options}function l(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function s(e){return e.replace(/&([#\w]+);/g,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function c(e,t){return e=e.source,t=t||"",function n(r,i){return r?(i=i.source||i,i=i.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(r,i),n):new RegExp(e,t)}}function u(){}function f(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function h(e,n,r){if(r||"function"==typeof n){r||(r=n,n=null),n=f({},h.defaults,n||{});var i,o,s=n.highlight,c=0;try{i=t.lex(e,n)}catch(u){return r(u)}o=i.length;var d=function(e){if(e)return n.highlight=s,r(e);var t;try{t=a.parse(i,n)}catch(o){e=o}return n.highlight=s,e?r(e):r(null,t)};if(!s||s.length<3)return d();if(delete n.highlight,!o)return d();for(;c<i.length;c++)!function(e){return"code"!==e.type?--o||d():s(e.text,e.lang,function(t,n){return t?d(t):null==n||n===e.text?--o||d():(e.text=n,e.escaped=!0,void(--o||d()))})}(i[c])}else try{return n&&(n=f({},h.defaults,n)),a.parse(t.lex(e,n),n)}catch(u){if(u.message+="\nPlease report this to https://github.com/chjj/marked.",(n||h.defaults).silent)return"<p>An error occured:</p><pre>"+l(u.message+"",!0)+"</pre>";throw u}}var d={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:u,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:u,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:u,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};d.bullet=/(?:[*+-]|\d+\.)/,d.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,d.item=c(d.item,"gm")(/bull/g,d.bullet)(),d.list=c(d.list)(/bull/g,d.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+d.def.source+")")(),d.blockquote=c(d.blockquote)("def",d.def)(),d._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",d.html=c(d.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,d._tag)(),d.paragraph=c(d.paragraph)("hr",d.hr)("heading",d.heading)("lheading",d.lheading)("blockquote",d.blockquote)("tag","<"+d._tag)("def",d.def)(),d.normal=f({},d),d.gfm=f({},d.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),d.gfm.paragraph=c(d.paragraph)("(?!","(?!"+d.gfm.fences.source.replace("\\1","\\2")+"|"+d.list.source.replace("\\1","\\3")+"|")(),d.tables=f({},d.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),t.rules=d,t.lex=function(e,n){var r=new t(n);return r.lex(e)},t.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},t.prototype.token=function(e,t,n){for(var r,i,o,a,l,s,c,u,f,e=e.replace(/^ +$/gm,"");e;)if((o=this.rules.newline.exec(e))&&(e=e.substring(o[0].length),o[0].length>1&&this.tokens.push({type:"space"})),o=this.rules.code.exec(e))e=e.substring(o[0].length),o=o[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?o:o.replace(/\n+$/,"")});else if(o=this.rules.fences.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"code",lang:o[2],text:o[3]||""});else if(o=this.rules.heading.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"heading",depth:o[1].length,text:o[2]});else if(t&&(o=this.rules.nptable.exec(e))){for(e=e.substring(o[0].length),s={type:"table",header:o[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:o[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:o[3].replace(/\n$/,"").split("\n")},u=0;u<s.align.length;u++)/^ *-+: *$/.test(s.align[u])?s.align[u]="right":/^ *:-+: *$/.test(s.align[u])?s.align[u]="center":/^ *:-+ *$/.test(s.align[u])?s.align[u]="left":s.align[u]=null;for(u=0;u<s.cells.length;u++)s.cells[u]=s.cells[u].split(/ *\| */);this.tokens.push(s)}else if(o=this.rules.lheading.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"heading",depth:"="===o[2]?1:2,text:o[1]});else if(o=this.rules.hr.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"hr"});else if(o=this.rules.blockquote.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"blockquote_start"}),o=o[0].replace(/^ *> ?/gm,""),this.token(o,t,!0),this.tokens.push({type:"blockquote_end"});else if(o=this.rules.list.exec(e)){for(e=e.substring(o[0].length),a=o[2],this.tokens.push({type:"list_start",ordered:a.length>1}),o=o[0].match(this.rules.item),r=!1,f=o.length,u=0;f>u;u++)s=o[u],c=s.length,s=s.replace(/^ *([*+-]|\d+\.) +/,""),~s.indexOf("\n ")&&(c-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+c+"}","gm"),"")),this.options.smartLists&&u!==f-1&&(l=d.bullet.exec(o[u+1])[0],a===l||a.length>1&&l.length>1||(e=o.slice(u+1).join("\n")+e,u=f-1)),i=r||/\n\n(?!\s*$)/.test(s),u!==f-1&&(r="\n"===s.charAt(s.length-1),i||(i=r)),this.tokens.push({type:i?"loose_item_start":"list_item_start"}),this.token(s,!1,n),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(o=this.rules.html.exec(e))e=e.substring(o[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===o[1]||"script"===o[1]||"style"===o[1]),text:o[0]});else if(!n&&t&&(o=this.rules.def.exec(e)))e=e.substring(o[0].length),this.tokens.links[o[1].toLowerCase()]={href:o[2],title:o[3]};else if(t&&(o=this.rules.table.exec(e))){for(e=e.substring(o[0].length),s={type:"table", -header:o[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:o[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:o[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u<s.align.length;u++)/^ *-+: *$/.test(s.align[u])?s.align[u]="right":/^ *:-+: *$/.test(s.align[u])?s.align[u]="center":/^ *:-+ *$/.test(s.align[u])?s.align[u]="left":s.align[u]=null;for(u=0;u<s.cells.length;u++)s.cells[u]=s.cells[u].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */);this.tokens.push(s)}else if(t&&(o=this.rules.paragraph.exec(e)))e=e.substring(o[0].length),this.tokens.push({type:"paragraph",text:"\n"===o[1].charAt(o[1].length-1)?o[1].slice(0,-1):o[1]});else if(o=this.rules.text.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"text",text:o[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var p={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:u,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:u,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};p._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/,p._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/,p.link=c(p.link)("inside",p._inside)("href",p._href)(),p.reflink=c(p.reflink)("inside",p._inside)(),p.normal=f({},p),p.pedantic=f({},p.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),p.gfm=f({},p.normal,{escape:c(p.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:c(p.text)("]|","~]|")("|","|https?://|")()}),p.breaks=f({},p.gfm,{br:c(p.br)("{2,}","*")(),text:c(p.gfm.text)("{2,}","*")()}),i.rules=p,i.output=function(e,t,n){var r=new i(t,n);return r.output(e)},i.prototype.output=function(e){for(var t,n,r,i,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=i[1];else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),"@"===i[2]?(n=":"===i[1].charAt(6)?this.mangle(i[1].substring(7)):this.mangle(i[1]),r=this.mangle("mailto:")+n):(n=l(i[1]),r=n),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(i[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(i[0])&&(this.inLink=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):l(i[0]):i[0];else if(i=this.rules.link.exec(e))e=e.substring(i[0].length),this.inLink=!0,o+=this.outputLink(i,{href:i[2],title:i[3]}),this.inLink=!1;else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(l(i[2],!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),o+=this.renderer.text(l(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(i[0].length),n=l(i[1]),r=n,o+=this.renderer.link(r,null,n);return o},i.prototype.outputLink=function(e,t){var n=l(t.href),r=t.title?l(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,l(e[1]))},i.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},i.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;r>i;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},o.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'<pre><code class="'+this.options.langPrefix+l(t,!0)+'">'+(n?e:l(e,!0))+"\n</code></pre>\n":"<pre><code>"+(n?e:l(e,!0))+"\n</code></pre>"},o.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},o.prototype.html=function(e){return e},o.prototype.heading=function(e,t,n){return"<h"+t+' id="'+this.options.headerPrefix+n.toLowerCase().replace(/[^\w]+/g,"-")+'">'+e+"</h"+t+">\n"},o.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},o.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"</"+n+">\n"},o.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},o.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},o.prototype.table=function(e,t){return"<table>\n<thead>\n"+e+"</thead>\n<tbody>\n"+t+"</tbody>\n</table>\n"},o.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},o.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},o.prototype.strong=function(e){return"<strong>"+e+"</strong>"},o.prototype.em=function(e){return"<em>"+e+"</em>"},o.prototype.codespan=function(e){return"<code>"+e+"</code>"},o.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},o.prototype.del=function(e){return"<del>"+e+"</del>"},o.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(s(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(i){return""}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:"))return""}var o='<a href="'+e+'"';return t&&(o+=' title="'+t+'"'),o+=">"+n+"</a>"},o.prototype.image=function(e,t,n){var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},o.prototype.text=function(e){return e},a.parse=function(e,t,n){var r=new a(t,n);return r.parse(e)},a.prototype.parse=function(e){this.inline=new i(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},a.prototype.next=function(){return this.token=this.tokens.pop()},a.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},a.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},a.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i,o="",a="";for(n="",e=0;e<this.token.header.length;e++)r={header:!0,align:this.token.align[e]},n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(o+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",i=0;i<t.length;i++)n+=this.renderer.tablecell(this.inline.output(t[i]),{header:!1,align:this.token.align[i]});a+=this.renderer.tablerow(n)}return this.renderer.table(o,a);case"blockquote_start":for(var a="";"blockquote_end"!==this.next().type;)a+=this.tok();return this.renderer.blockquote(a);case"list_start":for(var a="",l=this.token.ordered;"list_end"!==this.next().type;)a+=this.tok();return this.renderer.list(a,l);case"list_item_start":for(var a="";"list_item_end"!==this.next().type;)a+="text"===this.token.type?this.parseText():this.tok();return this.renderer.listitem(a);case"loose_item_start":for(var a="";"list_item_end"!==this.next().type;)a+=this.tok();return this.renderer.listitem(a);case"html":var s=this.token.pre||this.options.pedantic?this.token.text:this.inline.output(this.token.text);return this.renderer.html(s);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText())}},u.exec=u,h.options=h.setOptions=function(e){return f(h.defaults,e),h},h.defaults={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,sanitizer:null,mangle:!0,smartLists:!1,silent:!1,highlight:null,langPrefix:"lang-",smartypants:!1,headerPrefix:"",renderer:new o,xhtml:!1},h.Parser=a,h.parser=a.parse,h.Renderer=o,h.Lexer=t,h.lexer=t.lex,h.InlineLexer=i,h.inlineLexer=i.output,h.parse=h,"undefined"!=typeof n&&"object"==typeof r?n.exports=h:"function"==typeof e&&e.amd?e(function(){return h}):this.marked=h}).call(function(){return this||("undefined"!=typeof window?window:t)}())}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(e,t,n){(function(n,r){"use strict";var i=function(e,t,n,i){if(i=i||{},this.dictionary=null,this.rules={},this.dictionaryTable={},this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=i.flags||{},e){if(this.dictionary=e,"undefined"!=typeof window&&"chrome"in window&&"extension"in window.chrome&&"getURL"in window.chrome.extension)t||(t=this._readFile(chrome.extension.getURL("lib/typo/dictionaries/"+e+"/"+e+".aff"))),n||(n=this._readFile(chrome.extension.getURL("lib/typo/dictionaries/"+e+"/"+e+".dic")));else{if(i.dictionaryPath)var o=i.dictionaryPath;else if("undefined"!=typeof r)var o=r+"/dictionaries";else var o="./dictionaries";t||(t=this._readFile(o+"/"+e+"/"+e+".aff")),n||(n=this._readFile(o+"/"+e+"/"+e+".dic"))}this.rules=this._parseAFF(t),this.compoundRuleCodes={};for(var a=0,l=this.compoundRules.length;l>a;a++)for(var s=this.compoundRules[a],c=0,u=s.length;u>c;c++)this.compoundRuleCodes[s[c]]=[];"ONLYINCOMPOUND"in this.flags&&(this.compoundRuleCodes[this.flags.ONLYINCOMPOUND]=[]),this.dictionaryTable=this._parseDIC(n);for(var a in this.compoundRuleCodes)0==this.compoundRuleCodes[a].length&&delete this.compoundRuleCodes[a];for(var a=0,l=this.compoundRules.length;l>a;a++){for(var f=this.compoundRules[a],h="",c=0,u=f.length;u>c;c++){var d=f[c];h+=d in this.compoundRuleCodes?"("+this.compoundRuleCodes[d].join("|")+")":d}this.compoundRules[a]=new RegExp(h,"i")}}return this};i.prototype={load:function(e){for(var t in e)this[t]=e[t];return this},_readFile:function(t,r){if(r||(r="utf8"),"undefined"!=typeof XMLHttpRequest){var i=new XMLHttpRequest;return i.open("GET",t,!1),i.overrideMimeType&&i.overrideMimeType("text/plain; charset="+r),i.send(null),i.responseText}if("undefined"!=typeof e){var o=e("fs");try{if(o.existsSync(t)){var a=o.statSync(t),l=o.openSync(t,"r"),s=new n(a.size);return o.readSync(l,s,0,s.length,null),s.toString(r,0,s.length)}console.log("Path "+t+" does not exist.")}catch(c){return console.log(c),""}}},_parseAFF:function(e){var t={};e=this._removeAffixComments(e);for(var n=e.split("\n"),r=0,i=n.length;i>r;r++){var o=n[r],a=o.split(/\s+/),l=a[0];if("PFX"==l||"SFX"==l){for(var s=a[1],c=a[2],u=parseInt(a[3],10),f=[],h=r+1,d=r+1+u;d>h;h++){var o=n[h],p=o.split(/\s+/),m=p[2],g=p[3].split("/"),v=g[0];"0"===v&&(v="");var y=this.parseRuleCodes(g[1]),x=p[4],b={};b.add=v,y.length>0&&(b.continuationClasses=y),"."!==x&&("SFX"===l?b.match=new RegExp(x+"$"):b.match=new RegExp("^"+x)),"0"!=m&&("SFX"===l?b.remove=new RegExp(m+"$"):b.remove=m),f.push(b)}t[s]={type:l,combineable:"Y"==c,entries:f},r+=u}else if("COMPOUNDRULE"===l){for(var u=parseInt(a[1],10),h=r+1,d=r+1+u;d>h;h++){var o=n[h],p=o.split(/\s+/);this.compoundRules.push(p[1])}r+=u}else if("REP"===l){var p=o.split(/\s+/);3===p.length&&this.replacementTable.push([p[1],p[2]])}else this.flags[l]=a[1]}return t},_removeAffixComments:function(e){return e=e.replace(/#.*$/gm,""),e=e.replace(/^\s\s*/m,"").replace(/\s\s*$/m,""),e=e.replace(/\n{2,}/g,"\n"),e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")},_parseDIC:function(e){function t(e,t){e in r&&"object"==typeof r[e]||(r[e]=[]),r[e].push(t)}e=this._removeDicComments(e);for(var n=e.split("\n"),r={},i=1,o=n.length;o>i;i++){var a=n[i],l=a.split("/",2),s=l[0];if(l.length>1){var c=this.parseRuleCodes(l[1]);"NEEDAFFIX"in this.flags&&-1!=c.indexOf(this.flags.NEEDAFFIX)||t(s,c);for(var u=0,f=c.length;f>u;u++){var h=c[u],d=this.rules[h];if(d)for(var p=this._applyRule(s,d),m=0,g=p.length;g>m;m++){var v=p[m];if(t(v,[]),d.combineable)for(var y=u+1;f>y;y++){var x=c[y],b=this.rules[x];if(b&&b.combineable&&d.type!=b.type)for(var w=this._applyRule(v,b),k=0,S=w.length;S>k;k++){var C=w[k];t(C,[])}}}h in this.compoundRuleCodes&&this.compoundRuleCodes[h].push(s)}}else t(s.trim(),[])}return r},_removeDicComments:function(e){return e=e.replace(/^\t.*$/gm,"")},parseRuleCodes:function(e){if(!e)return[];if(!("FLAG"in this.flags))return e.split("");if("long"===this.flags.FLAG){for(var t=[],n=0,r=e.length;r>n;n+=2)t.push(e.substr(n,2));return t}return"num"===this.flags.FLAG?textCode.split(","):void 0},_applyRule:function(e,t){for(var n=t.entries,r=[],i=0,o=n.length;o>i;i++){var a=n[i];if(!a.match||e.match(a.match)){var l=e;if(a.remove&&(l=l.replace(a.remove,"")),"SFX"===t.type?l+=a.add:l=a.add+l,r.push(l),"continuationClasses"in a)for(var s=0,c=a.continuationClasses.length;c>s;s++){var u=this.rules[a.continuationClasses[s]];u&&(r=r.concat(this._applyRule(l,u)))}}}return r},check:function(e){var t=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"");if(this.checkExact(t))return!0;if(t.toUpperCase()===t){var n=t[0]+t.substring(1).toLowerCase();if(this.hasFlag(n,"KEEPCASE"))return!1;if(this.checkExact(n))return!0}var r=t.toLowerCase();if(r!==t){if(this.hasFlag(r,"KEEPCASE"))return!1;if(this.checkExact(r))return!0}return!1},checkExact:function(e){var t=this.dictionaryTable[e];if("undefined"==typeof t){if("COMPOUNDMIN"in this.flags&&e.length>=this.flags.COMPOUNDMIN)for(var n=0,r=this.compoundRules.length;r>n;n++)if(e.match(this.compoundRules[n]))return!0;return!1}if("object"==typeof t){for(var n=0,r=t.length;r>n;n++)if(!this.hasFlag(e,"ONLYINCOMPOUND",t[n]))return!0;return!1}},hasFlag:function(e,t,n){if(t in this.flags){if("undefined"==typeof n)var n=Array.prototype.concat.apply([],this.dictionaryTable[e]);if(n&&-1!==n.indexOf(this.flags[t]))return!0}return!1},alphabet:"",suggest:function(e,t){function n(e){for(var t=[],n=0,r=e.length;r>n;n++){for(var i=e[n],o=[],a=0,l=i.length+1;l>a;a++)o.push([i.substring(0,a),i.substring(a,i.length)]);for(var s=[],a=0,l=o.length;l>a;a++){var u=o[a];u[1]&&s.push(u[0]+u[1].substring(1))}for(var f=[],a=0,l=o.length;l>a;a++){var u=o[a];u[1].length>1&&f.push(u[0]+u[1][1]+u[1][0]+u[1].substring(2))}for(var h=[],a=0,l=o.length;l>a;a++){var u=o[a];if(u[1])for(var d=0,p=c.alphabet.length;p>d;d++)h.push(u[0]+c.alphabet[d]+u[1].substring(1))}for(var m=[],a=0,l=o.length;l>a;a++){var u=o[a];if(u[1])for(var d=0,p=c.alphabet.length;p>d;d++)h.push(u[0]+c.alphabet[d]+u[1])}t=t.concat(s),t=t.concat(f),t=t.concat(h),t=t.concat(m)}return t}function r(e){for(var t=[],n=0;n<e.length;n++)c.check(e[n])&&t.push(e[n]);return t}function i(e){function i(e,t){return e[1]<t[1]?-1:1}for(var o=n([e]),a=n(o),l=r(o).concat(r(a)),s={},u=0,f=l.length;f>u;u++)l[u]in s?s[l[u]]+=1:s[l[u]]=1;var h=[];for(var u in s)h.push([u,s[u]]);h.sort(i).reverse();for(var d=[],u=0,f=Math.min(t,h.length);f>u;u++)c.hasFlag(h[u][0],"NOSUGGEST")||d.push(h[u][0]);return d}if(t||(t=5),this.check(e))return[];for(var o=0,a=this.replacementTable.length;a>o;o++){var l=this.replacementTable[o];if(-1!==e.indexOf(l[0])){var s=e.replace(l[0],l[1]);if(this.check(s))return[s]}}var c=this;return c.alphabet="abcdefghijklmnopqrstuvwxyz",i(e)}},"undefined"!=typeof t&&(t.exports=i)}).call(this,e("buffer").Buffer,"/node_modules/typo-js")},{buffer:3,fs:2}],19:[function(e,t,n){var r=e("codemirror");r.commands.tabAndIndentMarkdownList=function(e){var t=e.listSelections(),n=t[0].head,r=e.getStateAfter(n.line),i=r.list!==!1;if(i)return void e.execCommand("indentMore");if(e.options.indentWithTabs)e.execCommand("insertTab");else{var o=Array(e.options.tabSize+1).join(" ");e.replaceSelection(o)}},r.commands.shiftTabAndUnindentMarkdownList=function(e){var t=e.listSelections(),n=t[0].head,r=e.getStateAfter(n.line),i=r.list!==!1;if(i)return void e.execCommand("indentLess");if(e.options.indentWithTabs)e.execCommand("insertTab");else{var o=Array(e.options.tabSize+1).join(" ");e.replaceSelection(o)}}},{codemirror:10}],20:[function(e,t,n){"use strict";function r(e){return e=U?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}function i(e,t,n){e=e||{};var r=document.createElement("a");return t=void 0==t?!0:t,e.title&&t&&(r.title=a(e.title,e.action,n),U&&(r.title=r.title.replace("Ctrl","⌘"),r.title=r.title.replace("Alt","⌥"))),r.tabIndex=-1,r.className=e.className,r}function o(){var e=document.createElement("i");return e.className="separator",e.innerHTML="|",e}function a(e,t,n){var i,o=e;return t&&(i=Y(t),n[i]&&(o+=" ("+r(n[i])+")")),o}function l(e,t){t=t||e.getCursor("start");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,i,o=n.type.split(" "),a={},l=0;l<o.length;l++)r=o[l],"strong"===r?a.bold=!0:"variable-2"===r?(i=e.getLine(t.line),/^\s*\d+\.\s/.test(i)?a["ordered-list"]=!0:a["unordered-list"]=!0):"atom"===r?a.quote=!0:"em"===r?a.italic=!0:"quote"===r?a.quote=!0:"strikethrough"===r?a.strikethrough=!0:"comment"===r?a.code=!0:"link"===r?a.link=!0:"tag"===r?a.image=!0:r.match(/^header(\-[1-6])?$/)&&(a[r.replace("header","heading")]=!0);return a}function s(e){var t=e.codemirror;t.setOption("fullScreen",!t.getOption("fullScreen")),t.getOption("fullScreen")?(V=document.body.style.overflow,document.body.style.overflow="hidden"):document.body.style.overflow=V;var n=t.getWrapperElement();/fullscreen/.test(n.previousSibling.className)?n.previousSibling.className=n.previousSibling.className.replace(/\s*fullscreen\b/,""):n.previousSibling.className+=" fullscreen";var r=e.toolbarElements.fullscreen;/active/.test(r.className)?r.className=r.className.replace(/\s*active\s*/g,""):r.className+=" active";var i=t.getWrapperElement().nextSibling;/editor-preview-active-side/.test(i.className)&&N(e)}function c(e){P(e,"bold",e.options.blockStyles.bold)}function u(e){P(e,"italic",e.options.blockStyles.italic)}function f(e){P(e,"strikethrough","~~")}function h(e){function t(e){if("object"!=typeof e)throw"fencing_line() takes a 'line' object (not a line number, or line text). Got: "+typeof e+": "+e;return e.styles&&e.styles[2]&&-1!==e.styles[2].indexOf("formatting-code-block")}function n(e){return e.state.base.base||e.state.base}function r(e,r,i,o,a){i=i||e.getLineHandle(r),o=o||e.getTokenAt({line:r,ch:1}),a=a||!!i.text&&e.getTokenAt({line:r,ch:i.text.length-1});var l=o.type?o.type.split(" "):[];return a&&n(a).indentedCode?"indented":-1===l.indexOf("comment")?!1:n(o).fencedChars||n(a).fencedChars||t(i)?"fenced":"single"}function i(e,t,n,r){var i=t.line+1,o=n.line+1,a=t.line!==n.line,l=r+"\n",s="\n"+r;a&&o++,a&&0===n.ch&&(s=r+"\n",o--),E(e,!1,[l,s]),e.setSelection({line:i,ch:0},{line:o,ch:0})}var o,a,l,s=e.options.blockStyles.code,c=e.codemirror,u=c.getCursor("start"),f=c.getCursor("end"),h=c.getTokenAt({line:u.line,ch:u.ch||1}),d=c.getLineHandle(u.line),p=r(c,u.line,d,h);if("single"===p){var m=d.text.slice(0,u.ch).replace("`",""),g=d.text.slice(u.ch).replace("`","");c.replaceRange(m+g,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),u.ch--,u!==f&&f.ch--,c.setSelection(u,f),c.focus()}else if("fenced"===p)if(u.line!==f.line||u.ch!==f.ch){for(o=u.line;o>=0&&(d=c.getLineHandle(o),!t(d));o--);var v,y,x,b,w=c.getTokenAt({line:o,ch:1}),k=n(w).fencedChars;t(c.getLineHandle(u.line))?(v="",y=u.line):t(c.getLineHandle(u.line-1))?(v="",y=u.line-1):(v=k+"\n",y=u.line),t(c.getLineHandle(f.line))?(x="",b=f.line,0===f.ch&&(b+=1)):0!==f.ch&&t(c.getLineHandle(f.line+1))?(x="",b=f.line+1):(x=k+"\n",b=f.line+1),0===f.ch&&(b-=1),c.operation(function(){c.replaceRange(x,{line:b,ch:0},{line:b+(x?0:1),ch:0}),c.replaceRange(v,{line:y,ch:0},{line:y+(v?0:1),ch:0})}),c.setSelection({line:y+(v?1:0),ch:0},{line:b+(v?1:-1),ch:0}),c.focus()}else{var S=u.line;if(t(c.getLineHandle(u.line))&&("fenced"===r(c,u.line+1)?(o=u.line,S=u.line+1):(a=u.line,S=u.line-1)),void 0===o)for(o=S;o>=0&&(d=c.getLineHandle(o),!t(d));o--);if(void 0===a)for(l=c.lineCount(),a=S;l>a&&(d=c.getLineHandle(a),!t(d));a++);c.operation(function(){c.replaceRange("",{line:o,ch:0},{line:o+1,ch:0}),c.replaceRange("",{line:a-1,ch:0},{line:a,ch:0})}),c.focus()}else if("indented"===p){if(u.line!==f.line||u.ch!==f.ch)o=u.line,a=f.line,0===f.ch&&a--;else{for(o=u.line;o>=0;o--)if(d=c.getLineHandle(o),!d.text.match(/^\s*$/)&&"indented"!==r(c,o,d)){o+=1;break}for(l=c.lineCount(),a=u.line;l>a;a++)if(d=c.getLineHandle(a),!d.text.match(/^\s*$/)&&"indented"!==r(c,a,d)){a-=1;break}}var C=c.getLineHandle(a+1),L=C&&c.getTokenAt({line:a+1,ch:C.text.length-1}),T=L&&n(L).indentedCode;T&&c.replaceRange("\n",{line:a+1,ch:0});for(var M=o;a>=M;M++)c.indentLine(M,"subtract");c.focus()}else{var N=u.line===f.line&&u.ch===f.ch&&0===u.ch,A=u.line!==f.line;N||A?i(c,u,f,s):E(c,!1,["`","`"])}}function d(e){var t=e.codemirror;I(t,"quote")}function p(e){var t=e.codemirror;O(t,"smaller")}function m(e){var t=e.codemirror;O(t,"bigger")}function g(e){var t=e.codemirror;O(t,void 0,1)}function v(e){var t=e.codemirror;O(t,void 0,2)}function y(e){var t=e.codemirror;O(t,void 0,3)}function x(e){var t=e.codemirror;I(t,"unordered-list")}function b(e){var t=e.codemirror;I(t,"ordered-list")}function w(e){var t=e.codemirror;R(t)}function k(e){var t=e.codemirror,n=l(t),r=e.options,i="http://";return r.promptURLs&&(i=prompt(r.promptTexts.link),!i)?!1:void E(t,n.link,r.insertTexts.link,i)}function S(e){var t=e.codemirror,n=l(t),r=e.options,i="http://";return r.promptURLs&&(i=prompt(r.promptTexts.image),!i)?!1:void E(t,n.image,r.insertTexts.image,i)}function C(e){var t=e.codemirror,n=l(t),r=e.options;E(t,n.table,r.insertTexts.table)}function L(e){var t=e.codemirror,n=l(t),r=e.options;E(t,n.image,r.insertTexts.horizontalRule)}function T(e){var t=e.codemirror;t.undo(),t.focus()}function M(e){var t=e.codemirror;t.redo(),t.focus()}function N(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.nextSibling,i=e.toolbarElements["side-by-side"],o=!1;/editor-preview-active-side/.test(r.className)?(r.className=r.className.replace(/\s*editor-preview-active-side\s*/g,""),i.className=i.className.replace(/\s*active\s*/g,""),n.className=n.className.replace(/\s*CodeMirror-sided\s*/g," ")):(setTimeout(function(){t.getOption("fullScreen")||s(e),r.className+=" editor-preview-active-side"},1),i.className+=" active",n.className+=" CodeMirror-sided",o=!0);var a=n.lastChild;if(/editor-preview-active/.test(a.className)){a.className=a.className.replace(/\s*editor-preview-active\s*/g,"");var l=e.toolbarElements.preview,c=n.previousSibling;l.className=l.className.replace(/\s*active\s*/g,""),c.className=c.className.replace(/\s*disabled-for-preview*/g,"")}var u=function(){r.innerHTML=e.options.previewRender(e.value(),r)};t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=u),o?(r.innerHTML=e.options.previewRender(e.value(),r),t.on("update",t.sideBySideRenderingFunction)):t.off("update",t.sideBySideRenderingFunction),t.refresh()}function A(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.previousSibling,i=e.options.toolbar?e.toolbarElements.preview:!1,o=n.lastChild;o&&/editor-preview/.test(o.className)||(o=document.createElement("div"),o.className="editor-preview",n.appendChild(o)),/editor-preview-active/.test(o.className)?(o.className=o.className.replace(/\s*editor-preview-active\s*/g,""),i&&(i.className=i.className.replace(/\s*active\s*/g,""),r.className=r.className.replace(/\s*disabled-for-preview*/g,""))):(setTimeout(function(){o.className+=" editor-preview-active"},1),i&&(i.className+=" active",r.className+=" disabled-for-preview")),o.innerHTML=e.options.previewRender(e.value(),o);var a=t.getWrapperElement().nextSibling;/editor-preview-active-side/.test(a.className)&&N(e)}function E(e,t,n,r){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){var i,o=n[0],a=n[1],l=e.getCursor("start"),s=e.getCursor("end");r&&(a=a.replace("#url#",r)),t?(i=e.getLine(l.line),o=i.slice(0,l.ch),a=i.slice(l.ch),e.replaceRange(o+a,{line:l.line,ch:0})):(i=e.getSelection(),e.replaceSelection(o+i+a),l.ch+=o.length,l!==s&&(s.ch+=o.length)),e.setSelection(l,s),e.focus()}}function O(e,t,n){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){for(var r=e.getCursor("start"),i=e.getCursor("end"),o=r.line;o<=i.line;o++)!function(r){var i=e.getLine(r),o=i.search(/[^#]/);i=void 0!==t?0>=o?"bigger"==t?"###### "+i:"# "+i:6==o&&"smaller"==t?i.substr(7):1==o&&"bigger"==t?i.substr(2):"bigger"==t?i.substr(1):"#"+i:1==n?0>=o?"# "+i:o==n?i.substr(o+1):"# "+i.substr(o+1):2==n?0>=o?"## "+i:o==n?i.substr(o+1):"## "+i.substr(o+1):0>=o?"### "+i:o==n?i.substr(o+1):"### "+i.substr(o+1),e.replaceRange(i,{line:r,ch:0},{line:r,ch:99999999999999})}(o);e.focus()}}function I(e,t){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){for(var n=l(e),r=e.getCursor("start"),i=e.getCursor("end"),o={quote:/^(\s*)\>\s+/,"unordered-list":/^(\s*)(\*|\-|\+)\s+/,"ordered-list":/^(\s*)\d+\.\s+/},a={quote:"> ","unordered-list":"* ","ordered-list":"1. "},s=r.line;s<=i.line;s++)!function(r){var i=e.getLine(r);i=n[t]?i.replace(o[t],"$1"):a[t]+i,e.replaceRange(i,{line:r,ch:0},{line:r,ch:99999999999999})}(s);e.focus()}}function P(e,t,n,r){if(!/editor-preview-active/.test(e.codemirror.getWrapperElement().lastChild.className)){r="undefined"==typeof r?n:r;var i,o=e.codemirror,a=l(o),s=n,c=r,u=o.getCursor("start"),f=o.getCursor("end");a[t]?(i=o.getLine(u.line),s=i.slice(0,u.ch),c=i.slice(u.ch),"bold"==t?(s=s.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),c=c.replace(/(\*\*|__)/,"")):"italic"==t?(s=s.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),c=c.replace(/(\*|_)/,"")):"strikethrough"==t&&(s=s.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),c=c.replace(/(\*\*|~~)/,"")),o.replaceRange(s+c,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),"bold"==t||"strikethrough"==t?(u.ch-=2,u!==f&&(f.ch-=2)):"italic"==t&&(u.ch-=1,u!==f&&(f.ch-=1))):(i=o.getSelection(),"bold"==t?(i=i.split("**").join(""),i=i.split("__").join("")):"italic"==t?(i=i.split("*").join(""),i=i.split("_").join("")):"strikethrough"==t&&(i=i.split("~~").join("")),o.replaceSelection(s+i+c),u.ch+=n.length,f.ch=u.ch+i.length),o.setSelection(u,f),o.focus()}}function R(e){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className))for(var t,n=e.getCursor("start"),r=e.getCursor("end"),i=n.line;i<=r.line;i++)t=e.getLine(i),t=t.replace(/^[ ]*([# ]+|\*|\-|[> ]+|[0-9]+(.|\)))[ ]*/,""),e.replaceRange(t,{line:i,ch:0},{line:i,ch:99999999999999})}function D(e,t){for(var n in t)t.hasOwnProperty(n)&&(t[n]instanceof Array?e[n]=t[n].concat(e[n]instanceof Array?e[n]:[]):null!==t[n]&&"object"==typeof t[n]&&t[n].constructor===Object?e[n]=D(e[n]||{},t[n]):e[n]=t[n]);return e}function H(e){for(var t=1;t<arguments.length;t++)e=D(e,arguments[t]);return e}function W(e){var t=/[a-zA-Z0-9_\u0392-\u03c9\u0410-\u04F9]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/g,n=e.match(t),r=0;if(null===n)return r;for(var i=0;i<n.length;i++)r+=n[i].charCodeAt(0)>=19968?n[i].length:1;return r}function B(e){e=e||{},e.parent=this;var t=!0;if(e.autoDownloadFontAwesome===!1&&(t=!1),e.autoDownloadFontAwesome!==!0)for(var n=document.styleSheets,r=0;r<n.length;r++)n[r].href&&n[r].href.indexOf("//maxcdn.bootstrapcdn.com/font-awesome/")>-1&&(t=!1);if(t){var i=document.createElement("link");i.rel="stylesheet",i.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(i)}if(e.element)this.element=e.element;else if(null===e.element)return void console.log("SimpleMDE: Error. No element was found.");if(void 0===e.toolbar){e.toolbar=[];for(var o in K)K.hasOwnProperty(o)&&(-1!=o.indexOf("separator-")&&e.toolbar.push("|"),(K[o]["default"]===!0||e.showIcons&&e.showIcons.constructor===Array&&-1!=e.showIcons.indexOf(o))&&e.toolbar.push(o))}e.hasOwnProperty("status")||(e.status=["autosave","lines","words","cursor"]),e.previewRender||(e.previewRender=function(e){return this.parent.markdown(e)}),e.parsingConfig=H({highlightFormatting:!0},e.parsingConfig||{}),e.insertTexts=H({},X,e.insertTexts||{}),e.promptTexts=Z,e.blockStyles=H({},J,e.blockStyles||{}),e.shortcuts=H({},G,e.shortcuts||{}),void 0!=e.autosave&&void 0!=e.autosave.unique_id&&""!=e.autosave.unique_id&&(e.autosave.uniqueId=e.autosave.unique_id),this.options=e,this.render(),!e.initialValue||this.options.autosave&&this.options.autosave.foundSavedValue===!0||this.value(e.initialValue)}function _(){if("object"!=typeof localStorage)return!1;try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch(e){return!1}return!0}var F=e("codemirror");e("codemirror/addon/edit/continuelist.js"),e("./codemirror/tablist"),e("codemirror/addon/display/fullscreen.js"),e("codemirror/mode/markdown/markdown.js"),e("codemirror/addon/mode/overlay.js"),e("codemirror/addon/display/placeholder.js"),e("codemirror/addon/selection/mark-selection.js"),e("codemirror/mode/gfm/gfm.js"),e("codemirror/mode/xml/xml.js");var z=e("codemirror-spell-checker"),j=e("marked"),U=/Mac/.test(navigator.platform),q={toggleBold:c,toggleItalic:u,drawLink:k,toggleHeadingSmaller:p,toggleHeadingBigger:m,drawImage:S,toggleBlockquote:d,toggleOrderedList:b,toggleUnorderedList:x,toggleCodeBlock:h,togglePreview:A,toggleStrikethrough:f,toggleHeading1:g,toggleHeading2:v,toggleHeading3:y,cleanBlock:w,drawTable:C,drawHorizontalRule:L,undo:T,redo:M,toggleSideBySide:N,toggleFullScreen:s},G={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},Y=function(e){for(var t in q)if(q[t]===e)return t;return null},$=function(){var e=!1;return function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(e=!0); -}(navigator.userAgent||navigator.vendor||window.opera),e},V="",K={bold:{name:"bold",action:c,className:"fa fa-bold",title:"Bold","default":!0},italic:{name:"italic",action:u,className:"fa fa-italic",title:"Italic","default":!0},strikethrough:{name:"strikethrough",action:f,className:"fa fa-strikethrough",title:"Strikethrough"},heading:{name:"heading",action:p,className:"fa fa-header",title:"Heading","default":!0},"heading-smaller":{name:"heading-smaller",action:p,className:"fa fa-header fa-header-x fa-header-smaller",title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:m,className:"fa fa-header fa-header-x fa-header-bigger",title:"Bigger Heading"},"heading-1":{name:"heading-1",action:g,className:"fa fa-header fa-header-x fa-header-1",title:"Big Heading"},"heading-2":{name:"heading-2",action:v,className:"fa fa-header fa-header-x fa-header-2",title:"Medium Heading"},"heading-3":{name:"heading-3",action:y,className:"fa fa-header fa-header-x fa-header-3",title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:h,className:"fa fa-code",title:"Code"},quote:{name:"quote",action:d,className:"fa fa-quote-left",title:"Quote","default":!0},"unordered-list":{name:"unordered-list",action:x,className:"fa fa-list-ul",title:"Generic List","default":!0},"ordered-list":{name:"ordered-list",action:b,className:"fa fa-list-ol",title:"Numbered List","default":!0},"clean-block":{name:"clean-block",action:w,className:"fa fa-eraser fa-clean-block",title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:k,className:"fa fa-link",title:"Create Link","default":!0},image:{name:"image",action:S,className:"fa fa-picture-o",title:"Insert Image","default":!0},table:{name:"table",action:C,className:"fa fa-table",title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:L,className:"fa fa-minus",title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:A,className:"fa fa-eye no-disable",title:"Toggle Preview","default":!0},"side-by-side":{name:"side-by-side",action:N,className:"fa fa-columns no-disable no-mobile",title:"Toggle Side by Side","default":!0},fullscreen:{name:"fullscreen",action:s,className:"fa fa-arrows-alt no-disable no-mobile",title:"Toggle Fullscreen","default":!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://simplemde.com/markdown-guide",className:"fa fa-question-circle",title:"Markdown Guide","default":!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:T,className:"fa fa-undo no-disable",title:"Undo"},redo:{name:"redo",action:M,className:"fa fa-repeat no-disable",title:"Redo"}},X={link:["[","](#url#)"],image:[""],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},Z={link:"URL for the link:",image:"URL of the image:"},J={bold:"**",code:"```",italic:"*"};B.prototype.markdown=function(e){if(j){var t={};return this.options&&this.options.renderingConfig&&this.options.renderingConfig.singleLineBreaks===!1?t.breaks=!1:t.breaks=!0,this.options&&this.options.renderingConfig&&this.options.renderingConfig.codeSyntaxHighlighting===!0&&window.hljs&&(t.highlight=function(e){return window.hljs.highlightAuto(e).value}),j.setOptions(t),j(e)}},B.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName("textarea")[0]),!this._rendered||this._rendered!==e){this.element=e;var t=this.options,n=this,i={};for(var o in t.shortcuts)null!==t.shortcuts[o]&&null!==q[o]&&!function(e){i[r(t.shortcuts[e])]=function(){q[e](n)}}(o);i.Enter="newlineAndIndentContinueMarkdownList",i.Tab="tabAndIndentMarkdownList",i["Shift-Tab"]="shiftTabAndUnindentMarkdownList",i.Esc=function(e){e.getOption("fullScreen")&&s(n)},document.addEventListener("keydown",function(e){e=e||window.event,27==e.keyCode&&n.codemirror.getOption("fullScreen")&&s(n)},!1);var a,l;if(t.spellChecker!==!1?(a="spell-checker",l=t.parsingConfig,l.name="gfm",l.gitHubSpice=!1,z({codeMirrorInstance:F})):(a=t.parsingConfig,a.name="gfm",a.gitHubSpice=!1),this.codemirror=F.fromTextArea(e,{mode:a,backdrop:l,theme:"paper",tabSize:void 0!=t.tabSize?t.tabSize:2,indentUnit:void 0!=t.tabSize?t.tabSize:2,indentWithTabs:t.indentWithTabs!==!1,lineNumbers:!1,autofocus:t.autofocus===!0,extraKeys:i,lineWrapping:t.lineWrapping!==!1,allowDropFileTypes:["text/plain"],placeholder:t.placeholder||e.getAttribute("placeholder")||"",styleSelectedText:void 0!=t.styleSelectedText?t.styleSelectedText:!0}),t.forceSync===!0){var c=this.codemirror;c.on("change",function(){c.save()})}this.gui={},t.toolbar!==!1&&(this.gui.toolbar=this.createToolbar()),t.status!==!1&&(this.gui.statusbar=this.createStatusbar()),void 0!=t.autosave&&t.autosave.enabled===!0&&this.autosave(),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element;var u=this.codemirror;setTimeout(function(){u.refresh()}.bind(u),0)}},B.prototype.autosave=function(){if(_()){var e=this;if(void 0==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("SimpleMDE: You must set a uniqueId to use the autosave feature");null!=e.element.form&&void 0!=e.element.form&&e.element.form.addEventListener("submit",function(){localStorage.removeItem("smde_"+e.options.autosave.uniqueId)}),this.options.autosave.loaded!==!0&&("string"==typeof localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&""!=localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&(this.codemirror.setValue(localStorage.getItem("smde_"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0),localStorage.setItem("smde_"+this.options.autosave.uniqueId,e.value());var t=document.getElementById("autosaved");if(null!=t&&void 0!=t&&""!=t){var n=new Date,r=n.getHours(),i=n.getMinutes(),o="am",a=r;a>=12&&(a=r-12,o="pm"),0==a&&(a=12),i=10>i?"0"+i:i,t.innerHTML="Autosaved: "+a+":"+i+" "+o}this.autosaveTimeoutId=setTimeout(function(){e.autosave()},this.options.autosave.delay||1e4)}else console.log("SimpleMDE: localStorage not available, cannot autosave")},B.prototype.clearAutosavedValue=function(){if(_()){if(void 0==this.options.autosave||void 0==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("SimpleMDE: You must set a uniqueId to clear the autosave value");localStorage.removeItem("smde_"+this.options.autosave.uniqueId)}else console.log("SimpleMDE: localStorage not available, cannot autosave")},B.prototype.createSideBySide=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;n&&/editor-preview-side/.test(n.className)||(n=document.createElement("div"),n.className="editor-preview-side",t.parentNode.insertBefore(n,t.nextSibling));var r=!1,i=!1;return e.on("scroll",function(e){if(r)return void(r=!1);i=!0;var t=e.getScrollInfo().height-e.getScrollInfo().clientHeight,o=parseFloat(e.getScrollInfo().top)/t,a=(n.scrollHeight-n.clientHeight)*o;n.scrollTop=a}),n.onscroll=function(){if(i)return void(i=!1);r=!0;var t=n.scrollHeight-n.clientHeight,o=parseFloat(n.scrollTop)/t,a=(e.getScrollInfo().height-e.getScrollInfo().clientHeight)*o;e.scrollTo(0,a)},n},B.prototype.createToolbar=function(e){if(e=e||this.options.toolbar,e&&0!==e.length){var t;for(t=0;t<e.length;t++)void 0!=K[e[t]]&&(e[t]=K[e[t]]);var n=document.createElement("div");n.className="editor-toolbar";var r=this,a={};for(r.toolbar=e,t=0;t<e.length;t++)if(("guide"!=e[t].name||r.options.toolbarGuideIcon!==!1)&&!(r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[t].name)||("fullscreen"==e[t].name||"side-by-side"==e[t].name)&&$())){if("|"===e[t]){for(var s=!1,c=t+1;c<e.length;c++)"|"===e[c]||r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[c].name)||(s=!0);if(!s)continue}!function(e){var t;t="|"===e?o():i(e,r.options.toolbarTips,r.options.shortcuts),e.action&&("function"==typeof e.action?t.onclick=function(t){t.preventDefault(),e.action(r)}:"string"==typeof e.action&&(t.href=e.action,t.target="_blank")),a[e.name||e]=t,n.appendChild(t)}(e[t])}r.toolbarElements=a;var u=this.codemirror;u.on("cursorActivity",function(){var e=l(u);for(var t in a)!function(t){var n=a[t];e[t]?n.className+=" active":"fullscreen"!=t&&"side-by-side"!=t&&(n.className=n.className.replace(/\s*active\s*/g,""))}(t)});var f=u.getWrapperElement();return f.parentNode.insertBefore(n,f),n}},B.prototype.createStatusbar=function(e){e=e||this.options.status;var t=this.options,n=this.codemirror;if(e&&0!==e.length){var r,i,o,a=[];for(r=0;r<e.length;r++)if(i=void 0,o=void 0,"object"==typeof e[r])a.push({className:e[r].className,defaultValue:e[r].defaultValue,onUpdate:e[r].onUpdate});else{var l=e[r];"words"===l?(o=function(e){e.innerHTML=W(n.getValue())},i=function(e){e.innerHTML=W(n.getValue())}):"lines"===l?(o=function(e){e.innerHTML=n.lineCount()},i=function(e){e.innerHTML=n.lineCount()}):"cursor"===l?(o=function(e){e.innerHTML="0:0"},i=function(e){var t=n.getCursor();e.innerHTML=t.line+":"+t.ch}):"autosave"===l&&(o=function(e){void 0!=t.autosave&&t.autosave.enabled===!0&&e.setAttribute("id","autosaved")}),a.push({className:l,defaultValue:o,onUpdate:i})}var s=document.createElement("div");for(s.className="editor-statusbar",r=0;r<a.length;r++){var c=a[r],u=document.createElement("span");u.className=c.className,"function"==typeof c.defaultValue&&c.defaultValue(u),"function"==typeof c.onUpdate&&this.codemirror.on("update",function(e,t){return function(){t.onUpdate(e)}}(u,c)),s.appendChild(u)}var f=this.codemirror.getWrapperElement();return f.parentNode.insertBefore(s,f.nextSibling),s}},B.prototype.value=function(e){return void 0===e?this.codemirror.getValue():(this.codemirror.getDoc().setValue(e),this)},B.toggleBold=c,B.toggleItalic=u,B.toggleStrikethrough=f,B.toggleBlockquote=d,B.toggleHeadingSmaller=p,B.toggleHeadingBigger=m,B.toggleHeading1=g,B.toggleHeading2=v,B.toggleHeading3=y,B.toggleCodeBlock=h,B.toggleUnorderedList=x,B.toggleOrderedList=b,B.cleanBlock=w,B.drawLink=k,B.drawImage=S,B.drawTable=C,B.drawHorizontalRule=L,B.undo=T,B.redo=M,B.togglePreview=A,B.toggleSideBySide=N,B.toggleFullScreen=s,B.prototype.toggleBold=function(){c(this)},B.prototype.toggleItalic=function(){u(this)},B.prototype.toggleStrikethrough=function(){f(this)},B.prototype.toggleBlockquote=function(){d(this)},B.prototype.toggleHeadingSmaller=function(){p(this)},B.prototype.toggleHeadingBigger=function(){m(this)},B.prototype.toggleHeading1=function(){g(this)},B.prototype.toggleHeading2=function(){v(this)},B.prototype.toggleHeading3=function(){y(this)},B.prototype.toggleCodeBlock=function(){h(this)},B.prototype.toggleUnorderedList=function(){x(this)},B.prototype.toggleOrderedList=function(){b(this)},B.prototype.cleanBlock=function(){w(this)},B.prototype.drawLink=function(){k(this)},B.prototype.drawImage=function(){S(this)},B.prototype.drawTable=function(){C(this)},B.prototype.drawHorizontalRule=function(){L(this)},B.prototype.undo=function(){T(this)},B.prototype.redo=function(){M(this)},B.prototype.togglePreview=function(){A(this)},B.prototype.toggleSideBySide=function(){N(this)},B.prototype.toggleFullScreen=function(){s(this)},B.prototype.isPreviewActive=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.lastChild;return/editor-preview-active/.test(n.className)},B.prototype.isSideBySideActive=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;return/editor-preview-active-side/.test(n.className)},B.prototype.isFullscreenActive=function(){var e=this.codemirror;return e.getOption("fullScreen")},B.prototype.getState=function(){var e=this.codemirror;return l(e)},B.prototype.toTextArea=function(){var e=this.codemirror,t=e.getWrapperElement();t.parentNode&&(this.gui.toolbar&&t.parentNode.removeChild(this.gui.toolbar),this.gui.statusbar&&t.parentNode.removeChild(this.gui.statusbar),this.gui.sideBySide&&t.parentNode.removeChild(this.gui.sideBySide)),e.toTextArea(),this.autosaveTimeoutId&&(clearTimeout(this.autosaveTimeoutId),this.autosaveTimeoutId=void 0,this.clearAutosavedValue())},t.exports=B},{"./codemirror/tablist":19,codemirror:10,"codemirror-spell-checker":4,"codemirror/addon/display/fullscreen.js":5,"codemirror/addon/display/placeholder.js":6,"codemirror/addon/edit/continuelist.js":7,"codemirror/addon/mode/overlay.js":8,"codemirror/addon/selection/mark-selection.js":9,"codemirror/mode/gfm/gfm.js":11,"codemirror/mode/markdown/markdown.js":12,"codemirror/mode/xml/xml.js":14,marked:17}]},{},[20])(20)}); \ No newline at end of file diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index d92c5538b..732467368 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -684,19 +684,20 @@ module.exports = function (ngApp, events) { // CommentCrudController ngApp.controller('CommentAddController', ['$scope', '$http', function ($scope, $http) { + const MarkdownIt = require("markdown-it"); + const md = new MarkdownIt({html: true}); let vm = this; - let comment = {}; $scope.errors = {}; vm.saveComment = function () { let pageId = $scope.comment.pageId; let comment = $scope.comment.newComment; - let commentHTML = $scope.getCommentHTML(); + let commentHTML = md.render($scope.comment.newComment); $http.post(window.baseUrl(`/ajax/page/${pageId}/comment/`), { text: comment, html: commentHTML }).then(resp => { - $scope.clearInput(); + $scope.comment.newComment = ''; if (!resp.data || resp.data.status !== 'success') { return events.emit('error', trans('error')); } diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index cae07a166..dded45dd7 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -818,53 +818,6 @@ module.exports = function (ngApp, events) { } }; }]); - - - ngApp.directive('simpleMarkdownInput', ['$timeout', function ($timeout) { - return { - restrict: 'A', - scope: { - smdModel: '=', - smdChange: '=', - smdGetContent: '=', - smdClear: '=' - }, - link: function (scope, element, attrs) { - // Set initial model content - element = element.find('textarea').first(); - let simplemde = new SimpleMDE({ - element: element[0], - status: [] - }); - let content = element.val(); - simplemde.value(content) - scope.smdModel = content; - - simplemde.codemirror.on('change', (event) => { - content = simplemde.value(); - $timeout(() => { - scope.smdModel = content; - if (scope.smdChange) { - scope.smdChange(element, content); - } - }); - }); - - if ('smdGetContent' in attrs) { - scope.smdGetContent = function () { - return simplemde.options.previewRender(simplemde.value()); - }; - } - - if ('smdClear' in attrs) { - scope.smdClear = function () { - simplemde.value(''); - scope.smdModel = ''; - }; - } - } - } - }]); ngApp.directive('commentReply', ['$timeout', function ($timeout) { return { diff --git a/resources/assets/sass/_comments.scss b/resources/assets/sass/_comments.scss index 785f9948d..7da319025 100644 --- a/resources/assets/sass/_comments.scss +++ b/resources/assets/sass/_comments.scss @@ -57,4 +57,11 @@ .comment-editor { margin-top: 2em; + + textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 120px; + } } diff --git a/resources/assets/sass/_simplemde.scss b/resources/assets/sass/_simplemde.scss deleted file mode 100644 index 41d944ee3..000000000 --- a/resources/assets/sass/_simplemde.scss +++ /dev/null @@ -1,7 +0,0 @@ -/** - * simplemde v1.11.2 - * Copyright Next Step Webs, Inc. - * @link https://github.com/NextStepWebs/simplemde-markdown-editor - * @license MIT - */ -.CodeMirror{color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px; border: none; box-shadow: none;}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected,.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror{height:auto;min-height:300px;border:1px solid #ddd;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px;font:inherit;z-index:1}.CodeMirror-scroll{min-height:300px}.CodeMirror-fullscreen{background:#fff;position:fixed!important;top:50px;left:0;right:0;bottom:0;height:auto;z-index:9}.CodeMirror-sided{width:50%!important}.editor-toolbar{position:relative;opacity:.6;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;padding:0 10px;border-top:1px solid #bbb;border-left:1px solid #bbb;border-right:1px solid #bbb;border-top-left-radius:4px;border-top-right-radius:4px}.editor-toolbar:after,.editor-toolbar:before{display:block;content:' ';height:1px}.editor-toolbar:before{margin-bottom:8px}.editor-toolbar:after{margin-top:8px}.editor-toolbar:hover,.editor-wrapper input.title:focus,.editor-wrapper input.title:hover{opacity:.8}.editor-toolbar.fullscreen{width:100%;height:50px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-top:10px;padding-bottom:10px;box-sizing:border-box;background:#fff;border:0;position:fixed;top:0;left:0;opacity:1;z-index:9}.editor-toolbar.fullscreen::before{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,1)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);position:fixed;top:0;left:0;margin:0;padding:0}.editor-toolbar.fullscreen::after{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(100%,rgba(255,255,255,1)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);position:fixed;top:0;right:0;margin:0;padding:0}.editor-toolbar a{display:inline-block;text-align:center;text-decoration:none!important;color:#2c3e50!important;width:30px;height:30px;margin:0;border:1px solid transparent;border-radius:3px;cursor:pointer}.editor-toolbar a.active,.editor-toolbar a:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar a:before{line-height:30px}.editor-toolbar i.separator{display:inline-block;width:0;border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;text-indent:-10px;margin:0 6px}.editor-toolbar a.fa-header-x:after{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:65%;vertical-align:text-bottom;position:relative;top:2px}.editor-toolbar a.fa-header-1:after{content:"1"}.editor-toolbar a.fa-header-2:after{content:"2"}.editor-toolbar a.fa-header-3:after{content:"3"}.editor-toolbar a.fa-header-bigger:after{content:"▲"}.editor-toolbar a.fa-header-smaller:after{content:"▼"}.editor-toolbar.disabled-for-preview a:not(.no-disable){pointer-events:none;background:#fff;border-color:transparent;text-shadow:inherit}@media only screen and (max-width:700px){.editor-toolbar a.no-mobile{display:none}}.editor-statusbar{padding:8px 10px;font-size:12px;color:#959694;text-align:right}.editor-statusbar span{display:inline-block;min-width:4em;margin-left:1em}.editor-preview,.editor-preview-side{padding:10px;background:#fafafa;overflow:auto;display:none;box-sizing:border-box}.editor-statusbar .lines:before{content:'lines: '}.editor-statusbar .words:before{content:'words: '}.editor-statusbar .characters:before{content:'characters: '}.editor-preview{position:absolute;width:100%;height:100%;top:0;left:0;z-index:7}.editor-preview-side{position:fixed;bottom:0;width:50%;top:50px;right:0;z-index:9;border:1px solid #ddd}.editor-preview-active,.editor-preview-active-side{display:block}.editor-preview-side>p,.editor-preview>p{margin-top:0}.editor-preview pre,.editor-preview-side pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th,.editor-preview-side table td,.editor-preview-side table th{border:1px solid #ddd;padding:5px}.CodeMirror .CodeMirror-code .cm-tag{color:#63a35c}.CodeMirror .CodeMirror-code .cm-attribute{color:#795da3}.CodeMirror .CodeMirror-code .cm-string{color:#183691}.CodeMirror .CodeMirror-selected{background:#d9d9d9}.CodeMirror .CodeMirror-code .cm-header-1{font-size:200%;line-height:200%}.CodeMirror .CodeMirror-code .cm-header-2{font-size:160%;line-height:160%}.CodeMirror .CodeMirror-code .cm-header-3{font-size:125%;line-height:125%}.CodeMirror .CodeMirror-code .cm-header-4{font-size:110%;line-height:110%}.CodeMirror .CodeMirror-code .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.CodeMirror .CodeMirror-code .cm-link{color:#7f8c8d}.CodeMirror .CodeMirror-code .cm-url{color:#aab2b3}.CodeMirror .CodeMirror-code .cm-strikethrough{text-decoration:line-through}.CodeMirror .CodeMirror-placeholder{opacity:.5}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)} \ No newline at end of file diff --git a/resources/assets/sass/styles.scss b/resources/assets/sass/styles.scss index 60071b9ef..541e9fbaf 100644 --- a/resources/assets/sass/styles.scss +++ b/resources/assets/sass/styles.scss @@ -12,7 +12,6 @@ @import "animations"; @import "tinymce"; @import "highlightjs"; -@import "simplemde"; @import "components"; @import "header"; @import "lists"; diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 11e29976a..610309362 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -239,5 +239,6 @@ return [ * Comments */ 'comment' => 'Comment', - 'comments' => 'Comments' + 'comments' => 'Comments', + 'comment_placeholder' => 'Enter your comments here, markdown supported...' ]; \ No newline at end of file diff --git a/resources/views/comments/add.blade.php b/resources/views/comments/add.blade.php index c221cdbd4..7655675ae 100644 --- a/resources/views/comments/add.blade.php +++ b/resources/views/comments/add.blade.php @@ -1,13 +1,11 @@ <div class="comment-editor" ng-controller="CommentAddController as vm" ng-cloak> -<form novalidate> - <div simple-markdown-input smd-model="comment.newComment" smd-get-content="getCommentHTML" smd-clear="clearInput"> - <textarea name="markdown" rows="3" - @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || - old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> - </div> + <form novalidate> + <textarea name="markdown" rows="3" ng-model="comment.newComment" placeholder="{{ trans('entities.comment_placeholder') }}" + @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || + old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> <input type="hidden" ng-model="pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> <button type="submit" class="button pos" ng-click="vm.saveComment()">Save</button> -</form> + </form> </div> @if($errors->has('markdown')) diff --git a/resources/views/comments/comments.blade.php b/resources/views/comments/comments.blade.php index 107052e87..b3669faa9 100644 --- a/resources/views/comments/comments.blade.php +++ b/resources/views/comments/comments.blade.php @@ -1,6 +1,3 @@ -@section('head') - <script src="{{ baseUrl("/libs/simplemde/simplemde.min.js") }}"></script> -@stop <script type="text/ng-template" id="comment-list-item.html"> @include('comments/list-item') </script> From 03e5d61798e6b8df3b4d74b5f3bb1a96fe8199bb Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Tue, 16 May 2017 00:40:14 +0530 Subject: [PATCH 07/83] #47 Implements the reply and edit functionality for comments. --- app/Comment.php | 22 +++--- app/Http/Controllers/CommentController.php | 23 +++--- app/Repos/CommentRepo.php | 12 +-- resources/assets/js/controllers.js | 61 ++++++++++----- resources/assets/js/directives.js | 77 +++++++++++++++---- resources/views/comments/add.blade.php | 13 ---- .../views/comments/comment-reply.blade.php | 23 +++--- resources/views/comments/comments.blade.php | 4 +- resources/views/comments/list-item.blade.php | 5 +- routes/web.php | 4 +- 10 files changed, 149 insertions(+), 95 deletions(-) delete mode 100644 resources/views/comments/add.blade.php diff --git a/app/Comment.php b/app/Comment.php index 74fcc3fdc..e7df32015 100644 --- a/app/Comment.php +++ b/app/Comment.php @@ -5,8 +5,8 @@ use Illuminate\Support\Facades\DB; class Comment extends Ownable { - protected $fillable = ['text', 'html']; - + protected $fillable = ['text', 'html', 'parent_id']; + /** * Get the entity that this comment belongs to * @return \Illuminate\Database\Eloquent\Relations\MorphTo @@ -15,7 +15,7 @@ class Comment extends Ownable { return $this->morphTo('entity'); } - + /** * Get the page that this comment is in. * @return \Illuminate\Database\Eloquent\Relations\BelongsTo @@ -24,32 +24,32 @@ class Comment extends Ownable { return $this->belongsTo(Page::class); } - + /** * Get the owner of this comment. * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ - public function user() + public function user() { return $this->belongsTo(User::class); } - - public function getCommentsByPage($pageId, $commentId, $pageNum = 0, $limit = 0) { - + + public function getCommentsByPage($pageId, $commentId, $pageNum = 0, $limit = 0) { + $query = static::newQuery(); $query->join('users AS u', 'comments.created_by', '=', 'u.id'); $query->leftJoin('users AS u1', 'comments.updated_by', '=', 'u1.id'); $query->leftJoin('images AS i', 'i.id', '=', 'u.image_id'); $query->selectRaw('comments.id, text, html, comments.created_by, comments.updated_by, comments.created_at, comments.updated_at, ' . 'u.name AS created_by_name, u1.name AS updated_by_name, ' - . '(SELECT count(c.id) FROM bookstack.comments c WHERE c.parent_id = comments.id AND page_id = ?) AS cnt_sub_comments, i.url AS avatar ', + . '(SELECT count(c.id) FROM bookstack.comments c WHERE c.parent_id = comments.id AND page_id = ?) AS cnt_sub_comments, i.url AS avatar ', [$pageId]); - + if (empty($commentId)) { $query->whereRaw('page_id = ? AND parent_id IS NULL', [$pageId]); } else { $query->whereRaw('page_id = ? AND parent_id = ?', [$pageId, $commentId]); - } + } $query->orderBy('created_at'); return $query; } diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index 8e7b1512a..e1729bbee 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -2,18 +2,19 @@ use BookStack\Repos\CommentRepo; use BookStack\Repos\EntityRepo; +use BookStack\Comment; use Illuminate\Http\Request; -use Views; // delete -checkOwnablePermission \ class CommentController extends Controller { protected $entityRepo; - public function __construct(EntityRepo $entityRepo, CommentRepo $commentRepo) + public function __construct(EntityRepo $entityRepo, CommentRepo $commentRepo, Comment $comment) { $this->entityRepo = $entityRepo; $this->commentRepo = $commentRepo; + $this->comment = $comment; parent::__construct(); } @@ -43,10 +44,10 @@ class CommentController extends Controller // create a new comment. $this->checkPermission('comment-create-all'); $comment = $this->commentRepo->create($page, $request->only(['text', 'html', 'parent_id'])); - $respMsg = trans('entities.comment_created'); + $respMsg = trans('entities.comment_created'); } else { // update existing comment - // get comment by ID and check if this user has permission to update. + // get comment by ID and check if this user has permission to update. $comment = $this->comment->findOrFail($commentId); $this->checkOwnablePermission('comment-update', $comment); $this->commentRepo->update($comment, $request->all()); @@ -59,7 +60,7 @@ class CommentController extends Controller ]); } - + public function destroy($id) { $comment = $this->comment->findOrFail($id); $this->checkOwnablePermission('comment-delete', $comment); @@ -67,13 +68,13 @@ class CommentController extends Controller // } - public function getComments($pageId, $commentId = null) { + public function getCommentThread($pageId, $commentId = null) { try { $page = $this->entityRepo->getById('page', $pageId, true); } catch (ModelNotFoundException $e) { return response('Not found', 404); } - + if($page->draft) { // cannot add comments to drafts. return response()->json([ @@ -81,15 +82,15 @@ class CommentController extends Controller 'message' => trans('errors.no_comments_for_draft'), ], 400); } - + $this->checkOwnablePermission('page-view', $page); - + $comments = $this->commentRepo->getCommentsForPage($pageId, $commentId); if (empty($commentId)) { // requesting for parent level comments, send the total count as well. $totalComments = $this->commentRepo->getCommentCount($pageId); - return response()->json(array('success' => true, 'comments'=> $comments, 'total' => $totalComments)); + return response()->json(['success' => true, 'comments'=> $comments, 'total' => $totalComments]); } - return response()->json(array('success' => true, 'comments'=> $comments)); + return response()->json(['success' => true, 'comments'=> $comments]); } } diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index ba34617ed..10b36eb16 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -10,7 +10,7 @@ use BookStack\Page; class CommentRepo { /** * - * @var Comment $comment + * @var Comment $comment */ protected $comment; @@ -25,7 +25,7 @@ class CommentRepo { $comment->fill($data); // new comment $comment->page_id = $page->id; - $comment->created_by = $userId; + $comment->created_by = $userId; $comment->save(); return $comment; } @@ -37,13 +37,13 @@ class CommentRepo { $comment->save(); return $comment; } - - public function getCommentsForPage($pageId, $commentId, $count = 20) { + + public function getCommentsForPage($pageId, $commentId, $count = 20) { // requesting parent comments $query = $this->comment->getCommentsByPage($pageId, $commentId); - return $query->paginate($count); + return $query->paginate($count); } - + public function getCommentCount($pageId) { return $this->comment->where('page_id', '=', $pageId)->count(); } diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 732467368..9d5478690 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -683,29 +683,49 @@ module.exports = function (ngApp, events) { }]); // CommentCrudController - ngApp.controller('CommentAddController', ['$scope', '$http', function ($scope, $http) { + ngApp.controller('CommentReplyController', ['$scope', '$http', function ($scope, $http) { const MarkdownIt = require("markdown-it"); const md = new MarkdownIt({html: true}); let vm = this; $scope.errors = {}; vm.saveComment = function () { - let pageId = $scope.comment.pageId; - let comment = $scope.comment.newComment; - let commentHTML = md.render($scope.comment.newComment); - - $http.post(window.baseUrl(`/ajax/page/${pageId}/comment/`), { + let pageId = $scope.comment.pageId || $scope.pageId; + let comment = $scope.comment.text; + let commentHTML = md.render($scope.comment.text); + let serviceUrl = `/ajax/page/${pageId}/comment/`; + let httpMethod = 'post'; + let errorOp = 'add'; + let reqObj = { text: comment, html: commentHTML - }).then(resp => { - $scope.comment.newComment = ''; + }; + + if ($scope.isEdit === true) { + // this will be set when editing the comment. + serviceUrl = `/ajax/page/${pageId}/comment/${$scope.comment.id}`; + httpMethod = 'put'; + errorOp = 'update'; + } else if ($scope.isReply === true) { + // if its reply, get the parent comment id + reqObj.parent_id = $scope.parentId; + } + $http[httpMethod](window.baseUrl(serviceUrl), reqObj).then(resp => { if (!resp.data || resp.data.status !== 'success') { return events.emit('error', trans('error')); } + if ($scope.isEdit) { + $scope.comment.html = commentHTML; + $scope.$emit('evt.comment-success', $scope.comment.id); + } else { + $scope.comment.text = ''; + $scope.$emit('evt.comment-success', null, true); + } events.emit('success', trans(resp.data.message)); - }, checkError('add')); - - }; - + + }, checkError(errorOp)); + + }; + function checkError(errorGroupName) { $scope.errors[errorGroupName] = {}; return function(response) { @@ -725,19 +745,19 @@ module.exports = function (ngApp, events) { ngApp.controller('CommentListController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { let vm = this; $scope.errors = {}; - $scope.defaultAvatar = defaultAvatar; + $scope.defaultAvatar = defaultAvatar; vm.totalCommentsStr = 'Loading...'; $scope.editorChange = function (content) { console.log(content); } - + $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { if (!resp.data || resp.data.success !== true) { // TODO : Handle error return; } - vm.comments = resp.data.comments.data; + vm.comments = resp.data.comments.data; vm.totalComments = resp.data.total; // TODO : Fetch message from translate. if (vm.totalComments === 0) { @@ -748,20 +768,19 @@ module.exports = function (ngApp, events) { vm.totalCommentsStr = vm.totalComments + ' Comments' } }, checkError('app')); - }); - + }); + vm.loadSubComments = function(event, comment) { event.preventDefault(); $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/${comment.id}/sub-comments`)).then(resp => { - console.log(resp); if (!resp.data || resp.data.success !== true) { return; } - comment.is_loaded = true; - comment.comments = resp.data.comments.data; + comment.is_loaded = true; + comment.comments = resp.data.comments.data; }, checkError('app')); }; - + function checkError(errorGroupName) { $scope.errors[errorGroupName] = {}; return function(response) { diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index dded45dd7..6c556acc9 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -818,29 +818,62 @@ module.exports = function (ngApp, events) { } }; }]); - - ngApp.directive('commentReply', ['$timeout', function ($timeout) { + + ngApp.directive('commentReply', [function () { return { restrict: 'E', templateUrl: 'comment-reply.html', scope: { - + pageId: '=', + parentId: '=' }, - link: function (scope, element, attr) { - + link: function (scope, element) { + scope.isReply = true; + scope.$on('evt.comment-success', function (event) { + // no need for the event to do anything more. + event.stopPropagation(); + event.preventDefault(); + element.remove(); + scope.$destroy(); + }); } } - }]); - ngApp.directive('commentReplyLink', ['$document', '$compile', function ($document, $compile) { - return { + ngApp.directive('commentEdit', [function () { + return { + restrict: 'E', + templateUrl: 'comment-reply.html', + scope: { + comment: '=', + }, + link: function (scope, element) { + scope.isEdit = true; + scope.$on('evt.comment-success', function (event, commentId) { + // no need for the event to do anything more. + event.stopPropagation(); + event.preventDefault(); + if (commentId === scope.comment.id && !scope.isNew) { + element.remove(); + scope.$destroy(); + } + }); + } + } + }]); + + + ngApp.directive('commentReplyLink', ['$document', '$compile', '$http', function ($document, $compile, $http) { + return { + scope: { + comment: '=' + }, link: function (scope, element, attr) { element.on('$destroy', function () { element.off('click'); - scope.$destroy(); + scope.$destroy(); }); - + element.on('click', function () { var $container = element.parents('.comment-box').first(); if (!$container.length) { @@ -848,21 +881,31 @@ module.exports = function (ngApp, events) { return; } if (attr.noCommentReplyDupe) { - removeDupe(); + removeDupe(); } - var compiledHTML = $compile('<comment-reply></comment-reply>')(scope); - $container.append(compiledHTML); + + compileHtml($container, scope, attr.isReply === 'true'); }); } }; - - + + function compileHtml($container, scope, isReply) { + let lnkFunc = null; + if (isReply) { + lnkFunc = $compile('<comment-reply page-id="comment.pageId" parent-id="comment.id"></comment-reply>'); + } else { + lnkFunc = $compile('<comment-edit comment="comment"></comment-add>'); + } + var compiledHTML = lnkFunc(scope); + $container.append(compiledHTML); + } + function removeDupe() { - let $existingElement = $document.find('comment-reply'); + let $existingElement = $document.find('.comments-list comment-reply'); if (!$existingElement.length) { return; } - + $existingElement.remove(); } }]); diff --git a/resources/views/comments/add.blade.php b/resources/views/comments/add.blade.php deleted file mode 100644 index 7655675ae..000000000 --- a/resources/views/comments/add.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -<div class="comment-editor" ng-controller="CommentAddController as vm" ng-cloak> - <form novalidate> - <textarea name="markdown" rows="3" ng-model="comment.newComment" placeholder="{{ trans('entities.comment_placeholder') }}" - @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || - old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> - <input type="hidden" ng-model="pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> - <button type="submit" class="button pos" ng-click="vm.saveComment()">Save</button> - </form> -</div> - -@if($errors->has('markdown')) - <div class="text-neg text-small">{{ $errors->first('markdown') }}</div> -@endif \ No newline at end of file diff --git a/resources/views/comments/comment-reply.blade.php b/resources/views/comments/comment-reply.blade.php index d5ceb55c6..74a13edff 100644 --- a/resources/views/comments/comment-reply.blade.php +++ b/resources/views/comments/comment-reply.blade.php @@ -1,10 +1,13 @@ -<!-- TODO :: needs to be merged with add.blade.php --> -<form novalidate> - <div simple-markdown-input smd-model="comment.newComment" smd-get-content="getCommentHTML" smd-clear="clearInput"> - <textarea name="markdown" rows="3" - @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || - old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> - </div> - <input type="hidden" ng-model="pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> - <button type="submit" class="button pos" ng-click="vm.saveComment()">Save</button> -</form> \ No newline at end of file +<div class="comment-editor" ng-controller="CommentReplyController as vm" ng-cloak> + <form novalidate> + <textarea name="markdown" rows="3" ng-model="comment.text" placeholder="{{ trans('entities.comment_placeholder') }}" + @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || + old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> + <input type="hidden" ng-model="comment.pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> + <button type="submit" class="button pos" ng-click="vm.saveComment(isReply)">Save</button> + </form> +</div> + +@if($errors->has('markdown')) + <div class="text-neg text-small">{{ $errors->first('markdown') }}</div> +@endif \ No newline at end of file diff --git a/resources/views/comments/comments.blade.php b/resources/views/comments/comments.blade.php index b3669faa9..8c4cb9860 100644 --- a/resources/views/comments/comments.blade.php +++ b/resources/views/comments/comments.blade.php @@ -2,7 +2,7 @@ @include('comments/list-item') </script> <script type="text/ng-template" id="comment-reply.html"> - @include('comments/comment-reply') + @include('comments/comment-reply', ['pageId' => $pageId]) </script> <div ng-controller="CommentListController as vm" ng-init="pageId = <?= $page->id ?>" class="comments-list" ng-cloak> <h3>@{{vm.totalCommentsStr}}</h3> @@ -13,4 +13,4 @@ </div> </div> </div> -@include('comments/add', ['pageId' => $pageId]) \ No newline at end of file +@include('comments/comment-reply', ['pageId' => $pageId]) \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index aecc0c26b..290fe4a8b 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -6,12 +6,13 @@ <div class="comment-header"> @{{ ::comment.created_by_name }} </div> - <div ng-bind-html="::comment.html" class="comment-body"> + <div ng-bind-html="comment.html" class="comment-body"> </div> <div class="comment-actions"> <ul> - <li><a href="#" comment-reply-link no-comment-reply-dupe="true">Reply</a></li> + <li><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> + <li><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment">Edit</a></li> <li><a href="#">@{{::comment.created_at}}</a></li> </ul> </div> diff --git a/routes/web.php b/routes/web.php index 2ac212e62..076bc8110 100644 --- a/routes/web.php +++ b/routes/web.php @@ -123,8 +123,8 @@ Route::group(['middleware' => 'auth'], function () { Route::post('/ajax/page/{pageId}/comment/', 'CommentController@save'); Route::put('/ajax/page/{pageId}/comment/{commentId}', 'CommentController@save'); Route::delete('/ajax/comment/{id}', 'CommentController@destroy'); - Route::get('/ajax/page/{pageId}/comments/{commentId}/sub-comments', 'CommentController@getComments'); - Route::get('/ajax/page/{pageId}/comments/', 'CommentController@getComments'); + Route::get('/ajax/page/{pageId}/comments/{commentId}/sub-comments', 'CommentController@getCommentThread'); + Route::get('/ajax/page/{pageId}/comments/', 'CommentController@getCommentThread'); // Links Route::get('/link/{id}', 'PageController@redirectFromLink'); From 0ff5aad9c0ff84057300f7565d41ab64ff2bc267 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Wed, 24 May 2017 07:02:11 +0530 Subject: [PATCH 08/83] #47 Hides the reply button based if comments are 2 levels deep. --- resources/assets/js/controllers.js | 6 +++--- resources/views/comments/list-item.blade.php | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 9d5478690..198089056 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -745,11 +745,11 @@ module.exports = function (ngApp, events) { ngApp.controller('CommentListController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { let vm = this; $scope.errors = {}; + // keep track of comment levels + $scope.level = 1; $scope.defaultAvatar = defaultAvatar; vm.totalCommentsStr = 'Loading...'; - $scope.editorChange = function (content) { - console.log(content); - } + $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 290fe4a8b..c267d619b 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -11,17 +11,17 @@ </div> <div class="comment-actions"> <ul> - <li><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> + <li ng-if="level < 3"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> <li><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment">Edit</a></li> - <li><a href="#">@{{::comment.created_at}}</a></li> - </ul> + <li><a href="#">@{{::comment.created_at}}</a></li> + </ul> </div> <a href="#" ng-click="vm.loadSubComments($event, comment, $index)" class="load-more-comments" ng-if="comment.cnt_sub_comments > 0 && !comment.is_loaded"> Load @{{::comment.cnt_sub_comments}} more comment(s) - </a> - <div class="comment-box" ng-repeat="comment in comments = comment.comments track by comment.id"> + </a> + <div class="comment-box" ng-repeat="comment in comments = comment.comments track by comment.id" ng-init="level = level + 1"> <div ng-include src="'comment-list-item.html'"> </div> - </div> - </div> + </div> + </div> </div> \ No newline at end of file From 34802ff8a6ead132ce963ba711849b58dc0f46f3 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Thu, 25 May 2017 08:02:49 +0530 Subject: [PATCH 09/83] #47 Inserts null for updated_at when the user is creating a comment. --- app/Repos/CommentRepo.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index 10b36eb16..7e4955d55 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -26,6 +26,7 @@ class CommentRepo { // new comment $comment->page_id = $page->id; $comment->created_by = $userId; + $comment->updated_at = null; $comment->save(); return $comment; } From 1a1e71cd60925d92aa9d23546e73bb33eedd6a1f Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Thu, 25 May 2017 08:03:27 +0530 Subject: [PATCH 10/83] #47 Adds two attributes updated and created to display time to user. --- app/Comment.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/Comment.php b/app/Comment.php index e7df32015..34abdcf29 100644 --- a/app/Comment.php +++ b/app/Comment.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\DB; class Comment extends Ownable { protected $fillable = ['text', 'html', 'parent_id']; - + protected $appends = ['created', 'updated']; /** * Get the entity that this comment belongs to * @return \Illuminate\Database\Eloquent\Relations\MorphTo @@ -53,4 +53,23 @@ class Comment extends Ownable $query->orderBy('created_at'); return $query; } + + public function getCreatedAttribute() { + $created = [ + 'day_time_str' => $this->created_at->toDayDateTimeString(), + 'diff' => $this->created_at->diffForHumans() + ]; + return $created; + } + + public function getUpdatedAttribute() { + if (empty($this->updated_at)) { + return null; + } + $updated = [ + 'day_time_str' => $this->updated_at->toDayDateTimeString(), + 'diff' => $this->updated_at->diffForHumans() + ]; + return $updated; + } } From 9a97995f181c13c225f62b1b582f6bf802dd6578 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Thu, 25 May 2017 08:04:19 +0530 Subject: [PATCH 11/83] #47 Displays the time for comments and border bottom for sub comments. --- resources/assets/sass/_comments.scss | 44 +++++++++++++------- resources/views/comments/list-item.blade.php | 15 ++++--- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/resources/assets/sass/_comments.scss b/resources/assets/sass/_comments.scss index 7da319025..7d7cb486a 100644 --- a/resources/assets/sass/_comments.scss +++ b/resources/assets/sass/_comments.scss @@ -2,49 +2,63 @@ .comment-box { border-bottom: 1px solid $comment-border; } - + .comment-box:last-child { border-bottom: none; } + .load-more-comments { + font-size: 0.8em; + margin-top: -1px; + margin-bottom: 6px; + } } -.page-comment { +.page-comment { .comment-container { margin-left: 42px; } - + .comment-actions { - font-size: 0.8em; - padding-bottom: 4px; + font-size: 0.8em; + padding-bottom: 2px; + ul { padding-left: 0px; - margin-bottom: 5px; + margin-bottom: 2px; } li { float: left; list-style-type: none; } - + li:after { content: '•'; color: #707070; padding: 0 5px; font-size: 1em; } - + li:last-child:after { content: none; } } - + + .comment-actions.has-border { + border-bottom: 1px solid #DDD; + } + + .comment-actions.has-border:last-child { + border-bottom: 0px; + } + .comment-header { font-size: 1.25em; margin-top: 0.6em; } - - .comment-body { - + + .comment-body p { + margin-bottom: 1em; } - + .user-image { float: left; margin-right: 10px; @@ -52,12 +66,12 @@ img { width: 100%; } - } + } } .comment-editor { margin-top: 2em; - + textarea { display: block; width: 100%; diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index c267d619b..ca8b58625 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -1,4 +1,4 @@ -<div class='page-comment'> +<div class='page-comment' id="comment-@{{::pageId}}-@{{::comment.id}}"> <div class="user-image"> <img ng-src="@{{::defaultAvatar}}" alt="user avatar"> </div> @@ -9,16 +9,19 @@ <div ng-bind-html="comment.html" class="comment-body"> </div> - <div class="comment-actions"> + <div class="comment-actions" ng-class="{'has-border': comment.cnt_sub_comments === 0 || comment.is_loaded}"> <ul> <li ng-if="level < 3"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> <li><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment">Edit</a></li> - <li><a href="#">@{{::comment.created_at}}</a></li> + <li>Created <a title="@{{::comment.created.day_time_str}}" href="#comment-@{{::comment.id}}-@{{::pageId}}">@{{::comment.created.diff}}</a></li> + <li ng-if="comment.updated"><span title="@{{::comment.updated.day_time_str}}">Updated @{{::comment.updated.diff}}</span></li> </ul> </div> - <a href="#" ng-click="vm.loadSubComments($event, comment, $index)" class="load-more-comments" ng-if="comment.cnt_sub_comments > 0 && !comment.is_loaded"> - Load @{{::comment.cnt_sub_comments}} more comment(s) - </a> + <div class="load-more-comments" ng-if="comment.cnt_sub_comments > 0 && !comment.is_loaded"> + <a href="#" ng-click="vm.loadSubComments($event, comment, $index)"> + Load @{{::comment.cnt_sub_comments}} more comment(s) + </a> + </div> <div class="comment-box" ng-repeat="comment in comments = comment.comments track by comment.id" ng-init="level = level + 1"> <div ng-include src="'comment-list-item.html'"> </div> From 860d4d4be5eb7b1d4b13fcc31bf5fe3eafb01a33 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Tue, 30 May 2017 09:02:47 +0530 Subject: [PATCH 12/83] #47 - Changes the way we are handling fetching of data for the comment section. --- app/Comment.php | 46 +++++++++++++------ app/Http/Controllers/CommentController.php | 19 ++++---- app/Repos/CommentRepo.php | 47 +++++++++++++++++--- resources/assets/js/controllers.js | 32 ++++++------- resources/assets/js/directives.js | 7 ++- resources/assets/sass/_comments.scss | 11 ++--- resources/views/comments/comments.blade.php | 12 ++--- resources/views/comments/list-item.blade.php | 16 +++---- routes/web.php | 3 +- 9 files changed, 119 insertions(+), 74 deletions(-) diff --git a/app/Comment.php b/app/Comment.php index 34abdcf29..8588982e5 100644 --- a/app/Comment.php +++ b/app/Comment.php @@ -1,12 +1,12 @@ <?php namespace BookStack; -use Illuminate\Support\Facades\DB; class Comment extends Ownable { + public $sub_comments = []; protected $fillable = ['text', 'html', 'parent_id']; - protected $appends = ['created', 'updated']; + protected $appends = ['created', 'updated', 'sub_comments']; /** * Get the entity that this comment belongs to * @return \Illuminate\Database\Eloquent\Relations\MorphTo @@ -34,24 +34,38 @@ class Comment extends Ownable return $this->belongsTo(User::class); } - public function getCommentsByPage($pageId, $commentId, $pageNum = 0, $limit = 0) { - + public function getPageComments($pageId) { $query = static::newQuery(); $query->join('users AS u', 'comments.created_by', '=', 'u.id'); $query->leftJoin('users AS u1', 'comments.updated_by', '=', 'u1.id'); $query->leftJoin('images AS i', 'i.id', '=', 'u.image_id'); - $query->selectRaw('comments.id, text, html, comments.created_by, comments.updated_by, comments.created_at, comments.updated_at, ' + $query->selectRaw('comments.id, text, html, comments.created_by, comments.updated_by, ' + . 'comments.created_at, comments.updated_at, comments.parent_id, ' . 'u.name AS created_by_name, u1.name AS updated_by_name, ' - . '(SELECT count(c.id) FROM bookstack.comments c WHERE c.parent_id = comments.id AND page_id = ?) AS cnt_sub_comments, i.url AS avatar ', - [$pageId]); - - if (empty($commentId)) { - $query->whereRaw('page_id = ? AND parent_id IS NULL', [$pageId]); - } else { - $query->whereRaw('page_id = ? AND parent_id = ?', [$pageId, $commentId]); - } + . 'i.url AS avatar '); + $query->whereRaw('page_id = ?', [$pageId]); $query->orderBy('created_at'); - return $query; + return $query->get(); + } + + public function getAllPageComments($pageId) { + return self::where('page_id', '=', $pageId)->with(['createdBy' => function($query) { + $query->select('id', 'name', 'image_id'); + }, 'updatedBy' => function($query) { + $query->select('id', 'name'); + }, 'createdBy.avatar' => function ($query) { + $query->select('id', 'path', 'url'); + }])->get(); + } + + public function getCommentById($commentId) { + return self::where('id', '=', $commentId)->with(['createdBy' => function($query) { + $query->select('id', 'name', 'image_id'); + }, 'updatedBy' => function($query) { + $query->select('id', 'name'); + }, 'createdBy.avatar' => function ($query) { + $query->select('id', 'path', 'url'); + }])->first(); } public function getCreatedAttribute() { @@ -72,4 +86,8 @@ class Comment extends Ownable ]; return $updated; } + + public function getSubCommentsAttribute() { + return $this->sub_comments; + } } diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index e1729bbee..29ccdf5a7 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -54,9 +54,12 @@ class CommentController extends Controller $respMsg = trans('entities.comment_updated'); } + $comment = $this->commentRepo->getCommentById($comment->id); + return response()->json([ 'status' => 'success', - 'message' => $respMsg + 'message' => $respMsg, + 'comment' => $comment ]); } @@ -64,11 +67,10 @@ class CommentController extends Controller public function destroy($id) { $comment = $this->comment->findOrFail($id); $this->checkOwnablePermission('comment-delete', $comment); - - // } - public function getCommentThread($pageId, $commentId = null) { + + public function getPageComments($pageId) { try { $page = $this->entityRepo->getById('page', $pageId, true); } catch (ModelNotFoundException $e) { @@ -85,12 +87,7 @@ class CommentController extends Controller $this->checkOwnablePermission('page-view', $page); - $comments = $this->commentRepo->getCommentsForPage($pageId, $commentId); - if (empty($commentId)) { - // requesting for parent level comments, send the total count as well. - $totalComments = $this->commentRepo->getCommentCount($pageId); - return response()->json(['success' => true, 'comments'=> $comments, 'total' => $totalComments]); - } - return response()->json(['success' => true, 'comments'=> $comments]); + $comments = $this->commentRepo->getPageComments($pageId); + return response()->json(['success' => true, 'comments'=> $comments['comments'], 'total' => $comments['total']]); } } diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index 7e4955d55..7d0c4ebd7 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -39,13 +39,48 @@ class CommentRepo { return $comment; } - public function getCommentsForPage($pageId, $commentId, $count = 20) { - // requesting parent comments - $query = $this->comment->getCommentsByPage($pageId, $commentId); - return $query->paginate($count); + public function getPageComments($pageId) { + $comments = $this->comment->getAllPageComments($pageId); + $index = []; + $totalComments = count($comments); + // normalizing the response. + foreach($comments as &$comment) { + $comment = $this->normalizeComment($comment); + $parentId = $comment->parent_id; + if (empty($parentId)) { + $index[$comment->id] = $comment; + continue; + } + + if (empty($index[$parentId])) { + // weird condition should not happen. + continue; + } + if (empty($index[$parentId]->sub_comments)) { + $index[$parentId]->sub_comments = []; + } + array_push($index[$parentId]->sub_comments, $comment); + $index[$comment->id] = $comment; + } + return [ + 'comments' => $comments, + 'total' => $totalComments + ]; } - public function getCommentCount($pageId) { - return $this->comment->where('page_id', '=', $pageId)->count(); + public function getCommentById($commentId) { + return $this->normalizeComment($this->comment->getCommentById($commentId)); + } + + private function normalizeComment($comment) { + if (empty($comment)) { + return; + } + $comment->createdBy->avatar_url = $comment->createdBy->getAvatar(50); + $comment->createdBy->profile_url = $comment->createdBy->getProfileUrl(); + if (!empty($comment->updatedBy)) { + $comment->updatedBy->profile_url = $comment->updatedBy->getProfileUrl(); + } + return $comment; } } \ No newline at end of file diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 198089056..f64d7c038 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -714,10 +714,18 @@ module.exports = function (ngApp, events) { return events.emit('error', trans('error')); } if ($scope.isEdit) { - $scope.comment.html = commentHTML; + $scope.comment.html = resp.data.comment.html; + $scope.comment.text = resp.data.comment.text; + $scope.comment.updated = resp.data.comment.updated; + $scope.comment.updated_by = resp.data.comment.updated_by; $scope.$emit('evt.comment-success', $scope.comment.id); } else { $scope.comment.text = ''; + if ($scope.isReply === true && $scope.parent.sub_comments) { + $scope.parent.sub_comments.push(resp.data.comment); + } else { + $scope.$emit('evt.new-comment', resp.data.comment); + } $scope.$emit('evt.comment-success', null, true); } events.emit('success', trans(resp.data.message)); @@ -747,9 +755,14 @@ module.exports = function (ngApp, events) { $scope.errors = {}; // keep track of comment levels $scope.level = 1; - $scope.defaultAvatar = defaultAvatar; vm.totalCommentsStr = 'Loading...'; + $scope.$on('evt.new-comment', function (event, comment) { + // add the comment to the comment list. + vm.comments.push(comment); + event.stopPropagation(); + event.preventDefault(); + }); $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { @@ -757,7 +770,7 @@ module.exports = function (ngApp, events) { // TODO : Handle error return; } - vm.comments = resp.data.comments.data; + vm.comments = resp.data.comments; vm.totalComments = resp.data.total; // TODO : Fetch message from translate. if (vm.totalComments === 0) { @@ -770,21 +783,10 @@ module.exports = function (ngApp, events) { }, checkError('app')); }); - vm.loadSubComments = function(event, comment) { - event.preventDefault(); - $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/${comment.id}/sub-comments`)).then(resp => { - if (!resp.data || resp.data.success !== true) { - return; - } - comment.is_loaded = true; - comment.comments = resp.data.comments.data; - }, checkError('app')); - }; - function checkError(errorGroupName) { $scope.errors[errorGroupName] = {}; return function(response) { - console.log(resp); + console.log(response); } } }]); diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 6c556acc9..ff0f93cfa 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -825,10 +825,12 @@ module.exports = function (ngApp, events) { templateUrl: 'comment-reply.html', scope: { pageId: '=', - parentId: '=' + parentId: '=', + parent: '=' }, link: function (scope, element) { scope.isReply = true; + element.find('textarea').focus(); scope.$on('evt.comment-success', function (event) { // no need for the event to do anything more. event.stopPropagation(); @@ -849,6 +851,7 @@ module.exports = function (ngApp, events) { }, link: function (scope, element) { scope.isEdit = true; + element.find('textarea').focus(); scope.$on('evt.comment-success', function (event, commentId) { // no need for the event to do anything more. event.stopPropagation(); @@ -892,7 +895,7 @@ module.exports = function (ngApp, events) { function compileHtml($container, scope, isReply) { let lnkFunc = null; if (isReply) { - lnkFunc = $compile('<comment-reply page-id="comment.pageId" parent-id="comment.id"></comment-reply>'); + lnkFunc = $compile('<comment-reply page-id="comment.pageId" parent-id="comment.id" parent="comment"></comment-reply>'); } else { lnkFunc = $compile('<comment-edit comment="comment"></comment-add>'); } diff --git a/resources/assets/sass/_comments.scss b/resources/assets/sass/_comments.scss index 7d7cb486a..0328341c3 100644 --- a/resources/assets/sass/_comments.scss +++ b/resources/assets/sass/_comments.scss @@ -4,12 +4,7 @@ } .comment-box:last-child { - border-bottom: none; - } - .load-more-comments { - font-size: 0.8em; - margin-top: -1px; - margin-bottom: 6px; + border-bottom: 0px; } } .page-comment { @@ -42,11 +37,11 @@ } } - .comment-actions.has-border { + .comment-actions { border-bottom: 1px solid #DDD; } - .comment-actions.has-border:last-child { + .comment-actions:last-child { border-bottom: 0px; } diff --git a/resources/views/comments/comments.blade.php b/resources/views/comments/comments.blade.php index 8c4cb9860..93e7ebc05 100644 --- a/resources/views/comments/comments.blade.php +++ b/resources/views/comments/comments.blade.php @@ -4,13 +4,13 @@ <script type="text/ng-template" id="comment-reply.html"> @include('comments/comment-reply', ['pageId' => $pageId]) </script> -<div ng-controller="CommentListController as vm" ng-init="pageId = <?= $page->id ?>" class="comments-list" ng-cloak> +<div ng-controller="CommentListController as vm" ng-init="pageId = <?= $page->id ?>" class="comments-list" ng-cloak> <h3>@{{vm.totalCommentsStr}}</h3> -<hr> - <div class="comment-box" ng-repeat="comment in vm.comments track by comment.id"> +<hr> + <div class="comment-box" ng-repeat="comment in vm.comments track by comment.id"> <div ng-include src="'comment-list-item.html'"> - + </div> </div> -</div> -@include('comments/comment-reply', ['pageId' => $pageId]) \ No newline at end of file + @include('comments/comment-reply', ['pageId' => $pageId]) +</div> \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index ca8b58625..46af1a862 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -1,28 +1,24 @@ <div class='page-comment' id="comment-@{{::pageId}}-@{{::comment.id}}"> <div class="user-image"> - <img ng-src="@{{::defaultAvatar}}" alt="user avatar"> + <img ng-src="@{{::comment.created_by.avatar_url}}" alt="user avatar"> </div> <div class="comment-container"> <div class="comment-header"> - @{{ ::comment.created_by_name }} + <a href="@{{::comment.created_by.profile_url}}">@{{ ::comment.created_by.name }}</a> </div> <div ng-bind-html="comment.html" class="comment-body"> </div> - <div class="comment-actions" ng-class="{'has-border': comment.cnt_sub_comments === 0 || comment.is_loaded}"> + <div class="comment-actions"> <ul> <li ng-if="level < 3"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> <li><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment">Edit</a></li> <li>Created <a title="@{{::comment.created.day_time_str}}" href="#comment-@{{::comment.id}}-@{{::pageId}}">@{{::comment.created.diff}}</a></li> - <li ng-if="comment.updated"><span title="@{{::comment.updated.day_time_str}}">Updated @{{::comment.updated.diff}}</span></li> + <li ng-if="comment.updated"><span title="@{{comment.updated.day_time_str}}">Updated @{{comment.updated.diff}} by + <a href="@{{comment.updated_by.profile_url}}">@{{comment.updated_by.name}}</a></span></li> </ul> </div> - <div class="load-more-comments" ng-if="comment.cnt_sub_comments > 0 && !comment.is_loaded"> - <a href="#" ng-click="vm.loadSubComments($event, comment, $index)"> - Load @{{::comment.cnt_sub_comments}} more comment(s) - </a> - </div> - <div class="comment-box" ng-repeat="comment in comments = comment.comments track by comment.id" ng-init="level = level + 1"> + <div class="comment-box" ng-repeat="comment in comments = comment.sub_comments track by comment.id" ng-init="level = level + 1"> <div ng-include src="'comment-list-item.html'"> </div> </div> diff --git a/routes/web.php b/routes/web.php index 076bc8110..463e4e77b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -123,8 +123,7 @@ Route::group(['middleware' => 'auth'], function () { Route::post('/ajax/page/{pageId}/comment/', 'CommentController@save'); Route::put('/ajax/page/{pageId}/comment/{commentId}', 'CommentController@save'); Route::delete('/ajax/comment/{id}', 'CommentController@destroy'); - Route::get('/ajax/page/{pageId}/comments/{commentId}/sub-comments', 'CommentController@getCommentThread'); - Route::get('/ajax/page/{pageId}/comments/', 'CommentController@getCommentThread'); + Route::get('/ajax/page/{pageId}/comments/', 'CommentController@getPageComments'); // Links Route::get('/link/{id}', 'PageController@redirectFromLink'); From 2fd421b115132cdea97ec5ccbbab412e02659ab7 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sun, 4 Jun 2017 11:17:14 +0530 Subject: [PATCH 13/83] #47 - Adds comment level permissions to the front-end. --- app/Http/Controllers/CommentController.php | 9 ++++++++- app/Http/Controllers/PageController.php | 9 ++------- app/Repos/CommentRepo.php | 9 ++++++--- resources/assets/js/controllers.js | 19 +++++++++++++++++++ resources/assets/js/directives.js | 2 +- resources/views/comments/comments.blade.php | 4 +++- resources/views/comments/list-item.blade.php | 4 ++-- 7 files changed, 41 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index 29ccdf5a7..3a267193d 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -88,6 +88,13 @@ class CommentController extends Controller $this->checkOwnablePermission('page-view', $page); $comments = $this->commentRepo->getPageComments($pageId); - return response()->json(['success' => true, 'comments'=> $comments['comments'], 'total' => $comments['total']]); + return response()->json(['success' => true, 'comments'=> $comments['comments'], + 'total' => $comments['total'], 'permissions' => [ + 'comment_create' => $this->currentUser->can('comment-create-all'), + 'comment_update_own' => $this->currentUser->can('comment-update-own'), + 'comment_update_all' => $this->currentUser->can('comment-update-all'), + 'comment_delete_all' => $this->currentUser->can('comment-delete-all'), + 'comment_delete_own' => $this->currentUser->can('comment-delete-own'), + ], 'user_id' => $this->currentUser->id]); } } diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 736197213..9a8525c23 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -161,7 +161,7 @@ class PageController extends Controller $pageContent = $this->entityRepo->renderPage($page); $sidebarTree = $this->entityRepo->getBookChildren($page->book); $pageNav = $this->entityRepo->getPageNav($pageContent); - + Views::add($page); $this->setPageTitle($page->getShortName()); return view('pages/show', [ @@ -376,7 +376,7 @@ class PageController extends Controller $page->fill($revision->toArray()); $this->setPageTitle(trans('entities.pages_revision_named', ['pageName' => $page->getShortName()])); - + return view('pages/revision', [ 'page' => $page, 'book' => $page->book, @@ -590,9 +590,4 @@ class PageController extends Controller return redirect($page->getUrl()); } - public function getLastXComments($pageId) - { - // $this->checkOwnablePermission('page-view', $page); - } - } diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index 7d0c4ebd7..83847239f 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -43,11 +43,14 @@ class CommentRepo { $comments = $this->comment->getAllPageComments($pageId); $index = []; $totalComments = count($comments); + $finalCommentList = []; + // normalizing the response. - foreach($comments as &$comment) { - $comment = $this->normalizeComment($comment); + for ($i = 0; $i < count($comments); ++$i) { + $comment = $this->normalizeComment($comments[$i]); $parentId = $comment->parent_id; if (empty($parentId)) { + $finalCommentList[] = $comment; $index[$comment->id] = $comment; continue; } @@ -63,7 +66,7 @@ class CommentRepo { $index[$comment->id] = $comment; } return [ - 'comments' => $comments, + 'comments' => $finalCommentList, 'total' => $totalComments ]; } diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index f64d7c038..4763f9867 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -756,6 +756,7 @@ module.exports = function (ngApp, events) { // keep track of comment levels $scope.level = 1; vm.totalCommentsStr = 'Loading...'; + vm.permissions = {}; $scope.$on('evt.new-comment', function (event, comment) { // add the comment to the comment list. @@ -764,6 +765,21 @@ module.exports = function (ngApp, events) { event.preventDefault(); }); + vm.canEdit = function (comment) { + if (vm.permissions.comment_update_all) { + return true; + } + + if (vm.permissions.comment_update_own && comment.created_by.id === vm.current_user_id) { + return true; + } + return false; + } + + vm.canComment = function () { + return vm.permissions.comment_create; + } + $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { if (!resp.data || resp.data.success !== true) { @@ -772,6 +788,9 @@ module.exports = function (ngApp, events) { } vm.comments = resp.data.comments; vm.totalComments = resp.data.total; + vm.permissions = resp.data.permissions; + vm.current_user_id = resp.data.user_id; + // TODO : Fetch message from translate. if (vm.totalComments === 0) { vm.totalCommentsStr = 'No comments found.'; diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 278e0f8c6..0929a9cf4 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -908,7 +908,7 @@ module.exports = function (ngApp, events) { } function removeDupe() { - let $existingElement = $document.find('.comments-list comment-reply'); + let $existingElement = $document.find('.comments-list comment-reply, .comments-list comment-edit'); if (!$existingElement.length) { return; } diff --git a/resources/views/comments/comments.blade.php b/resources/views/comments/comments.blade.php index 93e7ebc05..ffa75cfed 100644 --- a/resources/views/comments/comments.blade.php +++ b/resources/views/comments/comments.blade.php @@ -12,5 +12,7 @@ </div> </div> - @include('comments/comment-reply', ['pageId' => $pageId]) + <div ng-if="::vm.canComment()"> + @include('comments/comment-reply', ['pageId' => $pageId]) + </div> </div> \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 46af1a862..67355c586 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -11,8 +11,8 @@ </div> <div class="comment-actions"> <ul> - <li ng-if="level < 3"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> - <li><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment">Edit</a></li> + <li ng-if="::(level < 3 && vm.canComment())"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> + <li ng-if="::vm.canEdit(comment)"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >Edit</a></li> <li>Created <a title="@{{::comment.created.day_time_str}}" href="#comment-@{{::comment.id}}-@{{::pageId}}">@{{::comment.created.diff}}</a></li> <li ng-if="comment.updated"><span title="@{{comment.updated.day_time_str}}">Updated @{{comment.updated.diff}} by <a href="@{{comment.updated_by.profile_url}}">@{{comment.updated_by.name}}</a></span></li> From 9558f84b979b45d6f011553a60d100973a21d48e Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sun, 4 Jun 2017 18:52:44 +0530 Subject: [PATCH 14/83] #47 - Adds functionality to delete a comment. Also reduces the number of watchers. --- app/Http/Controllers/CommentController.php | 8 +++ app/Repos/CommentRepo.php | 18 +++++- ...7_06_04_060012_comments_add_active_col.php | 38 +++++++++++ resources/assets/js/controllers.js | 64 ++++++++++++++++--- resources/assets/js/directives.js | 22 ++++++- resources/views/comments/list-item.blade.php | 12 ++-- 6 files changed, 147 insertions(+), 15 deletions(-) create mode 100644 database/migrations/2017_06_04_060012_comments_add_active_col.php diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index 3a267193d..a08279e8c 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -67,6 +67,14 @@ class CommentController extends Controller public function destroy($id) { $comment = $this->comment->findOrFail($id); $this->checkOwnablePermission('comment-delete', $comment); + $this->commentRepo->delete($comment); + $comment = $this->commentRepo->getCommentById($comment->id); + + return response()->json([ + 'success' => true, + 'message' => trans('entities.comment_deleted'), + 'comment' => $comment + ]); } diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index 83847239f..55af0fe12 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -31,10 +31,26 @@ class CommentRepo { return $comment; } - public function update($comment, $input) { + public function update($comment, $input, $activeOnly = true) { $userId = user()->id; $comment->updated_by = $userId; $comment->fill($input); + + // only update active comments by default. + $whereClause = ['active' => 1]; + if (!$activeOnly) { + $whereClause = []; + } + $comment->update($whereClause); + return $comment; + } + + public function delete($comment) { + $comment->text = trans('errors.cannot_add_comment_to_draft'); + $comment->html = trans('errors.cannot_add_comment_to_draft'); + $comment->active = false; + $userId = user()->id; + $comment->updated_by = $userId; $comment->save(); return $comment; } diff --git a/database/migrations/2017_06_04_060012_comments_add_active_col.php b/database/migrations/2017_06_04_060012_comments_add_active_col.php new file mode 100644 index 000000000..3c6dd1f33 --- /dev/null +++ b/database/migrations/2017_06_04_060012_comments_add_active_col.php @@ -0,0 +1,38 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CommentsAddActiveCol extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('comments', function (Blueprint $table) { + // add column active + $table->boolean('active')->default(true); + $table->dropIndex('comments_page_id_parent_id_index'); + $table->index(['page_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('comments', function (Blueprint $table) { + // reversing the schema + $table->dropIndex('comments_page_id_index'); + $table->dropColumn('active'); + $table->index(['page_id', 'parent_id']); + }); + } +} diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 4763f9867..0a4e7b333 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -683,11 +683,12 @@ module.exports = function (ngApp, events) { }]); // CommentCrudController - ngApp.controller('CommentReplyController', ['$scope', '$http', function ($scope, $http) { + ngApp.controller('CommentReplyController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { const MarkdownIt = require("markdown-it"); const md = new MarkdownIt({html: true}); let vm = this; $scope.errors = {}; + vm.saveComment = function () { let pageId = $scope.comment.pageId || $scope.pageId; let comment = $scope.comment.text; @@ -713,11 +714,9 @@ module.exports = function (ngApp, events) { if (!resp.data || resp.data.status !== 'success') { return events.emit('error', trans('error')); } + // hide the comments first, and then retrigger the refresh if ($scope.isEdit) { - $scope.comment.html = resp.data.comment.html; - $scope.comment.text = resp.data.comment.text; - $scope.comment.updated = resp.data.comment.updated; - $scope.comment.updated_by = resp.data.comment.updated_by; + updateComment($scope.comment, resp.data); $scope.$emit('evt.comment-success', $scope.comment.id); } else { $scope.comment.text = ''; @@ -728,6 +727,11 @@ module.exports = function (ngApp, events) { } $scope.$emit('evt.comment-success', null, true); } + $scope.comment.is_hidden = true; + $timeout(function() { + $scope.comment.is_hidden = false; + }); + events.emit('success', trans(resp.data.message)); }, checkError(errorOp)); @@ -748,6 +752,24 @@ module.exports = function (ngApp, events) { } }]); + ngApp.controller('CommentDeleteController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { + let vm = this; + + vm.delete = function(comment) { + $http.delete(window.baseUrl(`/ajax/comment/${comment.id}`)).then(resp => { + if (!resp.data || resp.data.success !== true) { + return; + } + updateComment(comment, resp.data, $timeout, true); + }, function (resp) { + if (!resp || !resp.data || resp.data.success !== true) { + events.emit('error', trans('entities.comment_delete_fail')); + } else { + events.emit('success', trans('entities.comment_delete_success')); + } + }); + }; + }]); // CommentListController ngApp.controller('CommentListController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { @@ -766,6 +788,9 @@ module.exports = function (ngApp, events) { }); vm.canEdit = function (comment) { + if (!comment.active) { + return false; + } if (vm.permissions.comment_update_all) { return true; } @@ -774,11 +799,11 @@ module.exports = function (ngApp, events) { return true; } return false; - } + }; vm.canComment = function () { return vm.permissions.comment_create; - } + }; $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { @@ -797,7 +822,7 @@ module.exports = function (ngApp, events) { } else if (vm.totalComments === 1) { vm.totalCommentsStr = '1 Comments'; } else { - vm.totalCommentsStr = vm.totalComments + ' Comments' + vm.totalCommentsStr = vm.totalComments + ' Comments'; } }, checkError('app')); }); @@ -806,8 +831,29 @@ module.exports = function (ngApp, events) { $scope.errors[errorGroupName] = {}; return function(response) { console.log(response); - } + }; } }]); + function updateComment(comment, resp, $timeout, isDelete) { + if (isDelete && !resp.comment.active) { + comment.html = trans('entities.comment_deleted'); + } + comment.text = resp.comment.text; + comment.updated = resp.comment.updated; + comment.updated_by = resp.comment.updated_by; + comment.active = resp.comment.active; + if (isDelete && !resp.comment.active) { + comment.html = trans('entities.comment_deleted'); + } else { + comment.html = resp.comment.html; + } + if (!$timeout) { + return; + } + comment.is_hidden = true; + $timeout(function() { + comment.is_hidden = false; + }); + } }; diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 0929a9cf4..18217633f 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -870,7 +870,7 @@ module.exports = function (ngApp, events) { }]); - ngApp.directive('commentReplyLink', ['$document', '$compile', '$http', function ($document, $compile, $http) { + ngApp.directive('commentReplyLink', ['$document', '$compile', function ($document, $compile) { return { scope: { comment: '=' @@ -916,4 +916,24 @@ module.exports = function (ngApp, events) { $existingElement.remove(); } }]); + + ngApp.directive('commentDeleteLink', ['$window', function ($window) { + return { + controller: 'CommentDeleteController', + scope: { + comment: '=' + }, + link: function (scope, element, attr, ctrl) { + + element.on('click', function() { + var resp = $window.confirm('This will remove the content of the comment, are you sure you want to continue?'); + if (!resp) { + return; + } + + ctrl.delete(scope.comment); + }); + } + }; + }]); }; diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 67355c586..22cbb24c0 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -6,16 +6,20 @@ <div class="comment-header"> <a href="@{{::comment.created_by.profile_url}}">@{{ ::comment.created_by.name }}</a> </div> - <div ng-bind-html="comment.html" class="comment-body"> + <div ng-bind-html="comment.html" ng-if="::comment.active" class="comment-body"> + </div> + <div ng-if="::!comment.active" class="comment-body"> + {{ trans('entites.comment_deleted') }} </div> <div class="comment-actions"> - <ul> + <ul ng-if="!comment.is_hidden"> <li ng-if="::(level < 3 && vm.canComment())"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> <li ng-if="::vm.canEdit(comment)"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >Edit</a></li> + <li ng-if="::vm.canEdit(comment, true)"><a href="#" comment-delete-link comment="comment" >Delete</a></li> <li>Created <a title="@{{::comment.created.day_time_str}}" href="#comment-@{{::comment.id}}-@{{::pageId}}">@{{::comment.created.diff}}</a></li> - <li ng-if="comment.updated"><span title="@{{comment.updated.day_time_str}}">Updated @{{comment.updated.diff}} by - <a href="@{{comment.updated_by.profile_url}}">@{{comment.updated_by.name}}</a></span></li> + <li ng-if="::comment.updated"><span title="@{{::comment.updated.day_time_str}}">Updated @{{::comment.updated.diff}} by + <a href="@{{::comment.updated_by.profile_url}}">@{{::comment.updated_by.name}}</a></span></li> </ul> </div> <div class="comment-box" ng-repeat="comment in comments = comment.sub_comments track by comment.id" ng-init="level = level + 1"> From 06d75e180469be60a06bf6aa8e7172d2f61dd53e Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sun, 4 Jun 2017 20:12:01 +0530 Subject: [PATCH 15/83] #47 - Updates the total comments when a comment is added. --- app/Repos/CommentRepo.php | 4 +-- resources/assets/js/controllers.js | 34 +++++++++++--------- resources/assets/sass/_comments.scss | 6 ++++ resources/lang/en/activities.php | 6 ++++ resources/lang/en/entities.php | 6 +++- resources/views/comments/list-item.blade.php | 6 ++-- 6 files changed, 41 insertions(+), 21 deletions(-) diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index 55af0fe12..b8aa579c6 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -46,8 +46,8 @@ class CommentRepo { } public function delete($comment) { - $comment->text = trans('errors.cannot_add_comment_to_draft'); - $comment->html = trans('errors.cannot_add_comment_to_draft'); + $comment->text = trans('activities.comment_deleted'); + $comment->html = trans('activities.comment_deleted'); $comment->active = false; $userId = user()->id; $comment->updated_by = $userId; diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 0a4e7b333..51f018232 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -777,12 +777,14 @@ module.exports = function (ngApp, events) { $scope.errors = {}; // keep track of comment levels $scope.level = 1; - vm.totalCommentsStr = 'Loading...'; + vm.totalCommentsStr = trans('entities.comments_loading'); vm.permissions = {}; $scope.$on('evt.new-comment', function (event, comment) { // add the comment to the comment list. vm.comments.push(comment); + ++vm.totalComments; + setTotalCommentMsg(); event.stopPropagation(); event.preventDefault(); }); @@ -812,21 +814,26 @@ module.exports = function (ngApp, events) { return; } vm.comments = resp.data.comments; - vm.totalComments = resp.data.total; + vm.totalComments = +resp.data.total; vm.permissions = resp.data.permissions; vm.current_user_id = resp.data.user_id; - - // TODO : Fetch message from translate. - if (vm.totalComments === 0) { - vm.totalCommentsStr = 'No comments found.'; - } else if (vm.totalComments === 1) { - vm.totalCommentsStr = '1 Comments'; - } else { - vm.totalCommentsStr = vm.totalComments + ' Comments'; - } + setTotalCommentMsg(); }, checkError('app')); }); + function setTotalCommentMsg () { + // TODO : Fetch message from translate. + if (vm.totalComments === 0) { + vm.totalCommentsStr = trans('entities.no_comments'); + } else if (vm.totalComments === 1) { + vm.totalCommentsStr = trans('entities.one_comment'); + } else { + vm.totalCommentsStr = trans('entities.x_comments', { + numComments: vm.totalComments + }); + } + } + function checkError(errorGroupName) { $scope.errors[errorGroupName] = {}; return function(response) { @@ -836,15 +843,12 @@ module.exports = function (ngApp, events) { }]); function updateComment(comment, resp, $timeout, isDelete) { - if (isDelete && !resp.comment.active) { - comment.html = trans('entities.comment_deleted'); - } comment.text = resp.comment.text; comment.updated = resp.comment.updated; comment.updated_by = resp.comment.updated_by; comment.active = resp.comment.active; if (isDelete && !resp.comment.active) { - comment.html = trans('entities.comment_deleted'); + comment.html = trans('activities.comment_deleted'); } else { comment.html = resp.comment.html; } diff --git a/resources/assets/sass/_comments.scss b/resources/assets/sass/_comments.scss index 0328341c3..5da53a14d 100644 --- a/resources/assets/sass/_comments.scss +++ b/resources/assets/sass/_comments.scss @@ -54,6 +54,12 @@ margin-bottom: 1em; } + .comment-inactive { + font-style: italic; + font-size: 0.85em; + padding-top: 5px; + } + .user-image { float: left; margin-right: 10px; diff --git a/resources/lang/en/activities.php b/resources/lang/en/activities.php index 56af4ca07..125326b33 100644 --- a/resources/lang/en/activities.php +++ b/resources/lang/en/activities.php @@ -37,4 +37,10 @@ return [ 'book_sort' => 'sorted book', 'book_sort_notification' => 'Book Successfully Re-sorted', + // Comments + 'comment_create_notification' => '', + 'comment_update_notification' => '', + 'comment_delete_notification' => '', + 'comment_deleted' => 'This comment has been deleted.' + ]; diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 610309362..8480879d6 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -240,5 +240,9 @@ return [ */ 'comment' => 'Comment', 'comments' => 'Comments', - 'comment_placeholder' => 'Enter your comments here, markdown supported...' + 'comment_placeholder' => 'Enter your comments here, markdown supported...', + 'no_comments' => 'No Comments', + 'x_comments' => ':numComments Comments', + 'one_comment' => '1 Comment', + 'comments_loading' => 'Loading...' ]; \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 22cbb24c0..12629f0d6 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -6,11 +6,11 @@ <div class="comment-header"> <a href="@{{::comment.created_by.profile_url}}">@{{ ::comment.created_by.name }}</a> </div> - <div ng-bind-html="comment.html" ng-if="::comment.active" class="comment-body"> + <div ng-bind-html="comment.html" ng-if="::comment.active" class="comment-body" ng-class="!comment.active ? 'comment-inactive' : ''"> </div> - <div ng-if="::!comment.active" class="comment-body"> - {{ trans('entites.comment_deleted') }} + <div ng-if="::!comment.active" class="comment-body comment-inactive"> + {{ trans('activities.comment_deleted') }} </div> <div class="comment-actions"> <ul ng-if="!comment.is_hidden"> From 689d1eb082555555dbfdfa04133c765618f34c47 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sun, 4 Jun 2017 20:43:56 +0530 Subject: [PATCH 16/83] #47 - Adds a cancel button for edit and reply button. --- resources/assets/js/directives.js | 14 +++++++++++--- resources/lang/en/entities.php | 4 +++- resources/views/comments/comment-reply.blade.php | 3 ++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 18217633f..5bd764fa7 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -839,9 +839,13 @@ module.exports = function (ngApp, events) { // no need for the event to do anything more. event.stopPropagation(); event.preventDefault(); + scope.closeBox(); + }); + + scope.closeBox = function () { element.remove(); scope.$destroy(); - }); + } } } }]); @@ -861,10 +865,14 @@ module.exports = function (ngApp, events) { event.stopPropagation(); event.preventDefault(); if (commentId === scope.comment.id && !scope.isNew) { - element.remove(); - scope.$destroy(); + scope.closeBox(); } }); + + scope.closeBox = function () { + element.remove(); + scope.$destroy(); + } } } }]); diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 8480879d6..dd7c54755 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -244,5 +244,7 @@ return [ 'no_comments' => 'No Comments', 'x_comments' => ':numComments Comments', 'one_comment' => '1 Comment', - 'comments_loading' => 'Loading...' + 'comments_loading' => 'Loading...', + 'comment_save' => 'Save Comment', + 'comment_cancel' => 'Cancel' ]; \ No newline at end of file diff --git a/resources/views/comments/comment-reply.blade.php b/resources/views/comments/comment-reply.blade.php index 74a13edff..16fa2bff0 100644 --- a/resources/views/comments/comment-reply.blade.php +++ b/resources/views/comments/comment-reply.blade.php @@ -4,7 +4,8 @@ @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> <input type="hidden" ng-model="comment.pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> - <button type="submit" class="button pos" ng-click="vm.saveComment(isReply)">Save</button> + <button type="button" ng-if="::(isReply || isEdit)" class="button muted" ng-click="closeBox()">{{ trans('entities.comment_cancel') }}</button> + <button type="submit" class="button pos" ng-click="vm.saveComment(isReply)">{{ trans('entities.comment_save') }}</button> </form> </div> From 7c6fe8c4e2a5b3d26973711a915025ac3a09a924 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Mon, 5 Jun 2017 00:20:37 +0530 Subject: [PATCH 17/83] #47 - Changes the location of the reply and edit comment box. --- app/Repos/CommentRepo.php | 4 ++-- resources/assets/js/controllers.js | 2 +- resources/assets/js/directives.js | 2 +- resources/lang/en/activities.php | 1 - resources/lang/en/entities.php | 3 ++- resources/views/comments/list-item.blade.php | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index b8aa579c6..ce71b9234 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -46,8 +46,8 @@ class CommentRepo { } public function delete($comment) { - $comment->text = trans('activities.comment_deleted'); - $comment->html = trans('activities.comment_deleted'); + $comment->text = trans('entities.comment_deleted'); + $comment->html = trans('entities.comment_deleted'); $comment->active = false; $userId = user()->id; $comment->updated_by = $userId; diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 51f018232..67e77a542 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -848,7 +848,7 @@ module.exports = function (ngApp, events) { comment.updated_by = resp.comment.updated_by; comment.active = resp.comment.active; if (isDelete && !resp.comment.active) { - comment.html = trans('activities.comment_deleted'); + comment.html = trans('entities.comment_deleted'); } else { comment.html = resp.comment.html; } diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 5bd764fa7..3577cf396 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -890,7 +890,7 @@ module.exports = function (ngApp, events) { }); element.on('click', function () { - var $container = element.parents('.comment-box').first(); + var $container = element.parents('.comment-actions').first(); if (!$container.length) { console.error('commentReplyLink directive should be placed inside a container with class comment-box!'); return; diff --git a/resources/lang/en/activities.php b/resources/lang/en/activities.php index 125326b33..094f97306 100644 --- a/resources/lang/en/activities.php +++ b/resources/lang/en/activities.php @@ -41,6 +41,5 @@ return [ 'comment_create_notification' => '', 'comment_update_notification' => '', 'comment_delete_notification' => '', - 'comment_deleted' => 'This comment has been deleted.' ]; diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index dd7c54755..c0439f0e1 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -246,5 +246,6 @@ return [ 'one_comment' => '1 Comment', 'comments_loading' => 'Loading...', 'comment_save' => 'Save Comment', - 'comment_cancel' => 'Cancel' + 'comment_cancel' => 'Cancel', + 'comment_deleted' => 'This comment has been deleted.' ]; \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 12629f0d6..ec0b13f17 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -10,7 +10,7 @@ </div> <div ng-if="::!comment.active" class="comment-body comment-inactive"> - {{ trans('activities.comment_deleted') }} + {{ trans('entities.comment_deleted') }} </div> <div class="comment-actions"> <ul ng-if="!comment.is_hidden"> From 5bd9da60544dbfde9a121589b33bf92b372f9490 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Tue, 6 Jun 2017 01:46:59 +0530 Subject: [PATCH 18/83] #47 - Adds various translations in English, and a few code improvements. --- app/Comment.php | 3 + app/Http/Controllers/CommentController.php | 17 +--- resources/assets/js/controllers.js | 78 ++++++++++++------- resources/assets/js/directives.js | 10 +-- resources/lang/en/entities.php | 8 +- resources/lang/en/errors.php | 6 ++ .../views/comments/comment-reply.blade.php | 4 +- resources/views/comments/list-item.blade.php | 10 +-- 8 files changed, 79 insertions(+), 57 deletions(-) diff --git a/app/Comment.php b/app/Comment.php index 8588982e5..de01b6212 100644 --- a/app/Comment.php +++ b/app/Comment.php @@ -34,6 +34,9 @@ class Comment extends Ownable return $this->belongsTo(User::class); } + /* + * Not being used, but left here because might be used in the future for performance reasons. + */ public function getPageComments($pageId) { $query = static::newQuery(); $query->join('users AS u', 'comments.created_by', '=', 'u.id'); diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index a08279e8c..e8d5eab30 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -5,7 +5,6 @@ use BookStack\Repos\EntityRepo; use BookStack\Comment; use Illuminate\Http\Request; -// delete -checkOwnablePermission \ class CommentController extends Controller { protected $entityRepo; @@ -68,12 +67,12 @@ class CommentController extends Controller $comment = $this->comment->findOrFail($id); $this->checkOwnablePermission('comment-delete', $comment); $this->commentRepo->delete($comment); - $comment = $this->commentRepo->getCommentById($comment->id); + $updatedComment = $this->commentRepo->getCommentById($comment->id); return response()->json([ - 'success' => true, + 'status' => 'success', 'message' => trans('entities.comment_deleted'), - 'comment' => $comment + 'comment' => $updatedComment ]); } @@ -85,18 +84,10 @@ class CommentController extends Controller return response('Not found', 404); } - if($page->draft) { - // cannot add comments to drafts. - return response()->json([ - 'status' => 'error', - 'message' => trans('errors.no_comments_for_draft'), - ], 400); - } - $this->checkOwnablePermission('page-view', $page); $comments = $this->commentRepo->getPageComments($pageId); - return response()->json(['success' => true, 'comments'=> $comments['comments'], + return response()->json(['status' => 'success', 'comments'=> $comments['comments'], 'total' => $comments['total'], 'permissions' => [ 'comment_create' => $this->currentUser->can('comment-create-all'), 'comment_update_own' => $this->currentUser->can('comment-update-own'), diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 67e77a542..3ef02d41f 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -682,7 +682,7 @@ module.exports = function (ngApp, events) { }]); - // CommentCrudController + // Controller used to reply to and add new comments ngApp.controller('CommentReplyController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { const MarkdownIt = require("markdown-it"); const md = new MarkdownIt({html: true}); @@ -692,10 +692,12 @@ module.exports = function (ngApp, events) { vm.saveComment = function () { let pageId = $scope.comment.pageId || $scope.pageId; let comment = $scope.comment.text; + if (!comment) { + return events.emit('warning', trans('errors.empty_comment')); + } let commentHTML = md.render($scope.comment.text); let serviceUrl = `/ajax/page/${pageId}/comment/`; let httpMethod = 'post'; - let errorOp = 'add'; let reqObj = { text: comment, html: commentHTML @@ -705,14 +707,13 @@ module.exports = function (ngApp, events) { // this will be set when editing the comment. serviceUrl = `/ajax/page/${pageId}/comment/${$scope.comment.id}`; httpMethod = 'put'; - errorOp = 'update'; } else if ($scope.isReply === true) { // if its reply, get the parent comment id reqObj.parent_id = $scope.parentId; } $http[httpMethod](window.baseUrl(serviceUrl), reqObj).then(resp => { - if (!resp.data || resp.data.status !== 'success') { - return events.emit('error', trans('error')); + if (!isCommentOpSuccess(resp)) { + return; } // hide the comments first, and then retrigger the refresh if ($scope.isEdit) { @@ -734,44 +735,47 @@ module.exports = function (ngApp, events) { events.emit('success', trans(resp.data.message)); - }, checkError(errorOp)); + }, checkError); }; - function checkError(errorGroupName) { - $scope.errors[errorGroupName] = {}; - return function(response) { - if (typeof response.data !== 'undefined' && typeof response.data.error !== 'undefined') { - events.emit('error', response.data.error); - } - if (typeof response.data !== 'undefined' && typeof response.data.validation !== 'undefined') { - $scope.errors[errorGroupName] = response.data.validation; - console.log($scope.errors[errorGroupName]) - } + function checkError(response) { + let msg = null; + if (isCommentOpSuccess(response)) { + // all good + return; + } else if (response.data) { + msg = response.data.message; + } else { + msg = trans('errors.comment_add_error'); + } + if (msg) { + events.emit('success', msg); } } }]); + // Controller used to delete comments ngApp.controller('CommentDeleteController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { let vm = this; vm.delete = function(comment) { $http.delete(window.baseUrl(`/ajax/comment/${comment.id}`)).then(resp => { - if (!resp.data || resp.data.success !== true) { + if (isCommentOpSuccess(resp)) { return; } updateComment(comment, resp.data, $timeout, true); }, function (resp) { - if (!resp || !resp.data || resp.data.success !== true) { - events.emit('error', trans('entities.comment_delete_fail')); - } else { + if (isCommentOpSuccess(resp)) { events.emit('success', trans('entities.comment_delete_success')); + } else { + events.emit('error', trans('entities.comment_delete_fail')); } }); }; }]); - // CommentListController + // Controller used to fetch all comments for a page ngApp.controller('CommentListController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { let vm = this; $scope.errors = {}; @@ -779,6 +783,7 @@ module.exports = function (ngApp, events) { $scope.level = 1; vm.totalCommentsStr = trans('entities.comments_loading'); vm.permissions = {}; + vm.trans = window.trans; $scope.$on('evt.new-comment', function (event, comment) { // add the comment to the comment list. @@ -809,8 +814,7 @@ module.exports = function (ngApp, events) { $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { - if (!resp.data || resp.data.success !== true) { - // TODO : Handle error + if (!isCommentOpSuccess(resp)) { return; } vm.comments = resp.data.comments; @@ -818,11 +822,10 @@ module.exports = function (ngApp, events) { vm.permissions = resp.data.permissions; vm.current_user_id = resp.data.user_id; setTotalCommentMsg(); - }, checkError('app')); + }, checkError); }); function setTotalCommentMsg () { - // TODO : Fetch message from translate. if (vm.totalComments === 0) { vm.totalCommentsStr = trans('entities.no_comments'); } else if (vm.totalComments === 1) { @@ -834,11 +837,19 @@ module.exports = function (ngApp, events) { } } - function checkError(errorGroupName) { - $scope.errors[errorGroupName] = {}; - return function(response) { - console.log(response); - }; + function checkError(response) { + let msg = null; + if (isCommentOpSuccess(response)) { + // all good + return; + } else if (response.data) { + msg = response.data.message; + } else { + msg = trans('errors.comment_error'); + } + if (msg) { + events.emit('success', msg); + } } }]); @@ -860,4 +871,11 @@ module.exports = function (ngApp, events) { comment.is_hidden = false; }); } + + function isCommentOpSuccess(resp) { + if (resp && resp.data && resp.data.status === 'success') { + return true; + } + return false; + } }; diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 3577cf396..0b9402a6b 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -845,9 +845,9 @@ module.exports = function (ngApp, events) { scope.closeBox = function () { element.remove(); scope.$destroy(); - } + }; } - } + }; }]); ngApp.directive('commentEdit', [function () { @@ -855,7 +855,7 @@ module.exports = function (ngApp, events) { restrict: 'E', templateUrl: 'comment-reply.html', scope: { - comment: '=', + comment: '=' }, link: function (scope, element) { scope.isEdit = true; @@ -872,9 +872,9 @@ module.exports = function (ngApp, events) { scope.closeBox = function () { element.remove(); scope.$destroy(); - } + }; } - } + }; }]); diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index c0439f0e1..08e11cfde 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -246,6 +246,12 @@ return [ 'one_comment' => '1 Comment', 'comments_loading' => 'Loading...', 'comment_save' => 'Save Comment', + 'comment_reply' => 'Reply', + 'comment_edit' => 'Edit', + 'comment_delete' => 'Delete', 'comment_cancel' => 'Cancel', - 'comment_deleted' => 'This comment has been deleted.' + 'comment_created' => 'Comment added', + 'comment_updated' => 'Comment updated', + 'comment_deleted' => 'Comment deleted', + 'comment_updated_text' => 'Updated :updateDiff by' ]; \ No newline at end of file diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index c4578a37a..fc2ac73b5 100644 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -60,6 +60,12 @@ return [ 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', + // Comments + 'comment_error' => 'An error occurred while fetching the comments.', + 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', + 'comment_add_error' => 'An error occurred while adding the comment.', + 'empty_comment' => 'Cannot add an empty comment.', + // Error pages '404_page_not_found' => 'Page Not Found', 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', diff --git a/resources/views/comments/comment-reply.blade.php b/resources/views/comments/comment-reply.blade.php index 16fa2bff0..9c698bf0d 100644 --- a/resources/views/comments/comment-reply.blade.php +++ b/resources/views/comments/comment-reply.blade.php @@ -1,8 +1,6 @@ <div class="comment-editor" ng-controller="CommentReplyController as vm" ng-cloak> <form novalidate> - <textarea name="markdown" rows="3" ng-model="comment.text" placeholder="{{ trans('entities.comment_placeholder') }}" - @if($errors->has('markdown')) class="neg" @endif>@if(isset($model) || - old('markdown')){{htmlspecialchars( old('markdown') ? old('markdown') : ($model->markdown === '' ? $model->html : $model->markdown))}}@endif</textarea> + <textarea name="markdown" rows="3" ng-model="comment.text" placeholder="{{ trans('entities.comment_placeholder') }}"></textarea> <input type="hidden" ng-model="comment.pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> <button type="button" ng-if="::(isReply || isEdit)" class="button muted" ng-click="closeBox()">{{ trans('entities.comment_cancel') }}</button> <button type="submit" class="button pos" ng-click="vm.saveComment(isReply)">{{ trans('entities.comment_save') }}</button> diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index ec0b13f17..eb2bcf8ab 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -14,12 +14,12 @@ </div> <div class="comment-actions"> <ul ng-if="!comment.is_hidden"> - <li ng-if="::(level < 3 && vm.canComment())"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">Reply</a></li> - <li ng-if="::vm.canEdit(comment)"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >Edit</a></li> - <li ng-if="::vm.canEdit(comment, true)"><a href="#" comment-delete-link comment="comment" >Delete</a></li> + <li ng-if="::(level < 3 && vm.canComment())"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">{{ trans('entities.comment_reply') }}</a></li> + <li ng-if="::vm.canEdit(comment)"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >{{ trans('entities.comment_edit') }}</a></li> + <li ng-if="::vm.canEdit(comment, true)"><a href="#" comment-delete-link comment="comment" >{{ trans('entities.comment_delete') }}</a></li> <li>Created <a title="@{{::comment.created.day_time_str}}" href="#comment-@{{::comment.id}}-@{{::pageId}}">@{{::comment.created.diff}}</a></li> - <li ng-if="::comment.updated"><span title="@{{::comment.updated.day_time_str}}">Updated @{{::comment.updated.diff}} by - <a href="@{{::comment.updated_by.profile_url}}">@{{::comment.updated_by.name}}</a></span></li> + <li ng-if="::comment.updated"><span title="@{{::comment.updated.day_time_str}}">@{{ ::vm.trans('entities.comment_updated_text', { updateDiff: comment.updated.diff }) }} + <a href="@{{::comment.updated_by.profile_url}}">@{{::comment.updated_by.name}}</a></span></li> </ul> </div> <div class="comment-box" ng-repeat="comment in comments = comment.sub_comments track by comment.id" ng-init="level = level + 1"> From 652a67ad6598412759aec58454eba3d6a006ac4a Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Tue, 6 Jun 2017 23:20:40 +0530 Subject: [PATCH 19/83] Removes some unncessary code. --- app/Page.php | 9 --------- resources/lang/en/activities.php | 5 ----- 2 files changed, 14 deletions(-) diff --git a/app/Page.php b/app/Page.php index 4a8d32780..c9823e7e4 100644 --- a/app/Page.php +++ b/app/Page.php @@ -38,15 +38,6 @@ class Page extends Entity { return $this->belongsTo(Chapter::class); } - - /** - * Get the comments in the page. - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function comment() - { - return $this->hasMany(Comment::class); - } /** * Check if this page has a chapter. diff --git a/resources/lang/en/activities.php b/resources/lang/en/activities.php index 094f97306..56af4ca07 100644 --- a/resources/lang/en/activities.php +++ b/resources/lang/en/activities.php @@ -37,9 +37,4 @@ return [ 'book_sort' => 'sorted book', 'book_sort_notification' => 'Book Successfully Re-sorted', - // Comments - 'comment_create_notification' => '', - 'comment_update_notification' => '', - 'comment_delete_notification' => '', - ]; From 38fe7567258e0d61e3d4718bb0ccad0681608bcb Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Wed, 7 Jun 2017 23:45:29 +0530 Subject: [PATCH 20/83] #47 - Fixes a couple of issues found during testing - delete not updating the UI, delete none not working properly. --- resources/assets/js/controllers.js | 23 +++++++++++++------- resources/lang/en/errors.php | 5 +++-- resources/views/comments/list-item.blade.php | 4 ++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 3ef02d41f..a929f4aed 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -747,7 +747,7 @@ module.exports = function (ngApp, events) { } else if (response.data) { msg = response.data.message; } else { - msg = trans('errors.comment_add_error'); + msg = trans('errors.comment_add'); } if (msg) { events.emit('success', msg); @@ -761,15 +761,15 @@ module.exports = function (ngApp, events) { vm.delete = function(comment) { $http.delete(window.baseUrl(`/ajax/comment/${comment.id}`)).then(resp => { - if (isCommentOpSuccess(resp)) { + if (!isCommentOpSuccess(resp)) { return; } updateComment(comment, resp.data, $timeout, true); }, function (resp) { if (isCommentOpSuccess(resp)) { - events.emit('success', trans('entities.comment_delete_success')); + events.emit('success', trans('entities.comment_deleted')); } else { - events.emit('error', trans('entities.comment_delete_fail')); + events.emit('error', trans('error.comment_delete')); } }); }; @@ -794,17 +794,21 @@ module.exports = function (ngApp, events) { event.preventDefault(); }); - vm.canEdit = function (comment) { + vm.canEditDelete = function (comment, prop) { if (!comment.active) { return false; } - if (vm.permissions.comment_update_all) { + let propAll = prop + '_all'; + let propOwn = prop + '_own'; + + if (vm.permissions[propAll]) { return true; } - if (vm.permissions.comment_update_own && comment.created_by.id === vm.current_user_id) { + if (vm.permissions[propOwn] && comment.created_by.id === vm.current_user_id) { return true; } + return false; }; @@ -815,6 +819,9 @@ module.exports = function (ngApp, events) { $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { if (!isCommentOpSuccess(resp)) { + // just show that no comments are available. + vm.totalComments = 0; + setTotalCommentMsg(); return; } vm.comments = resp.data.comments; @@ -845,7 +852,7 @@ module.exports = function (ngApp, events) { } else if (response.data) { msg = response.data.message; } else { - msg = trans('errors.comment_error'); + msg = trans('errors.comment_list'); } if (msg) { events.emit('success', msg); diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index fc2ac73b5..71bcd1f9a 100644 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -61,9 +61,10 @@ return [ 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', // Comments - 'comment_error' => 'An error occurred while fetching the comments.', + 'comment_list' => 'An error occurred while fetching the comments.', 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', - 'comment_add_error' => 'An error occurred while adding the comment.', + 'comment_add' => 'An error occurred while adding the comment.', + 'comment_delete' => 'An error occurred while deleting the comment.', 'empty_comment' => 'Cannot add an empty comment.', // Error pages diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index eb2bcf8ab..6904a4abf 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -15,8 +15,8 @@ <div class="comment-actions"> <ul ng-if="!comment.is_hidden"> <li ng-if="::(level < 3 && vm.canComment())"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">{{ trans('entities.comment_reply') }}</a></li> - <li ng-if="::vm.canEdit(comment)"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >{{ trans('entities.comment_edit') }}</a></li> - <li ng-if="::vm.canEdit(comment, true)"><a href="#" comment-delete-link comment="comment" >{{ trans('entities.comment_delete') }}</a></li> + <li ng-if="::vm.canEditDelete(comment, 'comment_update')"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >{{ trans('entities.comment_edit') }}</a></li> + <li ng-if="::vm.canEditDelete(comment, 'comment_delete')"><a href="#" comment-delete-link comment="comment" >{{ trans('entities.comment_delete') }}</a></li> <li>Created <a title="@{{::comment.created.day_time_str}}" href="#comment-@{{::comment.id}}-@{{::pageId}}">@{{::comment.created.diff}}</a></li> <li ng-if="::comment.updated"><span title="@{{::comment.updated.day_time_str}}">@{{ ::vm.trans('entities.comment_updated_text', { updateDiff: comment.updated.diff }) }} <a href="@{{::comment.updated_by.profile_url}}">@{{::comment.updated_by.name}}</a></span></li> From e647ec22b1e4b6ca565ad9b9269deefe36da2ea6 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Thu, 8 Jun 2017 01:14:53 +0530 Subject: [PATCH 21/83] #47 - Adds direct linking to comments. --- resources/assets/js/controllers.js | 23 ++++++++++++++++++-- resources/assets/js/directives.js | 16 ++++++++------ resources/assets/js/pages/page-show.js | 2 ++ resources/views/comments/list-item.blade.php | 2 +- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index a929f4aed..c1bfd441f 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -776,7 +776,7 @@ module.exports = function (ngApp, events) { }]); // Controller used to fetch all comments for a page - ngApp.controller('CommentListController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { + ngApp.controller('CommentListController', ['$scope', '$http', '$timeout', '$location', function ($scope, $http, $timeout, $location) { let vm = this; $scope.errors = {}; // keep track of comment levels @@ -808,7 +808,7 @@ module.exports = function (ngApp, events) { if (vm.permissions[propOwn] && comment.created_by.id === vm.current_user_id) { return true; } - + return false; }; @@ -816,6 +816,9 @@ module.exports = function (ngApp, events) { return vm.permissions.comment_create; }; + // check if there are is any direct linking + let linkedCommentId = $location.search().cm; + $timeout(function() { $http.get(window.baseUrl(`/ajax/page/${$scope.pageId}/comments/`)).then(resp => { if (!isCommentOpSuccess(resp)) { @@ -829,6 +832,13 @@ module.exports = function (ngApp, events) { vm.permissions = resp.data.permissions; vm.current_user_id = resp.data.user_id; setTotalCommentMsg(); + if (!linkedCommentId) { + return; + } + $timeout(function() { + // wait for the UI to render. + focusLinkedComment(linkedCommentId); + }); }, checkError); }); @@ -844,6 +854,15 @@ module.exports = function (ngApp, events) { } } + function focusLinkedComment(linkedCommentId) { + let comment = angular.element('#' + linkedCommentId); + if (comment.length === 0) { + return; + } + + window.setupPageShow.goToText(linkedCommentId); + } + function checkError(response) { let msg = null; if (isCommentOpSuccess(response)) { diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 0b9402a6b..bbdf1a0ae 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -889,7 +889,8 @@ module.exports = function (ngApp, events) { scope.$destroy(); }); - element.on('click', function () { + element.on('click', function (e) { + e.preventDefault(); var $container = element.parents('.comment-actions').first(); if (!$container.length) { console.error('commentReplyLink directive should be placed inside a container with class comment-box!'); @@ -933,13 +934,14 @@ module.exports = function (ngApp, events) { }, link: function (scope, element, attr, ctrl) { - element.on('click', function() { - var resp = $window.confirm('This will remove the content of the comment, are you sure you want to continue?'); - if (!resp) { - return; - } + element.on('click', function(e) { + e.preventDefault(); + var resp = $window.confirm('This will remove the content of the comment, are you sure you want to continue?'); + if (!resp) { + return; + } - ctrl.delete(scope.comment); + ctrl.delete(scope.comment); }); } }; diff --git a/resources/assets/js/pages/page-show.js b/resources/assets/js/pages/page-show.js index 67d339d63..020229d2f 100644 --- a/resources/assets/js/pages/page-show.js +++ b/resources/assets/js/pages/page-show.js @@ -161,6 +161,8 @@ let setupPageShow = window.setupPageShow = function (pageId) { } }); + // in order to call from other places. + window.setupPageShow.goToText = goToText; }; module.exports = setupPageShow; \ No newline at end of file diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 6904a4abf..391e64baf 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -17,7 +17,7 @@ <li ng-if="::(level < 3 && vm.canComment())"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">{{ trans('entities.comment_reply') }}</a></li> <li ng-if="::vm.canEditDelete(comment, 'comment_update')"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >{{ trans('entities.comment_edit') }}</a></li> <li ng-if="::vm.canEditDelete(comment, 'comment_delete')"><a href="#" comment-delete-link comment="comment" >{{ trans('entities.comment_delete') }}</a></li> - <li>Created <a title="@{{::comment.created.day_time_str}}" href="#comment-@{{::comment.id}}-@{{::pageId}}">@{{::comment.created.diff}}</a></li> + <li>Created <a title="@{{::comment.created.day_time_str}}" href="#?cm=comment-@{{::pageId}}-@{{::comment.id}}">@{{::comment.created.diff}}</a></li> <li ng-if="::comment.updated"><span title="@{{::comment.updated.day_time_str}}">@{{ ::vm.trans('entities.comment_updated_text', { updateDiff: comment.updated.diff }) }} <a href="@{{::comment.updated_by.profile_url}}">@{{::comment.updated_by.name}}</a></span></li> </ul> From 218376a41c396e45dff2a9c82ff0fdbddcf475a0 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Thu, 8 Jun 2017 01:30:43 +0530 Subject: [PATCH 22/83] #47 - Fetching values from language files. --- resources/assets/js/directives.js | 10 +++++----- resources/lang/en/entities.php | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index bbdf1a0ae..bbf87adda 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -936,12 +936,12 @@ module.exports = function (ngApp, events) { element.on('click', function(e) { e.preventDefault(); - var resp = $window.confirm('This will remove the content of the comment, are you sure you want to continue?'); - if (!resp) { - return; - } + var resp = $window.confirm(trans('entities.comment_delete_confirm')); + if (!resp) { + return; + } - ctrl.delete(scope.comment); + ctrl.delete(scope.comment); }); } }; diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 08e11cfde..65fba069f 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -253,5 +253,6 @@ return [ 'comment_created' => 'Comment added', 'comment_updated' => 'Comment updated', 'comment_deleted' => 'Comment deleted', - 'comment_updated_text' => 'Updated :updateDiff by' + 'comment_updated_text' => 'Updated :updateDiff by', + 'comment_delete_confirm' => 'This will remove the contents of the comment. Are you sure you want to delete this comment?' ]; \ No newline at end of file From 4efe3b41da5941f7b49b7a43218166524e5924fb Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sat, 10 Jun 2017 15:21:28 +0530 Subject: [PATCH 23/83] #47 - Added translations for other language files using Google translate. --- resources/assets/js/directives.js | 10 ++++----- resources/lang/de/entities.php | 23 ++++++++++++++++++++ resources/lang/de/errors.php | 7 ++++++ resources/lang/en/entities.php | 4 +++- resources/lang/es/entities.php | 22 +++++++++++++++++++ resources/lang/es/errors.php | 7 ++++++ resources/lang/fr/entities.php | 22 +++++++++++++++++++ resources/lang/fr/errors.php | 7 ++++++ resources/lang/nl/entities.php | 22 +++++++++++++++++++ resources/lang/nl/errors.php | 7 ++++++ resources/lang/pt_BR/entities.php | 22 +++++++++++++++++++ resources/lang/pt_BR/errors.php | 7 ++++++ resources/lang/sk/entities.php | 22 +++++++++++++++++++ resources/lang/sk/errors.php | 7 ++++++ resources/views/comments/list-item.blade.php | 2 +- 15 files changed, 184 insertions(+), 7 deletions(-) diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index bbf87adda..16d1ad2a4 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -936,12 +936,12 @@ module.exports = function (ngApp, events) { element.on('click', function(e) { e.preventDefault(); - var resp = $window.confirm(trans('entities.comment_delete_confirm')); - if (!resp) { - return; - } + var resp = $window.confirm(trans('entities.comment_delete_confirm')); + if (!resp) { + return; + } - ctrl.delete(scope.comment); + ctrl.delete(scope.comment); }); } }; diff --git a/resources/lang/de/entities.php b/resources/lang/de/entities.php index c9feb8497..5d7d5cdde 100644 --- a/resources/lang/de/entities.php +++ b/resources/lang/de/entities.php @@ -213,4 +213,27 @@ return [ 'profile_not_created_pages' => ':userName hat bisher keine Seiten angelegt.', 'profile_not_created_chapters' => ':userName hat bisher keine Kapitel angelegt.', 'profile_not_created_books' => ':userName hat bisher keine Bücher angelegt.', + + /** + * Comnents + */ + 'comment' => 'Kommentar', + 'comments' => 'Kommentare', + 'comment_placeholder' => 'Geben Sie hier Ihre Kommentare ein, Markdown unterstützt ...', + 'no_comments' => 'Keine Kommentare', + 'x_comments' => ':numComments Kommentare', + 'one_comment' => '1 Kommentar', + 'comments_loading' => 'Laden ...', + 'comment_save' => 'Kommentar speichern', + 'comment_reply' => 'Antworten', + 'comment_edit' => 'Bearbeiten', + 'comment_delete' => 'Löschen', + 'comment_cancel' => 'Abbrechen', + 'comment_created' => 'Kommentar hinzugefügt', + 'comment_updated' => 'Kommentar aktualisiert', + 'comment_deleted' => 'Kommentar gelöscht', + 'comment_updated_text' => 'Aktualisiert vor :updateDiff von', + 'comment_delete_confirm' => 'Damit wird der Inhalt des Kommentars entfernt. Bist du sicher, dass du diesen Kommentar löschen möchtest?', + 'comment_create' => 'Erstellt' + ]; \ No newline at end of file diff --git a/resources/lang/de/errors.php b/resources/lang/de/errors.php index e085d9915..ff045d628 100644 --- a/resources/lang/de/errors.php +++ b/resources/lang/de/errors.php @@ -67,4 +67,11 @@ return [ 'error_occurred' => 'Es ist ein Fehler aufgetreten', 'app_down' => ':appName befindet sich aktuell im Wartungsmodus.', 'back_soon' => 'Wir werden so schnell wie möglich wieder online sein.', + + // Comments + 'comment_list' => 'Beim Abrufen der Kommentare ist ein Fehler aufgetreten.', + 'cannot_add_comment_to_draft' => 'Du kannst keine Kommentare zu einem Entwurf hinzufügen.', + 'comment_add' => 'Beim Hinzufügen des Kommentars ist ein Fehler aufgetreten.', + 'comment_delete' => 'Beim Löschen des Kommentars ist ein Fehler aufgetreten.', + 'empty_comment' => 'Kann keinen leeren Kommentar hinzufügen', ]; diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 65fba069f..43053df10 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -254,5 +254,7 @@ return [ 'comment_updated' => 'Comment updated', 'comment_deleted' => 'Comment deleted', 'comment_updated_text' => 'Updated :updateDiff by', - 'comment_delete_confirm' => 'This will remove the contents of the comment. Are you sure you want to delete this comment?' + 'comment_delete_confirm' => 'This will remove the contents of the comment. Are you sure you want to delete this comment?', + 'comment_create' => 'Created' + ]; \ No newline at end of file diff --git a/resources/lang/es/entities.php b/resources/lang/es/entities.php index d6b2810bc..aadfa2324 100644 --- a/resources/lang/es/entities.php +++ b/resources/lang/es/entities.php @@ -214,4 +214,26 @@ return [ 'profile_not_created_pages' => ':userName no ha creado ninguna página', 'profile_not_created_chapters' => ':userName no ha creado ningún capítulo', 'profile_not_created_books' => ':userName no ha creado ningún libro', + + /** + * Comments + */ + 'comment' => 'Comentario', + 'comments' => 'Comentarios', + 'comment_placeholder' => 'Introduzca sus comentarios aquí, markdown supported ...', + 'no_comments' => 'No hay comentarios', + 'x_comments' => ':numComments Comentarios', + 'one_comment' => '1 Comentario', + 'comments_loading' => 'Cargando ...', + 'comment_save' => 'Guardar comentario', + 'comment_reply' => 'Responder', + 'comment_edit' => 'Editar', + 'comment_delete' => 'Eliminar', + 'comment_cancel' => 'Cancelar', + 'comment_created' => 'Comentario añadido', + 'comment_updated' => 'Comentario actualizado', + 'comment_deleted' => 'Comentario eliminado', + 'comment_updated_text' => 'Actualizado hace :updateDiff minutos por', + 'comment_delete_confirm' => 'Esto eliminará el contenido del comentario. ¿Estás seguro de que quieres eliminar este comentario?', + 'comment_create' => 'Creado' ]; diff --git a/resources/lang/es/errors.php b/resources/lang/es/errors.php index 1e39a3cb8..e488b6a1b 100644 --- a/resources/lang/es/errors.php +++ b/resources/lang/es/errors.php @@ -67,4 +67,11 @@ return [ 'error_occurred' => 'Ha ocurrido un error', 'app_down' => 'La aplicación :appName se encuentra caída en este momento', 'back_soon' => 'Volverá a estar operativa en corto tiempo.', + + // Comments + 'comment_list' => 'Se ha producido un error al buscar los comentarios.', + 'cannot_add_comment_to_draft' => 'No puedes añadir comentarios a un borrador.', + 'comment_add' => 'Se ha producido un error al añadir el comentario.', + 'comment_delete' => 'Se ha producido un error al eliminar el comentario.', + 'empty_comment' => 'No se puede agregar un comentario vacío.', ]; diff --git a/resources/lang/fr/entities.php b/resources/lang/fr/entities.php index 5562fb0fd..c618bab08 100644 --- a/resources/lang/fr/entities.php +++ b/resources/lang/fr/entities.php @@ -213,4 +213,26 @@ return [ 'profile_not_created_pages' => ':userName n\'a pas créé de pages', 'profile_not_created_chapters' => ':userName n\'a pas créé de chapitres', 'profile_not_created_books' => ':userName n\'a pas créé de livres', + + /** + * Comments + */ + 'comment' => 'Commentaire', + 'comments' => 'Commentaires', + 'comment_placeholder' => 'Entrez vos commentaires ici, merci supporté ...', + 'no_comments' => 'No Comments', + 'x_comments' => ':numComments Commentaires', + 'one_comment' => '1 Commentaire', + 'comments_loading' => 'Loading ...', + 'comment_save' => 'Enregistrer le commentaire', + 'comment_reply' => 'Répondre', + 'comment_edit' => 'Modifier', + 'comment_delete' => 'Supprimer', + 'comment_cancel' => 'Annuler', + 'comment_created' => 'Commentaire ajouté', + 'comment_updated' => 'Commentaire mis à jour', + 'comment_deleted' => 'Commentaire supprimé', + 'comment_updated_text' => 'Mis à jour il y a :updateDiff par', + 'comment_delete_confirm' => 'Cela supprime le contenu du commentaire. Êtes-vous sûr de vouloir supprimer ce commentaire?', + 'comment_create' => 'Créé' ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 72af89f7f..402eeb405 100644 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -67,4 +67,11 @@ return [ 'error_occurred' => 'Une erreur est survenue', 'app_down' => ':appName n\'est pas en service pour le moment', 'back_soon' => 'Nous serons bientôt de retour.', + + // comments + 'comment_list' => 'Une erreur s\'est produite lors de la récupération des commentaires.', + 'cannot_add_comment_to_draft' => 'Vous ne pouvez pas ajouter de commentaires à un projet.', + 'comment_add' => 'Une erreur s\'est produite lors de l\'ajout du commentaire.', + 'comment_delete' => 'Une erreur s\'est produite lors de la suppression du commentaire.', + 'empty_comment' => 'Impossible d\'ajouter un commentaire vide.', ]; diff --git a/resources/lang/nl/entities.php b/resources/lang/nl/entities.php index d6975e130..6df9e5dd9 100644 --- a/resources/lang/nl/entities.php +++ b/resources/lang/nl/entities.php @@ -214,4 +214,26 @@ return [ 'profile_not_created_pages' => ':userName heeft geen pagina\'s gemaakt', 'profile_not_created_chapters' => ':userName heeft geen hoofdstukken gemaakt', 'profile_not_created_books' => ':userName heeft geen boeken gemaakt', + + /** + * Comments + */ + 'comment' => 'Commentaar', + 'comments' => 'Commentaren', + 'comment_placeholder' => 'Vul hier uw reacties in, markdown ondersteund ...', + 'no_comments' => 'No Comments', + 'x_comments' => ':numComments Opmerkingen', + 'one_comment' => '1 commentaar', + 'comments_loading' => 'Loading ...', + 'comment_save' => 'Opslaan opslaan', + 'comment_reply' => 'Antwoord', + 'comment_edit' => 'Bewerken', + 'comment_delete' => 'Verwijderen', + 'comment_cancel' => 'Annuleren', + 'comment_created' => 'Opmerking toegevoegd', + 'comment_updated' => 'Opmerking bijgewerkt', + 'comment_deleted' => 'Opmerking verwijderd', + 'comment_updated_text' => 'Bijgewerkt :updateDiff geleden door', + 'comment_delete_confirm' => 'Hiermee verwijdert u de inhoud van de reactie. Weet u zeker dat u deze reactie wilt verwijderen?', + 'comment_create' => 'Gemaakt' ]; \ No newline at end of file diff --git a/resources/lang/nl/errors.php b/resources/lang/nl/errors.php index f8b635bce..b8fab59fd 100644 --- a/resources/lang/nl/errors.php +++ b/resources/lang/nl/errors.php @@ -67,4 +67,11 @@ return [ 'error_occurred' => 'Er Ging Iets Fout', 'app_down' => ':appName is nu niet beschikbaar', 'back_soon' => 'Komt snel weer online.', + + // Comments + 'comment_list' => 'Er is een fout opgetreden tijdens het ophalen van de reacties.', + 'cannot_add_comment_to_draft' => 'U kunt geen reacties toevoegen aan een ontwerp.', + 'comment_add' => 'Er is een fout opgetreden tijdens het toevoegen van de reactie.', + 'comment_delete' => 'Er is een fout opgetreden tijdens het verwijderen van de reactie.', + 'empty_comment' => 'Kan geen lege reactie toevoegen.', ]; \ No newline at end of file diff --git a/resources/lang/pt_BR/entities.php b/resources/lang/pt_BR/entities.php index 5a965fe62..e6b900fdd 100644 --- a/resources/lang/pt_BR/entities.php +++ b/resources/lang/pt_BR/entities.php @@ -214,4 +214,26 @@ return [ 'profile_not_created_pages' => ':userName não criou páginas', 'profile_not_created_chapters' => ':userName não criou capítulos', 'profile_not_created_books' => ':userName não criou livros', + + /** + * Comments + */ + 'comentário' => 'Comentário', + 'comentários' => 'Comentários', + 'comment_placeholder' => 'Digite seus comentários aqui, markdown suportado ...', + 'no_comments' => 'No Comments', + 'x_comments' => ':numComments Comentários', + 'one_comment' => '1 comentário', + 'comments_loading' => 'Carregando ....', + 'comment_save' => 'Salvar comentário', + 'comment_reply' => 'Responder', + 'comment_edit' => 'Editar', + 'comment_delete' => 'Excluir', + 'comment_cancel' => 'Cancelar', + 'comment_created' => 'Comentário adicionado', + 'comment_updated' => 'Comentário atualizado', + 'comment_deleted' => 'Comentário eliminado', + 'comment_updated_text' => 'Atualizado :updatedDiff atrás por', + 'comment_delete_confirm' => 'Isso removerá o conteúdo do comentário. Tem certeza de que deseja excluir esse comentário?', + 'comment_create' => 'Criada' ]; \ No newline at end of file diff --git a/resources/lang/pt_BR/errors.php b/resources/lang/pt_BR/errors.php index 91b85e3ef..16fc78ff5 100644 --- a/resources/lang/pt_BR/errors.php +++ b/resources/lang/pt_BR/errors.php @@ -67,4 +67,11 @@ return [ 'error_occurred' => 'Um erro ocorreu', 'app_down' => ':appName está fora do ar no momento', 'back_soon' => 'Voltaremos em seguida.', + + // comments + 'comment_list' => 'Ocorreu um erro ao buscar os comentários.', + 'cannot_add_comment_to_draft' => 'Você não pode adicionar comentários a um rascunho.', + 'comment_add' => 'Ocorreu um erro ao adicionar o comentário.', + 'comment_delete' => 'Ocorreu um erro ao excluir o comentário.', + 'empty_comment' => 'Não é possível adicionar um comentário vazio.', ]; \ No newline at end of file diff --git a/resources/lang/sk/entities.php b/resources/lang/sk/entities.php index e70864753..8a3aa4df6 100644 --- a/resources/lang/sk/entities.php +++ b/resources/lang/sk/entities.php @@ -223,4 +223,26 @@ return [ 'profile_not_created_pages' => ':userName nevytvoril žiadne stránky', 'profile_not_created_chapters' => ':userName nevytvoril žiadne kapitoly', 'profile_not_created_books' => ':userName nevytvoril žiadne knihy', + + /** + * + */ + 'comment' => 'Komentár', + 'comments' => 'Komentáre', + 'comment_placeholder' => 'Tu zadajte svoje pripomienky, podporované označenie ...', + 'no_comments' => 'No Comments', + 'x_comments' => ':numComments komentárov', + 'one_comment' => '1 komentár', + 'comments_loading' => 'Loading ..', + 'comment_save' => 'Uložiť komentár', + 'comment_reply' => 'Odpovedať', + 'comment_edit' => 'Upraviť', + 'comment_delete' => 'Odstrániť', + 'comment_cancel' => 'Zrušiť', + 'comment_created' => 'Pridaný komentár', + 'comment_updated' => 'Komentár aktualizovaný', + 'comment_deleted' => 'Komentár bol odstránený', + 'comment_updated_text' => 'Aktualizované pred :updateDiff', + 'comment_delete_confirm' => 'Tým sa odstráni obsah komentára. Naozaj chcete odstrániť tento komentár?', + 'comment_create' => 'Vytvorené' ]; diff --git a/resources/lang/sk/errors.php b/resources/lang/sk/errors.php index e3420852a..d4c7b7a3a 100644 --- a/resources/lang/sk/errors.php +++ b/resources/lang/sk/errors.php @@ -67,4 +67,11 @@ return [ 'error_occurred' => 'Nastala chyba', 'app_down' => ':appName je momentálne nedostupná', 'back_soon' => 'Čoskoro bude opäť dostupná.', + + // comments + 'comment_list' => 'Pri načítaní komentárov sa vyskytla chyba', + 'cannot_add_comment_to_draft' => 'Do konceptu nemôžete pridávať komentáre.', + 'comment_add' => 'Počas pridávania komentára sa vyskytla chyba', + 'comment_delete' => 'Pri odstraňovaní komentára došlo k chybe', + 'empty_comment' => 'Nelze pridať prázdny komentár.', ]; diff --git a/resources/views/comments/list-item.blade.php b/resources/views/comments/list-item.blade.php index 391e64baf..f274d2ed2 100644 --- a/resources/views/comments/list-item.blade.php +++ b/resources/views/comments/list-item.blade.php @@ -17,7 +17,7 @@ <li ng-if="::(level < 3 && vm.canComment())"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" is-reply="true">{{ trans('entities.comment_reply') }}</a></li> <li ng-if="::vm.canEditDelete(comment, 'comment_update')"><a href="#" comment-reply-link no-comment-reply-dupe="true" comment="comment" >{{ trans('entities.comment_edit') }}</a></li> <li ng-if="::vm.canEditDelete(comment, 'comment_delete')"><a href="#" comment-delete-link comment="comment" >{{ trans('entities.comment_delete') }}</a></li> - <li>Created <a title="@{{::comment.created.day_time_str}}" href="#?cm=comment-@{{::pageId}}-@{{::comment.id}}">@{{::comment.created.diff}}</a></li> + <li>{{ trans('entities.comment_create') }} <a title="@{{::comment.created.day_time_str}}" href="#?cm=comment-@{{::pageId}}-@{{::comment.id}}">@{{::comment.created.diff}}</a></li> <li ng-if="::comment.updated"><span title="@{{::comment.updated.day_time_str}}">@{{ ::vm.trans('entities.comment_updated_text', { updateDiff: comment.updated.diff }) }} <a href="@{{::comment.updated_by.profile_url}}">@{{::comment.updated_by.name}}</a></span></li> </ul> From 552943c03349100c8655059554b9fadfc3291e75 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sat, 10 Jun 2017 19:46:00 +0530 Subject: [PATCH 24/83] #47 - Undos changes in config files. --- config/app.php | 4 ++-- config/database.php | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/app.php b/config/app.php index 13bb9aa7d..54cdca21b 100644 --- a/config/app.php +++ b/config/app.php @@ -3,7 +3,7 @@ return [ - 'env' => env('APP_ENV', 'development'), + 'env' => env('APP_ENV', 'production'), 'editor' => env('APP_EDITOR', 'html'), @@ -18,7 +18,7 @@ return [ | */ - 'debug' => env('APP_DEBUG', true), + 'debug' => env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- diff --git a/config/database.php b/config/database.php index d13268cea..92c768245 100644 --- a/config/database.php +++ b/config/database.php @@ -71,9 +71,9 @@ return [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), - 'database' => env('DB_DATABASE', 'bookstack'), - 'username' => env('DB_USERNAME', 'root'), - 'password' => env('DB_PASSWORD', 'Change123'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', From c76e7c706caee5a77397457e0bc097cb502cbbeb Mon Sep 17 00:00:00 2001 From: Abijeet Patro <abijeetpatro@gmail.com> Date: Sat, 10 Jun 2017 19:47:45 +0530 Subject: [PATCH 25/83] adding a comment on top. --- resources/lang/sk/entities.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/lang/sk/entities.php b/resources/lang/sk/entities.php index 8a3aa4df6..7c8f34368 100644 --- a/resources/lang/sk/entities.php +++ b/resources/lang/sk/entities.php @@ -225,7 +225,7 @@ return [ 'profile_not_created_books' => ':userName nevytvoril žiadne knihy', /** - * + * Comments */ 'comment' => 'Komentár', 'comments' => 'Komentáre', From e155c52256a6b8cf965b3cd3bf08747d2d9bdde2 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sat, 10 Jun 2017 22:55:36 +0530 Subject: [PATCH 26/83] #47 - Fixes a few issues with the code. --- resources/assets/js/controllers.js | 2 -- resources/lang/es/entities.php | 2 +- resources/views/comments/comment-reply.blade.php | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index c1bfd441f..aebde8da4 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -272,7 +272,6 @@ module.exports = function (ngApp, events) { $scope.draftsEnabled = $attrs.draftsEnabled === 'true'; $scope.isUpdateDraft = Number($attrs.pageUpdateDraft) === 1; $scope.isNewPageDraft = Number($attrs.pageNewDraft) === 1; - $scope.commentsLoaded = false; // Set initial header draft text if ($scope.isUpdateDraft || $scope.isNewPageDraft) { @@ -687,7 +686,6 @@ module.exports = function (ngApp, events) { const MarkdownIt = require("markdown-it"); const md = new MarkdownIt({html: true}); let vm = this; - $scope.errors = {}; vm.saveComment = function () { let pageId = $scope.comment.pageId || $scope.pageId; diff --git a/resources/lang/es/entities.php b/resources/lang/es/entities.php index aadfa2324..2ca55a786 100644 --- a/resources/lang/es/entities.php +++ b/resources/lang/es/entities.php @@ -233,7 +233,7 @@ return [ 'comment_created' => 'Comentario añadido', 'comment_updated' => 'Comentario actualizado', 'comment_deleted' => 'Comentario eliminado', - 'comment_updated_text' => 'Actualizado hace :updateDiff minutos por', + 'comment_updated_text' => 'Actualizado hace :updateDiff por', 'comment_delete_confirm' => 'Esto eliminará el contenido del comentario. ¿Estás seguro de que quieres eliminar este comentario?', 'comment_create' => 'Creado' ]; diff --git a/resources/views/comments/comment-reply.blade.php b/resources/views/comments/comment-reply.blade.php index 9c698bf0d..02535341c 100644 --- a/resources/views/comments/comment-reply.blade.php +++ b/resources/views/comments/comment-reply.blade.php @@ -3,7 +3,7 @@ <textarea name="markdown" rows="3" ng-model="comment.text" placeholder="{{ trans('entities.comment_placeholder') }}"></textarea> <input type="hidden" ng-model="comment.pageId" name="comment.pageId" value="{{$pageId}}" ng-init="comment.pageId = {{$pageId }}"> <button type="button" ng-if="::(isReply || isEdit)" class="button muted" ng-click="closeBox()">{{ trans('entities.comment_cancel') }}</button> - <button type="submit" class="button pos" ng-click="vm.saveComment(isReply)">{{ trans('entities.comment_save') }}</button> + <button type="submit" class="button pos" ng-click="vm.saveComment()">{{ trans('entities.comment_save') }}</button> </form> </div> From 9dbd7fa618dcac1a6301be36bae78b8bf9113b6b Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sun, 11 Jun 2017 11:40:37 +0530 Subject: [PATCH 27/83] #47 - Adding comments to the dummy content seeder. --- database/factories/ModelFactory.php | 10 ++++++++++ database/seeds/DummyContentSeeder.php | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index ebf78d1fa..b5bb32c11 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -70,4 +70,14 @@ $factory->define(BookStack\Image::class, function ($faker) { 'type' => 'gallery', 'uploaded_to' => 0 ]; +}); + +$factory->define(BookStack\Comment::class, function($faker) { + $text = $faker->paragraph(3); + $html = '<p>' . $text. '</p>'; + return [ + 'html' => $html, + 'text' => '#' . $text, + 'active' => 1 + ]; }); \ No newline at end of file diff --git a/database/seeds/DummyContentSeeder.php b/database/seeds/DummyContentSeeder.php index 3d92efab1..996cd178d 100644 --- a/database/seeds/DummyContentSeeder.php +++ b/database/seeds/DummyContentSeeder.php @@ -20,7 +20,10 @@ class DummyContentSeeder extends Seeder ->each(function($book) use ($user) { $chapters = factory(\BookStack\Chapter::class, 5)->create(['created_by' => $user->id, 'updated_by' => $user->id]) ->each(function($chapter) use ($user, $book){ - $pages = factory(\BookStack\Page::class, 5)->make(['created_by' => $user->id, 'updated_by' => $user->id, 'book_id' => $book->id]); + $pages = factory(\BookStack\Page::class, 5)->create(['created_by' => $user->id, 'updated_by' => $user->id, 'book_id' => $book->id])->each(function($page) use ($user) { + $comments = factory(\BookStack\Comment::class, 3)->make(['created_by' => $user->id, 'updated_by' => $user->id, 'page_id' => $page->id]); + $page->comments()->saveMany($comments); + }); $chapter->pages()->saveMany($pages); }); $pages = factory(\BookStack\Page::class, 3)->make(['created_by' => $user->id, 'updated_by' => $user->id]); From fd50efb503bf626934aa868b4d02b589e498842b Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Sun, 11 Jun 2017 11:41:33 +0530 Subject: [PATCH 28/83] #47 - Putting the comments right under the page. --- app/Page.php | 4 ++++ resources/views/pages/show.blade.php | 14 ++++---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/app/Page.php b/app/Page.php index c9823e7e4..d722e4e54 100644 --- a/app/Page.php +++ b/app/Page.php @@ -66,6 +66,10 @@ class Page extends Entity return $this->hasMany(Attachment::class, 'uploaded_to')->orderBy('order', 'asc'); } + public function comments() { + return $this->hasMany(Comment::class, 'page_id')->orderBy('created_on', 'asc'); + } + /** * Get the url for this page. * @param string|bool $path diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 480a7603e..c63444344 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -46,13 +46,13 @@ </div> - <div class="container" id="page-show" ng-non-bindable> + <div class="container" id="page-show"> <div class="row"> <div class="col-md-9 print-full-width"> - <div class="page-content"> + <div class="page-content" ng-non-bindable> <div class="pointer-container" id="pointer"> - <div class="pointer anim"> + <div class="pointer anim" > <span class="icon text-primary"><i class="zmdi zmdi-link"></i></span> <input readonly="readonly" type="text" id="pointer-url" placeholder="url"> <button class="button icon" data-clipboard-target="#pointer-url" type="button" title="{{ trans('entities.pages_copy_link') }}"><i class="zmdi zmdi-copy"></i></button> @@ -66,6 +66,7 @@ @include('partials.entity-meta', ['entity' => $page]) </div> + @include('comments/comments', ['pageId' => $page->id]) </div> <div class="col-md-3 print-hidden"> @@ -109,13 +110,6 @@ </div> </div> - <div class="container"> - <div class="row"> - <div class="col-md-9"> - @include('comments/comments', ['pageId' => $page->id]) - </div> - </div> - </div> @stop @section('scripts') From 7d02f77e6764175d2375a2b55e366b9beaba31a3 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Tue, 13 Jun 2017 02:31:17 +0530 Subject: [PATCH 29/83] #47 - Added more test cases to test the APIs and permission for comments. --- database/factories/ModelFactory.php | 2 +- ...017_01_01_130541_create_comments_table.php | 47 +++++++- tests/Entity/CommentTest.php | 111 ++++++++++++++++++ tests/Permissions/RolesTest.php | 106 +++++++++++++++++ 4 files changed, 264 insertions(+), 2 deletions(-) create mode 100644 tests/Entity/CommentTest.php diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index b5bb32c11..b03e34b9b 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -77,7 +77,7 @@ $factory->define(BookStack\Comment::class, function($faker) { $html = '<p>' . $text. '</p>'; return [ 'html' => $html, - 'text' => '#' . $text, + 'text' => $text, 'active' => 1 ]; }); \ No newline at end of file diff --git a/database/migrations/2017_01_01_130541_create_comments_table.php b/database/migrations/2017_01_01_130541_create_comments_table.php index 8aa99eea4..f4ece31a7 100644 --- a/database/migrations/2017_01_01_130541_create_comments_table.php +++ b/database/migrations/2017_01_01_130541_create_comments_table.php @@ -17,7 +17,7 @@ class CreateCommentsTable extends Migration return; } Schema::create('comments', function (Blueprint $table) { - $table->increments('id')->unsigned(); + $table->increments('id')->unsigned(); $table->integer('page_id')->unsigned(); $table->longText('text')->nullable(); $table->longText('html')->nullable(); @@ -45,6 +45,51 @@ class CreateCommentsTable extends Migration 'permission_id' => $permissionId ]); } + + // Get roles with permissions we need to change + /* + $editorRole = DB::table('roles')->where('name', '=', 'editor')->first(); + if (!empty($editorRole)) { + $editorRoleId = $editorRole->id; + // Create & attach new entity permissions + $ops = ['Create All', 'Create Own', 'Update Own', 'Delete Own']; + $entity = 'Comment'; + foreach ($ops as $op) { + $permissionId = DB::table('role_permissions')->insertGetId([ + 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), + 'display_name' => $op . ' ' . $entity . 's', + 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() + ]); + DB::table('permission_role')->insert([ + 'role_id' => $editorRoleId, + 'permission_id' => $permissionId + ]); + } + } + + // Get roles with permissions we need to change + $viewerRole = DB::table('roles')->where('name', '=', 'viewer')->first(); + if (!empty($viewerRole)) { + $viewerRoleId = $viewerRole->id; + // Create & attach new entity permissions + $ops = ['Create All']; + $entity = 'Comment'; + foreach ($ops as $op) { + $permissionId = DB::table('role_permissions')->insertGetId([ + 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), + 'display_name' => $op . ' ' . $entity . 's', + 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() + ]); + DB::table('permission_role')->insert([ + 'role_id' => $viewerRoleId, + 'permission_id' => $permissionId + ]); + } + } + */ + }); } diff --git a/tests/Entity/CommentTest.php b/tests/Entity/CommentTest.php new file mode 100644 index 000000000..86eb31213 --- /dev/null +++ b/tests/Entity/CommentTest.php @@ -0,0 +1,111 @@ +<?php namespace Tests; + +use BookStack\Page; +use BookStack\Comment; + +class CommentTest extends BrowserKitTest +{ + + public function test_add_comment() + { + $this->asAdmin(); + $page = $this->getPage(); + + $this->addComment($page); + } + + public function test_comment_reply() + { + $this->asAdmin(); + $page = $this->getPage(); + + // add a normal comment + $createdComment = $this->addComment($page); + + // reply to the added comment + $this->addComment($page, $createdComment['id']); + } + + public function test_comment_edit() + { + $this->asAdmin(); + $page = $this->getPage(); + + $createdComment = $this->addComment($page); + $comment = [ + 'id' => $createdComment['id'], + 'page_id' => $createdComment['page_id'] + ]; + $this->updateComment($comment); + } + + public function test_comment_delete() + { + $this->asAdmin(); + $page = $this->getPage(); + + $createdComment = $this->addComment($page); + + $this->deleteComment($createdComment['id']); + } + + private function getPage() { + $page = Page::first(); + return $page; + } + + + private function addComment($page, $parentCommentId = null) { + $comment = factory(Comment::class)->make(); + $url = "/ajax/page/$page->id/comment/"; + $request = [ + 'text' => $comment->text, + 'html' => $comment->html + ]; + if (!empty($parentCommentId)) { + $request['parent_id'] = $parentCommentId; + } + $this->call('POST', $url, $request); + + $createdComment = $this->checkResponse(); + return $createdComment; + } + + private function updateComment($comment) { + $tmpComment = factory(Comment::class)->make(); + $url = '/ajax/page/' . $comment['page_id'] . '/comment/ ' . $comment['id']; + $request = [ + 'text' => $tmpComment->text, + 'html' => $tmpComment->html + ]; + + $this->call('PUT', $url, $request); + + $updatedComment = $this->checkResponse(); + return $updatedComment; + } + + private function deleteComment($commentId) { + // Route::delete('/ajax/comment/{id}', 'CommentController@destroy'); + $url = '/ajax/comment/' . $commentId; + $this->call('DELETE', $url); + + $deletedComment = $this->checkResponse(); + return $deletedComment; + } + + private function checkResponse() { + $expectedResp = [ + 'status' => 'success' + ]; + + $this->assertResponseOk(); + $this->seeJsonContains($expectedResp); + + $resp = $this->decodeResponseJson(); + $createdComment = $resp['comment']; + $this->assertArrayHasKey('id', $createdComment); + + return $createdComment; + } +} diff --git a/tests/Permissions/RolesTest.php b/tests/Permissions/RolesTest.php index 83d1b98a8..9d054fe0b 100644 --- a/tests/Permissions/RolesTest.php +++ b/tests/Permissions/RolesTest.php @@ -620,4 +620,110 @@ class RolesTest extends BrowserKitTest ->dontSeeInDatabase('images', ['id' => $image->id]); } + public function test_comment_create_permission () { + $ownPage = $this->createEntityChainBelongingToUser($this->user)['page']; + + $this->actingAs($this->user)->addComment($ownPage); + + $this->assertResponseStatus(403); + + $this->giveUserPermissions($this->user, ['comment-create-all']); + + $this->actingAs($this->user)->addComment($ownPage); + $this->assertResponseOk(200)->seeJsonContains(['status' => 'success']); + } + + + public function test_comment_update_own_permission () { + $ownPage = $this->createEntityChainBelongingToUser($this->user)['page']; + $this->giveUserPermissions($this->user, ['comment-create-all']); + $comment = $this->actingAs($this->user)->addComment($ownPage); + + // no comment-update-own + $this->actingAs($this->user)->updateComment($ownPage, $comment['id']); + $this->assertResponseStatus(403); + + $this->giveUserPermissions($this->user, ['comment-update-own']); + + // now has comment-update-own + $this->actingAs($this->user)->updateComment($ownPage, $comment['id']); + $this->assertResponseOk()->seeJsonContains(['status' => 'success']); + } + + public function test_comment_update_all_permission () { + $ownPage = $this->createEntityChainBelongingToUser($this->user)['page']; + $comment = $this->asAdmin()->addComment($ownPage); + + // no comment-update-all + $this->actingAs($this->user)->updateComment($ownPage, $comment['id']); + $this->assertResponseStatus(403); + + $this->giveUserPermissions($this->user, ['comment-update-all']); + + // now has comment-update-all + $this->actingAs($this->user)->updateComment($ownPage, $comment['id']); + $this->assertResponseOk()->seeJsonContains(['status' => 'success']); + } + + public function test_comment_delete_own_permission () { + $ownPage = $this->createEntityChainBelongingToUser($this->user)['page']; + $this->giveUserPermissions($this->user, ['comment-create-all']); + $comment = $this->actingAs($this->user)->addComment($ownPage); + + // no comment-delete-own + $this->actingAs($this->user)->deleteComment($comment['id']); + $this->assertResponseStatus(403); + + $this->giveUserPermissions($this->user, ['comment-delete-own']); + + // now has comment-update-own + $this->actingAs($this->user)->deleteComment($comment['id']); + $this->assertResponseOk()->seeJsonContains(['status' => 'success']); + } + + public function test_comment_delete_all_permission () { + $ownPage = $this->createEntityChainBelongingToUser($this->user)['page']; + $comment = $this->asAdmin()->addComment($ownPage); + + // no comment-delete-all + $this->actingAs($this->user)->deleteComment($comment['id']); + $this->assertResponseStatus(403); + + $this->giveUserPermissions($this->user, ['comment-delete-all']); + + // now has comment-delete-all + $this->actingAs($this->user)->deleteComment($comment['id']); + $this->assertResponseOk()->seeJsonContains(['status' => 'success']); + } + + private function addComment($page) { + $comment = factory(\BookStack\Comment::class)->make(); + $url = "/ajax/page/$page->id/comment/"; + $request = [ + 'text' => $comment->text, + 'html' => $comment->html + ]; + + $this->json('POST', $url, $request); + $resp = $this->decodeResponseJson(); + return $resp['comment']; + + } + + private function updateComment($page, $commentId) { + $comment = factory(\BookStack\Comment::class)->make(); + $url = "/ajax/page/$page->id/comment/$commentId"; + $request = [ + 'text' => $comment->text, + 'html' => $comment->html + ]; + + return $this->json('PUT', $url, $request); + } + + private function deleteComment($commentId) { + $url = '/ajax/comment/' . $commentId; + return $this->json('DELETE', $url); + } + } From 574ee820a9155fa3989a5a0a1dfe57cdb23b3655 Mon Sep 17 00:00:00 2001 From: Abijeet <abijeetpatro@gmail.com> Date: Tue, 13 Jun 2017 02:37:50 +0530 Subject: [PATCH 30/83] #47 - Fixes the issues with the test case. --- tests/Permissions/RolesTest.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/Permissions/RolesTest.php b/tests/Permissions/RolesTest.php index 9d054fe0b..0e9f691e0 100644 --- a/tests/Permissions/RolesTest.php +++ b/tests/Permissions/RolesTest.php @@ -706,8 +706,10 @@ class RolesTest extends BrowserKitTest $this->json('POST', $url, $request); $resp = $this->decodeResponseJson(); - return $resp['comment']; - + if (isset($resp['comment'])) { + return $resp['comment']; + } + return null; } private function updateComment($page, $commentId) { From 9e0c9315737ff978c91114e5c74bba114f138cc9 Mon Sep 17 00:00:00 2001 From: JachuPL <bonkowskijan@gmail.com> Date: Thu, 13 Jul 2017 16:00:42 +0200 Subject: [PATCH 31/83] Polish translation --- config/app.php | 2 +- resources/lang/en/settings.php | 1 + resources/lang/pl/activities.php | 40 ++++++ resources/lang/pl/auth.php | 76 ++++++++++ resources/lang/pl/common.php | 59 ++++++++ resources/lang/pl/components.php | 32 +++++ resources/lang/pl/entities.php | 237 +++++++++++++++++++++++++++++++ resources/lang/pl/errors.php | 70 +++++++++ resources/lang/pl/pagination.php | 19 +++ resources/lang/pl/passwords.php | 22 +++ resources/lang/pl/settings.php | 111 +++++++++++++++ resources/lang/pl/validation.php | 108 ++++++++++++++ 12 files changed, 776 insertions(+), 1 deletion(-) create mode 100644 resources/lang/pl/activities.php create mode 100644 resources/lang/pl/auth.php create mode 100644 resources/lang/pl/common.php create mode 100644 resources/lang/pl/components.php create mode 100644 resources/lang/pl/entities.php create mode 100644 resources/lang/pl/errors.php create mode 100644 resources/lang/pl/pagination.php create mode 100644 resources/lang/pl/passwords.php create mode 100644 resources/lang/pl/settings.php create mode 100644 resources/lang/pl/validation.php diff --git a/config/app.php b/config/app.php index 48348f837..a390eaf83 100644 --- a/config/app.php +++ b/config/app.php @@ -58,7 +58,7 @@ return [ */ 'locale' => env('APP_LANG', 'en'), - 'locales' => ['en', 'de', 'es', 'fr', 'nl', 'pt_BR', 'sk', 'ja'], + 'locales' => ['en', 'de', 'es', 'fr', 'nl', 'pt_BR', 'sk', 'ja', 'pl'], /* |-------------------------------------------------------------------------- diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index 4529b1978..3eec7737f 100644 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -122,6 +122,7 @@ return [ 'pt_BR' => 'Português do Brasil', 'sk' => 'Slovensky', 'ja' => '日本語', + 'pl' => 'Polski', ] /////////////////////////////////// ]; diff --git a/resources/lang/pl/activities.php b/resources/lang/pl/activities.php new file mode 100644 index 000000000..5ef5acab0 --- /dev/null +++ b/resources/lang/pl/activities.php @@ -0,0 +1,40 @@ +<?php + +return [ + + /** + * Activity text strings. + * Is used for all the text within activity logs & notifications. + */ + + // Pages + 'page_create' => 'utworzono stronę', + 'page_create_notification' => 'Strona utworzona pomyślnie', + 'page_update' => 'zaktualizowano stronę', + 'page_update_notification' => 'Strona zaktualizowana pomyślnie', + 'page_delete' => 'usunięto stronę', + 'page_delete_notification' => 'Strona usunięta pomyślnie', + 'page_restore' => 'przywrócono stronę', + 'page_restore_notification' => 'Stronga przywrócona pomyślnie', + 'page_move' => 'przeniesiono stronę', + + // Chapters + 'chapter_create' => 'utworzono rozdział', + 'chapter_create_notification' => 'Rozdział utworzony pomyślnie', + 'chapter_update' => 'zaktualizowano rozdział', + 'chapter_update_notification' => 'Rozdział zaktualizowany pomyślnie', + 'chapter_delete' => 'usunięto rozdział', + 'chapter_delete_notification' => 'Rozdział usunięty pomyślnie', + 'chapter_move' => 'przeniesiono rozdział', + + // Books + 'book_create' => 'utworzono księgę', + 'book_create_notification' => 'Księga utworzona pomyślnie', + 'book_update' => 'zaktualizowano księgę', + 'book_update_notification' => 'Księga zaktualizowana pomyślnie', + 'book_delete' => 'usunięto księgę', + 'book_delete_notification' => 'Księga usunięta pomyślnie', + 'book_sort' => 'posortowano księgę', + 'book_sort_notification' => 'Księga posortowana pomyślnie', + +]; diff --git a/resources/lang/pl/auth.php b/resources/lang/pl/auth.php new file mode 100644 index 000000000..740e067ca --- /dev/null +++ b/resources/lang/pl/auth.php @@ -0,0 +1,76 @@ +<?php +return [ + /* + |-------------------------------------------------------------------------- + | Authentication Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used during authentication for various + | messages that we need to display to the user. You are free to modify + | these language lines according to your application's requirements. + | + */ + 'failed' => 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + + /** + * Login & Register + */ + 'sign_up' => 'Zarejestruj się', + 'log_in' => 'Zaloguj się', + 'log_in_with' => 'Zaloguj się za pomocą :socialDriver', + 'sign_up_with' => 'Zarejestruj się za pomocą :socialDriver', + 'logout' => 'Wyloguj', + + 'name' => 'Imię', + 'username' => 'Nazwa użytkownika', + 'email' => 'Email', + 'password' => 'Hasło', + 'password_confirm' => 'Potwierdzenie hasła', + 'password_hint' => 'Musi mieć więcej niż 5 znaków', + 'forgot_password' => 'Przypomnij hasło', + 'remember_me' => 'Zapamiętaj mnie', + 'ldap_email_hint' => 'Wprowadź adres email dla tego konta.', + 'create_account' => 'Utwórz konto', + 'social_login' => 'Logowanie za pomocą konta społecznościowego', + 'social_registration' => 'Rejestracja za pomocą konta społecznościowego', + 'social_registration_text' => 'Zarejestruj się za pomocą innej usługi.', + + 'register_thanks' => 'Dziękujemy za rejestrację!', + 'register_confirm' => 'Sprawdź podany adres e-mail i kliknij w link, by uzyskać dostęp do :appName.', + 'registrations_disabled' => 'Rejestracja jest obecnie zablokowana.', + 'registration_email_domain_invalid' => 'Adresy e-mail z tej domeny nie mają dostępu do tej aplikacji', + 'register_success' => 'Dziękujemy za rejestrację! Zalogowano Cię automatycznie.', + + + /** + * Password Reset + */ + 'reset_password' => 'Resetowanie hasła', + 'reset_password_send_instructions' => 'Wprowadź adres e-mail powiązany z Twoim kontem, by otrzymać link do resetowania hasła.', + 'reset_password_send_button' => 'Wyślij link do resetowania hasła', + 'reset_password_sent_success' => 'Wysłano link do resetowania hasła na adres :email.', + 'reset_password_success' => 'Hasło zostało zresetowane pomyślnie.', + + 'email_reset_subject' => 'Resetowanie hasła do :appName', + 'email_reset_text' => 'Otrzymujesz tę wiadomość ponieważ ktoś zażądał zresetowania hasła do Twojego konta.', + 'email_reset_not_requested' => 'Jeśli to nie Ty złożyłeś żądanie zresetowania hasła, zignoruj tę wiadomość.', + + + /** + * Email Confirmation + */ + 'email_confirm_subject' => 'Potwierdź swój adres email w :appName', + 'email_confirm_greeting' => 'Dziękujemy za dołączenie do :appName!', + 'email_confirm_text' => 'Prosimy byś potwierdził swoje hasło klikając przycisk poniżej:', + 'email_confirm_action' => 'Potwierdź email', + 'email_confirm_send_error' => 'Wymagane jest potwierdzenie hasła, lecz wiadomość nie mogła zostać wysłana. Skontaktuj się z administratorem w celu upewnienia się, że skrzynka została skonfigurowana prawidłowo.', + 'email_confirm_success' => 'Adres email został potwierdzony!', + 'email_confirm_resent' => 'Wiadomość potwierdzająca została wysłana, sprawdź swoją skrzynkę.', + + 'email_not_confirmed' => 'Adres email niepotwierdzony', + 'email_not_confirmed_text' => 'Twój adres email nie został jeszcze potwierdzony.', + 'email_not_confirmed_click_link' => 'Aby potwierdzić swoje konto kliknij w link wysłany w wiadomości po rejestracji.', + 'email_not_confirmed_resend' => 'Jeśli wiadomość do Ciebie nie dotarła możesz wysłać ją ponownie wypełniając formularz poniżej.', + 'email_not_confirmed_resend_button' => 'Wyślij ponownie wiadomość z potwierdzeniem', +]; \ No newline at end of file diff --git a/resources/lang/pl/common.php b/resources/lang/pl/common.php new file mode 100644 index 000000000..1c8963653 --- /dev/null +++ b/resources/lang/pl/common.php @@ -0,0 +1,59 @@ +<?php +return [ + + /** + * Buttons + */ + 'cancel' => 'Anuluj', + 'confirm' => 'Zatwierdź', + 'back' => 'Wstecz', + 'save' => 'Zapisz', + 'continue' => 'Kontynuuj', + 'select' => 'Wybierz', + + /** + * Form Labels + */ + 'name' => 'Nazwa', + 'description' => 'Opis', + 'role' => 'Rola', + + /** + * Actions + */ + 'actions' => 'Akcje', + 'view' => 'Widok', + 'create' => 'Utwórz', + 'update' => 'Zaktualizuj', + 'edit' => 'Edytuj', + 'sort' => 'Sortuj', + 'move' => 'Przenieś', + 'delete' => 'Usuń', + 'search' => 'Szukaj', + 'search_clear' => 'Wyczyść wyszukiwanie', + 'reset' => 'Resetuj', + 'remove' => 'Usuń', + 'add' => 'Dodaj', + + + /** + * Misc + */ + 'deleted_user' => 'Użytkownik usunięty', + 'no_activity' => 'Brak aktywności do pokazania', + 'no_items' => 'Brak elementów do wyświetlenia', + 'back_to_top' => 'Powrót na górę', + 'toggle_details' => 'Włącz/wyłącz szczegóły', + + /** + * Header + */ + 'view_profile' => 'Zobacz profil', + 'edit_profile' => 'Edytuj profil', + + /** + * Email Content + */ + 'email_action_help' => 'Jeśli masz problem z kliknięciem przycisku ":actionText", skopiuj i wklej poniższy adres URL w nowej karcie swojej przeglądarki:', + 'email_rights' => 'Wszelkie prawa zastrzeżone', +]; \ No newline at end of file diff --git a/resources/lang/pl/components.php b/resources/lang/pl/components.php new file mode 100644 index 000000000..c1dbcd44b --- /dev/null +++ b/resources/lang/pl/components.php @@ -0,0 +1,32 @@ +<?php +return [ + + /** + * Image Manager + */ + 'image_select' => 'Wybór obrazka', + 'image_all' => 'Wszystkie', + 'image_all_title' => 'Zobacz wszystkie obrazki', + 'image_book_title' => 'Zobacz obrazki zapisane w tej księdze', + 'image_page_title' => 'Zobacz obrazki zapisane na tej stronie', + 'image_search_hint' => 'Szukaj po nazwie obrazka', + 'image_uploaded' => 'Udostępniono :uploadedDate', + 'image_load_more' => 'Wczytaj więcej', + 'image_image_name' => 'Nazwa obrazka', + 'image_delete_confirm' => 'Ten obrazek jest używany na stronach poniżej, kliknij ponownie Usuń by potwierdzić usunięcie obrazka.', + 'image_select_image' => 'Wybierz obrazek', + 'image_dropzone' => 'Upuść obrazki tutaj lub kliknij by wybrać obrazki do udostępnienia', + 'images_deleted' => 'Usunięte obrazki', + 'image_preview' => 'Podgląd obrazka', + 'image_upload_success' => 'Obrazek wysłany pomyślnie', + 'image_update_success' => 'Szczegóły obrazka zaktualizowane pomyślnie', + 'image_delete_success' => 'Obrazek usunięty pomyślnie', + + /** + * Code editor + */ + 'code_editor' => 'Edytuj kod', + 'code_language' => 'Język kodu', + 'code_content' => 'Zawartość kodu', + 'code_save' => 'Zapisz kod', +]; \ No newline at end of file diff --git a/resources/lang/pl/entities.php b/resources/lang/pl/entities.php new file mode 100644 index 000000000..30e853bce --- /dev/null +++ b/resources/lang/pl/entities.php @@ -0,0 +1,237 @@ +<?php +return [ + + /** + * Shared + */ + 'recently_created' => 'Ostatnio utworzone', + 'recently_created_pages' => 'Ostatnio utworzone strony', + 'recently_updated_pages' => 'Ostatnio zaktualizowane strony', + 'recently_created_chapters' => 'Ostatnio utworzone rozdziały', + 'recently_created_books' => 'Ostatnio utworzone księgi', + 'recently_update' => 'Ostatnio zaktualizowane', + 'recently_viewed' => 'Ostatnio wyświetlane', + 'recent_activity' => 'Ostatnia aktywność', + 'create_now' => 'Utwórz teraz', + 'revisions' => 'Rewizje', + 'meta_revision' => 'Rewizja #:revisionCount', + 'meta_created' => 'Utworzono :timeLength', + 'meta_created_name' => 'Utworzono :timeLength przez :user', + 'meta_updated' => 'Zaktualizowano :timeLength', + 'meta_updated_name' => 'Zaktualizowano :timeLength przez :user', + 'x_pages' => ':count stron', + 'entity_select' => 'Wybór encji', + 'images' => 'Obrazki', + 'my_recent_drafts' => 'Moje ostatnie szkice', + 'my_recently_viewed' => 'Moje ostatnio wyświetlane', + 'no_pages_viewed' => 'Nie wyświetlano żadnych stron', + 'no_pages_recently_created' => 'Nie utworzono ostatnio żadnych stron', + 'no_pages_recently_updated' => 'Nie zaktualizowano ostatnio żadnych stron', + 'export' => 'Eksportuj', + 'export_html' => 'Plik HTML', + 'export_pdf' => 'Plik PDF', + 'export_text' => 'Plik tekstowy', + + /** + * Permissions and restrictions + */ + 'permissions' => 'Uprawnienia', + 'permissions_intro' => 'Jeśli odblokowane, te uprawnienia będą miały priorytet względem pozostałych ustawionych uprawnień ról.', + 'permissions_enable' => 'Odblokuj własne uprawnienia', + 'permissions_save' => 'Zapisz uprawnienia', + + /** + * Search + */ + 'search_results' => 'Wyniki wyszukiwania', + 'search_total_results_found' => ':count znalezionych wyników|:count ogółem znalezionych wyników', + 'search_clear' => 'Wyczyść wyszukiwanie', + 'search_no_pages' => 'Brak stron spełniających zadane kryterium', + 'search_for_term' => 'Szukaj :term', + 'search_more' => 'Więcej wyników', + 'search_filters' => 'Filtry wyszukiwania', + 'search_content_type' => 'Rodziaj treści', + 'search_exact_matches' => 'Dokładne frazy', + 'search_tags' => 'Tagi wyszukiwania', + 'search_viewed_by_me' => 'Wyświetlone przeze mnie', + 'search_not_viewed_by_me' => 'Niewyświetlone przeze mnie', + 'search_permissions_set' => 'Zbiór uprawnień', + 'search_created_by_me' => 'Utworzone przeze mnie', + 'search_updated_by_me' => 'Zaktualizowane przeze mnie', + 'search_updated_before' => 'Zaktualizowane przed', + 'search_updated_after' => 'Zaktualizowane po', + 'search_created_before' => 'Utworzone przed', + 'search_created_after' => 'Utworzone po', + 'search_set_date' => 'Ustaw datę', + 'search_update' => 'Zaktualizuj wyszukiwanie', + + /** + * Books + */ + 'book' => 'Księga', + 'books' => 'Księgi', + 'books_empty' => 'Brak utworzonych ksiąg', + 'books_popular' => 'Popularne księgi', + 'books_recent' => 'Ostatnie księgi', + 'books_popular_empty' => 'Najbardziej popularne księgi zostaną wyświetlone w tym miejscu.', + 'books_create' => 'Utwórz księgę', + 'books_delete' => 'Usuń księgę', + 'books_delete_named' => 'Usuń księgę :bookName', + 'books_delete_explain' => 'To spowoduje usunięcie księgi \':bookName\', Wszystkie strony i rozdziały zostaną usunięte.', + 'books_delete_confirmation' => 'Czy na pewno chcesz usunąc tę księgę?', + 'books_edit' => 'Edytuj księgę', + 'books_edit_named' => 'Edytuj księgę :bookName', + 'books_form_book_name' => 'Nazwa księgi', + 'books_save' => 'Zapisz księgę', + 'books_permissions' => 'Uprawnienia księgi', + 'books_permissions_updated' => 'Zaktualizowano uprawnienia księgi', + 'books_empty_contents' => 'Brak stron lub rozdziałów w tej księdze.', + 'books_empty_create_page' => 'Utwórz nową stronę', + 'books_empty_or' => 'lub', + 'books_empty_sort_current_book' => 'posortuj bieżącą księgę', + 'books_empty_add_chapter' => 'Dodaj rozdział', + 'books_permissions_active' => 'Uprawnienia księgi aktywne', + 'books_search_this' => 'Wyszukaj w tej księdze', + 'books_navigation' => 'Nawigacja po księdze', + 'books_sort' => 'Sortuj zawartość Księgi', + 'books_sort_named' => 'Sortuj księgę :bookName', + 'books_sort_show_other' => 'Pokaż inne księgi', + 'books_sort_save' => 'Zapisz nowy porządek', + + /** + * Chapters + */ + 'chapter' => 'Rozdział', + 'chapters' => 'Rozdziały', + 'chapters_popular' => 'Popularne rozdziały', + 'chapters_new' => 'Nowy rozdział', + 'chapters_create' => 'Utwórz nowy rozdział', + 'chapters_delete' => 'Usuń rozdział', + 'chapters_delete_named' => 'Usuń rozdział :chapterName', + 'chapters_delete_explain' => 'To spowoduje usunięcie rozdziału \':chapterName\', Wszystkie strony zostaną usunięte + i dodane bezpośrednio do księgi macierzystej.', + 'chapters_delete_confirm' => 'Czy na pewno chcesz usunąć ten rozdział?', + 'chapters_edit' => 'Edytuj rozdział', + 'chapters_edit_named' => 'Edytuj rozdział :chapterName', + 'chapters_save' => 'Zapisz rozdział', + 'chapters_move' => 'Przenieś rozdział', + 'chapters_move_named' => 'Przenieś rozdział :chapterName', + 'chapter_move_success' => 'Rozdział przeniesiony do :bookName', + 'chapters_permissions' => 'Uprawienia rozdziału', + 'chapters_empty' => 'Brak stron w tym rozdziale.', + 'chapters_permissions_active' => 'Uprawnienia rozdziału aktywne', + 'chapters_permissions_success' => 'Zaktualizowano uprawnienia rozdziału', + 'chapters_search_this' => 'Przeszukaj ten rozdział', + + /** + * Pages + */ + 'page' => 'Strona', + 'pages' => 'Strony', + 'pages_popular' => 'Popularne strony', + 'pages_new' => 'Nowa strona', + 'pages_attachments' => 'Załączniki', + 'pages_navigation' => 'Nawigacja po stronie', + 'pages_delete' => 'Usuń stronę', + 'pages_delete_named' => 'Usuń stronę :pageName', + 'pages_delete_draft_named' => 'Usuń szkic strony :pageName', + 'pages_delete_draft' => 'Usuń szkic strony', + 'pages_delete_success' => 'Strona usunięta pomyślnie', + 'pages_delete_draft_success' => 'Szkic strony usunięty pomyślnie', + 'pages_delete_confirm' => 'Czy na pewno chcesz usunąć tę stron?', + 'pages_delete_draft_confirm' => 'Czy na pewno chcesz usunąć szkic strony?', + 'pages_editing_named' => 'Edytowanie strony :pageName', + 'pages_edit_toggle_header' => 'Włącz/wyłącz nagłówek', + 'pages_edit_save_draft' => 'Zapisz szkic', + 'pages_edit_draft' => 'Edytuj szkic strony', + 'pages_editing_draft' => 'Edytowanie szkicu strony', + 'pages_editing_page' => 'Edytowanie strony', + 'pages_edit_draft_save_at' => 'Szkic zapisany ', + 'pages_edit_delete_draft' => 'Usuń szkic', + 'pages_edit_discard_draft' => 'Porzuć szkic', + 'pages_edit_set_changelog' => 'Ustaw log zmian', + 'pages_edit_enter_changelog_desc' => 'Opisz zmiany, które zostały wprowadzone', + 'pages_edit_enter_changelog' => 'Wyświetl log zmian', + 'pages_save' => 'Zapisz stronę', + 'pages_title' => 'Tytuł strony', + 'pages_name' => 'Nazwa strony', + 'pages_md_editor' => 'Edytor', + 'pages_md_preview' => 'Podgląd', + 'pages_md_insert_image' => 'Wstaw obrazek', + 'pages_md_insert_link' => 'Wstaw łącze do encji', + 'pages_not_in_chapter' => 'Strona nie została umieszczona w rozdziale', + 'pages_move' => 'Przenieś stronę', + 'pages_move_success' => 'Strona przeniesiona do ":parentName"', + 'pages_permissions' => 'Uprawnienia strony', + 'pages_permissions_success' => 'Zaktualizowano uprawnienia strony', + 'pages_revisions' => 'Rewizje strony', + 'pages_revisions_named' => 'Rewizje strony :pageName', + 'pages_revision_named' => 'Rewizja stroony :pageName', + 'pages_revisions_created_by' => 'Utworzona przez', + 'pages_revisions_date' => 'Data rewizji', + 'pages_revisions_number' => '#', + 'pages_revisions_changelog' => 'Log zmian', + 'pages_revisions_changes' => 'Zmiany', + 'pages_revisions_current' => 'Obecna wersja', + 'pages_revisions_preview' => 'Podgląd', + 'pages_revisions_restore' => 'Przywróć', + 'pages_revisions_none' => 'Ta strona nie posiada żadnych rewizji', + 'pages_copy_link' => 'Kopiuj link', + 'pages_permissions_active' => 'Uprawnienia strony aktywne', + 'pages_initial_revision' => 'Wydanie pierwotne', + 'pages_initial_name' => 'Nowa strona', + 'pages_editing_draft_notification' => 'Edytujesz obecnie szkic, który był ostatnio zapisany :timeDiff.', + 'pages_draft_edited_notification' => 'Od tego czasu ta strona była zmieniana. Zalecane jest odrzucenie tego szkicu.', + 'pages_draft_edit_active' => [ + 'start_a' => ':count użytkowników rozpoczęło edytowanie tej strony', + 'start_b' => ':userName edytuje stronę', + 'time_a' => ' od czasu ostatniej edycji', + 'time_b' => 'w ciągu ostatnich :minCount minut', + 'message' => ':start :time. Pamiętaj by nie nadpisywać czyichś zmian!', + ], + 'pages_draft_discarded' => 'Szkic odrzucony, edytor został uzupełniony najnowszą wersją strony', + + /** + * Editor sidebar + */ + 'page_tags' => 'Tagi strony', + 'tag' => 'Tag', + 'tags' => '', + 'tag_value' => 'Wartość tagu (opcjonalnie)', + 'tags_explain' => "Dodaj tagi by skategoryzować zawartość. \n W celu dokładniejszej organizacji zawartości możesz dodać wartości do tagów.", + 'tags_add' => 'Dodaj kolejny tag', + 'attachments' => 'Załączniki', + 'attachments_explain' => 'Udostępnij kilka plików lub załącz link. Będą one widoczne na marginesie strony.', + 'attachments_explain_instant_save' => 'Zmiany są zapisywane natychmiastowo.', + 'attachments_items' => 'Załączniki', + 'attachments_upload' => 'Dodaj plik', + 'attachments_link' => 'Dodaj link', + 'attachments_set_link' => 'Ustaw link', + 'attachments_delete_confirm' => 'Kliknij ponownie Usuń by potwierdzić usunięcie załącznika.', + 'attachments_dropzone' => 'Upuść pliki lub kliknij tutaj by udostępnić pliki', + 'attachments_no_files' => 'Nie udostępniono plików', + 'attachments_explain_link' => 'Możesz załączyć link jeśli nie chcesz udostępniać pliku. Może być to link do innej strony lub link do pliku w chmurze.', + 'attachments_link_name' => 'Nazwa linku', + 'attachment_link' => 'Link do załącznika', + 'attachments_link_url' => 'Link do pliku', + 'attachments_link_url_hint' => 'Strona lub plik', + 'attach' => 'Załącz', + 'attachments_edit_file' => 'Edytuj plik', + 'attachments_edit_file_name' => 'Nazwa pliku', + 'attachments_edit_drop_upload' => 'Upuść pliki lub kliknij tutaj by udostępnić pliki i nadpisać istniejące', + 'attachments_order_updated' => 'Kolejność załączników zaktualizowana', + 'attachments_updated_success' => 'Szczegóły załączników zaktualizowane', + 'attachments_deleted' => 'Załączniki usunięte', + 'attachments_file_uploaded' => 'Plik załączony pomyślnie', + 'attachments_file_updated' => 'Plik zaktualizowany pomyślnie', + 'attachments_link_attached' => 'Link pomyślnie dodany do strony', + + /** + * Profile View + */ + 'profile_user_for_x' => 'Użytkownik od :time', + 'profile_created_content' => 'Utworzona zawartość', + 'profile_not_created_pages' => ':userName nie utworzył żadnych stron', + 'profile_not_created_chapters' => ':userName nie utworzył żadnych rozdziałów', + 'profile_not_created_books' => ':userName nie utworzył żadnych ksiąg', +]; \ No newline at end of file diff --git a/resources/lang/pl/errors.php b/resources/lang/pl/errors.php new file mode 100644 index 000000000..633bf7a2d --- /dev/null +++ b/resources/lang/pl/errors.php @@ -0,0 +1,70 @@ +<?php + +return [ + + /** + * Error text strings. + */ + + // Permissions + 'permission' => 'Nie masz uprawnień do wyświetlenia tej strony.', + 'permissionJson' => 'Nie masz uprawnień do wykonania tej akcji.', + + // Auth + 'error_user_exists_different_creds' => 'Użytkownik o adresie :email już istnieje.', + 'email_already_confirmed' => 'Email został potwierdzony, spróbuj się zalogować.', + 'email_confirmation_invalid' => 'Ten token jest nieprawidłowy lub został już wykorzystany. Spróbuj zarejestrować się ponownie.', + 'email_confirmation_expired' => 'Ten token potwierdzający wygasł. Wysłaliśmy Ci kolejny.', + 'ldap_fail_anonymous' => 'Dostęp LDAP przy użyciu anonimowego powiązania nie powiódł się', + 'ldap_fail_authed' => 'Dostęp LDAP przy użyciu tego dn i hasła nie powiódł się', + 'ldap_extension_not_installed' => 'Rozszerzenie LDAP PHP nie zostało zainstalowane', + 'ldap_cannot_connect' => 'Nie można połączyć z serwerem LDAP, połączenie nie zostało ustanowione', + 'social_no_action_defined' => 'Brak zdefiniowanej akcji', + 'social_account_in_use' => 'To konto :socialAccount jest już w użyciu, spróbuj zalogować się za pomocą opcji :socialAccount.', + 'social_account_email_in_use' => 'Email :email jest już w użyciu. Jeśli masz już konto, połącz konto :socialAccount z poziomu ustawień profilu.', + 'social_account_existing' => 'Konto :socialAccount jest już połączone z Twoim profilem', + 'social_account_already_used_existing' => 'Konto :socialAccount jest już używane przez innego użytkownika.', + 'social_account_not_used' => 'To konto :socialAccount nie jest połączone z żadnym użytkownikiem. Połącz je ze swoim kontem w ustawieniach profilu. ', + 'social_account_register_instructions' => 'Jeśli nie masz jeszcze konta, możesz zarejestrować je używając opcji :socialAccount.', + 'social_driver_not_found' => 'Funkcja społecznościowa nie została odnaleziona', + 'social_driver_not_configured' => 'Ustawienia konta :socialAccount nie są poprawne.', + + // System + 'path_not_writable' => 'Zapis do ścieżki :filePath jest niemożliwy. Upewnij się że aplikacja ma prawa do zapisu w niej.', + 'cannot_get_image_from_url' => 'Nie można pobrać obrazka z :url', + 'cannot_create_thumbs' => 'Serwer nie może utworzyć miniaturek. Upewnij się że rozszerzenie GD PHP zostało zainstalowane.', + 'server_upload_limit' => 'Serwer nie pozwala na przyjęcie pliku o tym rozmiarze. Spróbuj udostępnić coś o mniejszym rozmiarze.', + 'image_upload_error' => 'Wystąpił błąd podczas udostępniania obrazka', + + // Attachments + 'attachment_page_mismatch' => 'Niezgodność stron podczas aktualizacji załącznika', + + // Pages + 'page_draft_autosave_fail' => 'Zapis szkicu nie powiódł się. Upewnij się że posiadasz połączenie z internetem.', + + // Entities + 'entity_not_found' => 'Encja nie została odnaleziona', + 'book_not_found' => 'Księga nie została odnaleziona', + 'page_not_found' => 'Strona nie została odnaleziona', + 'chapter_not_found' => 'Rozdział nie został odnaleziony', + 'selected_book_not_found' => 'Wybrana księga nie została odnaleziona', + 'selected_book_chapter_not_found' => 'Wybrana księga lub rozdział nie zostały odnalezione', + 'guests_cannot_save_drafts' => 'Goście nie mogą zapisywać szkiców', + + // Users + 'users_cannot_delete_only_admin' => 'Nie możesz usunąć jedynego administratora', + 'users_cannot_delete_guest' => 'Nie możesz usunąć użytkownika-gościa', + + // Roles + 'role_cannot_be_edited' => 'Ta rola nie może być edytowana', + 'role_system_cannot_be_deleted' => 'Ta rola jest rolą systemową i nie może zostać usunięta', + 'role_registration_default_cannot_delete' => 'Ta rola nie może zostać usunięta jeśli jest ustawiona jako domyślna rola użytkownika', + + // Error pages + '404_page_not_found' => 'Strona nie została odnaleziona', + 'sorry_page_not_found' => 'Przepraszamy, ale strona której szukasz nie została odnaleziona.', + 'return_home' => 'Powrót do strony głównej', + 'error_occurred' => 'Wystąpił błąd', + 'app_down' => ':appName jest aktualnie wyłączona', + 'back_soon' => 'Niedługo zostanie uruchomiona ponownie.', +]; \ No newline at end of file diff --git a/resources/lang/pl/pagination.php b/resources/lang/pl/pagination.php new file mode 100644 index 000000000..564694190 --- /dev/null +++ b/resources/lang/pl/pagination.php @@ -0,0 +1,19 @@ +<?php + +return [ + + /* + |-------------------------------------------------------------------------- + | Pagination Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used by the paginator library to build + | the simple pagination links. You are free to change them to anything + | you want to customize your views to better match your application. + | + */ + + 'previous' => '« Poprzednia', + 'next' => 'Następna »', + +]; diff --git a/resources/lang/pl/passwords.php b/resources/lang/pl/passwords.php new file mode 100644 index 000000000..a9e669f4d --- /dev/null +++ b/resources/lang/pl/passwords.php @@ -0,0 +1,22 @@ +<?php + +return [ + + /* + |-------------------------------------------------------------------------- + | Password Reminder Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are the default lines which match reasons + | that are given by the password broker for a password update attempt + | has failed, such as for an invalid token or invalid new password. + | + */ + + 'password' => 'Hasło musi zawierać co najmniej 6 znaków i być zgodne z powtórzeniem.', + 'user' => "Nie znaleziono użytkownika o takim adresie email.", + 'token' => 'Ten token resetowania hasła jest nieprawidłowy.', + 'sent' => 'Wysłaliśmy Ci link do resetowania hasła!', + 'reset' => 'Twoje hasło zostało zresetowane!', + +]; diff --git a/resources/lang/pl/settings.php b/resources/lang/pl/settings.php new file mode 100644 index 000000000..381e5517a --- /dev/null +++ b/resources/lang/pl/settings.php @@ -0,0 +1,111 @@ +<?php + +return [ + + /** + * Settings text strings + * Contains all text strings used in the general settings sections of BookStack + * including users and roles. + */ + + 'settings' => 'Ustawienia', + 'settings_save' => 'Zapisz ustawienia', + 'settings_save_success' => 'Ustawienia zapisane', + + /** + * App settings + */ + + 'app_settings' => 'Ustawienia aplikacji', + 'app_name' => 'Nazwa aplikacji', + 'app_name_desc' => 'Ta nazwa jest wyświetlana w nagłówku i emailach.', + 'app_name_header' => 'Pokazać nazwę aplikacji w nagłówku?', + 'app_public_viewing' => 'Zezwolić na publiczne przeglądanie?', + 'app_secure_images' => 'Odblokować wyższe bezpieczeństwo obrazków?', + 'app_secure_images_desc' => 'Ze względów wydajnościowych wszystkie obrazki są publiczne. Ta opcja dodaje dodatkowy, trudny do zgadnienia losowy ciąg na początku nazwy obrazka. Upewnij się że indeksowanie ścieżek jest zablokowane, by uniknąć problemów z dostępem do obrazka.', + 'app_editor' => 'Edytor strony', + 'app_editor_desc' => 'Wybierz edytor używany przez użytkowników do edycji zawartości.', + 'app_custom_html' => 'Własna zawartość tagu <head>', + 'app_custom_html_desc' => 'Zawartość dodana tutaj zostanie dołączona do sekcji <head> każdej strony. Przydatne przy nadpisywaniu styli lub dodawaniu analityki.', + 'app_logo' => 'Logo aplikacji', + 'app_logo_desc' => 'Ten obrazek powinien mieć nie więcej niż 43px w pionie. <br>Większe obrazki będą skalowane w dół.', + 'app_primary_color' => 'Podstawowy kolor aplikacji', + 'app_primary_color_desc' => 'To powinna być wartość HEX. <br>Zostaw to pole puste, by powrócić do podstawowego koloru.', + + /** + * Registration settings + */ + + 'reg_settings' => 'Ustawienia rejestracji', + 'reg_allow' => 'Zezwolić na rejestrację?', + 'reg_default_role' => 'Domyślna rola użytkownika po rejestracji', + 'reg_confirm_email' => 'Wymagać potwierdzenia adresu email?', + 'reg_confirm_email_desc' => 'Jeśli restrykcje domenowe zostały uzupełnione potwierdzenie adresu stanie się konieczne, a poniższa wartośc zostanie zignorowana.', + 'reg_confirm_restrict_domain' => 'Restrykcje domenowe dot. adresu email', + 'reg_confirm_restrict_domain_desc' => 'Wprowadź listę domen adresów email rozdzieloną przecinkami, którym chciałbyś zezwolić na rejestrację. Wymusi to konieczność potwierdzenia adresu email przez użytkownika przed uzyskaniem dostępu do aplikacji. <br> Pamiętaj, że użytkownicy będą mogli zmienić adres email po rejestracji.', + 'reg_confirm_restrict_domain_placeholder' => 'Brak restrykcji', + + /** + * Role settings + */ + + 'roles' => 'Role', + 'role_user_roles' => 'Role użytkownika', + 'role_create' => 'Utwórz nową rolę', + 'role_create_success' => 'Rola utworzona pomyślnie', + 'role_delete' => 'Usuń rolę', + 'role_delete_confirm' => 'To spowoduje usunięcie roli \':roleName\'.', + 'role_delete_users_assigned' => 'Tę rolę ma przypisanych :userCount użytkowników. Jeśli chcesz zmigrować użytkowników z tej roli, wybierz nową poniżej.', + 'role_delete_no_migration' => "Nie migruj użytkowników", + 'role_delete_sure' => 'Czy na pewno chcesz usunąć tę rolę?', + 'role_delete_success' => 'Rola usunięta pomyślnie', + 'role_edit' => 'Edytuj rolę', + 'role_details' => 'Szczegóły roli', + 'role_name' => 'Nazwa roli', + 'role_desc' => 'Krótki opis roli', + 'role_system' => 'Uprawnienia systemowe', + 'role_manage_users' => 'Zarządzanie użytkownikami', + 'role_manage_roles' => 'Zarządzanie rolami i uprawnieniami ról', + 'role_manage_entity_permissions' => 'Zarządzanie uprawnieniami ksiąg, rozdziałów i stron', + 'role_manage_own_entity_permissions' => 'Zarządzanie uprawnieniami własnych ksiąg, rozdziałów i stron', + 'role_manage_settings' => 'Zarządzanie ustawieniami aplikacji', + 'role_asset' => 'Zarządzanie zasobami', + 'role_asset_desc' => 'Te ustawienia kontrolują zarządzanie zasobami systemu. Uprawnienia ksiąg, rozdziałów i stron nadpisują te ustawienia.', + 'role_all' => 'Wszyscy', + 'role_own' => 'Własne', + 'role_controlled_by_asset' => 'Kontrolowane przez zasób, do którego zostały udostępnione', + 'role_save' => 'Zapisz rolę', + 'role_update_success' => 'Rola zapisana pomyślnie', + 'role_users' => 'Użytkownicy w tej roli', + 'role_users_none' => 'Brak użytkowników zapisanych do tej roli', + + /** + * Users + */ + + 'users' => 'Użytkownicy', + 'user_profile' => 'Profil użytkownika', + 'users_add_new' => 'Dodaj użytkownika', + 'users_search' => 'Wyszukaj użytkownika', + 'users_role' => 'Role użytkownika', + 'users_external_auth_id' => 'Zewnętrzne ID autentykacji', + 'users_password_warning' => 'Wypełnij poniżej tylko jeśli chcesz zmienić swoje hasło:', + 'users_system_public' => 'Ten użytkownik reprezentuje każdego gościa odwiedzającego tę aplikację. Nie można się na niego zalogować, lecz jest przyznawany automatycznie.', + 'users_delete' => 'Usuń użytkownika', + 'users_delete_named' => 'Usuń :userName', + 'users_delete_warning' => 'To usunie użytkownika \':userName\' z systemu.', + 'users_delete_confirm' => 'Czy na pewno chcesz usunąć tego użytkownika?', + 'users_delete_success' => 'Użytkownik usunięty pomyślnie', + 'users_edit' => 'Edytuj użytkownika', + 'users_edit_profile' => 'Edytuj profil', + 'users_edit_success' => 'Użytkownik zaktualizowany pomyśłnie', + 'users_avatar' => 'Avatar użytkownika', + 'users_avatar_desc' => 'Ten obrazek powinien mieć 25px x 256px.', + 'users_preferred_language' => 'Preferowany język', + 'users_social_accounts' => 'Konta społecznościowe', + 'users_social_accounts_info' => 'Tutaj możesz połączyć kilka kont społecznościowych w celu łatwiejszego i szybszego logowania.', + 'users_social_connect' => 'Podłącz konto', + 'users_social_disconnect' => 'Odłącz konto', + 'users_social_connected' => ':socialAccount zostało dodane do Twojego profilu.', + 'users_social_disconnected' => ':socialAccount zostało odłączone od Twojego profilu.', +]; diff --git a/resources/lang/pl/validation.php b/resources/lang/pl/validation.php new file mode 100644 index 000000000..6a7c13e80 --- /dev/null +++ b/resources/lang/pl/validation.php @@ -0,0 +1,108 @@ +<?php + +return [ + + /* + |-------------------------------------------------------------------------- + | Validation Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines contain the default error messages used by + | the validator class. Some of these rules have multiple versions such + | as the size rules. Feel free to tweak each of these messages here. + | + */ + + 'accepted' => ':attribute musi zostać zaakceptowany.', + 'active_url' => ':attribute nie jest prawidłowym adresem URL.', + 'after' => ':attribute musi być datą następującą po :date.', + 'alpha' => ':attribute może zawierać wyłącznie litery.', + 'alpha_dash' => ':attribute może zawierać wyłącznie litery, cyfry i myślniki.', + 'alpha_num' => ':attribute może zawierać wyłącznie litery i cyfry.', + 'array' => ':attribute musi być tablicą.', + 'before' => ':attribute musi być datą poprzedzającą :date.', + 'between' => [ + 'numeric' => ':attribute musi zawierać się w przedziale od :min do :max.', + 'file' => 'Waga :attribute musi zawierać się pomiędzy :min i :max kilobajtów.', + 'string' => 'Długość :attribute musi zawierać się pomiędzy :min i :max.', + 'array' => ':attribute musi mieć od :min do :max elementów.', + ], + 'boolean' => ':attribute musi być wartością prawda/fałsz.', + 'confirmed' => ':attribute i potwierdzenie muszą być zgodne.', + 'date' => ':attribute nie jest prawidłową datą.', + 'date_format' => ':attribute musi mieć format :format.', + 'different' => ':attribute i :other muszą się różnić.', + 'digits' => ':attribute musi mieć :digits cyfr.', + 'digits_between' => ':attribute musi mieć od :min do :max cyfr.', + 'email' => ':attribute musi być prawidłowym adresem e-mail.', + 'filled' => ':attribute jest wymagany.', + 'exists' => 'Wybrana wartość :attribute jest nieprawidłowa.', + 'image' => ':attribute musi być obrazkiem.', + 'in' => 'Wybrana wartość :attribute jest nieprawidłowa.', + 'integer' => ':attribute musi być liczbą całkowitą.', + 'ip' => ':attribute musi być prawidłowym adresem IP.', + 'max' => [ + 'numeric' => 'Wartość :attribute nie może być większa niż :max.', + 'file' => 'Wielkość :attribute nie może być większa niż :max kilobajtów.', + 'string' => 'Długość :attribute nie może być większa niż :max znaków.', + 'array' => 'Rozmiar :attribute nie może być większy niż :max elementów.', + ], + 'mimes' => ':attribute musi być plikiem typu: :values.', + 'min' => [ + 'numeric' => 'Wartość :attribute nie może być mniejsza od :min.', + 'file' => 'Wielkość :attribute nie może być mniejsza niż :min kilobajtów.', + 'string' => 'Długość :attribute nie może być mniejsza niż :min znaków.', + 'array' => 'Rozmiar :attribute musi posiadać co najmniej :min elementy.', + ], + 'not_in' => 'Wartość :attribute jest nieprawidłowa.', + 'numeric' => ':attribute musi być liczbą.', + 'regex' => 'Format :attribute jest nieprawidłowy.', + 'required' => 'Pole :attribute jest wymagane.', + 'required_if' => 'Pole :attribute jest wymagane jeśli :other ma wartość :value.', + 'required_with' => 'Pole :attribute jest wymagane jeśli :values zostało wprowadzone.', + 'required_with_all' => 'Pole :attribute jest wymagane jeśli :values są obecne.', + 'required_without' => 'Pole :attribute jest wymagane jeśli :values nie zostało wprowadzone.', + 'required_without_all' => 'Pole :attribute jest wymagane jeśli żadna z wartości :values nie została podana.', + 'same' => 'Pole :attribute i :other muszą być takie same.', + 'size' => [ + 'numeric' => ':attribute musi mieć długość :size.', + 'file' => ':attribute musi mieć :size kilobajtów.', + 'string' => ':attribute mmusi mieć długość :size znaków.', + 'array' => ':attribute musi posiadać :size elementów.', + ], + 'string' => ':attribute musi być ciągiem znaków.', + 'timezone' => ':attribute musi być prawidłową strefą czasową.', + 'unique' => ':attribute zostało już zajęte.', + 'url' => 'Format :attribute jest nieprawidłowy.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'password-confirm' => [ + 'required_with' => 'Potwierdzenie hasła jest wymagane.', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; From 67bc7007aa58cbb44801f3df1d1f98ae3f8e2c64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Fri, 14 Jul 2017 16:05:46 +0100 Subject: [PATCH 32/83] Support new lines for book/chapter descriptions Avoid ignoring new lines when renderring the book/chapter descriptions on their respective detailed views. --- resources/views/books/show.blade.php | 6 +++--- resources/views/chapters/show.blade.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index ddbe7a0a4..d5832b708 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -56,7 +56,7 @@ <h1>{{$book->name}}</h1> <div class="book-content" v-if="!searching"> - <p class="text-muted" v-pre>{{$book->description}}</p> + <p class="text-muted" v-pre>{!! nl2br($book->description) !!}</p> <div class="page-list" v-pre> <hr> @@ -118,7 +118,7 @@ <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button> </form> </div> - + <div class="activity"> <h3>{{ trans('entities.recent_activity') }}</h3> @include('partials/activity-list', ['activity' => Activity::entityActivity($book, 20, 0)]) @@ -127,4 +127,4 @@ </div> </div> -@stop \ No newline at end of file +@stop diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php index d4126cbcc..9b549cfbd 100644 --- a/resources/views/chapters/show.blade.php +++ b/resources/views/chapters/show.blade.php @@ -52,7 +52,7 @@ <div class="col-md-7"> <h1>{{ $chapter->name }}</h1> <div class="chapter-content" v-if="!searching"> - <p class="text-muted">{{ $chapter->description }}</p> + <p class="text-muted">{!! nl2br($chapter->description) !!}</p> @if(count($pages) > 0) <div class="page-list"> From 711dcb4a4834a562bcdb36c7dac17964e93f38a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 13:29:29 +0100 Subject: [PATCH 33/83] Update travis.yml to try and solve the test issue around LDAP. --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 909e3e1f4..c5199b65f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,9 @@ cache: directories: - $HOME/.composer/cache +before_install: + - echo "extension=ldap.so" >> php --ini | grep "Loaded Configuration" | sed -e "s|.:\s||" + before_script: - mysql -u root -e 'create database `bookstack-test`;' - mysql -u root -e "CREATE USER 'bookstack-test'@'localhost' IDENTIFIED BY 'bookstack-test';" @@ -25,4 +28,4 @@ after_failure: - cat storage/logs/laravel.log script: - - phpunit \ No newline at end of file + - phpunit From 265ed34ffd49f199fe78e571a242eae39a4ea7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 13:34:19 +0100 Subject: [PATCH 34/83] Update travis.yml to try and solve the test issue around LDAP. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c5199b65f..97895fee8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ cache: - $HOME/.composer/cache before_install: - - echo "extension=ldap.so" >> php --ini | grep "Loaded Configuration" | sed -e "s|.:\s||" + - echo "extension = ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini before_script: - mysql -u root -e 'create database `bookstack-test`;' From ae2ec43a826c92d96ae33388eba3d1599dc598e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 13:35:38 +0100 Subject: [PATCH 35/83] Avoid having to wait until all tests are processed to exit upon error/failure. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 97895fee8..c79775caf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,4 +28,4 @@ after_failure: - cat storage/logs/laravel.log script: - - phpunit + - phpunit --stop-on-error --stop-on-failure From 0d98b4ce5e4176ef4f31a5374964c054c48048db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 13:37:15 +0100 Subject: [PATCH 36/83] Trying to make the tests green. --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index c79775caf..edc5732f6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,9 +8,6 @@ cache: directories: - $HOME/.composer/cache -before_install: - - echo "extension = ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - before_script: - mysql -u root -e 'create database `bookstack-test`;' - mysql -u root -e "CREATE USER 'bookstack-test'@'localhost' IDENTIFIED BY 'bookstack-test';" From 5eeed03dcded3d024ac719599da250444bb87ac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 13:53:02 +0100 Subject: [PATCH 37/83] Trying to make the tests green. --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index edc5732f6..4bd36f568 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,11 @@ language: php php: - 7.0 +before_install: + - pecl install ldap + - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini + - php -i "(command-line 'phpinfo()')" | grep ldap + cache: directories: - $HOME/.composer/cache From afc56c12fe02e4a1947b22b1858f6b2662e9bd80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 14:01:10 +0100 Subject: [PATCH 38/83] Trying to make the tests green. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4bd36f568..a4116a317 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ php: - 7.0 before_install: - - pecl install ldap + - sudo apt-get install php7.0-ldap - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - php -i "(command-line 'phpinfo()')" | grep ldap From 3b771f2976e3272e77faaf1f5aed06d66aefd48e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 14:03:31 +0100 Subject: [PATCH 39/83] Trying to make the tests green. --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a4116a317..f1495b46e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,12 @@ language: php php: - 7.0 +addons: + apt: + packages: + - php7.0-ldap + before_install: - - sudo apt-get install php7.0-ldap - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - php -i "(command-line 'phpinfo()')" | grep ldap From 6ef522df7ec8b43f484461e7690b08196d3585c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 14:05:41 +0100 Subject: [PATCH 40/83] Trying to make the tests green. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f1495b46e..054bc8b7d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ php: addons: apt: packages: - - php7.0-ldap + - php-ldap before_install: - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini From 684c20c4ea186876afb4aa84115773d032d7063b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 14:09:21 +0100 Subject: [PATCH 41/83] Trying to make the tests green. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 054bc8b7d..4613c64ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,8 @@ php: addons: apt: packages: - - php-ldap + - ldap-utils + - slapd before_install: - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini From 3407900abb7d1fe40551881ecf901d6e69c0d5a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 14:18:03 +0100 Subject: [PATCH 42/83] Trying to make the tests green. --- .travis.yml | 1 - tests/Auth/LdapTest.php | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4613c64ef..f03865201 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,6 @@ addons: before_install: - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - - php -i "(command-line 'phpinfo()')" | grep ldap cache: directories: diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index 681ead91c..f66d357e3 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -21,6 +21,7 @@ class LdapTest extends BrowserKitTest { $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId); $this->mockLdap->shouldReceive('setVersion')->once(); + $this->mockLdap->shouldReceive('setOption'); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4) ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) ->andReturn(['count' => 1, 0 => [ @@ -129,4 +130,4 @@ class LdapTest extends BrowserKitTest ->dontSee('External Authentication'); } -} \ No newline at end of file +} From f38bc75ab4f1d6980ecff7e2a1eb70eda8b42565 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 14:21:41 +0100 Subject: [PATCH 43/83] Trying to make the tests green. --- tests/Auth/LdapTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index f66d357e3..573de4c43 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -21,7 +21,7 @@ class LdapTest extends BrowserKitTest { $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId); $this->mockLdap->shouldReceive('setVersion')->once(); - $this->mockLdap->shouldReceive('setOption'); + $this->mockLdap->shouldReceive('setOption')->times(4); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4) ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) ->andReturn(['count' => 1, 0 => [ @@ -50,6 +50,7 @@ class LdapTest extends BrowserKitTest $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId); $this->mockLdap->shouldReceive('setVersion')->once(); $ldapDn = 'cn=test-user,dc=test' . config('services.ldap.base_dn'); + $this->mockLdap->shouldReceive('setOption')->times(2); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2) ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) ->andReturn(['count' => 1, 0 => [ From 245294fbc55d0a2ecc765620758763b2f8f72998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Blanco?= <clement@cyber-duck.co.uk> Date: Mon, 17 Jul 2017 14:42:08 +0100 Subject: [PATCH 44/83] Trying to make the tests green. --- tests/Auth/LdapTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index 573de4c43..f6e8336e6 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -74,6 +74,7 @@ class LdapTest extends BrowserKitTest { $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId); $this->mockLdap->shouldReceive('setVersion')->once(); + $this->mockLdap->shouldReceive('setOption')->times(2); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2) ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) ->andReturn(['count' => 1, 0 => [ From bc067e9ad41804de26ec37fab90ec413b48b2270 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 14:02:47 +0100 Subject: [PATCH 45/83] Updated dropdowns to hide after option click Fixes #429 --- resources/assets/js/controllers.js | 2 +- resources/assets/js/directives.js | 40 +++++++++++++++++------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index ac1c3487c..9337ea889 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -379,7 +379,7 @@ module.exports = function (ngApp, events) { */ $scope.discardDraft = function () { let url = window.baseUrl('/ajax/page/' + pageId); - $http.get(url).then((responseData) => { + $http.get(url).then(responseData => { if (autoSave) $interval.cancel(autoSave); $scope.draftText = trans('entities.pages_editing_page'); $scope.isUpdateDraft = false; diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 51f1b7579..d783fd682 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -123,25 +123,31 @@ module.exports = function (ngApp, events) { restrict: 'A', link: function (scope, element, attrs) { const menu = element.find('ul'); - element.find('[dropdown-toggle]').on('click', function () { + + function hide() { + menu.hide(); + menu.removeClass('anim menuIn'); + } + + function show() { menu.show().addClass('anim menuIn'); + element.mouseleave(hide); + + // Focus on input if exist in dropdown and hide on enter press let inputs = menu.find('input'); - let hasInput = inputs.length > 0; - if (hasInput) { - inputs.first().focus(); - element.on('keypress', 'input', event => { - if (event.keyCode === 13) { - event.preventDefault(); - menu.hide(); - menu.removeClass('anim menuIn'); - return false; - } - }); - } - element.mouseleave(function () { - menu.hide(); - menu.removeClass('anim menuIn'); - }); + if (inputs.length > 0) inputs.first().focus(); + } + + // Hide menu on option click + element.on('click', '> ul a', hide); + // Show dropdown on toggle click. + element.find('[dropdown-toggle]').on('click', show); + // Hide menu on enter press in inputs + element.on('keypress', 'input', event => { + if (event.keyCode !== 13) return true; + event.preventDefault(); + hide(); + return false; }); } }; From b12e2ceada9b1b8a382b76c896fc392adcdf5b84 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 14:21:56 +0100 Subject: [PATCH 46/83] Added included content into page's text view Allows rendered content to be shown in listings and used in searches. Also prevented angular tags in content being parsed in listings. Fixes #442 --- app/Repos/EntityRepo.php | 19 +++++++++++++++---- resources/views/books/show.blade.php | 4 ++-- resources/views/chapters/show.blade.php | 4 ++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/Repos/EntityRepo.php b/app/Repos/EntityRepo.php index 7bc5fc4fc..7865de772 100644 --- a/app/Repos/EntityRepo.php +++ b/app/Repos/EntityRepo.php @@ -571,7 +571,7 @@ class EntityRepo $draftPage->slug = $this->findSuitableSlug('page', $draftPage->name, false, $draftPage->book->id); $draftPage->html = $this->formatHtml($input['html']); - $draftPage->text = strip_tags($draftPage->html); + $draftPage->text = $this->pageToPlainText($draftPage->html); $draftPage->draft = false; $draftPage->revision_count = 1; @@ -713,6 +713,17 @@ class EntityRepo return $content; } + /** + * Get the plain text version of a page's content. + * @param Page $page + * @return string + */ + public function pageToPlainText(Page $page) + { + $html = $this->renderPage($page); + return strip_tags($html); + } + /** * Get a new draft page instance. * @param Book $book @@ -816,7 +827,7 @@ class EntityRepo $userId = user()->id; $page->fill($input); $page->html = $this->formatHtml($input['html']); - $page->text = strip_tags($page->html); + $page->text = $this->pageToPlainText($page); if (setting('app-editor') !== 'markdown') $page->markdown = ''; $page->updated_by = $userId; $page->revision_count++; @@ -933,7 +944,7 @@ class EntityRepo $revision = $page->revisions()->where('id', '=', $revisionId)->first(); $page->fill($revision->toArray()); $page->slug = $this->findSuitableSlug('page', $page->name, $page->id, $book->id); - $page->text = strip_tags($page->html); + $page->text = $this->pageToPlainText($page->html); $page->updated_by = user()->id; $page->save(); $this->searchService->indexEntity($page); @@ -953,7 +964,7 @@ class EntityRepo if ($page->draft) { $page->fill($data); if (isset($data['html'])) { - $page->text = strip_tags($data['html']); + $page->text = $this->pageToPlainText($data['html']); } $page->save(); return $page; diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index ddbe7a0a4..353018dbc 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -50,7 +50,7 @@ </div> - <div class="container" id="entity-dashboard" entity-id="{{ $book->id }}" entity-type="book"> + <div ng-non-bindable class="container" id="entity-dashboard" entity-id="{{ $book->id }}" entity-type="book"> <div class="row"> <div class="col-md-7"> @@ -112,7 +112,7 @@ @endif <div class="search-box"> - <form v-on:submit="searchBook"> + <form v-on:submit.prevent="searchBook"> <input v-model="searchTerm" v-on:change="checkSearchForm()" type="text" name="term" placeholder="{{ trans('entities.books_search_this') }}"> <button type="submit"><i class="zmdi zmdi-search"></i></button> <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button> diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php index d4126cbcc..85aa252d1 100644 --- a/resources/views/chapters/show.blade.php +++ b/resources/views/chapters/show.blade.php @@ -47,7 +47,7 @@ </div> - <div class="container" id="entity-dashboard" entity-id="{{ $chapter->id }}" entity-type="chapter"> + <div class="container" id="entity-dashboard" ng-non-bindable entity-id="{{ $chapter->id }}" entity-type="chapter"> <div class="row"> <div class="col-md-7"> <h1>{{ $chapter->name }}</h1> @@ -116,7 +116,7 @@ @endif <div class="search-box"> - <form v-on:submit="searchBook"> + <form v-on:submit.prevent="searchBook"> <input v-model="searchTerm" v-on:change="checkSearchForm()" type="text" name="term" placeholder="{{ trans('entities.chapters_search_this') }}"> <button type="submit"><i class="zmdi zmdi-search"></i></button> <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button> From 7f43372dd497f0e9b5f6eaf668ea1e2748ad9a0c Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 14:34:17 +0100 Subject: [PATCH 47/83] Fixed broken code block rendering when using DOMPDF Fixes #427 --- resources/assets/sass/_text.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/resources/assets/sass/_text.scss b/resources/assets/sass/_text.scss index ccef2a70f..2ef4bd16d 100644 --- a/resources/assets/sass/_text.scss +++ b/resources/assets/sass/_text.scss @@ -152,6 +152,14 @@ pre { } } +@media print { + pre { + padding-left: 12px; + } + pre:after { + display: none; + } +} blockquote { display: block; From 433cb9b3b2b85c371818495b5e636daff5c49457 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 15:20:36 +0100 Subject: [PATCH 48/83] Improved breadcrumb responsiveness Closes #426 --- resources/assets/sass/_header.scss | 22 +++++++++++++++++++++- resources/views/books/show.blade.php | 4 ++-- resources/views/chapters/show.blade.php | 4 ++-- resources/views/pages/show.blade.php | 4 ++-- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/resources/assets/sass/_header.scss b/resources/assets/sass/_header.scss index 16ed75545..ae8dd3ff5 100644 --- a/resources/assets/sass/_header.scss +++ b/resources/assets/sass/_header.scss @@ -142,7 +142,6 @@ form.search-box { color: #aaa; padding: 0 $-xs; } - .faded { a, button, span, span > div { color: #666; @@ -178,6 +177,8 @@ form.search-box { padding-left: 0; } } + + .action-buttons .dropdown-container:last-child a { padding-right: 0; padding-left: $-s; @@ -196,6 +197,25 @@ form.search-box { } } +@include smaller-than($m) { + .breadcrumbs .text-button, .action-buttons .text-button { + padding: $-s $-xs; + } + .action-buttons .dropdown-container:last-child a { + padding-left: $-xs; + } + .breadcrumbs .text-button { + font-size: 0; + } + .breadcrumbs a i { + font-size: $fs-m; + padding-right: 0; + } + .breadcrumbs span.sep { + padding: 0 $-xxs; + } +} + .nav-tabs { text-align: center; a, .tab-item { diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index 353018dbc..0e3bd4e17 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -5,10 +5,10 @@ <div class="faded-small toolbar"> <div class="container"> <div class="row"> - <div class="col-sm-6 faded"> + <div class="col-sm-6 col-xs-1 faded"> @include('books._breadcrumbs', ['book' => $book]) </div> - <div class="col-sm-6"> + <div class="col-sm-6 col-xs-11"> <div class="action-buttons faded"> <span dropdown class="dropdown-container"> <div dropdown-toggle class="text-button text-primary"><i class="zmdi zmdi-open-in-new"></i>{{ trans('entities.export') }}</div> diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php index 85aa252d1..9ebd8d9c4 100644 --- a/resources/views/chapters/show.blade.php +++ b/resources/views/chapters/show.blade.php @@ -5,10 +5,10 @@ <div class="faded-small toolbar"> <div class="container"> <div class="row"> - <div class="col-sm-8 faded" ng-non-bindable> + <div class="col-sm-6 col-xs-3 faded" ng-non-bindable> @include('chapters._breadcrumbs', ['chapter' => $chapter]) </div> - <div class="col-sm-4 faded"> + <div class="col-sm-6 col-xs-9 faded"> <div class="action-buttons"> <span dropdown class="dropdown-container"> <div dropdown-toggle class="text-button text-primary"><i class="zmdi zmdi-open-in-new"></i>{{ trans('entities.export') }}</div> diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 6b2dc3c23..221ed4476 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -5,10 +5,10 @@ <div class="faded-small toolbar"> <div class="container"> <div class="row"> - <div class="col-sm-6 faded"> + <div class="col-sm-8 col-xs-5 faded"> @include('pages._breadcrumbs', ['page' => $page]) </div> - <div class="col-sm-6 faded"> + <div class="col-sm-4 col-xs-7 faded"> <div class="action-buttons"> <span dropdown class="dropdown-container"> <div dropdown-toggle class="text-button text-primary"><i class="zmdi zmdi-open-in-new"></i>{{ trans('entities.export') }}</div> From 6bcd89acf76163ca09c95903f27ceed925718061 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 15:54:17 +0100 Subject: [PATCH 49/83] Moved utf8mb4 migration to command instead of migration To prevent errors upon migration. Command generates out the SQL syntax to make the change instead so the upgrade can be done manually. In reference to #425 --- .../Commands/UpgradeDatabaseEncoding.php | 57 +++++++++++++++++++ app/Console/Kernel.php | 3 +- ...02_152834_update_db_encoding_to_ut8mb4.php | 26 ++------- 3 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 app/Console/Commands/UpgradeDatabaseEncoding.php diff --git a/app/Console/Commands/UpgradeDatabaseEncoding.php b/app/Console/Commands/UpgradeDatabaseEncoding.php new file mode 100644 index 000000000..dbdf778e8 --- /dev/null +++ b/app/Console/Commands/UpgradeDatabaseEncoding.php @@ -0,0 +1,57 @@ +<?php + +namespace BookStack\Console\Commands; + +use Illuminate\Console\Command; +use Illuminate\Support\Facades\DB; + +class UpgradeDatabaseEncoding extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'bookstack:db-utf8mb4-syntax {--database= : The database connection to use.}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Generate SQL commands to upgrade the database to UTF8mb4'; + + /** + * Create a new command instance. + * + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $connection = DB::getDefaultConnection(); + if ($this->option('database') !== null) { + DB::setDefaultConnection($this->option('database')); + } + + $database = DB::getDatabaseName(); + $tables = DB::select('SHOW TABLES'); + $this->line('ALTER DATABASE `'.$database.'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); + $this->line('USE `'.$database.'`;'); + $key = 'Tables_in_' . $database; + foreach ($tables as $table) { + $tableName = $table->$key; + $this->line('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); + } + + DB::setDefaultConnection($connection); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 4fa0b3c80..af9f5fd46 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -15,7 +15,8 @@ class Kernel extends ConsoleKernel Commands\ClearActivity::class, Commands\ClearRevisions::class, Commands\RegeneratePermissions::class, - Commands\RegenerateSearch::class + Commands\RegenerateSearch::class, + Commands\UpgradeDatabaseEncoding::class ]; /** diff --git a/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php index 550c95826..259da0720 100644 --- a/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php +++ b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php @@ -1,7 +1,5 @@ <?php -use Illuminate\Support\Facades\Schema; -use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class UpdateDbEncodingToUt8mb4 extends Migration @@ -13,16 +11,9 @@ class UpdateDbEncodingToUt8mb4 extends Migration */ public function up() { - $database = DB::getDatabaseName(); - $tables = DB::select('SHOW TABLES'); - $pdo = DB::getPdo(); - $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - $pdo->exec('ALTER DATABASE `'.$database.'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'); - $key = 'Tables_in_' . $database; - foreach ($tables as $table) { - $tableName = $table->$key; - $pdo->exec('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'); - } + // Migration removed due to issues during live migration. + // Instead you can run the command `artisan bookstack:db-utf8mb4-syntax` + // which will generate out the SQL request to upgrade your DB to utf8mb4. } /** @@ -32,15 +23,6 @@ class UpdateDbEncodingToUt8mb4 extends Migration */ public function down() { - $database = DB::getDatabaseName(); - $tables = DB::select('SHOW TABLES'); - $pdo = DB::getPdo(); - $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - $pdo->exec('ALTER DATABASE `'.$database.'` CHARACTER SET utf8 COLLATE utf8_unicode_ci'); - $key = 'Tables_in_' . $database; - foreach ($tables as $table) { - $tableName = $table->$key; - $pdo->exec('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci'); - } + // } } From 2704962277422818c850987142f5e2e0a7326670 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 16:19:17 +0100 Subject: [PATCH 50/83] Updated utfmb4 upgrade command --- app/Console/Commands/UpgradeDatabaseEncoding.php | 2 +- .../2017_07_02_152834_update_db_encoding_to_ut8mb4.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/UpgradeDatabaseEncoding.php b/app/Console/Commands/UpgradeDatabaseEncoding.php index dbdf778e8..a17fc9523 100644 --- a/app/Console/Commands/UpgradeDatabaseEncoding.php +++ b/app/Console/Commands/UpgradeDatabaseEncoding.php @@ -12,7 +12,7 @@ class UpgradeDatabaseEncoding extends Command * * @var string */ - protected $signature = 'bookstack:db-utf8mb4-syntax {--database= : The database connection to use.}'; + protected $signature = 'bookstack:db-utf8mb4 {--database= : The database connection to use.}'; /** * The console command description. diff --git a/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php index 259da0720..5681013ad 100644 --- a/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php +++ b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php @@ -12,7 +12,7 @@ class UpdateDbEncodingToUt8mb4 extends Migration public function up() { // Migration removed due to issues during live migration. - // Instead you can run the command `artisan bookstack:db-utf8mb4-syntax` + // Instead you can run the command `artisan bookstack:db-utf8mb4` // which will generate out the SQL request to upgrade your DB to utf8mb4. } From 33642c20ecce13946d452cb79f5c58825ba2f4b3 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 17:10:52 +0100 Subject: [PATCH 51/83] Fixed faulty text rendering calls and LDAP tests --- app/Repos/EntityRepo.php | 6 +++--- tests/Auth/LdapTest.php | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Repos/EntityRepo.php b/app/Repos/EntityRepo.php index 7865de772..d87c40f9b 100644 --- a/app/Repos/EntityRepo.php +++ b/app/Repos/EntityRepo.php @@ -571,7 +571,7 @@ class EntityRepo $draftPage->slug = $this->findSuitableSlug('page', $draftPage->name, false, $draftPage->book->id); $draftPage->html = $this->formatHtml($input['html']); - $draftPage->text = $this->pageToPlainText($draftPage->html); + $draftPage->text = $this->pageToPlainText($draftPage); $draftPage->draft = false; $draftPage->revision_count = 1; @@ -944,7 +944,7 @@ class EntityRepo $revision = $page->revisions()->where('id', '=', $revisionId)->first(); $page->fill($revision->toArray()); $page->slug = $this->findSuitableSlug('page', $page->name, $page->id, $book->id); - $page->text = $this->pageToPlainText($page->html); + $page->text = $this->pageToPlainText($page); $page->updated_by = user()->id; $page->save(); $this->searchService->indexEntity($page); @@ -964,7 +964,7 @@ class EntityRepo if ($page->draft) { $page->fill($data); if (isset($data['html'])) { - $page->text = $this->pageToPlainText($data['html']); + $page->text = $this->pageToPlainText($page); } $page->save(); return $page; diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index 681ead91c..1b7dc8184 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -21,6 +21,7 @@ class LdapTest extends BrowserKitTest { $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId); $this->mockLdap->shouldReceive('setVersion')->once(); + $this->mockLdap->shouldReceive('setOption')->times(4); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4) ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) ->andReturn(['count' => 1, 0 => [ @@ -49,6 +50,7 @@ class LdapTest extends BrowserKitTest $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId); $this->mockLdap->shouldReceive('setVersion')->once(); $ldapDn = 'cn=test-user,dc=test' . config('services.ldap.base_dn'); + $this->mockLdap->shouldReceive('setOption')->times(2); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2) ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) ->andReturn(['count' => 1, 0 => [ @@ -72,6 +74,7 @@ class LdapTest extends BrowserKitTest { $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId); $this->mockLdap->shouldReceive('setVersion')->once(); + $this->mockLdap->shouldReceive('setOption')->times(2); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2) ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) ->andReturn(['count' => 1, 0 => [ From f200b4183d6c49cabdc4a36e687bc87f764c094a Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 22 Jul 2017 17:22:31 +0100 Subject: [PATCH 52/83] Defined LDAP constant for testing without LDAP installed --- tests/Auth/LdapTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index 1b7dc8184..76da6286d 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -11,6 +11,7 @@ class LdapTest extends BrowserKitTest public function setUp() { parent::setUp(); + if (!defined('LDAP_OPT_REFERRALS')) define('LDAP_OPT_REFERRALS', 1); app('config')->set(['auth.method' => 'ldap', 'services.ldap.base_dn' => 'dc=ldap,dc=local', 'auth.providers.users.driver' => 'ldap']); $this->mockLdap = \Mockery::mock(\BookStack\Services\Ldap::class); $this->app['BookStack\Services\Ldap'] = $this->mockLdap; From 813c7d590263bd7f25e886c5fe5080d6a95c425d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 22:52:55 +0200 Subject: [PATCH 53/83] auth.php: fix some spelling issues in french translation --- resources/lang/fr/auth.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/lang/fr/auth.php b/resources/lang/fr/auth.php index 41d051c5f..015bfdff0 100644 --- a/resources/lang/fr/auth.php +++ b/resources/lang/fr/auth.php @@ -10,7 +10,7 @@ return [ | these language lines according to your application's requirements. | */ - 'failed' => 'Ces informations ne correspondent a aucun compte.', + 'failed' => 'Ces informations ne correspondent à aucun compte.', 'throttle' => "Trop d'essais, veuillez réessayer dans :seconds secondes.", /** @@ -26,7 +26,7 @@ return [ 'password' => 'Mot de passe', 'password_confirm' => 'Confirmez le mot de passe', 'password_hint' => 'Doit faire plus de 5 caractères', - 'forgot_password' => 'Mot de passe oublié?', + 'forgot_password' => 'Mot de passe oublié ?', 'remember_me' => 'Se souvenir de moi', 'ldap_email_hint' => "Merci d'entrer une adresse e-mail pour ce compte", 'create_account' => 'Créer un compte', @@ -35,9 +35,9 @@ return [ 'social_registration_text' => "S'inscrire et se connecter avec un réseau social", 'register_thanks' => 'Merci pour votre enregistrement', - 'register_confirm' => 'Vérifiez vos e-mails et cliquer sur le lien de confirmation pour rejoindre :appName.', + 'register_confirm' => 'Vérifiez vos e-mails et cliquez sur le lien de confirmation pour rejoindre :appName.', 'registrations_disabled' => "L'inscription est désactivée pour le moment", - 'registration_email_domain_invalid' => 'Cette adresse e-mail ne peux pas adcéder à l\'application', + 'registration_email_domain_invalid' => 'Cette adresse e-mail ne peut pas accéder à l\'application', 'register_success' => 'Merci pour votre inscription. Vous êtes maintenant inscrit(e) et connecté(e)', @@ -51,7 +51,7 @@ return [ 'reset_password_success' => 'Votre mot de passe a été réinitialisé avec succès.', 'email_reset_subject' => 'Réinitialisez votre mot de passe pour :appName', - 'email_reset_text' => 'Vous recevez cet e-mail parceque nous avons reçu une demande de réinitialisation pour votre compte', + 'email_reset_text' => 'Vous recevez cet e-mail parce que nous avons reçu une demande de réinitialisation pour votre compte', 'email_reset_not_requested' => 'Si vous n\'avez pas effectué cette demande, vous pouvez ignorer cet e-mail.', @@ -59,11 +59,11 @@ return [ * Email Confirmation */ 'email_confirm_subject' => 'Confirmez votre adresse e-mail pour :appName', - 'email_confirm_greeting' => 'Merci d\'avoir rejoint :appName!', - 'email_confirm_text' => 'Merci de confirmer en cliquant sur le lien ci-dessous:', + 'email_confirm_greeting' => 'Merci d\'avoir rejoint :appName !', + 'email_confirm_text' => 'Merci de confirmer en cliquant sur le lien ci-dessous :', 'email_confirm_action' => 'Confirmez votre adresse e-mail', 'email_confirm_send_error' => 'La confirmation par e-mail est requise mais le système n\'a pas pu envoyer l\'e-mail. Contactez l\'administrateur système.', - 'email_confirm_success' => 'Votre adresse e-mail a été confirmée!', + 'email_confirm_success' => 'Votre adresse e-mail a été confirmée !', 'email_confirm_resent' => 'L\'e-mail de confirmation a été ré-envoyé. Vérifiez votre boîte de récéption.', 'email_not_confirmed' => 'Adresse e-mail non confirmée', From 57eeb9b0a39cd9c7934756cb7662d05259c1eaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 23:01:03 +0200 Subject: [PATCH 54/83] common.php: fix some spelling issues in french translation --- resources/lang/fr/common.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/lang/fr/common.php b/resources/lang/fr/common.php index 5eb4b8fa8..7a8ec55b6 100644 --- a/resources/lang/fr/common.php +++ b/resources/lang/fr/common.php @@ -9,7 +9,7 @@ return [ 'back' => 'Retour', 'save' => 'Enregistrer', 'continue' => 'Continuer', - 'select' => 'Selectionner', + 'select' => 'Sélectionner', /** * Form Labels @@ -53,6 +53,6 @@ return [ /** * Email Content */ - 'email_action_help' => 'Si vous rencontrez des problèmes pour cliquer le bouton ":actionText", copiez et collez l\'adresse ci-dessous dans votre navigateur:', + 'email_action_help' => 'Si vous rencontrez des problèmes pour cliquer sur le bouton ":actionText", copiez et collez l\'adresse ci-dessous dans votre navigateur :', 'email_rights' => 'Tous droits réservés', ]; From 7557d6d619ff16b17d69fd8236e650e8d306600d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 23:18:11 +0200 Subject: [PATCH 55/83] entities.php: fix some spelling issues in french translation --- resources/lang/fr/entities.php | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/resources/lang/fr/entities.php b/resources/lang/fr/entities.php index 5562fb0fd..17b4ea913 100644 --- a/resources/lang/fr/entities.php +++ b/resources/lang/fr/entities.php @@ -12,7 +12,7 @@ return [ 'recently_update' => 'Mis à jour récemment', 'recently_viewed' => 'Vus récemment', 'recent_activity' => 'Activité récente', - 'create_now' => 'En créer un récemment', + 'create_now' => 'En créer un maintenant', 'revisions' => 'Révisions', 'meta_created' => 'Créé :timeLength', 'meta_created_name' => 'Créé :timeLength par :user', @@ -59,8 +59,8 @@ return [ 'books_create' => 'Créer un nouveau livre', 'books_delete' => 'Supprimer un livre', 'books_delete_named' => 'Supprimer le livre :bookName', - 'books_delete_explain' => 'Ceci va supprimer le livre nommé \':bookName\', Tous les chapitres et pages seront supprimés.', - 'books_delete_confirmation' => 'Êtes-vous sûr(e) de vouloir supprimer ce livre?', + 'books_delete_explain' => 'Ceci va supprimer le livre nommé \':bookName\', tous les chapitres et pages seront supprimés.', + 'books_delete_confirmation' => 'Êtes-vous sûr(e) de vouloir supprimer ce livre ?', 'books_edit' => 'Modifier le livre', 'books_edit_named' => 'Modifier le livre :bookName', 'books_form_book_name' => 'Nom du livre', @@ -90,18 +90,18 @@ return [ 'chapters_create' => 'Créer un nouveau chapitre', 'chapters_delete' => 'Supprimer le chapitre', 'chapters_delete_named' => 'Supprimer le chapitre :chapterName', - 'chapters_delete_explain' => 'Ceci va supprimer le chapitre \':chapterName\', Toutes les pages seront déplacée dans le livre parent.', - 'chapters_delete_confirm' => 'Etes-vous sûr(e) de vouloir supprimer ce chapitre?', + 'chapters_delete_explain' => 'Ceci va supprimer le chapitre \':chapterName\', toutes les pages seront déplacées dans le livre parent.', + 'chapters_delete_confirm' => 'Etes-vous sûr(e) de vouloir supprimer ce chapitre ?', 'chapters_edit' => 'Modifier le chapitre', 'chapters_edit_named' => 'Modifier le chapitre :chapterName', 'chapters_save' => 'Enregistrer le chapitre', - 'chapters_move' => 'Déplace le chapitre', + 'chapters_move' => 'Déplacer le chapitre', 'chapters_move_named' => 'Déplacer le chapitre :chapterName', 'chapter_move_success' => 'Chapitre déplacé dans :bookName', 'chapters_permissions' => 'Permissions du chapitre', - 'chapters_empty' => 'Il n\'y a pas de pages dans ce chapitre actuellement.', + 'chapters_empty' => 'Il n\'y a pas de page dans ce chapitre actuellement.', 'chapters_permissions_active' => 'Permissions du chapitre activées', - 'chapters_permissions_success' => 'Permissions du chapitres mises à jour', + 'chapters_permissions_success' => 'Permissions du chapitre mises à jour', /** * Pages @@ -118,8 +118,8 @@ return [ 'pages_delete_draft' => 'Supprimer le brouillon', 'pages_delete_success' => 'Page supprimée', 'pages_delete_draft_success' => 'Brouillon supprimé', - 'pages_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cette page?', - 'pages_delete_draft_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer ce brouillon?', + 'pages_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cette page ?', + 'pages_delete_draft_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer ce brouillon ?', 'pages_editing_named' => 'Modification de la page :pageName', 'pages_edit_toggle_header' => 'Afficher/cacher l\'en-tête', 'pages_edit_save_draft' => 'Enregistrer le brouillon', @@ -131,7 +131,7 @@ return [ 'pages_edit_discard_draft' => 'Ecarter le brouillon', 'pages_edit_set_changelog' => 'Remplir le journal des changements', 'pages_edit_enter_changelog_desc' => 'Entrez une brève description des changements effectués', - 'pages_edit_enter_changelog' => 'Entrez dans le journal des changements', + 'pages_edit_enter_changelog' => 'Entrer dans le journal des changements', 'pages_save' => 'Enregistrez la page', 'pages_title' => 'Titre de la page', 'pages_name' => 'Nom de la page', @@ -139,7 +139,7 @@ return [ 'pages_md_preview' => 'Prévisualisation', 'pages_md_insert_image' => 'Insérer une image', 'pages_md_insert_link' => 'Insérer un lien', - 'pages_not_in_chapter' => 'La page n\'est pas dans un chanpitre', + 'pages_not_in_chapter' => 'La page n\'est pas dans un chapitre', 'pages_move' => 'Déplacer la page', 'pages_move_success' => 'Page déplacée à ":parentName"', 'pages_permissions' => 'Permissions de la page', @@ -160,15 +160,15 @@ return [ 'pages_initial_revision' => 'Publication initiale', 'pages_initial_name' => 'Nouvelle page', 'pages_editing_draft_notification' => 'Vous éditez actuellement un brouillon qui a été sauvé :timeDiff.', - 'pages_draft_edited_notification' => 'La page a été mise à jour depuis votre dernière visit. Vous devriez écarter ce brouillon.', + 'pages_draft_edited_notification' => 'La page a été mise à jour depuis votre dernière visite. Vous devriez écarter ce brouillon.', 'pages_draft_edit_active' => [ - 'start_a' => ':count utilisateurs ont commencé a éditer cette page', + 'start_a' => ':count utilisateurs ont commencé à éditer cette page', 'start_b' => ':userName a commencé à éditer cette page', 'time_a' => 'depuis la dernière sauvegarde', 'time_b' => 'dans les :minCount dernières minutes', - 'message' => ':start :time. Attention a ne pas écraser les mises à jour de quelqu\'un d\'autre!', + 'message' => ':start :time. Attention à ne pas écraser les mises à jour de quelqu\'un d\'autre !', ], - 'pages_draft_discarded' => 'Brouuillon écarté, la page est dans sa version actuelle.', + 'pages_draft_discarded' => 'Brouillon écarté, la page est dans sa version actuelle.', /** * Editor sidebar @@ -210,7 +210,7 @@ return [ */ 'profile_user_for_x' => 'Utilisateur depuis :time', 'profile_created_content' => 'Contenu créé', - 'profile_not_created_pages' => ':userName n\'a pas créé de pages', - 'profile_not_created_chapters' => ':userName n\'a pas créé de chapitres', - 'profile_not_created_books' => ':userName n\'a pas créé de livres', + 'profile_not_created_pages' => ':userName n\'a pas créé de page', + 'profile_not_created_chapters' => ':userName n\'a pas créé de chapitre', + 'profile_not_created_books' => ':userName n\'a pas créé de livre', ]; From b2b4a24d7c76f71c1b71910cd17a800e241f7117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 23:23:34 +0200 Subject: [PATCH 56/83] errors.php: fix some spelling issues in french translation --- resources/lang/fr/errors.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 72af89f7f..d4390e0ba 100644 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -20,8 +20,8 @@ return [ 'ldap_extension_not_installed' => 'L\'extention LDAP PHP n\'est pas installée', 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', 'social_no_action_defined' => 'No action defined', - 'social_account_in_use' => 'Cet compte :socialAccount est déjà utilisé. Essayez de vous connecter via :socialAccount.', - 'social_account_email_in_use' => 'L\'email :email Est déjà utilisé. Si vous avez déjà un compte :socialAccount, vous pouvez le joindre à votre profil existant.', + 'social_account_in_use' => 'Ce compte :socialAccount est déjà utilisé. Essayez de vous connecter via :socialAccount.', + 'social_account_email_in_use' => 'L\'email :email est déjà utilisé. Si vous avez déjà un compte :socialAccount, vous pouvez le joindre à votre profil existant.', 'social_account_existing' => 'Ce compte :socialAccount est déjà rattaché à votre profil.', 'social_account_already_used_existing' => 'Ce compte :socialAccount est déjà utilisé par un autre utilisateur.', 'social_account_not_used' => 'Ce compte :socialAccount n\'est lié à aucun utilisateur. ', @@ -32,7 +32,7 @@ return [ // System 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', 'cannot_get_image_from_url' => 'Impossible de récupérer l\'image depuis :url', - 'cannot_create_thumbs' => 'Le serveur ne peux pas créer de miniatures, vérifier que l\extensions GD PHP est installée.', + 'cannot_create_thumbs' => 'Le serveur ne peut pas créer de miniature, vérifier que l\'extension PHP GD est installée.', 'server_upload_limit' => 'La taille du fichier est trop grande.', 'image_upload_error' => 'Une erreur est survenue pendant l\'envoi de l\'image', @@ -57,7 +57,7 @@ return [ // Roles 'role_cannot_be_edited' => 'Ce rôle ne peut pas être modifié', - 'role_system_cannot_be_deleted' => 'Ceci est un rôle du système et on ne peut pas le supprimer', + 'role_system_cannot_be_deleted' => 'Ceci est un rôle du système et ne peut pas être supprimé', 'role_registration_default_cannot_delete' => 'Ce rôle ne peut pas être supprimé tant qu\'il est le rôle par défaut', // Error pages From 3d9819f97c2a0fda1a6f2d327faebe4228b70c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 23:25:03 +0200 Subject: [PATCH 57/83] passwords.php: fix some spelling issues in french translation --- resources/lang/fr/passwords.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/lang/fr/passwords.php b/resources/lang/fr/passwords.php index 7be81da23..484b4b20c 100644 --- a/resources/lang/fr/passwords.php +++ b/resources/lang/fr/passwords.php @@ -16,7 +16,7 @@ return [ 'password' => 'Les mots de passe doivent faire au moins 6 caractères et correspondre à la confirmation.', 'user' => "Nous n'avons pas trouvé d'utilisateur avec cette adresse.", 'token' => 'Le jeton de réinitialisation est invalide.', - 'sent' => 'Nous vous avons envoyé un lien de réinitialisation de mot de passe!', - 'reset' => 'Votre mot de passe a été réinitialisé!', + 'sent' => 'Nous vous avons envoyé un lien de réinitialisation de mot de passe !', + 'reset' => 'Votre mot de passe a été réinitialisé !', ]; From a2a2e377975fec9b4d198ebf99a1273aceda6c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 23:29:52 +0200 Subject: [PATCH 58/83] settings.php: fix some spelling issues in french translation --- resources/lang/fr/settings.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/resources/lang/fr/settings.php b/resources/lang/fr/settings.php index 8a3756527..7899cdb2a 100644 --- a/resources/lang/fr/settings.php +++ b/resources/lang/fr/settings.php @@ -19,14 +19,14 @@ return [ 'app_settings' => 'Préférences de l\'application', 'app_name' => 'Nom de l\'application', 'app_name_desc' => 'Ce nom est affiché dans l\'en-tête et les e-mails.', - 'app_name_header' => 'Afficher le nom dans l\'en-tête?', - 'app_public_viewing' => 'Accepter le visionnage public des pages?', - 'app_secure_images' => 'Activer l\'ajout d\'image sécurisé?', + 'app_name_header' => 'Afficher le nom dans l\'en-tête ?', + 'app_public_viewing' => 'Accepter le visionnage public des pages ?', + 'app_secure_images' => 'Activer l\'ajout d\'image sécurisé ?', 'app_secure_images_desc' => 'Pour des questions de performances, toutes les images sont publiques. Cette option ajoute une chaîne aléatoire difficile à deviner dans les URLs des images.', 'app_editor' => 'Editeur des pages', 'app_editor_desc' => 'Sélectionnez l\'éditeur qui sera utilisé pour modifier les pages.', 'app_custom_html' => 'HTML personnalisé dans l\'en-tête', - 'app_custom_html_desc' => 'Le contenu inséré ici sera jouté en bas de la balise <head> de toutes les pages. Vous pouvez l\'utiliser pour ajouter du CSS personnalisé ou un tracker analytique.', + 'app_custom_html_desc' => 'Le contenu inséré ici sera ajouté en bas de la balise <head> de toutes les pages. Vous pouvez l\'utiliser pour ajouter du CSS personnalisé ou un tracker analytique.', 'app_logo' => 'Logo de l\'Application', 'app_logo_desc' => 'Cette image doit faire 43px de hauteur. <br>Les images plus larges seront réduites.', 'app_primary_color' => 'Couleur principale de l\'application', @@ -37,9 +37,9 @@ return [ */ 'reg_settings' => 'Préférence pour l\'inscription', - 'reg_allow' => 'Accepter l\'inscription?', + 'reg_allow' => 'Accepter l\'inscription ?', 'reg_default_role' => 'Rôle par défaut lors de l\'inscription', - 'reg_confirm_email' => 'Obliger la confirmation par e-mail?', + 'reg_confirm_email' => 'Obliger la confirmation par e-mail ?', 'reg_confirm_email_desc' => 'Si la restriction de domaine est activée, la confirmation sera automatiquement obligatoire et cette valeur sera ignorée.', 'reg_confirm_restrict_domain' => 'Restreindre l\'inscription à un domaine', 'reg_confirm_restrict_domain_desc' => 'Entrez une liste de domaines acceptés lors de l\'inscription, séparés par une virgule. Les utilisateur recevront un e-mail de confirmation à cette adresse. <br> Les utilisateurs pourront changer leur adresse après inscription s\'ils le souhaitent.', @@ -57,17 +57,17 @@ return [ 'role_delete_confirm' => 'Ceci va supprimer le rôle \':roleName\'.', 'role_delete_users_assigned' => 'Ce rôle a :userCount utilisateurs assignés. Vous pouvez choisir un rôle de remplacement pour ces utilisateurs.', 'role_delete_no_migration' => "Ne pas assigner de nouveau rôle", - 'role_delete_sure' => 'Êtes vous sûr(e) de vouloir supprimer ce rôle?', + 'role_delete_sure' => 'Êtes vous sûr(e) de vouloir supprimer ce rôle ?', 'role_delete_success' => 'Le rôle a été supprimé avec succès', 'role_edit' => 'Modifier le rôle', 'role_details' => 'Détails du rôle', - 'role_name' => 'Nom du Rôle', + 'role_name' => 'Nom du rôle', 'role_desc' => 'Courte description du rôle', 'role_system' => 'Permissions système', 'role_manage_users' => 'Gérer les utilisateurs', 'role_manage_roles' => 'Gérer les rôles et permissions', 'role_manage_entity_permissions' => 'Gérer les permissions sur les livres, chapitres et pages', - 'role_manage_own_entity_permissions' => 'Gérer les permissions de ses propres livres chapitres et pages', + 'role_manage_own_entity_permissions' => 'Gérer les permissions de ses propres livres, chapitres, et pages', 'role_manage_settings' => 'Gérer les préférences de l\'application', 'role_asset' => 'Asset Permissions', 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', @@ -94,7 +94,7 @@ return [ 'users_delete' => 'Supprimer un utilisateur', 'users_delete_named' => 'Supprimer l\'utilisateur :userName', 'users_delete_warning' => 'Ceci va supprimer \':userName\' du système.', - 'users_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cet utilisateur?', + 'users_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cet utilisateur ?', 'users_delete_success' => 'Utilisateurs supprimés avec succès', 'users_edit' => 'Modifier l\'utilisateur', 'users_edit_profile' => 'Modifier le profil', @@ -106,7 +106,7 @@ return [ 'users_social_accounts_info' => 'Vous pouvez connecter des réseaux sociaux à votre compte pour vous connecter plus rapidement. Déconnecter un compte n\'enlèvera pas les accès autorisés précédemment sur votre compte de réseau social.', 'users_social_connect' => 'Connecter le compte', 'users_social_disconnect' => 'Déconnecter le compte', - 'users_social_connected' => 'Votre compte :socialAccount a élté ajouté avec succès.', + 'users_social_connected' => 'Votre compte :socialAccount a été ajouté avec succès.', 'users_social_disconnected' => 'Votre compte :socialAccount a été déconnecté avec succès', ]; From 0dc9d0bed7fff93fd57edcfafe9704b51e647533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 23:43:50 +0200 Subject: [PATCH 59/83] errors.php: add missing french translation --- resources/lang/fr/errors.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index d4390e0ba..4197b1708 100644 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -18,19 +18,19 @@ return [ 'ldap_fail_anonymous' => 'L\'accès LDAP anonyme n\'a pas abouti', 'ldap_fail_authed' => 'L\'accès LDAP n\'a pas abouti avec cet utilisateur et ce mot de passe', 'ldap_extension_not_installed' => 'L\'extention LDAP PHP n\'est pas installée', - 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', - 'social_no_action_defined' => 'No action defined', + 'ldap_cannot_connect' => 'Impossible de se connecter au serveur LDAP, la connexion initiale a échoué', + 'social_no_action_defined' => 'Pas d\'action définie', 'social_account_in_use' => 'Ce compte :socialAccount est déjà utilisé. Essayez de vous connecter via :socialAccount.', 'social_account_email_in_use' => 'L\'email :email est déjà utilisé. Si vous avez déjà un compte :socialAccount, vous pouvez le joindre à votre profil existant.', 'social_account_existing' => 'Ce compte :socialAccount est déjà rattaché à votre profil.', 'social_account_already_used_existing' => 'Ce compte :socialAccount est déjà utilisé par un autre utilisateur.', 'social_account_not_used' => 'Ce compte :socialAccount n\'est lié à aucun utilisateur. ', 'social_account_register_instructions' => 'Si vous n\'avez pas encore de compte, vous pouvez le lier avec l\'option :socialAccount.', - 'social_driver_not_found' => 'Social driver not found', - 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', + 'social_driver_not_found' => 'Pilote de compte social absent', + 'social_driver_not_configured' => 'Vos préférences pour le compte :socialAccount sont incorrectes.', // System - 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', + 'path_not_writable' => 'Impossible d\'écrire dans :filePath. Assurez-vous d\'avoir les droits d\'écriture sur le serveur', 'cannot_get_image_from_url' => 'Impossible de récupérer l\'image depuis :url', 'cannot_create_thumbs' => 'Le serveur ne peut pas créer de miniature, vérifier que l\'extension PHP GD est installée.', 'server_upload_limit' => 'La taille du fichier est trop grande.', From 0b2c3c1aa7379e442647ee63c85bda2fd3401102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Le=20Gal?= <jerome@joworld.net> Date: Sat, 22 Jul 2017 23:44:01 +0200 Subject: [PATCH 60/83] settings.php: add missing french translation --- resources/lang/fr/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/lang/fr/settings.php b/resources/lang/fr/settings.php index 7899cdb2a..92e623795 100644 --- a/resources/lang/fr/settings.php +++ b/resources/lang/fr/settings.php @@ -30,7 +30,7 @@ return [ 'app_logo' => 'Logo de l\'Application', 'app_logo_desc' => 'Cette image doit faire 43px de hauteur. <br>Les images plus larges seront réduites.', 'app_primary_color' => 'Couleur principale de l\'application', - 'app_primary_color_desc' => 'This should be a hex value. <br>Leave empty to reset to the default color.', + 'app_primary_color_desc' => 'Cela devrait être une valeur hexadécimale. <br>Laisser vide pour rétablir la couleur par défaut.', /** * Registration settings From b4dcde252b8720baac214720f2c6740ff1796bac Mon Sep 17 00:00:00 2001 From: 10bass <10bass@users.noreply.github.com> Date: Mon, 24 Jul 2017 20:06:15 -0400 Subject: [PATCH 61/83] Update search.js Trying to apply an exact match or tag would previously redirect to /search, regardless of the installation path. --- resources/assets/js/vues/search.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/assets/js/vues/search.js b/resources/assets/js/vues/search.js index 515ca3bc9..8cb790d24 100644 --- a/resources/assets/js/vues/search.js +++ b/resources/assets/js/vues/search.js @@ -149,7 +149,7 @@ let methods = { updateSearch(e) { e.preventDefault(); - window.location = '/search?term=' + encodeURIComponent(this.termString); + window.location = window.baseUrl('/search?term=' + encodeURIComponent(this.termString)); }, enableDate(optionName) { @@ -192,4 +192,4 @@ function created() { module.exports = { data, computed, methods, created -}; \ No newline at end of file +}; From 072f6b103e5bddbc155e41e275d023d217cf6600 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Thu, 27 Jul 2017 15:14:53 +0100 Subject: [PATCH 62/83] Vastly sped up gulp watch and added livereload --- gulpfile.js | 28 ++++++++++++++++++++-------- package.json | 1 + 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index b72bb366d..08c8886bd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -12,8 +12,10 @@ const babelify = require("babelify"); const watchify = require("watchify"); const envify = require("envify"); const gutil = require("gulp-util"); +const liveReload = require('gulp-livereload'); if (argv.production) process.env.NODE_ENV = 'production'; +let isProduction = argv.production || process.env.NODE_ENV === 'production'; gulp.task('styles', () => { let chain = gulp.src(['resources/assets/sass/**/*.scss']) @@ -24,31 +26,40 @@ gulp.task('styles', () => { }})) .pipe(sass()) .pipe(autoprefixer('last 2 versions')); - if (argv.production) chain = chain.pipe(minifycss()); - return chain.pipe(gulp.dest('public/css/')); + if (isProduction) chain = chain.pipe(minifycss()); + return chain.pipe(gulp.dest('public/css/')).pipe(liveReload()); }); -function scriptTask(watch=false) { +function scriptTask(watch = false) { let props = { basedir: 'resources/assets/js', debug: true, - entries: ['global.js'] + entries: ['global.js'], + fast: !isProduction, + cache: {}, + packageCache: {}, }; let bundler = watch ? watchify(browserify(props), { poll: true }) : browserify(props); - bundler.transform(envify, {global: true}).transform(babelify, {presets: ['es2015']}); + + if (isProduction) { + bundler.transform(envify, {global: true}).transform(babelify, {presets: ['es2015']}); + } + function rebundle() { let stream = bundler.bundle(); stream = stream.pipe(source('common.js')); - if (argv.production) stream = stream.pipe(buffer()).pipe(uglify()); - return stream.pipe(gulp.dest('public/js/')); + if (isProduction) stream = stream.pipe(buffer()).pipe(uglify()); + return stream.pipe(gulp.dest('public/js/')).pipe(liveReload()); } + bundler.on('update', function() { rebundle(); - gutil.log('Rebundle...'); + gutil.log('Rebundling assets...'); }); + bundler.on('log', gutil.log); return rebundle(); } @@ -57,6 +68,7 @@ gulp.task('scripts', () => {scriptTask(false)}); gulp.task('scripts-watch', () => {scriptTask(true)}); gulp.task('default', ['styles', 'scripts-watch'], () => { + liveReload.listen(); gulp.watch("resources/assets/sass/**/*.scss", ['styles']); }); diff --git a/package.json b/package.json index 93f62bf1f..fb5e5a54a 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "gulp": "3.9.1", "gulp-autoprefixer": "3.1.1", "gulp-clean-css": "^3.0.4", + "gulp-livereload": "^3.8.1", "gulp-minify-css": "1.2.4", "gulp-plumber": "1.1.0", "gulp-sass": "3.1.0", From 5cd08ab2f53ff7bcf21864772ef1349b1c89c627 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Thu, 27 Jul 2017 15:43:17 +0100 Subject: [PATCH 63/83] Fixed custom plugin when developing --- resources/assets/js/pages/page-form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/js/pages/page-form.js b/resources/assets/js/pages/page-form.js index 81d1cdea6..f6f66beb4 100644 --- a/resources/assets/js/pages/page-form.js +++ b/resources/assets/js/pages/page-form.js @@ -120,7 +120,7 @@ function codePlugin() { $codeMirrorContainer.replaceWith($pre); } - window.tinymce.PluginManager.add('codeeditor', (editor, url) => { + window.tinymce.PluginManager.add('codeeditor', function(editor, url) { let $ = editor.$; From ec83f830172721745b996eb3b4fddd19ff7ca9bb Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Thu, 27 Jul 2017 16:10:58 +0100 Subject: [PATCH 64/83] Added breadcrumbs to pages in entity select Fixes #391 --- package.json | 3 ++- resources/views/chapters/list-item.blade.php | 2 +- resources/views/pages/list-item.blade.php | 12 +++++++++ .../views/search/entity-ajax-list.blade.php | 2 +- tests/Entity/EntitySearchTest.php | 27 ++++++++++++++++--- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index fb5e5a54a..429572882 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "build": "gulp build", "production": "gulp build --production", "dev": "gulp", - "watch": "gulp" + "watch": "gulp", + "permissions": "chown -R $USER:$USER bootstrap/cache storage public/uploads" }, "devDependencies": { "babelify": "^7.3.0", diff --git a/resources/views/chapters/list-item.blade.php b/resources/views/chapters/list-item.blade.php index 8487a63a3..1ae20b301 100644 --- a/resources/views/chapters/list-item.blade.php +++ b/resources/views/chapters/list-item.blade.php @@ -2,7 +2,7 @@ <h4> @if (isset($showPath) && $showPath) <a href="{{ $chapter->book->getUrl() }}" class="text-book"> - <i class="zmdi zmdi-book"></i>{{ $chapter->book->name }} + <i class="zmdi zmdi-book"></i>{{ $chapter->book->getShortName() }} </a> <span class="text-muted"> » </span> @endif diff --git a/resources/views/pages/list-item.blade.php b/resources/views/pages/list-item.blade.php index 70b309e7d..f440a52f6 100644 --- a/resources/views/pages/list-item.blade.php +++ b/resources/views/pages/list-item.blade.php @@ -1,5 +1,17 @@ <div class="page {{$page->draft ? 'draft' : ''}} entity-list-item" data-entity-type="page" data-entity-id="{{$page->id}}"> <h4> + @if (isset($showPath) && $showPath) + <a href="{{ $page->book->getUrl() }}" class="text-book"> + <i class="zmdi zmdi-book"></i>{{ $page->book->getShortName() }} + </a> + <span class="text-muted"> » </span> + @if($page->chapter) + <a href="{{ $page->chapter->getUrl() }}" class="text-chapter"> + <i class="zmdi zmdi-collection-bookmark"></i>{{ $page->chapter->getShortName() }} + </a> + <span class="text-muted"> » </span> + @endif + @endif <a href="{{ $page->getUrl() }}" class="text-page entity-list-item-link"><i class="zmdi zmdi-file-text"></i><span class="entity-list-item-name">{{ $page->name }}</span></a> </h4> diff --git a/resources/views/search/entity-ajax-list.blade.php b/resources/views/search/entity-ajax-list.blade.php index 93f2633aa..9a146506f 100644 --- a/resources/views/search/entity-ajax-list.blade.php +++ b/resources/views/search/entity-ajax-list.blade.php @@ -2,7 +2,7 @@ @if(count($entities) > 0) @foreach($entities as $index => $entity) @if($entity->isA('page')) - @include('pages/list-item', ['page' => $entity]) + @include('pages/list-item', ['page' => $entity, 'showPath' => true]) @elseif($entity->isA('book')) @include('books/list-item', ['book' => $entity]) @elseif($entity->isA('chapter')) diff --git a/tests/Entity/EntitySearchTest.php b/tests/Entity/EntitySearchTest.php index 94e28e944..587430918 100644 --- a/tests/Entity/EntitySearchTest.php +++ b/tests/Entity/EntitySearchTest.php @@ -1,6 +1,9 @@ <?php namespace Tests; +use BookStack\Chapter; +use BookStack\Page; + class EntitySearchTest extends TestCase { @@ -75,10 +78,10 @@ class EntitySearchTest extends TestCase ]) ]; - $pageA = \BookStack\Page::first(); + $pageA = Page::first(); $pageA->tags()->saveMany($newTags); - $pageB = \BookStack\Page::all()->last(); + $pageB = Page::all()->last(); $pageB->tags()->create(['name' => 'animal', 'value' => 'dog']); $this->asEditor(); @@ -160,8 +163,8 @@ class EntitySearchTest extends TestCase public function test_ajax_entity_search() { - $page = \BookStack\Page::all()->last(); - $notVisitedPage = \BookStack\Page::first(); + $page = Page::all()->last(); + $notVisitedPage = Page::first(); // Visit the page to make popular $this->asEditor()->get($page->getUrl()); @@ -176,4 +179,20 @@ class EntitySearchTest extends TestCase $defaultListTest->assertSee($page->name); $defaultListTest->assertDontSee($notVisitedPage->name); } + + public function test_ajax_entity_serach_shows_breadcrumbs() + { + $chapter = Chapter::first(); + $page = $chapter->pages->first(); + $this->asEditor(); + + $pageSearch = $this->get('/ajax/search/entities?term=' . urlencode($page->name)); + $pageSearch->assertSee($page->name); + $pageSearch->assertSee($chapter->getShortName()); + $pageSearch->assertSee($page->book->getShortName()); + + $chapterSearch = $this->get('/ajax/search/entities?term=' . urlencode($chapter->name)); + $chapterSearch->assertSee($chapter->name); + $chapterSearch->assertSee($chapter->book->getShortName()); + } } From 21247e10d02b22c34883ab060796801867cda732 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Thu, 27 Jul 2017 16:28:23 +0100 Subject: [PATCH 65/83] Reverted travis changes and added html escaping --- .travis.yml | 11 +---------- resources/views/books/show.blade.php | 2 +- resources/views/chapters/show.blade.php | 2 +- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index f03865201..839d3be3f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,15 +4,6 @@ language: php php: - 7.0 -addons: - apt: - packages: - - ldap-utils - - slapd - -before_install: - - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - cache: directories: - $HOME/.composer/cache @@ -34,4 +25,4 @@ after_failure: - cat storage/logs/laravel.log script: - - phpunit --stop-on-error --stop-on-failure + - phpunit diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index b6a9bcfba..9882f09a2 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -56,7 +56,7 @@ <h1>{{$book->name}}</h1> <div class="book-content" v-if="!searching"> - <p class="text-muted" v-pre>{!! nl2br($book->description) !!}</p> + <p class="text-muted" v-pre>{!! nl2br(e($book->description)) !!}</p> <div class="page-list" v-pre> <hr> diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php index 5b36037ca..9a3195555 100644 --- a/resources/views/chapters/show.blade.php +++ b/resources/views/chapters/show.blade.php @@ -52,7 +52,7 @@ <div class="col-md-7"> <h1>{{ $chapter->name }}</h1> <div class="chapter-content" v-if="!searching"> - <p class="text-muted">{!! nl2br($chapter->description) !!}</p> + <p class="text-muted">{!! nl2br(e($chapter->description)) !!}</p> @if(count($pages) > 0) <div class="page-list"> From ac7a8a8e1e6f861f9df3f4ba62260b546736581b Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Thu, 27 Jul 2017 19:07:58 +0100 Subject: [PATCH 66/83] Expanded the available editor shortcuts in both editors Adds formatting on ctrl+nums for everything on formats dropdown. Closes #85. --- resources/assets/js/directives.js | 116 ++++++++++++++++++++----- resources/assets/js/pages/page-form.js | 69 +++++++++++++-- 2 files changed, 152 insertions(+), 33 deletions(-) diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index d783fd682..8d7d89cee 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -193,30 +193,6 @@ module.exports = function (ngApp, events) { } scope.tinymce.extraSetups.push(tinyMceSetup); - - // Custom tinyMCE plugins - tinymce.PluginManager.add('customhr', function (editor) { - editor.addCommand('InsertHorizontalRule', function () { - let hrElem = document.createElement('hr'); - let cNode = editor.selection.getNode(); - let parentNode = cNode.parentNode; - parentNode.insertBefore(hrElem, cNode); - }); - - editor.addButton('hr', { - icon: 'hr', - tooltip: 'Horizontal line', - cmd: 'InsertHorizontalRule' - }); - - editor.addMenuItem('hr', { - icon: 'hr', - text: 'Horizontal line', - cmd: 'InsertHorizontalRule', - context: 'insert' - }); - }); - tinymce.init(scope.tinymce); } } @@ -257,6 +233,21 @@ module.exports = function (ngApp, events) { extraKeys[`${metaKey}-S`] = function(cm) {scope.$emit('save-draft');}; // Show link selector extraKeys[`Shift-${metaKey}-K`] = function(cm) {showLinkSelector()}; + // Insert Link + extraKeys[`${metaKey}-K`] = function(cm) {insertLink()}; + // FormatShortcuts + extraKeys[`${metaKey}-1`] = function(cm) {replaceLineStart('##');}; + extraKeys[`${metaKey}-2`] = function(cm) {replaceLineStart('###');}; + extraKeys[`${metaKey}-3`] = function(cm) {replaceLineStart('####');}; + extraKeys[`${metaKey}-4`] = function(cm) {replaceLineStart('#####');}; + extraKeys[`${metaKey}-5`] = function(cm) {replaceLineStart('');}; + extraKeys[`${metaKey}-d`] = function(cm) {replaceLineStart('');}; + extraKeys[`${metaKey}-6`] = function(cm) {replaceLineStart('>');}; + extraKeys[`${metaKey}-q`] = function(cm) {replaceLineStart('>');}; + extraKeys[`${metaKey}-7`] = function(cm) {wrapSelection('\n```\n', '\n```');}; + extraKeys[`${metaKey}-8`] = function(cm) {wrapSelection('`', '`');}; + extraKeys[`Shift-${metaKey}-E`] = function(cm) {wrapSelection('`', '`');}; + extraKeys[`${metaKey}-9`] = function(cm) {wrapSelection('<p class="callout info">', '</div>');}; cm.setOption('extraKeys', extraKeys); // Update data on content change @@ -309,6 +300,73 @@ module.exports = function (ngApp, events) { cm.setSelections(cursor); } + // Helper to replace the start of the line + function replaceLineStart(newStart) { + let cursor = cm.getCursor(); + let lineContent = cm.getLine(cursor.line); + let lineLen = lineContent.length; + let lineStart = lineContent.split(' ')[0]; + + // Remove symbol if already set + if (lineStart === newStart) { + lineContent = lineContent.replace(`${newStart} `, ''); + cm.replaceRange(lineContent, {line: cursor.line, ch: 0}, {line: cursor.line, ch: lineLen}); + cm.setCursor({line: cursor.line, ch: cursor.ch - (newStart.length + 1)}); + return; + } + + let alreadySymbol = /^[#>`]/.test(lineStart); + let posDif = 0; + if (alreadySymbol) { + posDif = newStart.length - lineStart.length; + lineContent = lineContent.replace(lineStart, newStart).trim(); + } else if (newStart !== '') { + posDif = newStart.length + 1; + lineContent = newStart + ' ' + lineContent; + } + cm.replaceRange(lineContent, {line: cursor.line, ch: 0}, {line: cursor.line, ch: lineLen}); + cm.setCursor({line: cursor.line, ch: cursor.ch + posDif}); + } + + function wrapLine(start, end) { + let cursor = cm.getCursor(); + let lineContent = cm.getLine(cursor.line); + let lineLen = lineContent.length; + let newLineContent = lineContent; + + if (lineContent.indexOf(start) === 0 && lineContent.slice(-end.length) === end) { + newLineContent = lineContent.slice(start.length, lineContent.length - end.length); + } else { + newLineContent = `${start}${lineContent}${end}`; + } + + cm.replaceRange(newLineContent, {line: cursor.line, ch: 0}, {line: cursor.line, ch: lineLen}); + cm.setCursor({line: cursor.line, ch: cursor.ch + (newLineContent.length - lineLen)}); + } + + function wrapSelection(start, end) { + let selection = cm.getSelection(); + if (selection === '') return wrapLine(start, end); + let newSelection = selection; + let frontDiff = 0; + let endDiff = 0; + + if (selection.indexOf(start) === 0 && selection.slice(-end.length) === end) { + newSelection = selection.slice(start.length, selection.length - end.length); + endDiff = -(end.length + start.length); + } else { + newSelection = `${start}${selection}${end}`; + endDiff = start.length + end.length; + } + + let selections = cm.listSelections()[0]; + cm.replaceSelection(newSelection); + let headFirst = selections.head.ch <= selections.anchor.ch; + selections.head.ch += headFirst ? frontDiff : endDiff; + selections.anchor.ch += headFirst ? endDiff : frontDiff; + cm.setSelections([selections]); + } + // Handle image upload and add image into markdown content function uploadImage(file) { if (file === null || file.type.indexOf('image') !== 0) return; @@ -351,6 +409,16 @@ module.exports = function (ngApp, events) { }); } + function insertLink() { + let cursorPos = cm.getCursor('from'); + let selectedText = cm.getSelection() || ''; + let newText = `[${selectedText}]()`; + cm.focus(); + cm.replaceSelection(newText); + let cursorPosDiff = (selectedText === '') ? -3 : -1; + cm.setCursor(cursorPos.line, cursorPos.ch + newText.length+cursorPosDiff); + } + // Show the image manager and handle image insertion function showImageManager() { let cursorPos = cm.getCursor('from'); diff --git a/resources/assets/js/pages/page-form.js b/resources/assets/js/pages/page-form.js index f6f66beb4..4f4c1fbe0 100644 --- a/resources/assets/js/pages/page-form.js +++ b/resources/assets/js/pages/page-form.js @@ -52,14 +52,36 @@ function editorPaste(e, editor) { function registerEditorShortcuts(editor) { // Headers for (let i = 1; i < 5; i++) { - editor.addShortcut('meta+' + i, '', ['FormatBlock', false, 'h' + i]); + editor.shortcuts.add('meta+' + i, '', ['FormatBlock', false, 'h' + (i+1)]); } // Other block shortcuts - editor.addShortcut('meta+q', '', ['FormatBlock', false, 'blockquote']); - editor.addShortcut('meta+d', '', ['FormatBlock', false, 'p']); - editor.addShortcut('meta+e', '', ['codeeditor', false, 'pre']); - editor.addShortcut('meta+shift+E', '', ['FormatBlock', false, 'code']); + editor.shortcuts.add('meta+5', '', ['FormatBlock', false, 'p']); + editor.shortcuts.add('meta+d', '', ['FormatBlock', false, 'p']); + editor.shortcuts.add('meta+6', '', ['FormatBlock', false, 'blockquote']); + editor.shortcuts.add('meta+q', '', ['FormatBlock', false, 'blockquote']); + editor.shortcuts.add('meta+7', '', ['codeeditor', false, 'pre']); + editor.shortcuts.add('meta+e', '', ['codeeditor', false, 'pre']); + editor.shortcuts.add('meta+8', '', ['FormatBlock', false, 'code']); + editor.shortcuts.add('meta+shift+E', '', ['FormatBlock', false, 'code']); + // Loop through callout styles + editor.shortcuts.add('meta+9', '', function() { + let selectedNode = editor.selection.getNode(); + let formats = ['info', 'success', 'warning', 'danger']; + + if (!selectedNode || selectedNode.className.indexOf('callout') === -1) { + editor.formatter.apply('calloutinfo'); + return; + } + + for (let i = 0; i < formats.length; i++) { + if (selectedNode.className.indexOf(formats[i]) === -1) continue; + let newFormat = (i === formats.length -1) ? formats[0] : formats[i+1]; + editor.formatter.apply('callout' + newFormat); + return; + } + editor.formatter.apply('p'); + }); } @@ -173,7 +195,32 @@ function codePlugin() { }); } +function hrPlugin() { + window.tinymce.PluginManager.add('customhr', function (editor) { + editor.addCommand('InsertHorizontalRule', function () { + let hrElem = document.createElement('hr'); + let cNode = editor.selection.getNode(); + let parentNode = cNode.parentNode; + parentNode.insertBefore(hrElem, cNode); + }); + + editor.addButton('hr', { + icon: 'hr', + tooltip: 'Horizontal line', + cmd: 'InsertHorizontalRule' + }); + + editor.addMenuItem('hr', { + icon: 'hr', + text: 'Horizontal line', + cmd: 'InsertHorizontalRule', + context: 'insert' + }); + }); +} + module.exports = function() { + hrPlugin(); codePlugin(); let settings = { selector: '#html-editor', @@ -207,10 +254,10 @@ module.exports = function() { {title: "Code Block", icon: "code", cmd: 'codeeditor', format: 'codeeditor'}, {title: "Inline Code", icon: "code", inline: "code"}, {title: "Callouts", items: [ - {title: "Success", block: 'p', exact: true, attributes : {'class' : 'callout success'}}, - {title: "Info", block: 'p', exact: true, attributes : {'class' : 'callout info'}}, - {title: "Warning", block: 'p', exact: true, attributes : {'class' : 'callout warning'}}, - {title: "Danger", block: 'p', exact: true, attributes : {'class' : 'callout danger'}} + {title: "Info", format: 'calloutinfo'}, + {title: "Success", format: 'calloutsuccess'}, + {title: "Warning", format: 'calloutwarning'}, + {title: "Danger", format: 'calloutdanger'} ]}, ], style_formats_merge: false, @@ -219,6 +266,10 @@ module.exports = function() { alignleft: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-left'}, aligncenter: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-center'}, alignright: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-right'}, + calloutsuccess: {block: 'p', exact: true, attributes: {class: 'callout success'}}, + calloutinfo: {block: 'p', exact: true, attributes: {class: 'callout info'}}, + calloutwarning: {block: 'p', exact: true, attributes: {class: 'callout warning'}}, + calloutdanger: {block: 'p', exact: true, attributes: {class: 'callout danger'}} }, file_browser_callback: function (field_name, url, type, win) { From 9126da629925a9dd7a637f3280d7e9614f48a45e Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Fri, 28 Jul 2017 11:32:42 +0100 Subject: [PATCH 67/83] Updated dev command details Closes #453 --- readme.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 4f025e3c2..6067fbb94 100644 --- a/readme.md +++ b/readme.md @@ -22,9 +22,12 @@ All development on BookStack is currently done on the master branch. When it's t SASS is used to help the CSS development and the JavaScript is run through browserify/babel to allow for writing ES6 code. Both of these are done using gulp. To run the build task you can use the following commands: ``` bash -# Build and minify for production +# Build assets for development npm run-script build +# Build and minify assets for production +npm run-script production + # Build for dev (With sourcemaps) and watch for changes npm run-script dev ``` From d6e87420c32ea64c5fb843176b75cd3f02fb5db7 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Tue, 1 Aug 2017 20:05:49 +0100 Subject: [PATCH 68/83] Merged comment migrations and incremented dev version --- ...017_01_01_130541_create_comments_table.php | 112 ------------------ ...7_06_04_060012_comments_add_active_col.php | 38 ------ ...017_08_01_130541_create_comments_table.php | 66 +++++++++++ version | 2 +- 4 files changed, 67 insertions(+), 151 deletions(-) delete mode 100644 database/migrations/2017_01_01_130541_create_comments_table.php delete mode 100644 database/migrations/2017_06_04_060012_comments_add_active_col.php create mode 100644 database/migrations/2017_08_01_130541_create_comments_table.php diff --git a/database/migrations/2017_01_01_130541_create_comments_table.php b/database/migrations/2017_01_01_130541_create_comments_table.php deleted file mode 100644 index f4ece31a7..000000000 --- a/database/migrations/2017_01_01_130541_create_comments_table.php +++ /dev/null @@ -1,112 +0,0 @@ -<?php - -use Illuminate\Support\Facades\Schema; -use Illuminate\Database\Schema\Blueprint; -use Illuminate\Database\Migrations\Migration; - -class CreateCommentsTable extends Migration -{ - /** - * Run the migrations. - * - * @return void - */ - public function up() - { - if (Schema::hasTable('comments')) { - return; - } - Schema::create('comments', function (Blueprint $table) { - $table->increments('id')->unsigned(); - $table->integer('page_id')->unsigned(); - $table->longText('text')->nullable(); - $table->longText('html')->nullable(); - $table->integer('parent_id')->unsigned()->nullable(); - $table->integer('created_by')->unsigned(); - $table->integer('updated_by')->unsigned()->nullable(); - $table->index(['page_id', 'parent_id']); - $table->timestamps(); - - // Get roles with permissions we need to change - $adminRoleId = DB::table('roles')->where('system_name', '=', 'admin')->first()->id; - - // Create & attach new entity permissions - $ops = ['Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; - $entity = 'Comment'; - foreach ($ops as $op) { - $permissionId = DB::table('role_permissions')->insertGetId([ - 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), - 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() - ]); - DB::table('permission_role')->insert([ - 'role_id' => $adminRoleId, - 'permission_id' => $permissionId - ]); - } - - // Get roles with permissions we need to change - /* - $editorRole = DB::table('roles')->where('name', '=', 'editor')->first(); - if (!empty($editorRole)) { - $editorRoleId = $editorRole->id; - // Create & attach new entity permissions - $ops = ['Create All', 'Create Own', 'Update Own', 'Delete Own']; - $entity = 'Comment'; - foreach ($ops as $op) { - $permissionId = DB::table('role_permissions')->insertGetId([ - 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), - 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() - ]); - DB::table('permission_role')->insert([ - 'role_id' => $editorRoleId, - 'permission_id' => $permissionId - ]); - } - } - - // Get roles with permissions we need to change - $viewerRole = DB::table('roles')->where('name', '=', 'viewer')->first(); - if (!empty($viewerRole)) { - $viewerRoleId = $viewerRole->id; - // Create & attach new entity permissions - $ops = ['Create All']; - $entity = 'Comment'; - foreach ($ops as $op) { - $permissionId = DB::table('role_permissions')->insertGetId([ - 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), - 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() - ]); - DB::table('permission_role')->insert([ - 'role_id' => $viewerRoleId, - 'permission_id' => $permissionId - ]); - } - } - */ - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('comments'); - // Create & attach new entity permissions - $ops = ['Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; - $entity = 'Comment'; - foreach ($ops as $op) { - $permName = strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)); - DB::table('role_permissions')->where('name', '=', $permName)->delete(); - } - } -} diff --git a/database/migrations/2017_06_04_060012_comments_add_active_col.php b/database/migrations/2017_06_04_060012_comments_add_active_col.php deleted file mode 100644 index 3c6dd1f33..000000000 --- a/database/migrations/2017_06_04_060012_comments_add_active_col.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -use Illuminate\Support\Facades\Schema; -use Illuminate\Database\Schema\Blueprint; -use Illuminate\Database\Migrations\Migration; - -class CommentsAddActiveCol extends Migration -{ - /** - * Run the migrations. - * - * @return void - */ - public function up() - { - Schema::table('comments', function (Blueprint $table) { - // add column active - $table->boolean('active')->default(true); - $table->dropIndex('comments_page_id_parent_id_index'); - $table->index(['page_id']); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('comments', function (Blueprint $table) { - // reversing the schema - $table->dropIndex('comments_page_id_index'); - $table->dropColumn('active'); - $table->index(['page_id', 'parent_id']); - }); - } -} diff --git a/database/migrations/2017_08_01_130541_create_comments_table.php b/database/migrations/2017_08_01_130541_create_comments_table.php new file mode 100644 index 000000000..bfb7eecbf --- /dev/null +++ b/database/migrations/2017_08_01_130541_create_comments_table.php @@ -0,0 +1,66 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateCommentsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('comments', function (Blueprint $table) { + $table->increments('id')->unsigned(); + $table->integer('page_id')->unsigned(); + $table->longText('text')->nullable(); + $table->longText('html')->nullable(); + $table->integer('parent_id')->unsigned()->nullable(); + $table->integer('created_by')->unsigned(); + $table->integer('updated_by')->unsigned()->nullable(); + $table->boolean('active')->default(true); + + $table->index(['page_id']); + $table->timestamps(); + + // Assign new comment permissions to admin role + $adminRoleId = DB::table('roles')->where('system_name', '=', 'admin')->first()->id; + // Create & attach new entity permissions + $ops = ['Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; + $entity = 'Comment'; + foreach ($ops as $op) { + $permissionId = DB::table('role_permissions')->insertGetId([ + 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), + 'display_name' => $op . ' ' . $entity . 's', + 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() + ]); + DB::table('permission_role')->insert([ + 'role_id' => $adminRoleId, + 'permission_id' => $permissionId + ]); + } + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('comments'); + // Delete comment role permissions + $ops = ['Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; + $entity = 'Comment'; + foreach ($ops as $op) { + $permName = strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)); + DB::table('role_permissions')->where('name', '=', $permName)->delete(); + } + } +} diff --git a/version b/version index 1365ed940..de0ad7791 100644 --- a/version +++ b/version @@ -1 +1 @@ -v0.17-dev +v0.18-dev From 5e5928a8a6092d5250ebaf027796d56d2f37e609 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sun, 6 Aug 2017 18:01:49 +0100 Subject: [PATCH 69/83] Added vanilla JS component system --- package.json | 1 + resources/assets/js/components/dropdown.js | 48 ++++++++++++++++++++++ resources/assets/js/components/index.js | 21 ++++++++++ resources/assets/js/directives.js | 39 ------------------ resources/assets/js/global.js | 2 + 5 files changed, 72 insertions(+), 39 deletions(-) create mode 100644 resources/assets/js/components/dropdown.js create mode 100644 resources/assets/js/components/index.js diff --git a/package.json b/package.json index 429572882..3d3b9c11c 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "angular-sanitize": "^1.5.5", "angular-ui-sortable": "^0.17.0", "axios": "^0.16.1", + "babel-polyfill": "^6.23.0", "babel-preset-es2015": "^6.24.1", "clipboard": "^1.5.16", "codemirror": "^5.26.0", diff --git a/resources/assets/js/components/dropdown.js b/resources/assets/js/components/dropdown.js new file mode 100644 index 000000000..0401efce0 --- /dev/null +++ b/resources/assets/js/components/dropdown.js @@ -0,0 +1,48 @@ +/** + * Dropdown + * Provides some simple logic to create simple dropdown menus. + */ +class DropDown { + + constructor(elem) { + this.container = elem; + this.menu = elem.querySelector('ul'); + this.toggle = elem.querySelector('[dropdown-toggle]'); + this.setupListeners(); + } + + show() { + this.menu.style.display = 'block'; + this.menu.classList.add('anim', 'menuIn'); + this.container.addEventListener('mouseleave', this.hide.bind(this)); + + // Focus on first input if existing + let input = this.menu.querySelector('input'); + if (input !== null) input.focus(); + } + + hide() { + this.menu.style.display = 'none'; + this.menu.classList.remove('anim', 'menuIn'); + } + + setupListeners() { + // Hide menu on option click + this.container.addEventListener('click', event => { + let possibleChildren = Array.from(this.menu.querySelectorAll('a')); + if (possibleChildren.indexOf(event.target) !== -1) this.hide(); + }); + // Show dropdown on toggle click + this.toggle.addEventListener('click', this.show.bind(this)); + // Hide menu on enter press + this.container.addEventListener('keypress', event => { + if (event.keyCode !== 13) return true; + event.preventDefault(); + this.hide(); + return false; + }); + } + +} + +module.exports = DropDown; \ No newline at end of file diff --git a/resources/assets/js/components/index.js b/resources/assets/js/components/index.js new file mode 100644 index 000000000..983b25d8f --- /dev/null +++ b/resources/assets/js/components/index.js @@ -0,0 +1,21 @@ + +let componentMapping = { + 'dropdown': require('./dropdown'), +}; + +window.components = {}; + +let componentNames = Object.keys(componentMapping); + +for (let i = 0, len = componentNames.length; i < len; i++) { + let name = componentNames[i]; + let elems = document.querySelectorAll(`[${name}]`); + if (elems.length === 0) continue; + + let component = componentMapping[name]; + if (typeof window.components[name] === "undefined") window.components[name] = []; + for (let j = 0, jLen = elems.length; j < jLen; j++) { + let instance = new component(elems[j]); + window.components[name].push(instance); + } +} \ No newline at end of file diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index d8745462d..cd9cc0283 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -114,45 +114,6 @@ module.exports = function (ngApp, events) { }; }]); - /** - * Dropdown - * Provides some simple logic to create small dropdown menus - */ - ngApp.directive('dropdown', [function () { - return { - restrict: 'A', - link: function (scope, element, attrs) { - const menu = element.find('ul'); - - function hide() { - menu.hide(); - menu.removeClass('anim menuIn'); - } - - function show() { - menu.show().addClass('anim menuIn'); - element.mouseleave(hide); - - // Focus on input if exist in dropdown and hide on enter press - let inputs = menu.find('input'); - if (inputs.length > 0) inputs.first().focus(); - } - - // Hide menu on option click - element.on('click', '> ul a', hide); - // Show dropdown on toggle click. - element.find('[dropdown-toggle]').on('click', show); - // Hide menu on enter press in inputs - element.on('keypress', 'input', event => { - if (event.keyCode !== 13) return true; - event.preventDefault(); - hide(); - return false; - }); - } - }; - }]); - /** * TinyMCE * An angular wrapper around the tinyMCE editor. diff --git a/resources/assets/js/global.js b/resources/assets/js/global.js index 2ef062a5b..979310777 100644 --- a/resources/assets/js/global.js +++ b/resources/assets/js/global.js @@ -1,4 +1,5 @@ "use strict"; +require("babel-polyfill"); // Url retrieval function window.baseUrl = function(path) { @@ -22,6 +23,7 @@ window.$http = axiosInstance; Vue.prototype.$http = axiosInstance; require("./vues/vues"); +require("./components"); // AngularJS - Create application and load components From 2a069880cd8ebe6b821fd37a6087b34a6488966b Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sun, 6 Aug 2017 21:08:03 +0100 Subject: [PATCH 70/83] Converted jQuery bits into raw JS components --- .../assets/js/components/back-top-top.js | 53 ++++++++++++ .../assets/js/components/chapter-toggle.js | 67 +++++++++++++++ .../assets/js/components/expand-toggle.js | 65 +++++++++++++++ resources/assets/js/components/index.js | 5 ++ .../assets/js/components/notification.js | 40 +++++++++ resources/assets/js/components/overlay.js | 39 +++++++++ resources/assets/js/directives.js | 1 + resources/assets/js/global.js | 81 +------------------ resources/assets/sass/_animations.scss | 49 ++--------- resources/assets/sass/_components.scss | 63 ++++++++++++++- resources/assets/sass/_lists.scss | 27 ++----- resources/assets/sass/styles.scss | 40 +-------- resources/views/base.blade.php | 2 +- resources/views/books/list-item.blade.php | 12 +-- resources/views/chapters/list-item.blade.php | 16 ++-- .../views/components/code-editor.blade.php | 4 +- .../entity-selector-popup.blade.php | 4 +- .../views/components/image-manager.blade.php | 4 +- resources/views/home.blade.php | 2 +- resources/views/pages/list-item.blade.php | 12 +-- .../views/pages/sidebar-tree-list.blade.php | 2 +- .../views/partials/custom-styles.blade.php | 2 +- .../views/partials/notifications.blade.php | 6 +- 23 files changed, 387 insertions(+), 209 deletions(-) create mode 100644 resources/assets/js/components/back-top-top.js create mode 100644 resources/assets/js/components/chapter-toggle.js create mode 100644 resources/assets/js/components/expand-toggle.js create mode 100644 resources/assets/js/components/notification.js create mode 100644 resources/assets/js/components/overlay.js diff --git a/resources/assets/js/components/back-top-top.js b/resources/assets/js/components/back-top-top.js new file mode 100644 index 000000000..5fa9b3436 --- /dev/null +++ b/resources/assets/js/components/back-top-top.js @@ -0,0 +1,53 @@ + +class BackToTop { + + constructor(elem) { + this.elem = elem; + this.targetElem = document.getElementById('header'); + this.showing = false; + this.breakPoint = 1200; + this.elem.addEventListener('click', this.scrollToTop.bind(this)); + window.addEventListener('scroll', this.onPageScroll.bind(this)); + } + + onPageScroll() { + let scrollTopPos = document.documentElement.scrollTop || document.body.scrollTop || 0; + if (!this.showing && scrollTopPos > this.breakPoint) { + this.elem.style.display = 'block'; + this.showing = true; + setTimeout(() => { + this.elem.style.opacity = 0.4; + }, 1); + } else if (this.showing && scrollTopPos < this.breakPoint) { + this.elem.style.opacity = 0; + this.showing = false; + setTimeout(() => { + this.elem.style.display = 'none'; + }, 500); + } + } + + scrollToTop() { + let targetTop = this.targetElem.getBoundingClientRect().top; + let scrollElem = document.documentElement.scrollTop ? document.documentElement : document.body; + let duration = 300; + let start = Date.now(); + let scrollStart = this.targetElem.getBoundingClientRect().top; + + function setPos() { + let percentComplete = (1-((Date.now() - start) / duration)); + let target = Math.abs(percentComplete * scrollStart); + if (percentComplete > 0) { + scrollElem.scrollTop = target; + requestAnimationFrame(setPos.bind(this)); + } else { + scrollElem.scrollTop = targetTop; + } + } + + requestAnimationFrame(setPos.bind(this)); + } + +} + +module.exports = BackToTop; \ No newline at end of file diff --git a/resources/assets/js/components/chapter-toggle.js b/resources/assets/js/components/chapter-toggle.js new file mode 100644 index 000000000..ad373a668 --- /dev/null +++ b/resources/assets/js/components/chapter-toggle.js @@ -0,0 +1,67 @@ + +class ChapterToggle { + + constructor(elem) { + this.elem = elem; + this.isOpen = elem.classList.contains('open'); + elem.addEventListener('click', this.click.bind(this)); + } + + open() { + let list = this.elem.parentNode.querySelector('.inset-list'); + + this.elem.classList.add('open'); + list.style.display = 'block'; + list.style.height = ''; + let height = list.getBoundingClientRect().height; + list.style.height = '0px'; + list.style.overflow = 'hidden'; + list.style.transition = 'height ease-in-out 240ms'; + + let transitionEndBound = onTransitionEnd.bind(this); + function onTransitionEnd() { + list.style.overflow = ''; + list.style.height = ''; + list.style.transition = ''; + list.removeEventListener('transitionend', transitionEndBound); + } + + setTimeout(() => { + list.style.height = `${height}px`; + list.addEventListener('transitionend', transitionEndBound) + }, 1); + } + + close() { + let list = this.elem.parentNode.querySelector('.inset-list'); + + this.elem.classList.remove('open'); + list.style.display = 'block'; + list.style.height = list.getBoundingClientRect().height + 'px'; + list.style.overflow = 'hidden'; + list.style.transition = 'height ease-in-out 240ms'; + + let transitionEndBound = onTransitionEnd.bind(this); + function onTransitionEnd() { + list.style.overflow = ''; + list.style.height = ''; + list.style.transition = ''; + list.style.display = 'none'; + list.removeEventListener('transitionend', transitionEndBound); + } + + setTimeout(() => { + list.style.height = `0px`; + list.addEventListener('transitionend', transitionEndBound) + }, 1); + } + + click(event) { + event.preventDefault(); + this.isOpen ? this.close() : this.open(); + this.isOpen = !this.isOpen; + } + +} + +module.exports = ChapterToggle; \ No newline at end of file diff --git a/resources/assets/js/components/expand-toggle.js b/resources/assets/js/components/expand-toggle.js new file mode 100644 index 000000000..61d9f54b7 --- /dev/null +++ b/resources/assets/js/components/expand-toggle.js @@ -0,0 +1,65 @@ + +class ExpandToggle { + + constructor(elem) { + this.elem = elem; + this.isOpen = false; + this.selector = elem.getAttribute('expand-toggle'); + elem.addEventListener('click', this.click.bind(this)); + } + + open(elemToToggle) { + elemToToggle.style.display = 'block'; + elemToToggle.style.height = ''; + let height = elemToToggle.getBoundingClientRect().height; + elemToToggle.style.height = '0px'; + elemToToggle.style.overflow = 'hidden'; + elemToToggle.style.transition = 'height ease-in-out 240ms'; + + let transitionEndBound = onTransitionEnd.bind(this); + function onTransitionEnd() { + elemToToggle.style.overflow = ''; + elemToToggle.style.height = ''; + elemToToggle.style.transition = ''; + elemToToggle.removeEventListener('transitionend', transitionEndBound); + } + + setTimeout(() => { + elemToToggle.style.height = `${height}px`; + elemToToggle.addEventListener('transitionend', transitionEndBound) + }, 1); + } + + close(elemToToggle) { + elemToToggle.style.display = 'block'; + elemToToggle.style.height = elemToToggle.getBoundingClientRect().height + 'px'; + elemToToggle.style.overflow = 'hidden'; + elemToToggle.style.transition = 'all ease-in-out 240ms'; + + let transitionEndBound = onTransitionEnd.bind(this); + function onTransitionEnd() { + elemToToggle.style.overflow = ''; + elemToToggle.style.height = ''; + elemToToggle.style.transition = ''; + elemToToggle.style.display = 'none'; + elemToToggle.removeEventListener('transitionend', transitionEndBound); + } + + setTimeout(() => { + elemToToggle.style.height = `0px`; + elemToToggle.addEventListener('transitionend', transitionEndBound) + }, 1); + } + + click(event) { + event.preventDefault(); + let matchingElems = document.querySelectorAll(this.selector); + for (let i = 0, len = matchingElems.length; i < len; i++) { + this.isOpen ? this.close(matchingElems[i]) : this.open(matchingElems[i]); + } + this.isOpen = !this.isOpen; + } + +} + +module.exports = ExpandToggle; \ No newline at end of file diff --git a/resources/assets/js/components/index.js b/resources/assets/js/components/index.js index 983b25d8f..c38e20aa2 100644 --- a/resources/assets/js/components/index.js +++ b/resources/assets/js/components/index.js @@ -1,6 +1,11 @@ let componentMapping = { 'dropdown': require('./dropdown'), + 'overlay': require('./overlay'), + 'back-to-top': require('./back-top-top'), + 'notification': require('./notification'), + 'chapter-toggle': require('./chapter-toggle'), + 'expand-toggle': require('./expand-toggle'), }; window.components = {}; diff --git a/resources/assets/js/components/notification.js b/resources/assets/js/components/notification.js new file mode 100644 index 000000000..4b809c935 --- /dev/null +++ b/resources/assets/js/components/notification.js @@ -0,0 +1,40 @@ + +class Notification { + + constructor(elem) { + this.elem = elem; + this.type = elem.getAttribute('notification'); + this.textElem = elem.querySelector('span'); + this.autohide = this.elem.hasAttribute('data-autohide'); + window.Events.listen(this.type, text => { + console.log('show', text); + this.show(text); + }); + elem.addEventListener('click', this.hide.bind(this)); + if (elem.hasAttribute('data-show')) this.show(this.textElem.textContent); + } + + show(textToShow = '') { + this.textElem.textContent = textToShow; + this.elem.style.display = 'block'; + setTimeout(() => { + this.elem.classList.add('showing'); + }, 1); + + if (this.autohide) setTimeout(this.hide.bind(this), 2000); + } + + hide() { + this.elem.classList.remove('showing'); + + function transitionEnd() { + this.elem.style.display = 'none'; + this.elem.removeEventListener('transitionend', transitionEnd); + } + + this.elem.addEventListener('transitionend', transitionEnd.bind(this)); + } + +} + +module.exports = Notification; \ No newline at end of file diff --git a/resources/assets/js/components/overlay.js b/resources/assets/js/components/overlay.js new file mode 100644 index 000000000..6984928bd --- /dev/null +++ b/resources/assets/js/components/overlay.js @@ -0,0 +1,39 @@ + +class Overlay { + + constructor(elem) { + this.container = elem; + elem.addEventListener('click', event => { + if (event.target === elem) return this.hide(); + }); + let closeButtons = elem.querySelectorAll('.overlay-close'); + for (let i=0; i < closeButtons.length; i++) { + closeButtons[i].addEventListener('click', this.hide.bind(this)); + } + } + + toggle(show = true) { + let start = Date.now(); + let duration = 240; + + function setOpacity() { + let elapsedTime = (Date.now() - start); + let targetOpacity = show ? (elapsedTime / duration) : 1-(elapsedTime / duration); + this.container.style.opacity = targetOpacity; + if (elapsedTime > duration) { + this.container.style.display = show ? 'display' : 'none'; + this.container.style.opacity = ''; + } else { + requestAnimationFrame(setOpacity.bind(this)); + } + } + + requestAnimationFrame(setOpacity.bind(this)); + } + + hide() { this.toggle(false); } + show() { this.toggle(true); } + +} + +module.exports = Overlay; \ No newline at end of file diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index cd9cc0283..522dcacae 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -713,6 +713,7 @@ module.exports = function (ngApp, events) { function hide() { element.fadeOut(240); } + scope.hide = hide; // Listen to confirmation of entity selections (doubleclick) events.listen('entity-select-confirm', entity => { diff --git a/resources/assets/js/global.js b/resources/assets/js/global.js index 979310777..3879a4d4f 100644 --- a/resources/assets/js/global.js +++ b/resources/assets/js/global.js @@ -19,12 +19,8 @@ let axiosInstance = axios.create({ } }); window.$http = axiosInstance; - Vue.prototype.$http = axiosInstance; -require("./vues/vues"); -require("./components"); - // AngularJS - Create application and load components const angular = require("angular"); @@ -67,6 +63,9 @@ class EventManager { window.Events = new EventManager(); Vue.prototype.$events = window.Events; +require("./vues/vues"); +require("./components"); + // Load in angular specific items const Services = require('./services'); const Directives = require('./directives'); @@ -93,83 +92,11 @@ jQuery.expr[":"].contains = $.expr.createPseudo(function (arg) { }; }); -// Global jQuery Elements -let notifications = $('.notification'); -let successNotification = notifications.filter('.pos'); -let errorNotification = notifications.filter('.neg'); -let warningNotification = notifications.filter('.warning'); -// Notification Events -window.Events.listen('success', function (text) { - successNotification.hide(); - successNotification.find('span').text(text); - setTimeout(() => { - successNotification.show(); - }, 1); -}); -window.Events.listen('warning', function (text) { - warningNotification.find('span').text(text); - warningNotification.show(); -}); -window.Events.listen('error', function (text) { - errorNotification.find('span').text(text); - errorNotification.show(); -}); - -// Notification hiding -notifications.click(function () { - $(this).fadeOut(100); -}); - -// Chapter page list toggles -$('.chapter-toggle').click(function (e) { - e.preventDefault(); - $(this).toggleClass('open'); - $(this).closest('.chapter').find('.inset-list').slideToggle(180); -}); - -// Back to top button -$('#back-to-top').click(function() { - $('#header').smoothScrollTo(); -}); -let scrollTopShowing = false; -let scrollTop = document.getElementById('back-to-top'); -let scrollTopBreakpoint = 1200; -window.addEventListener('scroll', function() { - let scrollTopPos = document.documentElement.scrollTop || document.body.scrollTop || 0; - if (!scrollTopShowing && scrollTopPos > scrollTopBreakpoint) { - scrollTop.style.display = 'block'; - scrollTopShowing = true; - setTimeout(() => { - scrollTop.style.opacity = 0.4; - }, 1); - } else if (scrollTopShowing && scrollTopPos < scrollTopBreakpoint) { - scrollTop.style.opacity = 0; - scrollTopShowing = false; - setTimeout(() => { - scrollTop.style.display = 'none'; - }, 500); - } -}); - -// Common jQuery actions -$('[data-action="expand-entity-list-details"]').click(function() { - $('.entity-list.compact').find('p').not('.empty-text').slideToggle(240); -}); - -// Popup close -$('.popup-close').click(function() { - $(this).closest('.overlay').fadeOut(240); -}); -$('.overlay').click(function(event) { - if (!$(event.target).hasClass('overlay')) return; - $(this).fadeOut(240); -}); - // Detect IE for css if(navigator.userAgent.indexOf('MSIE')!==-1 || navigator.appVersion.indexOf('Trident/') > 0 || navigator.userAgent.indexOf('Safari') !== -1){ - $('body').addClass('flexbox-support'); + document.body.classList.add('flexbox-support'); } // Page specific items diff --git a/resources/assets/sass/_animations.scss b/resources/assets/sass/_animations.scss index 467399a66..015a23ab1 100644 --- a/resources/assets/sass/_animations.scss +++ b/resources/assets/sass/_animations.scss @@ -36,41 +36,12 @@ } } -.anim.notification { - transform: translate3d(580px, 0, 0); - animation-name: notification; - animation-duration: 3s; - animation-timing-function: ease-in-out; - animation-fill-mode: forwards; - &.stopped { - animation-name: notificationStopped; - } -} - -@keyframes notification { - 0% { - transform: translate3d(580px, 0, 0); - } - 10% { - transform: translate3d(0, 0, 0); - } - 90% { - transform: translate3d(0, 0, 0); - } - 100% { - transform: translate3d(580px, 0, 0); - } -} -@keyframes notificationStopped { - 0% { - transform: translate3d(580px, 0, 0); - } - 10% { - transform: translate3d(0, 0, 0); - } - 100% { - transform: translate3d(0, 0, 0); - } +.anim.menuIn { + transform-origin: 100% 0%; + animation-name: menuIn; + animation-duration: 120ms; + animation-delay: 0s; + animation-timing-function: cubic-bezier(.62, .28, .23, .99); } @keyframes menuIn { @@ -85,14 +56,6 @@ } } -.anim.menuIn { - transform-origin: 100% 0%; - animation-name: menuIn; - animation-duration: 120ms; - animation-delay: 0s; - animation-timing-function: cubic-bezier(.62, .28, .23, .99); -} - @keyframes loadingBob { 0% { transform: translate3d(0, 0, 0); diff --git a/resources/assets/sass/_components.scss b/resources/assets/sass/_components.scss index 12babae73..8092caa07 100644 --- a/resources/assets/sass/_components.scss +++ b/resources/assets/sass/_components.scss @@ -1,4 +1,65 @@ -.overlay { +// System wide notifications +[notification] { + position: fixed; + top: 0; + right: 0; + margin: $-xl*2 $-xl; + padding: $-l $-xl; + background-color: #EEE; + border-radius: 3px; + box-shadow: $bs-med; + z-index: 999999; + display: block; + cursor: pointer; + max-width: 480px; + transition: transform ease-in-out 360ms; + transform: translate3d(580px, 0, 0); + i, span { + display: table-cell; + } + i { + font-size: 2em; + padding-right: $-l; + } + span { + vertical-align: middle; + } + &.pos { + background-color: $positive; + color: #EEE; + } + &.neg { + background-color: $negative; + color: #EEE; + } + &.warning { + background-color: $secondary; + color: #EEE; + } + &.showing { + transform: translate3d(0, 0, 0); + } +} + +[chapter-toggle] { + cursor: pointer; + margin: 0; + transition: all ease-in-out 180ms; + user-select: none; + i.zmdi-caret-right { + transition: all ease-in-out 180ms; + transform: rotate(0deg); + transform-origin: 25% 50%; + } + &.open { + //margin-bottom: 0; + } + &.open i.zmdi-caret-right { + transform: rotate(90deg); + } +} + +[overlay] { background-color: rgba(0, 0, 0, 0.333); position: fixed; z-index: 95536; diff --git a/resources/assets/sass/_lists.scss b/resources/assets/sass/_lists.scss index 051268926..d08ccc9bb 100644 --- a/resources/assets/sass/_lists.scss +++ b/resources/assets/sass/_lists.scss @@ -9,7 +9,6 @@ .inset-list { display: none; overflow: hidden; - margin-bottom: $-l; } h5 { display: block; @@ -22,6 +21,9 @@ border-left-color: $color-page-draft; } } + .entity-list-item { + margin-bottom: $-m; + } hr { margin-top: 0; } @@ -51,23 +53,6 @@ margin-right: $-s; } } -.chapter-toggle { - cursor: pointer; - margin: 0 0 $-l 0; - transition: all ease-in-out 180ms; - user-select: none; - i.zmdi-caret-right { - transition: all ease-in-out 180ms; - transform: rotate(0deg); - transform-origin: 25% 50%; - } - &.open { - margin-bottom: 0; - } - &.open i.zmdi-caret-right { - transform: rotate(90deg); - } -} .sidebar-page-nav { $nav-indent: $-s; @@ -171,7 +156,7 @@ background-color: rgba($color-chapter, 0.12); } } - .chapter-toggle { + [chapter-toggle] { padding-left: $-s; } .list-item-chapter { @@ -336,8 +321,10 @@ ul.pagination { h4, a { line-height: 1.2; } - p { + .entity-item-snippet { display: none; + } + p { font-size: $fs-m * 0.8; padding-top: $-xs; margin: 0; diff --git a/resources/assets/sass/styles.scss b/resources/assets/sass/styles.scss index 3b279b8bd..e40430bd8 100644 --- a/resources/assets/sass/styles.scss +++ b/resources/assets/sass/styles.scss @@ -66,44 +66,6 @@ body.dragging, body.dragging * { } } -// System wide notifications -.notification { - position: fixed; - top: 0; - right: 0; - margin: $-xl*2 $-xl; - padding: $-l $-xl; - background-color: #EEE; - border-radius: 3px; - box-shadow: $bs-med; - z-index: 999999; - display: block; - cursor: pointer; - max-width: 480px; - i, span { - display: table-cell; - } - i { - font-size: 2em; - padding-right: $-l; - } - span { - vertical-align: middle; - } - &.pos { - background-color: $positive; - color: #EEE; - } - &.neg { - background-color: $negative; - color: #EEE; - } - &.warning { - background-color: $secondary; - color: #EEE; - } -} - // Loading icon $loadingSize: 10px; .loading-container { @@ -151,7 +113,7 @@ $loadingSize: 10px; // Back to top link $btt-size: 40px; -#back-to-top { +[back-to-top] { background-color: $primary; position: fixed; bottom: $-m; diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php index 95a9d72b0..b1cacf08c 100644 --- a/resources/views/base.blade.php +++ b/resources/views/base.blade.php @@ -77,7 +77,7 @@ @yield('content') </section> - <div id="back-to-top"> + <div back-to-top> <div class="inner"> <i class="zmdi zmdi-chevron-up"></i> <span>{{ trans('common.back_to_top') }}</span> </div> diff --git a/resources/views/books/list-item.blade.php b/resources/views/books/list-item.blade.php index 605841f7f..92d0f9e2d 100644 --- a/resources/views/books/list-item.blade.php +++ b/resources/views/books/list-item.blade.php @@ -1,8 +1,10 @@ <div class="book entity-list-item" data-entity-type="book" data-entity-id="{{$book->id}}"> <h4 class="text-book"><a class="text-book entity-list-item-link" href="{{$book->getUrl()}}"><i class="zmdi zmdi-book"></i><span class="entity-list-item-name">{{$book->name}}</span></a></h4> - @if(isset($book->searchSnippet)) - <p class="text-muted">{!! $book->searchSnippet !!}</p> - @else - <p class="text-muted">{{ $book->getExcerpt() }}</p> - @endif + <div class="entity-item-snippet"> + @if(isset($book->searchSnippet)) + <p class="text-muted">{!! $book->searchSnippet !!}</p> + @else + <p class="text-muted">{{ $book->getExcerpt() }}</p> + @endif + </div> </div> \ No newline at end of file diff --git a/resources/views/chapters/list-item.blade.php b/resources/views/chapters/list-item.blade.php index 1ae20b301..1572f0d9b 100644 --- a/resources/views/chapters/list-item.blade.php +++ b/resources/views/chapters/list-item.blade.php @@ -10,14 +10,18 @@ <i class="zmdi zmdi-collection-bookmark"></i><span class="entity-list-item-name">{{ $chapter->name }}</span> </a> </h4> - @if(isset($chapter->searchSnippet)) - <p class="text-muted">{!! $chapter->searchSnippet !!}</p> - @else - <p class="text-muted">{{ $chapter->getExcerpt() }}</p> - @endif + + <div class="entity-item-snippet"> + @if(isset($chapter->searchSnippet)) + <p class="text-muted">{!! $chapter->searchSnippet !!}</p> + @else + <p class="text-muted">{{ $chapter->getExcerpt() }}</p> + @endif + </div> + @if(!isset($hidePages) && count($chapter->pages) > 0) - <p class="text-muted chapter-toggle"><i class="zmdi zmdi-caret-right"></i> <i class="zmdi zmdi-file-text"></i> <span>{{ trans('entities.x_pages', ['count' => $chapter->pages->count()]) }}</span></p> + <p chapter-toggle class="text-muted"><i class="zmdi zmdi-caret-right"></i> <i class="zmdi zmdi-file-text"></i> <span>{{ trans('entities.x_pages', ['count' => $chapter->pages->count()]) }}</span></p> <div class="inset-list"> @foreach($chapter->pages as $page) <h5 class="@if($page->draft) draft @endif"><a href="{{ $page->getUrl() }}" class="text-page @if($page->draft) draft @endif"><i class="zmdi zmdi-file-text"></i>{{$page->name}}</a></h5> diff --git a/resources/views/components/code-editor.blade.php b/resources/views/components/code-editor.blade.php index 5a385ef49..5788bd7f7 100644 --- a/resources/views/components/code-editor.blade.php +++ b/resources/views/components/code-editor.blade.php @@ -1,10 +1,10 @@ <div id="code-editor"> - <div class="overlay" ref="overlay" v-cloak @click="hide()"> + <div overlay ref="overlay" v-cloak @click="hide()"> <div class="popup-body" @click.stop> <div class="popup-header primary-background"> <div class="popup-title">{{ trans('components.code_editor') }}</div> - <button class="popup-close neg corner-button button" @click="hide()">x</button> + <button class="overlay-close neg corner-button button" @click="hide()">x</button> </div> <div class="padded"> diff --git a/resources/views/components/entity-selector-popup.blade.php b/resources/views/components/entity-selector-popup.blade.php index 1c4d1fadb..39d25bfa6 100644 --- a/resources/views/components/entity-selector-popup.blade.php +++ b/resources/views/components/entity-selector-popup.blade.php @@ -1,9 +1,9 @@ <div id="entity-selector-wrap"> - <div class="overlay" entity-link-selector> + <div overlay entity-link-selector> <div class="popup-body small flex-child"> <div class="popup-header primary-background"> <div class="popup-title">{{ trans('entities.entity_select') }}</div> - <button type="button" class="corner-button neg button popup-close">x</button> + <button type="button" class="corner-button neg button overlay-close">x</button> </div> @include('components.entity-selector', ['name' => 'entity-selector']) <div class="popup-footer"> diff --git a/resources/views/components/image-manager.blade.php b/resources/views/components/image-manager.blade.php index 39f3bcd3c..05bf09799 100644 --- a/resources/views/components/image-manager.blade.php +++ b/resources/views/components/image-manager.blade.php @@ -1,10 +1,10 @@ <div id="image-manager" image-type="{{ $imageType }}" ng-controller="ImageManagerController" uploaded-to="{{ $uploaded_to or 0 }}"> - <div class="overlay" ng-cloak ng-click="hide()"> + <div overlay ng-cloak ng-click="hide()"> <div class="popup-body" ng-click="$event.stopPropagation()"> <div class="popup-header primary-background"> <div class="popup-title">{{ trans('components.image_select') }}</div> - <button class="popup-close neg corner-button button">x</button> + <button class="overlay-close neg corner-button button">x</button> </div> <div class="flex-fill image-manager-body"> diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 49cd2a75a..87c84ec1e 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -7,7 +7,7 @@ <div class="row"> <div class="col-sm-6 faded"> <div class="action-buttons text-left"> - <a data-action="expand-entity-list-details" class="text-primary text-button"><i class="zmdi zmdi-wrap-text"></i>{{ trans('common.toggle_details') }}</a> + <a expand-toggle=".entity-list.compact .entity-item-snippet" class="text-primary text-button"><i class="zmdi zmdi-wrap-text"></i>{{ trans('common.toggle_details') }}</a> </div> </div> </div> diff --git a/resources/views/pages/list-item.blade.php b/resources/views/pages/list-item.blade.php index f440a52f6..593c2fc3c 100644 --- a/resources/views/pages/list-item.blade.php +++ b/resources/views/pages/list-item.blade.php @@ -15,11 +15,13 @@ <a href="{{ $page->getUrl() }}" class="text-page entity-list-item-link"><i class="zmdi zmdi-file-text"></i><span class="entity-list-item-name">{{ $page->name }}</span></a> </h4> - @if(isset($page->searchSnippet)) - <p class="text-muted">{!! $page->searchSnippet !!}</p> - @else - <p class="text-muted">{{ $page->getExcerpt() }}</p> - @endif + <div class="entity-item-snippet"> + @if(isset($page->searchSnippet)) + <p class="text-muted">{!! $page->searchSnippet !!}</p> + @else + <p class="text-muted">{{ $page->getExcerpt() }}</p> + @endif + </div> @if(isset($style) && $style === 'detailed') <div class="row meta text-muted text-small"> diff --git a/resources/views/pages/sidebar-tree-list.blade.php b/resources/views/pages/sidebar-tree-list.blade.php index 0a10987d6..90737740c 100644 --- a/resources/views/pages/sidebar-tree-list.blade.php +++ b/resources/views/pages/sidebar-tree-list.blade.php @@ -51,7 +51,7 @@ </a> @if($bookChild->isA('chapter') && count($bookChild->pages) > 0) - <p class="text-muted chapter-toggle @if($bookChild->matchesOrContains($current)) open @endif"> + <p chapter-toggle class="text-muted @if($bookChild->matchesOrContains($current)) open @endif"> <i class="zmdi zmdi-caret-right"></i> <i class="zmdi zmdi-file-text"></i> <span>{{ trans('entities.x_pages', ['count' => $bookChild->pages->count()]) }}</span> </p> <ul class="menu sub-menu inset-list @if($bookChild->matchesOrContains($current)) open @endif"> diff --git a/resources/views/partials/custom-styles.blade.php b/resources/views/partials/custom-styles.blade.php index 62bcc881f..c13051df4 100644 --- a/resources/views/partials/custom-styles.blade.php +++ b/resources/views/partials/custom-styles.blade.php @@ -1,5 +1,5 @@ <style id="custom-styles" data-color="{{ setting('app-color') }}" data-color-light="{{ setting('app-color-light') }}"> - header, #back-to-top, .primary-background { + header, [back-to-top], .primary-background { background-color: {{ setting('app-color') }} !important; } .faded-small, .primary-background-light { diff --git a/resources/views/partials/notifications.blade.php b/resources/views/partials/notifications.blade.php index c079080db..215aee3ed 100644 --- a/resources/views/partials/notifications.blade.php +++ b/resources/views/partials/notifications.blade.php @@ -1,12 +1,12 @@ -<div class="notification anim pos" @if(!session()->has('success')) style="display:none;" @endif> +<div notification="success" data-autohide class="pos" @if(session()->has('success')) data-show @endif> <i class="zmdi zmdi-check-circle"></i> <span>{!! nl2br(htmlentities(session()->get('success'))) !!}</span> </div> -<div class="notification anim warning stopped" @if(!session()->has('warning')) style="display:none;" @endif> +<div notification="warning" class="warning" @if(session()->has('warning')) data-show @endif> <i class="zmdi zmdi-info"></i> <span>{!! nl2br(htmlentities(session()->get('warning'))) !!}</span> </div> -<div class="notification anim neg stopped" @if(!session()->has('error')) style="display:none;" @endif> +<div notification="error" class="neg" @if(session()->has('error')) data-show @endif> <i class="zmdi zmdi-alert-circle"></i> <span>{!! nl2br(htmlentities(session()->get('error'))) !!}</span> </div> From 1ac7618bb14e69f1dccb44570d3971d60fde13f6 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sun, 6 Aug 2017 21:21:20 +0100 Subject: [PATCH 71/83] Updated clipboard lib reference and version used --- package.json | 2 +- readme.md | 2 +- resources/assets/js/pages/page-show.js | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 3d3b9c11c..1ae0e7f68 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "axios": "^0.16.1", "babel-polyfill": "^6.23.0", "babel-preset-es2015": "^6.24.1", - "clipboard": "^1.5.16", + "clipboard": "^1.7.1", "codemirror": "^5.26.0", "dropzone": "^4.0.1", "gulp-util": "^3.0.8", diff --git a/readme.md b/readme.md index 6067fbb94..5d099ad5f 100644 --- a/readme.md +++ b/readme.md @@ -79,7 +79,7 @@ These are the great open-source projects used to help build BookStack: * [jQuery Sortable](https://johnny.github.io/jquery-sortable/) * [Material Design Iconic Font](http://zavoloklom.github.io/material-design-iconic-font/icons.html) * [Dropzone.js](http://www.dropzonejs.com/) -* [ZeroClipboard](http://zeroclipboard.org/) +* [clipboard.js](https://clipboardjs.com/) * [TinyColorPicker](http://www.dematte.at/tinyColorPicker/index.html) * [markdown-it](https://github.com/markdown-it/markdown-it) and [markdown-it-task-lists](https://github.com/revin/markdown-it-task-lists) * [Moment.js](http://momentjs.com/) diff --git a/resources/assets/js/pages/page-show.js b/resources/assets/js/pages/page-show.js index 020229d2f..7754840af 100644 --- a/resources/assets/js/pages/page-show.js +++ b/resources/assets/js/pages/page-show.js @@ -1,5 +1,3 @@ -"use strict"; -// Configure ZeroClipboard const Clipboard = require("clipboard"); const Code = require('../code'); From a59d73de7b8b5f00d647b4eefdafd7de08103fa4 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Mon, 7 Aug 2017 19:32:31 +0100 Subject: [PATCH 72/83] Fixed bug causing image manager popup not to show --- resources/assets/js/components/overlay.js | 2 +- resources/assets/js/controllers.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/assets/js/components/overlay.js b/resources/assets/js/components/overlay.js index 6984928bd..6e7a598ac 100644 --- a/resources/assets/js/components/overlay.js +++ b/resources/assets/js/components/overlay.js @@ -21,7 +21,7 @@ class Overlay { let targetOpacity = show ? (elapsedTime / duration) : 1-(elapsedTime / duration); this.container.style.opacity = targetOpacity; if (elapsedTime > duration) { - this.container.style.display = show ? 'display' : 'none'; + this.container.style.display = show ? 'flex' : 'none'; this.container.style.opacity = ''; } else { requestAnimationFrame(setOpacity.bind(this)); diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index e1d838bb6..4acb40b35 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -113,7 +113,7 @@ module.exports = function (ngApp, events) { function show(doneCallback) { callback = doneCallback; $scope.showing = true; - $('#image-manager').find('.overlay').css('display', 'flex').hide().fadeIn(240); + $('#image-manager').find('[overlay]').css('display', 'flex').hide().fadeIn(240); // Get initial images if they have not yet been loaded in. if (!dataLoaded) { fetchData(); @@ -136,7 +136,7 @@ module.exports = function (ngApp, events) { */ $scope.hide = function () { $scope.showing = false; - $('#image-manager').find('.overlay').fadeOut(240); + $('#image-manager').find('[overlay]').fadeOut(240); }; let baseUrl = window.baseUrl('/images/' + $scope.imageType + '/all/'); From ab07f7df6cc4b60768d385064a970d05db8234eb Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Wed, 9 Aug 2017 21:33:00 +0100 Subject: [PATCH 73/83] Converted image manager into vue component --- resources/assets/js/components/index.js | 2 + .../assets/js/components/notification.js | 15 +- resources/assets/js/controllers.js | 250 ------------------ resources/assets/js/directives.js | 2 +- resources/assets/js/global.js | 2 - resources/assets/js/pages/page-form.js | 4 +- resources/assets/js/services.js | 12 - .../assets/js/vues/components/dropzone.js | 60 +++++ resources/assets/js/vues/image-manager.js | 182 +++++++++++++ resources/assets/js/vues/vues.js | 3 +- .../views/components/image-manager.blade.php | 62 +++-- 11 files changed, 287 insertions(+), 307 deletions(-) delete mode 100644 resources/assets/js/services.js create mode 100644 resources/assets/js/vues/components/dropzone.js create mode 100644 resources/assets/js/vues/image-manager.js diff --git a/resources/assets/js/components/index.js b/resources/assets/js/components/index.js index c38e20aa2..43466a0d9 100644 --- a/resources/assets/js/components/index.js +++ b/resources/assets/js/components/index.js @@ -21,6 +21,8 @@ for (let i = 0, len = componentNames.length; i < len; i++) { if (typeof window.components[name] === "undefined") window.components[name] = []; for (let j = 0, jLen = elems.length; j < jLen; j++) { let instance = new component(elems[j]); + if (typeof elems[j].components === 'undefined') elems[j].components = {}; + elems[j].components[name] = instance; window.components[name].push(instance); } } \ No newline at end of file diff --git a/resources/assets/js/components/notification.js b/resources/assets/js/components/notification.js index 4b809c935..1a9819702 100644 --- a/resources/assets/js/components/notification.js +++ b/resources/assets/js/components/notification.js @@ -7,14 +7,16 @@ class Notification { this.textElem = elem.querySelector('span'); this.autohide = this.elem.hasAttribute('data-autohide'); window.Events.listen(this.type, text => { - console.log('show', text); this.show(text); }); elem.addEventListener('click', this.hide.bind(this)); if (elem.hasAttribute('data-show')) this.show(this.textElem.textContent); + + this.hideCleanup = this.hideCleanup.bind(this); } show(textToShow = '') { + this.elem.removeEventListener('transitionend', this.hideCleanup); this.textElem.textContent = textToShow; this.elem.style.display = 'block'; setTimeout(() => { @@ -26,13 +28,12 @@ class Notification { hide() { this.elem.classList.remove('showing'); + this.elem.addEventListener('transitionend', this.hideCleanup); + } - function transitionEnd() { - this.elem.style.display = 'none'; - this.elem.removeEventListener('transitionend', transitionEnd); - } - - this.elem.addEventListener('transitionend', transitionEnd.bind(this)); + hideCleanup() { + this.elem.style.display = 'none'; + this.elem.removeEventListener('transitionend', this.hideCleanup); } } diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 4acb40b35..de3ce81c6 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -8,256 +8,6 @@ moment.locale('en-gb'); module.exports = function (ngApp, events) { - ngApp.controller('ImageManagerController', ['$scope', '$attrs', '$http', '$timeout', 'imageManagerService', - function ($scope, $attrs, $http, $timeout, imageManagerService) { - - $scope.images = []; - $scope.imageType = $attrs.imageType; - $scope.selectedImage = false; - $scope.dependantPages = false; - $scope.showing = false; - $scope.hasMore = false; - $scope.imageUpdateSuccess = false; - $scope.imageDeleteSuccess = false; - $scope.uploadedTo = $attrs.uploadedTo; - $scope.view = 'all'; - - $scope.searching = false; - $scope.searchTerm = ''; - - let page = 0; - let previousClickTime = 0; - let previousClickImage = 0; - let dataLoaded = false; - let callback = false; - - let preSearchImages = []; - let preSearchHasMore = false; - - /** - * Used by dropzone to get the endpoint to upload to. - * @returns {string} - */ - $scope.getUploadUrl = function () { - return window.baseUrl('/images/' + $scope.imageType + '/upload'); - }; - - /** - * Cancel the current search operation. - */ - function cancelSearch() { - $scope.searching = false; - $scope.searchTerm = ''; - $scope.images = preSearchImages; - $scope.hasMore = preSearchHasMore; - } - $scope.cancelSearch = cancelSearch; - - - /** - * Runs on image upload, Adds an image to local list of images - * and shows a success message to the user. - * @param file - * @param data - */ - $scope.uploadSuccess = function (file, data) { - $scope.$apply(() => { - $scope.images.unshift(data); - }); - events.emit('success', trans('components.image_upload_success')); - }; - - /** - * Runs the callback and hides the image manager. - * @param returnData - */ - function callbackAndHide(returnData) { - if (callback) callback(returnData); - $scope.hide(); - } - - /** - * Image select action. Checks if a double-click was fired. - * @param image - */ - $scope.imageSelect = function (image) { - let dblClickTime = 300; - let currentTime = Date.now(); - let timeDiff = currentTime - previousClickTime; - - if (timeDiff < dblClickTime && image.id === previousClickImage) { - // If double click - callbackAndHide(image); - } else { - // If single - $scope.selectedImage = image; - $scope.dependantPages = false; - } - previousClickTime = currentTime; - previousClickImage = image.id; - }; - - /** - * Action that runs when the 'Select image' button is clicked. - * Runs the callback and hides the image manager. - */ - $scope.selectButtonClick = function () { - callbackAndHide($scope.selectedImage); - }; - - /** - * Show the image manager. - * Takes a callback to execute later on. - * @param doneCallback - */ - function show(doneCallback) { - callback = doneCallback; - $scope.showing = true; - $('#image-manager').find('[overlay]').css('display', 'flex').hide().fadeIn(240); - // Get initial images if they have not yet been loaded in. - if (!dataLoaded) { - fetchData(); - dataLoaded = true; - } - } - - // Connects up the image manger so it can be used externally - // such as from TinyMCE. - imageManagerService.show = show; - imageManagerService.showExternal = function (doneCallback) { - $scope.$apply(() => { - show(doneCallback); - }); - }; - window.ImageManager = imageManagerService; - - /** - * Hide the image manager - */ - $scope.hide = function () { - $scope.showing = false; - $('#image-manager').find('[overlay]').fadeOut(240); - }; - - let baseUrl = window.baseUrl('/images/' + $scope.imageType + '/all/'); - - /** - * Fetch the list image data from the server. - */ - function fetchData() { - let url = baseUrl + page + '?'; - let components = {}; - if ($scope.uploadedTo) components['page_id'] = $scope.uploadedTo; - if ($scope.searching) components['term'] = $scope.searchTerm; - - - url += Object.keys(components).map((key) => { - return key + '=' + encodeURIComponent(components[key]); - }).join('&'); - - $http.get(url).then((response) => { - $scope.images = $scope.images.concat(response.data.images); - $scope.hasMore = response.data.hasMore; - page++; - }); - } - $scope.fetchData = fetchData; - - /** - * Start a search operation - */ - $scope.searchImages = function() { - - if ($scope.searchTerm === '') { - cancelSearch(); - return; - } - - if (!$scope.searching) { - preSearchImages = $scope.images; - preSearchHasMore = $scope.hasMore; - } - - $scope.searching = true; - $scope.images = []; - $scope.hasMore = false; - page = 0; - baseUrl = window.baseUrl('/images/' + $scope.imageType + '/search/'); - fetchData(); - }; - - /** - * Set the current image listing view. - * @param viewName - */ - $scope.setView = function(viewName) { - cancelSearch(); - $scope.images = []; - $scope.hasMore = false; - page = 0; - $scope.view = viewName; - baseUrl = window.baseUrl('/images/' + $scope.imageType + '/' + viewName + '/'); - fetchData(); - }; - - /** - * Save the details of an image. - * @param event - */ - $scope.saveImageDetails = function (event) { - event.preventDefault(); - let url = window.baseUrl('/images/update/' + $scope.selectedImage.id); - $http.put(url, this.selectedImage).then(response => { - events.emit('success', trans('components.image_update_success')); - }, (response) => { - if (response.status === 422) { - let errors = response.data; - let message = ''; - Object.keys(errors).forEach((key) => { - message += errors[key].join('\n'); - }); - events.emit('error', message); - } else if (response.status === 403) { - events.emit('error', response.data.error); - } - }); - }; - - /** - * Delete an image from system and notify of success. - * Checks if it should force delete when an image - * has dependant pages. - * @param event - */ - $scope.deleteImage = function (event) { - event.preventDefault(); - let force = $scope.dependantPages !== false; - let url = window.baseUrl('/images/' + $scope.selectedImage.id); - if (force) url += '?force=true'; - $http.delete(url).then((response) => { - $scope.images.splice($scope.images.indexOf($scope.selectedImage), 1); - $scope.selectedImage = false; - events.emit('success', trans('components.image_delete_success')); - }, (response) => { - // Pages failure - if (response.status === 400) { - $scope.dependantPages = response.data; - } else if (response.status === 403) { - events.emit('error', response.data.error); - } - }); - }; - - /** - * Simple date creator used to properly format dates. - * @param stringDate - * @returns {Date} - */ - $scope.getDate = function (stringDate) { - return new Date(stringDate); - }; - - }]); ngApp.controller('PageEditController', ['$scope', '$http', '$attrs', '$interval', '$timeout', '$sce', function ($scope, $http, $attrs, $interval, $timeout, $sce) { diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 522dcacae..a156c961c 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -383,7 +383,7 @@ module.exports = function (ngApp, events) { // Show the image manager and handle image insertion function showImageManager() { let cursorPos = cm.getCursor('from'); - window.ImageManager.showExternal(image => { + window.ImageManager.show(image => { let selectedText = cm.getSelection(); let newText = ""; cm.focus(); diff --git a/resources/assets/js/global.js b/resources/assets/js/global.js index 3879a4d4f..28d1e3b0c 100644 --- a/resources/assets/js/global.js +++ b/resources/assets/js/global.js @@ -67,10 +67,8 @@ require("./vues/vues"); require("./components"); // Load in angular specific items -const Services = require('./services'); const Directives = require('./directives'); const Controllers = require('./controllers'); -Services(ngApp, window.Events); Directives(ngApp, window.Events); Controllers(ngApp, window.Events); diff --git a/resources/assets/js/pages/page-form.js b/resources/assets/js/pages/page-form.js index 4f4c1fbe0..08e4c0c34 100644 --- a/resources/assets/js/pages/page-form.js +++ b/resources/assets/js/pages/page-form.js @@ -283,7 +283,7 @@ module.exports = function() { if (type === 'image') { // Show image manager - window.ImageManager.showExternal(function (image) { + window.ImageManager.show(function (image) { // Set popover link input to image url then fire change event // to ensure the new value sticks @@ -365,7 +365,7 @@ module.exports = function() { icon: 'image', tooltip: 'Insert an image', onclick: function () { - window.ImageManager.showExternal(function (image) { + window.ImageManager.show(function (image) { let html = `<a href="${image.url}" target="_blank">`; html += `<img src="${image.thumbs.display}" alt="${image.name}">`; html += '</a>'; diff --git a/resources/assets/js/services.js b/resources/assets/js/services.js deleted file mode 100644 index cd2759c54..000000000 --- a/resources/assets/js/services.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; - -module.exports = function(ngApp, events) { - - ngApp.factory('imageManagerService', function() { - return { - show: false, - showExternal: false - }; - }); - -}; \ No newline at end of file diff --git a/resources/assets/js/vues/components/dropzone.js b/resources/assets/js/vues/components/dropzone.js new file mode 100644 index 000000000..0f31bd579 --- /dev/null +++ b/resources/assets/js/vues/components/dropzone.js @@ -0,0 +1,60 @@ +const DropZone = require("dropzone"); + +const template = ` + <div class="dropzone-container"> + <div class="dz-message">{{placeholder}}</div> + </div> +`; + +const props = ['placeholder', 'uploadUrl', 'uploadedTo']; + +// TODO - Remove jQuery usage +function mounted() { + let container = this.$el; + let _this = this; + new DropZone(container, { + url: function() { + return _this.uploadUrl; + }, + init: function () { + let dz = this; + + dz.on('sending', function (file, xhr, data) { + let token = window.document.querySelector('meta[name=token]').getAttribute('content'); + data.append('_token', token); + let uploadedTo = typeof _this.uploadedTo === 'undefined' ? 0 : _this.uploadedTo; + data.append('uploaded_to', uploadedTo); + }); + + dz.on('success', function (file, data) { + _this.$emit('success', {file, data}); + $(file.previewElement).fadeOut(400, function () { + dz.removeFile(file); + }); + }); + + dz.on('error', function (file, errorMessage, xhr) { + _this.$emit('error', {file, errorMessage, xhr}); + console.log(errorMessage); + console.log(xhr); + function setMessage(message) { + $(file.previewElement).find('[data-dz-errormessage]').text(message); + } + + if (xhr.status === 413) setMessage(trans('errors.server_upload_limit')); + if (errorMessage.file) setMessage(errorMessage.file[0]); + }); + } + }); +} + +function data() { + return {} +} + +module.exports = { + template, + props, + mounted, + data, +}; \ No newline at end of file diff --git a/resources/assets/js/vues/image-manager.js b/resources/assets/js/vues/image-manager.js new file mode 100644 index 000000000..9e3fa013e --- /dev/null +++ b/resources/assets/js/vues/image-manager.js @@ -0,0 +1,182 @@ +const dropzone = require('./components/dropzone'); + +let page = 0; +let previousClickTime = 0; +let previousClickImage = 0; +let dataLoaded = false; +let callback = false; +let baseUrl = ''; + +let preSearchImages = []; +let preSearchHasMore = false; + +const data = { + images: [], + + imageType: false, + uploadedTo: false, + + selectedImage: false, + dependantPages: false, + showing: false, + view: 'all', + hasMore: false, + searching: false, + searchTerm: '', + + imageUpdateSuccess: false, + imageDeleteSuccess: false, +}; + +const methods = { + + show(providedCallback) { + callback = providedCallback; + this.showing = true; + this.$el.children[0].components.overlay.show(); + + // Get initial images if they have not yet been loaded in. + if (dataLoaded) return; + this.fetchData(); + dataLoaded = true; + }, + + hide() { + this.showing = false; + this.$el.children[0].components.overlay.hide(); + }, + + fetchData() { + let url = baseUrl + page; + let query = {}; + if (this.uploadedTo !== false) query.page_id = this.uploadedTo; + if (this.searching) query.term = this.searchTerm; + + this.$http.get(url, {params: query}).then(response => { + this.images = this.images.concat(response.data.images); + this.hasMore = response.data.hasMore; + page++; + }); + }, + + setView(viewName) { + this.cancelSearch(); + this.images = []; + this.hasMore = false; + page = 0; + this.view = viewName; + baseUrl = window.baseUrl(`/images/${this.imageType}/${viewName}/`); + this.fetchData(); + }, + + searchImages() { + if (this.searchTerm === '') return this.cancelSearch(); + + // Cache current settings for later + if (!this.searching) { + preSearchImages = this.images; + preSearchHasMore = this.hasMore; + } + + this.searching = true; + this.images = []; + this.hasMore = false; + page = 0; + baseUrl = window.baseUrl(`/images/${this.imageType}/search/`); + this.fetchData(); + }, + + cancelSearch() { + this.searching = false; + this.searchTerm = ''; + this.images = preSearchImages; + this.hasMore = preSearchHasMore; + }, + + imageSelect(image) { + let dblClickTime = 300; + let currentTime = Date.now(); + let timeDiff = currentTime - previousClickTime; + let isDblClick = timeDiff < dblClickTime && image.id === previousClickImage; + + if (isDblClick) { + this.callbackAndHide(image); + } else { + this.selectedImage = image; + this.dependantPages = false; + } + + previousClickTime = currentTime; + previousClickImage = image.id; + }, + + callbackAndHide(imageResult) { + if (callback) callback(imageResult); + this.hide(); + }, + + saveImageDetails() { + let url = window.baseUrl(`/images/update/${this.selectedImage.id}`); + this.$http.put(url, this.selectedImage).then(response => { + this.$events.emit('success', trans('components.image_update_success')); + }).catch(error => { + if (error.response.status === 422) { + let errors = error.response.data; + let message = ''; + Object.keys(errors).forEach((key) => { + message += errors[key].join('\n'); + }); + this.$events.emit('error', message); + } else if (error.response.status === 403) { + this.$events.emit('error', error.response.data.error); + } + }); + }, + + deleteImage() { + let force = this.dependantPages !== false; + let url = window.baseUrl('/images/' + this.selectedImage.id); + if (force) url += '?force=true'; + this.$http.delete(url).then(response => { + this.images.splice(this.images.indexOf(this.selectedImage), 1); + this.selectedImage = false; + this.$events.emit('success', trans('components.image_delete_success')); + }).catch(error=> { + if (error.response.status === 400) { + this.dependantPages = error.response.data; + } else if (error.response.status === 403) { + this.$events.emit('error', error.response.data.error); + } + }); + }, + + getDate(stringDate) { + return new Date(stringDate); + }, + + uploadSuccess(event) { + this.images.unshift(event.data); + this.$events.emit('success', trans('components.image_upload_success')); + }, +}; + +const computed = { + uploadUrl() { + return window.baseUrl(`/images/${this.imageType}/upload`); + } +}; + +function mounted() { + window.ImageManager = this; + this.imageType = this.$el.getAttribute('image-type'); + this.uploadedTo = this.$el.getAttribute('uploaded-to'); + baseUrl = window.baseUrl('/images/' + this.imageType + '/all/') +} + +module.exports = { + mounted, + methods, + data, + computed, + components: {dropzone}, +}; \ No newline at end of file diff --git a/resources/assets/js/vues/vues.js b/resources/assets/js/vues/vues.js index 31d833bfb..e6d4b9f5b 100644 --- a/resources/assets/js/vues/vues.js +++ b/resources/assets/js/vues/vues.js @@ -7,7 +7,8 @@ function exists(id) { let vueMapping = { 'search-system': require('./search'), 'entity-dashboard': require('./entity-search'), - 'code-editor': require('./code-editor') + 'code-editor': require('./code-editor'), + 'image-manager': require('./image-manager'), }; window.vues = {}; diff --git a/resources/views/components/image-manager.blade.php b/resources/views/components/image-manager.blade.php index 05bf09799..a4612a4ac 100644 --- a/resources/views/components/image-manager.blade.php +++ b/resources/views/components/image-manager.blade.php @@ -1,6 +1,6 @@ -<div id="image-manager" image-type="{{ $imageType }}" ng-controller="ImageManagerController" uploaded-to="{{ $uploaded_to or 0 }}"> - <div overlay ng-cloak ng-click="hide()"> - <div class="popup-body" ng-click="$event.stopPropagation()"> +<div id="image-manager" image-type="{{ $imageType }}" uploaded-to="{{ $uploaded_to or 0 }}"> + <div overlay v-cloak> + <div class="popup-body" @click.stop=""> <div class="popup-header primary-background"> <div class="popup-title">{{ trans('components.image_select') }}</div> @@ -10,82 +10,80 @@ <div class="flex-fill image-manager-body"> <div class="image-manager-content"> - <div ng-if="imageType === 'gallery'" class="container"> + <div v-if="imageType === 'gallery'" class="container"> <div class="image-manager-header row faded-small nav-tabs"> - <div class="col-xs-4 tab-item" title="{{ trans('components.image_all_title') }}" ng-class="{selected: (view=='all')}" ng-click="setView('all')"><i class="zmdi zmdi-collection-image"></i> {{ trans('components.image_all') }}</div> - <div class="col-xs-4 tab-item" title="{{ trans('components.image_book_title') }}" ng-class="{selected: (view=='book')}" ng-click="setView('book')"><i class="zmdi zmdi-book text-book"></i> {{ trans('entities.book') }}</div> - <div class="col-xs-4 tab-item" title="{{ trans('components.image_page_title') }}" ng-class="{selected: (view=='page')}" ng-click="setView('page')"><i class="zmdi zmdi-file-text text-page"></i> {{ trans('entities.page') }}</div> + <div class="col-xs-4 tab-item" title="{{ trans('components.image_all_title') }}" :class="{selected: (view=='all')}" @click="setView('all')"><i class="zmdi zmdi-collection-image"></i> {{ trans('components.image_all') }}</div> + <div class="col-xs-4 tab-item" title="{{ trans('components.image_book_title') }}" :class="{selected: (view=='book')}" @click="setView('book')"><i class="zmdi zmdi-book text-book"></i> {{ trans('entities.book') }}</div> + <div class="col-xs-4 tab-item" title="{{ trans('components.image_page_title') }}" :class="{selected: (view=='page')}" @click="setView('page')"><i class="zmdi zmdi-file-text text-page"></i> {{ trans('entities.page') }}</div> </div> </div> - <div ng-show="view === 'all'" > - <form ng-submit="searchImages()" class="contained-search-box"> - <input type="text" placeholder="{{ trans('components.image_search_hint') }}" ng-model="searchTerm"> - <button ng-class="{active: searching}" title="{{ trans('common.search_clear') }}" type="button" ng-click="cancelSearch()" class="text-button cancel"><i class="zmdi zmdi-close-circle-o"></i></button> - <button title="{{ trans('common.search') }}" class="text-button" type="submit"><i class="zmdi zmdi-search"></i></button> + <div v-show="view === 'all'" > + <form @submit="searchImages" class="contained-search-box"> + <input placeholder="{{ trans('components.image_search_hint') }}" v-model="searchTerm"> + <button :class="{active: searching}" title="{{ trans('common.search_clear') }}" type="button" @click="cancelSearch()" class="text-button cancel"><i class="zmdi zmdi-close-circle-o"></i></button> + <button title="{{ trans('common.search') }}" class="text-button"><i class="zmdi zmdi-search"></i></button> </form> </div> <div class="image-manager-list"> - <div ng-repeat="image in images"> - <div class="image anim fadeIn" ng-style="{animationDelay: ($index > 26) ? '160ms' : ($index * 25) + 'ms'}" - ng-class="{selected: (image==selectedImage)}" ng-click="imageSelect(image)"> - <img ng-src="@{{image.thumbs.gallery}}" ng-attr-alt="@{{image.title}}" ng-attr-title="@{{image.name}}"> + <div v-if="images.length > 0" v-for="(image, idx) in images"> + <div class="image anim fadeIn" :style="{animationDelay: (idx > 26) ? '160ms' : ((idx * 25) + 'ms')}" + :class="{selected: (image==selectedImage)}" @click="imageSelect(image)"> + <img :src="image.thumbs.gallery" :alt="image.title" :title="image.name"> <div class="image-meta"> - <span class="name" ng-bind="image.name"></span> + <span class="name" v-text="image.name"></span> <span class="date">{{ trans('components.image_uploaded', ['uploadedDate' => "{{ getDate(image.created_at) }" . "}"]) }}</span> </div> </div> </div> - <div class="load-more" ng-show="hasMore" ng-click="fetchData()">{{ trans('components.image_load_more') }}</div> + <div class="load-more" v-show="hasMore" @click="fetchData">{{ trans('components.image_load_more') }}</div> </div> </div> <div class="image-manager-sidebar"> <div class="inner"> - <div class="image-manager-details anim fadeIn" ng-show="selectedImage"> + <div class="image-manager-details anim fadeIn" v-if="selectedImage"> - <form ng-submit="saveImageDetails($event)"> + <form @submit.prevent="saveImageDetails"> <div> - <a ng-href="@{{selectedImage.url}}" target="_blank" style="display: block;"> - <img ng-src="@{{selectedImage.thumbs.gallery}}" ng-attr-alt="@{{selectedImage.title}}" ng-attr-title="@{{selectedImage.name}}"> + <a :href="selectedImage.url" target="_blank" style="display: block;"> + <img :src="selectedImage.thumbs.gallery" :alt="selectedImage.title" + :title="selectedImage.name"> </a> </div> <div class="form-group"> <label for="name">{{ trans('components.image_image_name') }}</label> - <input type="text" id="name" name="name" ng-model="selectedImage.name"> + <input id="name" name="name" v-model="selectedImage.name"> </div> </form> - <div ng-show="dependantPages"> + <div v-show="dependantPages"> <p class="text-neg text-small"> {{ trans('components.image_delete_confirm') }} </p> <ul class="text-neg"> - <li ng-repeat="page in dependantPages"> - <a ng-href="@{{ page.url }}" target="_blank" class="text-neg" ng-bind="page.name"></a> + <li v-for="page in dependantPages"> + <a :href="page.url" target="_blank" class="text-neg" v-text="page.name"></a> </li> </ul> </div> <div class="clearfix"> - <form class="float left" ng-submit="deleteImage($event)"> + <form class="float left" @submit.prevent="deleteImage"> <button class="button icon neg"><i class="zmdi zmdi-delete"></i></button> </form> - <button class="button pos anim fadeIn float right" ng-show="selectedImage" ng-click="selectButtonClick()"> + <button class="button pos anim fadeIn float right" v-show="selectedImage" @click="callbackAndHide(selectedImage)"> <i class="zmdi zmdi-square-right"></i>{{ trans('components.image_select_image') }} </button> </div> </div> - <drop-zone message="{{ trans('components.image_dropzone') }}" upload-url="@{{getUploadUrl()}}" uploaded-to="@{{uploadedTo}}" event-success="uploadSuccess"></drop-zone> - + <dropzone placeholder="{{ trans('components.image_dropzone') }}" :upload-url="uploadUrl" :uploaded-to="uploadedTo" @success="uploadSuccess"></dropzone> </div> </div> - - </div> </div> From f338dbe3f87586d714a17f2bc12b520ac1a98cd2 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Thu, 10 Aug 2017 20:11:25 +0100 Subject: [PATCH 74/83] Started vueifying tag system --- package.json | 3 +- resources/assets/js/controllers.js | 69 +------------------- resources/assets/js/vues/tag-manager.js | 65 ++++++++++++++++++ resources/assets/js/vues/vues.js | 1 + resources/assets/sass/_pages.scss | 2 +- resources/assets/sass/_tables.scss | 13 ++++ resources/views/pages/form-toolbox.blade.php | 31 +++++---- 7 files changed, 101 insertions(+), 83 deletions(-) create mode 100644 resources/assets/js/vues/tag-manager.js diff --git a/package.json b/package.json index 1ae0e7f68..f447ec786 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "markdown-it": "^8.3.1", "markdown-it-task-lists": "^2.0.0", "moment": "^2.12.0", - "vue": "^2.2.6" + "vue": "^2.2.6", + "vuedraggable": "^2.14.1" }, "browser": { "vue": "vue/dist/vue.common.js" diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index de3ce81c6..c317da753 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -157,74 +157,7 @@ module.exports = function (ngApp, events) { containment: "parent", axis: "y" }; - - /** - * Push an empty tag to the end of the scope tags. - */ - function addEmptyTag() { - $scope.tags.push({ - name: '', - value: '' - }); - } - $scope.addEmptyTag = addEmptyTag; - - /** - * Get all tags for the current book and add into scope. - */ - function getTags() { - let url = window.baseUrl(`/ajax/tags/get/page/${pageId}`); - $http.get(url).then((responseData) => { - $scope.tags = responseData.data; - addEmptyTag(); - }); - } - getTags(); - - /** - * Set the order property on all tags. - */ - function setTagOrder() { - for (let i = 0; i < $scope.tags.length; i++) { - $scope.tags[i].order = i; - } - } - - /** - * When an tag changes check if another empty editable - * field needs to be added onto the end. - * @param tag - */ - $scope.tagChange = function(tag) { - let cPos = $scope.tags.indexOf(tag); - if (cPos !== $scope.tags.length-1) return; - - if (tag.name !== '' || tag.value !== '') { - addEmptyTag(); - } - }; - - /** - * When an tag field loses focus check the tag to see if its - * empty and therefore could be removed from the list. - * @param tag - */ - $scope.tagBlur = function(tag) { - let isLast = $scope.tags.length - 1 === $scope.tags.indexOf(tag); - if (tag.name === '' && tag.value === '' && !isLast) { - let cPos = $scope.tags.indexOf(tag); - $scope.tags.splice(cPos, 1); - } - }; - - /** - * Remove a tag from the current list. - * @param tag - */ - $scope.removeTag = function(tag) { - let cIndex = $scope.tags.indexOf(tag); - $scope.tags.splice(cIndex, 1); - }; + // TODO - Delete }]); diff --git a/resources/assets/js/vues/tag-manager.js b/resources/assets/js/vues/tag-manager.js new file mode 100644 index 000000000..cf3e4d34e --- /dev/null +++ b/resources/assets/js/vues/tag-manager.js @@ -0,0 +1,65 @@ +const draggable = require('vuedraggable'); + +let data = { + pageId: false, + tags: [], +}; + +const components = {draggable}; + +let computed = { + +}; + +let methods = { + + addEmptyTag() { + this.tags.push({name: '', value: '', key: Math.random().toString(36).substring(7)}); + }, + + /** + * When an tag changes check if another empty editable field needs to be added onto the end. + * @param tag + */ + tagChange(tag) { + let tagPos = this.tags.indexOf(tag); + if (tagPos !== this.tags.length-1 || tag.name !== '' || tag.value !== '') return; + this.addEmptyTag(); + }, + + /** + * When an tag field loses focus check the tag to see if its + * empty and therefore could be removed from the list. + * @param tag + */ + tagBlur(tag) { + let isLast = (this.tags.indexOf(tag) === this.tags.length-1); + if (tag.name !== '' || tag.value !== '' || isLast) return; + let cPos = this.tags.indexOf(tag); + this.tags.splice(cPos, 1); + }, + + removeTag(tag) { + let tagPos = this.tags.indexOf(tag); + if (tagPos === -1) return; + this.tags.splice(tagPos, 1); + } +}; + +function mounted() { + this.pageId = Number(this.$el.getAttribute('page-id')); + + let url = window.baseUrl(`/ajax/tags/get/page/${this.pageId}`); + this.$http.get(url).then(response => { + let tags = response.data; + for (let i = 0, len = tags.length; i < len; i++) { + tags[i].key = Math.random().toString(36).substring(7); + } + this.tags = tags; + this.addEmptyTag(); + }); +} + +module.exports = { + data, computed, methods, mounted, components +}; \ No newline at end of file diff --git a/resources/assets/js/vues/vues.js b/resources/assets/js/vues/vues.js index e6d4b9f5b..a3f6ec8e5 100644 --- a/resources/assets/js/vues/vues.js +++ b/resources/assets/js/vues/vues.js @@ -9,6 +9,7 @@ let vueMapping = { 'entity-dashboard': require('./entity-search'), 'code-editor': require('./code-editor'), 'image-manager': require('./image-manager'), + 'tag-manager': require('./tag-manager'), }; window.vues = {}; diff --git a/resources/assets/sass/_pages.scss b/resources/assets/sass/_pages.scss index b06892c1d..65fdfbc4b 100755 --- a/resources/assets/sass/_pages.scss +++ b/resources/assets/sass/_pages.scss @@ -226,7 +226,7 @@ width: 100%; min-width: 50px; } - .tags td { + .tags td, .tag-table > div > div > div { padding-right: $-s; padding-top: $-s; position: relative; diff --git a/resources/assets/sass/_tables.scss b/resources/assets/sass/_tables.scss index 21553b839..ea517fee3 100644 --- a/resources/assets/sass/_tables.scss +++ b/resources/assets/sass/_tables.scss @@ -67,4 +67,17 @@ table.file-table { .ui-sortable-helper { display: table; } +} + +.fake-table { + display: table; + > div { + display: table-row-group; + } + > div > div { + display: table-row; + } + > div > div > div { + display: table-cell; + } } \ No newline at end of file diff --git a/resources/views/pages/form-toolbox.blade.php b/resources/views/pages/form-toolbox.blade.php index ecf7619b7..9b8cd4ed3 100644 --- a/resources/views/pages/form-toolbox.blade.php +++ b/resources/views/pages/form-toolbox.blade.php @@ -9,31 +9,36 @@ @endif </div> - <div toolbox-tab-content="tags" ng-controller="PageTagController" page-id="{{ $page->id or 0 }}"> + <div toolbox-tab-content="tags" id="tag-manager" page-id="{{ $page->id or 0 }}"> <h4>{{ trans('entities.page_tags') }}</h4> <div class="padded tags"> <p class="muted small">{!! nl2br(e(trans('entities.tags_explain'))) !!}</p> - <table class="no-style" tag-autosuggestions style="width: 100%;"> - <tbody ui-sortable="sortOptions" ng-model="tags" > - <tr ng-repeat="tag in tags track by $index"> - <td width="20" ><i class="handle zmdi zmdi-menu"></i></td> - <td><input autosuggest="{{ baseUrl('/ajax/tags/suggest/names') }}" autosuggest-type="name" class="outline" ng-attr-name="tags[@{{$index}}][name]" type="text" ng-model="tag.name" ng-change="tagChange(tag)" ng-blur="tagBlur(tag)" placeholder="{{ trans('entities.tag') }}"></td> - <td><input autosuggest="{{ baseUrl('/ajax/tags/suggest/values') }}" autosuggest-type="value" class="outline" ng-attr-name="tags[@{{$index}}][value]" type="text" ng-model="tag.value" ng-change="tagChange(tag)" ng-blur="tagBlur(tag)" placeholder="{{ trans('entities.tag_value') }}"></td> - <td width="10" ng-show="tags.length != 1" class="text-center text-neg" style="padding: 0;" ng-click="removeTag(tag)"><i class="zmdi zmdi-close"></i></td> - </tr> - </tbody> - </table> + + <draggable class="fake-table no-style tag-table" :options="{handle: '.handle'}" :list="tags" element="div" style="width: 100%;"> + <transition-group name="test" tag="div"> + <div v-for="(tag, i) in tags" :key="tag.key"> + <div width="20" class="handle" ><i class="zmdi zmdi-menu"></i></div> + <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/names') }}" autosuggest-type="name" class="outline" :name="tags[i].name" + v-model="tag.name" @change="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag') }}"></div> + <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/values') }}" autosuggest-type="value" class="outline" :name="tags[i].value" + v-model="tag.value" @change="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag_value') }}"></div> + <div width="10" v-show="tags.length !== 1" class="text-center text-neg" style="padding: 0;" @click="removeTag(tag)"><i class="zmdi zmdi-close"></i></div> + </div> + </transition-group> + </draggable> + <table class="no-style" style="width: 100%;"> <tbody> <tr class="unsortable"> - <td width="34"></td> - <td ng-click="addEmptyTag()"> + <td width="34"></td> + <td @click="addEmptyTag"> <button type="button" class="text-button">{{ trans('entities.tags_add') }}</button> </td> <td></td> </tr> </tbody> </table> + </div> </div> From b023699f1b4b2abd151b2b763ae2d809d1aa3d45 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sun, 13 Aug 2017 11:50:40 +0100 Subject: [PATCH 75/83] Converted tag manager to be fully vue based --- resources/assets/js/controllers.js | 17 ----------------- resources/assets/js/vues/tag-manager.js | 9 ++++++--- resources/views/pages/form-toolbox.blade.php | 14 +++++++------- 3 files changed, 13 insertions(+), 27 deletions(-) diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index c317da753..132580f68 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -145,23 +145,6 @@ module.exports = function (ngApp, events) { }]); - ngApp.controller('PageTagController', ['$scope', '$http', '$attrs', - function ($scope, $http, $attrs) { - - const pageId = Number($attrs.pageId); - $scope.tags = []; - - $scope.sortOptions = { - handle: '.handle', - items: '> tr', - containment: "parent", - axis: "y" - }; - // TODO - Delete - - }]); - - ngApp.controller('PageAttachmentController', ['$scope', '$http', '$attrs', function ($scope, $http, $attrs) { diff --git a/resources/assets/js/vues/tag-manager.js b/resources/assets/js/vues/tag-manager.js index cf3e4d34e..d934b6266 100644 --- a/resources/assets/js/vues/tag-manager.js +++ b/resources/assets/js/vues/tag-manager.js @@ -23,8 +23,7 @@ let methods = { */ tagChange(tag) { let tagPos = this.tags.indexOf(tag); - if (tagPos !== this.tags.length-1 || tag.name !== '' || tag.value !== '') return; - this.addEmptyTag(); + if (tagPos === this.tags.length-1 && (tag.name !== '' || tag.value !== '')) this.addEmptyTag(); }, /** @@ -43,7 +42,11 @@ let methods = { let tagPos = this.tags.indexOf(tag); if (tagPos === -1) return; this.tags.splice(tagPos, 1); - } + }, + + getTagFieldName(index, key) { + return `tags[${index}][${key}]`; + }, }; function mounted() { diff --git a/resources/views/pages/form-toolbox.blade.php b/resources/views/pages/form-toolbox.blade.php index 9b8cd4ed3..71a4b637e 100644 --- a/resources/views/pages/form-toolbox.blade.php +++ b/resources/views/pages/form-toolbox.blade.php @@ -18,9 +18,9 @@ <transition-group name="test" tag="div"> <div v-for="(tag, i) in tags" :key="tag.key"> <div width="20" class="handle" ><i class="zmdi zmdi-menu"></i></div> - <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/names') }}" autosuggest-type="name" class="outline" :name="tags[i].name" + <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/names') }}" autosuggest-type="name" class="outline" :name="getTagFieldName(i, 'name')" v-model="tag.name" @change="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag') }}"></div> - <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/values') }}" autosuggest-type="value" class="outline" :name="tags[i].value" + <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/values') }}" autosuggest-type="value" class="outline" :name="getTagFieldName(i, 'value')" v-model="tag.value" @change="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag_value') }}"></div> <div width="10" v-show="tags.length !== 1" class="text-center text-neg" style="padding: 0;" @click="removeTag(tag)"><i class="zmdi zmdi-close"></i></div> </div> @@ -86,15 +86,15 @@ <p class="muted small">{{ trans('entities.attachments_explain_link') }}</p> <div class="form-group"> <label for="attachment-via-link">{{ trans('entities.attachments_link_name') }}</label> - <input type="text" placeholder="{{ trans('entities.attachments_link_name') }}" ng-model="file.name"> + <input placeholder="{{ trans('entities.attachments_link_name') }}" ng-model="file.name"> <p class="small neg" ng-repeat="error in errors.link.name" ng-bind="error"></p> </div> <div class="form-group"> <label for="attachment-via-link">{{ trans('entities.attachments_link_url') }}</label> - <input type="text" placeholder="{{ trans('entities.attachments_link_url_hint') }}" ng-model="file.link"> + <input placeholder="{{ trans('entities.attachments_link_url_hint') }}" ng-model="file.link"> <p class="small neg" ng-repeat="error in errors.link.link" ng-bind="error"></p> </div> - <button type="submit" class="button pos">{{ trans('entities.attach') }}</button> + <button class="button pos">{{ trans('entities.attach') }}</button> </div> </div> @@ -122,14 +122,14 @@ <div tab-content="link"> <div class="form-group"> <label for="attachment-link-edit">{{ trans('entities.attachments_link_url') }}</label> - <input type="text" id="attachment-link-edit" placeholder="{{ trans('entities.attachment_link') }}" ng-model="editFile.link"> + <input id="attachment-link-edit" placeholder="{{ trans('entities.attachment_link') }}" ng-model="editFile.link"> <p class="small neg" ng-repeat="error in errors.edit.link" ng-bind="error"></p> </div> </div> </div> <button type="button" class="button" ng-click="cancelEdit()">{{ trans('common.back') }}</button> - <button type="submit" class="button pos">{{ trans('common.save') }}</button> + <button class="button pos">{{ trans('common.save') }}</button> </div> </div> From d3e4a1a6f92231a99116fd5ae609a96971fd3a2a Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sun, 13 Aug 2017 13:25:30 +0100 Subject: [PATCH 76/83] Converted tag autosuggestion to vue component --- resources/assets/js/directives.js | 182 ------------------ .../assets/js/vues/components/autosuggest.js | 130 +++++++++++++ resources/assets/js/vues/tag-manager.js | 10 +- resources/assets/sass/_forms.scss | 2 +- resources/views/pages/form-toolbox.blade.php | 12 +- 5 files changed, 144 insertions(+), 192 deletions(-) create mode 100644 resources/assets/js/vues/components/autosuggest.js diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index a156c961c..2a0547c97 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -496,188 +496,6 @@ module.exports = function (ngApp, events) { } }]); - /** - * Tag Autosuggestions - * Listens to child inputs and provides autosuggestions depending on field type - * and input. Suggestions provided by server. - */ - ngApp.directive('tagAutosuggestions', ['$http', function ($http) { - return { - restrict: 'A', - link: function (scope, elem, attrs) { - - // Local storage for quick caching. - const localCache = {}; - - // Create suggestion element - const suggestionBox = document.createElement('ul'); - suggestionBox.className = 'suggestion-box'; - suggestionBox.style.position = 'absolute'; - suggestionBox.style.display = 'none'; - const $suggestionBox = $(suggestionBox); - - // General state tracking - let isShowing = false; - let currentInput = false; - let active = 0; - - // Listen to input events on autosuggest fields - elem.on('input focus', '[autosuggest]', function (event) { - let $input = $(this); - let val = $input.val(); - let url = $input.attr('autosuggest'); - let type = $input.attr('autosuggest-type'); - - // Add name param to request if for a value - if (type.toLowerCase() === 'value') { - let $nameInput = $input.closest('tr').find('[autosuggest-type="name"]').first(); - let nameVal = $nameInput.val(); - if (nameVal !== '') { - url += '?name=' + encodeURIComponent(nameVal); - } - } - - let suggestionPromise = getSuggestions(val.slice(0, 3), url); - suggestionPromise.then(suggestions => { - if (val.length === 0) { - displaySuggestions($input, suggestions.slice(0, 6)); - } else { - suggestions = suggestions.filter(item => { - return item.toLowerCase().indexOf(val.toLowerCase()) !== -1; - }).slice(0, 4); - displaySuggestions($input, suggestions); - } - }); - }); - - // Hide autosuggestions when input loses focus. - // Slight delay to allow clicks. - let lastFocusTime = 0; - elem.on('blur', '[autosuggest]', function (event) { - let startTime = Date.now(); - setTimeout(() => { - if (lastFocusTime < startTime) { - $suggestionBox.hide(); - isShowing = false; - } - }, 200) - }); - elem.on('focus', '[autosuggest]', function (event) { - lastFocusTime = Date.now(); - }); - - elem.on('keydown', '[autosuggest]', function (event) { - if (!isShowing) return; - - let suggestionElems = suggestionBox.childNodes; - let suggestCount = suggestionElems.length; - - // Down arrow - if (event.keyCode === 40) { - let newActive = (active === suggestCount - 1) ? 0 : active + 1; - changeActiveTo(newActive, suggestionElems); - } - // Up arrow - else if (event.keyCode === 38) { - let newActive = (active === 0) ? suggestCount - 1 : active - 1; - changeActiveTo(newActive, suggestionElems); - } - // Enter or tab key - else if ((event.keyCode === 13 || event.keyCode === 9) && !event.shiftKey) { - currentInput[0].value = suggestionElems[active].textContent; - currentInput.focus(); - $suggestionBox.hide(); - isShowing = false; - if (event.keyCode === 13) { - event.preventDefault(); - return false; - } - } - }); - - // Change the active suggestion to the given index - function changeActiveTo(index, suggestionElems) { - suggestionElems[active].className = ''; - active = index; - suggestionElems[active].className = 'active'; - } - - // Display suggestions on a field - let prevSuggestions = []; - - function displaySuggestions($input, suggestions) { - - // Hide if no suggestions - if (suggestions.length === 0) { - $suggestionBox.hide(); - isShowing = false; - prevSuggestions = suggestions; - return; - } - - // Otherwise show and attach to input - if (!isShowing) { - $suggestionBox.show(); - isShowing = true; - } - if ($input !== currentInput) { - $suggestionBox.detach(); - $input.after($suggestionBox); - currentInput = $input; - } - - // Return if no change - if (prevSuggestions.join() === suggestions.join()) { - prevSuggestions = suggestions; - return; - } - - // Build suggestions - $suggestionBox[0].innerHTML = ''; - for (let i = 0; i < suggestions.length; i++) { - let suggestion = document.createElement('li'); - suggestion.textContent = suggestions[i]; - suggestion.onclick = suggestionClick; - if (i === 0) { - suggestion.className = 'active'; - active = 0; - } - $suggestionBox[0].appendChild(suggestion); - } - - prevSuggestions = suggestions; - } - - // Suggestion click event - function suggestionClick(event) { - currentInput[0].value = this.textContent; - currentInput.focus(); - $suggestionBox.hide(); - isShowing = false; - } - - // Get suggestions & cache - function getSuggestions(input, url) { - let hasQuery = url.indexOf('?') !== -1; - let searchUrl = url + (hasQuery ? '&' : '?') + 'search=' + encodeURIComponent(input); - - // Get from local cache if exists - if (typeof localCache[searchUrl] !== 'undefined') { - return new Promise((resolve, reject) => { - resolve(localCache[searchUrl]); - }); - } - - return $http.get(searchUrl).then(response => { - localCache[searchUrl] = response.data; - return response.data; - }); - } - - } - } - }]); - ngApp.directive('entityLinkSelector', [function($http) { return { restrict: 'A', diff --git a/resources/assets/js/vues/components/autosuggest.js b/resources/assets/js/vues/components/autosuggest.js new file mode 100644 index 000000000..4d6b97e55 --- /dev/null +++ b/resources/assets/js/vues/components/autosuggest.js @@ -0,0 +1,130 @@ + +const template = ` + <div> + <input :value="value" :autosuggest-type="type" ref="input" + :placeholder="placeholder" :name="name" + @input="inputUpdate($event.target.value)" @focus="inputUpdate($event.target.value)" + @blur="inputBlur" + @keydown="inputKeydown" + /> + <ul class="suggestion-box" v-if="showSuggestions"> + <li v-for="(suggestion, i) in suggestions" + @click="selectSuggestion(suggestion)" + :class="{active: (i === active)}">{{suggestion}}</li> + </ul> + </div> + +`; + +function data() { + return { + suggestions: [], + showSuggestions: false, + active: 0, + }; +} + +const ajaxCache = {}; + +const props = ['url', 'type', 'value', 'placeholder', 'name']; + +function getNameInputVal(valInput) { + let parentRow = valInput.parentNode.parentNode; + let nameInput = parentRow.querySelector('[autosuggest-type="name"]'); + return (nameInput === null) ? '' : nameInput.value; +} + +const methods = { + + inputUpdate(inputValue) { + this.$emit('input', inputValue); + let params = {}; + + if (this.type === 'value') { + let nameVal = getNameInputVal(this.$el); + if (nameVal !== "") params.name = nameVal; + } + + this.getSuggestions(inputValue.slice(0, 3), params).then(suggestions => { + if (inputValue.length === 0) { + this.displaySuggestions(suggestions.slice(0, 6)); + return; + } + // Filter to suggestions containing searched term + suggestions = suggestions.filter(item => { + return item.toLowerCase().indexOf(inputValue.toLowerCase()) !== -1; + }).slice(0, 4); + this.displaySuggestions(suggestions); + }); + }, + + inputBlur() { + setTimeout(() => { + this.$emit('blur'); + this.showSuggestions = false; + }, 100); + }, + + inputKeydown(event) { + if (event.keyCode === 13) event.preventDefault(); + if (!this.showSuggestions) return; + + // Down arrow + if (event.keyCode === 40) { + this.active = (this.active === this.suggestions.length - 1) ? 0 : this.active+1; + } + // Up Arrow + else if (event.keyCode === 38) { + this.active = (this.active === 0) ? this.suggestions.length - 1 : this.active-1; + } + // Enter or tab keys + else if ((event.keyCode === 13 || event.keyCode === 9) && !event.shiftKey) { + this.selectSuggestion(this.suggestions[this.active]); + } + // Escape key + else if (event.keyCode === 27) { + this.showSuggestions = false; + } + }, + + displaySuggestions(suggestions) { + if (suggestions.length === 0) { + this.suggestions = []; + this.showSuggestions = false; + return; + } + + this.suggestions = suggestions; + this.showSuggestions = true; + this.active = 0; + }, + + selectSuggestion(suggestion) { + this.$refs.input.value = suggestion; + this.$refs.input.focus(); + this.$emit('input', suggestion); + this.showSuggestions = false; + }, + + /** + * Get suggestions from BookStack. Store and use local cache if already searched. + * @param {String} input + * @param {Object} params + */ + getSuggestions(input, params) { + params.search = input; + let cacheKey = `${this.url}:${JSON.stringify(params)}`; + + if (typeof ajaxCache[cacheKey] !== "undefined") return Promise.resolve(ajaxCache[cacheKey]); + + return this.$http.get(this.url, {params}).then(resp => { + ajaxCache[cacheKey] = resp.data; + return resp.data; + }); + } + +}; + +const computed = []; + +module.exports = {template, data, props, methods, computed}; \ No newline at end of file diff --git a/resources/assets/js/vues/tag-manager.js b/resources/assets/js/vues/tag-manager.js index d934b6266..d97ceb96b 100644 --- a/resources/assets/js/vues/tag-manager.js +++ b/resources/assets/js/vues/tag-manager.js @@ -1,15 +1,15 @@ const draggable = require('vuedraggable'); +const autosuggest = require('./components/autosuggest'); let data = { pageId: false, tags: [], }; -const components = {draggable}; +const components = {draggable, autosuggest}; +const directives = {}; -let computed = { - -}; +let computed = {}; let methods = { @@ -64,5 +64,5 @@ function mounted() { } module.exports = { - data, computed, methods, mounted, components + data, computed, methods, mounted, components, directives }; \ No newline at end of file diff --git a/resources/assets/sass/_forms.scss b/resources/assets/sass/_forms.scss index 392e9ec3e..866316fc5 100644 --- a/resources/assets/sass/_forms.scss +++ b/resources/assets/sass/_forms.scss @@ -265,7 +265,7 @@ div[editor-type="markdown"] .title-input.page-title input[type="text"] { } } -input.outline { +.outline > input { border: 0; border-bottom: 2px solid #DDD; border-radius: 0; diff --git a/resources/views/pages/form-toolbox.blade.php b/resources/views/pages/form-toolbox.blade.php index 71a4b637e..3bc03a17f 100644 --- a/resources/views/pages/form-toolbox.blade.php +++ b/resources/views/pages/form-toolbox.blade.php @@ -18,10 +18,14 @@ <transition-group name="test" tag="div"> <div v-for="(tag, i) in tags" :key="tag.key"> <div width="20" class="handle" ><i class="zmdi zmdi-menu"></i></div> - <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/names') }}" autosuggest-type="name" class="outline" :name="getTagFieldName(i, 'name')" - v-model="tag.name" @change="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag') }}"></div> - <div><input autosuggest="{{ baseUrl('/ajax/tags/suggest/values') }}" autosuggest-type="value" class="outline" :name="getTagFieldName(i, 'value')" - v-model="tag.value" @change="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag_value') }}"></div> + <div> + <autosuggest url="/ajax/tags/suggest/names" type="name" class="outline" :name="getTagFieldName(i, 'name')" + v-model="tag.name" @input="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag') }}"/> + </div> + <div> + <autosuggest url="/ajax/tags/suggest/values" type="value" class="outline" :name="getTagFieldName(i, 'value')" + v-model="tag.value" @change="tagChange(tag)" @blur="tagBlur(tag)" placeholder="{{ trans('entities.tag') }}"/> + </div> <div width="10" v-show="tags.length !== 1" class="text-center text-neg" style="padding: 0;" @click="removeTag(tag)"><i class="zmdi zmdi-close"></i></div> </div> </transition-group> From 0d6a6b5b63c73ea631cb305c00b7b39627eb1eb1 Mon Sep 17 00:00:00 2001 From: Timo Schwarzer <me@timoschwarzer.com> Date: Wed, 16 Aug 2017 16:50:02 +0200 Subject: [PATCH 77/83] Update/fix german translation --- resources/lang/de/activities.php | 48 +++---- resources/lang/de/auth.php | 44 +++--- resources/lang/de/common.php | 14 +- resources/lang/de/components.php | 6 +- resources/lang/de/entities.php | 232 +++++++++++++++++-------------- resources/lang/de/errors.php | 72 +++++----- resources/lang/de/pagination.php | 2 +- resources/lang/de/passwords.php | 10 +- resources/lang/de/settings.php | 80 +++++------ resources/lang/de/validation.php | 46 +++--- 10 files changed, 287 insertions(+), 267 deletions(-) diff --git a/resources/lang/de/activities.php b/resources/lang/de/activities.php index c2d20b3a6..3318ea752 100644 --- a/resources/lang/de/activities.php +++ b/resources/lang/de/activities.php @@ -8,33 +8,33 @@ return [ */ // Pages - 'page_create' => 'Seite erstellt', - 'page_create_notification' => 'Seite erfolgreich erstellt', - 'page_update' => 'Seite aktualisiert', - 'page_update_notification' => 'Seite erfolgreich aktualisiert', - 'page_delete' => 'Seite gelöscht', - 'page_delete_notification' => 'Seite erfolgreich gelöscht', - 'page_restore' => 'Seite wiederhergstellt', - 'page_restore_notification' => 'Seite erfolgreich wiederhergstellt', - 'page_move' => 'Seite verschoben', + 'page_create' => 'hat Seite erstellt:', + 'page_create_notification' => 'hat Seite erfolgreich erstellt:', + 'page_update' => 'hat Seite aktualisiert:', + 'page_update_notification' => 'hat Seite erfolgreich aktualisiert:', + 'page_delete' => 'hat Seite gelöscht:', + 'page_delete_notification' => 'hat Seite erfolgreich gelöscht:', + 'page_restore' => 'hat Seite wiederhergstellt:', + 'page_restore_notification' => 'hat Seite erfolgreich wiederhergstellt:', + 'page_move' => 'hat Seite verschoben:', // Chapters - 'chapter_create' => 'Kapitel erstellt', - 'chapter_create_notification' => 'Kapitel erfolgreich erstellt', - 'chapter_update' => 'Kapitel aktualisiert', - 'chapter_update_notification' => 'Kapitel erfolgreich aktualisiert', - 'chapter_delete' => 'Kapitel gelöscht', - 'chapter_delete_notification' => 'Kapitel erfolgreich gelöscht', - 'chapter_move' => 'Kapitel verschoben', + 'chapter_create' => 'hat Kapitel erstellt:', + 'chapter_create_notification' => 'hat Kapitel erfolgreich erstellt:', + 'chapter_update' => 'hat Kapitel aktualisiert:', + 'chapter_update_notification' => 'hat Kapitel erfolgreich aktualisiert:', + 'chapter_delete' => 'hat Kapitel gelöscht', + 'chapter_delete_notification' => 'hat Kapitel erfolgreich gelöscht:', + 'chapter_move' => 'hat Kapitel verschoben:', // Books - 'book_create' => 'Buch erstellt', - 'book_create_notification' => 'Buch erfolgreich erstellt', - 'book_update' => 'Buch aktualisiert', - 'book_update_notification' => 'Buch erfolgreich aktualisiert', - 'book_delete' => 'Buch gelöscht', - 'book_delete_notification' => 'Buch erfolgreich gelöscht', - 'book_sort' => 'Buch sortiert', - 'book_sort_notification' => 'Buch erfolgreich neu sortiert', + 'book_create' => 'hat Buch erstellt:', + 'book_create_notification' => 'hat Buch erfolgreich erstellt:', + 'book_update' => 'hat Buch aktualisiert:', + 'book_update_notification' => 'hat Buch erfolgreich aktualisiert:', + 'book_delete' => 'hat Buch gelöscht:', + 'book_delete_notification' => 'hat Buch erfolgreich gelöscht:', + 'book_sort' => 'hat Buch sortiert:', + 'book_sort_notification' => 'hat Buch erfolgreich neu sortiert:', ]; diff --git a/resources/lang/de/auth.php b/resources/lang/de/auth.php index f253cdfa1..8f4afe654 100644 --- a/resources/lang/de/auth.php +++ b/resources/lang/de/auth.php @@ -10,8 +10,8 @@ return [ | these language lines according to your application's requirements. | */ - 'failed' => 'Dies sind keine gültigen Anmeldedaten.', - 'throttle' => 'Zu viele Anmeldeversuche. Bitte versuchen sie es in :seconds Sekunden erneut.', + 'failed' => 'Die eingegebenen Anmeldedaten sind ungültig.', + 'throttle' => 'Zu viele Anmeldeversuche. Bitte versuchen Sie es in :seconds Sekunden erneut.', /** * Login & Register @@ -29,16 +29,16 @@ return [ 'forgot_password' => 'Passwort vergessen?', 'remember_me' => 'Angemeldet bleiben', 'ldap_email_hint' => 'Bitte geben Sie eine E-Mail-Adresse ein, um diese mit dem Account zu nutzen.', - 'create_account' => 'Account anlegen', - 'social_login' => 'Social Login', - 'social_registration' => 'Social Registrierung', - 'social_registration_text' => 'Mit einem dieser Möglichkeiten registrieren oder anmelden.', + 'create_account' => 'Account registrieren', + 'social_login' => 'Mit Sozialem Netzwerk anmelden', + 'social_registration' => 'Mit Sozialem Netzwerk registrieren', + 'social_registration_text' => 'Mit einer dieser Dienste registrieren oder anmelden', 'register_thanks' => 'Vielen Dank für Ihre Registrierung!', - 'register_confirm' => 'Bitte prüfen Sie Ihren E-Mail Eingang und klicken auf den Verifizieren-Button, um :appName nutzen zu können.', - 'registrations_disabled' => 'Die Registrierung ist momentan nicht möglich', - 'registration_email_domain_invalid' => 'Diese E-Mail-Domain ist für die Benutzer der Applikation nicht freigeschaltet.', + 'register_confirm' => 'Bitte prüfen Sie Ihren Posteingang und bestätigen Sie die Registrierung.', + 'registrations_disabled' => 'Eine Registrierung ist momentan nicht möglich', + 'registration_email_domain_invalid' => 'Sie können sich mit dieser E-Mail nicht registrieren.', 'register_success' => 'Vielen Dank für Ihre Registrierung! Die Daten sind gespeichert und Sie sind angemeldet.', @@ -46,30 +46,30 @@ return [ * Password Reset */ 'reset_password' => 'Passwort vergessen', - 'reset_password_send_instructions' => 'Bitte geben Sie unten Ihre E-Mail-Adresse ein und Sie erhalten eine E-Mail, um Ihr Passwort zurück zu setzen.', + 'reset_password_send_instructions' => 'Bitte geben Sie Ihre E-Mail-Adresse ein. Danach erhalten Sie eine E-Mail mit einem Link zum Zurücksetzen Ihres Passwortes.', 'reset_password_send_button' => 'Passwort zurücksetzen', - 'reset_password_sent_success' => 'Eine E-Mail mit den Instruktionen, um Ihr Passwort zurückzusetzen wurde an :email gesendet.', - 'reset_password_success' => 'Ihr Passwort wurde erfolgreich zurück gesetzt.', + 'reset_password_sent_success' => 'Eine E-Mail mit dem Link zum Zurücksetzen Ihres Passwortes wurde an :email gesendet.', + 'reset_password_success' => 'Ihr Passwort wurde erfolgreich zurückgesetzt.', 'email_reset_subject' => 'Passwort zurücksetzen für :appName', - 'email_reset_text' => 'Sie erhalten diese E-Mail, weil eine Passwort-Rücksetzung für Ihren Account beantragt wurde.', - 'email_reset_not_requested' => 'Wenn Sie die Passwort-Rücksetzung nicht ausgelöst haben, ist kein weiteres Handeln notwendig.', + 'email_reset_text' => 'Sie erhalten diese E-Mail, weil jemand versucht hat, Ihr Passwort zurückzusetzen.', + 'email_reset_not_requested' => 'Wenn Sie das nicht waren, brauchen Sie nichts weiter zu tun.', /** * Email Confirmation */ - 'email_confirm_subject' => 'Bestätigen sie ihre E-Mail Adresse bei :appName', - 'email_confirm_greeting' => 'Danke, dass sie :appName beigetreten sind!', - 'email_confirm_text' => 'Bitte bestätigen sie ihre E-Mail Adresse, indem sie auf den Button klicken:', - 'email_confirm_action' => 'E-Mail Adresse bestätigen', - 'email_confirm_send_error' => 'Bestätigungs-E-Mail benötigt, aber das System konnte die E-Mail nicht versenden. Kontaktieren sie den Administrator, um sicherzustellen, dass das Sytsem korrekt eingerichtet ist.', - 'email_confirm_success' => 'Ihre E-Mail Adresse wurde bestätigt!', - 'email_confirm_resent' => 'Bestätigungs-E-Mail wurde erneut versendet, bitte überprüfen sie ihren Posteingang.', + 'email_confirm_subject' => 'Bestätigen Sie Ihre E-Mail-Adresse für :appName', + 'email_confirm_greeting' => 'Danke, dass Sie sich für :appName registriert haben!', + 'email_confirm_text' => 'Bitte bestätigen Sie Ihre E-Mail-Adresse, indem Sie auf die Schaltfläche klicken:', + 'email_confirm_action' => 'E-Mail-Adresse bestätigen', + 'email_confirm_send_error' => 'Leider konnte die für die Registrierung notwendige E-Mail zur bestätigung Ihrer E-Mail-Adresse nicht versandt werden. Bitte kontaktieren Sie den Systemadministrator!', + 'email_confirm_success' => 'Ihre E-Mail-Adresse wurde bestätigt!', + 'email_confirm_resent' => 'Bestätigungs-E-Mail wurde erneut versendet, bitte überprüfen Sie Ihren Posteingang.', 'email_not_confirmed' => 'E-Mail-Adresse ist nicht bestätigt', 'email_not_confirmed_text' => 'Ihre E-Mail-Adresse ist bisher nicht bestätigt.', 'email_not_confirmed_click_link' => 'Bitte klicken Sie auf den Link in der E-Mail, die Sie nach der Registrierung erhalten haben.', 'email_not_confirmed_resend' => 'Wenn Sie die E-Mail nicht erhalten haben, können Sie die Nachricht erneut anfordern. Füllen Sie hierzu bitte das folgende Formular aus:', - 'email_not_confirmed_resend_button' => 'Bestätigungs E-Mail erneut senden', + 'email_not_confirmed_resend_button' => 'Bestätigungs-E-Mail erneut senden', ]; diff --git a/resources/lang/de/common.php b/resources/lang/de/common.php index 7ad1743a0..3c21a9d08 100644 --- a/resources/lang/de/common.php +++ b/resources/lang/de/common.php @@ -28,9 +28,9 @@ return [ 'edit' => 'Bearbeiten', 'sort' => 'Sortieren', 'move' => 'Verschieben', - 'delete' => 'Löschen', + 'delete' => 'Löschen', 'search' => 'Suchen', - 'search_clear' => 'Suche löschen', + 'search_clear' => 'Suche löschen', 'reset' => 'Zurücksetzen', 'remove' => 'Entfernen', @@ -38,9 +38,9 @@ return [ /** * Misc */ - 'deleted_user' => 'Gelöschte Benutzer', - 'no_activity' => 'Keine Aktivitäten zum Anzeigen', - 'no_items' => 'Keine Einträge gefunden.', + 'deleted_user' => 'Gelöschte Benutzer', + 'no_activity' => 'Keine Aktivitäten zum Anzeigen', + 'no_items' => 'Keine Einträge gefunden.', 'back_to_top' => 'nach oben', 'toggle_details' => 'Details zeigen/verstecken', @@ -53,6 +53,6 @@ return [ /** * Email Content */ - 'email_action_help' => 'Sollte es beim Anklicken des ":actionText" Buttons Probleme geben, kopieren Sie folgende URL und fügen diese in Ihrem Webbrowser ein:', + 'email_action_help' => 'Sollte es beim Anklicken der Schaltfläche ":action_text" Probleme geben, öffnen Sie folgende URL in Ihrem Browser:', 'email_rights' => 'Alle Rechte vorbehalten', -]; \ No newline at end of file +]; diff --git a/resources/lang/de/components.php b/resources/lang/de/components.php index a8538c465..26bf3e626 100644 --- a/resources/lang/de/components.php +++ b/resources/lang/de/components.php @@ -13,12 +13,12 @@ return [ 'image_uploaded' => 'Hochgeladen am :uploadedDate', 'image_load_more' => 'Mehr', 'image_image_name' => 'Bildname', - 'image_delete_confirm' => 'Dieses Bild wird auf den folgenden Seiten benutzt. Bitte klicken Sie erneut auf löschen, wenn Sie dieses Bild tatsächlich entfernen möchten.', + 'image_delete_confirm' => 'Dieses Bild wird auf den folgenden Seiten benutzt. Bitte klicken Sie erneut auf löschen, wenn Sie dieses Bild wirklich entfernen möchten.', 'image_select_image' => 'Bild auswählen', - 'image_dropzone' => 'Ziehen Sie Bilder hier hinein oder klicken Sie hier, um ein Bild auszuwählen', + 'image_dropzone' => 'Ziehen Sie Bilder hierher oder klicken Sie, um ein Bild auszuwählen', 'images_deleted' => 'Bilder gelöscht', 'image_preview' => 'Bildvorschau', 'image_upload_success' => 'Bild erfolgreich hochgeladen', 'image_update_success' => 'Bilddetails erfolgreich aktualisiert', 'image_delete_success' => 'Bild erfolgreich gelöscht' -]; \ No newline at end of file +]; diff --git a/resources/lang/de/entities.php b/resources/lang/de/entities.php index 5d7d5cdde..910218a58 100644 --- a/resources/lang/de/entities.php +++ b/resources/lang/de/entities.php @@ -4,38 +4,39 @@ return [ /** * Shared */ - 'recently_created' => 'Kürzlich angelegt', - 'recently_created_pages' => 'Kürzlich angelegte Seiten', - 'recently_updated_pages' => 'Kürzlich aktualisierte Seiten', - 'recently_created_chapters' => 'Kürzlich angelegte Kapitel', - 'recently_created_books' => 'Kürzlich angelegte Bücher', - 'recently_update' => 'Kürzlich aktualisiert', - 'recently_viewed' => 'Kürzlich angesehen', - 'recent_activity' => 'Kürzliche Aktivität', + 'recently_created' => 'Kürzlich angelegt', + 'recently_created_pages' => 'Kürzlich angelegte Seiten', + 'recently_updated_pages' => 'Kürzlich aktualisierte Seiten', + 'recently_created_chapters' => 'Kürzlich angelegte Kapitel', + 'recently_created_books' => 'Kürzlich angelegte Bücher', + 'recently_update' => 'Kürzlich aktualisiert', + 'recently_viewed' => 'Kürzlich angesehen', + 'recent_activity' => 'Kürzliche Aktivität', 'create_now' => 'Jetzt anlegen', - 'revisions' => 'Revisionen', - 'meta_created' => 'Angelegt am :timeLength', - 'meta_created_name' => 'Angelegt am :timeLength durch :user', - 'meta_updated' => 'Aktualisiert am :timeLength', - 'meta_updated_name' => 'Aktualisiert am :timeLength durch :user', + 'revisions' => 'Versionen', + 'meta_revision' => 'Version #:revisionCount', + 'meta_created' => 'Erstellt: :timeLength', + 'meta_created_name' => 'Erstellt: :timeLength von :user', + 'meta_updated' => 'Zuletzt aktualisiert: :timeLength', + 'meta_updated_name' => 'Zuletzt aktualisiert: :timeLength von :user', 'x_pages' => ':count Seiten', - 'entity_select' => 'Eintrag auswählen', + 'entity_select' => 'Eintrag auswählen', 'images' => 'Bilder', - 'my_recent_drafts' => 'Meine kürzlichen Entwürfe', - 'my_recently_viewed' => 'Kürzlich von mir angesehen', + 'my_recent_drafts' => 'Meine kürzlichen Entwürfe', + 'my_recently_viewed' => 'Kürzlich von mir angesehen', 'no_pages_viewed' => 'Sie haben bisher keine Seiten angesehen.', 'no_pages_recently_created' => 'Sie haben bisher keine Seiten angelegt.', 'no_pages_recently_updated' => 'Sie haben bisher keine Seiten aktualisiert.', 'export' => 'Exportieren', 'export_html' => 'HTML-Datei', 'export_pdf' => 'PDF-Datei', - 'export_text' => 'Text-Datei', + 'export_text' => 'Textdatei', /** * Permissions and restrictions */ 'permissions' => 'Berechtigungen', - 'permissions_intro' => 'Wenn individuelle Berechtigungen aktiviert werden, überschreiben diese Einstellungen durch Rollen zugewiesene Berechtigungen.', + 'permissions_intro' => 'Wenn individuelle Berechtigungen aktiviert werden, überschreiben diese Einstellungen durch Rollen zugewiesene Berechtigungen.', 'permissions_enable' => 'Individuelle Berechtigungen aktivieren', 'permissions_save' => 'Berechtigungen speichern', @@ -43,41 +44,58 @@ return [ * Search */ 'search_results' => 'Suchergebnisse', - 'search_clear' => 'Suche zurücksetzen', - 'search_no_pages' => 'Es wurden keine passenden Suchergebnisse gefunden', - 'search_for_term' => 'Suche nach :term', + 'search_total_results_found' => ':count Ergebnis gefunden|:count Ergebnisse gesamt', + 'search_clear' => 'Filter löschen', + 'search_no_pages' => 'Keine Seiten gefunden', + 'search_for_term' => 'Nach :term suchen', + 'search_more' => 'Mehr Ergebnisse', + 'search_filters' => 'Filter', + 'search_content_type' => 'Inhaltstyp', + 'search_exact_matches' => 'Exakte Treffer', + 'search_tags' => 'Nach Schlagwort suchen', + 'search_viewed_by_me' => 'Schon von mir angesehen', + 'search_not_viewed_by_me' => 'Noch nicht von mir angesehen', + 'search_permissions_set' => 'Berechtigungen gesetzt', + 'search_created_by_me' => 'Von mir erstellt', + 'search_updated_by_me' => 'Von mir aktualisiert', + 'search_updated_before' => 'Aktualisiert vor', + 'search_updated_after' => 'Aktualisiert nach', + 'search_created_before' => 'Erstellt vor', + 'search_created_after' => 'Erstellt nach', + 'search_set_date' => 'Datum auswählen', + 'search_update' => 'Suche aktualisieren', /** * Books */ 'book' => 'Buch', - 'books' => 'Bücher', - 'books_empty' => 'Es wurden keine Bücher angelegt', - 'books_popular' => 'Populäre Bücher', - 'books_recent' => 'Kürzlich genutzte Bücher', - 'books_popular_empty' => 'Die populärsten Bücher werden hier angezeigt.', - 'books_create' => 'Neues Buch anlegen', - 'books_delete' => 'Buch löschen', - 'books_delete_named' => 'Buch :bookName löschen', - 'books_delete_explain' => 'Sie möchten das Buch \':bookName\' löschen und alle Seiten und Kapitel entfernen.', - 'books_delete_confirmation' => 'Sind Sie sicher, dass Sie dieses Buch löschen möchten?', + 'books' => 'Bücher', + 'books_empty' => 'Keine Bücher vorhanden', + 'books_popular' => 'Beliebte Bücher', + 'books_recent' => 'Kürzlich angesehene Bücher', + 'books_popular_empty' => 'Die beliebtesten Bücher werden hier angezeigt.', + 'books_create' => 'Neues Buch erstellen', + 'books_delete' => 'Buch löschen', + 'books_delete_named' => 'Buch ":bookName" löschen', + 'books_delete_explain' => 'Das Buch ":bookName" wird gelöscht und alle zugehörigen Kapitel und Seiten entfernt.', + 'books_delete_confirmation' => 'Sind Sie sicher, dass Sie dieses Buch löschen möchten?', 'books_edit' => 'Buch bearbeiten', - 'books_edit_named' => 'Buch :bookName bearbeiten', - 'books_form_book_name' => 'Buchname', + 'books_edit_named' => 'Buch ":bookName" bearbeiten', + 'books_form_book_name' => 'Name des Buches', 'books_save' => 'Buch speichern', 'books_permissions' => 'Buch-Berechtigungen', 'books_permissions_updated' => 'Buch-Berechtigungen aktualisiert', - 'books_empty_contents' => 'Es sind noch keine Seiten oder Kapitel für dieses Buch angelegt.', + 'books_empty_contents' => 'Es sind noch keine Seiten oder Kapitel zu diesem Buch hinzugefügt worden.', 'books_empty_create_page' => 'Neue Seite anlegen', 'books_empty_or' => 'oder', 'books_empty_sort_current_book' => 'Aktuelles Buch sortieren', - 'books_empty_add_chapter' => 'Neues Kapitel hinzufügen', + 'books_empty_add_chapter' => 'Neues Kapitel hinzufügen', 'books_permissions_active' => 'Buch-Berechtigungen aktiv', 'books_search_this' => 'Dieses Buch durchsuchen', - 'books_navigation' => 'Buch-Navigation', + 'books_navigation' => 'Buchnavigation', 'books_sort' => 'Buchinhalte sortieren', - 'books_sort_named' => 'Buch :bookName sortieren', - 'books_sort_show_other' => 'Andere Bücher zeigen', + 'books_sort_named' => 'Buch ":bookName" sortieren', + 'books_sort_show_other' => 'Andere Bücher anzeigen', 'books_sort_save' => 'Neue Reihenfolge speichern', /** @@ -85,145 +103,147 @@ return [ */ 'chapter' => 'Kapitel', 'chapters' => 'Kapitel', - 'chapters_popular' => 'Populäre Kapitel', + 'chapters_popular' => 'Beliebte Kapitel', 'chapters_new' => 'Neues Kapitel', 'chapters_create' => 'Neues Kapitel anlegen', 'chapters_delete' => 'Kapitel entfernen', - 'chapters_delete_named' => 'Kapitel :chapterName entfernen', - 'chapters_delete_explain' => 'Sie möchten das Kapitel \':chapterName\' löschen und alle Seiten dem direkten Eltern-Buch hinzugefügen.', - 'chapters_delete_confirm' => 'Sind Sie sicher, dass Sie dieses Kapitel löschen möchten?', + 'chapters_delete_named' => 'Kapitel ":chapterName" entfernen', + 'chapters_delete_explain' => 'Das Kapitel ":chapterName" wird gelöscht und alle zugehörigen Seiten dem übergeordneten Buch zugeordnet.', + 'chapters_delete_confirm' => 'Sind Sie sicher, dass Sie dieses Kapitel löschen möchten?', 'chapters_edit' => 'Kapitel bearbeiten', - 'chapters_edit_named' => 'Kapitel :chapterName bearbeiten', + 'chapters_edit_named' => 'Kapitel ":chapterName" bearbeiten', 'chapters_save' => 'Kapitel speichern', 'chapters_move' => 'Kapitel verschieben', - 'chapters_move_named' => 'Kapitel :chapterName verschieben', - 'chapter_move_success' => 'Kapitel in das Buch :bookName verschoben.', + 'chapters_move_named' => 'Kapitel ":chapterName" verschieben', + 'chapter_move_success' => 'Das Kapitel wurde in das Buch ":bookName" verschoben.', 'chapters_permissions' => 'Kapitel-Berechtigungen', - 'chapters_empty' => 'Aktuell sind keine Kapitel in diesem Buch angelegt.', + 'chapters_empty' => 'Aktuell sind keine Kapitel diesem Buch hinzugefügt worden.', 'chapters_permissions_active' => 'Kapitel-Berechtigungen aktiv', 'chapters_permissions_success' => 'Kapitel-Berechtigungenen aktualisisert', + 'chapters_search_this' => 'Dieses Kapitel durchsuchen', /** * Pages */ 'page' => 'Seite', 'pages' => 'Seiten', - 'pages_popular' => 'Populäre Seiten', + 'pages_popular' => 'Beliebte Seiten', 'pages_new' => 'Neue Seite', - 'pages_attachments' => 'Anhänge', + 'pages_attachments' => 'Anhänge', 'pages_navigation' => 'Seitennavigation', - 'pages_delete' => 'Seite löschen', - 'pages_delete_named' => 'Seite :pageName löschen', - 'pages_delete_draft_named' => 'Seitenentwurf von :pageName löschen', - 'pages_delete_draft' => 'Seitenentwurf löschen', - 'pages_delete_success' => 'Seite gelöscht', - 'pages_delete_draft_success' => 'Seitenentwurf gelöscht', - 'pages_delete_confirm' => 'Sind Sie sicher, dass Sie diese Seite löschen möchen?', - 'pages_delete_draft_confirm' => 'Sind Sie sicher, dass Sie diesen Seitenentwurf löschen möchten?', - 'pages_editing_named' => 'Seite :pageName bearbeiten', - 'pages_edit_toggle_header' => 'Toggle header', + 'pages_delete' => 'Seite löschen', + 'pages_delete_named' => 'Seite ":pageName" löschen', + 'pages_delete_draft_named' => 'Seitenentwurf von ":pageName" löschen', + 'pages_delete_draft' => 'Seitenentwurf löschen', + 'pages_delete_success' => 'Seite gelöscht', + 'pages_delete_draft_success' => 'Seitenentwurf gelöscht', + 'pages_delete_confirm' => 'Sind Sie sicher, dass Sie diese Seite löschen möchen?', + 'pages_delete_draft_confirm' => 'Sind Sie sicher, dass Sie diesen Seitenentwurf löschen möchten?', + 'pages_editing_named' => 'Seite ":pageName" bearbeiten', + 'pages_edit_toggle_header' => 'Hauptmenü anzeigen/verstecken', 'pages_edit_save_draft' => 'Entwurf speichern', 'pages_edit_draft' => 'Seitenentwurf bearbeiten', 'pages_editing_draft' => 'Seitenentwurf bearbeiten', 'pages_editing_page' => 'Seite bearbeiten', 'pages_edit_draft_save_at' => 'Entwurf gespeichert um ', - 'pages_edit_delete_draft' => 'Entwurf löschen', + 'pages_edit_delete_draft' => 'Entwurf löschen', 'pages_edit_discard_draft' => 'Entwurf verwerfen', - 'pages_edit_set_changelog' => 'Veränderungshinweis setzen', - 'pages_edit_enter_changelog_desc' => 'Bitte geben Sie eine kurze Zusammenfassung Ihrer Änderungen ein', - 'pages_edit_enter_changelog' => 'Veränderungshinweis eingeben', + 'pages_edit_set_changelog' => 'Änderungsprotokoll hinzufügen', + 'pages_edit_enter_changelog_desc' => 'Bitte geben Sie eine kurze Zusammenfassung Ihrer Änderungen ein', + 'pages_edit_enter_changelog' => 'Änderungsprotokoll eingeben', 'pages_save' => 'Seite speichern', 'pages_title' => 'Seitentitel', 'pages_name' => 'Seitenname', 'pages_md_editor' => 'Redakteur', 'pages_md_preview' => 'Vorschau', - 'pages_md_insert_image' => 'Bild einfügen', - 'pages_md_insert_link' => 'Link zu einem Objekt einfügen', + 'pages_md_insert_image' => 'Bild einfügen', + 'pages_md_insert_link' => 'Link zu einem Objekt einfügen', 'pages_not_in_chapter' => 'Seite ist in keinem Kapitel', 'pages_move' => 'Seite verschieben', 'pages_move_success' => 'Seite nach ":parentName" verschoben', 'pages_permissions' => 'Seiten Berechtigungen', 'pages_permissions_success' => 'Seiten Berechtigungen aktualisiert', 'pages_revisions' => 'Seitenversionen', - 'pages_revisions_named' => 'Seitenversionen von :pageName', - 'pages_revision_named' => 'Seitenversion von :pageName', - 'pages_revisions_created_by' => 'Angelegt von', + 'pages_revisions_named' => 'Seitenversionen von ":pageName"', + 'pages_revision_named' => 'Seitenversion von ":pageName"', + 'pages_revisions_created_by' => 'Erstellt von', 'pages_revisions_date' => 'Versionsdatum', - 'pages_revisions_changelog' => 'Veränderungshinweise', - 'pages_revisions_changes' => 'Veränderungen', + 'pages_revisions_number' => '#', + 'pages_revisions_changelog' => 'Änderungsprotokoll', + 'pages_revisions_changes' => 'Änderungen', 'pages_revisions_current' => 'Aktuelle Version', 'pages_revisions_preview' => 'Vorschau', - 'pages_revisions_restore' => 'Zurück sichern', - 'pages_revisions_none' => 'Diese Seite hat keine älteren Versionen.', + 'pages_revisions_restore' => 'Wiederherstellen', + 'pages_revisions_none' => 'Diese Seite hat keine älteren Versionen.', 'pages_copy_link' => 'Link kopieren', 'pages_permissions_active' => 'Seiten-Berechtigungen aktiv', - 'pages_initial_revision' => 'Erste Veröffentlichung', + 'pages_initial_revision' => 'Erste Veröffentlichung', 'pages_initial_name' => 'Neue Seite', - 'pages_editing_draft_notification' => 'Sie bearbeiten momenten einen Entwurf, der zuletzt um :timeDiff gespeichert wurde.', - 'pages_draft_edited_notification' => 'Diese Seite wurde seit diesem Zeitpunkt verändert. Wir empfehlen Ihnen, diesen Entwurf zu verwerfen.', + 'pages_editing_draft_notification' => 'Sie bearbeiten momenten einen Entwurf, der zuletzt :timeDiff gespeichert wurde.', + 'pages_draft_edited_notification' => 'Diese Seite wurde seit diesem Zeitpunkt verändert. Wir empfehlen Ihnen, diesen Entwurf zu verwerfen.', 'pages_draft_edit_active' => [ - 'start_a' => ':count Benutzer haben die Bearbeitung dieser Seite begonnen.', - 'start_b' => ':userName hat die Bearbeitung dieser Seite begonnen.', + 'start_a' => ':count Benutzer bearbeiten derzeit diese Seite.', + 'start_b' => ':userName bearbeitet jetzt diese Seite.', 'time_a' => 'seit die Seiten zuletzt aktualisiert wurden.', 'time_b' => 'in den letzten :minCount Minuten', - 'message' => ':start :time. Achten Sie darauf keine Aktualisierungen von anderen Benutzern zu überschreiben!', + 'message' => ':start :time. Achten Sie darauf, keine Änderungen von anderen Benutzern zu überschreiben!', ], 'pages_draft_discarded' => 'Entwurf verworfen. Der aktuelle Seiteninhalt wurde geladen.', /** * Editor sidebar */ - 'page_tags' => 'Seiten-Schlagwörter', + 'page_tags' => 'Seiten-Schlagwörter', 'tag' => 'Schlagwort', - 'tags' => 'Schlagworte', - 'tag_value' => 'Schlagwortinhalt (Optional)', - 'tags_explain' => "Fügen Sie Schlagworte hinzu, um Ihren Inhalt zu kategorisieren. \n Sie können einen erklärenden Inhalt hinzufügen, um eine genauere Unterteilung vorzunehmen.", - 'tags_add' => 'Weiteres Schlagwort hinzufügen', - 'attachments' => 'Anhänge', - 'attachments_explain' => 'Sie können auf Ihrer Seite Dateien hochladen oder Links anfügen. Diese werden in der seitlich angezeigt.', - 'attachments_explain_instant_save' => 'Änderungen werden direkt gespeichert.', - 'attachments_items' => 'Angefügte Elemente', + 'tags' => 'Schlagwörter', + 'tag_value' => 'Inhalt (Optional)', + 'tags_explain' => "Fügen Sie Schlagwörter hinzu, um Ihren Inhalt zu kategorisieren.\nSie können einen erklärenden Inhalt hinzufügen, um eine genauere Unterteilung vorzunehmen.", + 'tags_add' => 'Weiteres Schlagwort hinzufügen', + 'attachments' => 'Anhänge', + 'attachments_explain' => 'Sie können auf Ihrer Seite Dateien hochladen oder Links hinzufügen. Diese werden in der Seitenleiste angezeigt.', + 'attachments_explain_instant_save' => 'Änderungen werden direkt gespeichert.', + 'attachments_items' => 'Angefügte Elemente', 'attachments_upload' => 'Datei hochladen', - 'attachments_link' => 'Link anfügen', + 'attachments_link' => 'Link hinzufügen', 'attachments_set_link' => 'Link setzen', - 'attachments_delete_confirm' => 'Klicken Sie erneut auf löschen, um diesen Anhang zu entfernen.', - 'attachments_dropzone' => 'Ziehen Sie Dateien hier hinein oder klicken Sie hier, um eine Datei auszuwählen', + 'attachments_delete_confirm' => 'Klicken Sie erneut auf löschen, um diesen Anhang zu entfernen.', + 'attachments_dropzone' => 'Ziehen Sie Dateien hierher oder klicken Sie, um eine Datei auszuwählen', 'attachments_no_files' => 'Es wurden bisher keine Dateien hochgeladen.', - 'attachments_explain_link' => 'Wenn Sie keine Datei hochladen möchten, können Sie stattdessen einen Link anfügen. Dieser Link kann auf eine andere Seite oder zu einer Datei in der Cloud weisen.', + 'attachments_explain_link' => 'Wenn Sie keine Datei hochladen möchten, können Sie stattdessen einen Link hinzufügen. Dieser Link kann auf eine andere Seite oder eine Datei im Internet weisen.', 'attachments_link_name' => 'Link-Name', 'attachment_link' => 'Link zum Anhang', 'attachments_link_url' => 'Link zu einer Datei', 'attachments_link_url_hint' => 'URL einer Seite oder Datei', - 'attach' => 'anfügen', + 'attach' => 'Hinzufügen', 'attachments_edit_file' => 'Datei bearbeiten', 'attachments_edit_file_name' => 'Dateiname', - 'attachments_edit_drop_upload' => 'Ziehen Sie Dateien hier hinein, um diese hochzuladen und zu überschreiben', - 'attachments_order_updated' => 'Reihenfolge der Anhänge aktualisiert', - 'attachments_updated_success' => 'Anhang-Details aktualisiert', - 'attachments_deleted' => 'Anhang gelöscht', - 'attachments_file_uploaded' => 'Datei erfolgrecich hochgeladen', - 'attachments_file_updated' => 'Datei erfolgreich aktualisisert', - 'attachments_link_attached' => 'Link erfolgreich der Seite hinzugefügt', + 'attachments_edit_drop_upload' => 'Ziehen Sie Dateien hierher, um diese hochzuladen und zu überschreiben', + 'attachments_order_updated' => 'Reihenfolge der Anhänge aktualisiert', + 'attachments_updated_success' => 'Anhangdetails aktualisiert', + 'attachments_deleted' => 'Anhang gelöscht', + 'attachments_file_uploaded' => 'Datei erfolgreich hochgeladen', + 'attachments_file_updated' => 'Datei erfolgreich aktualisiert', + 'attachments_link_attached' => 'Link erfolgreich der Seite hinzugefügt', /** * Profile View */ 'profile_user_for_x' => 'Benutzer seit :time', - 'profile_created_content' => 'Angelegte Inhalte', - 'profile_not_created_pages' => ':userName hat bisher keine Seiten angelegt.', - 'profile_not_created_chapters' => ':userName hat bisher keine Kapitel angelegt.', - 'profile_not_created_books' => ':userName hat bisher keine Bücher angelegt.', + 'profile_created_content' => 'Erstellte Inhalte', + 'profile_not_created_pages' => ':userName hat noch keine Seiten erstellt.', + 'profile_not_created_chapters' => ':userName hat noch keine Kapitel erstellt.', + 'profile_not_created_books' => ':userName hat noch keine Bücher erstellt.', /** * Comnents */ 'comment' => 'Kommentar', 'comments' => 'Kommentare', - 'comment_placeholder' => 'Geben Sie hier Ihre Kommentare ein, Markdown unterstützt ...', + 'comment_placeholder' => 'Geben Sie hier Ihre Kommentare ein (Markdown unterstützt)', 'no_comments' => 'Keine Kommentare', 'x_comments' => ':numComments Kommentare', 'one_comment' => '1 Kommentar', - 'comments_loading' => 'Laden ...', + 'comments_loading' => 'Laden...', 'comment_save' => 'Kommentar speichern', 'comment_reply' => 'Antworten', 'comment_edit' => 'Bearbeiten', @@ -233,7 +253,7 @@ return [ 'comment_updated' => 'Kommentar aktualisiert', 'comment_deleted' => 'Kommentar gelöscht', 'comment_updated_text' => 'Aktualisiert vor :updateDiff von', - 'comment_delete_confirm' => 'Damit wird der Inhalt des Kommentars entfernt. Bist du sicher, dass du diesen Kommentar löschen möchtest?', + 'comment_delete_confirm' => 'Der Inhalt des Kommentars wird entfernt. Bist du sicher, dass du diesen Kommentar löschen möchtest?', 'comment_create' => 'Erstellt' -]; \ No newline at end of file +]; diff --git a/resources/lang/de/errors.php b/resources/lang/de/errors.php index ff045d628..0b961f8ee 100644 --- a/resources/lang/de/errors.php +++ b/resources/lang/de/errors.php @@ -7,37 +7,37 @@ return [ */ // Pages - 'permission' => 'Sie haben keine Berechtigung auf diese Seite zuzugreifen.', - 'permissionJson' => 'Sie haben keine Berechtigung die angeforderte Aktion auszuführen.', + 'permission' => 'Sie haben keine Berechtigung, auf diese Seite zuzugreifen.', + 'permissionJson' => 'Sie haben keine Berechtigung, die angeforderte Aktion auszuführen.', // Auth - 'error_user_exists_different_creds' => 'Ein Benutzer mit der E-Mail-Adresse :email ist bereits mit anderen Anmeldedaten angelegt.', - 'email_already_confirmed' => 'Die E-Mail-Adresse ist bereits bestätigt. Bitte melden Sie sich an.', - 'email_confirmation_invalid' => 'Der Bestätigungs-Token ist nicht gültig oder wurde bereits verwendet. Bitte registrieren Sie sich erneut.', - 'email_confirmation_expired' => 'Der Bestätigungs-Token ist abgelaufen. Es wurde eine neue Bestätigungs-E-Mail gesendet.', - 'ldap_fail_anonymous' => 'Anonymer LDAP Zugriff ist fehlgeschlafgen', - 'ldap_fail_authed' => 'LDAP Zugriff mit DN & Passwort ist fehlgeschlagen', - 'ldap_extension_not_installed' => 'LDAP PHP Erweiterung ist nicht installiert.', - 'ldap_cannot_connect' => 'Die Verbindung zu LDAP-Server ist fehlgeschlagen. Beim initialen Verbindungsaufbau trat ein Fehler auf.', + 'error_user_exists_different_creds' => 'Ein Benutzer mit der E-Mail-Adresse :email ist bereits mit anderen Anmeldedaten registriert.', + 'email_already_confirmed' => 'Die E-Mail-Adresse ist bereits bestätigt. Bitte melden Sie sich an.', + 'email_confirmation_invalid' => 'Der Bestätigungslink ist nicht gültig oder wurde bereits verwendet. Bitte registrieren Sie sich erneut.', + 'email_confirmation_expired' => 'Der Bestätigungslink ist abgelaufen. Es wurde eine neue Bestätigungs-E-Mail gesendet.', + 'ldap_fail_anonymous' => 'Anonymer LDAP-Zugriff ist fehlgeschlafgen', + 'ldap_fail_authed' => 'LDAP-Zugriff mit DN und Passwort ist fehlgeschlagen', + 'ldap_extension_not_installed' => 'LDAP-PHP-Erweiterung ist nicht installiert.', + 'ldap_cannot_connect' => 'Die Verbindung zum LDAP-Server ist fehlgeschlagen. Beim initialen Verbindungsaufbau trat ein Fehler auf.', 'social_no_action_defined' => 'Es ist keine Aktion definiert', - 'social_account_in_use' => 'Dieses :socialAccount Konto wird bereits verwendet. Bitte melden Sie sich mit dem :socialAccount Konto an.', - 'social_account_email_in_use' => 'Die E-Mail-Adresse :email ist bereits registriert. Wenn Sie bereits registriert sind, können Sie Ihr :socialAccount Konto in Ihren Profil-Einstellungen verknüpfen.', - 'social_account_existing' => 'Dieses :socialAccount Konto ist bereits mit Ihrem Profil verknüpft.', - 'social_account_already_used_existing' => 'Dieses :socialAccount Konto wird bereits durch einen anderen Benutzer verwendet.', - 'social_account_not_used' => 'Dieses :socialAccount Konto ist bisher keinem Benutzer zugeordnet. Bitte verknüpfen Sie deses in Ihrem Profil-Einstellungen.', - 'social_account_register_instructions' => 'Wenn Sie bisher keinen Social-Media Konto besitzen können Sie ein solches Konto mit der :socialAccount Option anlegen.', - 'social_driver_not_found' => 'Social-Media Konto Treiber nicht gefunden', - 'social_driver_not_configured' => 'Ihr :socialAccount Konto ist nicht korrekt konfiguriert.', + 'social_account_in_use' => 'Dieses :socialAccount-Konto wird bereits verwendet. Bitte melden Sie sich mit dem :socialAccount-Konto an.', + 'social_account_email_in_use' => 'Die E-Mail-Adresse ":email" ist bereits registriert. Wenn Sie bereits registriert sind, können Sie Ihr :socialAccount-Konto in Ihren Profil-Einstellungen verknüpfen.', + 'social_account_existing' => 'Dieses :socialAccount-Konto ist bereits mit Ihrem Profil verknüpft.', + 'social_account_already_used_existing' => 'Dieses :socialAccount-Konto wird bereits von einem anderen Benutzer verwendet.', + 'social_account_not_used' => 'Dieses :socialAccount-Konto ist bisher keinem Benutzer zugeordnet. Sie können es in Ihren Profil-Einstellung.', + 'social_account_register_instructions' => 'Wenn Sie bisher keinen Social-Media Konto besitzen, können Sie ein solches Konto mit der :socialAccount Option anlegen.', + 'social_driver_not_found' => 'Treiber für Social-Media-Konten nicht gefunden', + 'social_driver_not_configured' => 'Ihr :socialAccount-Konto ist nicht korrekt konfiguriert.', // System 'path_not_writable' => 'Die Datei kann nicht in den angegebenen Pfad :filePath hochgeladen werden. Stellen Sie sicher, dass dieser Ordner auf dem Server beschreibbar ist.', 'cannot_get_image_from_url' => 'Bild konnte nicht von der URL :url geladen werden.', - 'cannot_create_thumbs' => 'Der Server kann keine Vorschau-Bilder erzeugen. Bitte prüfen Sie, ob Sie die GD PHP Erweiterung installiert haben.', - 'server_upload_limit' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuchen Sie es mit einer kleineren Datei.', + 'cannot_create_thumbs' => 'Der Server kann keine Vorschau-Bilder erzeugen. Bitte prüfen Sie, ob die GD PHP-Erweiterung installiert ist.', + 'server_upload_limit' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuchen Sie es mit einer kleineren Datei.', 'image_upload_error' => 'Beim Hochladen des Bildes trat ein Fehler auf.', // Attachments - 'attachment_page_mismatch' => 'Die Seite stimmt nach dem Hochladen des Anhangs nicht überein.', + 'attachment_page_mismatch' => 'Die Seite stimmte nach dem Hochladen des Anhangs nicht überein.', // Pages 'page_draft_autosave_fail' => 'Fehler beim Speichern des Entwurfs. Stellen Sie sicher, dass Sie mit dem Internet verbunden sind, bevor Sie den Entwurf dieser Seite speichern.', @@ -47,26 +47,18 @@ return [ 'book_not_found' => 'Buch nicht gefunden', 'page_not_found' => 'Seite nicht gefunden', 'chapter_not_found' => 'Kapitel nicht gefunden', - 'selected_book_not_found' => 'Das gewählte Buch wurde nicht gefunden.', - 'selected_book_chapter_not_found' => 'Das gewählte Buch oder Kapitel wurde nicht gefunden.', - 'guests_cannot_save_drafts' => 'Gäste können keine Entwürfe speichern', + 'selected_book_not_found' => 'Das gewählte Buch wurde nicht gefunden.', + 'selected_book_chapter_not_found' => 'Das gewählte Buch oder Kapitel wurde nicht gefunden.', + 'guests_cannot_save_drafts' => 'Gäste können keine Entwürfe speichern', // Users - 'users_cannot_delete_only_admin' => 'Sie können den einzigen Administrator nicht löschen.', - 'users_cannot_delete_guest' => 'Sie können den Gast-Benutzer nicht löschen', + 'users_cannot_delete_only_admin' => 'Sie können den einzigen Administrator nicht löschen.', + 'users_cannot_delete_guest' => 'Sie können den Gast-Benutzer nicht löschen', // Roles 'role_cannot_be_edited' => 'Diese Rolle kann nicht bearbeitet werden.', - 'role_system_cannot_be_deleted' => 'Dies ist eine Systemrolle und kann nicht gelöscht werden', - 'role_registration_default_cannot_delete' => 'Diese Rolle kann nicht gelöscht werden solange sie als Standardrolle für neue Registrierungen gesetzt ist', - - // Error pages - '404_page_not_found' => 'Seite nicht gefunden', - 'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Sie angefordert haben wurde nicht gefunden.', - 'return_home' => 'Zurück zur Startseite', - 'error_occurred' => 'Es ist ein Fehler aufgetreten', - 'app_down' => ':appName befindet sich aktuell im Wartungsmodus.', - 'back_soon' => 'Wir werden so schnell wie möglich wieder online sein.', + 'role_system_cannot_be_deleted' => 'Dies ist eine Systemrolle und kann nicht gelöscht werden', + 'role_registration_default_cannot_delete' => 'Diese Rolle kann nicht gelöscht werden, solange sie als Standardrolle für neue Registrierungen gesetzt ist', // Comments 'comment_list' => 'Beim Abrufen der Kommentare ist ein Fehler aufgetreten.', @@ -74,4 +66,12 @@ return [ 'comment_add' => 'Beim Hinzufügen des Kommentars ist ein Fehler aufgetreten.', 'comment_delete' => 'Beim Löschen des Kommentars ist ein Fehler aufgetreten.', 'empty_comment' => 'Kann keinen leeren Kommentar hinzufügen', + + // Error pages + '404_page_not_found' => 'Seite nicht gefunden', + 'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Sie angefordert haben, wurde nicht gefunden.', + 'return_home' => 'Zurück zur Startseite', + 'error_occurred' => 'Es ist ein Fehler aufgetreten', + 'app_down' => ':appName befindet sich aktuell im Wartungsmodus.', + 'back_soon' => 'Wir werden so schnell wie möglich wieder online sein.' ]; diff --git a/resources/lang/de/pagination.php b/resources/lang/de/pagination.php index a3bf7c8c8..6ed0e30f0 100644 --- a/resources/lang/de/pagination.php +++ b/resources/lang/de/pagination.php @@ -14,6 +14,6 @@ return [ */ 'previous' => '« Vorherige', - 'next' => 'Nächste »', + 'next' => 'Nächste »', ]; diff --git a/resources/lang/de/passwords.php b/resources/lang/de/passwords.php index c44b49baa..25ed05a04 100644 --- a/resources/lang/de/passwords.php +++ b/resources/lang/de/passwords.php @@ -13,10 +13,10 @@ return [ | */ - 'password' => 'Passörter müssen mindestens sechs Zeichen enthalten und die Wiederholung muss identisch sein.', - 'user' => "Wir können keinen Benutzer mit dieser E-Mail Adresse finden.", - 'token' => 'Dieser Passwort-Reset-Token ist ungültig.', - 'sent' => 'Wir haben Ihnen eine E-Mail mit einem Link zum Zurücksetzen des Passworts zugesendet!', - 'reset' => 'Ihr Passwort wurde zurückgesetzt!', + 'password' => 'Passörter müssen mindestens sechs Zeichen enthalten und die Wiederholung muss übereinstimmen.', + 'user' => "Es konnte kein Benutzer mit dieser E-Mail-Adresse gefunden werden.", + 'token' => 'Dieser Link zum Zurücksetzen des Passwortes ist ungültig.', + 'sent' => 'Wir haben Ihnen eine E-Mail mit einem Link zum Zurücksetzen des Passworts zugesendet!', + 'reset' => 'Ihr Passwort wurde zurückgesetzt!', ]; diff --git a/resources/lang/de/settings.php b/resources/lang/de/settings.php index 668eecf33..9435ec808 100644 --- a/resources/lang/de/settings.php +++ b/resources/lang/de/settings.php @@ -20,17 +20,17 @@ return [ 'app_name' => 'Anwendungsname', 'app_name_desc' => 'Dieser Name wird im Header und in E-Mails angezeigt.', 'app_name_header' => 'Anwendungsname im Header anzeigen?', - 'app_public_viewing' => 'Öffentliche Ansicht erlauben?', - 'app_secure_images' => 'Erhöhte Sicherheit für Bilduploads aktivieren?', - 'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten vor die Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnindexes deaktiviert sind, um einen einfachen Zugriff zu verhindern.', + 'app_public_viewing' => 'Öffentliche Ansicht erlauben?', + 'app_secure_images' => 'Erhöhte Sicherheit für hochgeladene Bilder aktivieren?', + 'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten zu Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnisindizes deaktiviert sind, um einen einfachen Zugriff zu verhindern.', 'app_editor' => 'Seiteneditor', - 'app_editor_desc' => 'Wählen sie den Editor aus, der von allen Benutzern genutzt werden soll, um Seiten zu editieren.', + 'app_editor_desc' => 'Wählen Sie den Editor aus, der von allen Benutzern genutzt werden soll, um Seiten zu editieren.', 'app_custom_html' => 'Benutzerdefinierter HTML <head> Inhalt', - 'app_custom_html_desc' => 'Jeder Inhalt, der hier hinzugefügt wird, wird am Ende der <head> Sektion jeder Seite eingefügt. Diese kann praktisch sein, um CSS Styles anzupassen oder Analytics Code hinzuzufügen.', + 'app_custom_html_desc' => 'Jeder Inhalt, der hier hinzugefügt wird, wird am Ende der <head> Sektion jeder Seite eingefügt. Diese kann praktisch sein, um CSS Styles anzupassen oder Analytics-Code hinzuzufügen.', 'app_logo' => 'Anwendungslogo', - 'app_logo_desc' => 'Dieses Bild sollte 43px hoch sein. <br>Größere Bilder werden verkleinert.', - 'app_primary_color' => 'Primäre Anwendungsfarbe', - 'app_primary_color_desc' => 'Dies sollte ein HEX Wert sein. <br>Wenn Sie nicht eingeben, wird die Anwendung auf die Standardfarbe zurückgesetzt.', + 'app_logo_desc' => "Dieses Bild sollte 43px hoch sein.\nGrößere Bilder werden verkleinert.", + 'app_primary_color' => 'Primäre Anwendungsfarbe', + 'app_primary_color_desc' => "Dies sollte ein HEX Wert sein.\nWenn Sie nicht eingeben, wird die Anwendung auf die Standardfarbe zurückgesetzt.", /** * Registration settings @@ -39,11 +39,11 @@ return [ 'reg_settings' => 'Registrierungseinstellungen', 'reg_allow' => 'Registrierung erlauben?', 'reg_default_role' => 'Standard-Benutzerrolle nach Registrierung', - 'reg_confirm_email' => 'Bestätigung per E-Mail erforderlich?', - 'reg_confirm_email_desc' => 'Falls die Einschränkung für Domains genutzt wird, ist die Bestätigung per E-Mail zwingend erforderlich und der untenstehende Wert wird ignoriert.', - 'reg_confirm_restrict_domain' => 'Registrierung auf bestimmte Domains einschränken', - 'reg_confirm_restrict_domain_desc' => 'Fügen sie eine, durch Komma getrennte, Liste von E-Mail Domains hinzu, auf die die Registrierung eingeschränkt werden soll. Benutzern wird eine E-Mail gesendet, um ihre E-Mail Adresse zu bestätigen, bevor sie diese Anwendung nutzen können. <br> Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung ändern.', - 'reg_confirm_restrict_domain_placeholder' => 'Keine Einschränkung gesetzt', + 'reg_confirm_email' => 'Bestätigung per E-Mail erforderlich?', + 'reg_confirm_email_desc' => 'Falls die Einschränkung für Domains genutzt wird, ist die Bestätigung per E-Mail zwingend erforderlich und der untenstehende Wert wird ignoriert.', + 'reg_confirm_restrict_domain' => 'Registrierung auf bestimmte Domains einschränken', + 'reg_confirm_restrict_domain_desc' => "Fügen sie eine durch Komma getrennte Liste von Domains hinzu, auf die die Registrierung eingeschränkt werden soll. Benutzern wird eine E-Mail gesendet, um ihre E-Mail Adresse zu bestätigen, bevor sie diese Anwendung nutzen können.\nHinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung ändern.", + 'reg_confirm_restrict_domain_placeholder' => 'Keine Einschränkung gesetzt', /** * Role settings @@ -53,31 +53,31 @@ return [ 'role_user_roles' => 'Benutzer-Rollen', 'role_create' => 'Neue Rolle anlegen', 'role_create_success' => 'Rolle erfolgreich angelegt', - 'role_delete' => 'Rolle löschen', - 'role_delete_confirm' => 'Sie möchten die Rolle \':roleName\' löschen.', - 'role_delete_users_assigned' => 'Diese Rolle ist :userCount Benutzern zugeordnet. Sie können unten eine neue Rolle auswählen, die Sie diesen Benutzern zuordnen möchten.', + 'role_delete' => 'Rolle löschen', + 'role_delete_confirm' => 'Sie möchten die Rolle ":roleName" löschen.', + 'role_delete_users_assigned' => 'Diese Rolle ist :userCount Benutzern zugeordnet. Sie können unten eine neue Rolle auswählen, die Sie diesen Benutzern zuordnen möchten.', 'role_delete_no_migration' => "Den Benutzern keine andere Rolle zuordnen", - 'role_delete_sure' => 'Sind Sie sicher, dass Sie diese Rolle löschen möchten?', - 'role_delete_success' => 'Rolle erfolgreich gelöscht', + 'role_delete_sure' => 'Sind Sie sicher, dass Sie diese Rolle löschen möchten?', + 'role_delete_success' => 'Rolle erfolgreich gelöscht', 'role_edit' => 'Rolle bearbeiten', - 'role_details' => 'Rollen-Details', + 'role_details' => 'Rollendetails', 'role_name' => 'Rollenname', 'role_desc' => 'Kurzbeschreibung der Rolle', 'role_system' => 'System-Berechtigungen', 'role_manage_users' => 'Benutzer verwalten', - 'role_manage_roles' => 'Rollen & Rollen-Berechtigungen verwalten', - 'role_manage_entity_permissions' => 'Alle Buch-, Kapitel und Seiten-Berechtigungen verwalten', - 'role_manage_own_entity_permissions' => 'Nur Berechtigungen eigener Bücher, Kapitel und Seiten verwalten', - 'role_manage_settings' => 'Globaleinstellungen verwalrten', + 'role_manage_roles' => 'Rollen und Rollen-Berechtigungen verwalten', + 'role_manage_entity_permissions' => 'Alle Buch-, Kapitel- und Seiten-Berechtigungen verwalten', + 'role_manage_own_entity_permissions' => 'Nur Berechtigungen eigener Bücher, Kapitel und Seiten verwalten', + 'role_manage_settings' => 'Globaleinstellungen verwalten', 'role_asset' => 'Berechtigungen', - 'role_asset_desc' => 'Diese Berechtigungen gelten für den Standard-Zugriff innerhalb des Systems. Berechtigungen für Bücher, Kapitel und Seiten überschreiben diese Berechtigungenen.', + 'role_asset_desc' => 'Diese Berechtigungen gelten für den Standard-Zugriff innerhalb des Systems. Berechtigungen für Bücher, Kapitel und Seiten überschreiben diese Berechtigungenen.', 'role_all' => 'Alle', 'role_own' => 'Eigene', - 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', + 'role_controlled_by_asset' => 'Berechtigungen werden vom Uploadziel bestimmt', 'role_save' => 'Rolle speichern', 'role_update_success' => 'Rolle erfolgreich gespeichert', 'role_users' => 'Dieser Rolle zugeordnete Benutzer', - 'role_users_none' => 'Bisher sind dieser Rolle keiner Benutzer zugeordnet,', + 'role_users_none' => 'Bisher sind dieser Rolle keine Benutzer zugeordnet', /** * Users @@ -85,27 +85,27 @@ return [ 'users' => 'Benutzer', 'user_profile' => 'Benutzerprofil', - 'users_add_new' => 'Benutzer hinzufügen', + 'users_add_new' => 'Benutzer hinzufügen', 'users_search' => 'Benutzer suchen', 'users_role' => 'Benutzerrollen', 'users_external_auth_id' => 'Externe Authentifizierungs-ID', - 'users_password_warning' => 'Füllen Sie die folgenden Felder nur aus, wenn Sie Ihr Passwort ändern möchten:', - 'users_system_public' => 'Dieser Benutzer repräsentiert alle Gast-Benutzer, die diese Seite betrachten. Er kann nicht zum Anmelden benutzt werden, sondern wird automatisch zugeordnet.', - 'users_delete' => 'Benutzer löschen', - 'users_delete_named' => 'Benutzer :userName löschen', - 'users_delete_warning' => 'Sie möchten den Benutzer \':userName\' gänzlich aus dem System löschen.', - 'users_delete_confirm' => 'Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?', - 'users_delete_success' => 'Benutzer erfolgreich gelöscht.', + 'users_password_warning' => 'Füllen Sie die folgenden Felder nur aus, wenn Sie Ihr Passwort ändern möchten:', + 'users_system_public' => 'Dieser Benutzer repräsentiert alle unangemeldeten Benutzer, die diese Seite betrachten. Er kann nicht zum Anmelden benutzt werden, sondern wird automatisch zugeordnet.', + 'users_delete' => 'Benutzer löschen', + 'users_delete_named' => 'Benutzer ":userName" löschen', + 'users_delete_warning' => 'Der Benutzer ":userName" wird aus dem System gelöscht.', + 'users_delete_confirm' => 'Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?', + 'users_delete_success' => 'Benutzer erfolgreich gelöscht.', 'users_edit' => 'Benutzer bearbeiten', 'users_edit_profile' => 'Profil bearbeiten', 'users_edit_success' => 'Benutzer erfolgreich aktualisisert', 'users_avatar' => 'Benutzer-Bild', - 'users_avatar_desc' => 'Dieses Bild sollte einen Durchmesser von ca. 256px haben.', + 'users_avatar_desc' => 'Das Bild sollte eine Auflösung von 256x256px haben.', 'users_preferred_language' => 'Bevorzugte Sprache', 'users_social_accounts' => 'Social-Media Konten', - 'users_social_accounts_info' => 'Hier können Sie andere Social-Media Konten für eine schnellere und einfachere Anmeldung verknüpfen. Wenn Sie ein Social-Media Konto hier lösen, bleibt der Zugriff erhalteb. Entfernen Sie in diesem Falle die Berechtigung in Ihren Profil-Einstellungen des verknüpften Social-Media Kontos.', - 'users_social_connect' => 'Social-Media Konto verknüpfen', - 'users_social_disconnect' => 'Social-Media Kontoverknüpfung lösen', - 'users_social_connected' => ':socialAccount Konto wurde erfolgreich mit dem Profil verknüpft.', - 'users_social_disconnected' => ':socialAccount Konto wurde erfolgreich vom Profil gelöst.', + 'users_social_accounts_info' => 'Hier können Sie andere Social-Media-Konten für eine schnellere und einfachere Anmeldung verknüpfen. Wenn Sie ein Social-Media Konto lösen, bleibt der Zugriff erhalten. Entfernen Sie in diesem Falle die Berechtigung in Ihren Profil-Einstellungen des verknüpften Social-Media-Kontos.', + 'users_social_connect' => 'Social-Media-Konto verknüpfen', + 'users_social_disconnect' => 'Social-Media-Konto lösen', + 'users_social_connected' => ':socialAccount-Konto wurde erfolgreich mit dem Profil verknüpft.', + 'users_social_disconnected' => ':socialAccount-Konto wurde erfolgreich vom Profil gelöst.', ]; diff --git a/resources/lang/de/validation.php b/resources/lang/de/validation.php index 3a6a1bc15..5ac4b1b27 100644 --- a/resources/lang/de/validation.php +++ b/resources/lang/de/validation.php @@ -19,54 +19,54 @@ return [ 'alpha' => ':attribute kann nur Buchstaben enthalten.', 'alpha_dash' => ':attribute kann nur Buchstaben, Zahlen und Bindestriche enthalten.', 'alpha_num' => ':attribute kann nur Buchstaben und Zahlen enthalten.', - 'array' => ':attribute muss eine Array sein.', + 'array' => ':attribute muss ein Array sein.', 'before' => ':attribute muss ein Datum vor :date sein.', 'between' => [ 'numeric' => ':attribute muss zwischen :min und :max liegen.', - 'file' => ':attribute muss zwischen :min und :max Kilobytes groß sein.', + 'file' => ':attribute muss zwischen :min und :max Kilobytes groß sein.', 'string' => ':attribute muss zwischen :min und :max Zeichen lang sein.', 'array' => ':attribute muss zwischen :min und :max Elemente enthalten.', ], 'boolean' => ':attribute Feld muss wahr oder falsch sein.', - 'confirmed' => ':attribute Bestätigung stimmt nicht überein.', + 'confirmed' => ':attribute stimmt nicht überein.', 'date' => ':attribute ist kein valides Datum.', 'date_format' => ':attribute entspricht nicht dem Format :format.', - 'different' => ':attribute und :other müssen unterschiedlich sein.', + 'different' => ':attribute und :other müssen unterschiedlich sein.', 'digits' => ':attribute muss :digits Stellen haben.', 'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.', - 'email' => ':attribute muss eine valide E-Mail Adresse sein.', - 'filled' => ':attribute Feld ist erforderlich.', - 'exists' => 'Markiertes :attribute ist ungültig.', + 'email' => ':attribute muss eine valide E-Mail-Adresse sein.', + 'filled' => ':attribute ist erforderlich.', + 'exists' => ':attribute ist ungültig.', 'image' => ':attribute muss ein Bild sein.', - 'in' => 'Markiertes :attribute ist ungültig.', + 'in' => ':attribute ist ungültig.', 'integer' => ':attribute muss eine Zahl sein.', 'ip' => ':attribute muss eine valide IP-Adresse sein.', 'max' => [ - 'numeric' => ':attribute darf nicht größer als :max sein.', - 'file' => ':attribute darf nicht größer als :max Kilobyte sein.', - 'string' => ':attribute darf nicht länger als :max Zeichen sein.', + 'numeric' => ':attribute darf nicht größer als :max sein.', + 'file' => ':attribute darf nicht größer als :max Kilobyte sein.', + 'string' => ':attribute darf nicht länger als :max Zeichen sein.', 'array' => ':attribute darf nicht mehr als :max Elemente enthalten.', ], 'mimes' => ':attribute muss eine Datei vom Typ: :values sein.', 'min' => [ - 'numeric' => ':attribute muss mindestens :min. sein', - 'file' => ':attribute muss mindestens :min Kilobyte groß sein.', + 'numeric' => ':attribute muss mindestens :min sein', + 'file' => ':attribute muss mindestens :min Kilobyte groß sein.', 'string' => ':attribute muss mindestens :min Zeichen lang sein.', 'array' => ':attribute muss mindesten :min Elemente enthalten.', ], - 'not_in' => 'Markiertes :attribute ist ungültig.', + 'not_in' => ':attribute ist ungültig.', 'numeric' => ':attribute muss eine Zahl sein.', - 'regex' => ':attribute Format ist ungültig.', - 'required' => ':attribute Feld ist erforderlich.', - 'required_if' => ':attribute Feld ist erforderlich, wenn :other :value ist.', - 'required_with' => ':attribute Feld ist erforderlich, wenn :values vorhanden ist.', - 'required_with_all' => ':attribute Feld ist erforderlich, wenn :values vorhanden sind.', - 'required_without' => ':attribute Feld ist erforderlich, wenn :values nicht vorhanden ist.', - 'required_without_all' => ':attribute Feld ist erforderlich, wenn :values nicht vorhanden sind.', - 'same' => ':attribute und :other muss übereinstimmen.', + 'regex' => ':attribute ist in einem ungültigen Format.', + 'required' => ':attribute ist erforderlich.', + 'required_if' => ':attribute ist erforderlich, wenn :other :value ist.', + 'required_with' => ':attribute ist erforderlich, wenn :values vorhanden ist.', + 'required_with_all' => ':attribute ist erforderlich, wenn :values vorhanden sind.', + 'required_without' => ':attribute ist erforderlich, wenn :values nicht vorhanden ist.', + 'required_without_all' => ':attribute ist erforderlich, wenn :values nicht vorhanden sind.', + 'same' => ':attribute und :other müssen übereinstimmen.', 'size' => [ 'numeric' => ':attribute muss :size sein.', - 'file' => ':attribute muss :size Kilobytes groß sein.', + 'file' => ':attribute muss :size Kilobytes groß sein.', 'string' => ':attribute muss :size Zeichen lang sein.', 'array' => ':attribute muss :size Elemente enthalten.', ], From a04b31866d9ec3810c8912e0c7bcd477556de4d3 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Thu, 17 Aug 2017 19:44:35 +0100 Subject: [PATCH 78/83] Cleaned social callback --- app/Http/Controllers/Auth/RegisterController.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 8b0ef309a..9a23fe2a1 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -8,6 +8,7 @@ use BookStack\Exceptions\UserRegistrationException; use BookStack\Repos\UserRepo; use BookStack\Services\EmailConfirmationService; use BookStack\Services\SocialAuthService; +use BookStack\SocialAccount; use BookStack\User; use Exception; use Illuminate\Http\Request; @@ -103,7 +104,7 @@ class RegisterController extends Controller * @param Request|\Illuminate\Http\Request $request * @return Response * @throws UserRegistrationException - * @throws \Illuminate\Foundation\Validation\ValidationException + * @throws \Illuminate\Validation\ValidationException */ public function postRegister(Request $request) { @@ -255,16 +256,13 @@ class RegisterController extends Controller */ public function socialCallback($socialDriver) { - if (session()->has('social-callback')) { - $action = session()->pull('social-callback'); - if ($action == 'login') { - return $this->socialAuthService->handleLoginCallback($socialDriver); - } elseif ($action == 'register') { - return $this->socialRegisterCallback($socialDriver); - } - } else { + if (!session()->has('social-callback')) { throw new SocialSignInException(trans('errors.social_no_action_defined'), '/login'); } + + $action = session()->pull('social-callback'); + if ($action == 'login') return $this->socialAuthService->handleLoginCallback($socialDriver); + if ($action == 'register') return $this->socialRegisterCallback($socialDriver); return redirect()->back(); } From afc66b3c3da3db8f53a8d82adf394feff5e17bfb Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 19 Aug 2017 13:55:56 +0100 Subject: [PATCH 79/83] Migrated attachment manager to vue --- resources/assets/js/controllers.js | 196 ------------------ resources/assets/js/directives.js | 109 ---------- resources/assets/js/global.js | 65 +++--- .../assets/js/vues/attachment-manager.js | 138 ++++++++++++ resources/assets/js/vues/image-manager.js | 4 - resources/assets/js/vues/vues.js | 15 +- resources/assets/sass/_components.scss | 2 +- resources/assets/sass/_tables.scss | 11 +- resources/views/pages/form-toolbox.blade.php | 92 ++++---- 9 files changed, 231 insertions(+), 401 deletions(-) create mode 100644 resources/assets/js/vues/attachment-manager.js diff --git a/resources/assets/js/controllers.js b/resources/assets/js/controllers.js index 132580f68..8b37379fa 100644 --- a/resources/assets/js/controllers.js +++ b/resources/assets/js/controllers.js @@ -145,202 +145,6 @@ module.exports = function (ngApp, events) { }]); - ngApp.controller('PageAttachmentController', ['$scope', '$http', '$attrs', - function ($scope, $http, $attrs) { - - const pageId = $scope.uploadedTo = $attrs.pageId; - let currentOrder = ''; - $scope.files = []; - $scope.editFile = false; - $scope.file = getCleanFile(); - $scope.errors = { - link: {}, - edit: {} - }; - - function getCleanFile() { - return { - page_id: pageId - }; - } - - // Angular-UI-Sort options - $scope.sortOptions = { - handle: '.handle', - items: '> tr', - containment: "parent", - axis: "y", - stop: sortUpdate, - }; - - /** - * Event listener for sort changes. - * Updates the file ordering on the server. - * @param event - * @param ui - */ - function sortUpdate(event, ui) { - let newOrder = $scope.files.map(file => {return file.id}).join(':'); - if (newOrder === currentOrder) return; - - currentOrder = newOrder; - $http.put(window.baseUrl(`/attachments/sort/page/${pageId}`), {files: $scope.files}).then(resp => { - events.emit('success', resp.data.message); - }, checkError('sort')); - } - - /** - * Used by dropzone to get the endpoint to upload to. - * @returns {string} - */ - $scope.getUploadUrl = function (file) { - let suffix = (typeof file !== 'undefined') ? `/${file.id}` : ''; - return window.baseUrl(`/attachments/upload${suffix}`); - }; - - /** - * Get files for the current page from the server. - */ - function getFiles() { - let url = window.baseUrl(`/attachments/get/page/${pageId}`); - $http.get(url).then(resp => { - $scope.files = resp.data; - currentOrder = resp.data.map(file => {return file.id}).join(':'); - }, checkError('get')); - } - getFiles(); - - /** - * Runs on file upload, Adds an file to local file list - * and shows a success message to the user. - * @param file - * @param data - */ - $scope.uploadSuccess = function (file, data) { - $scope.$apply(() => { - $scope.files.push(data); - }); - events.emit('success', trans('entities.attachments_file_uploaded')); - }; - - /** - * Upload and overwrite an existing file. - * @param file - * @param data - */ - $scope.uploadSuccessUpdate = function (file, data) { - $scope.$apply(() => { - let search = filesIndexOf(data); - if (search !== -1) $scope.files[search] = data; - - if ($scope.editFile) { - $scope.editFile = angular.copy(data); - data.link = ''; - } - }); - events.emit('success', trans('entities.attachments_file_updated')); - }; - - /** - * Delete a file from the server and, on success, the local listing. - * @param file - */ - $scope.deleteFile = function(file) { - if (!file.deleting) { - file.deleting = true; - return; - } - $http.delete(window.baseUrl(`/attachments/${file.id}`)).then(resp => { - events.emit('success', resp.data.message); - $scope.files.splice($scope.files.indexOf(file), 1); - }, checkError('delete')); - }; - - /** - * Attach a link to a page. - * @param file - */ - $scope.attachLinkSubmit = function(file) { - file.uploaded_to = pageId; - $http.post(window.baseUrl('/attachments/link'), file).then(resp => { - $scope.files.push(resp.data); - events.emit('success', trans('entities.attachments_link_attached')); - $scope.file = getCleanFile(); - }, checkError('link')); - }; - - /** - * Start the edit mode for a file. - * @param file - */ - $scope.startEdit = function(file) { - $scope.editFile = angular.copy(file); - $scope.editFile.link = (file.external) ? file.path : ''; - }; - - /** - * Cancel edit mode - */ - $scope.cancelEdit = function() { - $scope.editFile = false; - }; - - /** - * Update the name and link of a file. - * @param file - */ - $scope.updateFile = function(file) { - $http.put(window.baseUrl(`/attachments/${file.id}`), file).then(resp => { - let search = filesIndexOf(resp.data); - if (search !== -1) $scope.files[search] = resp.data; - - if ($scope.editFile && !file.external) { - $scope.editFile.link = ''; - } - $scope.editFile = false; - events.emit('success', trans('entities.attachments_updated_success')); - }, checkError('edit')); - }; - - /** - * Get the url of a file. - */ - $scope.getFileUrl = function(file) { - return window.baseUrl('/attachments/' + file.id); - }; - - /** - * Search the local files via another file object. - * Used to search via object copies. - * @param file - * @returns int - */ - function filesIndexOf(file) { - for (let i = 0; i < $scope.files.length; i++) { - if ($scope.files[i].id == file.id) return i; - } - return -1; - } - - /** - * Check for an error response in a ajax request. - * @param errorGroupName - */ - function checkError(errorGroupName) { - $scope.errors[errorGroupName] = {}; - return function(response) { - if (typeof response.data !== 'undefined' && typeof response.data.error !== 'undefined') { - events.emit('error', response.data.error); - } - if (typeof response.data !== 'undefined' && typeof response.data.validation !== 'undefined') { - $scope.errors[errorGroupName] = response.data.validation; - console.log($scope.errors[errorGroupName]) - } - } - } - - }]); - // Controller used to reply to and add new comments ngApp.controller('CommentReplyController', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { const MarkdownIt = require("markdown-it"); diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index 2a0547c97..fc92121ff 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -1,119 +1,10 @@ "use strict"; -const DropZone = require("dropzone"); const MarkdownIt = require("markdown-it"); const mdTasksLists = require('markdown-it-task-lists'); const code = require('./code'); module.exports = function (ngApp, events) { - /** - * Common tab controls using simple jQuery functions. - */ - ngApp.directive('tabContainer', function() { - return { - restrict: 'A', - link: function (scope, element, attrs) { - const $content = element.find('[tab-content]'); - const $buttons = element.find('[tab-button]'); - - if (attrs.tabContainer) { - let initial = attrs.tabContainer; - $buttons.filter(`[tab-button="${initial}"]`).addClass('selected'); - $content.hide().filter(`[tab-content="${initial}"]`).show(); - } else { - $content.hide().first().show(); - $buttons.first().addClass('selected'); - } - - $buttons.click(function() { - let clickedTab = $(this); - $buttons.removeClass('selected'); - $content.hide(); - let name = clickedTab.addClass('selected').attr('tab-button'); - $content.filter(`[tab-content="${name}"]`).show(); - }); - } - }; - }); - - /** - * Sub form component to allow inner-form sections to act like their own forms. - */ - ngApp.directive('subForm', function() { - return { - restrict: 'A', - link: function (scope, element, attrs) { - element.on('keypress', e => { - if (e.keyCode === 13) { - submitEvent(e); - } - }); - - element.find('button[type="submit"]').click(submitEvent); - - function submitEvent(e) { - e.preventDefault(); - if (attrs.subForm) scope.$eval(attrs.subForm); - } - } - }; - }); - - /** - * DropZone - * Used for uploading images - */ - ngApp.directive('dropZone', [function () { - return { - restrict: 'E', - template: ` - <div class="dropzone-container"> - <div class="dz-message">{{message}}</div> - </div> - `, - scope: { - uploadUrl: '@', - eventSuccess: '=', - eventError: '=', - uploadedTo: '@', - }, - link: function (scope, element, attrs) { - scope.message = attrs.message; - if (attrs.placeholder) element[0].querySelector('.dz-message').textContent = attrs.placeholder; - let dropZone = new DropZone(element[0].querySelector('.dropzone-container'), { - url: scope.uploadUrl, - init: function () { - let dz = this; - dz.on('sending', function (file, xhr, data) { - let token = window.document.querySelector('meta[name=token]').getAttribute('content'); - data.append('_token', token); - let uploadedTo = typeof scope.uploadedTo === 'undefined' ? 0 : scope.uploadedTo; - data.append('uploaded_to', uploadedTo); - }); - if (typeof scope.eventSuccess !== 'undefined') dz.on('success', scope.eventSuccess); - dz.on('success', function (file, data) { - $(file.previewElement).fadeOut(400, function () { - dz.removeFile(file); - }); - }); - if (typeof scope.eventError !== 'undefined') dz.on('error', scope.eventError); - dz.on('error', function (file, errorMessage, xhr) { - console.log(errorMessage); - console.log(xhr); - function setMessage(message) { - $(file.previewElement).find('[data-dz-errormessage]').text(message); - } - - if (xhr.status === 413) setMessage(trans('errors.server_upload_limit')); - if (errorMessage.file) setMessage(errorMessage.file[0]); - - }); - } - }); - } - }; - }]); - /** * TinyMCE * An angular wrapper around the tinyMCE editor. diff --git a/resources/assets/js/global.js b/resources/assets/js/global.js index 28d1e3b0c..ee7cf3cc1 100644 --- a/resources/assets/js/global.js +++ b/resources/assets/js/global.js @@ -9,34 +9,6 @@ window.baseUrl = function(path) { return basePath + '/' + path; }; -const Vue = require("vue"); -const axios = require("axios"); - -let axiosInstance = axios.create({ - headers: { - 'X-CSRF-TOKEN': document.querySelector('meta[name=token]').getAttribute('content'), - 'baseURL': window.baseUrl('') - } -}); -window.$http = axiosInstance; -Vue.prototype.$http = axiosInstance; - - -// AngularJS - Create application and load components -const angular = require("angular"); -require("angular-resource"); -require("angular-animate"); -require("angular-sanitize"); -require("angular-ui-sortable"); - -let ngApp = angular.module('bookStack', ['ngResource', 'ngAnimate', 'ngSanitize', 'ui.sortable']); - -// Translation setup -// Creates a global function with name 'trans' to be used in the same way as Laravel's translation system -const Translations = require("./translations"); -let translator = new Translations(window.translations); -window.trans = translator.get.bind(translator); - // Global Event System class EventManager { constructor() { @@ -61,8 +33,45 @@ class EventManager { } window.Events = new EventManager(); + +const Vue = require("vue"); +const axios = require("axios"); + +let axiosInstance = axios.create({ + headers: { + 'X-CSRF-TOKEN': document.querySelector('meta[name=token]').getAttribute('content'), + 'baseURL': window.baseUrl('') + } +}); +axiosInstance.interceptors.request.use(resp => { + return resp; +}, err => { + if (typeof err.response === "undefined" || typeof err.response.data === "undefined") return Promise.reject(err); + if (typeof err.response.data.error !== "undefined") window.Events.emit('error', err.response.data.error); + if (typeof err.response.data.message !== "undefined") window.Events.emit('error', err.response.data.message); +}); +window.$http = axiosInstance; + +Vue.prototype.$http = axiosInstance; Vue.prototype.$events = window.Events; + +// AngularJS - Create application and load components +const angular = require("angular"); +require("angular-resource"); +require("angular-animate"); +require("angular-sanitize"); +require("angular-ui-sortable"); + +let ngApp = angular.module('bookStack', ['ngResource', 'ngAnimate', 'ngSanitize', 'ui.sortable']); + +// Translation setup +// Creates a global function with name 'trans' to be used in the same way as Laravel's translation system +const Translations = require("./translations"); +let translator = new Translations(window.translations); +window.trans = translator.get.bind(translator); + + require("./vues/vues"); require("./components"); diff --git a/resources/assets/js/vues/attachment-manager.js b/resources/assets/js/vues/attachment-manager.js new file mode 100644 index 000000000..635622b93 --- /dev/null +++ b/resources/assets/js/vues/attachment-manager.js @@ -0,0 +1,138 @@ +const draggable = require('vuedraggable'); +const dropzone = require('./components/dropzone'); + +function mounted() { + this.pageId = this.$el.getAttribute('page-id'); + this.file = this.newFile(); + + this.$http.get(window.baseUrl(`/attachments/get/page/${this.pageId}`)).then(resp => { + this.files = resp.data; + }).catch(err => { + this.checkValidationErrors('get', err); + }); +} + +let data = { + pageId: null, + files: [], + fileToEdit: null, + file: {}, + tab: 'list', + editTab: 'file', + errors: {link: {}, edit: {}, delete: {}} +}; + +const components = {dropzone, draggable}; + +let methods = { + + newFile() { + return {page_id: this.pageId}; + }, + + getFileUrl(file) { + return window.baseUrl(`/attachments/${file.id}`); + }, + + fileSortUpdate() { + this.$http.put(window.baseUrl(`/attachments/sort/page/${this.pageId}`), {files: this.files}).then(resp => { + this.$events.emit('success', resp.data.message); + }).catch(err => { + this.checkValidationErrors('sort', err); + }); + }, + + startEdit(file) { + this.fileToEdit = Object.assign({}, file); + this.fileToEdit.link = file.external ? file.path : ''; + this.editTab = file.external ? 'link' : 'file'; + }, + + deleteFile(file) { + if (!file.deleting) return file.deleting = true; + + this.$http.delete(window.baseUrl(`/attachments/${file.id}`)).then(resp => { + this.$events.emit('success', resp.data.message); + this.files.splice(this.files.indexOf(file), 1); + }).catch(err => { + this.checkValidationErrors('delete', err) + }); + }, + + uploadSuccess(upload) { + this.files.push(upload.data); + this.$events.emit('success', trans('entities.attachments_file_uploaded')); + }, + + uploadSuccessUpdate(upload) { + let fileIndex = this.filesIndex(upload.data); + if (fileIndex === -1) { + this.files.push(upload.data) + } else { + this.files.splice(fileIndex, 1, upload.data); + } + + if (this.fileToEdit && this.fileToEdit.id === upload.data.id) { + this.fileToEdit = Object.assign({}, upload.data); + } + this.$events.emit('success', trans('entities.attachments_file_updated')); + }, + + checkValidationErrors(groupName, err) { + console.error(err); + if (typeof err.response.data === "undefined" && typeof err.response.data.validation === "undefined") return; + this.errors[groupName] = err.response.data.validation; + console.log(this.errors[groupName]); + }, + + getUploadUrl(file) { + let url = window.baseUrl(`/attachments/upload`); + if (typeof file !== 'undefined') url += `/${file.id}`; + return url; + }, + + cancelEdit() { + this.fileToEdit = null; + }, + + attachNewLink(file) { + file.uploaded_to = this.pageId; + this.$http.post(window.baseUrl('/attachments/link'), file).then(resp => { + this.files.push(resp.data); + this.file = this.newFile(); + this.$events.emit('success', trans('entities.attachments_link_attached')); + }).catch(err => { + this.checkValidationErrors('link', err); + }); + }, + + updateFile(file) { + $http.put(window.baseUrl(`/attachments/${file.id}`), file).then(resp => { + let search = this.filesIndex(resp.data); + if (search === -1) { + this.files.push(resp.data); + } else { + this.files.splice(search, 1, resp.data); + } + + if (this.fileToEdit && !file.external) this.fileToEdit.link = ''; + this.fileToEdit = false; + + this.$events.emit('success', trans('entities.attachments_updated_success')); + }).catch(err => { + this.checkValidationErrors('edit', err); + }); + }, + + filesIndex(file) { + for (let i = 0, len = this.files.length; i < len; i++) { + if (this.files[i].id === file.id) return i; + } + return -1; + } + +}; + +module.exports = { + data, methods, mounted, components, +}; \ No newline at end of file diff --git a/resources/assets/js/vues/image-manager.js b/resources/assets/js/vues/image-manager.js index 9e3fa013e..12ccc970d 100644 --- a/resources/assets/js/vues/image-manager.js +++ b/resources/assets/js/vues/image-manager.js @@ -127,8 +127,6 @@ const methods = { message += errors[key].join('\n'); }); this.$events.emit('error', message); - } else if (error.response.status === 403) { - this.$events.emit('error', error.response.data.error); } }); }, @@ -144,8 +142,6 @@ const methods = { }).catch(error=> { if (error.response.status === 400) { this.dependantPages = error.response.data; - } else if (error.response.status === 403) { - this.$events.emit('error', error.response.data.error); } }); }, diff --git a/resources/assets/js/vues/vues.js b/resources/assets/js/vues/vues.js index a3f6ec8e5..5f6f7d7a7 100644 --- a/resources/assets/js/vues/vues.js +++ b/resources/assets/js/vues/vues.js @@ -10,14 +10,15 @@ let vueMapping = { 'code-editor': require('./code-editor'), 'image-manager': require('./image-manager'), 'tag-manager': require('./tag-manager'), + 'attachment-manager': require('./attachment-manager'), }; window.vues = {}; -Object.keys(vueMapping).forEach(id => { - if (exists(id)) { - let config = vueMapping[id]; - config.el = '#' + id; - window.vues[id] = new Vue(config); - } -}); \ No newline at end of file +let ids = Object.keys(vueMapping); +for (let i = 0, len = ids.length; i < len; i++) { + if (!exists(ids[i])) continue; + let config = vueMapping[ids[i]]; + config.el = '#' + ids[i]; + window.vues[ids[i]] = new Vue(config); +} \ No newline at end of file diff --git a/resources/assets/sass/_components.scss b/resources/assets/sass/_components.scss index 8092caa07..525b4f8f1 100644 --- a/resources/assets/sass/_components.scss +++ b/resources/assets/sass/_components.scss @@ -512,7 +512,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { } -[tab-container] .nav-tabs { +.tab-container .nav-tabs { text-align: left; border-bottom: 1px solid #DDD; margin-bottom: $-m; diff --git a/resources/assets/sass/_tables.scss b/resources/assets/sass/_tables.scss index ea517fee3..31ac92f60 100644 --- a/resources/assets/sass/_tables.scss +++ b/resources/assets/sass/_tables.scss @@ -59,18 +59,9 @@ table.list-table { } } -table.file-table { - @extend .no-style; - td { - padding: $-xs; - } - .ui-sortable-helper { - display: table; - } -} - .fake-table { display: table; + width: 100%; > div { display: table-row-group; } diff --git a/resources/views/pages/form-toolbox.blade.php b/resources/views/pages/form-toolbox.blade.php index 3bc03a17f..bd60af89a 100644 --- a/resources/views/pages/form-toolbox.blade.php +++ b/resources/views/pages/form-toolbox.blade.php @@ -14,8 +14,8 @@ <div class="padded tags"> <p class="muted small">{!! nl2br(e(trans('entities.tags_explain'))) !!}</p> - <draggable class="fake-table no-style tag-table" :options="{handle: '.handle'}" :list="tags" element="div" style="width: 100%;"> - <transition-group name="test" tag="div"> + <draggable class="fake-table no-style tag-table" :options="{handle: '.handle'}" :list="tags" element="div"> + <transition-group tag="div"> <div v-for="(tag, i) in tags" :key="tag.key"> <div width="20" class="handle" ><i class="zmdi zmdi-menu"></i></div> <div> @@ -47,93 +47,93 @@ </div> @if(userCan('attachment-create-all')) - <div toolbox-tab-content="files" ng-controller="PageAttachmentController" page-id="{{ $page->id or 0 }}"> + <div toolbox-tab-content="files" id="attachment-manager" page-id="{{ $page->id or 0 }}"> <h4>{{ trans('entities.attachments') }}</h4> <div class="padded files"> - <div id="file-list" ng-show="!editFile"> + <div id="file-list" v-show="!fileToEdit"> <p class="muted small">{{ trans('entities.attachments_explain') }} <span class="secondary">{{ trans('entities.attachments_explain_instant_save') }}</span></p> - <div tab-container> + <div class="tab-container"> <div class="nav-tabs"> - <div tab-button="list" class="tab-item">{{ trans('entities.attachments_items') }}</div> - <div tab-button="file" class="tab-item">{{ trans('entities.attachments_upload') }}</div> - <div tab-button="link" class="tab-item">{{ trans('entities.attachments_link') }}</div> + <div @click="tab = 'list'" :class="{selected: tab === 'list'}" class="tab-item">{{ trans('entities.attachments_items') }}</div> + <div @click="tab = 'file'" :class="{selected: tab === 'file'}" class="tab-item">{{ trans('entities.attachments_upload') }}</div> + <div @click="tab = 'link'" :class="{selected: tab === 'link'}" class="tab-item">{{ trans('entities.attachments_link') }}</div> </div> - <div tab-content="list"> - <table class="file-table" style="width: 100%;"> - <tbody ui-sortable="sortOptions" ng-model="files" > - <tr ng-repeat="file in files track by $index"> - <td width="20" ><i class="handle zmdi zmdi-menu"></i></td> - <td> - <a ng-href="@{{getFileUrl(file)}}" target="_blank" ng-bind="file.name"></a> - <div ng-if="file.deleting"> + <div v-show="tab === 'list'"> + <draggable class="fake-table no-style " style="width: 100%;" :options="{handle: '.handle'}" @change="fileSortUpdate" :list="files" element="div"> + <transition-group tag="div"> + <div v-for="(file, index) in files" :key="file.id"> + <div width="20" ><i class="handle zmdi zmdi-menu"></i></div> + <div> + <a :href="getFileUrl(file)" target="_blank" v-text="file.name"></a> + <div v-if="file.deleting"> <span class="neg small">{{ trans('entities.attachments_delete_confirm') }}</span> <br> - <span class="text-primary small" ng-click="file.deleting=false;">{{ trans('common.cancel') }}</span> + <span class="text-primary small" @click="file.deleting = false;">{{ trans('common.cancel') }}</span> </div> - </td> - <td width="10" ng-click="startEdit(file)" class="text-center text-primary" style="padding: 0;"><i class="zmdi zmdi-edit"></i></td> - <td width="5"></td> - <td width="10" ng-click="deleteFile(file)" class="text-center text-neg" style="padding: 0;"><i class="zmdi zmdi-close"></i></td> - </tr> - </tbody> - </table> - <p class="small muted" ng-if="files.length == 0"> + </div> + <div width="10" @click="startEdit(file)" class="text-center text-primary" style="padding: 0;"><i class="zmdi zmdi-edit"></i></div> + <div width="5"></div> + <div width="10" @click="deleteFile(file)" class="text-center text-neg" style="padding: 0;"><i class="zmdi zmdi-close"></i></div> + </div> + </transition-group> + </draggable> + <p class="small muted" v-if="files.length === 0"> {{ trans('entities.attachments_no_files') }} </p> </div> - <div tab-content="file"> - <drop-zone message="{{ trans('entities.attachments_dropzone') }}" upload-url="@{{getUploadUrl()}}" uploaded-to="@{{uploadedTo}}" event-success="uploadSuccess"></drop-zone> + <div v-show="tab === 'file'"> + <dropzone placeholder="{{ trans('entities.attachments_dropzone') }}" :upload-url="getUploadUrl()" :uploaded-to="pageId" @success="uploadSuccess"></dropzone> </div> - <div tab-content="link" sub-form="attachLinkSubmit(file)"> + <div v-show="tab === 'link'" @keypress.enter.prevent="attachNewLink(file)"> <p class="muted small">{{ trans('entities.attachments_explain_link') }}</p> <div class="form-group"> <label for="attachment-via-link">{{ trans('entities.attachments_link_name') }}</label> - <input placeholder="{{ trans('entities.attachments_link_name') }}" ng-model="file.name"> - <p class="small neg" ng-repeat="error in errors.link.name" ng-bind="error"></p> + <input type="text" placeholder="{{ trans('entities.attachments_link_name') }}" v-model="file.name"> + <p class="small neg" v-for="error in errors.link.name" v-text="error"></p> </div> <div class="form-group"> <label for="attachment-via-link">{{ trans('entities.attachments_link_url') }}</label> - <input placeholder="{{ trans('entities.attachments_link_url_hint') }}" ng-model="file.link"> - <p class="small neg" ng-repeat="error in errors.link.link" ng-bind="error"></p> + <input type="text" placeholder="{{ trans('entities.attachments_link_url_hint') }}" v-model="file.link"> + <p class="small neg" v-for="error in errors.link.link" v-text="error"></p> </div> - <button class="button pos">{{ trans('entities.attach') }}</button> + <button @click.prevent="attachNewLink(file)" class="button pos">{{ trans('entities.attach') }}</button> </div> </div> </div> - <div id="file-edit" ng-if="editFile" sub-form="updateFile(editFile)"> + <div id="file-edit" v-if="fileToEdit" @keypress.enter.prevent="updateFile(fileToEdit)"> <h5>{{ trans('entities.attachments_edit_file') }}</h5> <div class="form-group"> <label for="attachment-name-edit">{{ trans('entities.attachments_edit_file_name') }}</label> - <input type="text" id="attachment-name-edit" placeholder="{{ trans('entities.attachments_edit_file_name') }}" ng-model="editFile.name"> - <p class="small neg" ng-repeat="error in errors.edit.name" ng-bind="error"></p> + <input type="text" id="attachment-name-edit" placeholder="{{ trans('entities.attachments_edit_file_name') }}" v-model="fileToEdit.name"> + <p class="small neg" v-for="error in errors.edit.name" v-text="error"></p> </div> - <div tab-container="@{{ editFile.external ? 'link' : 'file' }}"> + <div class="tab-container"> <div class="nav-tabs"> - <div tab-button="file" class="tab-item">{{ trans('entities.attachments_upload') }}</div> - <div tab-button="link" class="tab-item">{{ trans('entities.attachments_set_link') }}</div> + <div @click="editTab = 'file'" :class="{selected: editTab === 'file'}" class="tab-item">{{ trans('entities.attachments_upload') }}</div> + <div @click="editTab = 'link'" :class="{selected: editTab === 'link'}" class="tab-item">{{ trans('entities.attachments_set_link') }}</div> </div> - <div tab-content="file"> - <drop-zone upload-url="@{{getUploadUrl(editFile)}}" uploaded-to="@{{uploadedTo}}" placeholder="{{ trans('entities.attachments_edit_drop_upload') }}" event-success="uploadSuccessUpdate"></drop-zone> + <div v-if="editTab === 'file'"> + <dropzone :upload-url="getUploadUrl(fileToEdit)" :uploaded-to="pageId" placeholder="{{ trans('entities.attachments_edit_drop_upload') }}" @success="uploadSuccessUpdate"></dropzone> <br> </div> - <div tab-content="link"> + <div v-if="editTab === 'link'"> <div class="form-group"> <label for="attachment-link-edit">{{ trans('entities.attachments_link_url') }}</label> - <input id="attachment-link-edit" placeholder="{{ trans('entities.attachment_link') }}" ng-model="editFile.link"> - <p class="small neg" ng-repeat="error in errors.edit.link" ng-bind="error"></p> + <input type="text" id="attachment-link-edit" placeholder="{{ trans('entities.attachment_link') }}" v-model="fileToEdit.link"> + <p class="small neg" v-for="error in errors.edit.link" v-text="error"></p> </div> </div> </div> - <button type="button" class="button" ng-click="cancelEdit()">{{ trans('common.back') }}</button> - <button class="button pos">{{ trans('common.save') }}</button> + <button type="button" class="button" @click="cancelEdit">{{ trans('common.back') }}</button> + <button @click.enter.prevent="updateFile(fileToEdit)" class="button pos">{{ trans('common.save') }}</button> </div> </div> From 039ee5d06c2f3364abacf3c93d5507c8d0f60ad5 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 19 Aug 2017 14:04:38 +0100 Subject: [PATCH 80/83] Aligned entity dash name and fixed chapter toggle on dash --- .../assets/js/vues/{entity-search.js => entity-dashboard.js} | 0 resources/assets/js/vues/vues.js | 2 +- resources/views/books/show.blade.php | 4 ++-- resources/views/chapters/show.blade.php | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) rename resources/assets/js/vues/{entity-search.js => entity-dashboard.js} (100%) diff --git a/resources/assets/js/vues/entity-search.js b/resources/assets/js/vues/entity-dashboard.js similarity index 100% rename from resources/assets/js/vues/entity-search.js rename to resources/assets/js/vues/entity-dashboard.js diff --git a/resources/assets/js/vues/vues.js b/resources/assets/js/vues/vues.js index 5f6f7d7a7..a70d32009 100644 --- a/resources/assets/js/vues/vues.js +++ b/resources/assets/js/vues/vues.js @@ -6,7 +6,7 @@ function exists(id) { let vueMapping = { 'search-system': require('./search'), - 'entity-dashboard': require('./entity-search'), + 'entity-dashboard': require('./entity-dashboard'), 'code-editor': require('./code-editor'), 'image-manager': require('./image-manager'), 'tag-manager': require('./tag-manager'), diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index 9882f09a2..3d50bcef8 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -55,7 +55,7 @@ <div class="col-md-7"> <h1>{{$book->name}}</h1> - <div class="book-content" v-if="!searching"> + <div class="book-content" v-show="!searching"> <p class="text-muted" v-pre>{!! nl2br(e($book->description)) !!}</p> <div class="page-list" v-pre> @@ -87,7 +87,7 @@ @include('partials.entity-meta', ['entity' => $book]) </div> </div> - <div class="search-results" v-cloak v-if="searching"> + <div class="search-results" v-cloak v-show="searching"> <h3 class="text-muted">{{ trans('entities.search_results') }} <a v-if="searching" v-on:click="clearSearch()" class="text-small"><i class="zmdi zmdi-close"></i>{{ trans('entities.search_clear') }}</a></h3> <div v-if="!searchResults"> @include('partials/loading-icon') diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php index 9a3195555..f0fa40a84 100644 --- a/resources/views/chapters/show.blade.php +++ b/resources/views/chapters/show.blade.php @@ -51,7 +51,7 @@ <div class="row"> <div class="col-md-7"> <h1>{{ $chapter->name }}</h1> - <div class="chapter-content" v-if="!searching"> + <div class="chapter-content" v-show="!searching"> <p class="text-muted">{!! nl2br(e($chapter->description)) !!}</p> @if(count($pages) > 0) @@ -82,7 +82,7 @@ @include('partials.entity-meta', ['entity' => $chapter]) </div> - <div class="search-results" v-cloak v-if="searching"> + <div class="search-results" v-cloak v-show="searching"> <h3 class="text-muted">{{ trans('entities.search_results') }} <a v-if="searching" v-on:click="clearSearch()" class="text-small"><i class="zmdi zmdi-close"></i>{{ trans('entities.search_clear') }}</a></h3> <div v-if="!searchResults"> @include('partials/loading-icon') From 194293664f36a84ac5a8fc60d0bf17ea0e97a15c Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 19 Aug 2017 14:09:03 +0100 Subject: [PATCH 81/83] Removed v-show delayed content display --- resources/assets/sass/styles.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/sass/styles.scss b/resources/assets/sass/styles.scss index e40430bd8..0b86051bb 100644 --- a/resources/assets/sass/styles.scss +++ b/resources/assets/sass/styles.scss @@ -18,7 +18,7 @@ @import "pages"; @import "comments"; -[v-cloak], [v-show] { +[v-cloak] { display: none; opacity: 0; animation-name: none !important; } From 666c86b108ff9f05ac47cff9f1f4511af196a77b Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 19 Aug 2017 14:33:55 +0100 Subject: [PATCH 82/83] Removed included fonts, Set to use system fonts. All font definitions moved into _text.scss. Needs override documentation to complete. Relates to #423. --- .../fonts/roboto-mono-v4-latin-regular.woff | Bin 19592 -> 0 bytes .../fonts/roboto-mono-v4-latin-regular.woff2 | Bin 16108 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-100.woff | Bin 26292 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-100.woff2 | Bin 20988 -> 0 bytes .../roboto-v15-cyrillic_latin-100italic.woff | Bin 28336 -> 0 bytes .../roboto-v15-cyrillic_latin-100italic.woff2 | Bin 22752 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-300.woff | Bin 26764 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-300.woff2 | Bin 21320 -> 0 bytes .../roboto-v15-cyrillic_latin-300italic.woff | Bin 29176 -> 0 bytes .../roboto-v15-cyrillic_latin-300italic.woff2 | Bin 23516 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-500.woff | Bin 27228 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-500.woff2 | Bin 21788 -> 0 bytes .../roboto-v15-cyrillic_latin-500italic.woff | Bin 28464 -> 0 bytes .../roboto-v15-cyrillic_latin-500italic.woff2 | Bin 22892 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-700.woff | Bin 27136 -> 0 bytes .../fonts/roboto-v15-cyrillic_latin-700.woff2 | Bin 21560 -> 0 bytes .../roboto-v15-cyrillic_latin-700italic.woff | Bin 28328 -> 0 bytes .../roboto-v15-cyrillic_latin-700italic.woff2 | Bin 22572 -> 0 bytes .../roboto-v15-cyrillic_latin-italic.woff | Bin 28388 -> 0 bytes .../roboto-v15-cyrillic_latin-italic.woff2 | Bin 22716 -> 0 bytes .../roboto-v15-cyrillic_latin-regular.woff | Bin 26924 -> 0 bytes .../roboto-v15-cyrillic_latin-regular.woff2 | Bin 21608 -> 0 bytes resources/assets/sass/_blocks.scss | 3 +- resources/assets/sass/_buttons.scss | 1 - resources/assets/sass/_codemirror.scss | 2 - resources/assets/sass/_fonts.scss | 102 ------------------ resources/assets/sass/_forms.scss | 3 - resources/assets/sass/_html.scss | 1 - resources/assets/sass/_text.scss | 14 ++- resources/assets/sass/_variables.scss | 8 +- resources/assets/sass/export-styles.scss | 1 - resources/assets/sass/styles.scss | 2 - 32 files changed, 18 insertions(+), 119 deletions(-) delete mode 100644 public/fonts/roboto-mono-v4-latin-regular.woff delete mode 100644 public/fonts/roboto-mono-v4-latin-regular.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-100.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-100.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-100italic.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-100italic.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-300.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-300.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-300italic.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-300italic.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-500.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-500.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-500italic.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-500italic.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-700.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-700.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-700italic.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-700italic.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-italic.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-italic.woff2 delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-regular.woff delete mode 100644 public/fonts/roboto-v15-cyrillic_latin-regular.woff2 delete mode 100644 resources/assets/sass/_fonts.scss diff --git a/public/fonts/roboto-mono-v4-latin-regular.woff b/public/fonts/roboto-mono-v4-latin-regular.woff deleted file mode 100644 index 8cb9e6fd8840b38960ce4348be2652ce5f41bcef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19592 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 diff --git a/public/fonts/roboto-mono-v4-latin-regular.woff2 b/public/fonts/roboto-mono-v4-latin-regular.woff2 deleted file mode 100644 index 1f6598111497129d63a60d571c0dfa83296f619b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16108 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 diff --git a/public/fonts/roboto-v15-cyrillic_latin-100.woff b/public/fonts/roboto-v15-cyrillic_latin-100.woff deleted file mode 100644 index 4eb2be6a10c5dda5e7c71d396434949aa58881d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26292 zcmYg%b8sf#^YxQtV;dWr8{4*Rn;V-O+qRzA$;KPowrx9k^ZEY%d8g|1RG&J1Z_m{2 zshOS`H+eBJ00`iFGiwAO|F<9H`1b$D{OA4uo4A6!G5`SL4*<Xm0{}RWB&77u;>xN* z002V&w@&99VM#_gG4jgvOaK5P;kU2y4TC)7I$vX3Lx*q982|v|1ppxYA=)NUja{9; zH7JeW8j=4%p#m~u=3s97%{_n5^Q{BvP`}owFgJAijz#16*1-J_PykeO8xON@?mJE@ z2>?h=puIL!voNuB2LSYzzcsPnu_{Rs-fI@7h9&@jzQs4k_8*=}Dv&I`$!{+2+b8@6 zDNHIvn}x0OcdY)u@BGLC0B~G0$Amf?d*g4N(J=r38vTtp<zP1*TSNEnTui^U|BEFA za|3;`Gqg4R=F+~oyzhC@kY;G#9qgUHkJXIhn?wCi`(+C-ad0&Kjy03{_RYUxt)sx= z;0|Ik1y+fxh~~fZHST#NXS>#1SN?5m!JED<I-1~ydyv+fXKwOU#u1@^YID>8J`}61 zbPQjj7-I3T|I9~-f}urCU0+!c9w9YMK!05d2b%=$S}o!UyC(;yQj34T3OB^@X_F`M zZXbdT3wcJx#KNGFam9-kys9i+OP%&h($u=`TDiBD^1@2<+M|MObMOT)RPC1+gcsX` zR&W*EBlV%!o0?N$t750B;hXuJI{I&u>83asZtv<an%(gt@5wl)V$b7pl)KZB<3(0h zPnb~k#Lt0xmBe%@$aUEV!jde!CjO|RK=8&@?$=4efNPZM8NewQd-7u~9ij2hIk z{1on#TQUorsnKFRih8F0h;UXt5mDNf7gjd?iz45Lii4ObZFtqhg}&qVnU}J#OFyx# z>8t(TJYrY)tPFz!hGF0eRV62-6m(Wn0gK+K61XTU9V#nO+AQ$Tup|jiVrGe!o|eUn zg{b!JoF0vgcokIkiI8HO<-kdPvO%3%Lb4W>T0`=z%~E+?;)aSjy*O}yk?tQf-LU2) z>Mly^gP(e<9ID;#(8KkkfX^#Nd5b>goVghJ_YyG0U4yj0{bL%EH0f!SD`c2+WU>3E z&HJfB<H^KINx@1wQuP{A(%>nQWM$(pWz?#gWDCU*6~#I8=2g!FQ=ZULaqwT9G_c#v z38ZjO%*?|G1hmW{=_6+c8xD>t4&&qFEtN%RhvlYJw4vBjgu>gDCL#WY9uHgUQ=Hh7 zJ?amgmnTbea~sSgGnqYHc6!$*fA0vHQhZI;819y#&g|+hpIu6GHQU0q<MJ;L1J+m< z@S(bo9_<4^jT2SO6Nw-lcd*kyl~pa7Rjip+ZJo9`ZS)SG2@!n=(2#3>P={-RFDQUD zDU_DQobbnhDI&o$BEkMHciJTaK_P->B1Gkh17DezZIW|42I0+5EzjO`P=4k;V%z1n zSefkWKZ~^Y!-5KW=KH~k!x@8%mszZuBGEEx101zYJGK4uX{$HL7xyXqG@1pyjB*XL zz2Gk%?=j;;h`xjTuQ05-ROt(Atcc(I{4V7{YqqY)psX+9uv)|L=Fxw01?d@yFEEy< z(rHq5cr)t=PC8`K9se<Zm0TEMzZZ?Li#K#U$Vb87kLXX{GE)|ZRaEE?i9e*ruwaHz zQO0uQ@n^P7`vSjY0*(j~AImnwgWM(jMI-{d7?48#al99_>Yl9Ucdh5iSbY})gh?P| zJ>k#Sy`O!WZ`mGsP*VPS1_Yo4z2eu5e{Q;=SGIPYmlF(YBTjtF;MJMA6^!JmOyv6- z7!vO|w2y2NW+QVEF?L#_Hnhs-9;xp(2kHH%wD!4{0Y42<f4B^@k+k%(Ekn2O0MKe( zzthDkLZQ$ln$#|y`)Q{NMv=GdAu%Dxe-37V^w`671t&@XUWgqlE=PEUM!h08XacL} zOwb_(A(%~i>QRtGvFmD%<jBIOISwp(q_(pE&vaVo+3;!nu}z;;G-p+$F1sO)kB})R zZgCPRCv6eCZ5@79bxqxvgl<K>^2#TG^Y7s@6*l}Mw`!051>X^MM0~V!C9FSesS|PO znpBrNzR0{8*hQcTt*QXessQVvARpznt?Q1s8Hy+{@AZ=+nI{W!TQHlrFEJ~hZ(gL! zWZv7dn?5b|hNmeFab$B<>E6_;UL9K+6WA0Eg}LFA=Km!-pT4=uiDhRgvg7=Z$C<#9 z=!ITLA7+d;y^VSup-aq}zr~LCF38yiw)IlH<_|S61P2(*6~_UdB13mlwb9JN1Z<=% zxF8bBH%%DQq%I>2b-XK>5`H4WJdL9JZy*)pGga$1LF&>1oZal=0+`+8_Ju4W805IS zIKF)$S7YQ?CBnd$_%l`Uq&8{fNu>NNFE*?*D6T`%SAha!ciDf7nQzXUIU(kTY#&}f zPmXlJr<V$9g5YbB*#zV4Gvl=lf1dx@aPU{oMEEcOz?s>H5R3P?ca>`4wr9dIuk>&t z6>Wh>!4mx#u-eCO<mfa+iW;N{!5bND=xP4vdK%NfaXz8|2u2DtI<`z4_V{mQ{{7M( z{%>u@E93SHgOUoNI6v^uVYa`01>l12rG3Q>D2g*V%xcgXd>1i(PfDb>n7A#BBe~vp z2|IV|nVY|-gmxi57GiGeLlIFns|;!M1W<;BV1)&9fM@;RT8G1PVd??XjDzpw2<_Z4 zJiH$$<!=rc7F-S?6ek&?68OBI>+BSyUIz7|9q1g`utixl84l1%1Dy)k3SlawV4l>% z-=p(fdTed*<ocbm`+r&92L~|x7~DzijbU#$w?>$q(uB&ZIl8|%B7NN5d<+p}NIMtb z>%*TLGNJSrf)ZrpFsVz=;T`4m1I_tkeovEGf@zDvYIdwHNA6AtTc6Jlx7Tj$u7QT^ zio$F#!zSH+E{oTfU>?2>Y`IXq{L<zUO|f6WSzOCcY!)AIg<3;?y5AVx$dQ9@c<!Z# zcJm>)LoAeCSgQM+==!`tc+-47dOW*Udkea3;-^VnmPh4IS!hP)A9~+mxM@gxAzPGa z&^`7-o8q#pWL_@_+n9JqvhBv8>8aR9GM=M@A5)^ONjNa<DlMNKoNk&*RBawO=18|8 zOayy;aG3TjX}|W1lF6Y+JQ&xOB|kAyk|Q4ryWwSeK~JwFOUz9isTtlMGP!kPx<U5K z_qeX^*-Kmdf?a-xDOhOpi86AY475O4B^q3ZXbcJ&Ox1jzaj~P^G|3eqP#$5C4Q2~j zj=lDw)|40b&EfOawNG^6)1)Uk(>3XwlTtNOyz$HTm44P$D%-HhWtr3YkOW^X^}Hau zb>YddVt+oCN3O!wx|hygvR*AfKL*cwkm1^%fn7o>11;ZCpzxYgHP7jc@jm;spU|Rg zXW_$psTXKE|9!Lq58zorUh|k-OD2$4Un%cUoy~UyS}br^iQBP%0+m?%ZPk;pQ}&R3 zOhwjS_~~$KD_u9ad*Qh%OYdz>%T@S0M?LusrZU^s>zs}CcmA{ws%5K@752oZTi*v_ zoS{Ge+!$sEavqy@1aDFozkUw(9ehJrYA<DS7Ch7O35rmSpuPNCJ-RSU)FR)0<=5Ph zbW$Wo5<pS)f$x^~;`P+o;$)wXP)^){-CoB8j~3yMp}oJOW;2U`7y7{!xx{q0eKiAp zd7kd-`=m{M)oqRK(wrkSSP7}H@+nf^r|#Z(0kidM^SH_=H$BqkoSHnlyROu!<LntP z?kZ&IeI}W!2o`E@W8q2y;`T3&`;z{_<X2bZn?rm=buA><Vb_uCOBMe1D*<)DSq`hx zlV!(iPj(j2ojI(@{os`QHArueM3-v)JU8v;6Lc@GtJlkXh+_xC26Crrn6uo`RQIjY zdDy3BQF^rmTwxsV+WEW!p%3F6<Fk$X^X|b}VyM0G^BD&3*-eCd=H=J2UuLbj#R&of zOy3pzQ&zeYXHKiz{r9~hOWjH_^chQ?Ew`o7n(M53o$X~)g&!}b^3_937cTQKES!`= z0xtTAF$}Xr+Jup_z9AiYb8R%Et3>F=>;roB&?i%TkSR*2BS#{qc*$>Yb*AhJQ}U$| zTDxs>GpES$J+|~Iyn6q36QZYK;>*MVo?p`LVkx({Qw>q-?#bv~168|td?xU@{eVnw z5AMO#mc0VZIgXK~=0qRcIrBk{5$vwo>?_!{;I3L-k(fd%NriZWi2XEbADP5ICkaf# z-q|8<2qS3}ALFSY7`1Vrk))<|aP>MN8bsJMrfI57y;fB9Vp5gKOxi`gYGw7ZR(j2s zra!e@?LRieGtOyLYj{qRhd5NUaLJ8vf7#OOJ?!ez>s{}P()p5r+a=_<(Yrqdx?Oob zRl5-!ZD?<Ho^A}?Wknr%lzD#KbP(ZfCjIW9=m|yfCZ@{0Md$2F`D6c_!^3|K3+{U$ zuk^XA&-9t7ghZ7*ES{5bRr)|F7B7}mAjUjcFrd*`D9gt+lfM^fMKn0%UY~}9dJ-$i z7_KK1GqP_aC6iBIGN{7EC=0%?`cDRiQ5vu4)Bqufk^L~Czawo(VLbK)%~+5&4+U0L zQa72l1Y6n&dO-t6y6lCI8)M9vvq}S*1~?>@%pyltWlqZmEbZ_rZ!bmRj3K748)7aK z)Ev~&0K+_NW-^mJ%+ac*Fb+4NO>F*o>Lv_kXE6;A-<n_Y6USA!&<+@DdrEGYN_t7| z!tUXgSf5LZO9+mTfXuGqER6S`A(Kmvx+C55mi#O8+N#4;9mk|D*}Z1vSeUe-maSd9 zo1m0BzXO6#dO%cm%MhE;R`rL1^gy!g22DP(tsx1M^uScoU9`M|n#%r$&A6*8G}HPS z;_CMP*%*7Ruw%T*wA%Jx6MTC!-vXP!?xd1iN~~uT)9z}7UByB9=}x(h{GlC_+uW61 z#%0OW25B87MtoaN$C;$A{H|w2b?Kfb%2MKBxkmA?r2#Ib)bDg9ZDJ;hepx>IDN<eq z0o*}k!v{cw1d)XGA>58Sz-<Wr3WIp{?1;2Z!`S(;j0g*0$p5_PJCVqs&7d!dp<cIx z;?rODZGb`3Z-K_@c#e$kM}`!^+2QA(#5P7ES|DgOh(a##f-H<jz;Xv68(;_N6#xMK zNz)T6vD7lwnZiM6Y(a1xW7GzM*-W3&QAlD|Gu6AW5m|jvP!Ng1ZCCnEJV@U&MC}<2 zp2d5iM7UI<;t^(>iD%2bL)0N5%)5iQOoLU@onVOWFg}%8YeTv`HrX=Mds<~0{xn=` zj^<cu{(knG*kIPQt=z9bUZ5wWkGrY~O9__2OpxJY2;)o2BUK16f5{<&Gv&I|nB<E| zRMyr_O;24(T1jA$(V_rL{33NDBOoQ2JGI<sWSA(~m<2gWJc--QSSfGC^<R?goJ7<! z$6`*Kf_Zf6J$vV0l$5|BvrP~j@k@M4M7C^dbj`SOY5O$9JD5CpoaSeboNP@O5T*%S zuWGeZ$JD`dbD`DoSj}m)Q|DV@{5|v+&)6+$_2wZa)^)wR@Zgbi4TJcTL$@-Qci8@} zgRU0!{qEeDAChC32;mOYi*t-~(kUQPXIE5jmr4EaD63<~IE|2!n1_@~pt^@_vWljv zit2(&_L7G%tBP`yinfcpvde<{!?VVVcL6ARxx{ysV&~FS_?Ay$TK!A40*ZMT4|-3q zdsmQCA9Ay*GPA0~HmT4w4c1h#S&bpRAHu0~i!mf9T1{CDGNk-I{paqYLO~8>MqLp7 zSV-nP9n^7AM|@DBKV-}WKdk~e?GqXWBmE*iRP+6*2`-dV{8&l$$ZOd0VIX|Y_fu-w zxX-4I*NEAs`l7+(52j5QT?<KbVC|CHDi^o)nQc&~#ZTJ`-Dcb74ZUW(n_S#SWWA;j zS6r1@UP1Q>xm8XDvZoH++NFyEUGN2m8syDJ9R*$MpYCHH-MWw+@aY}_ZX2=zPaAXr zh=fGInu<J6JM!zgOw6P!@&NgD6g3=`?UXvlf2DRWd6n8kz+7!cV3#)4b+9%kFhHB^ zx>$RmJOHO{0ZhM@H4vwrwTkV!Nt*%~uFVcyuEKntoM@p1mT7O{0JhrUgI51WSF&Cg zu8{+)tR*20!qymp*=r+h0Fw1;!HW&MMO3VdN0`&?M}#Q1Hw}FS@fLl9z%_ng12-YV z3?A0}0G`Pg2zl!l{OQ#vJ+R{K>mTk@Tb|wJLqO{#yel)X-79hfV%*6d@$_O7ndM(6 zGceXm-5~$1%LhQ~D84K)Eg(^$>0%JBy><#Zw(d>yL#=J)A5Ke!3)o^C80gss1=!DZ zqJU@x9p+l-dR4GYKTv+ChmP;Y34r>$m%{*%0~i48zdf{10{|LmCIIP+69E623P1rP z0>J*@0-*hf1|Wgg0?;6^0O%0^07#(P02Ig{0Pz2Ya0k(i0iXQIh!lMBiIhT3`^P32 zRU27YG+-lX&4I_1ToF;>Fl6#p?Jx2n2d9W-z71B6Jfcjtc%?n=<kJ4_)z!_fv;IfB z&FO6^sJA+BU+KLt&>HDzUNX;Rnum}Q0i$1s=2sJ<@;q%mh;POJyrSQntYB*6J<eC^ z;w=<k-Q07JlLotDR}dMTZUOS30^31KcNK#HT=cc-mze=QG&IpEqLx&_(Y9L#*2QG; zgFE)oIewqd?m)Hz2aTn$kU#N)H1J|~9%<;LdJ{({9s#~bYkp3t4PUTT-LT6vE5G~} z5V>k#m@Y73>Ir#+O)UH8U*hX{!xLC`VR{!OC?%%Il9hLI`@K!r=$fZ4+Y}!yZP;Ya zFLIP{z!87(wTiD?;dq2437sX<ETiv9m=&|jTwc)5@&nov!cP7>fgk`-02Bc9>kEMB z4$|QTsiUlp_SE_mO^QSqgoK7HL<qDf4Cw&=6@SXPw6ZSsy5f!Wy6POT@}{<HL}-*g zadcfNuPXEcYxREG{Bv!@)%Ed~?B=9D?q#0)#d(B5dJIB1pYTrT4+p^@1bVL?P2R9F zyKK+$lK)57)R*<zS_k?$U)PJ@we-AKa)SFBej0vwf*VK-@hYtf^Q&#U;ApHG>%PJY zZZmu@k|5J{piuve-GO5qp(iR18yaC>6d_+NkBYA>?rKEPq$31e2npc_sox2NBqmmL zXiEA`t$_Nv3(h4B)}eY5@i-@gP!9FbK!f;LlxtWCONyNlc5yvg;@swM#)BmUUzJ_) z%UAeHxd!oJRUC4%QS9m|w1b{|FWeZf*%=+iD(8-D9~nrv$bQUeM{I#W4To}rC}aD% zIrVTmbZpUPVY}|?e)^1eMzZ^|z`5OrW$@C4vloVv{CzL(lKe`Ej}iG{4tut4PzXeS zj?CLQP|I4OXlb|FqyF@FOCtQJBpYKgMDjMqI@vUC&c-r1_62OWGBKH4hSA(pIW>@A zPIT$_GMVgi9BrZC{L_lADAt!f>E#8b-KEU;@OOQ(<maA!`9n7=CD*th$K7kL=Uj0E zKm1H#hiQI_0=FCZ`t2SuM5V5BUU@#TQQ>HOu}%WJdj=vuSK+e#TjA(o+4+W_>9HyC zsWbIDHY(FNv(X<^0s2lSoej%S{s!)%K075m7?%N5RweCx2N0B<Sz}nErZQw-znxLl zTYt|+&ta{a%*bM(h9D&lL`{xk`b9~~RvKwBlu@a+(<bs4id1Ez3x5%90A2d@6(^l^ zt7THhGAo`t@U@i^CeqIw&4!!%i%9Fpo5@DGGUuebpGe6)aHxAPU4IVGkRfJmU9S0w zd05}Ip;lp#jCI&uI&pgw_*HnTHQw^hcg;=X`{-xR7=KW`Oy{Rn47Fsh#eens|I#Hm zX4}76C^bSLnAPWPIvd9~vj(HKlTIvFMiQqhV*BoqZ7LL(OkkxajM&o|F5$duh3aQ2 zv|H{!vO~kj<Ru_co9-9<#AL<_z@|hmv5G+wcU+hpfSb-eEFqZpRBf4)v8onhSkxJq zV;B)5+a7oDxXALUVW-5sr{9uX8Rjz>$m<zPLBQ#lWp5O3Arfxq=LaRw<g>WGJphB8 z(WdWWaCeBsghUnQ^=`}gYx4fcPO-)B`qo@_Tfuz$wz);a?`QBbv<C}QvccYEu%=RG z{(0Ypc%RGS^6$uU*PjId0-?5!+@f4oEJSzxPpHYRI#sgr7yD<M>L!_T{BZJZ-E6cf zg6+Apu{m23k#;)#!4J&gVZ%s9iXicZ?TH^1;~3fw=HU%>#bz1`<$V~KQ8HFwRhqvO zjfAA;PvV3o#LeBzn13@$H?XOAOHeS=prTyxkx_CrmVJ<DmqzP(yMwneO|!QGCq@(X zyL}qIY?`jt5EJLuiNL0sbQ+y5hc7?2keEDe{mc#*UxG@ju+aZ@9lpD@)4$4h>0bBF z>;z~{wG2(J(pO}gy$p0!xXKdnHQvRgkKdJq)BnT9-#MpFa7i-5U#}ex`e_!gbX3IW zK;D(#L&5vBMh||j4l9ATF6WCtYoHXp*gswK4sB;fh!HvU%eb<EOpDev8+H%8CimFh z$8e}Z2=RgJEU%FFCJ1we>;Bq@vq}Q`#ErNmtwU_nD)A0r6~b0ux<u$Q{dRw1_UfEH zFq(^hRYIQ!DpQ0wsYZ)o|7&oii!>6vbL;My@T|h>Db?+v_L2XFORYLVZoeOl^QoZO zViNNzZ-BDKWzxq4@nked7nL4OOUgGa)Mg>gz-a2Q4YTZ0)DE3&!6HQZ@#nFX1I3)W z*$XMobNzXODh1TaF?{`Wpq_ZNGf<mY^EUPE$ok<=w-{BTA|E!-+8YGtjzHB&zO%qJ zU>tSBh^Rl1B#GOfFQHg7NHUq#cUZV;!q7FtGLO~ky6~7<@-9B)xDpZ5BOK&oN7Rq$ zlv|zfFMNd{<bsN#{kHskyJivQi&H?va8A{;H-07$-x;)(k&)<Yg%A6b_Jr>ST<m~a z2j-7F522*z8t@hvEwJJr1~kcE9z1Fw0zKZaH39fcDm_T3DXB4|(nH?h(yHB$s^s%8 zJvOU^NfID}*%9H-Xj5wos<@u)e@T?s$Tq@x=nr=6JPHpy{SBQ5@OHE)5jHCZ=Oy69 zoV#0p6exosdL<FQA{H2Bh47=gni({#nB1^5rZteb_BL6YZ+$(!t~f0v&%Hh7dYaoC zGWsUy5Q&!&wZ`F_=DF@8wbBxUm5ct0)0e=0Nz4*=QNShS_~Cyf?IjSBLOpxZ=a@jL zsl?)#fJJH)L#`4GN6S#B;J?ozy-AChQxjKx{Gm~{G}>Y7Z@}OWH7f~3m;#0*;q0($ z91GJa+5^?dKy?ZtFh2PrC0SKE=@DpYEmmIK;8H!}Q6e~*CfuYr<Tynr^&@<781J_i zQ(Jgy?z!0Rp9c!Fhd+ec0y8H*JH|3}={sItx0%5v@s}TUw*<fm-Gi+zA*HPGjw?<b zPeUwa^Y+P9W;2A?siM@9;(Bjj3+z$_bh{$@vG8`ko9K(xZI%@i_9ba5<_i<f=C+gI zw}0HHYYER165N$wC~RKo>$5E`!UAJsY*w!8W^3G+<EM^db2=a25)->{^VU}y-Y#H| zAfPm^<+b(PZ3gl_=>3#9fYS$*Sx(n;Afe*bFUS90o7RvF+))HNQng&*`uiHJcw#9& z-9vJM-f<`+AqMR^`W<}XiS~iJ3}A4jL@DKz{xJt0gM=Yi^_(6C0{Ht3XMZ5a#*zh` zI%-t&m@n^GxbouyEX-sTsas&y?$S%qXL+EKN;0Ok7fOpmO=FMG6v^mroKdGbz|$Ma zf#SIGXB*{3v52<?tK}B+);Eb(b;Z|3sYZK$w5s4RLqsP3WM4?`)*r4;`^;frLV6w^ zVDNa{E)ETZ+L1oX3^iY_yx8?v(`4)^=^VqKPbq$SU$yg35>P47`>43LDk=lu_JCv` zVss-A*w=v>`{O1mWa&Uf;p86i-{9ovs>tPFlaZ5E5nPXwvM_!_STYNPklI`h__Rro zc8n`}s2WrsY-Su7qfrk0oYJoStS`>Hb!Rmg@HvjZe~9^TP5jloTkJWw%8IujYY4-2 zH|3z}WcV2DS7blD5=)$Z{1@KTH<V2#!QuVRMd<#+|234r#NvHwCXgoTH;L#ml#n4P z5k=%;FJeF)A5VdIaIIX1DwhCGzCVB$2p^_m<?0Zax#-^f3ZM4FhTKmIy4@_a$h@$o zw(co7I(fyMH#6YPnAfddZA(asH^%#vv8e&=5QtJZQDkO40KDN0v7t7MMY@-{3_{MO zr^jdW(%$a7GyQ3fnE5pkU$FL@{qel>abV{|f03`-@#5{uR>MushR;a9<ZS#e*wGXL zmfvb}t9^eC;#8`<w)1<{z!(BPie8ROk;6`<Zac``u~V|sRbc9T<GEJUCd;9Yf+_}6 zb>B`RCIZHx8xIjoUA{&7v%CT4Vo{0Zi)nLj+J1>~Q@ViTD^GfyC^DWXb&|Xu7Zms= zy%`+$Vuk!oZG{`siu`7ItdjzHxqKVlU$wI!R9-jdt2Ssq9*4u{nv%&+L!1d-H@3tT zlSUvE@N6E>DFagBJWaYUw2M2h05n83sTYqi^wy#kArDM?fNqDQ^GgIg@ap)(#`CDz z0oR1#1Hyk>(gX=3^5LYb6^1C&7#hl&mImroie<8oTDwdnxrq!=Pefl&H*|0i`p4Cs zY$YpHj7@|j15hzFgTI4n_`RHosU>3+DfvK7ebA0Xdf~e#iz3_t5Sf`z<VPd_ES}4| zOAz752tz2G!g4-T_0G?QhU1)y2AoaZ=fV++@!i7IKp6dLJ_x;mnJ0>sv6LV`Vnk?D zNrFMJ<2{*Hm31_^4(sEAEO64m*(hQ>E5i>F6vQoof#x|N7b(&qA!Wdn+J_}8YQ>6( zkrS0XN|$O5Zbz};vTHi>9jY&LVlx8I6_rJB&0;v2QOGrt>t4~;ySy7-mt8BZruntW z<nR=yE*IC7><-(<kU#-h6uuq2$RK4qTS7-t5<ZeE**g6DjrTGv3GL(y8Um4Gqv{k6 znn>Rs*DTNlnuokeY#|yqF#~&(F-BYDFT~-9zpgh7xRz@>VS~bHgFlIIKi3MeCopq4 z9oE#SVj$r}60%=8bn3LAKK?*kDb}Ut9t(Z#DAF>KZiF8b&YQYL(B=uV#3o9X7<PD^ zexw6&FG_oQj-BgOo4m!lMVU&oe$C<?SN0QDR@go%I>zT<Waf;A^I}-LiOJ!dNr*h= z*k!NA$rPw}))wGHQcCO%MkoHWi}YiZM&fJAss6HTuPcJB5G^UHS%+ft-(Aoky?)GS z4$q!GC>AbYS8N24D=eUNK25_IDwT;DQJS^f6t$W+Jq(`sFmRzQ2&c~;V(r&(UoSU` z9HjTzZEYc|>wdC*k99b~1$pfB;qu;b2?O{K4q;1=@Fiwfi6BO+CIj{|oI6lg)>IKw zKX@q_v2}^WjnlgkU?f+j?)rVbx%usk$-1cQv_Q}wlSlcUqKsa4Y)@d>Ow-W$^e&x9 z3$B%E-9pj<N6_Hrr{!qa`v<=+;l|7$7(u7Hz@@0JT(__u5qQFv#ZD34NQxT;euw`Q zxZX<3FTa*NTHQ!AXr%FcY+KZa(Tr;#wSx-k1`X^IpnQb#hgU}V13??Vm23|dS~IQE zSpUkV4s7&B!Ny4e0<@V{ha)T+`^s<)d&(CBwCuCx04tik@_CCCAGvAJuZidFW_Wbn z4@)vf+zwA9)2f%7u@-*9p<()?mPCGxEM8duR@X;`i~hiDHHOE1t0-#j36ZZ7baGYW zGzIdTzwIWpTIbCow5Nal>1g}@)=%ZVXvdp^>q&KONvY-kk{&b5Kk=hWdAA<MY>!1t zkY^{f6gk-mrgZ(tf1osDgb>K;I?U?Ip@vZf8gfVXR@L>C2+%gAXqeHR@5Y!eqIj{S zXu(<p+5Ko{Eqe{)uy<V+^6MS&m$uN%p@*a5524>f1mi^;srg~1s`NxzJPCLzqYOFN z_q(aFNQIdp67O2U_PlBdAQeqhx*Te`_6pE>l#9t}QQ-CpUDbqeR*Rk-|Eg#1dDeGL zL1r0%bNgX1{OVR=tf}BVBz|e5C2qF&K8v0j$0;e<>a?qTd$(+lF-hZ+$ab8Hj`*Yz zJPRxBR){mk&)>X9NLB4`4?A3Qmunl+{7g;eo^$q;?zc!!UsxE$Aan;2W*8R7D#GG< zP)wZ&4AtY^^(gMBD1bUcD<AM8^~>Yk?6r7~*VE~^oq}`0`!p^2M{pweD_9GJ@K_># zo$Hkf#6q<92yF()50!zPELK&*YZk*N44x~0T)a-{c~wwvzm?$zKBA9*r?_(9wm@?9 z6k2qT;1h|AuV%cv`?WcF?_3y*aJotb<^Zd5Fv?K9S8zjw7<9U|u98IX`$!y2_$J?r zu@&jBNEu~EbS@$s?H6qk%??JfkkMbs#gEXYpb&L}1`B!cF5S=8Sm<B(ES&Lo^Rl8z zr4}QWs(Gr-&7FmeNP2$*hq2*)K|rYiA<pxolrUBnLUQ}?@RdP-I)Y|WQ59DdUlzwo zZ%8dk;7PGdf5tV|Fx8aI4&u}tT16$eCdr2QAWHYtq3Wk?5R%)8z~7WBeKt-}*r*qk zO1CKExJt<bLPq8rrWB{x1aYDVj2Pr2Z0_@Kt|<+%NFo4=kzVfXN@jLH?{`Tf>DGRz z+QFIKtk2IrbSEa1nVv1C$|?`nELA7yhx)Z1<3#lE#>P#l6;=ZuLqio0PZ#z_iK6a- z;GBZK&nA#Bwg^@+mHvG%ybzVwVbtWSLMlI{^Q3Uy)T68_{e|Ljh<6i2VfV`Z3Y~D# zq?KkP6y(k6zu(Lq?W?jp%_q~8O6b2!8I<jJdzL&Ct3@=w$b%%3zC=nhA!n&1yvp!d z&NTEOi^Nv`B~K@nt@NL5MwulcD--6rCz#dg1PquZTI1z@QKWZ?Z+gWgDM|xhwi0+j z2rr?CN>f#-(lW`oe!R(}4V5bJyhAF-P=O8%1cnbtQNNp*(Mu|xl;#hc#MsEGP`SP{ z&rkvPVNejp#S(v}$_riDak_o5c;G$3k0-zD<LN((N*UPkY(8(^+ES#uxfM3Q!z>8c z9v2VJ8}32NinElnA<r5KCC6(N3=S0qLl~#{QQKXRS(#l^Sawv#=0uo!;#ip*6=bI? zng&Jpc+`D5g$^f?T*Tk>M$wB=^5gS9ZfH8UPDLp$nN?8}R7|gle~IX}Mfu$<EScYH z_>@1DDW36DVe$W-7^cwkXqZ}@tij7|Y<H*Fn};NvJkV&5kGKyRhQlbvTX9|js8B;o zW|Pgg23#fodomJ_2r8-NgAN2!iJ@`#wJaYLJHWK1je-!?YE45W!mFQPIU+5l(QEh{ z_$~#sBtF1oxiZH&(%p&!pmbsI(bqgoW^-S`U;+Y|RYZ@m&3h(28^!P3#L2kOtUydx zd^+T=x8IbMXC^xSrB;FIA5K_p>5b+IE=_rT0=Pu@weqyxl~6G>=d}wu*i}%)nwM1m zLGV2z{t|0uu)<;_il}#qqWxpnEOwDuV6NRH>T)++Yi3ec3Zgk31!o&^dGcKN?6^`- zaME=DyUt>zzJ4*G+XlN(69nnVVSbj8hdo?qY<>QV)ve4w@Pzs=6yaSZnJ@$QUE}!I z-8SaTOY<K#y|p;fgk_i^6d&!LD0N8h0IO$-JorzDZuqbzA8TP8Fku-q-7h1$q@-(Y z&5Zl)%dkcS9Ys*}%OSjA^RZCKU)!s_Dgx8!0^Zq2L!l~?i3Be}U*M2H;%kc{<}#%P z*`WS75hN0K&7gs1Q4YPwirQxHat9^FQ>j=FU716#5o{IWSTMYKgg5MLs*_8xxxmG9 z%Pvz5oMfGDx#~i+mmdBnO0Ezf&Yb0xc)lefj3M9oVjG6Ez`Ozud(TFO#Ai1jr~ta3 z5>91SNLzWo<#xA_9slC(zIc3|o`Eb0jNm<GuuiwDEdJBcN5rL}z%;ae?~+F<Yv@B% z0gsF*7twqeWIz9nLqOob6V9y{{^*D(=R{E|7}!m)fUTIZ=m2*w34l-lLbxG*s^e#x zWM%q;L@PB<d96i*!aK}F>ZL#6L_i-0pOsj-mQ^i{un5{t@VHlm#(ny|1GVZz-biEe zLMHxN>_!m??PAbnwabj2q4aS=roh_XECNDqJO3{syPZa#a(!iwt(jr>m)9%K(CmQy zlG<bW!f?HYbkK}epVrdqJhkhM^lA<Tn3$X`+4gPykAIFqQ^+{~Ozv`OHnJ>Q>coI6 z>G^vN7wRb5zI?_rd}vSL5p)`zc^WUSW0MU+@Wj7bcWFLcO=49q2D`ZoKKg^(Z^|tr zQ||i`AFp)qD3!HwaOcE`=U?)D=?}p|Y*mQ2h5=^OiTGCDTAmh<Ml?Ihiw^(lMTE7Y z+xFe@P^D;f3kLCo&{mD3X@7z}MD!kob~IHmH<%@hJ|EuhAP-Rj?7b~aW)8$4*<`sB z5}io>oQRqshF?;-Fouz^)*BFCq6$hgCD=)F(;#9>Mn$Ky9qY4C*@8X2d2$_l`4ej% z+=)0QYei7yM@)&I7_trMMO9>wJBIt&B1#=b-wPo`zZMSN{GN9%F7!{)Hf9FAw)j)) zi2V)}_o=7e@meP_#@9qgyIg!_LB~JE6mXt?Tb2sBsRGk6gwUuunzYH3$GXW8G#MN$ zAyXw3OD*ck!ck?wFZRuXCmuy$>7(jMz+(UEu<R<Jir(P;{Qc}$*gK*8U2{TRYtDcr zAyCK1lW6ml-pp)$A(uE{yP)q+E~I24W-4&FDaBup%90d8V0y~%*pmisbNaH}HSKGW z^D1Ch3B^jWlD6>??G~?$zSAk6RtX?NAG21g4F4PyE!YeiIG0HYmv2Po-P0QWIs}EQ zi^0D+%y0fY$i3%f%zK*US#l6k^RXJ>chk(}xO)<Pz(}4X-0vIoNUV<W+TKaZHriMV z{_PXf0Rg22wq0BgZ-X{KPRh6yLcN_W;}Jd^oo+X-Sl4Sa>pH>6{iDPb?JiL~oJD}C z*u5j_XM4<BYxF|y{<UGF!);ImUyJNiJdpfF3eCF$!<OxcT!x@!Tpa@d*EiB9M3n4H zJs%QY9>1s79WP&45WfF7$+oj9<M-6ct_j3n@KKaqsPZnyd#~ooRI;q1<z5}_$X63= zrU#~W*Zti|jSL~MJAb>Exay?SrNiiKe94<WKECct^?76O{9UQ$<>=%z{QUYz`>Wmg zv$XnxnZWOG11yuPdpP=9`*vtK;FzskEE);P1`-Kj6rkoVz<L{jaEx_IAVO$ui2dXz zh<VSu06Y+d9@HvL=WHF<M%4G1irK6~r?MDKz`io4j+piy?@%s1xqjY{nJ86<z)uM9 zc$5N|B+1>PCQq<ZP%Ad7u`Cj+<WMD%$=WM<0dFBiJ(xHukuvir`Vzw<KKF@C@~<L; zNVRwavs;oUR)1HEM&{gCeiS{h<7}U-E3r!A9JYcs_;|0|AShq&6_ml_Ks{`Hgsjp) zQ(3oIs2Ww9-a6bUq?N>pAq)#xTFEL4f-Z&a#~?uWH0HBPRU-%e<3{#2^vMkyoO16_ zQXDMcj*a_a(}v0KUz(7@l#~oFTpCWnkgG}rxDJAwv7n;8inA$`NS{Qi1dlsXkRSb% zU(Px<;Fte!ZXxl{dXbXOs+}9zoay}#3Ju#HlCNbKb^w=U3ld(I0@4FsOMe-{N%tOB zlL82n(JFJXMLu$L*U4_Rno0FQFSnxUpR^(^4{t-a2YaSobIwJ0-MCx?N<M+jW_x|V zYh;xpY6XIk;^IzyPLrfe!-M{qOj)sC`uyqV5j}jERmn^>sMsbGCuc1_6OVj4R+Iur zc1eC=D&M`lBq|oe2b!>uu4sa1Ulu5al|sVGV)Zz0{5~#bFVV$~3DF_m(#Hu&$`KdG z|GRQ_d=1v((0AasFaP4B`GMYjB>!ex#`AEBmE=rjd#i3d5`70p6mQqdo+K6$_bNhM zWZ~U2K`0dRYEeo0qb}i^KQcLu$M(xVSqxtptypp9x?rpeEVC4Sq0H$%TK0`o?R18( zR=@3ik;br+#R(<;En37gM3_?kO^D|KPBu`3q5LM7^AC4DA5MI~Q_eHWgo1N*9<Ash zWOXreDiujITJgw?VRBr*E(;@^q@G8`eDKxPye_O{$zf;%NRBLLgt_@TicCCeD5YFu zSdJ-Q5!FLfeh|@$%B11Q+Re|WLjsxN;vBzvZq>%o_9ckhesc9U`3O_{D^cVbi|=y4 zDmc|$i9gQ24Q4$qfuJX{I`)9huR*3oh+>U$iI$Bv!i2y;X*3Wdkz&pMvWiX1Ns~K^ z!if(C8=Zh5h*-d_N65v8#wSL(B>8kx>+Ezr8tVFhHM6zi1H)Edf7@y9rAPY+P<47D z?kjt9EJ46-v$?C>yc2Wr*e+w6$i;u2|BL>U0uF1;%1V6zZ(ZdShRt0sTE1Rf?NU)u zWNq(`MA;#az(XnGrBTnCmL=$guF{jG;ZDouP~b*)8XP#0SGncq2lUy%fEd~n))O<I zl+Yb1?E=7^8((8lOrkmSC5@QN!)3F9(C|!hb<VUsLtbOJbd8S}x@0x;z^a*7ilYDE zybogN`ut39cQpj3Pj7j5ciEbZsmZ1pgao~4zRF-n{ZdsMKPQ0{SeCL($VaZoFC@cc z8*X<hf=NI+hXwaiImXCX|Kog{Fe#gZUY(5Iz!BjO;V~l5pOKd-<%JjjK^5t0^L;V9 z!^E(4<1D9-MERQ@(L<I(ufpmo^=GQwQvP8?c*2{qW~G#Fm@4@F@Fu<+O=%sMwTo(< zTE2}cuihws^JedW0NnBc1ZwPfsQW@%bYRBsM0()In-b&KLaGqEVra7oO2%BsIN9B5 z9;b<t_Byf;_A}KrG&KeBWDm5A_&!m<$TTQoxr19Q{it2zjV^dY40j_0|Jk_e1`l44 z>dLyo@*^T1&TP`Wgs-!FB59J|Te@$Pb|S@XjvN{vZKS0q>7ucF-Ig6ACK3-MVPzrO zhb`jRt>0#!7RmN)=Q9f)<EIE%rbCZ<?#U5|BY_?%dyomRVo<FDpUYTgLTEuy=lDln zrRDG8o*`nj?DVY75VIPg3Z@ww=97eD(O%TW%3pM%73vgm_WZ9<#R+dXzAoDoDxIuS zpL_q*;m=%%KdtwNAoOm}TpWSgwULj^>oMnEqPdREv(w(%io;Wm$Zzlp<pc<dc$fuT zD-(H5oavG=R&sOY>SWRi{D(3POZ!eU(kZd|kcmSnhKE7HI0QZ-c7rvV;nLFT)g(df zg(>XuGi!kKE-`u6%BAbm&F<lc#r?A@1igpary9Y~{wZ+m^Jz8~a1hsf3L+2}#o+xv z+vyyBLM9!1$NFLaSfR<gv%v*0ny-5D!T#oiurh)j>>k~Tue0xp#G3KGzL~{#`HkP; zN9&)4`i;|DH1_ctuAf(V*l#ks{OD6{7*>J`ixpKR$>Y7lGZeh(Vcu$MM=((2oYS#2 zbpcdBx`uvX(sy*9m$Nj(yvdh^q4UM*Z2RYQkRX*0-d|d@NET&^jC~nga03cBR-d-g zH#&oqceXjo=fMzY#2n;ja+e<>b?4A!&so`69zzB<3yrR3D5<NZYE#p&WI@x+Y)&>Z za-dq?&CQ-VvcV=&-@DT)YR}Kl$GPo2a?J5ni4W?TF}To^uaRKeBRxZcrY0G1kfo;? za*$ICEe9Q0u4<gJU*GSPt8K5a>RBq}o_$`5!O7lJ+z|(~t98m8e`gYD2j#K*r->L< za$psRFm9oBNb3OUv8epxHONs*DYK+)lcqf*R)&=odTq`_mMf)-kcBJi25j;VpBWM& zl1)nm)OZ85=b^c<;OoO|Z|s4UC(oXi%eOsbUoEZ|orG7Ktwy2zIMGXGp;LS$V<6fg z1&>Ttua}5qkn9&;Z!Qm&aA^(&UGcBs{DLg=Au?n@Io-w5q@IBz{Sz+SB&krdz?Oib zD{IGXSSHFWv(m_CykDg>Q3HT#24>Or(De9_9;gyv1_vs}k@Ls(QEb~`DXvc2qsZtD z?^di=%~%<Zxg#d}Jf&{)?&mDolR7PpDnGq;bC;LelwD{R_)CkQ`Xq<Ey-(ZTPpYFN zecyFI7I1m3iqAGP`0_Sa_*?xJxsRaDLO8(hz$8TEKX(}T*s2~E;n9B;wgk-}BF!dY zlqS*-C(VeYr3ncNpiQ!h!*Kg&8SE=k;^=R|u=Ho7V)E|!$>3<YX0s9$&hd$1-o$CR zEPu@`2*C@t&yyc#t%|5+7BuYF2}fJROa@Eu6m>mRoaIRKMy$qR=9jnoYT+0RlQdsT zo54=R8HfZ5QLFbTlakICFnVhtxoF*)SmE68wy3)Q{6fGQ1PU7cWJ;OKM;}+|)oPhx zRDsvXSsMFM<VQWf)ia$@CZ*iR17}+fa@u4=ka}2M>Z3`o`rD&B%5|X-k^`@D1i|+j zD{mqkUI(8|u%0;{jO(Y)N-b8F$ad_iSNcc&ve{ejz@9JFr;^LqR<7Si-<OSk)u*$^ zMI|<gA5E9HdY6{M^Y3=NOeqBZidR-&n~_I33Muxib62zrf({N5Jx0g78TyFp{JTuY z9PCxP;+39(KFrXfP9~ea5&8(%u5MSmSVQ@F$*W|i7Ol7>W)|z^xvHC}Px%<{nAJt0 z6DpY(7GI<v@p1OW<Em}sMkA5dC8TQdpQIyqB?^$)In#Q@q8Sfxb9w^)k_YUvW{$DM zSo*)~Q08ipFWRuQmh+}u?lrYS*MVF)JL~@57XMD?;7^Z-t)=k>R~m}&K_eFe8zh=C zg0pz?DaO4jh<~u5;$Zy_dvU3hV)7fZAl&I>WHFVr*HKV{8pt7^Ez3F1)0n^C?&n}k zGdkNvsav-1D=2;$-6cDlE8WuUvU$HU<%Co??ebQ!-{Na>|I%yP7w9tv@@B-W63{3h zR_x99fx9bQE{?riJo$F)C1+s=pW*AjaG{9dsmr6`i%-Pj3#W_2&MQ;=Dma?VRoCxy z*V|CliOK<i<GvAmCp+o3kRb0gcPTku$i^~u37tTvpxKn*TB{I}E%nE6N>M?_SDLKz z80EyX;kE6vNwkHv{j97-?L&7(;TSDYravFHwA3?$zmQT|HUzkd<DS&%_7pIeUi>-X zc5-{VVE1n8a1ncamw0f_OeW%9(7(ZM)l76P^g_&?_nclf_k<hP<dWuHx;w$?#35L3 zi8okG?Qta1N`oA^R-A=r=o1I3zQ7AGAk(3#ZRZLE7D1kig!dMbhKR}*%MN*qCZw#Z z4PROifzpXQ-~hrHLar^xGzS@R@PptqDo9!EdIdbtkOgytR-8!imHP_Y-T(eEd{H*4 zfP$lmFYmYR4{&Gl-mAJXd0vb)r7V0c6SJ~#l<~=qQ)nmU-z+zASRvela(;=D566+1 zU2!gkY2Z$vYF<3aXO6zXi>&qmZh}l%OsGdb<;&~3DZXcD3Pyu*J-+UC9t|PjzF~Cj zGUH4UsLJC#MJ*PdrgNWuH>o>|WwUFd-N!Tj)|#`g*ZQ^a$s3G{C6VtKne7Dmn=_w? z^cp=8^N3~40~jhXyZT6qo#3D|Pv<5A$mVzMk6xE1T_RFd_F--uBNnHw?%vm1r=HTU zaHd;@yFV|u;nDcL4M!3%Uun~}TK4ijb=%-^L9teoQ(>0|^oP^I@`FN%O*nF`Y(BPw zeEh6U&t-7VA+dO_0XVfcNwTi3(bH_K(rVg;#!MNiu0j@6q$5fFRD}hz<xvCIXp;l5 zMM6-JC<_ewxxzBofu69~zYUki;O9|l3(#4{@}7;s%KnWys;lw(oAB`YmW2G+b?^B1 z0WNj??w*SY5tX9eoy6;<5~<{jceE%r8M9)E=LP5KxSjRe$5Ym-FReuPnwTfJkp<g~ z(##x2KM{^q&B#KUh{@kGt}#RQF3`+=k5<6kR?t}5OByjUPV~%Fax*uCG(fL7{LU9U z5ltLXGS(9PP9!SsVC-a%$_H*+67o-90O;xy0ehocEHu1YtgoeB>Z3gG-Dv;F+J3rd z;ks-;#_`G`Uhc%{^?Uz0Nc3w+@V)ht{chuDHpKmT8!D0vdbfx&PqIf=dAJDLj{=RP z2#G>Q-67&za4|?ZRNOy`?_#JYDX-iYWxS*$9wOuZNLs<op|`%csijbCN-^&orIYM* zR5%<Yz8K9v>M@zHJD_oUabuSfDs!Q&)eZ>YlIH##E%1xkm#6<S`x~0$es=BA(RE+t z#&@>V=cCaE1N90Dl}2Q3MFl!$aLpsybr~)I_86y_lb7E$8+hG5r{=?jpxMRe|54Ac zb*=dF@ymakP|qLb+UGjx8j{v9%PMRHPH#Yv7mmBa3lXZV9B)Pg0OfzgA;)%y^g-P? z`UA(JP_u~~2zDACl0RZW#AI4$0sd2wc%e3*&D0ERuuM~0{dY20Ys19Hkt;6tOi$b4 zNKdSb-D<7j0<=FN<WT|G?B`eDh_wexVk(`uS?|6m<UYS*0)P73m7DD~C?G_=Hjt{K zj#@;BIeS7nI(9*P;LrOom{p78$^yeC&mgae%T97OrTfxk>z!Vrd3VysZ3koFQG~HN z9+eKi<HH&F&!VhkYez9z{Y382%71g;Z=?zL1)02YrB+M`3PS)krVwQmC-4;BFd!VM z9eQF!+o9vv;G19owQ45`>tROJ5k`^~#?&3i>%yUwuK=eJ#@rqIW5)M9;~^RHA#Zy0 z`fmMyF)u<6AaTZgp{pEAPBJ{4<T-d?SRrMcLcDb(Dxsu-l3_BgOxnE+jGMLona(Wg z+k}II-~SZR6Rp^a!c|u@f0koK=$%WGb$HggGK1A>qMAz>*R_YPQI7pu3St2pTvn?w zES<Dv`<2lxnRHWD#T|pFm97R!lKnSWpWr$d!xE3n{;J#YEM|avN@tmIC%ctu1E=Nt zqdVZ_JS2n9ltOq<tq$Xg&^@jMLyf@=5X~VDx^aG{&jKrH0t81a?KcNp5<-p_iow70 zS#pJfzeusT&JPWBkP(<NTkTanm!b#LI#^`St!tvY2$zAU&;1{~e=ATsOZa48&|B-@ zI2)yh!GHJ+XJpZ{1W`|G)mgZPIW<ECWK>TmK|egwexhi<kwV}I(pr~0K~EHzq3J@! zfAt|Tk<3HNsxNUW^3QLTRSPp`ojSXC5@&>la4x7XC%!77WE9E)kf6xlYoEiN(|><h z{R4>3GeB3yi03ByAW!H}h-+zrF7@c$;zj9Lv#LEE8^{#-Nk~@v<G5wuRh!_Q;T{q% zj*x5iAsGjd7IVjA@_!Bn649Amk~kb)sl{5<IgnF#cA{WTw#g|>^+xAkA|xX63na#_ zzv%H<X$mP${k*L?D)ZA*@7^T+G$#|~%e1fg#mgBdnCqhAfnyB0ykm*Snn0jIRgn?& zrS1GzC-3oBoD|G&h}6E+p$67fnQYR`P?(YeXi+yiJ%!Q{CLE_{M@B(|ildv-P()o! z)!+{OLpzUOZWElyfS$+OOrv@ggr>aG1f}+vI_jxt&lJ*p_{KjHw6m$lQH%)=yG;b7 z^#s#-`4GDbu=q8-_`Ur;9TrHlhiz%&j#lz}e=2URGfVM3PDUc9;8&k)VwVz0tn5Fg zvI;jMbMc!xT3)j$yPQvZOHyBbc-n5_7M$97S}NOVb{NG!qE{xwkL0YlcgOIjCX`@L zfMe9%rWu5;fo*Xhblb3^dFL`}12V>(=_O>_E;T%lG%?;`cU5l=tVp6^U}Dpck@I$w z`SbtA1(beA?lVdSu;IX{Rp4mxHo96QP9x;=3d?FrHM%;GdyPzyLYkYI?b4DopmJb` zXq~fL?$9Tb_?39^uT;K7OJjYGSU%y%5V+^b<g#j@(PX4c$Vg%<jL&-_DeczK{3<H+ z+@jrZIUf{NF+QRBDbMnJ{;%M}5I)izzf;TgZ8qGkbjW#AJ7vM;BMtBnlx<&)46~H9 ze7#^y<TR-A{{r|W2ihH)vwh*lqxiY?dAU=}%MQM>aNg=4KI+`@>Yp=fcFs(1)T<`y zC2XFRJxloWs}phi-lsEUFRAYbnQA~Rxl8>OB5cFDl<{Z1K#6eQI}jM<r_YPvKtEli zA`%;WCy}E-)H0d{!g%nY=ykwevX-TEx@dY*a3<?1CB~i=5+;lrc=Dwgm&Sd0anw6a zLb9K|S^fI_A41AjU5pk{-J;nC&J8RaxBjdsRiC2n{ie$%_mZif&-o6aXP?;h^K&`% zCQW#%e$RQM>Xm)%8a(c+cgDOu5>>fON9TXwcQI8Q0RpoQ-4qkE4q6VLJ_nK>5PXOw z2da<{pF~~fl-9s{Akg!5h{T76$m0zLdESVrWs$<S?k}}vQhUbx($SOJvgod+z0wvw zT|Ppzh;KjyIG_%-+I3TPs~yLzc1<ILgR6frG@ls6vU}_$-$|1!`J$1HLY2@`N?6jE z_p&^enmJn@6V6;NX1K9Ei5NJ<z#C5!(8l;dPh|G(J#^fac_aHgk=bY9D7o*`DF2xe zM}8FA_UNv5>pt+v4-CTL%6q5HkE?1D6i2<i7h3<8i)USFCX8=DKpd8dAGR!;UyGnR zK*MwV1H|k97R3?tuTUK3&F%>mVH~Vd1^_q33=kl?VzH8kJ<(zr`ArNX%Ws<f88bf- zb}Erc$-2LXe3|(VC2aD>GmuY_0jqV{h(Bbb{t$gyVx#O<+bJ6{gdv<E40{-PrYaBb ziH|oiqGyn{&_Ce4O7&eqY|I3a`E2$tD?FdG>Q)Y(ac9-ylR`Vng{8dM(ifE>Ll0h3 z$9`yEiK^{Fjq^~@>JUPYmEHa9)uis#)GKA`M;rf|3j#%mn={F(;(#=03>%baO))N- z&IkJJs%%zp<+KR$A;RR#9x_`Z=y++!Uh*4~g`r_)L!4!F3?qz%KqXW=pt^QI3Y%T^ zyuX~TrI>wfzZWsVOkhPElxHdENv77Tw^QqWyXwd{WgiVbI{dp4(bIofai?y*yPM|m z04XVO;}rs-eTU7mlRLJY{rTO_9jAUWIj825vm166R=`Z5dp{J$zjm39&s^~yUMk%N zKWNN|5E6<1C5qK2uZX;gj9`yb=^K_sZ{{Cpjy2PIj7aLHW}WU~cMv1dz?FuVwmNpC z*|#a;eapFX0e6|QmiRF~EfqmENM{B$P(WD~{}dfv7DG9Q=B-G+%9GXh=o#VDtEWw0 zEsq{CbgWb~a_-!bJ^BxP7HHi}JdWNrg@8ZUNTdl2Rl-tV5;>!Uva~#MK_+yD-XPFi zFz5gCltDyIwSz`FW|nlJsdN<Gu5aIVtq1f^Z84w)`QH>WU}>M;tNQLsZ`LebZqb6W zcqJ3QBAq5JX!-!xBBWBqBNMIE>CV21gBuH+&OkK^KGv_<kOyK{ex-l=u1lLXZ0_pU zq0{ONxutZv+n_0}8g=PAxm{!0&u0L{SjMZZub{u<)zYyF6&QPBY}qHW(2McL@{PP| zGi36tw7-qa=w(*IppMtr(_(=494*R!lNOP;)d_ab9vwr^;q^R1dC5W^kV?G{Fyt$v zJT-%=To+4R`5q_=K0i|9%Xw6sOav97=ibaZiEh1nW4Ds7w|<@W?u-cq18=;Scb*gk zDW}f8E+y^GS7VC?ruErB;H{5)y5lLw&a2#zK>R4dk@zo^8<cSN<zxbj2v;JwF%oMa z+W(E912MaQC+dJ_xhFqD*rBDIrAs?tkO9n;GftTV*@~aWB=Dns$W?53sDO8sVo-rF zvsT5RwHklUhYsSVV1%)fO>R+s6uV2F=qg^om?+55x_dAY;R^DETH*{e{lnk>x~@Lu z-c&oh!|XA&>-8JjEF=|QK%?IH?D`2IMZA2Z@ERhwuAh2D{dS@t3lmT*io|caTew@D z+`8@*)_Aghk&HnY1+x^Ssqi5>A^BXD*UR!Po$!~9a21c*n<BFJWODGqBb|jdPHZW} z=!ubhyB=FQ;x+vN<hka*gsn2Y>ieIoJ(wE7Cur1}FRm5fTlk!NqImge;SF5ieq73T zw{kZ>xqbZ!5fIb`kQ8!-b|98pLkDujch1M>V8!_%+)NWg{ItvA86vd2WYZ>=5pL|6 zQFGnO5BYz5i)Eqs@|jO$wI-WQ6EZJ<rp`js&m7Bix723R8|pUk63gCpR{Zs>i676Z z<18D8^58>x%&Sk@n1X|5iQb?R4r;ipTBUr-lfB<X-G;INFtenYde)$a-c!_m+kJGk zcmhxru8VLLR#eAa7x^30Ost>0gZsg)rA8P{`RMmQuB%T9y~z7fZ(Y57n)K9Kp}4T% z14Qm=UH3DuZ^|vilrN`lliINyS{P}oO=EZ4DE0wJm+++wo~dcfmyyn)_s_3{u2I$! z3N8uYm&7Cr2xenYCc39I8OG+LSu7dvDxD#Bczi)ue>?uVELzy>o*f*xe7LL*M_Hst zSF}bo(6m#ii1cwQb%1(DwJZb#HUQHhHWpu2P-qyRq32|fxheNZwIM!9V)fV5qOBFw zqOF?#pvd$GZKBna!zTYUIAU55`N!~yV$D7BUiYbXxQqLPwm9gRd=v+@aesijw!<av zdhGE9DgQl%ceBT1?pQ$3kK}WD>#X%eFKeA2H=*Q1C>uAN>YcMnC~LKowA$npST@J| z)1XABrqX4svqmMxXjfpAgJj%$F(^dzRfDAFQw;w0((Av;Q@)sW6X6XnqYU-iAD8?% z)%Dl;YrkCo@y%10KNT~#>^r?KyI^4P(Fuo=TBz5K-gxoklr8TU?%25<H$)qGeG3lz zSQ)3BziB*OQv|H3Z0Kqtn#cyZ1L7W8F6%DKR0YbTZ~+Js0GM?MqB;@5wu<NFGzEE% z9_easHuB_lhtCotUXtC7jVlUkNySwJC}*17^J3PjmP(+ZRjeUA<=hvR28h;K`L=j4 zsV)yD6|YA>wQ%oF9DAWrOknlLo}SmVm3v!D^oDS|w0o-$tEE{6Pn<0}0R(7MevVWn zZbJklLMl9?fToEU$!2)n5)bGSG|(laD%GnnYEpHsG)=s3(1g-C2wV~=BT$$Ny-%T9 z{odgq*gi*cA|{SVqAQJ{z=KGeHL#FJ5HO4s)P8g9L&3Rg)SLOyuDJc`oz*Llbx%!K z%$EBL=KQs3?6$IbbAI2PC`F>>YU!rU>R&6q`35aV;+Bm_SSfs<{!v;w<Ic)uH)o+) zx0kQDITMQ#?e{`;i_~7qXBl?k@7IclE)Ud8H+xqIX6*{;3Nc$Q-KH-PFRMdQZ@NC| z%=I8>qezvEK;DpXf+YcnEeipuisUo&jIecAkT^uXarlq#5L+uR(Q${1|L^iwsGs`E znPW|G9w0alU|OuNl9*jN--?HdEbx=UNQRV1q(b|Eb%FNy1+RAD)$;widLOWbQp%_2 zSGSl0*~;^bLTsq6W&cl_z|4DPO`xlgg=+}AAD+g{kpKG1&>VJKXe@!tuK`F)^_9Dq zA>Z%soA2j(0E50()4^Vat3N(`@fIpwyp!;7&)V(2K;CO>cfPxywsuqF;aR%{>Ssth zb<LYF7_J0st9LNn%z!@Ijci?R-Qc>j!paB!y2EX}7_$!}>_Owx9yrp}>i*$rzO1!f zkY!m2so;6I6Qq2Dr=+R&RMVqwnknE~&Nud7x35CmDz*y{%pq~u2D19b(>RR9E0t)# z#*hy&tdwGpVe73WHQWdRj^U+fHT?uT2agG|1ZY5oP*%fYI8rNUB9~M*hH2MP^rZ8I z{pO|jk=Z>J&s0l4Ecr1^wxfWr*WJy*IX|uYPW_EUVMRqK69spd+aoh-cIm?B_co|s z6n=ADy}s$^&jG_NQb{?eE4{v?RA)F9YKSEtO(zcg%$Yjg`3tP7>6`_UtM)V2F_b7S zIB`@a0;MUT(TlB2y~uP>(}Gfu$TDh+>i+(4MW`We2f1~9YoJ;v>ml+*fEmU+T-Psp zL9uId#LkqV_-lW-gqE!;=qXQRNEaX*i@^Dyi%w<-a%%Y2_#i|aC-PN-N%%sws7h1R zLz<Uc`W1S$OnGw~+OICUa19T2uf*e}8gDNw{_cJkp={%E{K+}MRP8{tn}Q$;Y7sUT zu(}?l?|JW0g|Z6R{Pc+tWCJGP3^w`_0e&pg$kkL5xr7yXYbxZ%xMaHLf=R??Sq{@+ zpdPqHGR}A(`H#Occiy#^5c+!K5_!Lx|9MiAl6gmdBpJoRABUV4epG+^G=Ax~Q>TBu zbR=qn*2aZC*LCn@hkEb3{$u3dPR36z$}YbUH}=hu00PZ$3wOi}2xK{eAqv)V1ek5G zf;E%^&mQ9S+kuV5h}3XnlG@M8ZZmKx0_3e;a4MW>ybPz~fy~!ol>O$V5d+bStKKVA zXQG^S`3Kjj(^0qWyAI{4XT^*q^PYP-tm-QR7OchoYMsfW2TYT*M`sW5@NsE2zS3-3 z@PCy}6J&RujOU9&saxaHHYVp3$=d)3A+cJpJyf&y3@l!i=hFI;EqFJDZCu14?tv^^ z6OG+OPy#NQ=0_exY%EmENnR0d$E}}|%huGMj}NMew(4@)1vC}SFD+9SqNeIulr0pg zYgMYX5CtHWi5ZngXB>5qr(OMn=q%_V(V61M@O^raW`jpXXTq8F@;Wu3Eh<-=wM6^2 z%RABD*6ROZ)D~Oa_t+x^2dh=luk_)*<NgE?3@^Ve<cgiZNuo1*3RTnR88_a=f;QU1 zEd<FHJ8N|^jn0w<hKevy${fl1G7;_lGSU&PU4bvKk3Lll&Ju-AuWem;#`V>f!iz8V z`{vq_VJC;X-p<WCuy^n3t*D8RG-mqZp*eY*7CkvDHvPlJJG(4>e&m`t*;7U$m*g3@ z1!6|!Q5ny&eRNc2)}k`AZ&W5sbGh7oX{Cyg2CtSSiy39f6ded4+#=_#3Oy@oOY-Qz zM`}x&{j_mmX5)f~S9->Q=k}vrZ@FA0Xm2Mq9arg!gWPw;j0ZOw5Y*QDA`m(<50&o= z-ZkefF&`;XYip?(De8fu%O(`K-1qI)Npq6x4CoygPJ2caRFnGIx43~=^b>BO)d3~) z6Q)xMtbaJGXy^r=U&>D+AIBA{upuaEFMd@#JXEhvWg5PTZZ&tQu{Bk@{CGFvdvep> zFRM#wpJIk_yiny-!B;tzubw?xIn@GxtDGtnu#tl|xb%Bf4gF$l1FbR$zEy_ce^X`9 z&LmhowiiK)#%ZlwUoZF{>FWt=)u%~zOBl`my5ItVvh}5ICV(h#LVcL5NNMRh`Z|Fe ztMNiiobn0Ru?E}d$CvT758>oPIPK+Ft|*XXkR~soIQx1fI)R@m3K2WQTu_ol(85dX zbTR0OR*;p_F-^_V(&NOUg2~<F&QlH+3B?B|J|RCfad(lwYw!9OJJ}npT6;hovVY?$ z*OL=B<>45FP-;u`n_9I6smLajsh>7gUFbqn<bSi~59M;8koBbc>zyA^Q1`OUtq`X7 zRy`#Ki5V<DN0r3q9D_LcpT*~SbSU+Z%Px@_S0;*N9h--mYdgpY)9C6&<8yuWs=T)= zxFgmO(3LJFepq>Yt2E|H$rP6?Oq1IkZn||>XSvmig<W1xm$AiBr{n(ITeoJfZXwpG zj@;VVmJW#-l}G8^ROgNJKa0}8#4Z=EE8qW9>k0Z`#B<jFCZY$!qIAqh>3`RRe;cLi zjTt82KWk_XyE)7cqH|H)L*DvE=>jK?^FN8wZIwppDQG9^yZ7CT`_+N!67v4p^#}Im z5_{B7IJ|mQfgp-%KX=iZnUmLG&A*i#Vn!uVI<6R{2OFdG;73R4q5nQgzv*edthF6q zmSwzAZ+(VZS8u(WTohpDp`R!3e4}*4wfuh-rB`TM#dZN=I%{t+jjTaRKul~!<~+C0 zjhU;hM42@fMig0Vgea&8?};)ZRfwY<uK5lg_lx4s@B>gmu#4FAWQ_6ZBMrZN_1!=J zym;VB!y{`BeT?1ba1;EY7`}Dh`ZtNWbNr@WxwLncf}|Vr6(j-eSrV6v<SIg0TrOyF zxxmnKoK@q;1h*j{KgDdJo|>UC@TvBwxZD<>4!W?8jwsPeg+8#7n`i*?FVO^c=DmD* zqNuKwWwhR)vQy_*R7Y3Y$+^2m^(WklB3^0-Ff0HN){7ZT)#?Q$L{qg2VJxGE`&PVb z84QR`AdX647J~JF&&GRNEFRZ(s3eyZrUm2cWi?y<sTm3yJNMLf^@By@(L(jr<vXb7 z#W=g?ZLdyUlqaZX$1cQ})|<+|Qrj~vvLu+JfUf_Nkm_xiuLKMy$EJ)(pj!aYr$G9Y zRGrBnC2@MlSgOwQ30%l3ahNG!AiN|R6MNwYVVtN}x~|W}wC9NGD6Xp>(uA5;&uP}G zn%sQk_yudJUekpOGU_1SR=ZNwrm}B#D@5)qcd=kUxSNSL-Ii}Kwe^u?o*iTJtPeNO z{#J7_BEakk%#9>K0U|5RHzhcNnv{o2F`5Y`fe`&`Rup4A_#Vcs-N)YZRb(uOPvuY5 zG5}2LJ*MSk#DzjEOi=vd;&lW<m~n3>?n)}^_}V=P1UrX72;lA&k9IQ~?;H<9@Ou7U z5Q0#E`sKZQVINsJ?s-E2JPAF!aev-QJWklNXknhfhXtz1{ri&fV-^XNMXp^XLm$k1 z82W$@wjYT;034`WZ?Ov2iuH`;@XxUaW?$^Vm&EJxTrBhFKh!UBJehk<v<t;8+$Y5h z?*-BssH*`+LAC<A`e!&l1GxpC-?b_=oK8Oa6cx;DPL$8&W6puZT_Ldjexqm^OPg-I z2pT`hcr`ROyChJ3G|?oGFJ5F`)mEWE_v-v~ug?5XuZlN-4|nXa!I`3t6zynYrByO6 zG>=Z*ih79|9;}x+5&TJZO0ZP%#brG@NJ5SV+TTwTV`X=METqWN1VrIjC|i%l8cO@X z4E0&0^v^S2G}LS8-Yw&&WGw(g*@XGD9$ymY2xe#l*RDW^_nHCuZaBUqy-L1o3)jjA z0}L3@3;;oYaVh+23I;RS6zpk%&XOTL6vos<<l>~K1X(l%#|@i0ejMBPv!gf-uA6{6 z&bwczP2Vqcw6<TUIE`!=I)CgYK#*GgIGlv9|Et|bpU{pjAO~+-yop}J^Wsvpi?lWw zic0CZi{KE@?@4RWaubm6i-CS$3<cyB)3c$$>}-LAo#?0Wbp5nkzSVQqswHIcp?D0x z3N7$yNo%e_!`Tb#jdeI4{UA(%st~I9>lp`}dca?Ys_RTeoloan*JBmgqq$u#gm1Kc z_L=rkZJ&O!Ez?bd!{~~T2PWF5I!jPWWtdRfr^taCptOT1xs7@SIosfR>TERHhDHN| zA+QI1tRE@qM}odNnzp%`1EGABtX^${lGJNLo;u5>E=H5k%k;d>AxCH+g@6EL@EWut z$)PSM3VV@mo}5FsL?%7m9OvQ#(q4gZ^#E`#*nEml)yTY}f3qE_(fdi~zzK_#a6{&g z;ejjEhMf_N`{U#&02WT58<@t3lWB}NHNj2_YPHAOQ|*~{G0VuMkKn`y>?|`7Og%+L zunqwdnA^4b3N=df5lp@dv$OS6lPeK|)kX+?K5oF^F@LFFzDNGUDDto8r;dE_o4*h` zPkwkFx2u0wy`Ru17CDhQ)pe?2O@xpmHp8K+w`(*!1t7v{0P{@gH0@c4ffU%H#MP+D z<SuDMK%YhS?2#%>Bps6I=^ZEe;N%bt{4NaohXnE=ftem1$6IkvJYFo)WaVf~iPTY1 zlG%$+q<A>_6Ft}w#XQ4(9Jg|BuD}LWZ^>mpx?Do2jNX*-xJsy@r7NY!?-!7&@)3!R z`)&A=@U39hIRDsKIMUi9d`pS%_>v5mDiaIYCOd>eB*~ZiMOEkb3E@`(wxV%JbS^s@ z?vs(=(XYW3w2Qd~53>c&?xS7o^okeLO^2v}@$TGZll&TYA3J3kRWQcQWLXqkbGIms z(!*od%$?=(WX<#|V{xyBE#tFhoGZx{wz#>(1D<RT-!qHaJvv*Fx5*Cgl>|A2rY8qz zs>?EyVV?B4EFG$)2`_6p%>Q>kg>st#&;cQ=a&EJ=!Y;)idAQBE;x5HJw^?I0BX|k` zFA(A?S2*C$P^rR!P^rR!Rj>M4wNw8ig@cFa8<hWsr;v6g!-$Id23AgK`tS7(SbUaj zkTpoIOx7To@^$_vY6fWcBh(BqGzY*31pA|RCAL0dS7KbruEbTaaaZD`G&_Yi#XGfK ziE+$|6%Ev95!%v39gO<ac0cy+yK%UN`+Ib?tp_jv4#S`H{Qufv%PjtbD#(q`Wcdyr z($+m0D{b+4cOz0%?|=`vYr2!EAENJuj!h86{EsF8;`<D@69aP<tH!Rf(o*7ox082o zk#dE^QzFhf^qF{<yeLaV8XnW{1I1Vok1`r5YYES;$d`PQ8Trw=y)y3jNAq?RR6%$A zBX7Umz1y(upTD{ib^im&WZOS=9U6)+$oPPF_dk5WJsfpF(q6XvpL;g#1GbZ;xfcF^ z<(&hNEJ+ZCvu37e&ADgWwr$(?1kUz_5338EZS_OoY}@L<*|xeb=daw1t$y4M9o}2z z?$>{3W_4FpGrLnaJZnFd{xlOP6KkB}VBnww(I=V*m@dF%vczHfDpN(T96+(mp-Yvn zrB}^-Q7m<slrmYmmKB@F6e|PV6|ejf<!j6==8K_O9{9~HRTEClJ(a*z56nVOH9thZ zM3JqCh!}g>jF_bQuLHYA8>de+kK2r-)qi37DpN&oA3(9(p;Jm{=@vxm(wV?-YvUNr z)JS;H&-xqP0Co4)d{5LrWafhg^og_`{xa#Og~<>lir}whs-n{mpqMXolIa2P*V5T& z4*YfLq5zcxB)<31;)B80nrXJhJ>7<ErMA3@%nXq>7;BbNCU#p(r-RTZnvm%NV$$#I zFnyJ&GL?wQRqX1}U6igh8M8$cyEsfMWwP`>ueEthu}9z!MBKL06f!?bVp;?b+@7yO z)Z_GtiHvP08sJwtOkZWHOb;l!k3zb1O6e^9f_8G(-y*;%IN6J?$?M4cILYcgW+)Y) zZcUMBq9%>^B{S2c_jsF#GO>a*eGf!K@iHP-WYX{FFkdNCMRy%Qaeza=pmZ&BrJ~s1 zVICJIP1&=Fn#c482Y5`qo=zX7iZ!M?5fwvmVBin4)TVH1u3igMGo<f027L#ri+Eq~ z?`KIqUc~<7Tujg{C{CYfYNLp~XVUNLFkdNCMK=)br`X-09|Mh8PmHK}jO`WpgAoPu zM1Og&Gkt;d9NFkIXFq3NdyZR}xmoEno!I9yx8I1~A~G*|U#VVIG?8dOy?mjcV&+Hh zPNlO^Ij_BWjMjd`)&cOIV}7x;^=>Mr0z63ALVUzK`MuAXS)%z5DHA(Q)A_(O@*m3B z)5T%FQbzOdD0Xw`=ajCc8>v_nyE@FHmO&eZ)I6rwGw=u5sPRT{>@%w*qTm4S-%PaQ z^oiz5rVDV=rn$p>rA!s=Ie=nIhkjh?ES<-6^BCPG@Vmla`zC65uueSKL?qh@yj13K zFv!3(Rn%j^)`8yzij5u*aRv}QXPtO(pUzRR?frkMCq_|y?cGG0`cYFxYt-Mx^8K+q z=JBxKSNj=cdw^tnpJrR;c=id9yh>)S22)M%nyE69G;27=gKjs~-3GfmY_uxuI?`DZ z>|ScWhjm<O*I|a)b&$>~Y(-owGf0<t19o57QXiJ>A+f(-9P?=?Y&_Qrz6WfnRLS;8 z*r;L%dn|0J;Kuee(%u^OEZDf)$GeYX*duv5C;B=T19}fEvjodXg%7ru68#G*iRu2I z8qGehtIu2VQrK&$(W98X9~I-$ow5Z|^jX9Gof*`)K$ccu4N~!l?RnIMvB*|1!t(Q> zhkN|I*LeB8;=_s2r|w=Lz22+Z>s7Dyq+e_fqA5on?}5Hj=u-|bpDY61*qI5oMC5dj z(2qu+Iog%=+6}5=R?w0?C6yU>n{yro-tS@We7rA}CHbUk!*if{FYPH#7Rfoz-1Vp) z{8n)z|C8s2VRCpf{Nc;LqM7FVV)N_dzoPdN{k>cTO>cN|?w|W|pQwwlDS1<BG<(Li z+~HX)V0H6=H`Afzao<_)A_VTac3mt@z{PHz#6y%ng^PvZ@52+}55I;dj5hQ60{y(v z;c?%k!!_ob6np;XZI@k^T=r*z{s!3bGuU_mMU01G12GH(^&k$UJzMslCwjRZdtGZ? zTmK$UucZw%s`7R!zDR%vlG{X><W(_%O18KukgPem3%Bi3<@Nm3w2LZXsqA!n2n-v| z*k#grJUhvd!%R230@Jq(xS>0@2j&dZ*L6v%Di;r+Hc^Gc3EJcfKhA_N_G$56%G^o# zO>If`>3Oa74`b*Ca{vGV00002004Czi%MS)JoNw@2mk;8006}B5iS4#007Y2PMrEA z{nZHs2y*}c00{sB00000004LaV_;-pV9)u-!@$6)_DkiT11Aem1O+g<0|03i1Ymdp zZIc7A=1LHS&tztj|Jk<R+O}=mwr$(CZQHhO+eY?u?SFk!^;KuwI=VM1BlxMCLHb~j z^8tpM3P?m+*k@>H&Y_VijP6c340h__XI&h>ns&&c+MzV((x_z^q(4PW?r%d@ktU=X zDM*%*_9PFfEc2>1nv(+N7p^zOAliny4a#_R(cEmqALbCY+j!`2Q)9d7O9pe?7Srum zY<IrJeNzP`?bn?D1KZuxT$@1(ql?-5-tycgvkK+Sb|kY!u!48~<)uR!+N9(U&X=Xn zOSFp=YMK9B7eFbU$M>BdFvO%lY5F+Re1;0NElmK$oG!>{Dxn3(v(;3LQEU7LdWZaD zg%=wWWZqOmNjWEHoH>}SU!k_s9shDXT^~d&_fr(2O(y@Om@}C98;T{gu$?iU|9wqS zbTw^J&Yoq?mm#I<%X_z>k?x7*Zb!7z9WhP!zyOm6E#01+kA>3uGmJJ#kli_sq9nia z(Uxz{(hE^Z9mgWpv;gNj>46xmJD|N?g#q?5&nHA{-5<5R?~%~_jEa&svxzw!hso|X zl%bttx*-SeDn@3CuU-Mv_d4^<pD|pQV4vh<-4ZbFir65vu{V&>#zFr;0VEAfz$Uj0 z;@ZL3WWn_TDD57=S7r+;OT9S%r`7nwE=5*55X*UPla~{#y&_oc7VuBG^|67mZ{U14 zuR3m<`6$PCq$W#rCFZ3#Qn~-)C-V{NNdEP6%;I`%yBSMlEa;8+-|l7&%X1tHP27~2 z?Iy=;`wQpya$j<ifw^c!n+Ls21^*Jq_1(+(lgyT}+#~Vn20RxVqun1+N2Ny<l1Ifx zJoOmm)l>doKs=`vMmeQXo77~TGBEEMcs_gJJFGYTFo`~76r>&@^^!f(%c4Eek}ZkU z(xcHKnh-sNhk8g!E|af_4$(pssDtpxebVdE!rqs@504t^`|N=kw8zQzke-hM`#n6; z?}GR$c@$lWhKUZ*u^_z=qJ7!N{nT|(-(!O@(Tc_;529_+v-m6ih1a0?AAC2NtVzF! z9!0z2yXaT?MfQZe6LN?6AoK44a|1=|004LaJ;4K%<X8Xzz)ah=ZCgoChd*cAx3+ED zdRW`GZQHhOJ#7^PLH~X_2HITpMb%+OBPO5eVt&u;%3RL8z<kfrvtZWGthuan>=b(j z`w{0?&KAxSZgcK6?j!CyUYz$QZy4_>e=`53;7`E{Ay4?TaH#Nws37`9)L*nu^i+(B zJBd$9oRVIWE7D)3eWcr@FJ<4$#>)=L#qyN=Yk6z=MEQF8Sw$_yZlzh-MR`kAR&7=b z)TnxZdbj$D=2y*B&2#O)+Fd%nu7hsBUazP1<Mp=<DMMq!0>dt&!1%4PpYe(5Pt!JY z#{8T4y(MJXWBtPVi?zMYYlCg=Y#Z!q`vCha2jmDjK6earY;lU6dS}x4rL(s4unTwf zakJb%yEl7AdKKRPz2|*|?{D8d|49Ef|I0uz&@M0~a4c8|P7N7C{X^%&)^N-4!ALo> zC~_~Fk9LYajYVV4VvAyL;@`)Y#NQ?AB(5dV<g%1K^?7PST9WRVUYTKL=*-B>@hm@^ z%WloS&k?zvx&3)hzIXm$Ayt@L<QIDuua$l+?Sf-)6L=iF3qAs$hhHOFB!i&HS4cNx zDzXW=h&(R~%Y&-z)!FJP6{r%g^sGEaOK7i;2Vp$Sip4R2{f0HedSXMd8Q3c9Aa)an za0TwiEBN<#J-h=x9G{A>#gE|E@VA7T@Dd2|4N;qDOAH|<6Z45}#0la)$sx^Tge1s6 z$;M<aatt}2+(@1v?^9Kjj*3wz^()ns>Q21?5YPb|@PPvO0{j5}05w1Z&<XScgTN>- z4om~{z%sB7Yy<ni1#kmApi%lW`a8NV-Jb4F_opY*v+1?;KKd&C<}>AIfzMihw(|q1 z!`$ou000010003;0FM9`09F76009610000E000620ulfQ00DRbRgHsg0{|F=zuAiy zXAEZ-VQo9AZN7f5Zu1*=2b_@MfW5;r_PBv%zt6R%MSrlhKiuk%c;RW;A8Q|4^g_lc z6QM(1F;v`XQ>8{*+Y%K<G|AB?K}mU_OGmdmzIfw9_9^@28#CI?=bs(E*A<`gP}ar7 zyKFMIH*t3r1zk&;I`paN+7zOoO`C!8KpP)!tk?+<ReoLQPXYT5A?kPmV_;?gga26! zDGXQu04g5=(ExY>+rXo}fkB&L6C*2=Hp6zti>q7XEf_eow==yyFfAL*VxCwYW2FpY zv6Llvo5_M$tZ5;R`Z7Qk!zMOfcAyCguC<vGE}J%RF&1wM;9@M<)Bqw1xEM<}@rwb) N^2HcS0bxcSIsncr-JAdb diff --git a/public/fonts/roboto-v15-cyrillic_latin-100.woff2 b/public/fonts/roboto-v15-cyrillic_latin-100.woff2 deleted file mode 100644 index 007b90e85e1e39e309000e293be027e2cce5bb5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20988 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 diff --git a/public/fonts/roboto-v15-cyrillic_latin-100italic.woff b/public/fonts/roboto-v15-cyrillic_latin-100italic.woff deleted file mode 100644 index fa7e51bc8866f0a22a6b882a5eb8e88f0a1add83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28336 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 VxEM<}@rwb)^2HcS0bxcSIslfA&%OWv diff --git a/public/fonts/roboto-v15-cyrillic_latin-100italic.woff2 b/public/fonts/roboto-v15-cyrillic_latin-100italic.woff2 deleted file mode 100644 index f27a169cbef1348efe7900590296e0152e6aed76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22752 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 diff --git a/public/fonts/roboto-v15-cyrillic_latin-300.woff b/public/fonts/roboto-v15-cyrillic_latin-300.woff deleted file mode 100644 index ace05294170d847b62cbf30f24567ba537bc3239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26764 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 JtN<&Q008P-<<0;A diff --git a/public/fonts/roboto-v15-cyrillic_latin-300.woff2 b/public/fonts/roboto-v15-cyrillic_latin-300.woff2 deleted file mode 100644 index 0c093b91c5731e3c4555c5338afcfb35ee247a07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21320 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 P)VFHkxHh$iL;(N*^ieTK diff --git a/public/fonts/roboto-v15-cyrillic_latin-300italic.woff b/public/fonts/roboto-v15-cyrillic_latin-300italic.woff deleted file mode 100644 index 7984971e750e40e682f0fcb27afae301d4aab928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29176 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 diff --git a/public/fonts/roboto-v15-cyrillic_latin-300italic.woff2 b/public/fonts/roboto-v15-cyrillic_latin-300italic.woff2 deleted file mode 100644 index 46ed6c7cc434d3e60631c068432e01f7787a9dcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23516 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 b3zGh0(lwF)<5F&_Dfm%pn>I|*Bmw{cIRbs` diff --git a/public/fonts/roboto-v15-cyrillic_latin-500.woff b/public/fonts/roboto-v15-cyrillic_latin-500.woff deleted file mode 100644 index 8ae98f2dea0168496940f5da06f207f9320b7a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27228 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�Lf;J;N_O>G79G96ZF}?C-`W$cXd5^ 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 diff --git a/public/fonts/roboto-v15-cyrillic_latin-500.woff2 b/public/fonts/roboto-v15-cyrillic_latin-500.woff2 deleted file mode 100644 index fba67842e9ec56c5db214bffe25c41a155279ecf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21788 zcmV(_K-9l?Pew8T0RR910970S5dZ)H0LOR$093gE0ssI200000000000000000000 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 PRroNj+Eu??i30!thvg({ diff --git a/public/fonts/roboto-v15-cyrillic_latin-500italic.woff b/public/fonts/roboto-v15-cyrillic_latin-500italic.woff deleted file mode 100644 index 560968d16c25eff6ca703abb98fba70550f8c3c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28464 zcmYhh18^@-um<{zZQHheV%xUO6YIpbZ96BnZ6_zTZN2>OyYJPVs&BWt=j)!Ct=XR1 z?sbzF69WJNewsZa0O`N`c<+z=Kbrrf|J%eB<dp#cAb$V=&Kdx~FS7ux_7YcC6#@X@ zFMfDhKL|@2&bgCUW?%*Y5F~zNwI3Md!_>VS+ZsCj=<<H-F@NyUJrYi3?CL@Y03f#h zFHa3Ll}5_U!Q2)AKtlZC@cp3E>(#K*+|c>Q7Fpqk2m3#O1fZDPc$od@bN~RApS}zc zt2fGV3lm#+0KjbWhZFr{tCAL)bY@{{XaWG3|L_3p|KX*%62{_3`J+qvkx70)3cCS+ zZ(-~5V{8617Z6PV01VwHj7QqW-uQ=SjS2t&$Nh&q-XS_$L-(KYY>R&E2>%0!8}OQ) zp{?nUZtzDg`x#db!<|{m!QR;g0I;+9(V_jv`!)oaI5?U9*xCjC$dx~s#HoK_cLy?w z1BuI)Mh)tDt>t>xn^dydXtv#Gj&9;;o>Ee%S#7RvGJhH_?{jop5d_F_GeJ2Ql2>!b zyX`zc6;d+0^zX#0U@rO1W1bm+kB-iE^?3jGeH~^XKskyJq=+KA?%^jCkT(K=%k}U< z&I!mj4yWz64BJN|S=cmgx@EcAI4m+fae8riaec^c{8df&Dd8)rjEOAKXk1zo8_saf zglYffxnK(7On1+I4<wBsjWC02-_EsVl=_u|e74lE`R&1Kg||KD{!8Z57Z>aN?d5zF zyt|Oe5BIco^@A<IG%jipG9`7Ht(hL)&z#AeVJM!K<kA||7e}0>TF31riRLP@qEuGR zEbP9kGNv+_X7#rw6InaNXzUeR!=I6xgOxYFO4itxXt$*20uD8%_QoXdr0N4iF8Q|! ziNlc!+vGVM;W}^@HJ#QmF~bO@sJ)~-)M6@Wu5sl*5h?}Ds%2tuR!WiUi~01?mO{>2 zvk}dIOF{5XMKIdu0&^Zp7+^F9jZ*58OsfpYDm9|{fk2T(7>R<A#W;~fkcYt88-uHD zjCpugr|_Q|Vo7ihF-N%iB;}k#8ncdpG1>-IYa9bJ|Lw86wT<}T--M0u?o!RTPfP3F zW^i;K@)5j@Qgq)WYwU$l#FHjS5+$?Fk0C-5$@Eia_0utrRl#7kG*tfCKZcd(4e6T^ z-lm1)P-E5e3Osa`Ks+j%oSZZiY}3_q^9Yp+jEuoiTiI=en-00<f|rPNep_jzt|-c# z?t0#IyT0|f)?F+0g|kRkvq}bU(z5<5citp;Ju7BA&+d~dw-V=Sp+SOOY{z1oNg5vz z=uNF67@bk3h}KgfB`lKcL{nh)he~{W*5W!jZYnN)@-r?wNv?xf_e6{V-4H5e-9ytb z)wEbQiR}gKxq86UrdQ0SAEoM+G^c;T9ek!BmhFwnUl7(1v=DQEll+F*t1~F|7JBa@ zx!1LZZ0r`Xtt4z@ZGx!VmO}M1LM{-)x1$Wm2=B}hVjZ)?ZG7(irHi`qB3DVKNp8%B zhsOD$VzLnhSva8{6_=-&=uLD|iuoLy<w+7&@{Ni!WfAd{_cmeRy(sA|D<xL4jc3oi zC@7vL>g6Baj3kk&s|h;(Fo`>A>@K2}`#H#-plcWN=>dmZK2Dbg@N()eBYtqkFe01d zXR1!fJov{}5Ip2rM&hsr-<Y?Hu#ih%r>ldO{~-tbdN2kAV)nasR6sKTmkIM-?P%fa z>w@WPLFj9hH=w9$i_nQNMleMg_sgBL29b^O0clg1Hp^WP`TQ-1x1Q=Ba0iXuW5VtC zbKW9#llXIqgkZJ~lru?`Zr$R}4Pi=leQYH?fo&A!o0TSz;6a6ZNR?w&Bg`YqBm7>{ zMP9o>G*!>ab8)oERa^Wwuvve@BJ?89brm0uB!Kc=jv}ztopAx5C@|Z^AshD16o`gl z&}i@k0VQ#g%cg})ly`i?JEINbgy&)5f#tz|ovUG$+6;mf;gwPVDPmU;%KNDz1&Kx> zoX~34pZsqg8qqn$d20xgV3Llo$*20QK?$GK^2XR3xF)~!vX?0ldf=O6RK4N4<WaFh z(p&ET&XY&G1r+Q0w{@!cq&QH70xW{mP9vV3?1Y7S9<tzK9+0esAdS!yZTh$BKp3G^ zw_C#PM1wybh7pq*wmjCr-~B<*gh|Q1zVqhHNxcQ$gF=8PWe5b>&28{|bk+a$v98gh zaMjE|;iOd=)u=nZX3A4}v0LLaFBEfJeim$_8V++2MmuO!)f_d5iBpnoq6aNLHKvyA zn&H}9fpPfz%}l(^O6)%D|6hBvymY#<SO;)2WC1vwg%FGulF>D~<-vrFS*U9eQlCs_ z(puVx{TtZIiXk7n0SUVy%)M_c|4wWx0m2T^V5>b2(-`)9SZI1~fln6aSh>R=_w-w9 z2h5pnjznsun&2$)!@oG;M9X9G_|9clrqjh*6-*1v2d*^lKKIFkaVC?W8DZj=B{zKL zJ>+keZ&+`&%E^e%_ZrrfoyJsFY=XA*k~KE$Ie4Rg&L@T_GE0@BlFC<wYP`z7-Zl1( zd5@{b8f~+7YwM<cUmJWBeQos3f)PfY*$Ej|b6c-x?%H40_N!zxqu9F3+n$u4-ZQ^) zKP3VOt=^iR_&)tC=Uj(NoUhQGj}hHc95I^e1h2UJ@k-M?{52CNxn<cCm4??-H5kaa z9;j7|60Y;(`8J>7oL}MY!+H#C@Rp51*o{z(bfotf@Bcl^@j7KWZW(Y*t%9{)6YgWJ zUulYb!*vYVnevkHzw7Tv>Mjz-cd-pVLQ~~2<4^t_88zY1gq8a5J$A4Q6P7`-cN#fw zmgVZxIAo-Oz02+?Fcd*F&DJsd2*k>Q&pIov@)A2rnBuL#5l;9re52Y^%sC=u<Cgsf z#vPuIGQG$`UpKWC3G*sT%r-;2BF85$30v!Ubrbuqzrih6RWM)IFqlSZbW?rxyJRq~ zC_7+a3GoxxsY|YAr8uOPj}E3Dvl0u7Jfm21Y7W=zaBlkl+s4LnRL<l7cMDp-75Os^ z1SWSrS|f`0+cl2UJ)#5-vKxhN{ue!%dopnGG{c54L+WcKf{&2y75#}(2Lh2_E;3S( zCc@DMrBod6K*QNA1W>eQ$1}hV+%i8_3I1CwEoJs%G0f)45b*|;bePY{2mqWZ2&pF8 z2zEcM*VU>h&5UPB8uq_H73k%pYLgWu-*{bX0^a666o}why|6bQZ1=#pEPcQqK}%F) zvW(5!*GX}UnlsGej_xyg`aj;jU+n`qtx4;$&+QWvSLyGf@7aq-U;lbqz7G}tzhM}= zZEM&))SWE~vfx1D<QJZt<TD?QIAW7haaNigAKs}Dhi5(L|IY35s8zoK8D>ZvAD$*> z4p5(^A-WVW$o=*cNu&1?jkfArs|0bOm>(TeUc(P32{CMqc|+%B7B+U5xAWbCw%Bf+ zp6Q;oHH4!``ZB3HN4yah4@%xn@3&YoKTleiLYMwMlV5d9iVqH0;X(dHI%BXZ?sBf1 zwH8go1aIUjCj}?0SJEz!hp(ydu|&0;02QZ*?=<BPq}MwYF<;)_k;*-}%HDLP?hF)t z6r7RwT$cKKyjN=J8GF3+=G8M!<nOE!RVDh?!C8AOf3xdP+0~Pp_@%Smo3H#_<>;UN zykd3Ddi=(mh`(13C$b*-o7GJlhgO|wyoP_1uPxt!UZ>K#6k<ePR5k>)P6jkc@y?5P z5P)C~B8sK4{C5-pZ(RDS$~4wiq+$yEcfehl@O>gsJON1hupksZvZF<9H)1q5nm6<8 z3b}3e7n?Wonr&Om-|20Re!DWKUlchzzsO!KzxhpI=o;HD;4KQ@!`MdK^n>qQZyl-o zp0vikLDC>T)JtuN4cccxjC4*>=|8D6xb)Rpl<t(GerA$!0pJ636ZUXl9l)Nqm?~aa zIibHK2Jwxy_R2`&jzH%K6v&T~0uN}+Hnrc0l<N3DZ~%D%5ruW0@WaZNM7v=<i1&s@ zIWn{_p~z6%jvS$zOQC^C=3VJJ_-6sm=`_n=df>m{5p^z7zksgfCpUPvMh0xn_3Lx( zAivvBo@{gPLHHr;A3Py}{SDTuv!6@>`j0$*fF9}XnooL#AzJ`%WDx&b3*VRvcjYqY z5Dnmi(74%nN5RPww-JI;<?ACQ%{=i&X#3ID59<3@Lu>$oLXp6nK3+>|(D^J-&NYY} z4=^Gge&jc}B<C)GE6Yf6y6Q>wFn|RxZKhiaQ>FCwrgryh2c{}P{y=ur5>U#rE#BUz zN72ha>NiD@eCwI!NN*4Kfz^vLy2JSbQ@P{v&?0noWQmVrckCH&KM%UA4<fsDg0;1$ zYmj=0cmaiI1L=Dnyu(xE&i?}SLdz7&yp_xkcB7d4ESn4S-R&G?<XPhj-hBlLst(jD zKOEHGW3$$HkBxp<8QDdTTNuJqIK3$wPq)fUznMJUWnAHMJ@tz;o2TO6yCVQXo$U&R zD_xoMw`lM?{?*~HD+=BA+;RI&$J4L;`S!&5PYk~WVSBm58rCa6ri=9^#igsT3Rfb# zb;Y?a{h6&UrN7os1tC`%)!)|1^bV`w1&pvUC<AtBSe|iP-#WUQ^6Sigh1-TPA&xzE zMion^eF~&&HoPn8Am|Cj$xYGK*gRekxP4H)<(wP)z^!{nXIFk~<+Eo4i0zI*MRh<O z&=4aEJX|nVI+waW+WI$T+r{RB!xIJp<q)3Mu%mmMMm0@0{p-E0=CH0i(S@1VS@mvV zZtC`*jCKeyVD@L#U=BkA8)DVr#)bC3tN>?R6e|t-BcM=my>J2%o2D$zFy_)2Y$X=r zf30-q&i`W8H4G1|57%~l4e`^x>PZSP!$>n$&q7;e>j5h3%yj18+M_^Q*N6j2$gRu) z+Hrenc>BxQwV46%)e!A-dfpqNk&o`y$9Xh)kxgLP%YfAp+iW(2aO*kLQcmAe`K~m1 zb$~mNY<LrpkRYPSHtm(1H<%6*;x0UxPJpn;XX|IOBB;r&%N&!=bkSJBq19Dc|7FO| zKz~e!Y~D*hxq<)AX8a%$gb4O7Kdw5AF{))nPf0YBXxJBCNFeMU;Kw)H5C>4d0swrM zp^MW%a;`VzPn6(L;~)5Tu&NyZQq)62&p*j|O_$_&+XgPhcV{PbqrnoL#hGH?VEhnA zToK;uHi-PyLGC%Ec~RH-(?Nz9H+Y%<{3ef+IXDYq2Jbd<So>14*w;|8uz1G56kvei zT?03tOl&2O%_QN}RnrVSnLMSKxE-xMhavb+#Lwt+eohP%){m$OI+8h&^+M2D1+T2v z%T=*(kp?>H7FX)1mf0+ofG;L#Ihn7QYX!zWL&J1Fb3VrbwUx}PG>;$qoX2|QU%SZI zpT*_451db(KTga|Ohz*3AWp*_2eAyaw)d=eK<g#zs0r=3UGoc?40OtP^9e%1V^H12 z7lF;Q4mWCnWLAZC{?qnvGA7(Y0r9#>|KlSN5b}ao4+ITd5TIN5`-)niSdrTeE>pJc z-*1~=Xigjr%|u$OYF7I(ZoP<?7fD3it7O71z*jQDE<mmoMD5!^E0GHK0BXP_ARdtO zgA0HYpaJ0XlWWii$N>z1Kmq@KiKBiQ08oK50f^sR0JyJI05S*>00xvBfC?H7Km@A; zpn_up(7<~Eh``zaWC&0I*pJOma|hB@5X~TFLX~p}-Gof><|HL}*CbMnn%N=Ux2xn5 z=-_ZoQSUGsapV-ymh?Jk`|@9vzG(>#xz#y)@g{gm$k={;MS+-vRQ#s)?{RQo>@^+l z8<T*^YEx4;A;n6(y(ci9C-&?90;o^#h3p?|s6plByjah6=P4xKTHlr?$#b?&GSgR1 zYG8wXX@b$(rB{^V{<|OpGViA225wH`TtvkxO)9IifzhCLq$Y!yd5i+r|9+p%S)S-s zKH6!dc>rD9^FMI6vBrYd-gorQieGuVtEn+|*;eSVWkgi?-MQ4vtBr-t0f&{5KOCgA zyJODaCB!CHG#my5PL?bjC%9%nRDyPcg!MdF5TbL^aV0G7Q!hYveAW{sJWMGU^MKjj zoUR>$wHV_Pumx2emGlCfoJ}Ko2Qvf_PVnCY1Ofm9AOXPN-v9)6peip2cjcw;XU*rW ziz3O)q$^fD!dXCY2?(N}&A6Ca{so-U6EdZ#y+eH|FmOPKwPIX3p=r3NLqHfX^|%A@ z{LvHNF)3MFZ?1V)tdsq;tmlkd><kwKqyYfXTCoF$872S&+Y1YA5=cfnnQ_Rb(V3T| zE9$#+S6PqhF1TQ)cM!7`xQF9<3?cy0`>(D;1~Jc%3g#>GpvUrMs<ML?=K~??3u1JS zO}9pM;}q6;j}dZ!(6!%lHoWrftZ*M|9Pg0CqBW+jK;YmWYAaM5bc_Q|mKH`h(Ys5b z_O%Q{pjX)ugUsPgmQY;GOnPVPt#r;Z4+Nx8nfa{3&Dj^_Q{Ih%_EE^KdVSVZI`lUS zFV>TTBC@hUYU4RRb<Dqus^+$}oF@m4K7`nVzhY%eX*xj}ApX5(9|&(Ep#BPNWbYIM z51*@&6vD+WMztzu$^Z0hZmp!cu-PF>5+N^uj~{hbEh$(VDj9{+V_|C>VFU;v08W8- zC~$jy$cRPl31BdI8YhIKSzL@^1%Z^qI#obSM1$?7{si@sQeE{riS;t<dR^MfpgoJq zvPlh<$;ei>A@}-g(p|lK(FgK-Qt3gIhxGE?pT~cT_g$Xkoo@Xeteo@FF!a`5$CJ}S z!8nZbZiZtx=)1f39~08fNf?GdUdQ1tg9Bh3qM0FU)&Py{{jyR7PxggM4T4xf%!cRy z#E;qn@>9YZu*WjE5;J#7lpV<&<x|4s4K3=Grr@<ATt%)p62mz2NL&KkVy(`Z<Z;Us zl{aDTxO3jOh`W^djD!rK?`M<QZ{E{{O~X_jtOp=Aa0t9vqEAvudW83Q;UWZHEQvX_ zN^YW3^?A8O-^r6M)fIKGLRITcy35GTyHe~X)yf#0ZHHV<e#ejeqTgfoZr3GUbZ{5^ zRUXoumA}o@E~!tMM02lkZ<Pk!)RD<$xp<A4#K1l`7AGWXwT+M5IzkcP_+2~4lg7k% zqS_!$O+kPzs$WDcD6>GttZ<h6L$$_%xte@I_&N0QlXNdXw6gVC${|eJyVkDqBGtxc zMIq?zIM93I#|=;7vjEA44hIeH#!_8Oc5i|;Sl+nC@#h7IuWOeHq!B7X`0`@lW_$TY z4-?m#+fe1Re<mCCmcoucSxRe{C590aizYALHXpR8SV{$R!0|F(GsIYZSe?(X6=$#I zQ5*Q+xN%$_mdi4SpN~m(7$rFcU8gM?4R8c`V6^F0%Td|RA{184Z1qn<6ntsG;<Fbv zrZ)s<o7Wg<H>)RY)}iv{+Ag*JmTot<F2umvK`@qSIwsnbG(>}_3hFY7)o3yVjy07G z;i!$*Obf8iDfL;>6k|$4#3yfI2tzPU(pIlapzjmE&<%c>q<%}n`QBSCfm;+3=L3(A zIt&s~(@Gj4#2q-4F!w>J7^Pw5ZIW~2PKqh(gd3IY4yJ*thVQ=Be4t%|8J+}<>Hm)4 zL}{~ZEMUD!!EFWOw_&Ebza9iL3?V9XX~O-Cgf)VZj|8ea2^?xGOyTXhC+@@3Kh0?A zHugH)Sv*vDHGUr0LV;{YhB$BEvGB?b_aWbvmG%0yQnz1Ml_CrTI^oEr(?^o?X?aVJ zxMMIEdCqfzMo#UFXsE|0QXY*m_=_+KJH?{Ov3A%Fdx>&IZO0KHgVo4ggeu~ZqlnP# z6<2hDn*=-O@0)(@T_y;=h}|93AV#l_|1zD!<0Qtl{d=0x9rf2rDU3f_Esfox-UZy` z!=+YE3n02lPhdMnnWc(7mTbwmMVl;0;Qk=ePb7X{(|FrT{O>i5I_h(O^(Y)nX@7Oc z5&J!r_7gRS&o?y<5NMzx{gzZ=9Te#c7g>^WKbpQ)a5wLKWwBc|Pr_Z+1(F4&j4LEN z)V_*F*~dCOx0R=}p;pn|?Knq?UQXnU+XgSv5zU4;nw#?11w{6Eb-WBSTyG_5v^U^^ z5PCLs&W)uJF^~wRvF<!6OQlK<-DQr5lUr3Y=Uv*`)KQhQWQ}3fL(~%DS?7;EfI1Rv z{1+y?F9dQ}5?M4mAxt`^@C9vhD2JjlClUASL|Mgn_Y)3z&W1OEK-{0dWjJrJ1{G8l zvREO*;@o@{r2-gL0_*!xPg-bxeZz>#>nNtteWORvo{;w-xXhKI6w8n~n$}I_xeGPF z1G8NBasCQYa!_RIX)~R{(3tI}^CoTp&>StEN@^Wi4LtYvTX#zr1~X{ipUPi?O<+nX ztD*AJFC563OPyvTL@&$F-h#qc;Dt$abs!Ugodpn@Btx@By`X@!#rW_`>P{ftR&8%W zg>wzcWUJvwYH@joe-+d8%y2+wmUQB$n)z${dJ<*5)U;TEK~;e)fZpwR+DYds6?liF z#+E-OlHz{IaIv?3*(V^yfFk|_1IQyk0V9EmP$*CbQ%F-2GA@T{5BF&VFnUQ?Q>4n? zkd_t}XqP4*j+H4QYw{kRH_GsP0!HtJpu#}2O>L9QD4ff!kZpkeJd{Jp8SNk(Li!r_ zI|V^boIdnM381E87x<6nq4+6nF@qmoL$VwlqE$8go2TpOy198Ct~-ZI#<$qQUvxSD zw-p@JsRnuM%Z8K~dADW_m*n`9E|1WcOu3<QhlfpJTe9XYSd|H9Rae55g_x5`?6kSh zpld)~EKN^kpCwj@VMbDfV?HaS+X_<hOxDd;yDYosgdv{#Kq8iu75*Zf>5&i4j2Nz6 zIQKey*0N}?&h{(6S&bF5wA;1oQha@?OpQe#YZ=}7VyI@v9FEb5&Kx)uevcKikokq% zQ_D}9`UL0R;rou#6!R^-vjdW7kb9dpNubFHFKjlV1sHW+Jp0`Xs#PJ&f$5$Wk(a_K zmZvQy7$Z7PZ>+T(=BcN7PoOw$p*kE0E)yz;om%3KvOUqBeY%18Cw_*aFTao^-bIEB zGSjBte4?Y^D_jP|W3hBtNz15@k&BxCD;}J%7)TA-qzHs$#h+}Em~7MtKtom#fB;4n z!N;m~aI-T|=kTNu6AgV_v~EM&Yg)8`Ne8SJSiJG+bnN+h0_l13;PcCUw&;^gt<vfB z9HAzBrRWbIv|0w-KnOdw28>TQy-$8;a&(ekcW2Ru*r@zFM6{^;`(Ak^QiUcO;cV`D zvg|4ZE+N)KTxHSCTP<{D@Sh51Xza`$<^)AZw_e;GdgjG{2SEzf2};UggD9;~uaS~8 z4nlf@ArKn<<^$2<$+;UdTTH&v)`5nn(XSmnOx7rR{yYXS#jT%vTAr(w8)3<2#sr4j zmSObXY=L?G*XHzHx<O;v@*zD45dCP~DP>+Gf0oRv@^q#dyio)gF#ruQXR@Hb7vo9G z_=XemlrSNK5FxW^+Y`Bd6}-&)bsz8DiV{8TvN^qD0x%C0PT7i+<MBuXSQ&L<oK}ny z!uGm=yGp=|ED9S}sY@4U|AfeD7A|TFn<ABgt9LU+ytb&LPz%;h5tjyyD<`FiC#ayO zB(9N#kE6d`2E3Qh9k7(!cP(^P4wvbC-X-FQ(ZEjF5@qD&o9u1zn%4RX)Ed&jz6rjP z=$#i{{wo)c*V`x-o*_<ny&R;yt}ASTdNsV>USMW_=5-I;0UA0)0G}4JSd$La7qcLu zp2+l{jS}n{CS*<YxR{Ul4$G7xMK1EUb4p&U0P>2U1QUcPPYTM0znJt93{ziitAw;` zlZx{=Bbi1#;(H>E9W7807D+GJgaDRHg;;0F5zn&3uDa3>YX6?nXY<q+4|H66^w@WM zjt@!`lafCqoKmUQnyN7+ZPjkE%$!u(qB!|@U4xYE<o-_XF+<^f^Panr9al1)w|v1n z%i3sJn_LRwUET5#5d|xgyZ5B>h`%$V0}%jLs{?f_D=X6wwvG&Z@Syf##&QD?*98Fq z%7-ooM^2oPI86vGDUFH9F{hY0P)SezAXf!mEO|GJ=qR8>x4qHeely{gGI~4(f=F<F zK^t&uGw<LzQ_&#`lO840GJ8~E_g!q~9uko4mM|m}IP99OI;^)mp!)a1vG3VSPEb(p zH3j7sn25zf=-&D0p-G1yCR*hcSaT$a63|2vFh^{ay`X#(W))z|0e2m=9-x-ga7L=D zza`;jNI-<k3@{1G042?r5hsdEs^X}0&n1i|QrEq7)e_y!ZY|^nGA96Asw5eh4jmvX z@7#xcu-tZ4WuR-~iHB}N2kzYDERf&lQ+4$x*E%(_Y&1`d+Q4k5A8jVH8VPNJBR*ck z9x_03wK&gc2e#8H{yJ<GRSQh<{Z|l^Kw^ia2f~%dl}0_%WP!C)Lv>iwzM;KRO$`?? ze(+mJR}UHUB|7DXR)(E4d6H=-uSPTmt~q?ETpFT>UE_dUMAg1H;$KHKR+1yclUGA> zs4uoOQh^VUj}S{e4Ow`I3QZm`v05lzxPl4L((s{Jb5lCvFYCE9DlN->`9_`@OI~#n z)!%OVv!cXYkENfF&3BvE&ZJYb(l{-bF?#O%X?LI8LhQYu8V+ZaQCh+ha}3>I{dJS! z^`dN*Q~wfC|7bPohR$utW*T<5A&plY@~D2lri9UkHtRa~Sbb6V)l%|PM#5jKeQAO! zUhUC4z)W`D@bN<5KN)<KIGr7U9WL$HJ!WDe*u#Cp3Ja~l0ThPN0izwPQqlqt8RZ=j z6n(hy@FL`nbb_6_u#XU$BLvLiy>e;rx(_j>ufFc;ZK2ib28$p=pz4pI*-4wIY}T=R ziujQS<$$<A7hjUPKu$)Lm?(Jz`xuiKs1B{1;0q7DV!cr9trP#(1}aj94BS8Kv&au> zBC>>o+6%V8Emp2X^ig1bbIBJ5&x;2t1iVh?&0}xodi-NWI&a2qJYggDOqq8fln6Dl zn#L7($x1}-M7+x0j_&=_P!xWmwUn9;XJLK&qd=TB-#}2nkl<<`)R@7@<LcU)Gp|a* z=6!a_BSs)*YBswZX35QQDHFsaWeJE9vc@Im#U<vyTU$#r;w7e%S4XE!hTe}0?omkV z$42VLYwUe8{DQ|&w%fCiYnB#q7vQ+p`=nQr`Jr;Yjw_fPfF}R>hdX^AwTo)J93N!~ z20lLxdupH%)?`+yaClZ^nl()K5dmipS<|bk8(3uvMA|6)W+87{Jx8R8CJSq|SyiMM zBQRH**zHHiW9`e2eV5^S8FMD+^aO?;Q%rC@)S*7?8Xpng$X1fOBwm^D4KdxW#r_;e z2PQ1NCXv(EM*KTNVWrYFYOT^m?T!*zVFYK(^np&x<pFgvh~W*fQD9qh_jTxQnow)c zvWQBjf}M@tX`UQUC@{2<1Wjl00Q;@jCPRr<;Hjr>upH|{5xUJV(wOMI@1%&1eWpD| zZUaGxsdt-cP@29ac|QCig5gunJy2OSZf!y@QX8wO>@us39QAJp`Ja<FB-I!(R9aeS zXrIbpBsM-QU)43m#0E`jWU4;>yi|0v+^Wmfyw8O0dsB951$SJlO`lgGOVUL6sH4TG z11QY59uHJZ;B*XF(1$aY5GB<2XLsKD`!V7vka6srDdpsT#s#T#U$<_x0v_H;4kJf$ zMH4Y3Bv!C%uu2&$NIz;7A<T939UboPZ8ty64916F8ONEl?mqSfdVm1WpI<F1gfCbE z;QjQut9*a*1z+gEGVh7qxXEL2aJZ-H>NjUP#k<jsRR~L-+)pcs@HxM3ZoICCX;!9l zKegOuTwHn^Ap5jq7=95Rv>>|&#<eK}-(kxhv--<fWx}Ah%fsz>a?joy3{=;<W2ONs zbkn|xgACmgkDK#>q^3Y{6S)*TB-)n!9j*;|Ht^XdZPjWE9`-F`%~v|_L89&sxFZ13 z^N&@G09AO@)B^~~M!jlqdjn0$Q0HEE_+_-K?8xqM(a*$N309~S%y(3Ds@Ika2yj|E z@D@c$ea$giMu>>F_eyYxj;u91em4rH;<wq9t)!OG*eLndI>+00d<e(FKYItX*x-zL zt>SNqbxlN!Np}lMO^LI@ID5ca&<SVj>DvFwM^FB&Z~`EINUMAd!%oHODmCglsE@6C zZM$Klcss<dj@v0~*&#zzW`!t&Zb|O{K_i`~)E!DjE&C9pau3-!QL#quEpYNBI(h9i zG)Ie_O6*I7-2>`96Vy%h<&z{itio-7U*|x?9;^}#JiPvElpW4jLXcUtFqPBwF0Rg* z<Kg$ox{AKuPERJ%=Hyr5B=X8*j~9dcH2>9|R;4igdAExp;$Pwiw8u<}>s<GTy@8&W zIL;Qfn5gb*|B~c4>4%BKNd9gNNH6VWok*@u`tk0f-m}k5-){+70WRH=f5CIk+fXcM zQA*PV8ry7rFyHSNdw%9~A5>uXpfTaFWrRYg*IdeFS@k^w{pj{e{=ZPj#vWRGykzs! zH)zW8b4)^$WUOTo5!vm_NrOHc#5DdoYwo*AZC3*>H}$E11*SFnUOd^S__2u+a|;h_ zYBBjJ#qRrM47Q_m*ngH=r6$6BGYNnuUdaa18R|TzgU--uuM|tGo04|&*&KBL(oj*O zeuw^b7D)#A1^x&38}6AMVl**$l)4kjL~>u#&PI&4I79eWqXHUUoUq$Qe6bhT#R<=W zc7mKMpCk|buh45Xf$CuT#-ZVxElqdGxN!0QX2GV}{ixzNh|0z@*V5o4i}bIVTU(Yw zCszA^Cu2cNYLaL@@gRSjE5P5zU)s)G_DVIpc<~1B;feG{s>2h-WVb6Ck`cwj%-@RC zxm3I0NBUXpJ&PB|A32uM(iIRB2dXcx-Cj=X)EeJ*6J9aI<Gtor9rrmh`w@<}UIc2j zwVIvQrpo($ruqvcGj|^jr}ox;8g0(<1u<iPse+Ekj9AEQ_ovL^_2|Feg@PbvIrze7 zabx5g(zaKD2uK{Td1i3aRe*F_C?=y9`<CD9R8!J*cRgn(WQx4aVN-|b99!7LM&yEV z_|&2;rcO2AP%y8sIPfQqcVUWz@ZxKG8sJTlx3-W|d-;7&myT#(+cwF$d+0f$X^|wC zZmZZK0r$0`de?M55wG7>X~r-xYb`6`M{;T<m7m476;^hhjrC*gNlk{a;gx|z1jTm; zb&ShW_8*U(gkE~&d?5m;GLI*JH5jm#n=6c*%-X!ZxCnxQ9;bkP%c@I4S^F`Xz|1mc z<N7yFc<XOsm;G&BxVEEv**$i^w0x@LlcesDDSSb?1J*X@6nnM5s`XzqDX)4PtD>0u zb5I(@i2PGJ2Z`Tw=R-w=V*~dUweO?4;o2r!RcLe8Ot0_`x1uS{1M3Nn`juKs9&z&- zV^@F-=rfa2#*s<{UsPK_&C(QAj)VP00@LBrUVlRvbuW8;n}?7s)(h~M@Ot?Y9dk$8 ze+LH~VB~OR`tMlhDsqg162^FHnGn4w&`3Pw_mtc)l8Obaov10THMw^Vs#Apfw=R@+ z6<w|A+Dvzh3;tEtfhLWEq&(C+z0JT4)#BKY*(vg_`d4NXp*-AA+bTl&X+J`A3S-vN zL2Z_wn0ziQ(N!U9XkrD?QPcnSH}dToINJj{yNxNAEBzb0y^AslfkA}>l%1PtV?zNp zm5OY<td%3VWw01w9zI-m?Vs#y3upAZjMc2UN_vAz2r`Q#d%VIp3sF(6@NPGZ!@`C= z9<g?k=ZUpG8+q~=8iN6k0iOq}`@cRRDG+My2l>}5k&nB05<tMh0q+@cLyr`&4OTC# zVK)Ia4g0=()Ex+Y{|d$Dyom0TZ*|=L?9`pS(NOIRvn2wuz;8zJ<)t#Lum!4O!qzOj z&&dLUc!?|Tc>nL}%zp3&QBM<WcD%|l980)nOl>%AADpr01O<)6!$4H3B5jG=m)qPT z7l=zaVGN@>()p+<cIYDV1~teoGXdun`ZWeCgM(@|az$9bwnvS9Tg%}gC@;C7-}44E zDp_qTR^+ic9g?+U)$0b>f?h{G&bUodvbcW~L&+_A$1#vzFX%)^C&vDEM{1e*fkU`j z{|k{E7GknvNw&cZ0|7DF8xai~!qFX1F%6{CcPZolMT9#?dFvavtwDg9-|#?*R^cx) zULzt4dY?0sqm}B!VED}p6yJ}LMfGok<xsn<gT?5s`Oyp1ou>A_;mg*#li9LbH;}l6 z`g^+9WD6AOWf}v?>2Uw;DpgO+q<r3@+aKZjYSM<iagV%Pm^%P7jwW!mRh%713<^F{ zE%nZ-1!2J<OliRFPjGz|9%=UZU~Uwjjw(`3yN)B|*Sbf_V}-BW>51sb{Uql_wDv@o zzRu~K=^VM@dNjCOz(Ch0qn5W{vbE2UkdQC!bgn?=BF*@=%?irp#Ze?cLy)$bSwhD< z44l+WVLHiXiMr8BR0=&j#k$w8v2u_A@9Z4c!KE&)50<gDFmyj$wjU!mvzyIt6z_05 zGUb#<{VKW6UHL4&#Xtb!x$|{H;opV=2TWpk*|0F96_6kYJjbLZ)1#^gdhh)Lqz8bL zzXwT#8^99=(Rfe?TB@I*Cw_AFu-{EC4n(J~?TA4T{>BS^i18dl9VS#5xnKD2ft(>S z;C0BYkb2d;5OrNKs4ow}>eHvKof0*zopS{h$tl8DL3NNyW2X$!yY=Ay3*1Kcdn16w zyduq8w@EpqmOf+gK<cAU@5Y!o{H@c0_j{RUsaeSK7x}nbO9-m1K!5+KPv|~}=ph1T zyjr1$I6%-I;K0BHE#m*>6tvlALvLX=J^LY-uC853eP$pn(KeA19+m%R!<wd8fhDl@ z#FbSZe4#jL&!{hu&g)6Phs!XL>}>uD{Ibw$@q)MC=8JlF;?dpiw)JuZsR4hvPcIuB zEmhty?ZT%R@0DOl8P+}KEL^1)sg6h85^^(%I~fdoW2<h&6?m*5gv2dmwq3nhgQSh` z?pkA1Mn%)?EHUNO@x?Jh1pxsvSxibWQe2Iit&xs0o90>K>*$m7@SI^J%a*h2`OMLN zBuI9n^-P%VOIxJO{MZA8XC<4(QW_2QnH&{^NJ#@QQKL_bGUp#NVTQzPuXR2K`sq^S zJMfTYs9ev8qL(glGq*|Wi3!yE?HFrAH6SpAeWXTLRCdO)bXE=<cVe$#5?IlGoWE(h zU$19`g<O->Vm*b^?ASs9xyot%6z9=mIXW<sg8Z;Vqz~hg=Xr-3WtPg1nyx;y5UKV8 zZeRcoXKDlmV*wLHyduAfya#BR!~6Gu1xRritwFVD^|^UUM~7?JsH4jz#SwE~Cr-+Y zUxLn0nN)(6Vkw(#gCk6k47x5eD6xRm6;;!e!W148!trb7nYl`#6H^srC}CzRUAbMg zi9L~&`7<JQ0in)rg`bn6g!!AgS=2{N<5P{a!{+Ac83~%F!Y{BBh@`=p$|F5#^hn0s z5D=$E><(L5U{~63Xl|&Ajiy%Y0bCi7tbxYM%n@2~_EaHPhvPy6RoATqG$X6x8kXm+ zim|FyzVC%6P{R}oi9hg~CExdIz^w|jxQ!09KM3s48FWNXkw&@kIa*2WQii28!5=1B zo@%h<L%oRUjx=Mh7hRzkO=bG;Zm_C(Rbiv44-d(iADflIX@~+xZDUv&ggj-f_V=*z z^^Lr9J436F|3Q?lgo0jWc2E}oiFH)Wq6B{Im|Dk7G`yO8PSo7NT?Z-8jx7RJk6Oey zv36^QK3n7&HmQj+<1zI89!Mzoq?F#`U=Lo~NuX-&+bKKx6b@^wqIPS*4os-G?A-3z z7z$H{`c>f~QJm;`p^8*C7^(lT(_a>*y26kkVvN`cJ$OIYFVlD2_|Z(y4*v05<S=gI ziMl1f&h`_R?y-ianHBV$Gt*8o*vZTWHX+<aH`NwTayTcupdhiZLj?6}C45>Ui#0!* zVK}<Mm&D6YvrehevyU+brC2(}H$;+DOI%D`rKO>eng#LDW*_Rc5I((aFc_ZDh{iMu z7@jjqd@6rt4`zH-R}skEd(GXLZl7y`yXxO(Jb~)Jdv6$ko==!swj<dv<W{39I?H*} zLdQ6B<zL`qGQ@Xw_7kyrw;L>|qBo^3Oac(@&jOrM#<-*b1E&3teVmcrYRk~ec!u(e zve+cGnI9Z%ZuRmLa<ir|MMW-JnGotmnL!ME>aCULXX;X~m%fQB)pRL!?xA-pbS-&i zE$u8LHc^7N*8;Xg<O_NM2+Dc(yn-w6{Q5mZouZH&Q$cRSh_v>%@BHo3+(0Bl-+#%$ zUCX&(LaI+j3<bJ=%JpgltA`1Dd#*E!N+W;hOWIZ*vpn8=W8=YUIU612@zVDrOBBBk zSL)J-axt}d2q-QEkufPc5|ne&^qVkbhv%?+J_^?8#1QUH`MT=LjK28ul(=HPThj)E zNAkU!ndlUgDHB)KT&|i>!S?A89alf!BU*bF#{_5wlCICQ6N8{VR$5Nn7Rg#REvli0 zS-FUy7P`~wj>+5qfV*6><1e3V56@M<ERjIs>47-&6gJO1Ti~z!{@z)_W904va-9mK z11ds0w|%I&0j>+oY1l+6AGV?9f-enp;D#)y`!bdI4uN=#VGJ3u5^j6e^3a}?Vx1G@ zx{)Y|bQ*|7B~)MkdWi)$ByE;*)z&(c^I79`aO<yO-32@BG1|^l?bq*JA3(A=_hzla zl#&sywvefiElh;_n@S{JCoB+sGTW-bRX6`<=>zniVf`JPWIi2ytW>j$TuHW%L;fbi zH9<S&h`<0@Uwi%e`*e@b&iIWcD4e?=Gxv!X(Hfg7qPel|8kE=u0AO)2=F8n*!n}Gy zfyhpTx*`=y&`1Ak`}$b!-yi&_3As3%r>}4TB!WaUw!U)L_i4?YjkoOe$jS#t_7~L) z_7{>`M`01}d3C2p=l7CT-NbtxNV}#hu<r9voQ*zld;e_oXOb6Av0QX*Iml(>En7B$ z{sJGGej``@)X)tZb#??aX8yzbeV^1}juT9`^F7cT_|v`a<0q^*&4dD7k@3TYY6db* z@raBwMqN<(b2773PE7`54IE1@&m!CDWLUBduc;#TQy)hD2~Cz4RiUN(BmGbL_-QM! zYxa=Y2dsD0Gj8Xotx$rxcpn3B^IIwu+b{C#+rP)OAZhT<ZEw~)cP5yxKG*vWp4-`* zX1ln$YB*pOQlt@WAx&etg9?<}xej|tr7fWnN{DM0yITL>$0GQCs*|;>YgpR#0VByA z5dTKqG&%|5{=d3}mlxXA?Z<kW<+dKv5O(-|&GEAb{w+RjmfsP2%RYW+%>)fq>326B z^6&0j7f;Uj*;Pl93SR;GAGz;cwttCvyTLM=DgDAj%OBKe?DK$`AO;oW3XJxDMiytl zq;OS+^_jM^5syRZGd#|cxR{0F>AL5wn1}(D_%J}&KBj}+Qm32y?VcowxF->RTz#lE zyv%z(*7`zg`dKW7@Wr)UxO8{M=4V&WVl6oQlm9O%mMON;eG^<`3oCqg;O2@x2j(f0 zFOBpT(Jqg|o8&1UskbOo6cyGzMTs;ghT}~;qQc+-4_G+uhvTy4{PGMv-N)uRCc|e; z?wof#DkHy@y`$s&*wlxzVxxy5@VRCdtR5kSyBupz%1vI`<(kjQ4Y8&?f5qnFSqYXB zei|r~nHGcqpHPM$tgnL@5M?UHx0l}H=_rByTDKB9SF;)UieMHU9kUYFGBs-wqr?!H zZ5NUkAp+wRRA0kZsu!P?B*tgZQWc{Ybs#xL4mZ#gszL6P$$~#f8;Pfg&+WS_#QMle z(cODNiGXYw@Y*yB`Zjp8N_=;(-i2w9EgSEOU5F{3@`dx+Zd_=<<8vz{!rM(qSlzZ0 z?RgrwxWQp$x*f5eW>|j0lNCAKA{Z#Cw{S!NG^kPnK^dgs4$#m%eyKg;2Xbciy3Ldu z*e?Cjc6~y)@i}$uL}<EYpMAo_mzZKqZ*L5A8YP5-uTrh?lUy9QUL9yJyp%j7EkE^7 z8-1)vzD*I`Mn}(``-jHuI!?nn)X$1>c6T+o_3}WKM0(9YMMH}vHQGYZyA=qP!E@Gv ztj1wQZ3h{AAb%#z)_d<{G{q|BMXdivWr)!Ageq$Pa9Z4V(4p5#DU6-dKYbi`{49TN zRv%N!rZ81FfSBQw1z38GxcjBA&-h+VRtu%N@iz{u>*470!RNi3+}0c;ua#O~#T~>E zxphd)ub#>ND`R?Ed@YgDq%~`Em#aJMD6AgW=>|v8Xb+#w`A_@Y^_yWGR<nchu^^c* z*S*mM$%jx3Aka%7L}p9c`amYa)dxPu3lz)?UIC4=_zAP`-U~B_gy?{iW_O%%a|p8V zOsY{Sp_a8w5Q@VSh&9v?G4(Tfs8bc`WQgA{ezV~vy|RpQ@kthkn-Z(xdgoiUr8co4 zx+H6CN{V^@EVHQk!xh0a$uM<C<H41)mPbP^7AD@kB!!^Fnl>tQq77tqXAdqYzZGyq znfft4>m1&f*3^@G99&-EypcBx?OUr_NAY(-B|tO{Lb5WlQ8>voT9UFMp<VkgeoG9@ zsljP~tEW~ufqqNHM6A^553=Y)=?S}9POz;qv{sft$aaT_PAl0T)X?fKi1O&ix)ze6 zM^W8<kIs_$MQ6&`--dk!v1gSe`b4jr`gJ-r$-D?>{j!|*G#>m?@1W@sPm_CK%GhyU z>3-AolE&q5k=c+V=gE58gWDb*+kHZaQKf@!@dM`H=5ZN)8tZ5`epo0SpeXdsCht<1 zV7uM+3DjTTqZ2)NgW}vX4Vt$)p2E}h(Fri`{{WAk<T8%PV3g;Qui4S;Hy3~)79a-c zHgU$RJPV$s>o)x0t(Gt*t3vU&Ju@SP;O}3?n#x$3u$c$_N?t3{<da`0={JwIF69uF zef#S#Yc+@PjWZi%NYZt3HIyj?#lMmcw-vYGbjFfja?AH**~j-}SHbL7tmt*pJJ5j; zoB7Gz3R~pt^)bORBw#)_2LU)w!<OZqv@@jqOID7I>p|<(c{DdF`&gw&LGcYWZD4^+ z^5I|9`&2`!X^Cpq;YzkncIVTc5Jnl69wcEr@U>KH$8>5_jI*U7tOiBLeb9p&8T9YF z3-8+6An<1A*Xo^cW%b92@8Q7bXFs}5@bDpXls3BIx8|DX0m$L;;mHu%2Gr}(<sS$J zk_Ka}$@7@md5AeSrw&6)zXQ!;*m!A&y^&HP)KRzbfC`$t{SDx#U#iV`{KZvVlB15J zcO;xqTO*g{MaF{Ems!=Sl}v(~Yp-U%SK}mA@o~d=>Qc4EFMQMIcZjqVMkAK-Y4E&J zeA3+}94qXRLAL9d$4T0eHKo<t=0!!*6x(K#bwWdY;u)NyQ5C+V2gp%e4Bip>{wSS? z&viU_naOEZO%N(nUf5<}Y?kj6Myuf9m1D2m9(Eg-_Iavaw57qaqsa(c46&M8yUIRK zhQK%ucv7)ZQwvDfAzlyj2tZG^gZYCt8o<QVP5GnTSZ2Y3B7$LN@}5^dTPZboa1I2I zEO^uGJO1VbN^m>j0ighkA4L=w0Dkg9P7~xE1!eG$c6$28W^pvt?rcrcHGXANZdy2m z>XaxHQpJxpDg9HI%C+f)ylbJ0-1L)q|G9vgD;bEJ3IRXPRP7L`N{{aOncObZKay)6 zh+(6}<TESC;~G7kj|q5hwE62MYp3A3&h5tOs5pM$rjZQz5m@&Cd-+tb&jp8^mX_28 zmY3op3D?#Xq;w)&RX)GrN~CnrOTcJJjY2|s3k%E=F28Kw6{vyye#^RonZuwk*q#Yr zSE`(O^8_Z>Hkfi_?{BpY(t6la9QSG^K|PAWU*WbD_&7)lSw0{&zdp{4dqrfM9<}r* z;!&j3xW&rh=zoD`>W|G%kMn`6$TJT34RRlR?vBwe=Oc)K+xxld)ZCVI$vIy^ED8#p zOvs_<Cxb}kiN~4n!LqJ2>qk$VDF&O-qcB-^X~_`r_z#OA;ThVM@UQ1dT1#0peC=F= z?&dljm6$jQJ}EF&DQlV_%cD`{ck9u@^q>+Xy$eFS0WwxX0Y*Xjb=k~B1I;?b1}Wtb z96hT-GkNdTBf|q7L->fMyIMFi+BE&2#EGDNKmff3-J3F}kg1?sjF_6DTX+SZ5BsuZ zp7;WZ!Le-x)+|mXJZs-I>_@)MK1U6R1lZ6mE)}653-T=d_LanHajjs59$iQMF36@A z3yeNm5ZdMPz?Q`&uST)*zLni-Cw*2YbiSr=iF_45@-54_^eo6OqXaNm13PHp-n??Q zqB-h-1o)L~u^H0X0R>q2qTpCh3Q<P@f-OC!MpXpNuPDbMFgXln{yd&0d`BWFAmg%; zIJ~D~7}x8?yyzm^!_nARi4I$>IV+%+3(h|~fsrNETf!lxE(uYIo(V{lEY<Z$`O6L` zs6iA@6Q>zU)nx|chxcTwc&6<gFo1x>1KziQTH@B1F%y=6*RNKcNg;T;bwn6e)y_0q z?;Wqir+$sY7cL~qW1y;+oV{WOr>e3@8`!>xR&G`Ia4S`2TGR$c{t(YGA&V?nAyFGq zu6Ur{n?^xw(n-zamYb(PwNt|Au_vpC=%lFR9!<_mk7+VP%?&8JVg<Cte{S&n4X{nG z8|olV1b$<k!dVU8hTpd%T6}D%*?ND2N?<TH9GU91etnO7UHenUeEYd?H8ys*xp3}q zX0Z0fL_`#<di8C2v0@L&5!XNK&C95S(LJG$4Y@?;TG&`FqoOQ$5wA)Ub39K@(vQG} z5#(M!=N`X)ei>Xpx&P$OE|T0ly7W=30?+t`;4qr~_kQ^RdGBo7LC%W(L)KIFB+*CR zRgqb2=?8ChGiz06wJ}Z|PS@0w#WvqXN!P@5vt897wG4a*o(fVCQ2<n&4U$3H0G;2S zJ$|9joddl_GMAi-AxL8QkbkyTTe9>{XS-|0HHi;o6gdi9o9#O{sjmBzf2}ivo``p1 z%_!@OV;enFW-6-Lks<@_peYd3(&=zdM4C<KBISzof%0^i1};8w34yHEP8wOO0wTnw zviq3o%}jpf$*`9x#|oN_n}-cX@0R&L6;P#=(>aWox4c>XIbNw<KdpR?+G1LpFR@*5 z^hJM~v(2jY%*xW)cG@tv>7KFYGJF<TH+<oY%EjJvJ;01AjS;a)9<n*~m8$xOrPl3a zE&#vR(-Rn{CA%4^lt*_KwNgJbj2J<iCrqQ`j|iQR5t*Ezdym~=R`W)kD(XiR+1kuD zZNBnXv9482h%mxh&uGO)DK_lg9&zQb5;e(Sjb*f6-z(Y5V7>L;ARA=I%)+S@@hLs? zaR|?T^kkd+t{<grN@8cDt7`({gT$CKF^R5J&Vooy*4%|9c!R#Xhrol;fa9M=pLh7n zTNi)(k*XZ7zTm#UFSFXEpCGZ(1lZ7Q+-9st@X^yR#T3s^mz=&vv4)uZThEU$LEa7T zk6prVRYAkiJcc%{T-*)I91X25B~*lS=w)oMLEximV)eJionmD3rJY62yD@PoJb!zr zZ2$3WlK22`y7zX0bQQ^;FY(Qn0ts?AK-<#Gv={EhkA+ZQ#P|x4zd8M3Xw>6VV(=`I z>yyH?mI~H0%R{@hOC>DguSU-kKn-v*b-55GH15MjCZTQWCnYScCECl>GGtF=5eaix z2Evi|Kndq*e=%FwqSn(79LAWdm1wwgEU^B~4KMAoX%&F6bq!JIDa_C=Psb^j%PEJ` zYr&fxn>S)9oI@9q$VHBGY60GP-aX@sp(*D{{@zvbYKKCEvUbp(VPDzlLf`ofI0Z<y zmy5rFdOicq_a*#|73ap$HJ<kklSCiXp}#@7mNl7ML?bJ+Oj_~L{HH9ptuVwF{C9p! znj1qFZNA~C)I%~f><)XL;vW}6Ys-*yd&t#({Iu&e`*@^>J}RVTP&zJg(lcSaAEvd4 ziSf|CcSK-V(SzH`ga0Q&F1^u<yAyl)qu4Yd<yxr{{$CMBN34kwl9J&Py|Uqyv^JC9 zihXl}loYq=+pN;8xOX~zhga^w(@S&X@JiaWBsUId5A%Jgi^W*1YmUV###mI@2r}D9 zWRHlsAkFMuQ^e?&VaG`oNatdICT&IB1g$K|q<dsefYl=-->14q<}}zL-IS>*$tWI~ zY-lEC2`*FbGIRPcF+hpv3ld5eBVW|eP#*jgGj8Bx6^;d>2;3d`5HnvxJ?qqoj}QtH zbBzs@bQ>#xO;;chvhQ#F7sk$^FW%pHpRR>mXaTKO&?C@d3q3*)uYl(CKV0Vvb8k`C zsfEan;!$<f+Zk&hS7S?@swv*S?Q*>*rL;>_W`qTd!_GUVT@b~LLsl@=@MWf_i#$)e zK>&s^0nHBFyR2(0GXX@72usL$dB)T?j*i2M?E|R){`+$$z5ZdtfZ&d&=`VD+5{hRv zowwtss*(7ts<~chHmu<1q~I{pVJ%!M_^B)S!R(JP8S%`mX><3`$LXnjoY1?c(kx3= z-RRF3A*gM;;xFoA73}{`<8Maf4TxUQ$m}y6%l8?xhn1Jkg<nghMfj6The^`u9_bV4 z#|PZoE=emM>1?nw>F{#Bx4>b{O#;y_%93f8<*>NBjBfYkcQ<om=8KGhFcv=u6v#pD za<#}>nXHdHG2)#|SOnr5w^=Px9&(tZq}z=Y<P@HIrkJ)o4zBa@cmD(i(NF&_u3zZN z@BQQ4eSra!#;OJM4}iapetZk)MRrn|Mq<2da`sHYX%)rrs-3k+Hrw@c#@9-fb=0!( zrqVcw$mdYQgiqBgEi_CuQh}V+<Wx$-I~t(qnji%;fnuWAEJsEu;a9U19*zcdYUlg@ zBxzW*ZmG4jKDORFymxZz(c}6}^|jP(JKIX?HmRpu+q50<R4D0w{w^VhU#`<PuVr$b zQR^o(+<%<l79X_i-=W^9PKzft8r*+SdgnnzS+K<IHc;al!pW$O(F4)z2qBvc88>GV zAx+}Eq;nzb0n)WfrIkN5Fr_tgqGNg4+Fo~#S8sb{PxpgzvZ-FOiu$Ri6xnDlLMXh9 zbluAZnWC?nbsXxEKZSll^~%ZDzg*Cm$#e9f`wwjr>4B=Vb+0M9=fusLo9S4oXZf*_ z*=u9ir7<Piu7jO8#7V{M3c}=IUS@}(4;45hXm6-*umP_RjSj65+9Z?=c19UjWQY$& z^>?sRMrsC!3TFUA4`)nd-wz(iIFo@Ha5%%w{}V3(hbx!fy-Ex+dtr?d5do&DU3wN1 z<ZR##Do#jFDTm)r;jt^b7tpu?M;dbvXNvG}0+Wg7!engDq5At=c?T^%p#FBmUn9Y} zeRCP4f5ta6z8sMM&e4;RVXhGYxjDVpcFbsTq4>=y%d70pe$LODrK}qEd@XoW(@B7> zXXkAMA9!Jl6L(BbcuK*&I@lgt-xI5ImlBQM_+r)44H(x?+104&+oR5dGNfy>_V{;Y z$&&b*)mHJI(vUXf7<rtG+L@YQ6QKzT{I=-F9n4<;vgpS$cspM7H$&R$C7lcD50Fmq zlExYcY0>M`%F8Bs%c`GxWV6SJek{o*UoNO)_G2dVyZR54J|?7FKlhKMu|;{bK_QD> zUb4B>g{%ZR)VyR*s{aaELl>;#E`Mi>m-LV736FHPdkB*bFC*=9xgbnvg{UnXtsS)* zC>B*iL!3d?YnZH_RnDSPUeoxp`3gai79p3)NQk_7bb_RyrKL=IA@7wY>QMAkGlZEg zKy9UDLg~u(fi3KQ_FY$&%{e~I&wuF;i<W1TVLvo`d*Jqg->o^_l-_Ib!koQ90b?GU zy49hE=F>y3_t{CWEK|tb%k!SSwwRFq>z6N`Hm*bMqYV~JpXO>bT*Ys`@bq>?J-eT` zkv~EtMa*VBjM;1mlxzKPvpog+QuMB#W?w82y-P;-B~&1t3!NSyohV6zkQRNhU3uBc zUb3RhrtIn7P);^UlKs>pn>`De_9UBi<BeG~6Fo~Z$Qgm=jzT@05z#Rw9|=0kj)I>{ zDU)pcn!gcJkr;eY&}+7mpB?_P%NxABT8h_q5?WlfvhtPdXjVpMR;Q+oyRPn>*{D1J z!)-4@)yz&9Gm_RUjN7|>8g;|CLlf=?XwUW0YVKUZQVm&|lTa<Dk5)Grv8oHMP<Bl4 zwr0wL&%BoSf-2lTDNv;hsY+*=J}dm|>1IS-P|spdv|Vr)h_0$tHdIn3**b7Y*2~`y z89F@w`AIsqgy!E`(`Vr0`Oi<aDEf~O3Tu+<k6hag2SEs(RHfRqy|I2cZt8`s4Fo4X z3+ERe%jmg@(iIq2S_9|ipUiABvsoq{ZNo6{`hq4+Tw4OL^8SHd{Jjd)o#<Wt&A#}C z=v|Tr)zmP{OXos2CT$fdJ>ilJ2pQ1>JDU>nT|{5%Z?5L^k?2i2w}c8p#oTA0yu`Bx zo6m|A&*D+75JSs!e@cguP?6^qgZg-78AU%V&r8Mu3!aY(Qj25&u$kE<1AzTPmwq~H z*JBI-+_P}(^sPLx>!zv<7`*7Q-l@wN{x@P9y}M8$Pq|$BX4e-pMP^rvj&oL#68LXP zO+|YQHpW(G(HfA-)}w+TVXKLi;A4_e26rFzV1A82mii!Y-rd|q`f~NSV9I;W8I_!3 z;=IGlSXfdLz6>dpl$!u=S|Fzl2`rQ?)f*Wuu}aDr;<Ba2eLuRMoQ%_X^e)YA_xOO+ zl8hLI=f`MkijRNTcjND4LhDAq0k-WO&nP_%E}10PVa6_V|JklHPULjn{B>-qRkO?s z2C@Nywm{}?@P8iL7}3lr+T5Y|F}F0vmyXg4?b|-Nl#lwBOy|2ydZ0LziW;G}osk)h zO&+|ef(I{6&g_!0*AhdpII*)6yI>->a?F~up7>zoTh3?dG1aY7z0`VgmX}@5^0Hfn z5n)^v%@jGQN7g7kvoZ}%hH#5+DQAKSFt=D0({#Jx#5RaeJ=$7wuh4ZxYo@$aXUAv9 zPDh5jCi!PSk(bw^)hEmpuCwFU<wyGkT~Q%m-;8Zxy5-=M&C$yJ9*Y{lPE}VeJ#pL? zAS*E*()}PI^yZh(EZU@~LpL{Vf$^ZM*9czy&r6+ZeXlDgwhxcFVNqV&20dZ=%IKO^ zS$ZY_Cf_QXG(Z;A5pmMIKothF#lgXRVG$lWUNy*!V6!g*!DCXet0rvcV4z-!6Okw; zdJ@7?Qgl6qjnYl;JhlG=fSOB5QLvJqM?xS3AwZOzQpTyjBR^C_EJJ}x*_e~Se()}9 z^^ORbQ810$Y05aCcb6>ORG>cHs<WT^`=UI8*UyEOS(yl<e_4a<(yEt4U#;v3R`!H2 zhJj;W!+;gl&-*0?`beRgGyyY7Opv0l|1KKbWBS6ueWzw?b*tCyplNlg*X^kG7%=Cl zUj1i1*{e#+_O+@v=ZYlyj(nq>R&SwD)PmPe5Y)4ZSt?mr8wDudgl_1piB|MU6~ytP z${~tW<-~+qSl3KQgWb+*e%f!|kcgVu^<uh4z34N4SnZb*9NnYUKXX?GWZFP^+%jb? zhW-Q;fuF2}5ZNafZK_vHg&{gNDo5c&mb#w0bf;LE&)F8#0^@G#0>R<X@DaV#!Xf<t z8l!l!_|7HQ8g_fq-@N^!dx;<2lZya7=f18kVz+mo2~LRQnE_tLr|kFehT`*+h#(0~ z84+sYR#>jJuQVwHm(4}98@v@p1edUN%J3}cCX>bYG@;9?iQnI0tSzUgZN=6=|0&ZZ zJU{jBCAuVuWRYKJP7201Ke}`sA0f-8PnbuPI9CqmyKuXWH!9lbBXc!=N3@arc7?^j zBiRf;5-c#6i=3hH36IF$ruda(Z*zu=|IK7Lo(Si#a5jjh@Iy;}sLc)s&xZdH&H+*3 zFxlyl)}5IDLi#2Enx=I?cE{5L*H)a%WxQ`kA$s>$#lE-I8B<@nm<hL%sKctwp1I=9 zB>3iMdW|TvujWmLWzdLIzuo(LBcp!1@Hc$)*tU0ww)O?|e-poo+g-x@g*8+YJ!0H| zNtwJ~SmXT)VK?hj`fV{<63{fKPhyhUB2nH<2IaVD<wUs%VLpPOFz}JgN3RyONFfC% zlcb|^uN+F`At@bW22186D4m@tsxg$*I0#;Tag=W`J$}pe{UzFCa%`*nM+b%{&3UD& zZMpK?oPiKBrywM7@)%_ckg1={zd-MkUtG7Jr)TI@^&_x;e|I8Y>q>Ur!g$TB2}=pW zyajZZV3LVK^PLbKW9FfT%Iu9^Fb0WZrCg>iU|*9~S{2`T!~&#zYhQ`UKrN&1GL%h; zUp3y~euI+g!y7nz+@0aYKT+mhJ;7RFg6qWzcZ%=e?|MVXyjKGQCTA;caJK6_!1ZIF zQ9Rwnh`n4E8iDc3oF`@y1ZXot>N<hz9qa^qgp4Ye->`R;`AL{OFNRr67WDvW8Z<M> z#WX0VNQyb|M;h05{^Gy>j_7o^vqcYkf8>E#cP`NvlSm6T|K&wva{Ei#5KcF*y;@VE zU7gL@PjJQw-*>7x`)w~5^)=(Tru0lPSN>wIC-cQzDZ@W}P3e3VtLdpHG3l#9`Xq!w zrfKJdn)7L8x=x)b7;f4N!$$I;OEa*P!7cmN%j`lRDE$<%Dni2DukpCA@49IJW_O!$ ze!BaS<hOsj(RJ`dNi<oE*2;XeqC|GS#q{kD@$&6k&mx)oM<RCcm0q9XYc=yItYvfR z!ld5l)fYYekj!#T&7?oOf`jPETdr@Ju26iVkI@4sWwZCV3E=97XQ}9WAs9cKJ7yX& zSMEci9?8hFrit^9#4NOs=BdvKKCdw51qd<f6=Li>1gUb>Bs~U%ii)K{7Ic>DldRIg zGW?P^xSefd!M>!amBma$=-*9?hczo2_;}97^rgzIO9$`Y!9(Aoqb3CRrg<=m=Hc2( zPe_9R+?%}^LLzBoOM0k87ZEk6ig>QWc7$}!IvR#%$@mWmM<&fA6*JXJT8T5riVgRi zOqAucn6M5(T5mIO9OlkKBCp&gwiOaz$uC<c+?lX}Hlpw2e)K#<{kdW6ow3W|Eoj6j zmD1_A_(|7F{-@aR2G?dhO#F3mDF{%kyO8WskF$EtbL!@rDjBWPhDj(uWb-4&%ZZp` zun94BVLCr_WCw1=YF^a4rmXk6>a?XGL1}ONFH)xRhH{$>sD{F&CntF}8A!$HICu6I zKfhVyN52w$+q(MR${+3p1XI_DLAoEk^lSa|)UDqn^GD78ARy{o(i@3Nho{F5nS}AA z;gI|87_5Hv&Y7oc?Hl*r-+q99KLR7CVKQ&Rafbq@Ox8p(BUn)zIiOZC5tJO7AP9?0 zIPoE-gG3u}4h1sH?YiqM{+qHRXB$>%F=q5*P&%_Ed1khg(ASu&P-=;OEVT6*yiY<) z(I-DLOB#&2I7x_2#_E-$w3oSHq`Vtz8SV)svCKNH&UD=oYjW%2WBtMtW^bt$zMR*< zSb;yL*YHPJzj$pvUTfAx`%H|TI;f;>OT>8%ac*)$vhy@?ZdxJi{9}(i5$E;9xye|} z&Qrv>$vnr-8}fEA=6RLXiDxYahm_|~lfkJnQ<_$e_!Qzn<G{r9@N^c6;T&7A31VDb zdL5mU+QMG1(u7v6>6d`<+xXu7-uVl#eoBXNGf6m7P#^b)T8MfD*-<4_mCfK`VmuXu z34leIu{V-WDrbjAb{}&b`T5vQf^e%ye+m_G_b4beETt&C*qVdgNMuqNu<R7}o)Vb1 zheNelJRaCMvD*@~$_g7z0=hx`Ub*&UQ1D^;<=)ULg;lm)of;JK9#q>GUhOwmT<Ehe zhQ09aANbkl4*n70;}f(fTTRNN*SGAWf38#D$bVh}|1J9=A|J!a;>-J3U6tVPzAe6b z>CMh<#?G>^_hGQaiTBY28Efhmb4_jh@HMr<WmGF&M$^2P(Mx-u{5kXfbz>F1AMN@a zh9W@65mLvB_utmZ!ov?|43vpF{Xs02{;6d!sz%bj!5v6g{~znRlbyH!w`-2hcRB|R z1MRb!f-byi4T5i8hSRjc-1%BHyo=YqIzsvgQ=^cIA%Taa$wV5P-fTYVS)(aLOBjE+ z(k0k`>F(FC=j%JJe~uTMZNdIbM#1Xz74iH))C;jy_0fx9E@KZW0_&RGt%0Soh&LmZ z=bP<QE@l4f=T)ZrA+8@_2rCUn%MemGcyt>Gw?Bv#rd(qvs6?AVl9B#U-Nq*CHYU63 zUi{QB*N^T%rrO+beg6%ei$j@eGxtEC|M>Atp}7EX<-|Ek3SA%55O^+k^bCR&J~wHH zP5xIqn&i|BE>ey2jq_uew=YxL$wF%3a*IA#b<?QQ%P=;{d9I#%q<KswvHju)rAnIX z?m~}>hHo<hXl20zv@}--wZPOc*O>L`W+J>f9k(vmLoWLNs<dxDxTFs(Bp*Lr-G7q1 z>M7yj2=MZ7h^8}3X21nR|0vZgETJ*Np<!VTjoKFO(BOxk_@N~~4C9Bh{D3S>b<w36 z*57N>9dRFLTui93ejAi4YI=N$YSI7+x)RJYVmQ=SpFMNUXBkvYf+CBuVD|EY#M@P% z)8DHvPP1z54$~_;zoRY-e4W2kQNOqXpN!n}CLwui;5P^rZ1+#o9D0ty+(G?S>^b57 zUHeDuMpcFJZ24EMX1<{$Z^n|cTU<)3nvCl5v1p=Md|0zo@`1?*hxtt6nQla~<YPg? zI!If6q2TmH!M&Z<;9=~`B=u)n3~!HNJ#fmtl&h~!oLMmkvkFbXn&R5Z-u~pDpjYb} z%70^Gb{8N-E~u{wPT=9rkO+sD4I$~^6%$$8{E-N&NCd&E4Wx~iOt&T{xdh?=NmCVL zNoBbx`1_&sE`65%4X=&v=i|GUZiGKwu8#t<bFTOQa`Ao~=lTIpY;iny)u-9O6uciN zFCl;tUQvRaA>FWs+6Y^(mHRg`T(hAlR2@C$j4+UT5nNO7%A$@hr?A*GQ*W>%n@CZ# z*+qE6pniy!fWwu`#Pfx(j>Rj|LlB34rv+f5F_M>LP3+uRg2=}k-#rr&PS5?Y;^e>} z?88is--o;q_JO5G9{uu2i;Z);&g$Z;6aBG%Pi+pv{-YI2=#?+;QijiG!HF=X6Lf>s zbwgrCjhx%F(YCegKEz#C4(ymQGDlGgHixa)jF7@(ZX}#!h<8~Dt#&#L)<1{v)H!%` zSf;~}dvpW>(N?L>l@T1f6EQJ@VRx=ZxcSGCh%*rk!V?`)gPl1CFac+vUOGnvMwH)# z17x0Y27ncTWHT2-QA$$T>~+OQ!XenW=CN&7pR>J&WA)EZK1sbbe4^E-U5^`YUJSQ( z8Oef)K&p4xv$?xtdY?5r6!?_h1f^q(My-?sFh8T2$UlofNLfZQ%J}i49?6fdjG~S5 z3K?6hGPQU)y9ahJqVJQDqCG>=Kxar;xELD->y)3&2`TGbNZKDwFWJ0U7t0$nw25qG zb8CQ`*NS0n3o9Gf89T317XBvhxdB%ix`sErJ`kRO7pKyH8Z<jH{OTT<$7uA6p(V3S z6@}oP^ftX!g4QA3v4%PbTV_8(+7woUFf?Bd4$7fsnFjF@?d#wY`}&z682tar$W}^? zY*thEg3g7VbLdfe22TAAwrx*#EbKTM8bNK^^BzM$zD~RFKimxN)4s5q|GBQYzCZ|2 zIO9k<M7p7>XsgrVWn(9^GA5UMDUM_xF&a`2UUj$~oYc~h%08S&9BlR;>X^uXI^sCv zV3YVt2dmKleh4q^<Vv`h8-1iOXh3){PyJH@Yym7Fm+al;oe7Rg{C|E4(Fr0gkmsm* zrJ<+QHPVs9I55Z~#pbKZo9d8J?b{G_=9jYyz9E0&$GY{M<{P&C?Mg5A9&OdTw(gV@ zSm^i9+c^b;l*o=#)8c1!9kaH(f)B54)2Da)B`O>M+@W=|cDPFmSn~$P9hdR8av((7 zlMLDZmbu)b9&Uf@hW)LVwZD~Kw+<D~blu=blEJumj=GwX3|CWbQ;MgmU*lvThW(9R zcHi{2zYU}SnJ2h}o{-1vqjCmnn24pAMPm<M(0<m~Jk?6;$v&Jm4JLapN<N@@dZNe6 z17FSV#PA25hQN4eKr2B#`Yr6EEL)Fug92BP>njBABW^e8z{(iJeF9}|A&J4K{0<c| z7l-NVmwW=uE-rBikPhz^<<YN4)c<5tkMN{{Ih6v3@itYa(k8!s3a1sz+5<h{Go#hi zJke_X<w^Y!*_LE`K&D=@_<Bgz#Y<LrDe(a~47CmwPN(Bu*)g~95LAYmia&eZ@4DLJ zuU*L`!|Y}41oP5tuV|#qy!7x*U3^R`po2%OXRPcM9<j2~nQCoj#Z#O^tuW=_Rjb>| z2d_2N%3-Efwp2Z1-NgP~;WjYJilWYRZ0DjwMO|TSRuQ~GJF%CW3CBD*G13ETs3-Cs zCvxmI>VFcuRaUZBIVP{@kdk9ADQ>sH2`HY|3;q9#BN=!L5sPS>I&#}Qd~bpR)oXhK z<u|%7zc7y;NKjr-rWG$yrhQO?C?XkH<A@@T%%j89?ixbzs0MovGo7|Z8A8PrSQmDz zCy;p$oyW|jN+QTD7otJlcw)vw&SP<PN`I)%3(jep%@DONW^az(=fH=QWWi_*X1s<? z=wK${ve{h05v|+wD;&_a{kly6nrdHoXmZ!~Jqmj?ZTtKd1vD*k-Vywc71U=F>nun~ z{>??KiqF!B^o2?BUp6M)a15NGHRCb9ey(}Lq^;McC=f?`!%oMgx0|F_KL}*D>*&Bn zmvrpsO813!eQO`o!Gb^WC3HRSWr6`swC5nBSJNY+R}0^fMQ%8G&V88g$lF8lc~L&B z%PY!%cKoG=#eb2E;-$*dOeJwa3;w)G2$49_7=@tr&H!7eoJ;&r;$>$*FcPzQ05hzJ zJgPWbpTvqcvas#I;YZKd>K8T8RKMqYP8nVZ+2Q!|A?QqBubn(iQ|#E^9MxJil2OKc zBu$XzyU?S1kKkB7v}L^-+A#(4-@S*-=3sw<Fb_}&J)$)c3~-%<>iDQdsMvdCeSp&l z-pgkt;Kj(ll6P?YrAGh${GO*M=G$R~Kp1sJi0mL4rq{?X-0+nOuaUfd$o>l75`TrS z#H^@GULz1*qw?MhG5S48FWtW=IAist#UIo7JbEqxM-R^YYS2u7-_D)!Pe6`t*?mr# z`l0Jrx)tz{o?ZGA)4ox!lMK^qG~S5~YZVLJD=y<Tit_dvMLpbWq+87hw69bt|B9S2 zb}yIFGo=+dRA^SBODBAhsT3tOAsJp3as4EajtM3gpV$GZB9D<=?EghcD=6gy3y658 z9kZ%0l5VIHV;@Cv@edilyfH0Oq%_(RECz5i8^ArInGW5YACzbjpo)^{ydu1ao}vUr zdCxH5s<H@G35bY+JT~d^ZOmQ7Ea@7(W(9q3UGUkIrHA_lDj_cwt=@Z9`(Ewa{p29} zYAm#}3|3a+G2LNY!Ehie@4XbYiPBYs{O~#qoJusP2D@gzz(+xn`%f*1^h9=)f>t<_ z4KAK!vFD-Gb)*?m>N+wZ0}2<=C&ZFqP%7f41p=m`@HpO31XG+giJCM<!bT-Yo5VFp zGV87jOr$PQ4IXELv6RES_u4`He^z`rI0%OyTs3m~?BgRWA9rQ_4!UTH^4NgfJq~^N zuxUFTc*!@{30dh{7yc@}+N`Fc%=&UZP&OaA&ZRdQGgnbR*f)IPGer5|0FNraDZB`c z#V(!0ouS4~kfFlrtyt%kZG{j7!c>-ajMtSA(K=<Eo2E@@B=IPQM@Z91_@OIpF3_)O zF=Tb?qWXa4_}{)+t#3B?c+ecK5W^~(1Mk*+Y2cQlbZzr24A2np&_~akc}RAPpNOv1 zxm*xuAmjXLJHbPr$ULV?Qe`m~;=QbYN#_nO6WM)pQ~ZJWBk{^$XKFn6neanmq;Sh5 zrZTL(Gg|keJ#^woWBW?Uky37ZEt5=}p&m`*_EN|Q=k8-naQG8S)0XUAzt%QA;`H`b zEi2WpJ|}LbO8gfrVm#Yt*2k`oDT)O`_W!k-;0yn8S>HI0gFXm4im#T?-IM)$ckOb! zg-2zbdXu$~+sxTM;l3$nU3lT>8nb!h4(Wv|ao<~9yu9cC!?fARAd8qZB2y#0n#8G~ zXp@7%?v;fW$(Jix$qhkvlZes4$!X#6Yo7(7-}^57eDca8eS&Zd)c&sEGtR^K#0xc{ zUo3sgf2g7F9vG>R<#*SG0)_?}Q+S6@A<D`;*fsYB-a||tW~`yUh@YD~0I>5esKQ*M zviLEByI)+DC6F735z^X{4B@9^__4Tn6F=rSTM;izIoK2y1T6e9NWzZ=N;pf4H_c-K zmR)k-jhn)nCoT=fvXMe+xA?-zmJK)hgs;-qJEfoAF*2<3poy^|!|;ssulmpO57|mG z=n_!hTECqese9??*HvbvzO><S_{?>jegJq-*QGuP3k_@#$tZ^!vw5S&WX<s5sIlM@ z)EF_o5g9cmhK)_akcIvi)R<?noB?aw6}9A5w^Ej}5#N)J?a8c19N+M(!83e)I(EmK zAm6C<wv+HJO(YpcU59pV-bMA^yCM?hIF+bqF%BZ+IYVATC1vvncdw=jA1gmZ21gj1 zvM|W3(<aXsB-rGh33$*9kyw6W_>ulntL%msXP3k-i7u)H4)Vs0a{FG8H}-7VV)k@0 zPrZSYK{GLBt=%`|nZOHEW_W&XdOSa^(Md6H$ZCX%DKj%le)nXQoa|MSIb-7z!h*>& zEtod41tV+F@=8>p67SKS4ZZo8uw@R>BTb8%(f3UC{r(A#Wg;0RKC18aAXcWjPQ}N! z+@7@$^#?$rZagQAtk%Ib?$TWs-jMklDYSAxHw-iO%}_p3bCCW&@LRKLJV`6F;=|?i zD~6*18hP#L7Qix%d`zaKinqO!7@##Q<`#{`@1^eMW5MEg9#G)*GWr!8OPqgHS$}50 zy#XJ_&Z74~{ZwoOS2Pn7S1~4g6zuAT3yLXk%U*OSsV%(fBg&Uc8uU{AgCFWQ()3a% zpDz-+^jT3z)hwi-4~I1T{pTGD+n<VkWy6(GFox19+kp;)&3lyRTm%;vPvkflJf3V< z>Y%pJ>_^o3)8@Q4&&T7{pN-#^p;4on^Lo5W;&6f%iF6d>)Gb!oC&(jAA`67;<AO1` z0qo7qj*dASnyf{3T{UOZ%-<29<pcrMkhljH_mH<u5&0hc9w`kt*RTeVJ2pD@Y<OjY zx~`bFed$jK+}r3E5QaYDOs$@BSlG1a&8%f!9yxVXRP;q#BK@M<vUzzkeqc3wi^M6D zSuK*GuHbm83th#!ww55JtA^O`Y5x58H0Ul?t}XN^9*Eq?f`U=J(?7&!+AS)Z$3wiI z%3eU}gEf1}m#FCzBjYZ{gv|JU`jd{h&tpSo)1%!suX*Rq$!FSi+xpx)Z#{Whu!Rxa zMY+s%P^V(<zM!PO=3^#ViuA-Z=GD?Q?ue<sNt-on;3TZi8aiMSE*?1(PaRTyWX_WV z5um|nIeuK(jWiS_a(A$<8p|dpa%WuStYXPK)_eod>vil$XTzdUSj;0Q|FG+D$#sY+ zvbyM1invaPL{K34GN$_vLbL74ZaOoJPKSJ0$gcbmO;k>+m62ljxy7T>Q@}o8nlkC> ziCxL)uDpFm;1}=}b+@8JD>MbafNU~QK(rq3WmybIxKTZUlF@RfpV)^Ml_v9-1y(zg z9bzp^PIV&ez4U1k<T&Uow{n8TQS1oxW?*=w@YHaHdCW^Mb4cOqaE6W&uD3+t%riHF zvK!_JTU*!=<2smK7aEvBMckV1wOV|qj~SSwPtRHZ?c<>b96Rj09GhE0`)eas))_i< z&Cyyg+(CERVE_(nojGE%f)ma}VP*M0`LJs4D$pSu<JeCVF@AODs=0`8oQ3|UdR*{J zaxB;uXPkirixb&b>=-1DC0a#g)-aVzTB!;<sq#RCj$jZgnNt$kNg_YdMcgzXRcvu6 zwP=9gqV%%Aqj71}r!prMa;At6GX>b-C^UK6>=H>Ec(#4kGhGLwa5vX4!57x9-tMah zU3~G`Z9e-fZQ6Ai8|Y(c-M-tH02<_`pT1e-qEP>>EAaA*xYnkVgdEH3xa&9}AFjp2 z#$aXqh~7i9F`hi+{$>(-|BAVJH1K&%xu?`IxH+*1*2~<SpBJA@R2t#&A0mWNCxisQ zNEmW3yo4??f_RJA&sMabnv`fPP9D0YqcE-?xYJrdMLVt81^2J9)tauS>xl}_9_{+_ z=D2kMiN(jVUhLRt_N0qd{J)I*Yy<9Hbf}PRxdz?eKTjapeku)r)DqaHYb3+iC5~*< z94LZ$kwU~yS{0!Kq`gKY2Wi<vN;WtuWEf*vR$@d$vYsF|i4&_*Gc0zFvnz?prt$R$ zKOGqGCEF*iknJ9~DIoIdd*jD{?Y^S641%FU2C#zj$~^w&F^q%a{*6LVf?Gv?sNer= zUw91@bCs|3C~-2}^wn`JcVg@;>;p|*>tHec15a{2%djRd<B_h$t}uk%*Ac?gm2l*P z0#FC98O>34y#^~W)pv}&W91+s#ui@zyYOd1q8RK|vlTQx9oTf8uH*2L(SxGjj-}iE zq2OKGb5B|bG=jBTw=RM!m?qth;Pdw__f5P=NfO+oxGXoRLkbE!l$+H0$lRn+v5BIz zwnyP6{p}H`N#Xo|rzT}J{TU%VTS<B_Z>&QedNOZpII5U876lqShk*v`T?M?c4Jzi1 zt&lZ#JVMxCu_2CQE>+eYWgJSLG+K#OGu~v?Tw$_m3Qo=c2MAJEU3dXa&4&>~Aq)dh zqGq#O_Ma#I_443E$7`+6^zYtU3jpl|qzpoSVHQ?r*a;oa;$HP61c@G=1dP7sv`P}e z0CtRX!z|GxErL?2lvBrpBNt!!s53GAPZqi*%CT#L^xl<=%k7N5mZ@pIYnJVy`{O&M z$gWP^J332NUsGABS@R@%+YZNC>j!RX2Aco?00031000620GOXNtzQp3^#B_P00000 z0L1VSE&u=k0MOe`m-<2d)d_eAa{vMW2>=2B000000C)joU}Rum&-us0z`$w#%kf_h zX9WiX<7NgVz~}-1gqj8B0C)jylw-K)JP?GZ$tJzFZQHhSY}@*5+qP}nwr$%s_U`r= zKi;P?W+t_#qX=C9CHSizGZG8U@wkYdz*5=;YutUf%>mPc44h~lK$&@*PqllZl(Mlr zcz};Gr(=Pck6CsYA0XrNgdc>i!UUnSkRcQbhYL%E<IP}94L;_x?Z22q1t_3?m}y_c zY5pI~ar5|6`T-N&P!zjim`K&acBv<z(jAA1W+~=VIxKxJ?aMLIzb1Xh3MJBy=vzb| zOW$1>M-Sp$HyD|&C(iNj;|}_TAEC!^5#7$8nJN5(-Gpo9ySL56I(szlWsb(vvgQ~n zLoXVFMO2BUG!IM7)5xVd{zLZdZX8Ai|8h4Ph~8TE&&b$Jbf?|0n9BGG+F8awDs5dc z%v>PzGqA;egd+Dm_OL(kUG^ouO}<~4OED|>52MVbe3qMo%t-q|{5ch48=b?yyM57# z9z$I42Y*ZN^1F6dyyQn9#~z6L?eo}7$v9B8kJ_HV59U97N^>#Pe1#OD)SQGT=^}p5 zzJ>inv-3?Cenr|pvZqD!jk^wad5@d?ESzp%<d;?VjtG<a2=zjJXo>pJ61Rl8$%i)3 zbc}UH=&xS1B=X`0S??JPRoy$npMjq0h5FDE(+^`>LdRi4lMij#6U(U<Q`C!=s28+9 zKc`<^BRm9gVRx*tF9*g};(v1m{<e?eeaZR^cLHWK-rc>8lcKgIDAk-bYM{C76vt0@ zO2rI64;N}i-4Qb9JDlT=!uTlL-(alfJDUG7AFAtxJMm?74@T(Nh%VB1BtIQx`?z{d zb$^HYccHn~HT@!_Xr|q3vUV9B3o9`-d>m8VZ#c?7hZ*#>=sp{<;RMW~clgFg(_*Zp z-7&^)!615@4^u6D3|~h92G9W*9FZd94&n#g2lCw?gH=Oq*L<rNlIKL#%-x9PnrXUI z`eIP$OEB0!gg*2)V*MtW8z+p%Sf7P)l*YF=`6us4_m{q<`cCv6ss8$|{1tqkzf0Du zLw7xg?yGz0ml80>o`Bw(8~YcMTvwdyyWrs9K3pH%g`<O~`BLj~hwY9t%s+gQc~Ej+ zj%<_1f64p)Nb;}$p_uS5jHL?E@OW&ci;=5(o3HpM{*^yL^$w>LO;i8?00000U;tnM zU;tnMU;v!}$N@$H)dGV976UN@U;~Q-z60h21q2)fMFd;~y#(w9MFqeH1_p5k;s+21 znFt676bK*)K?rFGiU|1$wF&hKV+z9y6AM-gjtlq<I}BC~kPO)j{tZ|SmJRw2N)ELT z5f6tCvk&<YDiC=P!w~fmFA-G{Y!Q<Yx)Ie8^%8;-?Gr;2s}v^`e-#WBRuz;L<`yp& zOBTZy5*KY3+89e1ix~tNTp6kv+8QYuaT>K6?;AZER2!lj=Nso7Bpiqw_8ns#${p(- ziyp!scOUQ{{2&@2A|U1<{UJXggdyD`QX+C9#3J(}7b8g{cq7dt*(38L4J0Qdm?W<x z#w6V&?<E2y6(xElh9#XPv?a?W-X--W3??HcHYTGcwI<9a-X`!T0w)zGQ76wQ<|q9q z6euhxLnxam5Gf}qJ}FcwYAJ##nks)Piz=cjxhl^p<|_Ov5-TYyK`Xl}(JSaH|11?O zD=a-MnJpJBE-gSUQ7vRGb}iX0>n;W^lrK>)j4!+|`!GT<X)u{EurR|hD=|Vb!7?{8 zKQdA>S~A!(Pcy1B!86!1>NF`dF*J=dl{B3+_B8%AYc=yWE;c|mNH&x<oHnF3tTwbZ zyf(x(%r_A?j5m}w%s3M`Q#hYE`Z;1bvpO?6zdIj0Cp)D)COl0%raZ1a9X+!>?mhrM zQa+nL=086_M?ZHze?Qeg0ze8tsz9<p>OnF=azVO66+(ML%0oRv$V4YZK15JN&qU@$ zPeoTnUqy07dPVa_YDUyX>qi1d6Gu`<f=8@J_((`dQb=4#en_B5zevkS*GURVFG)*D zXi0lXk4hFwv`WiMI!l~O=1eP0piKBpA^-sZ00Bn;j{p_`RsaP60RR91000gE00IC3 z@&E<^0eAs@j)QJP0T_k9*?WLRH<)dOvsp*A?e=N<s6DltUq=_f91f<Km|kFlHE7~V zmc{B=dy9=Gp6<dk?D5savr@}Vyo!kme<W~gvKoU=e0T|wBgU&V7f~_Kn3U0zv&c!4 z5l#@7cftWjs$<o;*e%i!=d9<Q`y;;`B&$kt!=b8xiUYYxja+<U3DN}QHlFYiC!?K_ z^1&<jJo3fA_I~4ks=G8T-*^FIU}j+W{{@J%7*ZIp003XV1H=FT0C)l0z@xo^L7QO{ zBQKLS<0d{vAi15-%0N|GfPq7sVLPLRo{E$pkhz`7&%sDp6vSfou+~!)0kK%%Vyp%l z@?v}-7F%+ly{<Hf#qMAN)yom>Wu++zVsSR7_*p4~SX|{vK4yv_7Wc&R7>F28S%SBj zEQrOcqaq{119HM9eqMH<6BS%*GbLO$Z4hQG-V`9rShA@BL=*@!mTuyg2a4s(GnN7X IH+C%C05a0N;{X5v diff --git a/public/fonts/roboto-v15-cyrillic_latin-500italic.woff2 b/public/fonts/roboto-v15-cyrillic_latin-500italic.woff2 deleted file mode 100644 index cc41bf8739e1e62d615cc55c943453ae949a0ead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22892 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%0A9f5b(XtRWHiE+KafjTpbqc)(-RmqMNNaA|c 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 bIX=b&3FEfoyu@)X7aQS>(<MYSMgnjECCXWZ diff --git a/public/fonts/roboto-v15-cyrillic_latin-700.woff b/public/fonts/roboto-v15-cyrillic_latin-700.woff deleted file mode 100644 index 7d19e332d14bfe2392d82a028e43169b8c6981f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27136 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 T;ui;s<%=_x0su;QBai?9_swu6 diff --git a/public/fonts/roboto-v15-cyrillic_latin-700.woff2 b/public/fonts/roboto-v15-cyrillic_latin-700.woff2 deleted file mode 100644 index e2274a4fbb782bd5b894f739f674d60338f57f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21560 zcmV)6K*+y$Pew8T0RR9108}^t5&!@I0LPF308`We0ssI200000000000000000000 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 diff --git a/public/fonts/roboto-v15-cyrillic_latin-700italic.woff b/public/fonts/roboto-v15-cyrillic_latin-700italic.woff deleted file mode 100644 index 1604c876336bce4c40da45585a40b9b79818e847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28328 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 POE8uK0Dg}pQUCw|>fp|Z diff --git a/public/fonts/roboto-v15-cyrillic_latin-700italic.woff2 b/public/fonts/roboto-v15-cyrillic_latin-700italic.woff2 deleted file mode 100644 index f950ca2aaa0aa1239c6bb9314b28324c960291d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22572 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 Tr+wdk&AjA4<AVt=U+lsU@|(rt diff --git a/public/fonts/roboto-v15-cyrillic_latin-italic.woff b/public/fonts/roboto-v15-cyrillic_latin-italic.woff deleted file mode 100644 index d76d13d6a0d4bc4aaae2707fe7b96b4de441ff58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28388 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 aAfiBov2+u^3{WgzhOra?=^8R`0002kBm$TK diff --git a/public/fonts/roboto-v15-cyrillic_latin-italic.woff2 b/public/fonts/roboto-v15-cyrillic_latin-italic.woff2 deleted file mode 100644 index a80f41528db0350f6c7840c2ca269e61fc381e78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22716 zcmV({K+?Z=Pew8T0RR9109d>L5&!@I0LR1t09aN40ssI200000000000000000000 z0000QffO6IejI@a24Db$FbGTugFF!o3WBpZf|3*xf>Z%E0we>991DdI00bZff+hzb z41rr4T(c$Y*oy+X15Uu%Du623F+<#~n#dvqPsTA5a2}9gDgRw%|9?($B4e-$w*9KN ztf0_#kcpzMQ83$7iHR!ow&!T8XQ4`{z(<AW0gEyfNeXoahG!tJ>wVB@$DbQ(@#w<E z>0m%XQo4~;$fu8d<?%gfir%8qPk|N6B(q6+%9c%njhmH%^;jxSMN+f{|D~eiH_Hn} zd+pS0Er@37!g(udsulR*6}SyOMgu+asli&7;oU1CC?H#5S=ERN2f|hpdqN?r{*5UN z@pJpTcgut^s)Uvdp+!nSi3rKo28omkv0x$tX&W1`;#>8@{-wh6p&jslZZg?@GQO=+ zuH{~6#hRF*b6u^Ik|WAx29NM2`}_UA>|Df0@R0(5E;3Pxa9lnM#*Z*7d<!{i3>(vf zdDR|(-`xv(!I*oR%*=xBbXg(kB-KF$RTUYDZg-vk(73??6#GNLkF{S^y%7?mel^US zla%3mh&ll`dui+?^n+{dTTQ5jtT_*6;LO_|o*p1Yw6P^Y0sYrtYQ-C@=*-F&SPIHF z_u15Uy8mVlq}U%AdZ3DCZ%(?4*DMOKR+`3Xbw!h~p=bj|^#QBh9YgiG4F~`d27bZH z`v2~o0pZtpIp`cbI{D1?9%FZ^>Lq7teD#g{xH^e3wd(X+Pi^B7kJt*_19N<7t#{AP z{*wC$!n73*A;~KskE)dw7C6bw?iB9W`0VOurU$;-S@r6ux^LyV5J8B31lP+O{=fD* zy>lq~QWv37U$|Jg33cZVD)mtmiixCEqj4&-ppdv`4DkHB{AS<X?XC#5fj(}81JCg& zndE=Uo7vVv>!A-ll&aQfgyJ9!p^u|<i~0xc`CnCY1?hIzBc+d}ZDrUjrL<woG?@TN zoCQjb2<eIxU$rl#G<<;a;|FyYk#dUUl-AZ#>bB)&*t6{!#{8e@vfWX*kOfY;;z}1C zcklW2c2_ZfW>?J2E<(G~fdVFEaY+&v#HC$<{d5`5Dd`+i#g)!l;DWe>E@hlzDl4}x zI(MyI)Rlk!a(aMqK=kiXmz8Dr!)#2qUN+{Y8xyQR?f%iW|1R|_+KMin=@|aqYiW~; zl|um!eLTDuig_U22y;4~!2sH*eVoF74s`cEu0^hdR6>xBr8w79GA%f3IP-p4SL;Mv zawQf*$QjFBV;e3nwVCo-6Y!*k%C?QB$6UIqyd#!CfcCZwH7iN`{~bF?XXY(u+Xjp= z2qXmdUj+fk7H2aFs%$_`!axO4NQIy(K|2KPZbEz2fSQ|7r(V#2po6oZLymxsnFlRe z6FTiI==@iqM;^nxiUOF%sDf#W7MPwmf%bO*8Gf?i?r<j$KOlU3L1qe2dva!MGB9{X zWOf>`fdhcQroCCW!d48MpqF_16Eo9*@aiN0x;Th~@w|z#%6FARpMz=NUE7}S*)r^A zZ7CGMePcM!?{*+)cnp6az#XQ&!*|3~d994xs;&OIFp8%)l&Y!v$DSIugtqaLH}%i& zIXWh*e4OK`5_T4IJ^yKcj<5MulI~B2R9F90n?}>IyJ=-J%+HbTlzZ5%0D6}jYHAKT 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ǤX%X5m`g0>QD=zte3tY9 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 Hlmh?&>>Sb5 diff --git a/public/fonts/roboto-v15-cyrillic_latin-regular.woff b/public/fonts/roboto-v15-cyrillic_latin-regular.woff deleted file mode 100644 index a2ada2f46515cf2bd9bf6c411019a6e4875e3b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26924 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 M6aeWOGH(C?0LK(1#sB~S diff --git a/public/fonts/roboto-v15-cyrillic_latin-regular.woff2 b/public/fonts/roboto-v15-cyrillic_latin-regular.woff2 deleted file mode 100644 index a3b35e686d85a6078289a55ef3a458dcbdcd6e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21608 zcmV)TK(W7fPew8T0RR91090rI5&!@I0LE|t08|420ssI200000000000000000000 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 diff --git a/resources/assets/sass/_blocks.scss b/resources/assets/sass/_blocks.scss index bd3f8ff4e..e3a0d6952 100644 --- a/resources/assets/sass/_blocks.scss +++ b/resources/assets/sass/_blocks.scss @@ -134,8 +134,7 @@ .callout { border-left: 3px solid #BBB; background-color: #EEE; - padding: $-s; - padding-left: $-xl; + padding: $-s $-s $-s $-xl; display: block; position: relative; &:before { diff --git a/resources/assets/sass/_buttons.scss b/resources/assets/sass/_buttons.scss index 6e03c9217..8ee7f596a 100644 --- a/resources/assets/sass/_buttons.scss +++ b/resources/assets/sass/_buttons.scss @@ -31,7 +31,6 @@ $button-border-radius: 2px; display: inline-block; border: none; font-weight: 500; - font-family: $text; outline: 0; border-radius: $button-border-radius; cursor: pointer; diff --git a/resources/assets/sass/_codemirror.scss b/resources/assets/sass/_codemirror.scss index bd85218a5..e281d4c0d 100644 --- a/resources/assets/sass/_codemirror.scss +++ b/resources/assets/sass/_codemirror.scss @@ -2,7 +2,6 @@ .CodeMirror { /* Set height, width, borders, and global font properties here */ - font-family: monospace; height: 300px; color: black; } @@ -235,7 +234,6 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-width: 0; background: transparent; - font-family: inherit; font-size: inherit; margin: 0; white-space: pre; diff --git a/resources/assets/sass/_fonts.scss b/resources/assets/sass/_fonts.scss deleted file mode 100644 index c8e8ea833..000000000 --- a/resources/assets/sass/_fonts.scss +++ /dev/null @@ -1,102 +0,0 @@ -// Generated using https://google-webfonts-helper.herokuapp.com - -/* roboto-100 - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), - url('../fonts/roboto-v15-cyrillic_latin-100.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-100.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-100italic - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), - url('../fonts/roboto-v15-cyrillic_latin-100italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-100italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-300 - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), - url('../fonts/roboto-v15-cyrillic_latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-300italic - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), - url('../fonts/roboto-v15-cyrillic_latin-300italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-300italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-regular - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), - url('../fonts/roboto-v15-cyrillic_latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-italic - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - src: local('Roboto Italic'), local('Roboto-Italic'), - url('../fonts/roboto-v15-cyrillic_latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-500 - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), - url('../fonts/roboto-v15-cyrillic_latin-500.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-500italic - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), - url('../fonts/roboto-v15-cyrillic_latin-500italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-500italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-700 - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), - url('../fonts/roboto-v15-cyrillic_latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* roboto-700italic - cyrillic_latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), - url('../fonts/roboto-v15-cyrillic_latin-700italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-v15-cyrillic_latin-700italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} - -/* roboto-mono-regular - latin */ -@font-face { - font-family: 'Roboto Mono'; - font-style: normal; - font-weight: 400; - src: local('Roboto Mono'), local('RobotoMono-Regular'), - url('../fonts/roboto-mono-v4-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */ - url('../fonts/roboto-mono-v4-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} \ No newline at end of file diff --git a/resources/assets/sass/_forms.scss b/resources/assets/sass/_forms.scss index 866316fc5..cf7ea083e 100644 --- a/resources/assets/sass/_forms.scss +++ b/resources/assets/sass/_forms.scss @@ -5,7 +5,6 @@ border: 1px solid #CCC; display: inline-block; font-size: $fs-s; - font-family: $text; padding: $-xs; color: #222; width: 250px; @@ -33,7 +32,6 @@ position: relative; z-index: 5; #markdown-editor-input { - font-family: 'Roboto Mono', monospace; font-style: normal; font-weight: 400; padding: $-xs $-m; @@ -69,7 +67,6 @@ .editor-toolbar { width: 100%; padding: $-xs $-m; - font-family: 'Roboto Mono', monospace; font-size: 11px; line-height: 1.6; border-bottom: 1px solid #DDD; diff --git a/resources/assets/sass/_html.scss b/resources/assets/sass/_html.scss index c061f9d64..27ca04eb7 100644 --- a/resources/assets/sass/_html.scss +++ b/resources/assets/sass/_html.scss @@ -12,7 +12,6 @@ html { } body { - font-family: $text; font-size: $fs-m; line-height: 1.6; color: #616161; diff --git a/resources/assets/sass/_text.scss b/resources/assets/sass/_text.scss index 2ef4bd16d..d38a5c515 100644 --- a/resources/assets/sass/_text.scss +++ b/resources/assets/sass/_text.scss @@ -1,3 +1,14 @@ +/** + * Fonts + */ + +body, button, input, select, label { + font-family: $text; +} +.Codemirror, pre, #markdown-editor-input, .editor-toolbar, .code-base { + font-family: $mono; +} + /* * Header Styles */ @@ -58,7 +69,6 @@ a, .link { cursor: pointer; text-decoration: none; transition: color ease-in-out 80ms; - font-family: $text; line-height: 1.6; &:hover { text-decoration: underline; @@ -131,7 +141,6 @@ sub, .subscript { } pre { - font-family: monospace; font-size: 12px; background-color: #f5f5f5; border: 1px solid #DDD; @@ -180,7 +189,6 @@ blockquote { .code-base { background-color: #F8F8F8; - font-family: monospace; font-size: 0.80em; border: 1px solid #DDD; border-radius: 3px; diff --git a/resources/assets/sass/_variables.scss b/resources/assets/sass/_variables.scss index 3e864aaa4..18880fa5b 100644 --- a/resources/assets/sass/_variables.scss +++ b/resources/assets/sass/_variables.scss @@ -27,8 +27,12 @@ $-xs: 6px; $-xxs: 3px; // Fonts -$heading: 'Roboto', 'DejaVu Sans', Helvetica, Arial, sans-serif; -$text: 'Roboto', 'DejaVu Sans', Helvetica, Arial, sans-serif; +$text: -apple-system, BlinkMacSystemFont, +"Segoe UI", "Oxygen", "Ubuntu", "Roboto", "Cantarell", +"Fira Sans", "Droid Sans", "Helvetica Neue", +sans-serif; +$mono: "Lucida Console", "DejaVu Sans Mono", "Ubunto Mono", Monaco, monospace; +$heading: $text; $fs-m: 15px; $fs-s: 14px; diff --git a/resources/assets/sass/export-styles.scss b/resources/assets/sass/export-styles.scss index 72b5b16b5..19579004b 100644 --- a/resources/assets/sass/export-styles.scss +++ b/resources/assets/sass/export-styles.scss @@ -1,4 +1,3 @@ -//@import "reset"; @import "variables"; @import "mixins"; @import "html"; diff --git a/resources/assets/sass/styles.scss b/resources/assets/sass/styles.scss index 0b86051bb..b912bf7ee 100644 --- a/resources/assets/sass/styles.scss +++ b/resources/assets/sass/styles.scss @@ -1,6 +1,5 @@ @import "reset"; @import "variables"; -@import "fonts"; @import "mixins"; @import "html"; @import "text"; @@ -23,7 +22,6 @@ animation-name: none !important; } - [ng\:cloak], [ng-cloak], .ng-cloak { display: none !important; user-select: none; From 28a9bd514f65638c78b07380d75dfb01070cff0c Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 19 Aug 2017 15:33:22 +0100 Subject: [PATCH 83/83] Updated header design --- public/logo.png | Bin 4682 -> 5415 bytes resources/assets/sass/_buttons.scss | 1 + resources/assets/sass/_forms.scss | 11 +-- resources/assets/sass/_header.scss | 87 ++++++++++-------- resources/views/base.blade.php | 16 ++-- resources/views/books/show.blade.php | 12 +-- resources/views/chapters/show.blade.php | 12 +-- .../views/components/image-picker.blade.php | 2 +- .../views/partials/custom-styles.blade.php | 2 + 9 files changed, 74 insertions(+), 69 deletions(-) diff --git a/public/logo.png b/public/logo.png index 1803feebf53414a98b6d670e4d6746a40b444ddb..585f8895b4f26c872ac9369bd4229811e725b252 100644 GIT binary patch literal 5415 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 L&lFXw>+<M-fQUL^ literal 4682 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 M07*qoM6N<$f;h>!B>(^b diff --git a/resources/assets/sass/_buttons.scss b/resources/assets/sass/_buttons.scss index 8ee7f596a..202eb935b 100644 --- a/resources/assets/sass/_buttons.scss +++ b/resources/assets/sass/_buttons.scss @@ -64,6 +64,7 @@ $button-border-radius: 2px; padding: 0; margin: 0; border: none; + user-select: none; &:focus, &:active { outline: 0; } diff --git a/resources/assets/sass/_forms.scss b/resources/assets/sass/_forms.scss index cf7ea083e..d372359cc 100644 --- a/resources/assets/sass/_forms.scss +++ b/resources/assets/sass/_forms.scss @@ -248,15 +248,14 @@ div[editor-type="markdown"] .title-input.page-title input[type="text"] { border: none; color: $primary; padding: 0; - margin: 0; cursor: pointer; - margin-left: $-s; - } - button[type="submit"] { - margin-left: -$-l; + position: absolute; + left: 7px; + top: 7px; } input { - padding-right: $-l; + display: block; + padding-left: $-l; width: 300px; max-width: 100%; } diff --git a/resources/assets/sass/_header.scss b/resources/assets/sass/_header.scss index ae8dd3ff5..49bd74b07 100644 --- a/resources/assets/sass/_header.scss +++ b/resources/assets/sass/_header.scss @@ -12,7 +12,6 @@ header { padding: $-m; } border-bottom: 1px solid #DDD; - //margin-bottom: $-l; .links { display: inline-block; vertical-align: top; @@ -23,26 +22,27 @@ header { } .links a { display: inline-block; - padding: $-l; + padding: $-m $-l; color: #FFF; &:last-child { padding-right: 0; } @include smaller-than($screen-md) { - padding: $-l $-s; + padding: $-m $-s; } } .avatar, .user-name { display: inline-block; } .avatar { - //margin-top: (45px/2); width: 30px; height: 30px; } .user-name { vertical-align: top; - padding-top: $-l; + padding-top: $-m; + position: relative; + top: -3px; display: inline-block; cursor: pointer; > * { @@ -66,53 +66,57 @@ header { } } } - @include smaller-than($screen-md) { + @include smaller-than($screen-sm) { text-align: center; .float.right { float: none; } - } - @include smaller-than($screen-sm) { .links a { padding: $-s; } - form.search-box { - margin-top: 0; - } .user-name { padding-top: $-s; } } - .dropdown-container { - font-size: 0.9em; +} + +.header-search { + display: inline-block; +} +header .search-box { + display: inline-block; + margin-top: $-s; + input { + background-color: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(255, 255, 255, 0.3); + color: #EEE; + } + button { + color: #EEE; + } + ::-webkit-input-placeholder { /* Chrome/Opera/Safari */ + color: #DDD; + } + ::-moz-placeholder { /* Firefox 19+ */ + color: #DDD; + } + :-ms-input-placeholder { /* IE 10+ */ + color: #DDD; + } + :-moz-placeholder { /* Firefox 18- */ + color: #DDD; + } + @include smaller-than($screen-lg) { + max-width: 250px; + } + @include smaller-than($l) { + max-width: 200px; } } -form.search-box { - margin-top: $-l *0.9; - display: inline-block; - position: relative; - text-align: left; - input { - background-color: transparent; - border-radius: 24px; - border: 2px solid #EEE; - color: #EEE; - padding-left: $-m; - padding-right: $-l; - outline: 0; - } - button { - vertical-align: top; - margin-left: -$-l; - color: #FFF; - top: 6px; - right: 4px; - display: inline-block; - position: absolute; - &:hover { - color: #FFF; - } +@include smaller-than($s) { + .header-search { + display: block; } } @@ -128,12 +132,12 @@ form.search-box { font-size: 1.8em; color: #fff; font-weight: 400; - padding: $-l $-l $-l 0; + padding: 14px $-l 14px 0; vertical-align: top; line-height: 1; } .logo-image { - margin: $-m $-s $-m 0; + margin: $-xs $-s $-xs 0; vertical-align: top; height: 43px; } @@ -227,4 +231,7 @@ form.search-box { border-bottom: 2px solid $primary; } } +} +.faded-small .nav-tabs a { + padding: $-s $-m; } \ No newline at end of file diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php index b1cacf08c..1c972e4fb 100644 --- a/resources/views/base.blade.php +++ b/resources/views/base.blade.php @@ -36,7 +36,7 @@ <header id="header"> <div class="container"> <div class="row"> - <div class="col-lg-4 col-sm-4" ng-non-bindable> + <div class="col-sm-4" ng-non-bindable> <a href="{{ baseUrl('/') }}" class="logo"> @if(setting('app-logo', '') !== 'none') <img class="logo-image" src="{{ setting('app-logo', '') === '' ? baseUrl('/logo.png') : baseUrl(setting('app-logo', '')) }}" alt="Logo"> @@ -46,14 +46,14 @@ @endif </a> </div> - <div class="col-lg-4 col-sm-3 text-center"> - <form action="{{ baseUrl('/search') }}" method="GET" class="search-box"> - <input id="header-search-box-input" type="text" name="term" tabindex="2" value="{{ isset($searchTerm) ? $searchTerm : '' }}"> - <button id="header-search-box-button" type="submit" class="text-button"><i class="zmdi zmdi-search"></i></button> - </form> - </div> - <div class="col-lg-4 col-sm-5"> + <div class="col-sm-8"> <div class="float right"> + <div class="header-search"> + <form action="{{ baseUrl('/search') }}" method="GET" class="search-box"> + <button id="header-search-box-button" type="submit"><i class="zmdi zmdi-search"></i> </button> + <input id="header-search-box-input" type="text" name="term" tabindex="2" placeholder="{{ trans('common.search') }}" value="{{ isset($searchTerm) ? $searchTerm : '' }}"> + </form> + </div> <div class="links text-center"> <a href="{{ baseUrl('/books') }}"><i class="zmdi zmdi-book"></i>{{ trans('entities.books') }}</a> @if(signedInUser() && userCan('settings-manage')) diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index 3d50bcef8..97942ee67 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -111,13 +111,11 @@ </p> @endif - <div class="search-box"> - <form v-on:submit.prevent="searchBook"> - <input v-model="searchTerm" v-on:change="checkSearchForm()" type="text" name="term" placeholder="{{ trans('entities.books_search_this') }}"> - <button type="submit"><i class="zmdi zmdi-search"></i></button> - <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button> - </form> - </div> + <form v-on:submit.prevent="searchBook" class="search-box"> + <input v-model="searchTerm" v-on:change="checkSearchForm()" type="text" name="term" placeholder="{{ trans('entities.books_search_this') }}"> + <button type="submit"><i class="zmdi zmdi-search"></i></button> + <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button> + </form> <div class="activity"> <h3>{{ trans('entities.recent_activity') }}</h3> diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php index f0fa40a84..62a7eaa74 100644 --- a/resources/views/chapters/show.blade.php +++ b/resources/views/chapters/show.blade.php @@ -115,13 +115,11 @@ </div> @endif - <div class="search-box"> - <form v-on:submit.prevent="searchBook"> - <input v-model="searchTerm" v-on:change="checkSearchForm()" type="text" name="term" placeholder="{{ trans('entities.chapters_search_this') }}"> - <button type="submit"><i class="zmdi zmdi-search"></i></button> - <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button> - </form> - </div> + <form v-on:submit.prevent="searchBook" class="search-box"> + <input v-model="searchTerm" v-on:change="checkSearchForm()" type="text" name="term" placeholder="{{ trans('entities.chapters_search_this') }}"> + <button type="submit"><i class="zmdi zmdi-search"></i></button> + <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button> + </form> @include('pages/sidebar-tree-list', ['book' => $book, 'sidebarTree' => $sidebarTree]) diff --git a/resources/views/components/image-picker.blade.php b/resources/views/components/image-picker.blade.php index 47fb2b8b7..228e8d230 100644 --- a/resources/views/components/image-picker.blade.php +++ b/resources/views/components/image-picker.blade.php @@ -43,7 +43,7 @@ } if (action === 'show-image-manager') { - window.ImageManager.showExternal((image) => { + window.ImageManager.show((image) => { if (!resize) { setImage(image); return; diff --git a/resources/views/partials/custom-styles.blade.php b/resources/views/partials/custom-styles.blade.php index c13051df4..ffa39c50a 100644 --- a/resources/views/partials/custom-styles.blade.php +++ b/resources/views/partials/custom-styles.blade.php @@ -1,4 +1,5 @@ <style id="custom-styles" data-color="{{ setting('app-color') }}" data-color-light="{{ setting('app-color-light') }}"> + @if(setting('app-color')) header, [back-to-top], .primary-background { background-color: {{ setting('app-color') }} !important; } @@ -17,4 +18,5 @@ .text-primary, p.primary, p .primary, span.primary:hover, .text-primary:hover, a, a:hover, a:focus, .text-button, .text-button:hover, .text-button:focus { color: {{ setting('app-color') }}; } + @endif </style> \ No newline at end of file