From e7bc0aaf4a57069054c821384673e2b7ad2f25c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 01:57:44 +0100 Subject: [PATCH 01/29] FEATURE: remove @lang() functions from templates. Enumeration values (strings) are translated during pushing into collection (enumeration). So there is no need to translate it again. --- resources/views/admin/customFields/editForm.blade.php | 4 ++-- resources/views/admin/customFields/newForm.blade.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/views/admin/customFields/editForm.blade.php b/resources/views/admin/customFields/editForm.blade.php index a9670268..f8f0e82e 100644 --- a/resources/views/admin/customFields/editForm.blade.php +++ b/resources/views/admin/customFields/editForm.blade.php @@ -43,7 +43,7 @@ @@ -59,7 +59,7 @@ diff --git a/resources/views/admin/customFields/newForm.blade.php b/resources/views/admin/customFields/newForm.blade.php index 9c5898c5..61fcc564 100644 --- a/resources/views/admin/customFields/newForm.blade.php +++ b/resources/views/admin/customFields/newForm.blade.php @@ -31,7 +31,7 @@ @@ -47,7 +47,7 @@ From 195ba5400523812e5fe144e0abf3f32bf75e63a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 14:55:59 +0100 Subject: [PATCH 02/29] FEATURE #1370: add form for creating new static page --- .../Controllers/Admin/CreateNewStaticPage.php | 38 +++- .../Requests/CreateNewStaticPageRequest.php | 25 +++ modules/StaticPages/Http/routes.php | 10 ++ .../Providers/StaticPagesServiceProvider.php | 164 +++++++++--------- .../StaticPages/Resources/lang/en/admin.php | 4 +- .../Resources/views/admin/new.blade.php | 15 ++ .../Resources/views/admin/newForm.blade.php | 121 +++++++++++++ .../Resources/views/index.blade.php | 11 -- 8 files changed, 291 insertions(+), 97 deletions(-) create mode 100644 modules/StaticPages/Http/Requests/CreateNewStaticPageRequest.php create mode 100644 modules/StaticPages/Resources/views/admin/new.blade.php create mode 100644 modules/StaticPages/Resources/views/admin/newForm.blade.php delete mode 100644 modules/StaticPages/Resources/views/index.blade.php diff --git a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php index da6a4c43..1f8fb202 100644 --- a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php @@ -1,10 +1,46 @@ []]); + } + + /** + * Save new static page + * + * @param CreateNewStaticPageRequest $request + * + * @return \Illuminate\Http\RedirectResponse + */ + public function postNew(CreateNewStaticPageRequest $request) + { + $page = new Content(); + + // @todo add module_handler + + $page->user_id = \Auth::user()->id; + $page->title = $request->title; + $page->published_from = $request->publishedFrom; + $page->published_to = $request->publishedTo; + $page->meta_keywords = $request->meta_description; + $page->meta_description = $request->meta_description; + $page->content = $request->pageContent; + + $page->save(); + + return redirect() + ->route('staticpages.new') + ->with('success', trans('admin.successfullyCreated')); } } \ No newline at end of file diff --git a/modules/StaticPages/Http/Requests/CreateNewStaticPageRequest.php b/modules/StaticPages/Http/Requests/CreateNewStaticPageRequest.php new file mode 100644 index 00000000..6db5f5d7 --- /dev/null +++ b/modules/StaticPages/Http/Requests/CreateNewStaticPageRequest.php @@ -0,0 +1,25 @@ + 'required', + 'url' => 'required|unique:contents,url', + 'published_from' => 'date', + 'published_to' => 'date', + 'title_photo' => 'exists:files,id', + 'module_settings' => 'json', + 'status' => 'required|in:draft,protected,public' + ]; + } +} diff --git a/modules/StaticPages/Http/routes.php b/modules/StaticPages/Http/routes.php index 70629721..f729916b 100644 --- a/modules/StaticPages/Http/routes.php +++ b/modules/StaticPages/Http/routes.php @@ -15,10 +15,20 @@ Route::group([ 'prefix' => 'admin/pages', 'namespace' => 'Modules\StaticPages\Http\Controllers\Admin' ], function () { + + // list of all static pages Route::get('overview', 'StaticPageOverview@getOverview') ->name('staticpage.overview'); + + // form for creating new static page Route::get('new', 'CreateNewStaticPage@getNew') ->name('staticpage.new'); + + // form for editing existing static page Route::get('edit/{id}', 'EditStaticPage@getEdit') ->name('staticpage.edit'); + + // post method for creating new static page + Route::post('new', 'CreateNewStaticPage@getNew') + ->name('staticpage.newPost'); }); \ No newline at end of file diff --git a/modules/StaticPages/Providers/StaticPagesServiceProvider.php b/modules/StaticPages/Providers/StaticPagesServiceProvider.php index 8352f756..5020d69b 100644 --- a/modules/StaticPages/Providers/StaticPagesServiceProvider.php +++ b/modules/StaticPages/Providers/StaticPagesServiceProvider.php @@ -1,99 +1,95 @@ registerTranslations(); + $this->registerConfig(); + $this->registerViews(); - /** - * Boot the application events. - * - * @return void - */ - public function boot() - { - $this->registerTranslations(); - $this->registerConfig(); - $this->registerViews(); + // register links in admin menu + $menu = \Menu::instance('mainMenu'); + $menu->dropdown(trans('staticpages::adminMenu.staticPages'), function ($submenu) { + $submenu->route('staticpage.new', trans('staticpages::adminMenu.new')); + $submenu->route('staticpage.overview', trans('staticpages::adminMenu.overview')); + }, 15, ['icon' => 'fa fa-newspaper-o']); + } - // register links in admin menu - $menu = \Menu::instance('mainMenu'); - $menu->dropdown(trans('staticpages::adminMenu.staticPages'), function($submenu) { - $submenu->route('staticpage.new', trans('staticpages::adminMenu.new')); - $submenu->route('staticpage.overview', trans('staticpages::adminMenu.overview')); - }, 15, ['icon' => 'fa fa-newspaper-o']); - } + /** + * Register the service provider. + * + * @return void + */ + public function register() + { + // + } - /** - * Register the service provider. - * - * @return void - */ - public function register() - { - // - } + /** + * Register config. + * + * @return void + */ + protected function registerConfig() + { + $this->publishes([ + __DIR__ . '/../Config/config.php' => config_path('staticpages.php'), + ]); + $this->mergeConfigFrom(__DIR__ . '/../Config/config.php', 'staticpages'); + } - /** - * Register config. - * - * @return void - */ - protected function registerConfig() - { - $this->publishes([ - __DIR__.'/../Config/config.php' => config_path('staticpages.php'), - ]); - $this->mergeConfigFrom( - __DIR__.'/../Config/config.php', 'staticpages' - ); - } + /** + * Register views. + * + * @return void + */ + public function registerViews() + { + $viewPath = base_path('resources/views/modules/staticpages'); - /** - * Register views. - * - * @return void - */ - public function registerViews() - { - $viewPath = base_path('resources/views/modules/staticpages'); + $sourcePath = __DIR__ . '/../Resources/views'; - $sourcePath = __DIR__.'/../Resources/views'; + $this->publishes([ + $sourcePath => $viewPath + ]); - $this->publishes([ - $sourcePath => $viewPath - ]); + $this->loadViewsFrom(array_merge(array_map(function ($path) { + return $path . '/modules/staticpages'; + }, \Config::get('view.paths')), [$sourcePath]), 'staticpages'); + } - $this->loadViewsFrom(array_merge(array_map(function ($path) { - return $path . '/modules/staticpages'; - }, \Config::get('view.paths')), [$sourcePath]), 'staticpages'); - } - - /** - * Register translations. - * - * @return void - */ - public function registerTranslations() - { - $this->loadTranslationsFrom(__DIR__ .'/../Resources/lang', 'staticpages'); - } - - /** - * Get the services provided by the provider. - * - * @return array - */ - public function provides() - { - return array(); - } + /** + * Register translations. + * + * @return void + */ + public function registerTranslations() + { + $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'staticpages'); + } + /** + * Get the services provided by the provider. + * + * @return array + */ + public function provides() + { + return []; + } } diff --git a/modules/StaticPages/Resources/lang/en/admin.php b/modules/StaticPages/Resources/lang/en/admin.php index be77c359..77ca7463 100644 --- a/modules/StaticPages/Resources/lang/en/admin.php +++ b/modules/StaticPages/Resources/lang/en/admin.php @@ -1,5 +1,7 @@ 'List of all static pages', - 'new' => 'Create new static page' + 'new' => 'Create new static page', + 'content' => 'Page content', + 'save' => 'Save new page' ]; \ No newline at end of file diff --git a/modules/StaticPages/Resources/views/admin/new.blade.php b/modules/StaticPages/Resources/views/admin/new.blade.php new file mode 100644 index 00000000..e0a2d47f --- /dev/null +++ b/modules/StaticPages/Resources/views/admin/new.blade.php @@ -0,0 +1,15 @@ +@extends('admin.layout') + +@section('pageName', @trans('staticpages::admin.new')) + +@section('content') + +
+

@lang('staticpages::admin.new')

+ +
+ +
+ @include('staticpages::admin.newForm') +
+@stop \ No newline at end of file diff --git a/modules/StaticPages/Resources/views/admin/newForm.blade.php b/modules/StaticPages/Resources/views/admin/newForm.blade.php new file mode 100644 index 00000000..f0ecad59 --- /dev/null +++ b/modules/StaticPages/Resources/views/admin/newForm.blade.php @@ -0,0 +1,121 @@ +@if (session('success')) +
+ {{ session('success') }} +
+@endif + +@if (session('error')) +
+ {{ session('error') }} +
+@endif + +
+ {!! csrf_field() !!} + + + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
\ No newline at end of file diff --git a/modules/StaticPages/Resources/views/index.blade.php b/modules/StaticPages/Resources/views/index.blade.php deleted file mode 100644 index 3c5ecc9d..00000000 --- a/modules/StaticPages/Resources/views/index.blade.php +++ /dev/null @@ -1,11 +0,0 @@ -@extends('staticpages::layouts.master') - -@section('content') - -

Hello World

- -

- This view is loaded from module: {!! config('staticpages.name') !!} -

- -@stop \ No newline at end of file From cc832d52498d8556b35677526803b987ac999acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 15:02:22 +0100 Subject: [PATCH 03/29] FEATURE #1394: add modules enumeration class --- app/Enumerations/Modules.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 app/Enumerations/Modules.php diff --git a/app/Enumerations/Modules.php b/app/Enumerations/Modules.php new file mode 100644 index 00000000..209f5c22 --- /dev/null +++ b/app/Enumerations/Modules.php @@ -0,0 +1,21 @@ +id, $module->name); + } + } +} \ No newline at end of file From c4dd6cc229a1eacd47166d93d022f829e8d807e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 15:16:15 +0100 Subject: [PATCH 04/29] FIX: fix enumeration for modules. Module does not have ID field. Instead, it has handler field. --- app/Enumerations/Modules.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Enumerations/Modules.php b/app/Enumerations/Modules.php index 209f5c22..ccc1413c 100644 --- a/app/Enumerations/Modules.php +++ b/app/Enumerations/Modules.php @@ -12,10 +12,10 @@ class Modules extends BaseEnumeration */ protected static function init() { - $modules = Module::all(['id', 'name']); + $modules = Module::all(['handler', 'name']); foreach ($modules as $module) { - self::push($module->id, $module->name); + self::push($module->handler, $module->name); } } } \ No newline at end of file From 686ce63ca794cdf3648eb6d23c0154146de3674b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 15:27:15 +0100 Subject: [PATCH 05/29] FIX: fix enumerations - empty init caused error --- app/Enumerations/BaseEnumeration.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/Enumerations/BaseEnumeration.php b/app/Enumerations/BaseEnumeration.php index 4c23e441..356ac390 100644 --- a/app/Enumerations/BaseEnumeration.php +++ b/app/Enumerations/BaseEnumeration.php @@ -26,6 +26,11 @@ abstract class BaseEnumeration $className::init(); } + // it can happen that even after init no enumerations are available + if (empty(self::$items[$className])) { + self::$items[$className] = []; + } + self::$initiliazed[] = $className; } } From 35a93091ff1e73a94c4a2f571887edf23c06e4fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 15:28:41 +0100 Subject: [PATCH 06/29] FEATURE #1394: init static page module Module is now installed and ready to be used --- app/Handlers/Handler.php | 6 ++++ app/Models/Module.php | 2 +- modules/StaticPages/Handlers/StaticPage.php | 11 +++++++ .../Providers/StaticPagesServiceProvider.php | 31 +++++++++++++------ .../StaticPages/Resources/lang/en/module.php | 5 +++ 5 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 app/Handlers/Handler.php create mode 100644 modules/StaticPages/Handlers/StaticPage.php create mode 100644 modules/StaticPages/Resources/lang/en/module.php diff --git a/app/Handlers/Handler.php b/app/Handlers/Handler.php new file mode 100644 index 00000000..25ade56d --- /dev/null +++ b/app/Handlers/Handler.php @@ -0,0 +1,6 @@ +install(); $this->registerTranslations(); $this->registerConfig(); $this->registerViews(); @@ -40,6 +43,24 @@ class StaticPagesServiceProvider extends ServiceProvider // } + /** + * Method for installing module into database + */ + protected function install() + { + $handler = '\\Modules\\StaticPages\\Handlers\\StaticPage'; + $installedModules = Modules::getWithTranslations(); + if (!isset($installedModules[$handler])) { + + // insert module into database + Module::create([ + 'handler' => $handler, + 'name' => 'staticpages::module.name', + 'description' => 'staticpages::module.description' + ]); + } + } + /** * Register config. * @@ -82,14 +103,4 @@ class StaticPagesServiceProvider extends ServiceProvider { $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'staticpages'); } - - /** - * Get the services provided by the provider. - * - * @return array - */ - public function provides() - { - return []; - } } diff --git a/modules/StaticPages/Resources/lang/en/module.php b/modules/StaticPages/Resources/lang/en/module.php new file mode 100644 index 00000000..a263fd12 --- /dev/null +++ b/modules/StaticPages/Resources/lang/en/module.php @@ -0,0 +1,5 @@ + 'Static pages', + 'description' => 'Static pages are intended for displaying static content on webpage.' +]; \ No newline at end of file From 5db999e3b13d1088e8b4cee47a826fffd5c81825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 15:36:11 +0100 Subject: [PATCH 07/29] FEATURE: move static page handler into config --- config/staticpages.php | 6 ++++++ modules/StaticPages/Config/config.php | 3 ++- .../StaticPages/Providers/StaticPagesServiceProvider.php | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 config/staticpages.php diff --git a/config/staticpages.php b/config/staticpages.php new file mode 100644 index 00000000..d3434db4 --- /dev/null +++ b/config/staticpages.php @@ -0,0 +1,6 @@ + 'StaticPages', + 'handler' => '\\Modules\\StaticPages\\Handlers\\StaticPage' +]; \ No newline at end of file diff --git a/modules/StaticPages/Config/config.php b/modules/StaticPages/Config/config.php index 9db5d1a7..d3434db4 100644 --- a/modules/StaticPages/Config/config.php +++ b/modules/StaticPages/Config/config.php @@ -1,5 +1,6 @@ 'StaticPages' + 'name' => 'StaticPages', + 'handler' => '\\Modules\\StaticPages\\Handlers\\StaticPage' ]; \ No newline at end of file diff --git a/modules/StaticPages/Providers/StaticPagesServiceProvider.php b/modules/StaticPages/Providers/StaticPagesServiceProvider.php index 93381c3e..7429becf 100644 --- a/modules/StaticPages/Providers/StaticPagesServiceProvider.php +++ b/modules/StaticPages/Providers/StaticPagesServiceProvider.php @@ -48,7 +48,7 @@ class StaticPagesServiceProvider extends ServiceProvider */ protected function install() { - $handler = '\\Modules\\StaticPages\\Handlers\\StaticPage'; + $handler = config('staticpages.handler'); $installedModules = Modules::getWithTranslations(); if (!isset($installedModules[$handler])) { From 19ee504075eeac2681059db55a6e567898b0e8b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 15:42:35 +0100 Subject: [PATCH 08/29] FEATURE: add translation for static page --- .../Controllers/Admin/CreateNewStaticPage.php | 3 +-- modules/StaticPages/Resources/lang/en/admin.php | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php index 1f8fb202..995d2b97 100644 --- a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php @@ -27,8 +27,6 @@ class CreateNewStaticPage extends Controller { $page = new Content(); - // @todo add module_handler - $page->user_id = \Auth::user()->id; $page->title = $request->title; $page->published_from = $request->publishedFrom; @@ -36,6 +34,7 @@ class CreateNewStaticPage extends Controller $page->meta_keywords = $request->meta_description; $page->meta_description = $request->meta_description; $page->content = $request->pageContent; + $page->module_handler = config('staticpages.handler'); $page->save(); diff --git a/modules/StaticPages/Resources/lang/en/admin.php b/modules/StaticPages/Resources/lang/en/admin.php index 77ca7463..8d89602d 100644 --- a/modules/StaticPages/Resources/lang/en/admin.php +++ b/modules/StaticPages/Resources/lang/en/admin.php @@ -1,7 +1,16 @@ 'List of all static pages', - 'new' => 'Create new static page', - 'content' => 'Page content', - 'save' => 'Save new page' + 'overview' => 'List of all static pages', + 'new' => 'Create new static page', + 'content' => 'Page content', + 'save' => 'Save new page', + 'basicInfo' => 'Basic information', + 'metaOptions' => 'Meta information', + 'publicationOptions' => 'Publication setup', + 'field_title' => 'Page title', + 'field_url' => 'URL', + 'field_meta_keywords' => 'Keywords', + 'field_meta_description' => 'Page description', + 'field_published_from' => 'Published from', + 'field_published_to' => 'Published to' ]; \ No newline at end of file From cac5b1dfb9bd4c2c2dc59076d7ba07d8522b7213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 15:45:14 +0100 Subject: [PATCH 09/29] FEATURE: init trumbowyg editor --- .../js/vendor/trumbowyg/langs/ar.min.js | 9 + .../js/vendor/trumbowyg/langs/ca.min.js | 11 + .../js/vendor/trumbowyg/langs/cs.min.js | 8 + .../js/vendor/trumbowyg/langs/da.min.js | 9 + .../js/vendor/trumbowyg/langs/de.min.js | 9 + .../js/vendor/trumbowyg/langs/el.min.js | 12 + .../js/vendor/trumbowyg/langs/es.min.js | 9 + .../js/vendor/trumbowyg/langs/es_ar.min.js | 9 + .../js/vendor/trumbowyg/langs/fa.min.js | 10 + .../js/vendor/trumbowyg/langs/fi.min.js | 9 + .../js/vendor/trumbowyg/langs/fr.min.js | 10 + .../js/vendor/trumbowyg/langs/he.min.js | 9 + .../js/vendor/trumbowyg/langs/hu.min.js | 10 + .../js/vendor/trumbowyg/langs/id.min.js | 11 + .../js/vendor/trumbowyg/langs/it.min.js | 8 + .../js/vendor/trumbowyg/langs/ja.min.js | 10 + .../js/vendor/trumbowyg/langs/ko.min.js | 10 + .../js/vendor/trumbowyg/langs/my.min.js | 8 + .../js/vendor/trumbowyg/langs/nl.min.js | 9 + .../js/vendor/trumbowyg/langs/pl.min.js | 9 + .../js/vendor/trumbowyg/langs/pt.min.js | 11 + .../js/vendor/trumbowyg/langs/ro.min.js | 12 + .../js/vendor/trumbowyg/langs/rs.min.js | 8 + .../js/vendor/trumbowyg/langs/rs_latin.min.js | 8 + .../js/vendor/trumbowyg/langs/ru.min.js | 8 + .../js/vendor/trumbowyg/langs/sk.min.js | 8 + .../js/vendor/trumbowyg/langs/sv.min.js | 9 + .../js/vendor/trumbowyg/langs/tr.min.js | 9 + .../js/vendor/trumbowyg/langs/ua.min.js | 8 + .../js/vendor/trumbowyg/langs/vi.min.js | 9 + .../js/vendor/trumbowyg/langs/zh_cn.min.js | 10 + .../js/vendor/trumbowyg/langs/zh_tw.min.js | 10 + .../plugins/base64/trumbowyg.base64.js | 81 ++ .../plugins/base64/trumbowyg.base64.min.js | 1 + .../plugins/colors/trumbowyg.colors.js | 82 ++ .../plugins/colors/trumbowyg.colors.min.js | 1 + .../colors/ui/images/icons-black-2x.png | Bin 0 -> 1304 bytes .../plugins/colors/ui/images/icons-black.png | Bin 0 -> 936 bytes .../colors/ui/images/icons-white-2x.png | Bin 0 -> 1317 bytes .../plugins/colors/ui/images/icons-white.png | Bin 0 -> 884 bytes .../colors/ui/sass/_sprite-black-2x.scss | 18 + .../plugins/colors/ui/sass/_sprite-black.scss | 18 + .../colors/ui/sass/_sprite-white-2x.scss | 18 + .../plugins/colors/ui/sass/_sprite-white.scss | 18 + .../colors/ui/sass/trumbowyg.colors.scss | 105 ++ .../plugins/colors/ui/trumbowyg.colors.css | 76 ++ .../colors/ui/trumbowyg.colors.min.css | 2 + .../plugins/editlink/trumbowyg.editlink.js | 112 ++ .../editlink/trumbowyg.editlink.min.js | 1 + .../preformatted/trumbowyg.preformatted.js | 106 ++ .../trumbowyg.preformatted.min.js | 1 + .../preformatted/ui/images/icons-black-2x.png | Bin 0 -> 520 bytes .../preformatted/ui/images/icons-black.png | Bin 0 -> 288 bytes .../preformatted/ui/images/icons-white-2x.png | Bin 0 -> 573 bytes .../preformatted/ui/images/icons-white.png | Bin 0 -> 346 bytes .../ui/sass/_sprite-black-2x.scss | 17 + .../preformatted/ui/sass/_sprite-black.scss | 17 + .../ui/sass/_sprite-white-2x.scss | 17 + .../preformatted/ui/sass/_sprite-white.scss | 17 + .../ui/sass/trumbowyg.preformatted.scss | 56 + .../ui/trumbowyg.preformatted.css | 36 + .../ui/trumbowyg.preformatted.min.css | 2 + .../plugins/upload/trumbowyg.upload.js | 187 +++ .../plugins/upload/trumbowyg.upload.min.js | 1 + .../assets/js/vendor/trumbowyg/trumbowyg.js | 1213 +++++++++++++++++ .../js/vendor/trumbowyg/trumbowyg.min.js | 2 + .../trumbowyg/ui/images/icons-black-2x.png | Bin 0 -> 13896 bytes .../trumbowyg/ui/images/icons-black.png | Bin 0 -> 7434 bytes .../trumbowyg/ui/images/icons-white-2x.png | Bin 0 -> 12862 bytes .../trumbowyg/ui/images/icons-white.png | Bin 0 -> 6615 bytes .../trumbowyg/ui/sass/_sprite-black-2x.scss | 40 + .../trumbowyg/ui/sass/_sprite-black.scss | 40 + .../trumbowyg/ui/sass/_sprite-white-2x.scss | 40 + .../trumbowyg/ui/sass/_sprite-white.scss | 40 + .../trumbowyg/ui/sass/mixins/_sprite-pos.scss | 18 + .../vendor/trumbowyg/ui/sass/trumbowyg.scss | 1017 ++++++++++++++ .../js/vendor/trumbowyg/ui/trumbowyg.css | 705 ++++++++++ .../js/vendor/trumbowyg/ui/trumbowyg.min.css | 2 + 78 files changed, 4406 insertions(+) create mode 100644 resources/assets/js/vendor/trumbowyg/langs/ar.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/ca.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/cs.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/da.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/de.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/el.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/es.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/es_ar.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/fa.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/fi.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/fr.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/he.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/hu.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/id.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/it.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/ja.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/ko.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/my.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/nl.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/pl.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/pt.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/ro.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/rs.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/rs_latin.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/ru.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/sk.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/sv.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/tr.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/ua.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/vi.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/zh_cn.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/langs/zh_tw.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-black-2x.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-black.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-white-2x.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-white.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black-2x.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white-2x.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.css create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.min.js create mode 100755 resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js create mode 100755 resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-black-2x.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-black.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-white-2x.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-white.png create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black-2x.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white-2x.scss create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white.scss create mode 100755 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/trumbowyg.preformatted.scss create mode 100755 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.css create mode 100755 resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.min.css create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.js create mode 100644 resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/trumbowyg.js create mode 100644 resources/assets/js/vendor/trumbowyg/trumbowyg.min.js create mode 100644 resources/assets/js/vendor/trumbowyg/ui/images/icons-black-2x.png create mode 100644 resources/assets/js/vendor/trumbowyg/ui/images/icons-black.png create mode 100644 resources/assets/js/vendor/trumbowyg/ui/images/icons-white-2x.png create mode 100644 resources/assets/js/vendor/trumbowyg/ui/images/icons-white.png create mode 100644 resources/assets/js/vendor/trumbowyg/ui/sass/_sprite-black-2x.scss create mode 100644 resources/assets/js/vendor/trumbowyg/ui/sass/_sprite-black.scss create mode 100644 resources/assets/js/vendor/trumbowyg/ui/sass/_sprite-white-2x.scss create mode 100644 resources/assets/js/vendor/trumbowyg/ui/sass/_sprite-white.scss create mode 100644 resources/assets/js/vendor/trumbowyg/ui/sass/mixins/_sprite-pos.scss create mode 100644 resources/assets/js/vendor/trumbowyg/ui/sass/trumbowyg.scss create mode 100644 resources/assets/js/vendor/trumbowyg/ui/trumbowyg.css create mode 100644 resources/assets/js/vendor/trumbowyg/ui/trumbowyg.min.css diff --git a/resources/assets/js/vendor/trumbowyg/langs/ar.min.js b/resources/assets/js/vendor/trumbowyg/langs/ar.min.js new file mode 100644 index 00000000..0f83dd37 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/ar.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * ar.js + * Arabic translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Abo Mokh ahmed (abomokhahmed) + * Github : https://github.com/abomokhahmed + */ +jQuery.trumbowyg.langs.ar={_dir:"rtl",viewHTML:"إعرض-HTML",formatting:"تصميم",p:"فقرة",blockquote:"اقتباس",code:"كود",header:"رئيسي",bold:"عريض",italic:"مائل",strikethrough:"مشطوب",underline:"خطّ سفلي",strong:"بارز",em:"تغميق",del:"حذف",unorderedList:"قائمة غير مرتّبة",orderedList:"قائمة مرتّبة",insertImage:"إدخال صورة",insertVideo:"إدخال فيديو",link:"رابط",createLink:"انشاء رابط",unlink:"حذف رابط",justifyLeft:"تصحيح للشمال",justifyCenter:"تصحيح للمركز",justifyRight:"تصحيح لليمين",justifyFull:"تصحيح لكلا الإتّجاهين",horizontalRule:"إدخال خطّ أفقي",fullscreen:"شاشة واسعة",close:"إغلاق",submit:"أرسل",reset:"تهيئة من حديد",required:"إلزامي",description:"وصف",title:"عنوان",text:"نصّ"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/ca.min.js b/resources/assets/js/vendor/trumbowyg/langs/ca.min.js new file mode 100644 index 00000000..f6cf1f24 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/ca.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * ca.js + * Catalan translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Àlfons Sánchez (alsanan) + * Twitter : @alsanan + * Website : about.me/alsanan + * Github : https://github.com/alsanan + */ +jQuery.trumbowyg.langs.ca={viewHTML:"Veure HTML",formatting:"Formatar",p:"Paragraf",blockquote:"Citació",code:"Codi",header:"Títol",bold:"Negreta",italic:"Itàlica",strikethrough:"Suprimir",underline:"Subratllat",strong:"Forta",em:"Èmfasi",del:"Apagar",unorderedList:"Lista desordenada",orderedList:"Lista ordenada",insertImage:"Inserir imatge",insertVideo:"Inserir vídeo",link:"Enllaç",createLink:"Crear un enllaç",unlink:"Eliminar enllaç",justifyLeft:"Alinear a esquerra",justifyCenter:"Centrar",justifyRight:"Alinear a dreta",justifyFull:"Justificar",horizontalRule:"Inserir separador horitzontal",fullscreen:"Pantalla completa",close:"Tancar",submit:"Enviar",reset:"Reiniciar",required:"Obligatori",description:"Descripció",title:"Títol",text:"Text"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/cs.min.js b/resources/assets/js/vendor/trumbowyg/langs/cs.min.js new file mode 100644 index 00000000..0666e151 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/cs.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * cs.js + * Czech translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Jan Svoboda (https://github.com/svoboda-jan) + */ +jQuery.trumbowyg.langs.cs={viewHTML:"Zobrazit HTML",formatting:"Formátování",p:"Odstavec",blockquote:"Citace",code:"Kód",header:"Nadpis",bold:"Tučné",italic:"Kurzíva",strikethrough:"Přeškrtnuté",underline:"Podtržené",strong:"Tučné",em:"Zvýraznit",del:"Smazat",unorderedList:"Netříděný seznam",orderedList:"Tříděný seznam",insertImage:"Vložit obrázek",insertVideo:"Vložit video",link:"Odkaz",createLink:"Vložit odkaz",unlink:"Smazat odkaz",justifyLeft:"Zarovnat doleva",justifyCenter:"Zarovnat na střed",justifyRight:"Zarovnat doprava",justifyFull:"Zarovnat do bloku",horizontalRule:"Vložit vodorovnou čáru",fullscreen:"Režim celé obrazovky",close:"Zavřít",submit:"Potvrdit",reset:"Zrušit",required:"Povinné",description:"Popis",title:"Nadpis",text:"Text"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/da.min.js b/resources/assets/js/vendor/trumbowyg/langs/da.min.js new file mode 100644 index 00000000..47adf1a2 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/da.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * da.js + * Danish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Christian Pedersen + * Github : https://github.com/chripede + */ +jQuery.trumbowyg.langs.da={viewHTML:"Vis HTML",formatting:"Formatter",p:"Afsnit",blockquote:"Citat",code:"Kode",header:"Overskrift",bold:"Fed",italic:"Kursiv",strikethrough:"Gennemstreg",underline:"Understreg",strong:"Vigtig",em:"Fremhæv",del:"Slettet",unorderedList:"Uordnet liste",orderedList:"Ordnet liste",insertImage:"Indsæt billede",insertVideo:"Indsæt video",link:"Link",createLink:"Indsæt link",unlink:"Fjern link",justifyLeft:"Venstrestil",justifyCenter:"Centrer",justifyRight:"Højrestil",justifyFull:"Lige margener",horizontalRule:"Horisontal linie",fullscreen:"Fuld skærm",close:"Luk",submit:"Bekræft",reset:"Annuller",required:"Påkrævet",description:"Beskrivelse",title:"Titel",text:"Tekst"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/de.min.js b/resources/assets/js/vendor/trumbowyg/langs/de.min.js new file mode 100644 index 00000000..15e3ae02 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/de.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * de.js + * German translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Manfred Timm + * Github : https://github.com/Manfred62 + */ +jQuery.trumbowyg.langs.de={viewHTML:"HTML anzeigen",formatting:"Formatieren",p:"Absatz",blockquote:"Zitat",code:"Code",header:"Überschrift",bold:"Fett",italic:"Kursiv",strikethrough:"Durchgestrichen",underline:"Unterstrichen",strong:"Wichtig",em:"Betont",del:"Gelöscht",unorderedList:"Ungeordnete Liste",orderedList:"Geordnete Liste",insertImage:"Bild einfügen",insertVideo:"Video einfügen",link:"Link",createLink:"Link einfügen",unlink:"Link entfernen",justifyLeft:"Links ausrichten",justifyCenter:"Zentrieren",justifyRight:"Rechts ausrichten",justifyFull:"Blocksatz",horizontalRule:"Horizontale Linie einfügen",fullscreen:"Vollbild",close:"Schliessen",submit:"Bestätigen",reset:"Rücksetzen",required:"Erforderlich",description:"Beschreibung",title:"Titel",text:"Text"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/el.min.js b/resources/assets/js/vendor/trumbowyg/langs/el.min.js new file mode 100644 index 00000000..e47c5a38 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/el.min.js @@ -0,0 +1,12 @@ +/* =========================================================== + * el.js + * Greek translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Merianos Nikos + * Twitter : @_webresources + * Website : http://www.wp-lion.com + * LinkedIn: https://gr.linkedin.com/in/merianosnikos + * Behance: https://www.behance.net/web_design_blog + */ +jQuery.trumbowyg.langs.es={viewHTML:"Προβολή κώδικα HTML",formatting:"Μορφοποίηση",p:"Παράγραφος",blockquote:"Παράθεση",code:"Κώδικας",header:"Επικεφαλίδα",bold:"Έντονα",italic:"Πλάγια",strikethrough:"Διαγραφή",underline:"Υπογράμμιση",strong:"Έντονα",em:"Πλάγια",del:"Διαγραφή",unorderedList:"Αταξινόμητη λίστα",orderedList:"Ταξινομημένη λίστα",insertImage:"Εισαγωγή εικόνας",insertVideo:"Εισαγωγή βίντεο",link:"Σύνδεσμος",createLink:"Δημιουργία συνδέσμου",unlink:"Διαγραφή συνδέσμου",justifyLeft:"Στοίχιση αριστερά",justifyCenter:"Στοίχιση στο κέντρο",justifyRight:"Στοίχιση δεξιά",justifyFull:"Πλήρης στοίχιση",horizontalRule:"Οριζόντια γραμμή",fullscreen:"Πλήρης οθόνη",close:"Κλείσιμο",submit:"Υποβολή",reset:"Επαναφορά",invalidUrl:"Λανθασμένο URL",required:"Απαραίτητο",description:"Περιγραφή",title:"Τίτλος",text:"Κείμενο"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/es.min.js b/resources/assets/js/vendor/trumbowyg/langs/es.min.js new file mode 100644 index 00000000..da16ed52 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/es.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * es.js + * Spanish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Moisés Márquez + * Email : moises.marquez.g@gmail.com + */ +jQuery.trumbowyg.langs.es={viewHTML:"Ver HTML",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Cursiva",strikethrough:"Tachado",underline:"Subrayado",strong:"Negrita",em:"Énfasis",del:"Borrar",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un vídeo",link:"Enlace",createLink:"Insertar un enlace",unlink:"Suprimir un enlace",justifyLeft:"Izquierda",justifyCenter:"Centrar",justifyRight:"Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separador horizontal",fullscreen:"Pantalla completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/es_ar.min.js b/resources/assets/js/vendor/trumbowyg/langs/es_ar.min.js new file mode 100644 index 00000000..0d4ed99a --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/es_ar.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * es_ar.js + * Spanish (Argentina) translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Félix Vera + * Email : felix.vera@gmail.com + */ +jQuery.trumbowyg.langs.es_ar={viewHTML:"Ver HTML",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Itálica",strikethrough:"Tachado",underline:"Subrayado",strong:"Fuere",em:"Énfasis",del:"Borrar",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un video",link:"Vínculo",createLink:"Insertar un vínculo",unlink:"Suprimir un vínculo",justifyLeft:"Alinear a la Izquierda",justifyCenter:"Centrar",justifyRight:"Alinear a la Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separado Horizontal",fullscreen:"Pantalla Completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/fa.min.js b/resources/assets/js/vendor/trumbowyg/langs/fa.min.js new file mode 100644 index 00000000..c3f9843c --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/fa.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * fa.js + * Persian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Kiarash Soleimanzadeh + * Github : https://github.com/kiyarash + * Email : kiarash.s@hotmail.com + */ +jQuery.trumbowyg.langs.fa={viewHTML:"نمایش کد اچ تی ام ال",formatting:"قالب بندی",p:"پاراگراف",blockquote:"نقل قول",code:"کد",header:"سر تیتر",bold:"ضخیم",italic:"مورب",strikethrough:"میان خط دار",underline:"زیر خط دار",strong:"برجسته",em:"مورب",del:"حذف شده",unorderedList:"لیست نامرتب",orderedList:"لیست مرتب",insertImage:"درج تصویر",insertVideo:"درج ویدئو",link:"لینک",createLink:"درج لینک",unlink:"حذف لینک",justifyLeft:"تراز به چپ",justifyCenter:"تراز به وسط",justifyRight:"تراز به راست",justifyFull:"تراز به چپ و راست",horizontalRule:"درج خط افقی",fullscreen:"تمام صفحه",close:"بستن",submit:"تائید",reset:"انصراف",required:"اجباری",description:"توضیحات",title:"عنوان",text:"متن"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/fi.min.js b/resources/assets/js/vendor/trumbowyg/langs/fi.min.js new file mode 100644 index 00000000..e6dde022 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/fi.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * fi.js + * Finnish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Teppo Koivula (teppokoivula) + * Github : https://github.com/teppokoivula + */ +jQuery.trumbowyg.langs.fi={viewHTML:"Näytä HTML",formatting:"Muotoilu",p:"Kappale",blockquote:"Lainaus",code:"Koodi",header:"Otsikko",bold:"Lihavointi",italic:"Kursivointi",strikethrough:"Yliviivaus",underline:"Allevivaus",strong:"Vahvennus",em:"Painotus",del:"Poistettu",unorderedList:"Numeroimaton lista",orderedList:"Numeroitu lista",insertImage:"Lisää kuva",insertVideo:"Lisää video",link:"Linkki",createLink:"Luo linkki",unlink:"Poista linkki",justifyLeft:"Asemoi vasemmalle",justifyCenter:"Keskitä",justifyRight:"Asemoi oikealle",justifyFull:"Tasaa",horizontalRule:"Vaakaviiva",fullscreen:"Kokoruutu",close:"Sulje",submit:"Lähetä",reset:"Palauta",required:"Pakollinen",description:"Kuvaus",title:"Otsikko",text:"Teksti"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/fr.min.js b/resources/assets/js/vendor/trumbowyg/langs/fr.min.js new file mode 100644 index 00000000..7274d757 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/fr.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * fr.js + * French translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ +jQuery.trumbowyg.langs.fr={viewHTML:"Voir le HTML",formatting:"Format",p:"Paragraphe",blockquote:"Citation",code:"Code",header:"Titre",bold:"Gras",italic:"Italique",strikethrough:"Rayé",underline:"Souligné",strong:"Fort",em:"Emphase",del:"Supprimé",unorderedList:"Liste à puces",orderedList:"Liste ordonnée",insertImage:"Insérer une image",insertVideo:"Insérer une video",link:"Lien",createLink:"Insérer un lien",unlink:"Supprimer le lien",justifyLeft:"Aligner à gauche",justifyCenter:"Centrer",justifyRight:"Aligner à droite",justifyFull:"Justifier",horizontalRule:"Insérer un séparateur horizontal",fullscreen:"Plein écran",close:"Fermer",submit:"Valider",reset:"Annuler",required:"Obligatoire",description:"Description",title:"Titre",text:"Texte"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/he.min.js b/resources/assets/js/vendor/trumbowyg/langs/he.min.js new file mode 100644 index 00000000..a706ecd0 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/he.min.js @@ -0,0 +1,9 @@ +/* =========================================================== +* he.js +* Hebrew translation for Trumbowyg +* http://alex-d.github.com/Trumbowyg +* =========================================================== +* Author : Udi Doron (udidoron) +* Github : https://github.com/udidoron +*/ +jQuery.trumbowyg.langs.he={_dir:"rtl",viewHTML:"צפה ב-HTML",formatting:"פורמט",p:"פסקה",blockquote:"ציטוט",code:"קוד",header:"ראשית",bold:"מודגש",italic:"נטוי",strikethrough:"קו חוצה",underline:"קו תחתון",strong:"בולט",em:"הדגשה",del:"נמחק",unorderedList:"רשימה ללא סדר",orderedList:"רשימה מסודרת",insertImage:"הכנס תמונה",insertVideo:"הכנס סרטון",link:"קישור",createLink:"צור קישור",unlink:"הסר קישור",justifyLeft:"ישר לשמאל",justifyCenter:"מרכז",justifyRight:"ישר לימין",justifyFull:"ישר לשני הצדדים",horizontalRule:"הכנס קו אופקי",fullscreen:"מסך מלא",close:"סגור",submit:"שלח",reset:"אתחל מחדש",required:"נחוץ",description:"תיאור",title:"כותרת",text:"טקסט"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/hu.min.js b/resources/assets/js/vendor/trumbowyg/langs/hu.min.js new file mode 100644 index 00000000..92c464ee --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/hu.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * hu.js + * Hungarian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Peter MATO + * Web: http://fixme.hu + * GitHub: https://github.com/matopeter + */ +jQuery.trumbowyg.langs.hu={viewHTML:"HTML nézet",formatting:"Stílusok",p:"Bekezdés",blockquote:"Idézet",code:"Kód",header:"Címsor",bold:"Félkövér",italic:"Dőlt",strikethrough:"Áthúzott",underline:"Aláhúzott",strong:"Vastag",em:"Kiemelt",del:"Törölt",unorderedList:"Felsorolás",orderedList:"Számozás",insertImage:"Kép beszúrása",insertVideo:"Video beszúrása",link:"Link",createLink:"Link létrehozása",unlink:"Link eltávolítása",justifyLeft:"Balra igazítás",justifyCenter:"Középre igazítás",justifyRight:"Jobbra igazítás",justifyFull:"Sorkizárt",horizontalRule:"Vízszintes vonal",fullscreen:"Teljes képernyő",close:"Bezár",submit:"Beküldés",reset:"Alaphelyzet",required:"Kötelező",description:"Leírás",title:"Cím",text:"Szöveg",removeformat:"Formázás eltávolítása"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/id.min.js b/resources/assets/js/vendor/trumbowyg/langs/id.min.js new file mode 100644 index 00000000..418fc885 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/id.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * id.js + * Indonesian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Rezha Julio (kimiamania) + * Twitter : @kimiamania + * Website : http://rezhajulio.web.id + * Github : https://github.com/kimiamania + */ +jQuery.trumbowyg.langs.id={viewHTML:"Lihat HTML",formatting:"Penyusunan",p:"Paragraf",blockquote:"Kutipan",code:"Kode",header:"Kepala",bold:"Tebal",italic:"Miring",strikethrough:"Coret",underline:"Garis bawah",strong:"Tebal",em:"Miring",del:"Dicoret",unorderedList:"Daftar tak teratur",orderedList:"Daftar teratur",insertImage:"Sisipkan gambar",insertVideo:"Sisipkan video",link:"Tautan",createLink:"Sisipkan Tautan",unlink:"Singkirkan tautan",justifyLeft:"Rata kiri",justifyCenter:"Rata Tengah",justifyRight:"Rata kanan",justifyFull:"Rata kiri dan kanan",horizontalRule:"Sisipkan garis mendatar",fullscreen:"Layar penuh",close:"Tutup",submit:"Setuju",reset:"Batal",required:"Diperlukan",description:"Deskripsi",title:"Judul",text:"Teks"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/it.min.js b/resources/assets/js/vendor/trumbowyg/langs/it.min.js new file mode 100644 index 00000000..da7fd4b0 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/it.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * it.js + * Italian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Mirko Buffoni + */ +jQuery.trumbowyg.langs.it={viewHTML:"Mostra HTML",formatting:"Formattazione",p:"Paragrafo",blockquote:"Citazione",code:"Codice",header:"Intestazione",bold:"Grassetto",italic:"Italico",strikethrough:"Barrato",underline:"Sottolineato",strong:"Rafforza",em:"Enfatizza",del:"Cancella",unorderedList:"Elenco puntato",orderedList:"Elenco numerato",insertImage:"Inserisci immagine",insertVideo:"Inserisci video",link:"Collegamento",createLink:"Crea un collegamento",unlink:"Elimina collegamento",justifyLeft:"Allinea a sinistra",justifyCenter:"Centra",justifyRight:"Allinea a destra",justifyFull:"Giustifica",horizontalRule:"Inserisci un separatore orizzontale",fullscreen:"Schermo intero",close:"Chiudi",submit:"Invia",reset:"Annulla",required:"Obbligatorio",description:"Descrizione",title:"Titolo",text:"Testo"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/ja.min.js b/resources/assets/js/vendor/trumbowyg/langs/ja.min.js new file mode 100644 index 00000000..ff34a2f0 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/ja.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * ja.js + * Japanese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Kouta Fukuhara (foo9) + * Twitter : @foo9 + * Website : https://github.com/foo9 + */ +jQuery.trumbowyg.langs.ja={viewHTML:"HTML表示",formatting:"フォーマット",p:"段落",blockquote:"引用",code:"コード",header:"見出し",bold:"太字",italic:"斜体",strikethrough:"取り消し線",underline:"下線",strong:"太字",em:"斜体",del:"取り消し線",unorderedList:"順序なしリスト",orderedList:"順序ありリスト",insertImage:"画像の挿入",insertVideo:"動画の挿入",link:"リンク",createLink:"リンクの作成",unlink:"リンクの削除",justifyLeft:"左揃え",justifyCenter:"中央揃え",justifyRight:"右揃え",justifyFull:"両端揃え",horizontalRule:"横罫線",fullscreen:"全画面表示",close:"閉じる",submit:"送信",reset:"キャンセル",required:"必須",description:"説明",title:"タイトル",text:"テキスト"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/ko.min.js b/resources/assets/js/vendor/trumbowyg/langs/ko.min.js new file mode 100644 index 00000000..76e9c248 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/ko.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * ko.js + * Korean translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : JoongSeob Vito Kim (dorajistyle) + * Blog : http://dorajistyle.pe.kr + * Github : https://github.com/dorajistyle + */ +jQuery.trumbowyg.langs.ko={viewHTML:"HTML로 보기",formatting:"양식",p:"문단",blockquote:"인용부호",code:"코드",header:"머릿말",bold:"진하게",italic:"기울임",strikethrough:"취소선",underline:"밑줄",strong:"굵게",em:"강조",del:"취소",unorderedList:"순차 목록",orderedList:"비순차 목록",insertImage:"이미지 넣기",insertVideo:"비디오 넣기",link:"링크",createLink:"링크 넣기",unlink:"링크 없애기",justifyLeft:"왼쪽 정렬",justifyCenter:"가운데 정렬",justifyRight:"오른쪽 정렬",justifyFull:"혼합 정렬",horizontalRule:"가로줄 넣기",fullscreen:"전체 화면",close:"닫기",submit:"전송",reset:"초기화",required:"꼭 입력해야 합니다.",description:"설명",title:"제목",text:"본문 내용"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/my.min.js b/resources/assets/js/vendor/trumbowyg/langs/my.min.js new file mode 100644 index 00000000..8dda5931 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/my.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * my.js + * Malaysian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : JohnPozy + */ +jQuery.trumbowyg.langs.id={viewHTML:"Lihat HTML",formatting:"Pemformatan",p:"Perenggan",blockquote:"Blockquote",code:"Kod",header:"Pengepala",bold:"Tebal",italic:"Condong",strikethrough:"Garis batal",underline:"Garis bawah",strong:"Kuat",em:"Condong",del:"Hapus",unorderedList:"Senarai tidak tertib",orderedList:"Senarai tertib",insertImage:"Masukkan imej",insertVideo:"Masukkan video",link:"Pautan",createLink:"Cipta pautan",unlink:"Hapus pautan",justifyLeft:"Mengimbangkan ke kiri",justifyCenter:"Mengimbangkan ke tengah",justifyRight:"Mengimbangkan ke kanan",justifyFull:"Mengimbangkan ke kiri dan kanan",horizontalRule:"Masukkan garis mendatar",fullscreen:"Skrin penuh",close:"Tutup",submit:"Hantar",reset:"Batal",required:"Diperlukan",description:"Perihal",title:"Tajuk",text:"Teks"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/nl.min.js b/resources/assets/js/vendor/trumbowyg/langs/nl.min.js new file mode 100644 index 00000000..ddd7b1bd --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/nl.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * nl.js + * Dutch translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Danny Hiemstra + * Github : https://github.com/dhiemstra + */ +jQuery.trumbowyg.langs.nl={viewHTML:"HTML bekijken",formatting:"Opmaak",p:"Paragraaf",blockquote:"Citaat",code:"Code",header:"Kop",bold:"Vet",italic:"Cursief",strikethrough:"Doorhalen",underline:"Onderlijnen",strong:"Sterk",em:"Nadruk",del:"Verwijderd",unorderedList:"Ongenummerde lijst",orderedList:"Genummerde lijst",insertImage:"Afbeelding invoegen",insertVideo:"Video invoegen",link:"Link",createLink:"Link maken",unlink:"Link verwijderen",justifyLeft:"Links uitlijnen",justifyCenter:"Centreren",justifyRight:"Rechts uitlijnen",justifyFull:"Uitvullen",horizontalRule:"Horizontale lijn",removeFormat:"Opmaak verwijderen",fullscreen:"Volledig scherm",close:"Sluiten",submit:"Verzenden",reset:"Herstellen",required:"Verplicht",description:"Omschrijving",title:"Titel",text:"Tekst"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/pl.min.js b/resources/assets/js/vendor/trumbowyg/langs/pl.min.js new file mode 100644 index 00000000..7d7a436a --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/pl.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * pl.js + * Polish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Paweł Abramowicz + * Github : https://github.com/pawelabrams + */ +jQuery.trumbowyg.langs.pl={viewHTML:"Pokaż HTML",formatting:"Format",p:"Akapit",blockquote:"Cytat",code:"Kod",header:"Nagłówek",bold:"Pogrubienie",italic:"Pochylenie",strikethrough:"Przekreślenie",underline:"Podkreślenie",strong:"Wytłuszczenie",em:"Uwydatnienie",del:"Usunięte",unorderedList:"Lista nieuporządkowana",orderedList:"Lista uporządkowana",insertImage:"Wstaw obraz",insertVideo:"Wstaw film",link:"Link",createLink:"Wstaw link",unlink:"Usuń link",justifyLeft:"Wyrównaj do lewej",justifyCenter:"Wyśrodkuj",justifyRight:"Wyrównaj do prawej",justifyFull:"Wyjustuj",horizontalRule:"Odkreśl linią",fullscreen:"Pełny ekran",close:"Zamknij",submit:"Zastosuj",reset:"Przywróć",required:"Wymagane",description:"Opis",title:"Tytuł",text:"Tekst"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/pt.min.js b/resources/assets/js/vendor/trumbowyg/langs/pt.min.js new file mode 100644 index 00000000..462fda3a --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/pt.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * pt.js + * Portuguese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Ramiro Varandas Jr (ramirovjr) + * Twitter : @ramirovjnr + * Website : about.me/ramirovjnr + * Github : https://github.com/ramirovjr + */ +jQuery.trumbowyg.langs.pt={viewHTML:"Ver HTML",formatting:"Formatar",p:"Paragráfo",blockquote:"Citação",code:"Código",header:"Título",bold:"Negrito",italic:"Itálico",strikethrough:"Suprimir",underline:"Sublinhado",strong:"Forte",em:"Ênfase",del:"Apagar",unorderedList:"Lista não ordenada",orderedList:"Liste ordenada",insertImage:"Inserir imagem",insertVideo:"Inserir vídeo",link:"Link",createLink:"Criar um link",unlink:"Remover link",justifyLeft:"Alinhar a esquerda",justifyCenter:"Centralizar",justifyRight:"Alinhar a direita",justifyFull:"Justificar",horizontalRule:"Inserir separador horizontal",fullscreen:"Tela cheia",close:"Fechar",submit:"Enviar",reset:"Limpar",required:"Obrigatório",description:"Descrição",title:"Título",text:"Texto"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/ro.min.js b/resources/assets/js/vendor/trumbowyg/langs/ro.min.js new file mode 100644 index 00000000..b3c4528b --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/ro.min.js @@ -0,0 +1,12 @@ +/* =========================================================== + * ro.js + * Romanian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Vladut Radulescu (pacMakaveli) + * Email: pacMakaveli90@gmail.com + * Twitter : @pacMakaveli90 + * Website : creative-studio51.co.uk + * Github : https://github.com/pacMakaveli + */ +jQuery.trumbowyg.langs.pt={viewHTML:"Vizualizare HTML",formatting:"Format",p:"Paragraf",blockquote:"Citație",code:"Cod",header:"Titlu",bold:"Bold",italic:"Italic",strikethrough:"Tăiat",underline:"Subliniat",strong:"Puternic",em:"Accentuat",del:"Sterge",unorderedList:"Lista dezordonată",orderedList:"Liste ordonată",insertImage:"Adăugare Imagine",insertVideo:"Adăugare Video",link:"Link",createLink:"Crează link",unlink:"Remover link",justifyLeft:"Aliniază stânga",justifyCenter:"Aliniază centru",justifyRight:"Aliniază dreapta",justifyFull:"Justificare",horizontalRule:"Linie orizontală",fullscreen:"Tot ecranul",close:"Închide",submit:"Procesează",reset:"Resetează",required:"Obligatoriu",description:"Descriere",title:"Titlu",text:"Text"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/rs.min.js b/resources/assets/js/vendor/trumbowyg/langs/rs.min.js new file mode 100644 index 00000000..f591173a --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/rs.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * rs.js + * Serbian (Cyrlic) translation for Trumbowyg + * https://www.github.com/johonunu + * =========================================================== + * Author : Nikola Trifunovic (https://www.github.com/johonunu) + */ +jQuery.trumbowyg.langs.rs={viewHTML:"Погледај HTML кóд",formatting:"Форматирање",p:"Параграф",blockquote:"Цитат",code:"Кóд",header:"Наслов",bold:"Подебљано",italic:"Курзив",strikethrough:"Прецртано",underline:"Подвучено",strong:"Подебљано",em:"Истакнуто",del:"Обрисано",unorderedList:"Ненабројива листа",orderedList:"Набројива листа",insertImage:"Унеси слику",insertVideo:"Унеси видео",link:"Линк",createLink:"Унеси линк",unlink:"Уклони линк",justifyLeft:"Лево равнање",justifyCenter:"Централно равнање",justifyRight:"Десно равнање",justifyFull:"Обострано равнање",horizontalRule:"Хоризонтална линија",fullscreen:"Режим читавог екрана",close:"Затвори",submit:"Унеси",reset:"Откажи",required:"Обавезно поље",invalidUrl:"URL",description:"Опис",title:"Наслов",text:"Текст"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/rs_latin.min.js b/resources/assets/js/vendor/trumbowyg/langs/rs_latin.min.js new file mode 100644 index 00000000..9fe81099 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/rs_latin.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * rs_latin.js + * Serbian (Latin) translation for Trumbowyg + * https://www.github.com/johonunu + * =========================================================== + * Author : Nikola Trifunovic (https://www.github.com/johonunu) + */ +jQuery.trumbowyg.langs.rs_latin={viewHTML:"Poglеdaj HTML kód",formatting:"Formatiranjе",p:"Paragraf",blockquote:"Citat",code:"Kód",header:"Naslov",bold:"Podеbljano",italic:"Kurziv",strikethrough:"Prеcrtano",underline:"Podvučеno",strong:"Podеbljano",em:"Istaknuto",del:"Obrisano",unorderedList:"Nеnabrojiva lista",orderedList:"Nabrojiva lista",insertImage:"Unеsi sliku",insertVideo:"Unеsi vidеo",link:"Link",createLink:"Unеsi link",unlink:"Ukloni link",justifyLeft:"Lеvo ravnanjе",justifyCenter:"Cеntralno ravnanjе",justifyRight:"Dеsno ravnanjе",justifyFull:"Obostrano ravnanjе",horizontalRule:"Horizontalna linija",fullscreen:"Rеžim čitavog еkrana",close:"Zatvori",submit:"Unеsi",reset:"Otkaži",required:"Obavеzno poljе",invalidUrl:"URL",description:"Opis",title:"Naslov",text:"Tеkst"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/ru.min.js b/resources/assets/js/vendor/trumbowyg/langs/ru.min.js new file mode 100644 index 00000000..8132efea --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/ru.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * ru.js + * Russion translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Yuri Lya + */ +jQuery.trumbowyg.langs.ru={viewHTML:"Посмотреть HTML",formatting:"Форматирование",p:"Обычный",blockquote:"Цитата",code:"Код",header:"Заголовок",bold:"Полужирный",italic:"Курсив",strikethrough:"Зачеркнутый",underline:"Подчеркнутый",strong:"Полужирный",em:"Курсив",del:"Зачеркнутый",unorderedList:"Обычный список",orderedList:"Нумерованный список",insertImage:"Вставить изображение",insertVideo:"Вставить видео",link:"Ссылка",createLink:"Вставить ссылку",unlink:"Удалить ссылку",justifyLeft:"По левому краю",justifyCenter:"По центру",justifyRight:"По правому краю",justifyFull:"По ширине",horizontalRule:"Горизонтальная линия",fullscreen:"Во весь экран",close:"Закрыть",submit:"Вставить",reset:"Отменить",required:"Обязательное",description:"Описание",title:"Подсказка",text:"Текст"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/sk.min.js b/resources/assets/js/vendor/trumbowyg/langs/sk.min.js new file mode 100644 index 00000000..cb74fd2a --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/sk.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * sk.js + * Slovak translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : VeeeneX (https://github.com/VeeeneX) + */ +jQuery.trumbowyg.langs.sk={viewHTML:"Zobraziť HTML",formatting:"Formátovanie",p:"Paragraf",blockquote:"Citácia",code:"Kód",header:"Nadpis",bold:"Tučné",italic:"Kurzíva",strikethrough:"Preškrtnuté",underline:"Podčiarknuté",strong:"Tučné",em:"Zvýrazniť",del:"Zmazať",unorderedList:"Netriedený zoznam",orderedList:"Triedený zoznam",insertImage:"Vložiť obrázok",insertVideo:"Vložiť video",link:"Odkaz",createLink:"Vložiť odkaz",unlink:"Zmazať odkaz",justifyLeft:"Zarovnať doľava",justifyCenter:"Zarovnať na stred",justifyRight:"Zarovnať doprava",justifyFull:"Zarovnať do bloku",horizontalRule:"Vložit vodorovnú čiaru",fullscreen:"Režim celej obrazovky",close:"Zavrieť",submit:"Potvrdiť",reset:"Zrušiť",required:"Povinné",description:"Popis",title:"Nadpis",text:"Text"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/sv.min.js b/resources/assets/js/vendor/trumbowyg/langs/sv.min.js new file mode 100644 index 00000000..78d73280 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/sv.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * sv.js + * Swedish translation for Trumbowyg + * http://www.tim-international.net + * =========================================================== + * Author : T. Almroth + * Github : https://github.com/timint + */ +jQuery.trumbowyg.langs.sv={viewHTML:"Visa HTML",formatting:"Formatera",p:"Avsnitt",blockquote:"Citat",code:"Kod",header:"Överskrift",bold:"Fet",italic:"Kursiv",strikethrough:"Genomstruken",underline:"Understreck",strong:"Viktig",em:"Framhäv",del:"Rensa formatering",unorderedList:"Lista",orderedList:"Numrerad lista",insertImage:"Infoga bild",insertVideo:"Infoga video",link:"Länk",createLink:"Infoga länk",unlink:"Ta bort länk",justifyLeft:"Vänsterjustera",justifyCenter:"Centrera",justifyRight:"Högerjustera",justifyFull:"Marginaljustera",horizontalRule:"Horisontell linje",fullscreen:"Fullskärm",close:"Stäng",submit:"Bekräfta",reset:"Återställ",required:"Obligatorisk",description:"Beskrivning",title:"Titel",text:"Text"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/tr.min.js b/resources/assets/js/vendor/trumbowyg/langs/tr.min.js new file mode 100644 index 00000000..8d36ef21 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/tr.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * tr.js + * Turkish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Emrah Bilbay (munzur) + * Github : https://github.com/munzur + */ +jQuery.trumbowyg.langs.tr={viewHTML:"HTML Kodu",formatting:"Biçimlendirme",p:"Paragraf",blockquote:"Alıntı",code:"Kod",header:"Başlık",bold:"Kalın",italic:"İtalik",strikethrough:"Üzeri çizgili",underline:"Altı çizgili",strong:"Koyu",em:"Vurgulu",del:"Üzeri çizgili",unorderedList:"Simgeli liste",orderedList:"Numaralı liste",insertImage:"Resim yerleştir",insertVideo:"Video yerleştir",link:"Link",createLink:"Link yerleştir",unlink:"Linki sil",justifyLeft:"Sola hizala",justifyCenter:"Ortaya hizala",justifyRight:"Sağa hizala",justifyFull:"Yasla",horizontalRule:"Yatay satır ekle",fullscreen:"Tam ekran",close:"Kapat",submit:"Onayla",reset:"Sıfırla",required:"Gerekli",description:"Açıklama",title:"Başlık",text:"Metin"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/ua.min.js b/resources/assets/js/vendor/trumbowyg/langs/ua.min.js new file mode 100644 index 00000000..dab81062 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/ua.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * ua.js + * Ukrainian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Igor Buksha + */ +jQuery.trumbowyg.langs.ua={viewHTML:"Подивитись HTML",formatting:"Форматування",p:"Звичайний",blockquote:"Витяг",code:"Код",header:"Заголовок",bold:"Напівжирний",italic:"Курсив",strikethrough:"Закреслений",underline:"Підкреслений",strong:"Напівжирний",em:"Курсив",del:"Закреслений",unorderedList:"Звичайний список",orderedList:"Нумерований список",insertImage:"Вставити зображення",insertVideo:"Вставити відео",link:"Посилання",createLink:"Вставити посилання",unlink:"Видалити посилання",justifyLeft:"По лівому краю",justifyCenter:"В центрі",justifyRight:"По правому краю",justifyFull:"По ширині",horizontalRule:"Горизонтальна лінія",fullscreen:"На весь екран",close:"Закрити",submit:"Вставити",reset:"Скасувати",required:"Обов'язкове",description:"Опис",title:"Підказка",text:"Текст"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/vi.min.js b/resources/assets/js/vendor/trumbowyg/langs/vi.min.js new file mode 100644 index 00000000..96734f30 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/vi.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * vi.js + * Vietnamese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : heocoi + * Github: https://github.com/heocoi + */ +jQuery.trumbowyg.langs.vi={viewHTML:"Hiển thị HTML",formatting:"Định dạng",p:"Đoạn",blockquote:"Trích dẫn",code:"Code",header:"Đầu trang",bold:"In đậm",italic:"In nghiêng",strikethrough:"Gạch ngang",underline:"Gạch chân",strong:"In đậm",em:"In nghiêng",del:"Gạch ngang",unorderedList:"Danh sách không thứ tự",orderedList:"Danh sách có thứ tự",insertImage:"Chèn hình ảnh",insertVideo:"Chèn video",link:"Đường dẫn",createLink:"Tạo đường dẫn",unlink:"Hủy đường dẫn",justifyLeft:"Canh lề trái",justifyCenter:"Canh giữa",justifyRight:"Canh lề phải",justifyFull:"Canh đều",horizontalRule:"Thêm đường kẻ ngang",fullscreen:"Toàn màn hình",close:"Đóng",submit:"Đồng ý",reset:"Hủy bỏ",required:"Bắt buộc",description:"Mô tả",title:"Tiêu đề",text:"Nội dung"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/zh_cn.min.js b/resources/assets/js/vendor/trumbowyg/langs/zh_cn.min.js new file mode 100644 index 00000000..0f4c13d1 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/zh_cn.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * zh_cn.js + * Simplified Chinese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Liu Kai (akai) + * Twitter : @akai404 + * Github : https://github.com/akai + */ +jQuery.trumbowyg.langs.zh_cn={viewHTML:"源代码",formatting:"格式",p:"段落",blockquote:"引用",code:"代码",header:"标题",bold:"加粗",italic:"斜体",strikethrough:"删除线",underline:"下划线",strong:"加粗",em:"斜体",del:"删除线",unorderedList:"无序列表",orderedList:"有序列表",insertImage:"插入图片",insertVideo:"插入视频",link:"超链接",createLink:"插入链接",unlink:"取消链接",justifyLeft:"居左对齐",justifyCenter:"居中对齐",justifyRight:"居右对齐",justifyFull:"两端对齐",horizontalRule:"插入分隔线",fullscreen:"全屏",close:"关闭",submit:"确定",reset:"取消",required:"必需的",description:"描述",title:"标题",text:"文字"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/langs/zh_tw.min.js b/resources/assets/js/vendor/trumbowyg/langs/zh_tw.min.js new file mode 100644 index 00000000..1f5b1d9a --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/langs/zh_tw.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * zh_tw.js + * Traditional Chinese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Peter Dave Hello (PeterDaveHello) + * Twitter : @PeterDaveHello + * Github : https://github.com/PeterDaveHello + */ +jQuery.trumbowyg.langs.zh_tw={viewHTML:"原始碼",formatting:"格式",p:"段落",blockquote:"引用",code:"代碼",header:"標題",bold:"加粗",italic:"斜體",strikethrough:"刪除線",underline:"底線",strong:"加粗",em:"斜體",del:"刪除線",unorderedList:"無序列表",orderedList:"有序列表",insertImage:"插入圖片",insertVideo:"插入影片",link:"超連結",createLink:"插入連結",unlink:"取消連結",justifyLeft:"靠左對齊",justifyCenter:"置中對齊",justifyRight:"靠右對齊",justifyFull:"左右對齊",horizontalRule:"插入分隔線",fullscreen:"全螢幕",close:"關閉",submit:"確定",reset:"取消",required:"必需的",description:"描述",title:"標題",text:"文字"}; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.js b/resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.js new file mode 100644 index 00000000..fd7fef3c --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.js @@ -0,0 +1,81 @@ +/* =========================================================== + * trumbowyg.base64.js v1.0 + * Base64 plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Cyril Biencourt (lizardK) + */ + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + en: { + base64: 'Image as base64', + file: 'File', + errFileReaderNotSupported: 'FileReader is not supported by your browser.' + }, + fr: { + base64: 'Image en base64', + file: 'Fichier' + }, + cs: { + base64: 'Vložit obrázek', + file: 'Soubor' + } + }, + + opts: { + btnsDef: { + base64: { + isSupported: function () { + if (typeof FileReader === 'undefined') { + if (window.console !== undefined) { + console.err('[Trumbowyg - Plugin base64] FileReader is not supported by your browser.'); + } + return false; + } + return true; + }, + func: function (params, tbw) { + var file; + tbw.openModalInsert( + // Title + tbw.lang.base64, + + // Fields + { + file: { + type: 'file', + required: true + }, + alt: { + label: 'description' + } + }, + + // Callback + function (values) { + var fReader = new FileReader(); + + fReader.onloadend = function () { + tbw.execCmd('insertImage', fReader.result); + $(['img[src="', fReader.result, '"]:not([alt])'].join(''), tbw.$box).attr('alt', values.alt); + tbw.closeModal(); + }; + + fReader.readAsDataURL(file); + } + ); + + $('input[type=file]').on('change', function (e) { + file = e.target.files[0]; + }); + }, + ico: 'insertImage' + } + } + } + }); +})(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.min.js b/resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.min.js new file mode 100644 index 00000000..8ba7c172 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/base64/trumbowyg.base64.min.js @@ -0,0 +1 @@ +!function(e){"use strict";e.extend(!0,e.trumbowyg,{langs:{en:{base64:"Image as base64",file:"File",errFileReaderNotSupported:"FileReader is not supported by your browser."},fr:{base64:"Image en base64",file:"Fichier"},cs:{base64:"Vložit obrázek",file:"Soubor"}},opts:{btnsDef:{base64:{isSupported:function(){return"undefined"==typeof FileReader?(void 0!==window.console&&console.err("[Trumbowyg - Plugin base64] FileReader is not supported by your browser."),!1):!0},func:function(o,r){var n;r.openModalInsert(r.lang.base64,{file:{type:"file",required:!0},alt:{label:"description"}},function(o){var t=new FileReader;t.onloadend=function(){r.execCmd("insertImage",t.result),e(['img[src="',t.result,'"]:not([alt])'].join(""),r.$box).attr("alt",o.alt),r.closeModal()},t.readAsDataURL(n)}),e("input[type=file]").on("change",function(e){n=e.target.files[0]})},ico:"insertImage"}}}})}(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.js b/resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.js new file mode 100644 index 00000000..15c356b8 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.js @@ -0,0 +1,82 @@ +/* =========================================================== + * trumbowyg.colors.js v1.1 + * Colors picker plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + cs: { + foreColor: 'Barva textu', + backColor: 'Barva pozadí' + }, + en: { + foreColor: 'Text color', + backColor: 'Background color' + }, + fr: { + foreColor: 'Couleur du texte', + backColor: 'Couleur de fond' + }, + sk: { + foreColor: 'Farba textu', + backColor: 'Farba pozadia' + } + } + }); + + // Create btnsDef entry + $.extend(true, $.trumbowyg, { + opts: { + btnsDef: {} + } + }); + + // Set default colors + if (!$.trumbowyg.opts.colors) + $.trumbowyg.opts.colors = ['ffffff', '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646', 'ffff00', 'f2f2f2', '7f7f7f', 'ddd9c3', 'c6d9f0', 'dbe5f1', 'f2dcdb', 'ebf1dd', 'e5e0ec', 'dbeef3', 'fdeada', 'fff2ca', 'd8d8d8', '595959', 'c4bd97', '8db3e2', 'b8cce4', 'e5b9b7', 'd7e3bc', 'ccc1d9', 'b7dde8', 'fbd5b5', 'ffe694', 'bfbfbf', '3f3f3f', '938953', '548dd4', '95b3d7', 'd99694', 'c3d69b', 'b2a2c7', 'b7dde8', 'fac08f', 'f2c314', 'a5a5a5', '262626', '494429', '17365d', '366092', '953734', '76923c', '5f497a', '92cddc', 'e36c09', 'c09100', '7f7f7f', '0c0c0c', '1d1b10', '0f243e', '244061', '632423', '4f6128', '3f3151', '31859b', '974806', '7f6000']; + + // Add all colors in two dropdowns + $.extend(true, $.trumbowyg, { + opts: { + btnsDef: { + foreColor: { + dropdown: buildDropdown('foreColor') + }, + backColor: { + dropdown: buildDropdown('backColor') + } + } + } + }); + + + function buildDropdown(func) { + var dropdown = []; + + $.each($.trumbowyg.opts.colors, function (i, color) { + var btn = '_' + func + color; + $.trumbowyg.opts.btnsDef[btn] = { + func: func, + param: '#' + color, + style: 'background-color: #' + color + ';' + }; + dropdown.push(btn); + }); + var btn = '_' + func + 'transparent'; + $.trumbowyg.opts.btnsDef[btn] = { + func: func, + param: 'transparent', + style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);' + }; + dropdown.push(btn); + return dropdown; + } +})(jQuery); diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.min.js b/resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.min.js new file mode 100644 index 00000000..26962a71 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/trumbowyg.colors.min.js @@ -0,0 +1 @@ +!function(o){"use strict";function f(f){var r=[];o.each(o.trumbowyg.opts.colors,function(e,d){var c="_"+f+d;o.trumbowyg.opts.btnsDef[c]={func:f,param:"#"+d,style:"background-color: #"+d+";"},r.push(c)});var e="_"+f+"transparent";return o.trumbowyg.opts.btnsDef[e]={func:f,param:"transparent",style:"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);"},r.push(e),r}o.extend(!0,o.trumbowyg,{langs:{cs:{foreColor:"Barva textu",backColor:"Barva pozadí"},en:{foreColor:"Text color",backColor:"Background color"},fr:{foreColor:"Couleur du texte",backColor:"Couleur de fond"},sk:{foreColor:"Farba textu",backColor:"Farba pozadia"}}}),o.extend(!0,o.trumbowyg,{opts:{btnsDef:{}}}),o.trumbowyg.opts.colors||(o.trumbowyg.opts.colors=["ffffff","000000","eeece1","1f497d","4f81bd","c0504d","9bbb59","8064a2","4bacc6","f79646","ffff00","f2f2f2","7f7f7f","ddd9c3","c6d9f0","dbe5f1","f2dcdb","ebf1dd","e5e0ec","dbeef3","fdeada","fff2ca","d8d8d8","595959","c4bd97","8db3e2","b8cce4","e5b9b7","d7e3bc","ccc1d9","b7dde8","fbd5b5","ffe694","bfbfbf","3f3f3f","938953","548dd4","95b3d7","d99694","c3d69b","b2a2c7","b7dde8","fac08f","f2c314","a5a5a5","262626","494429","17365d","366092","953734","76923c","5f497a","92cddc","e36c09","c09100","7f7f7f","0c0c0c","1d1b10","0f243e","244061","632423","4f6128","3f3151","31859b","974806","7f6000"]),o.extend(!0,o.trumbowyg,{opts:{btnsDef:{foreColor:{dropdown:f("foreColor")},backColor:{dropdown:f("backColor")}}}})}(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-black-2x.png b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-black-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1be27fb154ba04d8bf422e113bd178fcbe1d1ddf GIT binary patch literal 1304 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQcRvMjv*C{Z=~ujF)*-P1o7S; zH1vr6$$a2re*N@^j+Q$9R+=%2?=N1Q;j~%Brn!kR^U_io!^5nZ?Q8PPuP&}WR=oFa zgIZ9M!|XpB_MAPU7whvtw&dlf$5tYn@BHjP-2dM>=X_k;8{zxUi=V%F)8kRWp|nt` zqoqqhNUO%Z@-qcRYDUafAVROL|bFpZL?{qg@^y#dHprOYhkIC?3AFs zDW4RD6=qDBI#pCpORW2j!PK>Db@j5$X7_~5U^vKPQ}v}|=1fUFujQBThyu=t^?R@%a(UHf6Tf$Z!^_bbf$u#ZsQv)96 zv!$^>OJ?QXj+o|p;xELtOM^7U#KkXK&E@mbbocr>fq|20+onxTK)W+dr1sSQ7Tce+ z(c?tuwr$%k_*_<*=uuPk=Z9h4*|f@wO8)>t+!@}9}4Ks^%D*Y zI@RvAa%bN5ZlJXiH#g?~o}4)=V{26JL?fV<6%jg*p6}9&T7TUc9PBP0p|j4a)vXNa znkbu~KK=AU&7}pg>vMy=79M?E`0A^bvi{B^ z@80QUXJ@lsHj!tLOYRb!kYm<8KXaA{7wbN?`R9YzhH*|TT7C6UzJWx*+OVIq4j*>r zYITylk>JzB5HYPa_jb){A2sI)4^4TkrE~n2AKt#|`sq#$Kofj@ifPhzNz5K1DOD_MS^HcyI@ZfBg8d+(qf5$c;oE zL#7EnY9DXkx%1@3i;mMZ|NhLpdNp**(xs|Ezbk(D^56l(esTRc18eKw($jZTe}8v6 ze0|))x9{Ii_E0%>fG@eja9NFAKQN5FH2eDceoSg^W)2GvzxeFgvkf}kb^FhkfB6Ek z>|jEJSpV^vbLalOTsVhUZ$glrhuUQQk2mk$P0h_+n=tDc^MS|qLOq$8nVkFcwx7QK z<#+A9z18jUcJrTGYrlX0{_*x5J5HS7n_eJu+}L;Xzb7Y!|M2niOKKXoNhE)=;XnWR z0?@ht)2gebflRx)KPSq|a&DI;*4E1EPCjX{>E!fWF}IxCZoBLM+bPR|9G$iG)b_0H zx3}ERbxPSBpiyv8zCnHI6Yi*Ox#_vL;~xCCdBA^6K)L9h@`i)kUo*%usqEM#zoX8+ z;PjClR;+)R=M>t$W2i4YeaF(;T3JXAOBsSFUHX1^@s6b5wmq00002NklG?R$4f?LH+5o#cVgGeW#LInrC!H<|k)aW_qZ4TF=NYwZNg*=Z?N>Kx)0|Nut zMn*;`Dk{P-3_h8@w6ugR7K@RklPAe5gbgpnqNFapZlZ@Bb z*L$Rt*viYx(KIapw2=qND@@ZwDaFLZ1h)PCeQcwnqomVmlu~>WJr;{$OQllSB9RDL zVe%k(MLM0Pt*wpz{(eqRPgz)4z%)%lp%9IYjojSa@Cn>f$}x|}gRQ!{8e2FVCQBy| zk{1XexV*e%U|;~-_VzYgTU+e!?^9Y@N+1y6;^G1!1RwNkFc`!ZjYcsH zw*t_4h2#a9OoqzJNcWF z4h|03*w~4xCOWrfHH@ z$=fZu-EJN&0)O(uA15a#zqsA*FmMGd@&b+A{sF#NmX&#Uct9zI)9FMhg-t0%ad9!3 zOa{xc5JHgU1ite|N~twqjoj9NHS!>oQWOG7fshmkNr8|Qh<^cULosh!aB4090000< KMNUMnLSTZ_xTX^T literal 0 HcmV?d00001 diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-white-2x.png b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/images/icons-white-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4518d2267d3111144275188f9b4c9a1107225ed7 GIT binary patch literal 1317 zcmV+=1={+FP)DSM`JbOv43DO7Y7^nsNnCOtb|{5_eOp1O;&PV2J>ZnZ z$wIrR&nXzlpzsQXhC7IJo@t2}2Rj5x2jLQ2B!hj+k+-~5A+50|IWHalyhEwpdUI0$ zrRVdpf*>Gf4n@o;ikMLpF{3DAMp49!qKFwq5i^P+W)wxtD8ey)`SN8ONCE*T!vc0j zMn)z%Lxkh|EASUimg0<29AB4{*X4{+#Ec@uuq=x|@J}EQd<2$(CB7jD0{$#vh@L%r z#+^HNuq=zupFd+V-}gC+h|FHRcrpL!(Z}5Ge!#vO9v=EW$bLY zrOzc|iio+cOArKTuIn-}F@e_UbnrY6!#Sx`3K2mol}hCEd9+L>gKgW_MdS(*QbcTR zZ4J$`EDD7Jj~+cDESt?@xct`E7Mkz-v|6o?l}d#$$8qS(6Cp)}JkP`TeY9jU$$?xh zhhAOWlgorqfLl6XLN+~j#3}4f3xA8oWR4RojM8r*})1xAS)^4}S zX0!A?;0W{c^Vqh1v)k=X0^1Boh)AtgBdpi!@$TI_zGZH1jz*(_LELJ!N?0P1U}Iy0 zZ<(2ypSdc7W+Qi`dmDZb|U^XFW?d>O6XZsU0#sZ@#|=+@ZS z*iVT>0S2L!Zk4gaKW;bcwK+FJJOU zo;-QNy~r5+|6s(uA#ku|DL{W1|STm(P;3! za=9G2Tn>XQ*Xwl-`4!j}5x(NL-QC^4*X#9J{%;%jl>rDbf*|-0@R0Af0c;Q<#qrsk zJexB{IKKY^Js{v@SilZvjBrdNBO{ZX1^@s6b5wmq00002Nkl6D<84HS^)Q7jS+G!+6^s{1V-aKuGp0-<0UKc~ zB)vuc1QD!K3n^V0Py{iJ*jPmDBx1mz5)bMOitNYCd2 zX#xV^SXCW0GTiTiJFK-_U0spS=ZT^SV+{AW;2A`uX>xM%`<L*@ zcz8Gm1k}h-1JCo=+uOrAN8;k*g7fopJkR5$h)8B>Y3bWkD%C|SlgYfBnVESjBF)sm z@B|SdF*Y_vqP4Y^L_VKKM0i2L=;&yUj}!`p2_Q=i3{Nn|aC39R+1VM^T24+*NNjI! zQ>j!i#_(JsVuyx?UT3q}Z-|x4E9rC^Rb_2$ z4bSs<0onQa`R|C8%jJV~I{ibrTt2YYwiJuSaS;i4g5eP&LKH-6;W zm#(g^uM363#Ny)OHt+`zFg!p+aL!S!R!OB&tgfz-h@yzZ=H@1ijg4GiUsI`6c!s97 zwzeP)!`?2Bc?D#F3UI8d=R81EmAjmC`#=DEFvgIG zqKJ=)2qJ>2qN>Cifm7f2d-wt@_waqchyNKvoiNl1L!B_xiGKk7Mj)0VsMaq40000< KMNUMnLSTXxP?wni literal 0 HcmV?d00001 diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black-2x.scss b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black-2x.scss new file mode 100644 index 00000000..402ddfd5 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black-2x.scss @@ -0,0 +1,18 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Colors plugin stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$backcolor-black-2x: 0px 0px; +$forecolor-black-2x: -50px 0px; + + +$sprite-height-black-2x: 50px; +$sprite-width-black-2x: 100px; +$icons-black-2x: "./images/icons-black-2x.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black.scss b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black.scss new file mode 100644 index 00000000..2d84ca03 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-black.scss @@ -0,0 +1,18 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Colors plugin stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$backcolor-black: 0px 0px; +$forecolor-black: -25px 0px; + + +$sprite-height-black: 25px; +$sprite-width-black: 50px; +$icons-black: "./images/icons-black.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white-2x.scss b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white-2x.scss new file mode 100644 index 00000000..f90169ad --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white-2x.scss @@ -0,0 +1,18 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Colors plugin stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$backcolor-white-2x: 0px 0px; +$forecolor-white-2x: -50px 0px; + + +$sprite-height-white-2x: 50px; +$sprite-width-white-2x: 100px; +$icons-white-2x: "./images/icons-white-2x.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white.scss b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white.scss new file mode 100644 index 00000000..b7e8f8c1 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/_sprite-white.scss @@ -0,0 +1,18 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Colors plugin stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$backcolor-white: 0px 0px; +$forecolor-white: -25px 0px; + + +$sprite-height-white: 25px; +$sprite-width-white: 50px; +$icons-white: "./images/icons-white.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss new file mode 100644 index 00000000..4f353fc3 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss @@ -0,0 +1,105 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Colors plugin stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +@import "sprite-black"; +@import "sprite-black-2x"; +@import "sprite-white"; +@import "sprite-white-2x"; + +@import "sprite-pos"; + +.foreColor-trumbowyg-dropdown, +.backColor-trumbowyg-dropdown { + width: 276px; + padding: 7px 5px; + + button { + display: block; + position: relative; + float: left; + text-indent: -9999px; + height: 20px; + width: 20px; + border: 1px solid #333; + padding: 0; + margin: 2px; + + &:hover, + &:focus { + &::after { + content: " "; + display: block; + height: 27px; + width: 27px; + background: inherit; + position: absolute; + top: -5px; + left: -5px; + border: 1px solid #FFF; + box-shadow: #000 0 0 2px; + z-index: 10; + } + } + } +} + + + +/* + * Buttons icons + */ +.trumbowyg-button-pane li button { + &.trumbowyg-foreColor-button, + &.trumbowyg-backColor-button { + background-image: url($icons-black); + } + + &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-black); } + &.trumbowyg-backColor-button { @include sprite-pos($backcolor-black); } +} + +.trumbowyg-black { + .trumbowyg-button-pane li button { + &.trumbowyg-foreColor-button, + &.trumbowyg-backColor-button { + background-image: url($icons-white); + } + + &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-white); } + &.trumbowyg-backColor-button { @include sprite-pos($backcolor-white); } + } +} + + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 4/3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){ + .trumbowyg-button-pane li button { + &.trumbowyg-foreColor-button, + &.trumbowyg-backColor-button { + background-image: url($icons-black-2x) !important; + background-size: round($sprite-width-black-2x / 2) round($sprite-height-black-2x / 2) !important; + } + + &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-black-2x, true); } + &.trumbowyg-backColor-button { @include sprite-pos($backcolor-black-2x, true); } + } + + .trumbowyg-black { + .trumbowyg-button-pane li button { + &.trumbowyg-foreColor-button, + &.trumbowyg-backColor-button { + background-image: url($icons-white-2x) !important; + } + + &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-white-2x, true); } + &.trumbowyg-backColor-button { @include sprite-pos($backcolor-white-2x, true); } + } + } +} \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.css b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.css new file mode 100644 index 00000000..72561baf --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.css @@ -0,0 +1,76 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Colors plugin stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.foreColor-trumbowyg-dropdown, +.backColor-trumbowyg-dropdown { + width: 276px; + padding: 7px 5px; } + .foreColor-trumbowyg-dropdown button, + .backColor-trumbowyg-dropdown button { + display: block; + position: relative; + float: left; + text-indent: -9999px; + height: 20px; + width: 20px; + border: 1px solid #333; + padding: 0; + margin: 2px; } + .foreColor-trumbowyg-dropdown button:hover::after, .foreColor-trumbowyg-dropdown button:focus::after, + .backColor-trumbowyg-dropdown button:hover::after, + .backColor-trumbowyg-dropdown button:focus::after { + content: " "; + display: block; + height: 27px; + width: 27px; + background: inherit; + position: absolute; + top: -5px; + left: -5px; + border: 1px solid #FFF; + box-shadow: #000 0 0 2px; + z-index: 10; } + +/* + * Buttons icons + */ +.trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-image: url("./images/icons-black.png"); } + +.trumbowyg-button-pane li button.trumbowyg-foreColor-button { + background-position: -20px 5px; } + +.trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-position: 5px 5px; } + +.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-image: url("./images/icons-white.png"); } + +.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button { + background-position: -20px 5px; } + +.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-position: 5px 5px; } + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { + .trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-image: url("./images/icons-black-2x.png") !important; + background-size: 50px 25px !important; } + .trumbowyg-button-pane li button.trumbowyg-foreColor-button { + background-position: -20px 5px; } + .trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-position: 5px 5px; } + .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-image: url("./images/icons-white-2x.png") !important; } + .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button { + background-position: -20px 5px; } + .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button { + background-position: 5px 5px; } } diff --git a/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css new file mode 100644 index 00000000..6ccc2889 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.backColor-trumbowyg-dropdown,.foreColor-trumbowyg-dropdown{width:276px;padding:7px 5px}.backColor-trumbowyg-dropdown button,.foreColor-trumbowyg-dropdown button{display:block;position:relative;float:left;text-indent:-9999px;height:20px;width:20px;border:1px solid #333;padding:0;margin:2px}.backColor-trumbowyg-dropdown button:focus::after,.backColor-trumbowyg-dropdown button:hover::after,.foreColor-trumbowyg-dropdown button:focus::after,.foreColor-trumbowyg-dropdown button:hover::after{content:" ";display:block;height:27px;width:27px;background:inherit;position:absolute;top:-5px;left:-5px;border:1px solid #FFF;box-shadow:#000 0 0 2px;z-index:10}.trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(images/icons-black.png)}.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:-20px 5px}.trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(images/icons-white.png)}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:-20px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}@media only screen and (-webkit-min-device-pixel-ratio:1.3),only screen and (min--moz-device-pixel-ratio:1.3),only screen and (min-device-pixel-ratio:1.3),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(images/icons-black-2x.png)!important;background-size:50px 25px!important}.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:-20px 5px}.trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(images/icons-white-2x.png)!important}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:-20px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}} \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.js b/resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.js new file mode 100644 index 00000000..ded1de95 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.js @@ -0,0 +1,112 @@ +/* =========================================================== + * trumbowyg.editlink.js v1.0 + * Link editation plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Rastislav Švarba (ra100) + * Twitter : @ra100 + * Website : ra100.net + */ + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + en: { + editLink: 'Edit Link' + }, + fr: { + editLink: 'Editer un lien' + }, + cs: { + editLink: 'Upravit odkaz' + }, + sk: { + editLink: 'Upraviť odkaz' + } + }, + opts: { + btnsDef: { + editLink: { + func: function (params, tbw) { + var t = tbw, + url = '', + title = '', + target = '_blank', + node = '', + edit = false; + + var sel = t.doc.getSelection(); + var range = new Range(); + if (sel.type === 'Caret') { //if range is not selected, select whole element + range.selectNode(sel.baseNode); + sel.addRange(range); + t.saveSelection(); + node = t.selection.commonAncestorContainer; + } else { + if ((sel.anchorOffset + sel.focusOffset) === sel.focusNode.length) { //if selection is large as whole + range.selectNode(sel.focusNode); + sel.addRange(range); + t.saveSelection(); + node = t.selection.commonAncestorContainer; + } else { + t.saveSelection(); + node = t.selection.commonAncestorContainer.parentNode; + } + } + + if (node !== '' && $(node).prop('tagName') === 'A') { + var $a = $(node); + url = $a.attr('href'); + title = ($a.attr('title') !== undefined) ? $a.attr('title') : $a.text(); + target = ($a.attr('target') !== undefined) ? $a.attr('target') : target; + edit = true; + } + + t.openModalInsert(t.lang.editLink, { + url: { + label: 'URL', + required: true, + value: url + }, + title: { + label: t.lang.title, + value: title + }, + text: { + label: t.lang.text, + value: t.getSelectedText() + }, + target: { + label: t.lang.target, + value: target + } + }, function (v) { // v is value + t.execCmd('createLink', v.url); + if (!edit) return true; + var l = $('a[href="' + v.url + '"]:not([title])', t.$box); + if (v.text.length > 0) { + l.text(v.text); + } + if (v.title.length > 0) { + l.attr('title', v.title); + } else { + l.removeAttr('title'); + } + if (v.target.length > 0) { + l.attr('target', v.target); + } else { + l.removeAttr('target'); + } + return true; + }); + } + }, + link: { + dropdown: ['createLink', 'editLink', 'unlink'] + } + } + } + }); +})(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.min.js b/resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.min.js new file mode 100644 index 00000000..94ecee0f --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/editlink/trumbowyg.editlink.min.js @@ -0,0 +1 @@ +!function(e){"use strict";e.extend(!0,e.trumbowyg,{langs:{en:{editLink:"Edit Link"},fr:{editLink:"Editer un lien"},cs:{editLink:"Upravit odkaz"},sk:{editLink:"Upraviť odkaz"}},opts:{btnsDef:{editLink:{func:function(t,n){var a=n,r="",i="",l="_blank",o="",d=!1,c=a.doc.getSelection(),s=new Range;if("Caret"===c.type?(s.selectNode(c.baseNode),c.addRange(s),a.saveSelection(),o=a.selection.commonAncestorContainer):c.anchorOffset+c.focusOffset===c.focusNode.length?(s.selectNode(c.focusNode),c.addRange(s),a.saveSelection(),o=a.selection.commonAncestorContainer):(a.saveSelection(),o=a.selection.commonAncestorContainer.parentNode),""!==o&&"A"===e(o).prop("tagName")){var g=e(o);r=g.attr("href"),i=void 0!==g.attr("title")?g.attr("title"):g.text(),l=void 0!==g.attr("target")?g.attr("target"):l,d=!0}a.openModalInsert(a.lang.editLink,{url:{label:"URL",required:!0,value:r},title:{label:a.lang.title,value:i},text:{label:a.lang.text,value:a.getSelectedText()},target:{label:a.lang.target,value:l}},function(t){if(a.execCmd("createLink",t.url),!d)return!0;var n=e('a[href="'+t.url+'"]:not([title])',a.$box);return t.text.length>0&&n.text(t.text),t.title.length>0?n.attr("title",t.title):n.removeAttr("title"),t.target.length>0?n.attr("target",t.target):n.removeAttr("target"),!0})}},link:{dropdown:["createLink","editLink","unlink"]}}}})}(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js new file mode 100755 index 00000000..64555477 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js @@ -0,0 +1,106 @@ +/* =========================================================== + * trumbowyg.preformatted.js v1.0 + * Preformatted plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Casella Edoardo (Civile) + */ + + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + en: { + preformatted: 'Code sample
'
+            },
+            fr: {
+                preformatted: 'Exemple de code'
+            },
+            it: {
+                preformatted: 'Codice 
'
+            }
+        },
+        opts: {
+            btnsDef: {
+                preformatted: {
+                    func: function (params, tbw) {
+                        var text = String(tbw.doc.getSelection());
+                        if (text.replace(/\s/g, '') !== '') {
+                            try {
+                                var curtag = getSelectionParentElement().tagName.toLowerCase();
+                                if (curtag == 'code' || curtag == 'pre') {
+                                    return unwrapCode();
+                                }
+                                else {
+                                    tbw.execCmd('insertHTML', '
' + strip(text) + '
'); + } + } catch (e) { + } + } + }, + ico: 'insertCode' + } + } + }, + }); + + /* + * GetSelectionParentElement + */ + function getSelectionParentElement() { + var parentEl = null, + sel; + if (window.getSelection) { + sel = window.getSelection(); + if (sel.rangeCount) { + parentEl = sel.getRangeAt(0).commonAncestorContainer; + if (parentEl.nodeType != 1) { + parentEl = parentEl.parentNode; + } + } + } else if ((sel = document.selection) && sel.type != 'Control') { + parentEl = sel.createRange().parentElement(); + } + return parentEl; + } + + /* + * Strip + * returns a text without HTML tags + */ + function strip(html) { + var tmp = document.createElement('DIV'); + tmp.innerHTML = html; + return tmp.textContent || tmp.innerText || ''; + } + + /* + * UnwrapCode + * ADD/FIX: to improve, works but can be better + * "paranoic" solution + */ + function unwrapCode() { + var container = null; + if (document.selection) //for IE + container = document.selection.createRange().parentElement(); + else { + var select = window.getSelection(); + if (select.rangeCount > 0) + container = select.getRangeAt(0).startContainer.parentNode; + } + //'paranoic' unwrap + var ispre = $(container).contents().closest('pre').length; + var iscode = $(container).contents().closest('code').length; + if (ispre && iscode) { + $(container).contents().unwrap('code').unwrap('pre'); + } else if (ispre) { + $(container).contents().unwrap('pre'); + } else if (iscode) { + $(container).contents().unwrap('code'); + } + } + + +})(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js new file mode 100755 index 00000000..a419fa93 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js @@ -0,0 +1 @@ +!function(e){"use strict";function t(){var e,t=null;return window.getSelection?(e=window.getSelection(),e.rangeCount&&(t=e.getRangeAt(0).commonAncestorContainer,1!=t.nodeType&&(t=t.parentNode))):(e=document.selection)&&"Control"!=e.type&&(t=e.createRange().parentElement()),t}function n(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}function o(){var t=null;if(document.selection)t=document.selection.createRange().parentElement();else{var n=window.getSelection();n.rangeCount>0&&(t=n.getRangeAt(0).startContainer.parentNode)}var o=e(t).contents().closest("pre").length,r=e(t).contents().closest("code").length;o&&r?e(t).contents().unwrap("code").unwrap("pre"):o?e(t).contents().unwrap("pre"):r&&e(t).contents().unwrap("code")}e.extend(!0,e.trumbowyg,{langs:{en:{preformatted:"Code sample
"},fr:{preformatted:"Exemple de code"},it:{preformatted:"Codice 
"}},opts:{btnsDef:{preformatted:{func:function(e,r){var c=String(r.doc.getSelection());if(""!==c.replace(/\s/g,""))try{var a=t().tagName.toLowerCase();if("code"==a||"pre"==a)return o();r.execCmd("insertHTML","
"+n(c)+"
")}catch(i){}},ico:"insertCode"}}}})}(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-black-2x.png b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-black-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..78a6e729eae0e7366913e0c18d1b6c449fae6c96 GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-CQlc~kP5~(QgxRY7#I(NcyA9H zdWQxwFg$oa?|X%3)`ZmNK;1Ow-B+*OD9+&Gk(zZc&GF&`A(L%syO#L!dU`uQ_^kgz z!%t5)RfNNd&#{%ae8=MJ#d<>R-)q^}*!*H1X0*0#HF<1zFG*7WN^yszOhWXcZ6&pL z1k?BN^ReJ4g;+H=_Q&moO#SGKoJpW!Y&IYLC! z!+7ZyrF)w$O<{2~{&wW{<%R{4tre|oEHgQb1XGkwxJ>9&5O!2+@?kmqL-(FMFUO<1 z0Y4S*l~2u_*i_*kVs_+qK&4iY!1C_MrLj4k+gtO!Hoxe)5OiNN=6La*pkF<=Z%lut z{O*yCT!KvehW`Co9Ivtyd7g*587SQ~XbU}N*tTsJSK+RR;9EysGxsGqWwO;C7di4W z*)x-A@*`g$pR-o5se)U}{OInbn-qcs^4*_qs+b;9=E61WqTu?)j9{0cIMtZ%sPz?~ zCl)`Nd$B>`?6M&LJ@YOtW6{mzE8v$s^O(zS<#S%U2PRxLhqrk+&I(<#_<%swtJjGf ztk*VbIY#f&d-j1NxG$Z3{l*veAr?`I2?-Be{xWZ#?5g`>rsXtX)G~Ow`njxgN@xNA D;d$6o literal 0 HcmV?d00001 diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-black.png b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-black.png new file mode 100644 index 0000000000000000000000000000000000000000..6269bbc8914859fb7b0ad449420cd8b6fed7cb68 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIOr9=|Ar*{or0OmKc{f44rw2D? zIt7X_T=<-))vC{UFiJ*ouJBEjwY^T4cC_$45je?YCdRd>SHE>?!n#QZ@{9WF7cXdD zd3)K51s*Li&CK`iersfw>QvtuzUP7D(XCCa_X-Z&;&)niaC-NvsM3#}Zc2B;pLAI} zaRcGHDxawwJMH|6)W4`YJs}~?=V$&PKZv@F+Uch z^rY;?snU&;Id(oWbXD4-utnic_|sL^PI=uEyB|dr8XgK$dJ-n_pyO54Q9b@?P)6(47y#hseS6V>+JaOEOA7_D{~&FlTNmRW(8Vz>F@yah0Wl7? zOX-mO0&j*6u4Z&IOSei3E)Lq#!du}8cl6}@4pI*Hd91CieOOf$-lM9*#KHus>K5){ zGu|>ny@g}!MZ}>_sZ&)gaez&yw~2$QTI!TKRMlNvN8uIrjrS0*P`F-IcXe3kvup5I zM10~DB4P(SRrLlN*u?{lQlD!EKWX=)!8IMyG+t`=(ge~pLc1`5G!tni(oCe8NHdXU zBF#jai8PIWwENctQlqN++RC5W{o$Re+SDkuyJzL8c2BMRpiyd2Ra>}e@Owl&(Ms_LpnRdp3t4E7^p zsX=OY-^w@IeQV{uMyXLmoLKonyU)E75hog@X`IpSj0vQfNHdXUBF#jai8K>wCelo# zX_R(l0%;l-wENfuQlDdkZSA%Vj&)e*vxfs*sH!*kB_i$^p{gF?HqILC>5w`^#37Cl z*ub{&wy}Z0QA8Z-kUB-g7Itys^iHrF5nKLmsw%ukRfV;+wGZk)&{l_$cPkN400000 LNkvXXu0mjfkf{bY literal 0 HcmV?d00001 diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-white.png b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/images/icons-white.png new file mode 100644 index 0000000000000000000000000000000000000000..093306b6b46065a5e0174fbf3a93692de52a90cc GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIOr9=|Ar*{or0Om)Ffa;(cxMl8 z%$l4i!FJ(u-4YQVrCqyUy;>3;YW4C-fQ!b9X}dRdC+i>3UXill><5X=miZF*IS%=s z|Cpds=ppn!Y2m~r1x@8YUiiPCTytpIsz>^5_k_0ZD7e9zxABTZRr-#Vt6V1;OgyI)CHl1Y79BBYPGmdG1Jq^z1*GMhieVv8T;F2*s5h1;y>nJT%0}Y%FOeMz`$bgboFyt=akR{02$nzp8x;= literal 0 HcmV?d00001 diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black-2x.scss b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black-2x.scss new file mode 100644 index 00000000..af37eef7 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black-2x.scss @@ -0,0 +1,17 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Preformatted text supplier + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$preformatted-black-2x: 0px 0px; + + +$sprite-height-black-2x: 50px; +$sprite-width-black-2x: 50px; +$icons-black-2x: "./images/icons-black-2x.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black.scss b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black.scss new file mode 100644 index 00000000..361fa886 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-black.scss @@ -0,0 +1,17 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Preformatted text supplier + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$preformatted-black: 0px 0px; + + +$sprite-height-black: 25px; +$sprite-width-black: 25px; +$icons-black: "./images/icons-black.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white-2x.scss b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white-2x.scss new file mode 100644 index 00000000..49f3f604 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white-2x.scss @@ -0,0 +1,17 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Preformatted text supplier + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$preformatted-white-2x: 0px 0px; + + +$sprite-height-white-2x: 50px; +$sprite-width-white-2x: 50px; +$icons-white-2x: "./images/icons-white-2x.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white.scss b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white.scss new file mode 100644 index 00000000..3821dacd --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/_sprite-white.scss @@ -0,0 +1,17 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Preformatted text supplier + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$preformatted-white: 0px 0px; + + +$sprite-height-white: 25px; +$sprite-width-white: 25px; +$icons-white: "./images/icons-white.png"; \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/trumbowyg.preformatted.scss b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/trumbowyg.preformatted.scss new file mode 100755 index 00000000..f57ab5ef --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/sass/trumbowyg.preformatted.scss @@ -0,0 +1,56 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Preformatted text supplier + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +@import "sprite-black"; +@import "sprite-black-2x"; +@import "sprite-white"; +@import "sprite-white-2x"; + +@import "sprite-pos"; + +/* + * Buttons icons + */ +.trumbowyg-button-pane li button { + &.trumbowyg-preformatted-button { + background-image: url($icons-black); + } + &.trumbowyg-preformatted-button { @include sprite-pos($preformatted-black); } +} + +.trumbowyg-black { + .trumbowyg-button-pane li button { + &.trumbowyg-preformatted-button { + background-image: url($icons-white); + } + &.trumbowyg-preformatted-button { @include sprite-pos($preformatted-white); } + } +} + + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 4/3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){ + .trumbowyg-button-pane li button { + &.trumbowyg-preformatted-button { + background-image: url($icons-black-2x) !important; + background-size: round($sprite-width-black-2x / 2) round($sprite-height-black-2x / 2) !important; + } + &.trumbowyg-preformatted-button { @include sprite-pos($preformatted-black-2x, true); } + } + + .trumbowyg-black { + .trumbowyg-button-pane li button { + &.trumbowyg-preformatted-button { + background-image: url($icons-white-2x) !important; + } + &.trumbowyg-preformatted-button { @include sprite-pos($preformatted-white-2x, true); } + } + } +} \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.css b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.css new file mode 100755 index 00000000..2aac95c2 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.css @@ -0,0 +1,36 @@ +/** + * Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor + * Preformatted text supplier + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +/* + * Buttons icons + */ +.trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-image: url("./images/icons-black.png"); } + +.trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-position: 5px 5px; } + +.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-image: url("./images/icons-white.png"); } + +.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-position: 5px 5px; } + +@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { + .trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-image: url("./images/icons-black-2x.png") !important; + background-size: 25px 25px !important; } + .trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-position: 5px 5px; } + .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-image: url("./images/icons-white-2x.png") !important; } + .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-preformatted-button { + background-position: 5px 5px; } } diff --git a/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.min.css b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.min.css new file mode 100755 index 00000000..833e5caf --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/preformatted/ui/trumbowyg.preformatted.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.0.0-beta.7 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.trumbowyg-button-pane li button.trumbowyg-preformatted-button{background-image:url(images/icons-black.png);background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-preformatted-button{background-image:url(images/icons-white.png);background-position:5px 5px}@media only screen and (-webkit-min-device-pixel-ratio:1.3),only screen and (min--moz-device-pixel-ratio:1.3),only screen and (min-device-pixel-ratio:1.3),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.trumbowyg-button-pane li button.trumbowyg-preformatted-button{background-image:url(images/icons-black-2x.png)!important;background-size:25px 25px!important;background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-preformatted-button{background-image:url(images/icons-white-2x.png)!important;background-position:5px 5px}} \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.js b/resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.js new file mode 100644 index 00000000..77284982 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.js @@ -0,0 +1,187 @@ +/* =========================================================== + * trumbowyg.upload.js v1.1 + * Upload plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +(function ($) { + 'use strict'; + + function getDeep(object, propertyParts) { + var mainProperty = propertyParts.shift(), + otherProperties = propertyParts; + + if (object !== null) { + if (otherProperties.length === 0) { + return object[mainProperty]; + } + + if (typeof object === 'object') { + return getDeep(object[mainProperty], otherProperties); + } + } + return object; + } + + addXhrProgressEvent(); + + $.extend(true, $.trumbowyg, { + langs: { + en: { + upload: 'Upload', + file: 'File', + uploadError: 'Error' + }, + sk: { + upload: 'Nahrať', + file: 'Súbor', + uploadError: 'Chyba' + }, + fr: { + upload: 'Envoi', + file: 'Fichier', + uploadError: 'Erreur' + }, + cs: { + upload: 'Nahrát obrázek', + file: 'Soubor', + uploadError: 'Chyba' + } + }, + + upload: { + serverPath: './src/plugins/upload/trumbowyg.upload.php', + fileFieldName: 'fileToUpload', + data: [], + headers: {}, + urlPropertyName: 'file', + statusPropertyName: 'success', + success: undefined, + error: undefined + }, + + opts: { + btnsDef: { + upload: { + func: function (params, tbw) { + var file, + prefix = tbw.o.prefix; + + var $modal = tbw.openModalInsert( + // Title + tbw.lang.upload, + + // Fields + { + file: { + type: 'file', + required: true + }, + alt: { + label: 'description' + } + }, + + // Callback + function (values) { + var data = new FormData(); + data.append($.trumbowyg.upload.fileFieldName, file); + + $.trumbowyg.upload.data.map(function (cur) { + data.append(cur.name, cur.value); + }); + + if ($('.' + prefix + 'progress', $modal).length === 0) { + $('.' + prefix + 'modal-title', $modal) + .after( + $('
', { + 'class': prefix + 'progress' + }).append( + $('
', { + 'class': prefix + 'progress-bar' + }) + ) + ); + } + + $.ajax({ + url: $.trumbowyg.upload.serverPath, + headers: $.trumbowyg.upload.headers, + type: 'POST', + data: data, + cache: false, + dataType: 'json', + processData: false, + contentType: false, + + progressUpload: function (e) { + $('.' + prefix + 'progress-bar').stop().animate({ + width: Math.round(e.loaded * 100 / e.total) + '%' + }, 200); + }, + + success: $.trumbowyg.upload.success || function (data) { + if (!!getDeep(data, $.trumbowyg.upload.statusPropertyName.split('.'))) { + var url = getDeep(data, $.trumbowyg.upload.urlPropertyName.split('.')); + tbw.execCmd('insertImage', url); + $('img[src="' + url + '"]:not([alt])', tbw.$box).attr('alt', values.alt); + setTimeout(function () { + tbw.closeModal(); + }, 250); + } else { + tbw.addErrorOnModalField( + $('input[type=file]', $modal), + tbw.lang[data.message] + ); + } + }, + error: $.trumbowyg.upload.error || function () { + tbw.addErrorOnModalField( + $('input[type=file]', $modal), + tbw.lang.uploadError + ); + } + }); + } + ); + + $('input[type=file]').on('change', function (e) { + try { + // If multiple files allowed, we just get the first. + file = e.target.files[0]; + } catch (err) { + // In IE8, multiple files not allowed + file = e.target.value; + } + }); + }, + ico: 'insertImage' + } + } + } + }); + + + function addXhrProgressEvent() { + if (!$.trumbowyg && !$.trumbowyg.addedXhrProgressEvent) { // Avoid adding progress event multiple times + var originalXhr = $.ajaxSettings.xhr; + $.ajaxSetup({ + xhr: function () { + var req = originalXhr(), + that = this; + if (req && typeof req.upload == 'object' && that.progressUpload !== undefined) + req.upload.addEventListener('progress', function (e) { + that.progressUpload(e); + }, false); + + return req; + } + }); + $.trumbowyg.addedXhrProgressEvent = true; + } + } +})(jQuery); diff --git a/resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.min.js b/resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.min.js new file mode 100644 index 00000000..43c401b7 --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/plugins/upload/trumbowyg.upload.min.js @@ -0,0 +1 @@ +!function(r){"use strict";function e(r,a){var o=a.shift(),t=a;if(null!==r){if(0===t.length)return r[o];if("object"==typeof r)return e(r[o],t)}return r}function a(){if(!r.trumbowyg&&!r.trumbowyg.addedXhrProgressEvent){var e=r.ajaxSettings.xhr;r.ajaxSetup({xhr:function(){var r=e(),a=this;return r&&"object"==typeof r.upload&&void 0!==a.progressUpload&&r.upload.addEventListener("progress",function(r){a.progressUpload(r)},!1),r}}),r.trumbowyg.addedXhrProgressEvent=!0}}a(),r.extend(!0,r.trumbowyg,{langs:{en:{upload:"Upload",file:"File",uploadError:"Error"},sk:{upload:"Nahrať",file:"Súbor",uploadError:"Chyba"},fr:{upload:"Envoi",file:"Fichier",uploadError:"Erreur"},cs:{upload:"Nahrát obrázek",file:"Soubor",uploadError:"Chyba"}},upload:{serverPath:"./src/plugins/upload/trumbowyg.upload.php",fileFieldName:"fileToUpload",data:[],headers:{},urlPropertyName:"file",statusPropertyName:"success",success:void 0,error:void 0},opts:{btnsDef:{upload:{func:function(a,o){var t,l=o.o.prefix,u=o.openModalInsert(o.lang.upload,{file:{type:"file",required:!0},alt:{label:"description"}},function(a){var s=new FormData;s.append(r.trumbowyg.upload.fileFieldName,t),r.trumbowyg.upload.data.map(function(r){s.append(r.name,r.value)}),0===r("."+l+"progress",u).length&&r("."+l+"modal-title",u).after(r("
",{"class":l+"progress"}).append(r("
",{"class":l+"progress-bar"}))),r.ajax({url:r.trumbowyg.upload.serverPath,headers:r.trumbowyg.upload.headers,type:"POST",data:s,cache:!1,dataType:"json",processData:!1,contentType:!1,progressUpload:function(e){r("."+l+"progress-bar").stop().animate({width:Math.round(100*e.loaded/e.total)+"%"},200)},success:r.trumbowyg.upload.success||function(t){if(e(t,r.trumbowyg.upload.statusPropertyName.split("."))){var l=e(t,r.trumbowyg.upload.urlPropertyName.split("."));o.execCmd("insertImage",l),r('img[src="'+l+'"]:not([alt])',o.$box).attr("alt",a.alt),setTimeout(function(){o.closeModal()},250)}else o.addErrorOnModalField(r("input[type=file]",u),o.lang[t.message])},error:r.trumbowyg.upload.error||function(){o.addErrorOnModalField(r("input[type=file]",u),o.lang.uploadError)}})});r("input[type=file]").on("change",function(r){try{t=r.target.files[0]}catch(e){t=r.target.value}})},ico:"insertImage"}}}})}(jQuery); \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/trumbowyg.js b/resources/assets/js/vendor/trumbowyg/trumbowyg.js new file mode 100644 index 00000000..cc54346c --- /dev/null +++ b/resources/assets/js/vendor/trumbowyg/trumbowyg.js @@ -0,0 +1,1213 @@ +/** + * Trumbowyg v2.0.0-beta.5 - A lightweight WYSIWYG editor + * Trumbowyg core file + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +jQuery.trumbowyg = { + langs: { + en: { + viewHTML: "View HTML", + + formatting: "Formatting", + p: "Paragraph", + blockquote: "Quote", + code: "Code", + header: "Header", + + bold: "Bold", + italic: "Italic", + strikethrough: "Stroke", + underline: "Underline", + + strong: "Strong", + em: "Emphasis", + del: "Deleted", + + unorderedList: "Unordered list", + orderedList: "Ordered list", + + insertImage: "Insert Image", + insertVideo: "Insert Video", + link: "Link", + createLink: "Insert link", + unlink: "Remove link", + + justifyLeft: "Align Left", + justifyCenter: "Align Center", + justifyRight: "Align Right", + justifyFull: "Align Justify", + + horizontalRule: "Insert horizontal rule", + removeformat: "Remove format", + + fullscreen: "fullscreen", + + close: "Close", + + submit: "Confirm", + reset: "Cancel", + + required: "Required", + description: "Description", + title: "Title", + text: "Text", + target: "Target" + } + }, + + // User default options + opts: {}, + + btnsGrps: { + design: ['bold', 'italic', 'underline', 'strikethrough'], + semantic: ['strong', 'em', 'del'], + justify: ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'], + lists: ['unorderedList', 'orderedList'] + } +}; + + +(function (navigator, window, document, $, undefined) { + 'use strict'; + + // @param : o are options + // @param : p are params + $.fn.trumbowyg = function (options, params) { + if (options === Object(options) || !options) { + return this.each(function () { + if (!$(this).data('trumbowyg')) + $(this).data('trumbowyg', new Trumbowyg(this, options)); + }); + } + if (this.length === 1) { + try { + var t = $(this).data('trumbowyg'); + switch (options) { + // Modal box + case 'openModal': + return t.openModal(params.title, params.content); + case 'closeModal': + return t.closeModal(); + case 'openModalInsert': + return t.openModalInsert(params.title, params.fields, params.callback); + + // Selection + case 'saveSelection': + return t.saveSelection(); + case 'getSelection': + return t.selection; + case 'getSelectedText': + return t.getSelectedText(); + case 'restoreSelection': + return t.restoreSelection(); + + // Destroy + case 'destroy': + return t.destroy(); + + // Empty + case 'empty': + return t.empty(); + + // Public options + case 'lang': + return t.lang; + + // HTML + case 'html': + return t.html(params); + } + } catch (e) { + } + } + + return false; + }; + + // @param : editorElem is the DOM element + // @param : o are options + var Trumbowyg = function (editorElem, o) { + var t = this; + // Get the document of the element. It use to makes the plugin + // compatible on iframes. + t.doc = editorElem.ownerDocument || document; + // jQuery object of the editor + t.$ta = $(editorElem); // $ta : Textarea + t.$c = $(editorElem); // $c : creator + + // Extend with options + o = $.extend(true, {}, o, $.trumbowyg.opts); + + // Localization management + if (typeof o.lang === 'undefined' || typeof $.trumbowyg.langs[o.lang] === 'undefined') + t.lang = $.trumbowyg.langs.en; + else + t.lang = $.extend(true, {}, $.trumbowyg.langs.en, $.trumbowyg.langs[o.lang]); + + // Header translation + var h = t.lang.header; + + // Defaults Options + t.o = $.extend(true, {}, { + lang: 'en', + dir: 'ltr', + + closable: false, + fullscreenable: true, + fixedBtnPane: false, + fixedFullWidth: false, + autogrow: false, + + prefix: 'trumbowyg-', + + // WYSIWYG only + semantic: true, + resetCss: false, + removeformatPasted: false, + tagsToRemove: [], + + btns: [ + 'viewHTML', + '|', 'formatting', + '|', 'btnGrp-design', + '|', 'link', + '|', 'insertImage', + '|', 'btnGrp-justify', + '|', 'btnGrp-lists', + '|', 'horizontalRule', + '|', 'removeformat' + ], + btnsAdd: [], + + /** + * When the button is associated to a empty object + * func and title attributs are defined from the button key value + * + * For example + * foo: {} + * is equivalent to : + * foo: { + * func: 'foo', + * title: this.lang.foo + * } + */ + btnsDef: { + viewHTML: { + func: 'toggle' + }, + + p: { + func: 'formatBlock' + }, + blockquote: { + func: 'formatBlock' + }, + h1: { + func: 'formatBlock', + title: h + ' 1' + }, + h2: { + func: 'formatBlock', + title: h + ' 2' + }, + h3: { + func: 'formatBlock', + title: h + ' 3' + }, + h4: { + func: 'formatBlock', + title: h + ' 4' + }, + + bold: { + key: 'B' + }, + italic: { + key: 'I' + }, + underline: {}, + strikethrough: {}, + + strong: { + func: 'bold', + key: 'B' + }, + em: { + func: 'italic', + key: 'I' + }, + del: { + func: 'strikethrough' + }, + + createLink: { + key: 'K' + }, + unlink: {}, + + insertImage: {}, + + justifyLeft: {}, + justifyCenter: {}, + justifyRight: {}, + justifyFull: {}, + + unorderedList: { + func: 'insertUnorderedList' + }, + orderedList: { + func: 'insertOrderedList' + }, + + horizontalRule: { + func: 'insertHorizontalRule' + }, + + removeformat: {}, + + // Dropdowns + formatting: { + dropdown: ['p', 'blockquote', 'h1', 'h2', 'h3', 'h4'] + }, + link: { + dropdown: ['createLink', 'unlink'] + } + }, + + inlineElementsSelector: 'a, abbr, acronym, b, caption, cite, code, col, dfn, dir, dt, dd, em, font, hr, i, kbd, li, q, span, strikeout, strong, sub, sup, u' + }, o); + + if (o.btns) + t.o.btns = o.btns; + else if (t.o.semantic) + t.o.btns[4] = 'btnGrp-semantic'; + + // Keyboard shortcuts are load in this array + t.keys = []; + + t.init(); + }; + + Trumbowyg.prototype = { + init: function () { + var t = this; + t.height = t.$ta.height(); + + t.buildEditor(); + t.buildBtnPane(); + + t.fixedBtnPaneEvents(); + + t.buildOverlay(); + }, + + buildEditor: function () { + var t = this, + prefix = t.o.prefix, + html = ''; + + t.$box = $('
', { + 'class': prefix + 'box ' + prefix + 'editor-visible ' + prefix + t.o.lang + ' trumbowyg' + }); + + // $ta = Textarea + // $ed = Editor + t.isTextarea = t.$ta.is('textarea'); + if (t.isTextarea) { + html = t.$ta.val(); + t.$ed = $('
'); + t.$box + .insertAfter(t.$ta) + .append(t.$ed, t.$ta); + } else { + t.$ed = t.$ta; + html = t.$ed.html(); + + t.$ta = $(' + + +
+
@@ -100,22 +114,23 @@
-
-
- -
-
-
+ - \ No newline at end of file +@section('head_stylesheets') + +@stop + +@section('javascripts') + + + +@stop \ No newline at end of file diff --git a/resources/assets/js/vendor/trumbowyg/ui/trumbowyg.css b/resources/assets/js/vendor/trumbowyg/ui/trumbowyg.css index bac67eb0..0a35cd76 100644 --- a/resources/assets/js/vendor/trumbowyg/ui/trumbowyg.css +++ b/resources/assets/js/vendor/trumbowyg/ui/trumbowyg.css @@ -21,9 +21,9 @@ display: block; position: relative; border: 1px solid #DDD; - width: 96%; + width: 100%; min-height: 300px; - margin: 17px auto; } + } .trumbowyg-box .trumbowyg-editor { margin: 0 auto; } From 8210eafad5465bc3e43a7f3bbab599b1d21e005d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 16:25:42 +0100 Subject: [PATCH 12/29] FEATURE: add displaying errors --- .../Controllers/Admin/CreateNewStaticPage.php | 6 ++- modules/StaticPages/Http/routes.php | 2 +- .../StaticPages/Resources/lang/en/admin.php | 7 +-- .../Resources/views/admin/newForm.blade.php | 45 +++++++++++++++---- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php index 15719ada..c0ba70d7 100644 --- a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php @@ -39,17 +39,19 @@ class CreateNewStaticPage extends Controller $page->user_id = \Auth::user()->id; $page->title = $request->title; + $page->url = $request->url; $page->published_from = $request->publishedFrom; $page->published_to = $request->publishedTo; $page->meta_keywords = $request->meta_description; $page->meta_description = $request->meta_description; $page->content = $request->pageContent; + $page->status = $request->status; $page->module_handler = config('staticpages.handler'); $page->save(); return redirect() - ->route('staticpages.new') - ->with('success', trans('admin.successfullyCreated')); + ->route('staticpage.new') + ->with('success', trans('staticpages::admin.successfullyCreated')); } } \ No newline at end of file diff --git a/modules/StaticPages/Http/routes.php b/modules/StaticPages/Http/routes.php index f729916b..40bc73c1 100644 --- a/modules/StaticPages/Http/routes.php +++ b/modules/StaticPages/Http/routes.php @@ -29,6 +29,6 @@ Route::group([ ->name('staticpage.edit'); // post method for creating new static page - Route::post('new', 'CreateNewStaticPage@getNew') + Route::post('new', 'CreateNewStaticPage@postNew') ->name('staticpage.newPost'); }); \ No newline at end of file diff --git a/modules/StaticPages/Resources/lang/en/admin.php b/modules/StaticPages/Resources/lang/en/admin.php index 8d89602d..28d751cb 100644 --- a/modules/StaticPages/Resources/lang/en/admin.php +++ b/modules/StaticPages/Resources/lang/en/admin.php @@ -5,12 +5,13 @@ return [ 'content' => 'Page content', 'save' => 'Save new page', 'basicInfo' => 'Basic information', - 'metaOptions' => 'Meta information', - 'publicationOptions' => 'Publication setup', + 'metaOptions' => 'Meta information', + 'publicationOptions' => 'Publication setup', 'field_title' => 'Page title', 'field_url' => 'URL', 'field_meta_keywords' => 'Keywords', 'field_meta_description' => 'Page description', 'field_published_from' => 'Published from', - 'field_published_to' => 'Published to' + 'field_published_to' => 'Published to', + 'successfullyCreated' => 'Page successfully created' ]; \ No newline at end of file diff --git a/modules/StaticPages/Resources/views/admin/newForm.blade.php b/modules/StaticPages/Resources/views/admin/newForm.blade.php index 90978b09..2419ddc5 100644 --- a/modules/StaticPages/Resources/views/admin/newForm.blade.php +++ b/modules/StaticPages/Resources/views/admin/newForm.blade.php @@ -42,17 +42,33 @@ + + @if (isset($errors) && $errors->has('url')) +
+ {{ $errors->first('url') }} +
+ @endif
- + + + @if (isset($errors) && $errors->has('status')) +
+ {{ $errors->first('status') }} +
+ @endif
@@ -60,8 +76,9 @@
@@ -75,6 +92,12 @@ + + @if (isset($errors) && $errors->has('published_from')) +
+ {{ $errors->first('published_from') }} +
+ @endif
@@ -84,6 +107,12 @@ + + @if (isset($errors) && $errors->has('published_to')) +
+ {{ $errors->first('published_to') }} +
+ @endif
@@ -129,8 +158,6 @@ @stop \ No newline at end of file From d9b678036ade2fe140f15b949ceb092e16065aae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 20:13:57 +0100 Subject: [PATCH 13/29] FEATURE: add overview to all static pages --- app/Models/Content.php | 35 +++++++++++++ .../Controllers/Admin/StaticPageOverview.php | 15 +++++- .../StaticPages/Resources/lang/en/admin.php | 8 ++- .../Resources/views/admin/overview.blade.php | 52 +++++++++++++++++++ 4 files changed, 107 insertions(+), 3 deletions(-) diff --git a/app/Models/Content.php b/app/Models/Content.php index c07804aa..ce6e4b4f 100644 --- a/app/Models/Content.php +++ b/app/Models/Content.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\DB; /** * Class Content @@ -29,4 +30,38 @@ class Content extends Model const STATUS_DRAFT = 'draft'; const STATUS_PROTECTED = 'protected'; const STATUS_PUBLIC = 'public'; + + /** + * Getter for overview of all content pages of given handler (module type) + * + * @param $handler + * @param bool $joinAuthor + * + */ + public function getByType($handler, $joinAuthor = false) + { + $query = DB::table('contents') + ->select('contents.*') + ->where('contents.status', '<>', self::STATUS_DELETED) + ->where('module_handler', $handler) + ->orderBy('created_at'); + + // join user email and user name to results when needed + if ($joinAuthor) { + $query = $query->join('users', 'users.id', '=', 'contents.user_id') + ->select('contents.*', 'users.name AS author_name', 'users.email AS author_email'); + } + + return $query; + } + + /** + * Mark relationship with users table + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function author() + { + return $this->belongsTo('App\Models\User', 'user_id'); + } } \ No newline at end of file diff --git a/modules/StaticPages/Http/Controllers/Admin/StaticPageOverview.php b/modules/StaticPages/Http/Controllers/Admin/StaticPageOverview.php index bd833785..3abc63f6 100644 --- a/modules/StaticPages/Http/Controllers/Admin/StaticPageOverview.php +++ b/modules/StaticPages/Http/Controllers/Admin/StaticPageOverview.php @@ -1,11 +1,22 @@ getByType(config('staticpages.handler'), true); + + // add filtering by status + if (!is_null($status) && in_array($status, ContentStatuses::getSimple())) { + $pages = $pages->where('status', $status); + } + $pages = $pages->paginate($perPage); + + return view('staticpages::admin.overview', ['pages' => $pages]); } } \ No newline at end of file diff --git a/modules/StaticPages/Resources/lang/en/admin.php b/modules/StaticPages/Resources/lang/en/admin.php index 28d751cb..45a8ab68 100644 --- a/modules/StaticPages/Resources/lang/en/admin.php +++ b/modules/StaticPages/Resources/lang/en/admin.php @@ -13,5 +13,11 @@ return [ 'field_meta_description' => 'Page description', 'field_published_from' => 'Published from', 'field_published_to' => 'Published to', - 'successfullyCreated' => 'Page successfully created' + 'successfullyCreated' => 'Page successfully created', + 'noPagesAvailable' => 'No static pages available. Try to create one first.', + 'viewPage' => 'View page on web', + 'edit' => 'Edit page', + 'deletePage' => 'Delete page (ireversible!)', + 'makePublic' => 'Publish page', + 'makeDraft' => 'Disable page and make it draft' ]; \ No newline at end of file diff --git a/modules/StaticPages/Resources/views/admin/overview.blade.php b/modules/StaticPages/Resources/views/admin/overview.blade.php index a587a878..783c6e80 100644 --- a/modules/StaticPages/Resources/views/admin/overview.blade.php +++ b/modules/StaticPages/Resources/views/admin/overview.blade.php @@ -4,4 +4,56 @@

@lang('staticpages::admin.overview')

+ +
+ @forelse($pages as $page) +
+
+ +
+ + + +
+ +

{{$page->title}}

+ {{$page->created_at}} + {{$page->author_name}} + + @if ($page->meta_description) +

{{str_limit($page->meta_description)}}

+ @else +

{{str_limit(strip_tags($page->content))}}

+ @endif + + @if ($page->meta_keywords) +

{{$page->meta_keywords}}

+ @endif + +
+
+ @empty + @lang('staticpages::admin.noPagesAvailable') + @endforelse +
+ +
+ {{$pages->render()}} +
@stop \ No newline at end of file From 0f4ad90cd8dffc2c4d8fa0899e741ae70bc90776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 27 Jan 2016 20:13:57 +0100 Subject: [PATCH 14/29] FEATURE: add overview to all static pages --- .../Resources/views/admin/overview.blade.php | 54 ++++++++++--------- resources/assets/css/admin.css | 28 ++++++++++ 2 files changed, 57 insertions(+), 25 deletions(-) diff --git a/modules/StaticPages/Resources/views/admin/overview.blade.php b/modules/StaticPages/Resources/views/admin/overview.blade.php index 783c6e80..c38adb17 100644 --- a/modules/StaticPages/Resources/views/admin/overview.blade.php +++ b/modules/StaticPages/Resources/views/admin/overview.blade.php @@ -8,44 +8,48 @@
@forelse($pages as $page)
-
+
-
- + {{--
--}} + {{----}} - -
-
- -

{{$page->title}}

+

{{$page->title}}

{{$page->created_at}} {{$page->author_name}} - @if ($page->meta_description) -

{{str_limit($page->meta_description)}}

+

+ @if (trim($page->meta_description)) + {{str_limit($page->meta_description)}} @else -

{{str_limit(strip_tags($page->content))}}

+ {{str_limit(strip_tags($page->content))}} @endif +

@if ($page->meta_keywords)

{{$page->meta_keywords}}

@endif +

+ + + + + @if($page->status == \App\Models\Content::STATUS_DRAFT) + + @endif + + @if(in_array($page->status, [\App\Models\Content::STATUS_PROTECTED, \App\Models\Content::STATUS_PUBLIC])) + + @endif + + +

+
@empty diff --git a/resources/assets/css/admin.css b/resources/assets/css/admin.css index 50b8e40f..3983f666 100644 --- a/resources/assets/css/admin.css +++ b/resources/assets/css/admin.css @@ -34,6 +34,34 @@ list-style-type: none; } +#static-page-overview .page { + position: relative; + padding-bottom: 3em; +} + +#static-page-overview .page .controls { + position: absolute; + bottom: 0; +} + +#static-page-overview .page .controls .button { + margin-bottom: 10px; +} + +#static-page-overview .date, #static-page-overview .author { + font-size: 80%; + +} + +#static-page-overview .perex { + +} + +#static-page-overview .keywords { + margin-bottom: 0; + font-size: 80%; + background:red; +} .red { color: red; From 1b2d7db8f37ae2344869a89125b55825a46e6029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 28 Jan 2016 13:38:30 +0100 Subject: [PATCH 15/29] FEATURE: add quick actions to static page overview --- .../Http/Controllers/Admin/EditStaticPage.php | 84 +++++++++++++++++++ modules/StaticPages/Http/routes.php | 18 +++- .../StaticPages/Resources/lang/en/admin.php | 10 ++- .../Resources/views/admin/overview.blade.php | 35 +++++--- resources/assets/css/admin.css | 1 - 5 files changed, 133 insertions(+), 15 deletions(-) diff --git a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php index e5d86fc0..42315879 100644 --- a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php @@ -1,10 +1,94 @@ route('staticpage.overview') + ->with('error', trans('staticpages::admin.invalidStatus')); + } + + try { + // try to find this page + $page = Content::where('module_handler', config('staticpages.handler')) + ->findOrFail($id); + + // page found, save status + $page->status = $status; + + $page->save(); + + // redirect back to overview with info for user + return redirect() + ->route('staticpage.overview') + ->with('success', trans('staticpages::admin.statusChanged')); + } catch (NotFoundHttpException $e) { + // page not found + return redirect() + ->route('staticpage.overview') + ->with('error', trans('staticpages::admin.invalidPage')); + } + } + + /** + * Delete page + * + * @param $id + * + * @return \Illuminate\Http\RedirectResponse + */ + public function deletePage($id) + { + try { + // try to find this page + $page = Content::where('module_handler', config('staticpages.handler')) + ->findOrFail($id); + + // page found, save status + $page->status = Content::STATUS_DELETED; + + $page->save(); + + // redirect back to overview with info for user + return redirect() + ->route('staticpage.overview') + ->with('success', trans('staticpages::admin.pageDeleted', [ + 'name' => $page->title, + 'url' => $page->url + ])); + } catch (NotFoundHttpException $e) { + // page not found + return redirect() + ->route('staticpage.overview') + ->with('error', trans('staticpages::admin.invalidPage')); + } + } } \ No newline at end of file diff --git a/modules/StaticPages/Http/routes.php b/modules/StaticPages/Http/routes.php index 40bc73c1..cbcee5fa 100644 --- a/modules/StaticPages/Http/routes.php +++ b/modules/StaticPages/Http/routes.php @@ -8,7 +8,6 @@ Route::group([ Route::get('/{url}', 'StaticPagesController@index'); }); - // routes group for admin area Route::group([ 'middleware' => ['web', 'auth'], @@ -31,4 +30,21 @@ Route::group([ // post method for creating new static page Route::post('new', 'CreateNewStaticPage@postNew') ->name('staticpage.newPost'); + + // routes for quick actions + + // change status of page (protected, public or draft) + Route::get('status/{id}/{status}', 'EditStaticPage@changeStatus') + ->name('staticpage.changeStatus'); + + + // delete page + Route::get('delete/{id}', 'EditStaticPage@deletePage') + ->name('staticpage.delete'); + + // display change history of given page + // Route::get('history/{id}', 'StaticPageHistory@getHistory')->name('staticpage.history'); + + + // Route::get('', '')->name('staticpage.'); }); \ No newline at end of file diff --git a/modules/StaticPages/Resources/lang/en/admin.php b/modules/StaticPages/Resources/lang/en/admin.php index 45a8ab68..63ab29b6 100644 --- a/modules/StaticPages/Resources/lang/en/admin.php +++ b/modules/StaticPages/Resources/lang/en/admin.php @@ -18,6 +18,12 @@ return [ 'viewPage' => 'View page on web', 'edit' => 'Edit page', 'deletePage' => 'Delete page (ireversible!)', - 'makePublic' => 'Publish page', - 'makeDraft' => 'Disable page and make it draft' + 'makePublic' => 'Publish page', + 'makeProtected' => 'Publish page only for logged users', + 'makeDraft' => 'Disable page and make it draft', + 'invalidStatus' => 'Cannot change status to something undefined.', + 'statusChanged' => 'Status successfully changed.', + 'invalidPage' => 'Specified page does not exist.', + 'pageDeleted' => 'Page :name (:url) successfully deleted.' + ]; \ No newline at end of file diff --git a/modules/StaticPages/Resources/views/admin/overview.blade.php b/modules/StaticPages/Resources/views/admin/overview.blade.php index c38adb17..2ded01a8 100644 --- a/modules/StaticPages/Resources/views/admin/overview.blade.php +++ b/modules/StaticPages/Resources/views/admin/overview.blade.php @@ -3,6 +3,18 @@ @section('content')

@lang('staticpages::admin.overview')

+ + @if (session('success')) +
+ {{ session('success') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif
@@ -19,15 +31,15 @@ {{--
--}}

{{$page->title}}

- {{$page->created_at}} + {{date('d.m.Y', strtotime($page->created_at))}} {{$page->author_name}}

- @if (trim($page->meta_description)) - {{str_limit($page->meta_description)}} - @else - {{str_limit(strip_tags($page->content))}} - @endif + @if (trim($page->meta_description)) + {{str_limit($page->meta_description)}} + @else + {{str_limit(strip_tags($page->content))}} + @endif

@if ($page->meta_keywords) @@ -36,18 +48,19 @@

- - + {{----}} + @if($page->status == \App\Models\Content::STATUS_DRAFT) - + + @endif @if(in_array($page->status, [\App\Models\Content::STATUS_PROTECTED, \App\Models\Content::STATUS_PUBLIC])) - + @endif - +

diff --git a/resources/assets/css/admin.css b/resources/assets/css/admin.css index 3983f666..8583030c 100644 --- a/resources/assets/css/admin.css +++ b/resources/assets/css/admin.css @@ -60,7 +60,6 @@ #static-page-overview .keywords { margin-bottom: 0; font-size: 80%; - background:red; } .red { From 73ff4e93311aada97582d3b4f67953b1c5410406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 28 Jan 2016 15:51:41 +0100 Subject: [PATCH 16/29] FEATURE #1372: add feature for editing static pages. User can edit static pages. The edit itself also stores history of changed columns. --- app/Models/Content.php | 55 ++++++ app/Models/ContentHistory.php | 5 +- .../Http/Controllers/Admin/EditStaticPage.php | 70 +++++++- .../Http/Requests/EditStaticPageRequest.php | 29 ++++ modules/StaticPages/Http/routes.php | 4 + .../StaticPages/Resources/lang/en/admin.php | 6 +- .../Resources/views/admin/edit.blade.php | 15 ++ .../Resources/views/admin/editForm.blade.php | 162 ++++++++++++++++++ 8 files changed, 341 insertions(+), 5 deletions(-) create mode 100644 modules/StaticPages/Http/Requests/EditStaticPageRequest.php create mode 100644 modules/StaticPages/Resources/views/admin/edit.blade.php create mode 100644 modules/StaticPages/Resources/views/admin/editForm.blade.php diff --git a/app/Models/Content.php b/app/Models/Content.php index ce6e4b4f..c4224f31 100644 --- a/app/Models/Content.php +++ b/app/Models/Content.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Http\Requests\Request; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; @@ -55,6 +56,60 @@ class Content extends Model return $query; } + /** + * Updates current model with information about changed columns + * + * @param array $fields + * @param Request $request + * + * @return int number of changed columns + */ + public function updateWithHistory(array $fields, Request $request) + { + $editBatch = uniqid(); + $changed = 0; + + foreach ($fields as $fieldDB => $fieldRequest) { + // remove any whitespaces around real content + $request->$fieldRequest = trim($request->$fieldRequest); + + if ($this->$fieldDB != $request->$fieldRequest) { + + // setup history object + $history = [ + 'user_id' => \Auth::user()->id, + 'content_id' => $this->id, + 'edit_batch' => $editBatch, + 'column' => $fieldRequest, + 'old_value' => $this->$fieldDB, + 'new_value' => $request->$fieldRequest + ]; + + // save history + ContentHistory::create($history); + + // save change into database + $this->$fieldDB = $request->$fieldRequest; + + $changed++; + } + } + + $this->save(); + + return $changed; + } + + /** + * Mark relationship with its historical records + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function history() + { + return $this->hasMany('App\Models\ContentHistory'); + } + /** * Mark relationship with users table * diff --git a/app/Models/ContentHistory.php b/app/Models/ContentHistory.php index e919aa4b..9c6e7ada 100644 --- a/app/Models/ContentHistory.php +++ b/app/Models/ContentHistory.php @@ -9,13 +9,14 @@ use Illuminate\Database\Eloquent\Model; */ class ContentHistory extends Model { + protected $table = 'content_history'; - public $timestamps = true; + // this table does not have created_at and updated_at fields + public $timestamps = false; protected $fillable = [ 'user_id', 'content_id', - 'changed_at', 'edit_batch', 'column', 'new_value', diff --git a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php index 42315879..826eea47 100644 --- a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php @@ -3,13 +3,81 @@ namespace Modules\StaticPages\Http\Controllers\Admin; use App\Enumerations\ContentStatuses; use App\Models\Content; +use Modules\StaticPages\Http\Requests\EditStaticPageRequest; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class EditStaticPage extends Controller { + /** + * Display form for editing static page + * + * @param $id + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ public function getEdit($id) { - return view('staticpages::index'); + // select all content statuses + $statuses = ContentStatuses::getWithTranslations(); + + // try to find requested page + $page = Content::where('module_handler', config('staticpages.handler')) + ->findOrFail($id); + + // render view + return view('staticpages::admin.edit', [ + 'contentStatuses' => $statuses, + 'page' => $page + ]); + } + + /** + * Edit static page and save changes into history. + * + * @param EditStaticPageRequest $request + * @param $id + * + * @return \Illuminate\Http\RedirectResponse + */ + public function postEdit(EditStaticPageRequest $request, $id) + { + try { + $page = Content::where('module_handler', config('staticpages.handler')) + ->findOrFail($id); + } catch (NotFoundHttpException $e) { + + // page for editing not found + return redirect() + ->route('staticpage.overview') + ->with('error', trans('staticpages::admin.invalidPage')); + } + + // array of fields in database and fields from request + $fields = [ + 'title' => 'title', + 'url' => 'url', + 'published_from' => 'publishedFrom', + 'published_to' => 'publishedTo', + 'meta_keywords' => 'metaKeywords', + 'meta_description' => 'metaDescription', + 'content' => 'pageContent', + 'status' => 'status' + ]; + + // save new values with history + $changedColumns = $page->updateWithHistory($fields, $request); + + // was something changed? + if ($changedColumns == 0) { + return redirect() + ->route('staticpage.edit', ['id' => $page->id]) + ->with('error', trans('staticpages::admin.nothingToEdit')); + } + + // something was changed, inform user + return redirect() + ->route('staticpage.edit', ['id' => $page->id]) + ->with('success', trans('staticpages::admin.successfullyEdited')); } /** diff --git a/modules/StaticPages/Http/Requests/EditStaticPageRequest.php b/modules/StaticPages/Http/Requests/EditStaticPageRequest.php new file mode 100644 index 00000000..bf5523ba --- /dev/null +++ b/modules/StaticPages/Http/Requests/EditStaticPageRequest.php @@ -0,0 +1,29 @@ + 'required', + 'url' => 'required|unique:contents,url,'.$this->id, + 'published_from' => 'date', + 'published_to' => 'date', + 'title_photo' => 'exists:files,id', + 'status' => 'required|in:'.$statuses + ]; + } +} diff --git a/modules/StaticPages/Http/routes.php b/modules/StaticPages/Http/routes.php index cbcee5fa..b0adb65b 100644 --- a/modules/StaticPages/Http/routes.php +++ b/modules/StaticPages/Http/routes.php @@ -31,6 +31,10 @@ Route::group([ Route::post('new', 'CreateNewStaticPage@postNew') ->name('staticpage.newPost'); + // post method for creating new static page + Route::post('edit/{id}', 'EditStaticPage@postEdit') + ->name('staticpage.editPost'); + // routes for quick actions // change status of page (protected, public or draft) diff --git a/modules/StaticPages/Resources/lang/en/admin.php b/modules/StaticPages/Resources/lang/en/admin.php index 63ab29b6..f0bfb95b 100644 --- a/modules/StaticPages/Resources/lang/en/admin.php +++ b/modules/StaticPages/Resources/lang/en/admin.php @@ -16,7 +16,7 @@ return [ 'successfullyCreated' => 'Page successfully created', 'noPagesAvailable' => 'No static pages available. Try to create one first.', 'viewPage' => 'View page on web', - 'edit' => 'Edit page', + 'edit' => 'Edit page :name', 'deletePage' => 'Delete page (ireversible!)', 'makePublic' => 'Publish page', 'makeProtected' => 'Publish page only for logged users', @@ -24,6 +24,8 @@ return [ 'invalidStatus' => 'Cannot change status to something undefined.', 'statusChanged' => 'Status successfully changed.', 'invalidPage' => 'Specified page does not exist.', - 'pageDeleted' => 'Page :name (:url) successfully deleted.' + 'pageDeleted' => 'Page :name (:url) successfully deleted.', + 'nothingToEdit' => 'You did not submit any changes. Nothing was edited.', + 'successfullyEdited' => 'Edit successfull' ]; \ No newline at end of file diff --git a/modules/StaticPages/Resources/views/admin/edit.blade.php b/modules/StaticPages/Resources/views/admin/edit.blade.php new file mode 100644 index 00000000..fad2438f --- /dev/null +++ b/modules/StaticPages/Resources/views/admin/edit.blade.php @@ -0,0 +1,15 @@ +@extends('admin.layout') + +@section('pageName', @trans('staticpages::admin.edit', ['name' => $page->title])) + +@section('content') + +
+

@lang('staticpages::admin.edit', ['name' => $page->title])

+ +
+ +
+ @include('staticpages::admin.editForm') +
+@stop \ No newline at end of file diff --git a/modules/StaticPages/Resources/views/admin/editForm.blade.php b/modules/StaticPages/Resources/views/admin/editForm.blade.php new file mode 100644 index 00000000..15842660 --- /dev/null +++ b/modules/StaticPages/Resources/views/admin/editForm.blade.php @@ -0,0 +1,162 @@ +@if (session('success')) +
+ {{ session('success') }} +
+@endif + +@if (session('error')) +
+ {{ session('error') }} +
+@endif + +
+ {!! csrf_field() !!} + + + +
+
+
+
+ +
+
+ +
+
+ +
+
+ + + @if (isset($errors) && $errors->has('status')) +
+ {{ $errors->first('status') }} +
+ @endif +
+ +
+ +
+
+ +
+
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +@section('head_stylesheets') + +@stop + +@section('javascripts') + + + +@stop \ No newline at end of file From 703adfcb78a84c18348088cf09f733c12cf4c1a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 28 Jan 2016 16:00:31 +0100 Subject: [PATCH 17/29] FEATURE #1386: catch CSRF token exception --- app/Exceptions/Handler.php | 6 ++++++ resources/lang/en/validation.php | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 53617ef4..9a32465b 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,6 +3,7 @@ namespace App\Exceptions; use Exception; +use Illuminate\Session\TokenMismatchException; use Illuminate\Validation\ValidationException; use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Database\Eloquent\ModelNotFoundException; @@ -45,6 +46,11 @@ class Handler extends ExceptionHandler */ public function render($request, Exception $e) { + if ($e instanceof TokenMismatchException){ + //redirect to form an example of how I handle mine + return redirect($request->fullUrl())->with('error', trans('validation.csrf')); + } + return parent::render($request, $e); } } diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index b0a1f143..470652e5 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -29,6 +29,7 @@ return [ ], 'boolean' => 'The :attribute field must be true or false.', 'confirmed' => 'The :attribute confirmation does not match.', + 'csrf' => 'Opps! Seems you could not submit form for a longtime. Please try again', 'date' => 'The :attribute is not a valid date.', 'date_format' => 'The :attribute does not match the format :format.', 'different' => 'The :attribute and :other must be different.', @@ -76,7 +77,6 @@ return [ 'timezone' => 'The :attribute must be a valid zone.', 'unique' => 'The :attribute has already been taken.', 'url' => 'The :attribute format is invalid.', - /* |-------------------------------------------------------------------------- | Custom Validation Language Lines @@ -88,12 +88,11 @@ return [ | */ - 'custom' => [ + 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], ], - /* |-------------------------------------------------------------------------- | Custom Validation Attributes @@ -105,6 +104,6 @@ return [ | */ - 'attributes' => [], + 'attributes' => [], ]; From 0c7a138e43a32892b78e590bc4dbfc528635e065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 28 Jan 2016 17:01:54 +0100 Subject: [PATCH 18/29] FEATURE: add seed and enumeration for action log types --- app/Enumerations/ActionLogTypes.php | 21 +++++++++++++++++ database/seeds/DatabaseSeeder.php | 1 + database/seeds/SeedActionLogTypes.php | 34 +++++++++++++++++++++++++++ resources/lang/en/admin/actionLog.php | 23 ++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 app/Enumerations/ActionLogTypes.php create mode 100644 database/seeds/SeedActionLogTypes.php create mode 100644 resources/lang/en/admin/actionLog.php diff --git a/app/Enumerations/ActionLogTypes.php b/app/Enumerations/ActionLogTypes.php new file mode 100644 index 00000000..902b2bd2 --- /dev/null +++ b/app/Enumerations/ActionLogTypes.php @@ -0,0 +1,21 @@ +id, $type->name); + } + } +} \ No newline at end of file diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 27d1d43e..9d64c78a 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -14,5 +14,6 @@ class DatabaseSeeder extends Seeder // fill up custom field types $this->call(SeedCustomFieldTypes::class); $this->call(SeedCustomFieldResources::class); + $this->call(SeedActionLogTypes::class); } } \ No newline at end of file diff --git a/database/seeds/SeedActionLogTypes.php b/database/seeds/SeedActionLogTypes.php new file mode 100644 index 00000000..629fa337 --- /dev/null +++ b/database/seeds/SeedActionLogTypes.php @@ -0,0 +1,34 @@ +insert([ + 'name' => 'admin/actionLog.name' . ucfirst($type), + 'value' => 'admin/actionLog.' . $type + ]); + } + } +} diff --git a/resources/lang/en/admin/actionLog.php b/resources/lang/en/admin/actionLog.php new file mode 100644 index 00000000..5b744e16 --- /dev/null +++ b/resources/lang/en/admin/actionLog.php @@ -0,0 +1,23 @@ + 'Logged in', + 'logout' => 'Logged out', + 'selfUserEdit' => 'Updated self user', + 'userEdit' => 'Updated someone\'s profile', + 'changePassword' => 'Changed password', + 'newCustomField' => 'Added new custom field', + 'editCustomField' => 'Edited custom field', + 'deleteCustomField' => 'Deleted custom field', + 'changeSettings' => 'Changes settings', + + // list of names + 'nameLogin' => 'Logged in', + 'nameLogout' => 'Logged out', + 'nameSelfUserEdit' => 'Updated self user', + 'nameUserEdit' => 'Updated someone\'s profile', + 'nameChangePassword' => 'Changed password', + 'nameNewCustomField' => 'Added new custom field', + 'nameEditCustomField' => 'Edited custom field', + 'nameDeleteCustomField' => 'Deleted custom field', + 'nameChangeSettings' => 'Changes settings', +]; \ No newline at end of file From da23bb4100e97f02d9ff9e0bdd9b52279f62830d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 28 Jan 2016 20:51:35 +0100 Subject: [PATCH 19/29] TESTING: add tests for writing into bootstrap/cache and storage directories --- tests/ExampleTest.php | 19 --------------- tests/WritePermissionsTest.php | 43 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 19 deletions(-) delete mode 100644 tests/ExampleTest.php create mode 100644 tests/WritePermissionsTest.php diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php deleted file mode 100644 index 7e81d37a..00000000 --- a/tests/ExampleTest.php +++ /dev/null @@ -1,19 +0,0 @@ -visit('/') - ->see('Laravel 5'); - } -} diff --git a/tests/WritePermissionsTest.php b/tests/WritePermissionsTest.php new file mode 100644 index 00000000..107304a4 --- /dev/null +++ b/tests/WritePermissionsTest.php @@ -0,0 +1,43 @@ +writeToDir('test.txt'); + } + + public function testLogsDir() + { + $this->writeToDir('logs/test.txt'); + } + + public function testFrameworkDir() + { + $this->writeToDir('framework/test.txt'); + } + + public function testBootstrapCacheDir() + { + $this->writeToDir('../bootstrap/cache/test.txt'); + } + + /** + * Create and delete some file + * + * @param $path + */ + protected function writeToDir($path) + { + $file = storage_path($path); + $content = uniqid(); + $bytesWritten = @file_put_contents($file, $content); + + // test writing + $this->assertNotFalse($bytesWritten); + + // test deleting + $deleted = @unlink($file); + $this->assertTrue($deleted); + } +} From 26873a2db49a2bd0a5c704da52ce7a2d4ac83f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 28 Jan 2016 22:42:06 +0100 Subject: [PATCH 20/29] FEATURE: add string id for action log types. This string ID will be used in each logger for better readability (we will use string identifier except the "magical" integer constant) --- ...01_28_213204_AddStringIdForActionTypes.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 database/migrations/2016_01_28_213204_AddStringIdForActionTypes.php diff --git a/database/migrations/2016_01_28_213204_AddStringIdForActionTypes.php b/database/migrations/2016_01_28_213204_AddStringIdForActionTypes.php new file mode 100644 index 00000000..bb02c3cc --- /dev/null +++ b/database/migrations/2016_01_28_213204_AddStringIdForActionTypes.php @@ -0,0 +1,33 @@ +string('string_id', 64) + ->after('id') + ->unique()->comment = 'String ID used for better readability in loggers'; + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('action_log_types', function (Blueprint $table) { + $table->dropColumn('string_id'); + }); + } +} From 859d3ce753917e406b76540efbba0aa08e412d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 28 Jan 2016 22:44:03 +0100 Subject: [PATCH 21/29] FEATURE: add string id into seeder of action log types. --- database/seeds/SeedActionLogTypes.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/database/seeds/SeedActionLogTypes.php b/database/seeds/SeedActionLogTypes.php index 629fa337..c832e0db 100644 --- a/database/seeds/SeedActionLogTypes.php +++ b/database/seeds/SeedActionLogTypes.php @@ -14,9 +14,7 @@ class SeedActionLogTypes extends Seeder $types = [ 'login', 'logout', - 'selfUserEdit', 'userEdit', - 'changePassword', 'newCustomField', 'editCustomField', 'deleteCustomField', @@ -26,8 +24,9 @@ class SeedActionLogTypes extends Seeder foreach ($types as $type) { \DB::table('action_log_types') ->insert([ - 'name' => 'admin/actionLog.name' . ucfirst($type), - 'value' => 'admin/actionLog.' . $type + 'string_id' => $type, + 'name' => 'admin/actionLog.name' . ucfirst($type), + 'value' => 'admin/actionLog.' . $type ]); } } From 5fabc08a99708bb78c3f71bfbb0d87a4708c806c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 00:20:40 +0100 Subject: [PATCH 22/29] FEATURE #1367: add log of login and logout --- app/Enumerations/ActionLogTypesForLogger.php | 16 +++++ app/Listeners/LogLogin.php | 36 ++++++++++ app/Listeners/LogLogout.php | 37 ++++++++++ app/Listeners/Logger.php | 74 ++++++++++++++++++++ app/Models/ActionLog.php | 3 +- app/Providers/EventServiceProvider.php | 8 ++- database/seeds/SeedActionLogTypes.php | 1 + 7 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 app/Enumerations/ActionLogTypesForLogger.php create mode 100644 app/Listeners/LogLogin.php create mode 100644 app/Listeners/LogLogout.php create mode 100644 app/Listeners/Logger.php diff --git a/app/Enumerations/ActionLogTypesForLogger.php b/app/Enumerations/ActionLogTypesForLogger.php new file mode 100644 index 00000000..8566e5f6 --- /dev/null +++ b/app/Enumerations/ActionLogTypesForLogger.php @@ -0,0 +1,16 @@ +string_id, $type->id); + } + } +} \ No newline at end of file diff --git a/app/Listeners/LogLogin.php b/app/Listeners/LogLogin.php new file mode 100644 index 00000000..4e2cecc5 --- /dev/null +++ b/app/Listeners/LogLogin.php @@ -0,0 +1,36 @@ + $event->user->id, + 'name' => $event->user->name, + 'email' => $event->user->email + ]; + + $this->saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'login'; + } +} diff --git a/app/Listeners/LogLogout.php b/app/Listeners/LogLogout.php new file mode 100644 index 00000000..7aeefce3 --- /dev/null +++ b/app/Listeners/LogLogout.php @@ -0,0 +1,37 @@ + $event->user->id, + 'name' => $event->user->name, + 'email' => $event->user->email + ]; + + $this->saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'logout'; + } +} diff --git a/app/Listeners/Logger.php b/app/Listeners/Logger.php new file mode 100644 index 00000000..e1b75628 --- /dev/null +++ b/app/Listeners/Logger.php @@ -0,0 +1,74 @@ +actionTypes = ActionLogTypesForLogger::getWithTranslations(); + } + + /** + * Shortcut for loging events + * + * @param array $parameters + */ + protected function saveLog($parameters = []) + { + // try to translate string id into integer id + $typeId = $this->getTypeId(); + + // is user logged in and exists given type? + if (!Auth::check() || is_null($typeId)) { + return; + } + + // get user id + $userId = Auth::user()->id; + + // setup object for insertion + $data = [ + 'user_id' => $userId, + 'type_id' => $typeId, + 'parameters' => json_encode((array)$parameters) + ]; + + // create new logged event + ActionLog::create($data); + } + + /** + * Translate string id to integer id + * + * @return int|null ID of action type when exists, null otherwise + */ + private function getTypeId() + { + $name = $this->getName(); + if (!isset($this->actionTypes[$name])) { + return null; + } + + return $this->actionTypes[$name]; + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + abstract protected function getName(); +} diff --git a/app/Models/ActionLog.php b/app/Models/ActionLog.php index 8b95d4b6..809a43b7 100644 --- a/app/Models/ActionLog.php +++ b/app/Models/ActionLog.php @@ -9,8 +9,9 @@ use Illuminate\Database\Eloquent\Model; */ class ActionLog extends Model { + protected $table = 'action_log'; - public $timestamps = true; + public $timestamps = false; protected $fillable = [ 'type_id', diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 58ce9624..935202c4 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -13,8 +13,12 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ - 'App\Events\SomeEvent' => [ - 'App\Listeners\EventListener', + // internal Laravel events - should work as auth.login and auth.logout, however it doesn't... + 'Illuminate\Auth\Events\Login' => [ + 'App\Listeners\LogLogin' + ], + 'Illuminate\Auth\Events\Logout' => [ + 'App\Listeners\LogLogout' ], ]; diff --git a/database/seeds/SeedActionLogTypes.php b/database/seeds/SeedActionLogTypes.php index c832e0db..126faaa6 100644 --- a/database/seeds/SeedActionLogTypes.php +++ b/database/seeds/SeedActionLogTypes.php @@ -15,6 +15,7 @@ class SeedActionLogTypes extends Seeder 'login', 'logout', 'userEdit', + 'createUser', 'newCustomField', 'editCustomField', 'deleteCustomField', From 7054ce53b6dc01c15d36995895d63e2069221de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 00:22:46 +0100 Subject: [PATCH 23/29] FEATURE #1375: add logging for user edit and creating --- app/Events/CreateNewUser.php | 27 ++++++++++++++ app/Events/EditUser.php | 25 +++++++++++++ app/Http/Controllers/Admin/CreateNewUser.php | 6 +++- app/Http/Controllers/Admin/EditUser.php | 5 +++ app/Listeners/LogCreatedUser.php | 36 +++++++++++++++++++ app/Listeners/LogEditUser.php | 37 ++++++++++++++++++++ app/Providers/EventServiceProvider.php | 6 ++++ 7 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 app/Events/CreateNewUser.php create mode 100644 app/Events/EditUser.php create mode 100644 app/Listeners/LogCreatedUser.php create mode 100644 app/Listeners/LogEditUser.php diff --git a/app/Events/CreateNewUser.php b/app/Events/CreateNewUser.php new file mode 100644 index 00000000..03743247 --- /dev/null +++ b/app/Events/CreateNewUser.php @@ -0,0 +1,27 @@ +user = $user; + } +} diff --git a/app/Events/EditUser.php b/app/Events/EditUser.php new file mode 100644 index 00000000..4d16cc29 --- /dev/null +++ b/app/Events/EditUser.php @@ -0,0 +1,25 @@ +user = $user; + } +} diff --git a/app/Http/Controllers/Admin/CreateNewUser.php b/app/Http/Controllers/Admin/CreateNewUser.php index 0dce40d5..ce45a036 100644 --- a/app/Http/Controllers/Admin/CreateNewUser.php +++ b/app/Http/Controllers/Admin/CreateNewUser.php @@ -3,11 +3,12 @@ namespace App\Http\Controllers\Admin; use App\Enumerations\UserRoles; +use App\Events\CreateNewUser as CreateNewUserEvent; use App\Http\Controllers\Controller; use App\Http\Requests; use App\Http\Requests\CreateNewUserRequest; use App\Models\User; -use Illuminate\Http\Request; +use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Hash; class CreateNewUser extends Controller @@ -51,6 +52,9 @@ class CreateNewUser extends Controller // store user into database $user->save(); + // fire event + Event::fire(new CreateNewUserEvent($user)); + // refresh page with information about successfull registration return redirect() ->route('users.new') diff --git a/app/Http/Controllers/Admin/EditUser.php b/app/Http/Controllers/Admin/EditUser.php index f9b0a7c5..986777ba 100644 --- a/app/Http/Controllers/Admin/EditUser.php +++ b/app/Http/Controllers/Admin/EditUser.php @@ -4,11 +4,13 @@ namespace App\Http\Controllers\Admin; use App\Enumerations\UserRoles; use App\Enumerations\UserStates; +use App\Events\EditUser as EditUserEvent; use App\Http\Controllers\Controller; use App\Http\Requests; use App\Http\Requests\EditUserRequest; use App\Models\User; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Hash; class EditUser extends Controller @@ -74,6 +76,9 @@ class EditUser extends Controller $user->save(); + // fire event about editing user + Event::fire(new EditUserEvent($user)); + return redirect() ->route('users.detail', ['id' => $id]) ->with('success', trans('admin/userManagement.userSuccessfullyEdited')); diff --git a/app/Listeners/LogCreatedUser.php b/app/Listeners/LogCreatedUser.php new file mode 100644 index 00000000..9da573ec --- /dev/null +++ b/app/Listeners/LogCreatedUser.php @@ -0,0 +1,36 @@ + $event->user->id, + 'name' => $event->user->name, + 'email' => $event->user->email + ]; + + $this->saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'createUser'; + } +} diff --git a/app/Listeners/LogEditUser.php b/app/Listeners/LogEditUser.php new file mode 100644 index 00000000..c656e4ee --- /dev/null +++ b/app/Listeners/LogEditUser.php @@ -0,0 +1,37 @@ + $event->user->id, + 'name' => $event->user->name, + 'email' => $event->user->email + ]; + + $this->saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'userEdit'; + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 935202c4..4e7b739f 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -13,6 +13,12 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ + 'App\Events\CreateNewUser' => [ + 'App\Listeners\LogCreatedUser', + ], + 'App\Events\EditUser' => [ + 'App\Listeners\LogEditUser', + ], // internal Laravel events - should work as auth.login and auth.logout, however it doesn't... 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\LogLogin' From 4a8facc0462b663e46f027331aca1432f4669d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 00:36:20 +0100 Subject: [PATCH 24/29] FEATURE #1400: add logging for custom fields --- app/Events/CreateNewCustomField.php | 27 ++++++++++++++ app/Events/DeleteCustomField.php | 27 ++++++++++++++ app/Events/EditCustomField.php | 27 ++++++++++++++ .../Admin/CreateNewCustomField.php | 5 +++ .../Controllers/Admin/EditCustomField.php | 9 +++++ app/Listeners/LogCreateCustomField.php | 37 +++++++++++++++++++ app/Listeners/LogDeleteField.php | 36 ++++++++++++++++++ app/Listeners/LogEditCustomField.php | 36 ++++++++++++++++++ app/Providers/EventServiceProvider.php | 9 +++++ 9 files changed, 213 insertions(+) create mode 100644 app/Events/CreateNewCustomField.php create mode 100644 app/Events/DeleteCustomField.php create mode 100644 app/Events/EditCustomField.php create mode 100644 app/Listeners/LogCreateCustomField.php create mode 100644 app/Listeners/LogDeleteField.php create mode 100644 app/Listeners/LogEditCustomField.php diff --git a/app/Events/CreateNewCustomField.php b/app/Events/CreateNewCustomField.php new file mode 100644 index 00000000..b1bbf9bd --- /dev/null +++ b/app/Events/CreateNewCustomField.php @@ -0,0 +1,27 @@ +customField = $customField; + } +} diff --git a/app/Events/DeleteCustomField.php b/app/Events/DeleteCustomField.php new file mode 100644 index 00000000..38d22fa3 --- /dev/null +++ b/app/Events/DeleteCustomField.php @@ -0,0 +1,27 @@ +customField = $customField; + } +} diff --git a/app/Events/EditCustomField.php b/app/Events/EditCustomField.php new file mode 100644 index 00000000..9bb15320 --- /dev/null +++ b/app/Events/EditCustomField.php @@ -0,0 +1,27 @@ +customField = $customField; + } +} diff --git a/app/Http/Controllers/Admin/CreateNewCustomField.php b/app/Http/Controllers/Admin/CreateNewCustomField.php index ed452eea..22abf4eb 100644 --- a/app/Http/Controllers/Admin/CreateNewCustomField.php +++ b/app/Http/Controllers/Admin/CreateNewCustomField.php @@ -4,8 +4,10 @@ namespace App\Http\Controllers\Admin; use App\Enumerations\CustomFieldResources; use App\Enumerations\CustomFieldTypes; +use App\Events\CreateNewCustomField as CreateNewCustomFieldEvent; use App\Http\Requests\NewCustomFieldRequest; use App\Models\CustomField; +use Illuminate\Support\Facades\Event; class CreateNewCustomField extends Controller { @@ -59,6 +61,9 @@ class CreateNewCustomField extends Controller $customField->save(); + // fire event about creating new custom field + Event::fire(new CreateNewCustomFieldEvent($customField)); + return redirect() ->route('customfields.new') ->with('success', trans('admin/customFields.successfullyCreated')); diff --git a/app/Http/Controllers/Admin/EditCustomField.php b/app/Http/Controllers/Admin/EditCustomField.php index a24dc1e9..9591125c 100644 --- a/app/Http/Controllers/Admin/EditCustomField.php +++ b/app/Http/Controllers/Admin/EditCustomField.php @@ -4,10 +4,13 @@ namespace App\Http\Controllers\Admin; use App\Enumerations\CustomFieldResources; use App\Enumerations\CustomFieldTypes; +use App\Events\DeleteCustomField; +use App\Events\EditCustomField as EditCustomFieldEvent; use App\Http\Controllers\Controller; use App\Http\Requests; use App\Http\Requests\EditCustomFieldRequest; use App\Models\CustomField; +use Illuminate\Support\Facades\Event; class EditCustomField extends Controller { @@ -60,6 +63,9 @@ class EditCustomField extends Controller // save changes into database $customField->save(); + // fire event about editing custom field + Event::fire(new EditCustomFieldEvent($customField)); + return redirect() ->route('customfields.edit', ['id' => $id]) ->with('success', trans('admin/customFields.successfullyEdited')); @@ -89,6 +95,9 @@ class EditCustomField extends Controller // delete item $field->delete(); + // fire event about editing custom field + Event::fire(new DeleteCustomField($field)); + // redirect back to overview return redirect() ->route('customfields.overview') diff --git a/app/Listeners/LogCreateCustomField.php b/app/Listeners/LogCreateCustomField.php new file mode 100644 index 00000000..5cd7c5f3 --- /dev/null +++ b/app/Listeners/LogCreateCustomField.php @@ -0,0 +1,37 @@ + $event->customField->id, + 'name' => $event->customField->name + ]; + + $this->saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'newCustomField'; + } +} diff --git a/app/Listeners/LogDeleteField.php b/app/Listeners/LogDeleteField.php new file mode 100644 index 00000000..07703ac5 --- /dev/null +++ b/app/Listeners/LogDeleteField.php @@ -0,0 +1,36 @@ + $event->customField->id, + 'name' => $event->customField->name + ]; + + $this->saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'deleteCustomField'; + } +} diff --git a/app/Listeners/LogEditCustomField.php b/app/Listeners/LogEditCustomField.php new file mode 100644 index 00000000..b28b0055 --- /dev/null +++ b/app/Listeners/LogEditCustomField.php @@ -0,0 +1,36 @@ + $event->customField->id, + 'name' => $event->customField->name + ]; + + $this->saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'editCustomField'; + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 4e7b739f..692dca25 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -19,6 +19,15 @@ class EventServiceProvider extends ServiceProvider 'App\Events\EditUser' => [ 'App\Listeners\LogEditUser', ], + 'App\Events\CreateNewCustomField' => [ + 'App\Listeners\LogCreateCustomField', + ], + 'App\Events\EditCustomField' => [ + 'App\Listeners\LogEditCustomField', + ], + 'App\Events\DeleteCustomField' => [ + 'App\Listeners\LogDeleteField', + ], // internal Laravel events - should work as auth.login and auth.logout, however it doesn't... 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\LogLogin' From b3c543f06c1b0954e0bdf1a36772047f96b2ff66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 00:37:45 +0100 Subject: [PATCH 25/29] FEATURE: prepare logging for settings (once it will exist) --- app/Events/ChangeSettings.php | 22 +++++++++++++++++ app/Listeners/LogChangeSettings.php | 33 ++++++++++++++++++++++++++ app/Providers/EventServiceProvider.php | 3 +++ 3 files changed, 58 insertions(+) create mode 100644 app/Events/ChangeSettings.php create mode 100644 app/Listeners/LogChangeSettings.php diff --git a/app/Events/ChangeSettings.php b/app/Events/ChangeSettings.php new file mode 100644 index 00000000..62452518 --- /dev/null +++ b/app/Events/ChangeSettings.php @@ -0,0 +1,22 @@ +saveLog($parameters); + } + + /** + * Getter for action name. Used only internally + * + * @return mixed + */ + protected function getName() + { + return 'changeSettings'; + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 692dca25..24f304ae 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -28,6 +28,9 @@ class EventServiceProvider extends ServiceProvider 'App\Events\DeleteCustomField' => [ 'App\Listeners\LogDeleteField', ], + 'App\Events\ChangeSettings' => [ + 'App\Listeners\LogChangeSettings', + ], // internal Laravel events - should work as auth.login and auth.logout, however it doesn't... 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\LogLogin' From ee55715093eae2041dbec427fc0ab010bd72d893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 01:57:12 +0100 Subject: [PATCH 26/29] FEATURE #1374: add logging for static pages --- app/Models/ActionLogType.php | 1 + app/Models/Content.php | 24 +++--- .../Events/CreateNewStaticPage.php | 25 +++++++ .../StaticPages/Events/DeleteStaticPage.php | 27 +++++++ modules/StaticPages/Events/EditStaticPage.php | 28 +++++++ .../Events/MakeDraftFromStaticPage.php | 28 +++++++ .../StaticPages/Events/PublishStaticPage.php | 29 +++++++ .../Controllers/Admin/CreateNewStaticPage.php | 3 + .../Http/Controllers/Admin/EditStaticPage.php | 75 +++++++++++++------ .../Listeners/LogCreateNewStaticPage.php | 27 +++++++ .../Listeners/LogDeleteStaticPage.php | 30 ++++++++ .../Listeners/LogEditStaticPage.php | 30 ++++++++ .../Listeners/LogMakeDraftFromStaticPage.php | 30 ++++++++ .../Listeners/LogPublishStaticPage.php | 30 ++++++++ .../Providers/EventServiceProvider.php | 40 ++++++++++ .../Providers/StaticPagesServiceProvider.php | 32 +++++++- 16 files changed, 424 insertions(+), 35 deletions(-) create mode 100644 modules/StaticPages/Events/CreateNewStaticPage.php create mode 100644 modules/StaticPages/Events/DeleteStaticPage.php create mode 100644 modules/StaticPages/Events/EditStaticPage.php create mode 100644 modules/StaticPages/Events/MakeDraftFromStaticPage.php create mode 100644 modules/StaticPages/Events/PublishStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogCreateNewStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogDeleteStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogEditStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogPublishStaticPage.php create mode 100644 modules/StaticPages/Providers/EventServiceProvider.php diff --git a/app/Models/ActionLogType.php b/app/Models/ActionLogType.php index 420e4d70..a7a0570f 100644 --- a/app/Models/ActionLogType.php +++ b/app/Models/ActionLogType.php @@ -14,6 +14,7 @@ class ActionLogType extends Model protected $fillable = [ 'name', + 'string_id', 'value' ]; diff --git a/app/Models/Content.php b/app/Models/Content.php index c4224f31..b86249cc 100644 --- a/app/Models/Content.php +++ b/app/Models/Content.php @@ -2,7 +2,6 @@ namespace App\Models; -use App\Http\Requests\Request; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; @@ -59,21 +58,26 @@ class Content extends Model /** * Updates current model with information about changed columns * - * @param array $fields - * @param Request $request + * @param array $fields + * @param array $request * * @return int number of changed columns */ - public function updateWithHistory(array $fields, Request $request) + public function updateWithHistory(array $fields, array $request) { $editBatch = uniqid(); $changed = 0; foreach ($fields as $fieldDB => $fieldRequest) { - // remove any whitespaces around real content - $request->$fieldRequest = trim($request->$fieldRequest); + // ignore non-existing fields + if (!isset($this->$fieldDB) || !isset($request[$fieldRequest])) { + continue; + } - if ($this->$fieldDB != $request->$fieldRequest) { + // remove any whitespaces around real content + $request[$fieldRequest] = trim($request[$fieldRequest]); + + if ($this->$fieldDB != $request[$fieldRequest]) { // setup history object $history = [ @@ -82,14 +86,14 @@ class Content extends Model 'edit_batch' => $editBatch, 'column' => $fieldRequest, 'old_value' => $this->$fieldDB, - 'new_value' => $request->$fieldRequest + 'new_value' => $request[$fieldRequest] ]; // save history ContentHistory::create($history); // save change into database - $this->$fieldDB = $request->$fieldRequest; + $this->$fieldDB = $request[$fieldRequest]; $changed++; } @@ -97,7 +101,7 @@ class Content extends Model $this->save(); - return $changed; + return [$editBatch, $changed]; } /** diff --git a/modules/StaticPages/Events/CreateNewStaticPage.php b/modules/StaticPages/Events/CreateNewStaticPage.php new file mode 100644 index 00000000..72b2ec7f --- /dev/null +++ b/modules/StaticPages/Events/CreateNewStaticPage.php @@ -0,0 +1,25 @@ +page = $page; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/DeleteStaticPage.php b/modules/StaticPages/Events/DeleteStaticPage.php new file mode 100644 index 00000000..4df44630 --- /dev/null +++ b/modules/StaticPages/Events/DeleteStaticPage.php @@ -0,0 +1,27 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/EditStaticPage.php b/modules/StaticPages/Events/EditStaticPage.php new file mode 100644 index 00000000..ebfc4f29 --- /dev/null +++ b/modules/StaticPages/Events/EditStaticPage.php @@ -0,0 +1,28 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/MakeDraftFromStaticPage.php b/modules/StaticPages/Events/MakeDraftFromStaticPage.php new file mode 100644 index 00000000..fabed846 --- /dev/null +++ b/modules/StaticPages/Events/MakeDraftFromStaticPage.php @@ -0,0 +1,28 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/PublishStaticPage.php b/modules/StaticPages/Events/PublishStaticPage.php new file mode 100644 index 00000000..8e1b6109 --- /dev/null +++ b/modules/StaticPages/Events/PublishStaticPage.php @@ -0,0 +1,29 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php index c0ba70d7..75a6fb05 100644 --- a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php @@ -3,6 +3,7 @@ namespace Modules\StaticPages\Http\Controllers\Admin; use App\Enumerations\ContentStatuses; use App\Models\Content; +use Illuminate\Support\Facades\Event; use Modules\StaticPages\Http\Requests\CreateNewStaticPageRequest; class CreateNewStaticPage extends Controller @@ -50,6 +51,8 @@ class CreateNewStaticPage extends Controller $page->save(); + Event::fire(new \Modules\StaticPages\Events\CreateNewStaticPage($page)); + return redirect() ->route('staticpage.new') ->with('success', trans('staticpages::admin.successfullyCreated')); diff --git a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php index 826eea47..412be1dd 100644 --- a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php @@ -3,6 +3,11 @@ namespace Modules\StaticPages\Http\Controllers\Admin; use App\Enumerations\ContentStatuses; use App\Models\Content; +use Illuminate\Support\Facades\Event; +use Modules\StaticPages\Events\DeleteStaticPage; +use Modules\StaticPages\Events\EditStaticPage as EditStaticPageEvent; +use Modules\StaticPages\Events\MakeDraftFromStaticPage; +use Modules\StaticPages\Events\PublishStaticPage; use Modules\StaticPages\Http\Requests\EditStaticPageRequest; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -65,7 +70,7 @@ class EditStaticPage extends Controller ]; // save new values with history - $changedColumns = $page->updateWithHistory($fields, $request); + list($revision, $changedColumns) = $page->updateWithHistory($fields, $request->all()); // was something changed? if ($changedColumns == 0) { @@ -74,6 +79,9 @@ class EditStaticPage extends Controller ->with('error', trans('staticpages::admin.nothingToEdit')); } + // fire event with + Event::fire(new EditStaticPageEvent($page, $revision)); + // something was changed, inform user return redirect() ->route('staticpage.edit', ['id' => $page->id]) @@ -108,22 +116,34 @@ class EditStaticPage extends Controller // try to find this page $page = Content::where('module_handler', config('staticpages.handler')) ->findOrFail($id); - - // page found, save status - $page->status = $status; - - $page->save(); - - // redirect back to overview with info for user - return redirect() - ->route('staticpage.overview') - ->with('success', trans('staticpages::admin.statusChanged')); } catch (NotFoundHttpException $e) { // page not found return redirect() ->route('staticpage.overview') ->with('error', trans('staticpages::admin.invalidPage')); } + + // try to change the page + list ($revision, $changedColumns) = $page->updateWithHistory(['status' => 'status'], ['status' => $status]); + + // was something changed? + if ($changedColumns == 0) { + return redirect() + ->route('staticpage.edit', ['id' => $page->id]) + ->with('error', trans('staticpages::admin.nothingToEdit')); + } + + // fire events + if ($status != Content::STATUS_DRAFT) { + Event::fire(new PublishStaticPage($page, $revision)); + } else { + Event::fire(new MakeDraftFromStaticPage($page, $revision)); + } + + // redirect back to overview with info for user + return redirect() + ->route('staticpage.overview') + ->with('success', trans('staticpages::admin.statusChanged')); } /** @@ -139,24 +159,31 @@ class EditStaticPage extends Controller // try to find this page $page = Content::where('module_handler', config('staticpages.handler')) ->findOrFail($id); - - // page found, save status - $page->status = Content::STATUS_DELETED; - - $page->save(); - - // redirect back to overview with info for user - return redirect() - ->route('staticpage.overview') - ->with('success', trans('staticpages::admin.pageDeleted', [ - 'name' => $page->title, - 'url' => $page->url - ])); } catch (NotFoundHttpException $e) { // page not found return redirect() ->route('staticpage.overview') ->with('error', trans('staticpages::admin.invalidPage')); } + + list ($revision, $changedColumns) = $page->updateWithHistory(['status' => 'status'], ['status' => Content::STATUS_DELETED]); + + // was something changed? + if ($changedColumns == 0) { + return redirect() + ->route('staticpage.edit', ['id' => $page->id]) + ->with('error', trans('staticpages::admin.nothingToEdit')); + } + + // trigger delete event + Event::fire(new DeleteStaticPage($page, $revision)); + + // redirect back to overview with info for user + return redirect() + ->route('staticpage.overview') + ->with('success', trans('staticpages::admin.pageDeleted', [ + 'name' => $page->title, + 'url' => $page->url + ])); } } \ No newline at end of file diff --git a/modules/StaticPages/Listeners/LogCreateNewStaticPage.php b/modules/StaticPages/Listeners/LogCreateNewStaticPage.php new file mode 100644 index 00000000..f85c7a1f --- /dev/null +++ b/modules/StaticPages/Listeners/LogCreateNewStaticPage.php @@ -0,0 +1,27 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogDeleteStaticPage.php b/modules/StaticPages/Listeners/LogDeleteStaticPage.php new file mode 100644 index 00000000..ee2b09ec --- /dev/null +++ b/modules/StaticPages/Listeners/LogDeleteStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogEditStaticPage.php b/modules/StaticPages/Listeners/LogEditStaticPage.php new file mode 100644 index 00000000..d70a3d37 --- /dev/null +++ b/modules/StaticPages/Listeners/LogEditStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php b/modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php new file mode 100644 index 00000000..7b6eeb4c --- /dev/null +++ b/modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogPublishStaticPage.php b/modules/StaticPages/Listeners/LogPublishStaticPage.php new file mode 100644 index 00000000..2afd9e55 --- /dev/null +++ b/modules/StaticPages/Listeners/LogPublishStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Providers/EventServiceProvider.php b/modules/StaticPages/Providers/EventServiceProvider.php new file mode 100644 index 00000000..c97fbec5 --- /dev/null +++ b/modules/StaticPages/Providers/EventServiceProvider.php @@ -0,0 +1,40 @@ + [ + 'Modules\StaticPages\Listeners\LogCreateNewStaticPage' + ], + 'Modules\StaticPages\Events\EditStaticPage' => [ + 'Modules\StaticPages\Listeners\LogEditStaticPage' + ], + 'Modules\StaticPages\Events\PublishStaticPage' => [ + 'Modules\StaticPages\Listeners\LogPublishStaticPage' + ], + 'Modules\StaticPages\Events\DeleteStaticPage' => [ + 'Modules\StaticPages\Listeners\LogDeleteStaticPage' + ], + ]; + + /** + * Register any other events for your application. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return void + */ + public function boot(DispatcherContract $events) + { + parent::boot($events); + } +} diff --git a/modules/StaticPages/Providers/StaticPagesServiceProvider.php b/modules/StaticPages/Providers/StaticPagesServiceProvider.php index 7429becf..403c222b 100644 --- a/modules/StaticPages/Providers/StaticPagesServiceProvider.php +++ b/modules/StaticPages/Providers/StaticPagesServiceProvider.php @@ -1,6 +1,7 @@ app->register('Modules\StaticPages\Providers\EventServiceProvider'); } /** @@ -58,6 +60,34 @@ class StaticPagesServiceProvider extends ServiceProvider 'name' => 'staticpages::module.name', 'description' => 'staticpages::module.description' ]); + + // insert action log types into database + ActionLogType::create([ + 'string_id' => 'staticpages::createNew', + 'name' => 'staticpages::log.nameCreateNew', + 'value' => 'staticpages::log.nameCreateNew' + ]); + ActionLogType::create([ + 'string_id' => 'staticpages::edit', + 'name' => 'staticpages::log.nameEdit', + 'value' => 'staticpages::log.edit' + ]); + ActionLogType::create([ + 'string_id' => 'staticpages::delete', + 'name' => 'staticpages::log.nameDelete', + 'value' => 'staticpages::log.delete' + ]); + ActionLogType::create([ + 'string_id' => 'staticpages::makeDraft', + 'name' => 'staticpages::log.nameMakeDraft', + 'value' => 'staticpages::log.makeDraft' + ]); + + ActionLogType::create([ + 'string_id' => 'staticpages::publish', + 'name' => 'staticpages::log.namePublish', + 'value' => 'staticpages::log.publish' + ]); } } From a880ab9e152731235a6d215076f0ba220ce8852b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 11:59:57 +0100 Subject: [PATCH 27/29] FEATURE #1401: add middleware for registering modules --- app/Handlers/Handler.php | 37 +++++++++++++++++++++-- app/Http/Kernel.php | 1 + app/Http/Middleware/ModuleRegistrator.php | 33 ++++++++++++++++++++ config/app.php | 1 + 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 app/Http/Middleware/ModuleRegistrator.php diff --git a/app/Handlers/Handler.php b/app/Handlers/Handler.php index 25ade56d..d7d4432e 100644 --- a/app/Handlers/Handler.php +++ b/app/Handlers/Handler.php @@ -1,6 +1,39 @@ [ diff --git a/app/Http/Middleware/ModuleRegistrator.php b/app/Http/Middleware/ModuleRegistrator.php new file mode 100644 index 00000000..8d2071af --- /dev/null +++ b/app/Http/Middleware/ModuleRegistrator.php @@ -0,0 +1,33 @@ + $module) { + $handler = config($module->getName() . '.handler'); + + // try to register menus + if (method_exists($handler, 'registerAdminMenu') && \Auth::check()) { + call_user_func([$handler, 'registerAdminMenu'], \Auth::user()); + } + } + + return $next($request); + } +} diff --git a/config/app.php b/config/app.php index 0d4c5cc6..0fd1d264 100644 --- a/config/app.php +++ b/config/app.php @@ -182,6 +182,7 @@ return [ 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Menu' => Pingpong\Menus\MenuFacade::class, + 'Module' => Pingpong\Modules\Facades\Module::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, From 3a0f7c7cd4288123f9c63ee2e0e2684e7eecce9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 12:00:39 +0100 Subject: [PATCH 28/29] FEATURE: move menu registration into handler class. --- modules/StaticPages/Handlers/StaticPage.php | 29 +++++++++++++++++-- .../Providers/StaticPagesServiceProvider.php | 7 ----- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/modules/StaticPages/Handlers/StaticPage.php b/modules/StaticPages/Handlers/StaticPage.php index f5d52334..8bfe0542 100644 --- a/modules/StaticPages/Handlers/StaticPage.php +++ b/modules/StaticPages/Handlers/StaticPage.php @@ -2,9 +2,34 @@ namespace Modules\StaticPages\Handlers; use App\Handlers\Handler; +use App\Models\Content; +use App\Models\User; -class StaticPage extends Handler { - public function render() +class StaticPage extends Handler +{ + public static function registerAdminMenu(User $user) + { + parent::registerAdminMenu($user); + + // register links in admin menu + $menu = \Menu::instance('mainMenu'); + $menu->dropdown(trans('staticpages::adminMenu.staticPages'), function ($submenu) use ($user) { + if ($user->role == User::ROLE_ADMIN) { + $submenu->route('staticpage.new', trans('staticpages::adminMenu.new')); + } + $submenu->route('staticpage.overview', trans('staticpages::adminMenu.overview')); + }, 15, ['icon' => 'fa fa-newspaper-o']); + } + + /** + * Render given module into visitor area. + * + * @param Content $content DB model from table contents + * @param array $parameters parameters used for modifications/custom settings of given model + * + * @return mixed + */ + public function render(Content $content, $parameters) { // TODO: Implement render() method. } diff --git a/modules/StaticPages/Providers/StaticPagesServiceProvider.php b/modules/StaticPages/Providers/StaticPagesServiceProvider.php index 403c222b..3c2d544e 100644 --- a/modules/StaticPages/Providers/StaticPagesServiceProvider.php +++ b/modules/StaticPages/Providers/StaticPagesServiceProvider.php @@ -25,13 +25,6 @@ class StaticPagesServiceProvider extends ServiceProvider $this->registerTranslations(); $this->registerConfig(); $this->registerViews(); - - // register links in admin menu - $menu = \Menu::instance('mainMenu'); - $menu->dropdown(trans('staticpages::adminMenu.staticPages'), function ($submenu) { - $submenu->route('staticpage.new', trans('staticpages::adminMenu.new')); - $submenu->route('staticpage.overview', trans('staticpages::adminMenu.overview')); - }, 15, ['icon' => 'fa fa-newspaper-o']); } /** From 780ee89d21761d6555323b7e391eab8c48ce90db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 12:25:53 +0100 Subject: [PATCH 29/29] FEATURE #1387: divide routes into groups - one for admin, the rest for other users --- app/Http/Kernel.php | 1 + app/Http/Middleware/RequireAdminRole.php | 28 +++++++++ app/Http/routes.php | 80 +++++++++++++----------- resources/lang/en/auth.php | 1 + 4 files changed, 73 insertions(+), 37 deletions(-) create mode 100644 app/Http/Middleware/RequireAdminRole.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 109467ca..ab84a479 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -46,6 +46,7 @@ class Kernel extends HttpKernel */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, + 'onlyAdmin' => \App\Http\Middleware\RequireAdminRole::class, // 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, diff --git a/app/Http/Middleware/RequireAdminRole.php b/app/Http/Middleware/RequireAdminRole.php new file mode 100644 index 00000000..f0ea40b1 --- /dev/null +++ b/app/Http/Middleware/RequireAdminRole.php @@ -0,0 +1,28 @@ +role != User::ROLE_ADMIN) { + return redirect() + ->back() + ->with('error', trans('auth.accessDenied')); + } + + return $next($request); + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index e0582b89..763d8c64 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -28,22 +28,55 @@ Route::group([ 'prefix' => 'admin' ], function () { + // these routes are available only for user with role admin + Route::group(['middleware' => 'onlyAdmin'], function () { + // display form for creating new user + Route::get('users/new', 'CreateNewUser@getNewUser') + ->name('users.new'); + + // POST methods + // display form for creating new user + Route::post('users/new', 'CreateNewUser@postRegistration') + ->name('users.newPost'); + + // display form for edit of existing user + Route::get('users/edit/{id}', 'EditUser@getEditExistingUser') + ->name('users.edit'); + + // form for adding new custom field + Route::get('customfields/new', 'CreateNewCustomField@getNew') + ->name('customfields.new'); + + // form for editing custom field + Route::get('customfields/edit/{id}', 'EditCustomField@getEditCustomField') + ->name('customfields.edit'); + + // form for adding new custom field + Route::post('customfields/new', 'CreateNewCustomField@postNew') + ->name('customfields.newPost'); + + // form for editing custom field + Route::post('customfields/edit/{id}', 'EditCustomField@postEditCustomField') + ->name('customfields.editPost'); + + Route::get('customfields/delete/{id}', 'EditCustomField@deleteCustomField') + ->name('customfields.delete'); + }); + + // these routes are available for all logged (authenticated) users + // display dashboard with some usefull information Route::get('/', 'Dashboard@getIndex') ->name('admin.dashboard'); - // display form for creating new user - Route::get('users/new', 'CreateNewUser@getNewUser') - ->name('users.new'); - - // display form for edit of existing user - Route::get('users/edit/{id}', 'EditUser@getEditExistingUser') - ->name('users.edit'); - // display user detail in admin Route::get('users/detail/{id?}', 'UserDetail@getDetail') ->name('users.detail'); + // method for saving edited data of user + Route::post('users/edit/{id}', 'EditUser@postEdit') + ->name('users.editPost'); + // display list of all users registered into our system Route::get('users/overview/{state?}/{perPage?}', 'UsersOverview@getOverview') ->name('users.overview'); @@ -55,25 +88,6 @@ Route::group([ Route::get('customfields/overview', 'CustomFieldsOverview@getOverview') ->name('customfields.overview'); - // form for adding new custom field - Route::get('customfields/new', 'CreateNewCustomField@getNew') - ->name('customfields.new'); - - // form for editing custom field - Route::get('customfields/edit/{id}', 'EditCustomField@getEditCustomField') - ->name('customfields.edit'); - - // form for adding new custom field - Route::post('customfields/new', 'CreateNewCustomField@postNew') - ->name('customfields.newPost'); - - // form for editing custom field - Route::post('customfields/edit/{id}', 'EditCustomField@postEditCustomField') - ->name('customfields.editPost'); - - Route::get('customfields/delete/{id}', 'EditCustomField@deleteCustomField') - ->name('customfields.delete'); - // logout method Route::get('logout', function () { @@ -84,14 +98,6 @@ Route::group([ return redirect() ->route('login') ->with('success', trans('admin/common.logoutSuccessfull')); - })->name('logout'); - - // POST methods - // display form for creating new user - Route::post('users/new', 'CreateNewUser@postRegistration') - ->name('users.newPost'); - - // method for saving edited data of user - Route::post('users/edit/{id}', 'EditUser@postEdit') - ->name('users.editPost'); + }) + ->name('logout'); }); diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index e5506df2..48caf09f 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -15,5 +15,6 @@ return [ 'failed' => 'These credentials do not match our records.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + 'accessDenied' => 'You cannot access this resource' ];